在Python中创建使用RDFLib申请的传感器本体(I用于该传感器本体,用过也命名空间和B节点,其是表示用于其中的资源的空节点RDF图后没有给出URI或文字)。我试图查询中使用SPARQL Java中的数据因此我不得不存储第一使用Jena的TDB然后我执行一个非常简单的查询其是图:SPARQL查询返回从一个特定的RDF图没什么
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是否有可能导致此问题?
有两个问题:(i)您确定查询是针对正确的图执行的吗? (ii)您向我们展示了结果集“rs”的一个用法,但在此之前您是否在做任何事情? ResultSets默认情况下只允许您访问一次结果。 –
@Joshua我用我使用ResultSet的代码编辑了我的问题。我居然在TDB一个与FOAF和我创建了一个挽救了两个不同的图形,每次我执行它让我回的数据从FOAF图的查询时间,因此我改变了数据集目录到其他路径,因此将只存储一个图形。 – raeX
我不[T在我面前的文档,但我认为'FileManager.get()readModel(TDB,源);'读取内容到模型'tdb',但你使用'dataset'为您的查询。 'tdb'实际上是'dataset'中的模型吗? –