SPARQL Query ничего не возвращает из определенного RDF-графа
После создания RDF-графа с использованием RDFLib в python для применения онтологии датчика (я использовал для этого онтологию датчика, также использовал пространство имен и Bnode, который является пустым узлом, представляющим ресурс, для которого не указан URI или литерал). Я попытался запросить данные в java с помощью sparql, поэтому мне пришлось сначала сохранить график с использованием Jena TDB, а затем выполнить действительно простой запрос:
String qs1 = "SELECT * {?s ?p ?o} LIMIT 10" ;
и я использовал
String source = "/path/graph.rdf";
FileManager.get().readModel( tdb, source);
dataset.begin(ReadWrite.READ) ;
String qs1 = "SELECT * {?s ?o ?p } " ;
try(QueryExecution qExec = QueryExecutionFactory.create(qs1, dataset)) {
ResultSet rs = qExec.execSelect() ;
ResultSetFormatter.outputAsJSON(rs) ;
}`
выполнить запрос и наблюдать данные в формате json. Проблема, с которой я сталкиваюсь, состоит в том, что это ничего не возвращает! это вывод:
{
"head": {
"vars": [ "s" , "o" , "p" ]
} ,
"results": {
"bindings": [
]
}
}
Я сделал простой код, чтобы проверить, хранятся ли данные:
StmtIterator iter = tdb.listStatements();
// print out the predicate, subject and object of each statement
while (iter.hasNext()) {
Statement stmt = iter.nextStatement(); // get next statement
Resource subject = stmt.getSubject(); // get the subject
Property predicate = stmt.getPredicate(); // get the predicate
RDFNode object = stmt.getObject(); // get the object
System.out.print(subject.toString());
System.out.print(" " + predicate.toString() + " ");
if (object instanceof Resource) {
System.out.print(object.toString());
} else {
// object is a literal
System.out.print(" \"" + object.toString() + "\"");
}
System.out.println(" .");
}
и действительно, они хранятся в базе данных TDB. Это некоторые из результатов, которые включают в себя причудливое представление Bnode и, согласно некоторым статьям, способ, которым TDB реагирует с Bnode, что делает его похожим на это.
6f98bd70:1543430b66e:-7fc3 http://www.loa-cnr.it/ontologies/DUL.owl#hasDataValue "37^^file:///data/rbe/workspace/openmtc-python/openmtc-gevent/xsd.float" .
-6f98bd70:1543430b66e:-7fc2 http://purl.oclc.org/NET/UNIS/fiware/iot-lite#hasunit http://purl.oclc.org/NET/ssnx/qu/unit#hPa .
-6f98bd70:1543430b66e:-7fc2 http://www.loa-cnr.it/ontologies/DUL.owl#hasDataValue "996.94^^file:///data/rbe/workspace/openmtc-python/openmtc-gevent/xsd.float" .
-6f98bd70:1543430b66e:-7fc1 http://purl.oclc.org/NET/UNIS/fiware/iot-lite#hasunit http://purl.oclc.org/NET/ssnx/qu/unit# .
-6f98bd70:1543430b66e:-7fc1 http://www.loa-cnr.it/ontologies/DUL.owl#hasDataValue "OK^^file:///data/rbe/workspace/openmtc-python/openmtc-gevent/xsd.float" .
-6f98bd70:1543430b66e:-7fc0 http://purl.oclc.org/NET/UNIS/fiware/iot-lite#hasunit http://purl.oclc.org/NET/ssnx/qu/unit#C .
-6f98bd70:1543430b66e:-7fc0 http://www.loa-cnr.it/ontologies/DUL.owl#hasDataValue "24.2^^file:///data/rbe/workspace/openmtc-python/openmtc-gevent/xsd.float" .
Я также попробовал другой график, который использует онтологию друга друга, и он работает нормально и правильно. Возможно ли, что Bnode вызывает эту проблему?
2 ответа
Пытаться: SELECT * { { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o } } }
Ваши комментарии предполагают, что данные находятся в именованном графике, но вы задали запрос только для неназванного графика / графика по умолчанию. Предлагаемый запрос находит все, где угодно в наборе данных.
Поскольку @AndyS отметил, что предложенный запрос работает нормально. Если вы не хотите использовать объединительную часть, просто сделайте то, что предложил Энди, добавив название нужного вам графика. Должно быть так:
QueryExecution qExec = QueryExecutionFactory.create(qs1, YourGraphNameHERE));
ResultSet rs = qExec.execSelect() ;
ResultSetFormatter.outputAsJSON(rs) ;