【问题标题】:Querying a repository in Open RDF and displaying the results在 Open RDF 中查询存储库并显示结果
【发布时间】:2014-05-12 15:46:44
【问题描述】:

我已将 RDF 数据存储加载到 OpenRDF 存储库中,然后我尝试查询存储库并根据查询检索某些数据。我正在运行一个非常简单的查询来获取所有主题谓词和对象。但是当我尝试打印查询结果时,它只显示第一个三元组。我给出了只做查询工作的方法的代码,请检查并告诉我有什么问题。-

private static void queryingRDF(Repository repo) {
    try{
        RepositoryConnection con = repo.getConnection();
        try{
            String queryString = "SELECT ?s ?p ?o WHERE { ?s ?p ?o } ";
              TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);

              TupleQueryResult result = tupleQuery.evaluate();
              try {
                    BindingSet bindingSet = result.next();
                    Value valueOfX = bindingSet.getValue("s");
                    Value valueOfY = bindingSet.getValue("p");
                    Value valueOfZ = bindingSet.getValue("o");
                    System.out.println(valueOfX);
                    System.out.println(valueOfY);
                    System.out.println(valueOfZ);
              }
              finally {
                  result.close();
              }
        }
        finally{
            con.close();
        }
    }
    catch(OpenRDFException e){
        System.out.println("Query error");
    }

}

【问题讨论】:

  • 我只是注意到这在user documentation 中不够清楚,代码示例有点混乱。现已修复。

标签: rdf sparql sesame


【解决方案1】:

TupleQueryResult 是一个迭代器,因此如果您想查看所有结果,则需要对其进行迭代:

while (result.hasNext()) 
{
  BindingSet bindingSet = result.next();
  // Do what you want with the result
}
result.close();

如果您不知道如何使用迭代器,请查看 Oracle Collections 教程进行简要介绍

【讨论】:

  • 实际上,TupleQueryResult 是一个Iteration(它是一个特定于 Sesame 的对象),而不是一个实际的 Java 迭代器(它不能被重用,因为我们需要能够抛出已检查的异常)。但同样的原则当然适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多