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

时间:2012-03-27 21:57:30

标签: java sparql jena ontology

是否可以在不编写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(); 

1 个答案:

答案 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查询可以更简洁,并允许你用更少的代码准确回到你需要的