我在这里做错了什么?
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 |
=========
---------
我确信这是愚蠢的......
答案 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通常会假设您知道自己在做什么,并且可能会减少对意外事件的检查。