是否可以在不编写sqarql-queries的情况下查询Model
中的数据?向模型添加资源或资源的属性可以轻松完成,但我还没有发现,如果有更有效的方法来查询Model
中的数据而不是使用下面的代码:
String sparql = "SELECT ?thing ?str WHERE { " +
"?thing a <" + THING + "> . " +
"?thing <" + HAS_STRING + "> ?str . " +
"FILTER (?str = \"" + s + "\") . }";
Query qry = QueryFactory.create(sparql);
QueryExecution qe = QueryExecutionFactory.create(qry, getModel());
ResultSet rs = qe.execSelect();
while(rs.hasNext())
{
QuerySolution sol = rs.nextSolution();
RDFNode str = sol.get("str");
RDFNode thing = sol.get("thing");
...
}
qe.close();
答案 0 :(得分:5)
您可以使用Jena模型上提供的列表*方法: http://incubator.apache.org/jena/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html
例如,model.listStatements()或model.listStatements((Resource)null,RDF.type,(RDFNode)null)等。
您可以在此处找到model.listStatements()的示例: https://github.com/castagna/jena-examples/blob/995d7acf8fcb3f9a8f7264dfd0902cdddfc00279/src/main/java/org/apache/jena/examples/ExampleAPI_01.java
另请参阅Jena网站上Jena教程中的“查询模型”部分: http://incubator.apache.org/jena/tutorials/rdf_api.html#ch-Querying%20a%20Model
最后一条评论,就效率而言,你不应该看到太大差异,实际上我认为没有区别。对于Model中的每个list *方法,您可以编写一个非常简单的SPARQL查询并自己比较性能。如果你想要的是一个模型的方法然后使用它,但你很快就会发现,当你想要做更多的事情时,SPARQL查询可以更简洁,并允许你用更少的代码准确回到你需要的