如何将字符串变量添加到SPARQL查询?

时间:2017-05-13 08:15:16

标签: java sparql rdf fuseki

我想将用户的输入集成到SPARQL查询中。这是我现有的代码,但我无法让它工作。

public void setName(String name) {
    String formattedName = name.replace(" ", "-");
    String query = "SELECT ?p ?o WHERE { <http://person/" + formattedName + "> ?p ?o }" ;
    System.out.println(query);
    QueryExecution qe = QueryExecutionFactory.sparqlService(
            "http://localhost:3030/Date/query", 
            "PREFIX dc: <http://purl.org/dc/elements/1.1/> " + query);
    ResultSet results = qe.execSelect();
    System.out.println(results);
    qe.close();
}

然后我在控制台中得到以下输出:

SELECT ?p ?o WHERE { <http://person/Mark-John> ?p ?o }
com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX@28df8261

第一行是查询,第二行是结果,应该是收到的数据......

如果我尝试如下:

execSelectAndPrint(
        "http://localhost:3030/Date/query",
        "PREFIX dc: <http://purl.org/dc/elements/1.1/> " + "SELECT ?p ?o WHERE { <http://person/Mark-John> ?p ?o }"
        );

打印哪些:

| <http://purl.org/dc/elements/1.1/name>        | "Mark John" |
| <http://purl.org/dc/elements/1.1/nationality> | "American"  |

如何更改第一个代码以显示第二个代码的结果?

1 个答案:

答案 0 :(得分:0)

您的问题标题与您在文中描述的问题无关......

你更想问“如何打印Apache Jena API ResultSet?”

然后令人困惑的是,您已经有一个名为execSelectAndPrint的方法可以满足您的需求。所以问题是为什么你不能(重新)使用该方法或至少在方法中使用相应的代码行?

可以找到Apache Jena API文档,特别是带有SPARQL的部分here

ResultSet是一个迭代器,因此迭代它:

ResultSet results = qexec.execSelect();
for ( ; results.hasNext() ; ) {
   QuerySolution qs = results.next() ;
   ...                                   // extract the variables
}

或使用其中一个convenience methods

ResultSet results = qexec.execSelect();
ResultSetFormatter.out(results);
次要评论:

你的方法被称为setName,看起来有些奇怪w.r.t.你正在用这种方法做什么。