У нас возникают проблемы с надежной отправкой запросов sparql для нескольких графиков с использованием предложения sparql FROM в наборе данных Jena.
Вот пример проблемы:
final String subject = "http://example.com/ont/breakfast#espresso";
final String graph1 = "http://example.com/ont/breakfast/graph#espresso_definition";
final String graph2 = "http://example.com/ont/breakfast/graph#espresso_decoration";
// Add some triples to graphs within the dataset
Dataset dataset = DatasetFactory.create();
Model modelG1 = dataset.getNamedModel(graph1);
Resource espressoTypeG1 = modelG1.createResource(subject)
.addProperty(RDF.type, OWL.Class);
Resource espressoLabelG1 = modelG1.createResource(subject)
.addProperty(RDFS.label, "Espresso");
Model modelG2 = dataset.getNamedModel(graph2);
Resource espressoLabelG2 = modelG2.createResource(subject)
.addProperty(RDFS.label, "Black Gold");
// The query to execute - returns no results
String queryString = "select * FROM <" + graph1 + "> FROM <" + graph2 + "> " +
"{ <" + subject + "> ?p ?o }";
// This, however, works:
// String queryString = "select * { graph ?g { <" + subject + "> ?p ?o } }";
// Run the query
Query query = QueryFactory.create(queryString);
try (QueryExecution qe = QueryExecutionFactory.create(query, dataset)) {
ResultSet results = qe.execSelect();
while (results.hasNext()) {
QuerySolution result = results.next();
System.out.println(result);
}
}
Сочетаниевыражение values и ключевое слово graph помогли нам в большинстве сценариев, где нам нужно обрабатывать несколько графиков в одном запросе.Есть некоторые запросы, в которых это становится довольно громоздким или совершенно неэффективным.
Что мы можем сделать, чтобы правильно выполнить запрос по объединению моделей в одном наборе данных?
Обратите внимание, что запросы не известны во время компиляции, поэтому мы не можем полагаться на ручное создание объединений модель s в коде Java.Кроме того, данные обычно добавляются с использованием комбинации загрузки из файлов, обновления sparql и вызовов dataset.asDatasetGraph (). Add (...) .