.
This commit is contained in:
@@ -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()?;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user