【问题标题】:Querying an Open RDF Repository查询打开的 RDF 存储库
【发布时间】:2014-05-16 15:50:39
【问题描述】:

我正在尝试查询一个加载了海龟文件的开放 RDF 存储库。当我通过查询选择全部时 - “SELECT ?s WHERE { ?s ?p ?o }”;然后一切正常,但是当我使用一个有点复杂的查询时,它就不起作用了。我附上了查询部分的代码 -

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

              TupleQueryResult result = tupleQuery.evaluate();
              try {
                   while(result.hasNext()){
                        BindingSet bindingSet = result.next();
                        Value valueOfX = bindingSet.getValue("s");
                        //Value valueOfY = bindingSet.getValue("p");
                        //Value valueOfZ = bindingSet.getValue("o");
                        //System.out.println(valueOfX + "   " + valueOfY + "   " + valueOfZ);
                        System.out.println(valueOfX) ;
                   }

              }

              finally {
                  result.close();
              }
        }
        finally{
            con.close();
        }
    }
    catch(OpenRDFException e){
        System.out.println("Query error");
    }

}

这是不断进入异常部分并抛出错误 - “查询错误”。 怎么了?

【问题讨论】:

  • 提示:在调试此类问题时,不要忽略实际的异常。相反,检查它的堆栈跟踪,例如通过打印出来:e.printStackTrace();,或者至少查看异常消息:System.out.println(e.getMessage());。准确的消息和堆栈跟踪通常包含有关究竟出了什么问题的有用信息。

标签: rdf sparql sesame openrdf


【解决方案1】:

您似乎没有定义 umlcp 前缀。我正在您的查询字符串中寻找这样的语句:

PREFIX uml: <http://example.com/uml>

或像这样调用 RepositoryConnection::setNamespace:

con.setNamespace("uml", "http://example.com/uml");

【讨论】:

  • 调用setNamespace 不能解决问题。 SPARQL 查询需要在语法上完整,这意味着需要将前缀声明添加到查询中。
  • 感谢@JeenBroekstra。我以前没有使用过这个 Java 库,我认为这是一种在实际查询之外设置命名空间的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多