耶拿:如何从模型中查询数据?

Ped*_*dro 7 java ontology sparql jena

是否可以在Model不编写sqarql-queries 的情况下查询数据?向模型添加资源或资源的属性可以很容易地完成,但是我还没有发现,如果有一种更有效的方法来查询数据,而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(); 
Run Code Online (Sandbox Code Playgroud)

cas*_*gna 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

另见耶拿网站上的"查询模式"在耶拿教程: http://incubator.apache.org/jena/tutorials/rdf_api.html#ch-Querying%20a%20Model

最后一点评论,就效率而言,你不应该看到太大差异,实际上我认为没有区别.对于Model中的每个list*方法,您可以编写一个非常简单的SPARQL查询并自己比较性能.如果你想要的是一个模型的方法然后使用它,但你很快就会发现,当你想要做更多的事情时,SPARQL查询可以更简洁,并允许你用更少的代码准确回到你需要的.