【问题标题】:Jena: how to query data from model?Jena:如何从模型中查询数据?
【发布时间】:2012-03-27 21:57:30
【问题描述】:

是否可以在不编写 sqarql 查询的情况下从 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(); 

【问题讨论】:

    标签: java sparql jena ontology


    【解决方案1】:

    您可以使用 Jena 模型上可用的 list* 方法: 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 查询可以更简洁,并允许你用更少的代码准确地返回你需要的东西.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多