2017-05-31 35 views
0

以下查詢用於從dbpedia獲取「abstract」屬性。當我使用res:Zeke_Rowe這樣的特定名稱而不是?name時,它可以正常工作。我想將一個值傳遞給?name變量。 SPARQL查詢如下:帶參數的ParameterizedSparqlString查詢

ParameterizedSparqlString abstractQuery = new ParameterizedSparqlString(
"PREFIX res: <http://dbpedia.org/resorce/> " 
+"PREFIX dbo: <http://dbpedia.org/ontology/> " 
+"SELECT ?abstract WHERE { " 
+"?name dbo:abstract ?abstract. " 
+"FILTER (lang(?abstract)='en')}"); 

我已經試過這樣:

abstractQuery.setLiteral("name", "res:Zeke_Rowe"); 
Query query = QueryFactory.create(abstractQuery.toString()); 

,但它不工作,我得到NoSuchElementException

我也試過:

Node node = NodeFactory.createLiteral("res:Zeke_Rowe"); 
abstractQuery.setParam("name",node); 
Query query = QueryFactory.create(abstractQuery.toString()); 

失敗。具有相同的異常...

兩種方式將其插入名res:Zeke_Rowe這樣的:"res:Zeke_Rowe"到SPARQL查詢..

最後,我運行查詢像這樣:

ResultSetFactory.copyResults(QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql",query).execSelect()); 

什麼時我做錯了?

+0

這將是有益的,如果你可以分享全-stack跟蹤或異常。 –

回答

1

主題在RDF三元從來文字,因此,res:Zeke_Rowe文字,不知道爲什麼你總是叫setLiteral RESP。 createLiteral。它是一個URI,前綴爲(res:Zeke_Rowe)或全部(http://dbpedia.org/resource/Zeke_Rowe)。

abstractQuery.setIri("name", "http://dbpedia.org/resource/Zeke_Rowe"); 

Node node = NodeFactory.createIRI("http://dbpedia.org/resource/Zeke_Rowe"); 
abstractQuery.setParam("name", node);