This commit is contained in:
2026-08-20 20:43:18 -04:00
parent 025392b129
commit fcb1da7e0d
21 changed files with 637 additions and 178 deletions
+12 -6
View File
@@ -5,7 +5,7 @@ use oxigraph::sparql::{QueryResults, SparqlEvaluator};
use oxigraph::sparql::results::{QueryResultsFormat, QueryResultsSerializer};
use oxigraph::store::Store;
use tonic::{Request, Response, Status};
use tracing::{debug_span, field};
use tracing::{debug, debug_span, field};
use gl_inference::proto::ontology_server::Ontology;
use gl_inference::proto::{OntologyClearResponse, OntologyLoadRequest, OntologyLoadResponse, OntologyQueryRequest, OntologyQueryResponse};
@@ -96,10 +96,11 @@ impl Ontology for OntologyService {
let request = request.get_ref();
let mut response = OntologyQueryResponse::default();
let provided_dataset;
let graph_name = if let Some(turtle) = &request.turtle {
let random_graph_identifier = BlankNode::default();
let graph_name = GraphName::NamedNode(NamedNode::new_unchecked(format!("https://graphofliberty.org/inference/{}", random_graph_identifier.as_str())));
let dataset = RdfParser::from_format(RdfFormat::Turtle)
provided_dataset = RdfParser::from_format(RdfFormat::Turtle)
.for_slice(&turtle)
.filter_map(Result::ok)
.map(|mut quad| {
@@ -107,7 +108,7 @@ impl Ontology for OntologyService {
quad
}).collect::<Dataset>();
self.ontology.extend(&dataset)
self.ontology.extend(&provided_dataset)
.map_err(|err| Status::internal(err.to_string()))?;
let inferences = crate::logic::infer(0, &self.ontology, graph_name.as_ref())
@@ -115,11 +116,14 @@ impl Ontology for OntologyService {
span.record("inferences", inferences);
graph_name
} else {
provided_dataset = Dataset::new();
ONTOLOGY_GRAPH.into_owned()
};
let mut output_buffer = Vec::new();
if let Some(sparql_query) = &request.sparql_query {
debug!("SPARQL Query: {sparql_query}");
let mut evaluator = SparqlEvaluator::new();
for (name, iri) in &request.prefixes {
evaluator = evaluator.with_prefix(name, iri)
@@ -185,11 +189,13 @@ impl Ontology for OntologyService {
}
let mut serializer = serializer.for_writer(output_buffer);
let graph = self.ontology
let resulting_dataset = self.ontology
.quads_for_pattern(None, None, None, Some(graph_name.as_ref()))
.filter_map(Result::ok);
for triple in graph {
serializer.serialize_triple(triple.as_ref())?;
for quad in resulting_dataset {
if !(request.inferences_only && provided_dataset.contains(quad.as_ref())) {
serializer.serialize_triple(quad.as_ref())?;
}
}
output_buffer = serializer.finish()?;
}