簡體   English   中英

如何在SPARQL查詢中添加字符串變量?

[英]How to add a string variable to the SPARQL query?

我想將用戶的輸入集成到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"  |

如何更改我的第一個代碼以顯示第二個代碼的結果?

問題的標題與您在文字中描述的問題無關...

您還問“如何打印Apache Jena API ResultSet ?”。

然后令人困惑的是,您已經有一種名為execSelectAndPrint方法可以執行您想要的操作。 所以問題是為什么您不能(重新)使用該方法或方法中至少相應的代碼行?

可以在此處找到Apache Jena API文檔,特別是帶有SPARQL的部分

ResultSet是一個迭代器,因此可以對其進行迭代:

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

或使用一種便捷方法

ResultSet results = qexec.execSelect();
ResultSetFormatter.out(results);
次要評論:

您的方法稱為setName ,它對您在此方法中所做的工作有些奇怪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM