qualia_client_core/engine/
ingestion.rs1use qualia_core_db::sparql_library::parsers::csv_parser::{parse_csv_to_quins, CsvMappingProfile};
2use qualia_core_db::sparql_library::parsers::json_parser::{
3 parse_json_to_quins, JsonMappingProfile,
4};
5use qualia_core_db::sparql_library::serialisers::csv_serializer::{
6 serialize_quins_to_csv, CsvSerializationProfile,
7};
8use qualia_core_db::sparql_library::serialisers::json_serializer::{
9 serialize_quins_to_json, JsonSerializationProfile,
10};
11use qualia_core_db::sparql_library::serialisers::rdf_serializers::{
12 serialize_to_jsonld, serialize_to_n3, serialize_to_nquads, serialize_to_ntriples,
13 serialize_to_trig, serialize_to_turtle,
14};
15use serde::{Deserialize, Serialize};
16use std::fs::File;
17use std::io::{BufReader, BufWriter};
18
19#[derive(Serialize, Deserialize, Debug, Clone)]
20pub struct SemanticBookmark {
21 pub entity: String,
22 pub tags: Vec<String>,
23}
24
25#[derive(Serialize, Deserialize, Debug, Clone)]
26pub struct IngestionResult {
27 pub message: String,
28 pub bookmarks: Vec<SemanticBookmark>,
29}
30
31pub fn process_pdf(file_name: &str) -> Result<IngestionResult, String> {
34 println!("Edge VLM parsing document: {}", file_name);
35
36 let simulated_bookmarks = vec![
37 SemanticBookmark {
38 entity: format!("Document Root: {}", file_name),
39 tags: vec!["Source:PDF".to_string(), "Status:Ingested".to_string()],
40 },
41 SemanticBookmark {
42 entity: "Article 12: Right to Privacy".to_string(),
43 tags: vec![
44 "UN-HR".to_string(),
45 "HCAI:Agency".to_string(),
46 "Protection-Mandate".to_string(),
47 ],
48 },
49 SemanticBookmark {
50 entity: "Informed Consent Schema".to_string(),
51 tags: vec![
52 "HCAI:Agreements".to_string(),
53 "ODRL".to_string(),
54 "Proxy-Consent".to_string(),
55 ],
56 },
57 ];
58
59 Ok(IngestionResult {
60 message: format!(
61 "Successfully mapped {} to dynamic ontology registry.",
62 file_name
63 ),
64 bookmarks: simulated_bookmarks,
65 })
66}
67
68pub fn parse_csv(
70 file_path: &str,
71 profile: &mut CsvMappingProfile,
72) -> Result<Vec<qualia_core_db::NQuin>, String> {
73 let file = File::open(file_path).map_err(|e| format!("Failed to open CSV: {}", e))?;
74 let mut quins = Vec::new();
75
76 parse_csv_to_quins(file, profile, |quin| {
77 quins.push(quin);
78 })?;
79
80 Ok(quins)
81}
82
83pub fn parse_json(
85 file_path: &str,
86 profile: &JsonMappingProfile,
87) -> Result<Vec<qualia_core_db::NQuin>, String> {
88 let file = File::open(file_path).map_err(|e| format!("Failed to open JSON: {}", e))?;
89 let reader = BufReader::new(file);
90 let mut quins = Vec::new();
91
92 parse_json_to_quins(reader, profile, |quin| {
93 quins.push(quin);
94 })?;
95
96 Ok(quins)
97}
98
99pub fn serialize_to_csv_file(
101 file_path: &str,
102 quins: &[qualia_core_db::NQuin],
103 profile: &CsvSerializationProfile,
104) -> Result<(), String> {
105 let file = File::create(file_path).map_err(|e| format!("Failed to create CSV file: {}", e))?;
106 let mut writer = BufWriter::new(file);
107 serialize_quins_to_csv(&mut writer, quins, profile)?;
108 Ok(())
109}
110
111pub fn serialize_to_json_file(
113 file_path: &str,
114 quins: &[qualia_core_db::NQuin],
115 profile: &JsonSerializationProfile,
116) -> Result<(), String> {
117 let file = File::create(file_path).map_err(|e| format!("Failed to create JSON file: {}", e))?;
118 let mut writer = BufWriter::new(file);
119 serialize_quins_to_json(&mut writer, quins, profile)?;
120 Ok(())
121}
122
123pub fn serialize_to_rdf_file(
125 file_path: &str,
126 quins: &[qualia_core_db::NQuin],
127 format: RdfFormat,
128) -> Result<(), String> {
129 let file = File::create(file_path).map_err(|e| format!("Failed to create RDF file: {}", e))?;
130 let mut writer = BufWriter::new(file);
131
132 match format {
133 RdfFormat::NTriples => serialize_to_ntriples(&mut writer, quins)?,
134 RdfFormat::Turtle => serialize_to_turtle(&mut writer, quins)?,
135 RdfFormat::NQuads => serialize_to_nquads(&mut writer, quins)?,
136 RdfFormat::TriG => serialize_to_trig(&mut writer, quins)?,
137 RdfFormat::N3 => serialize_to_n3(&mut writer, quins)?,
138 RdfFormat::JsonLd => serialize_to_jsonld(&mut writer, quins)?,
139 }
140
141 Ok(())
142}
143
144#[derive(Debug, Clone, Copy)]
145pub enum RdfFormat {
146 NTriples,
147 Turtle,
148 NQuads,
149 TriG,
150 N3,
151 JsonLd,
152}