简单的耶拿SPARQL查询不起作用
问题描述:
我在这里做错了什么?简单的耶拿SPARQL查询不起作用
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 |
=========
---------
我相信这是愚蠢的东西...
答
我觉得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通常假定你知道更多你正在做的事情,并且可能会减少检查意外事件的检查次数。