以下查询用于从dbpedia获取“abstract”属性。当我使用res:Zeke_Rowe
而不是?name
这样的特定名称时,它会起作用。我想将值传递给?name
变量。 sparql查询如下:
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
插入到sparql查询中"res:Zeke_Rowe"
..
最后,我运行这样的查询:
ResultSetFactory.copyResults(QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql",query).execSelect());
我在做错了什么?
答案 0 :(得分:0)
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);