当我在java中运行此代码时出现错误,我认为错误是由于"字符串值"而发生的。我不确定要添加它,但我从上一个问题的答案中得到了这个想法,我在这个网站上提到了Query DBpedia to get abstract for different inputs
public static void DbpediaResultSparql() {
String values = "New York";
String service = "http://dbpedia.org/sparql";
String sparqlQueryString2 = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"+
"PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>"+
"PREFIX dbpedia: <http://dbpedia.org/resource/>"+
"SELECT DISTINCT ?abstract"+
"WHERE"+
"{ _:b0 rdfs:label ?name ."+
"_:b0 dbpedia-owl:abstract ?abstract"+
"FILTER langMatches(lang(?abstract), 'en')"+
"?name { " + values +" @en }"+
"}" ;
Query query = QueryFactory.create(sparqlQueryString2);
ARQ.getContext().setTrue(ARQ.useSAX);
// Executing SPARQL Query and pointing to the DBpedia SPARQL Endpoint
QueryExecution qexec = QueryExecutionFactory.sparqlService(
"http://DBpedia.org/sparql", query);
// Retrieving the SPARQL Query results
ResultSet results = qexec.execSelect();
// Iterating over the SPARQL Query results
while (results.hasNext()) {
QuerySolution soln = results.nextSolution();
// Printing DBpedia entries' abstract.
System.out.println(soln.get("?abstract"));
}
qexec.close();
}
答案 0 :(得分:2)
您无法通过
等代码获得有用的答案"SELECT DISTINCT ?abstract"+ "WHERE"
"_:b0 dbpedia-owl:abstract ?abstract"+ "FILTER langMatches(lang(?abstract), 'en')"
因为它变成了
SELECT DISTINCT ?abstractWHERE
_:b0 dbpedia-owl:abstract ?abstractFILTER
并且您不希望变量名为?abstractWHERE
或?abstractFILTER
。
这没有任何意义:
String values = "New York";
"?name { " + values +" @en }"
你最终会
?name { New York@en }
我希望你想要的是
values ?name { "New York"@en }
我建议您查看ParameterizedSparqlStrings,并确保在代码中添加终止换行符或至少空格。如果您刚刚打印出查询,可以将其放入sparql.org的查询验证程序中,并且您已经立即看到了问题。
您可以像这样编写查询:
select distinct ?abstract where {
values ?name { "New York"@en }
[ rdfs:label ?name ;
dbpedia-owl:abstract ?abstract ]
filter langMatches(lang(?abstract),'en')
}
如果您只有?name
的一个值,并且您没有选择该变量,则可以在查询中将其写入:
select distinct ?abstract where {
[ rdfs:label "New York"@en ;
dbpedia-owl:abstract ?abstract ]
filter langMatches(lang(?abstract),'en')
}