简单的Jena SPARQL查询无法正常工作

时间:2011-12-21 19:28:53

标签: sparql jena

我在这里做错了什么?

public class SimpleSearchTest {
  public static void main(String[] args) throws Exception {
    Model model = ModelFactory.createDefaultModel();
    model.getGraph().add(new Triple(Node.createURI("a"), Node.createURI("b"), Node.createURI("c")));
    String queryString = "SELECT ?p ?o WHERE { <a> ?p ?o }";
    Query query = QueryFactory.create(queryString);
    QueryExecution qExec = QueryExecutionFactory.create(query, model);
    ResultSetFormatter.out(qExec.execSelect());
  }
}

我期待

-------------
| p   | o   |
=============
| <b> | <c> |
-------------

但相反,我没有得到任何结果:

---------
| p | o |
=========
---------

我确信这是愚蠢的......

1 个答案:

答案 0 :(得分:2)

我认为SPARQL解析器不喜欢你的<a>,因为它不是合法的URI(虽然你没有得到警告但很奇怪)。如果您按如下方式更改代码:

model.getGraph().add(new Triple(Node.createURI("http://example.com/a"), Node.createURI("b"), Node.createURI("c")));
String queryString = "SELECT ?p ?o WHERE { <http://example.com/a> ?p ?o }";

你得到了你期望的结果。

顺便说一句,通过使用Node.createURI()创建测试图,您使用的是较低级别的内部Graph API,而不是更常用的Model API。这样做完全没问题,但Graph API通常会假设您知道自己在做什么,并且可能会减少对意外事件的检查。