[英]Jena sparql (Dbpedia) query OPTIONAL filter gives no results but (http://dbpedia.org/snorql/) same query works
[英]SPARQL query against Portuguese dbpedia endpoint for dcterms:subject returns no results
我測試了那個查詢:
SELECT ?comment WHERE {<http://pt.dbpedia.org/resource/Portugal> dcterms:subject ?comment}
在http://pt.dbpedia.org/sparql ,我得到了正確的結果:
http://pt.dbpedia.org/resource/Categoria:Portugal
但是我正在使用Jena,當我嘗試用Jena進行查詢時,我得不到任何結果。 這就是我用Jena進行查詢的方式:
private String getComment(String uri) {
RDFNode node;
String comment = "";
final String QUERY =
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
"PREFIX dcterms: <http://purl.org/dc/terms/subject>\n" +
"SELECT ?comment WHERE {" +
"<" + uri + "> dcterms:subject ?comment." +
"}";
final String ENDPOINT = "http://pt.dbpedia.org/sparql";
final ResultSet rs = QueryExecutionFactory.sparqlService( ENDPOINT, QUERY ).execSelect();
while( rs.hasNext() ) {
QuerySolution querySolution = rs.next();
node = querySolution.get("comment");
comment = node.toString();
}
return comment;
}
有什么問題嗎? 謝謝!
dcterms:
前綴有一個拼寫錯誤 dcterms:
前綴不正確(最后有subject
)。 它應該是
http://purl.org/dc/terms/
此外,您將uri
參數拼接到查詢中的方式有點脆弱,並且受到注入攻擊。 例如,如果uri
是以下字符串會發生什么?
> <>* <> . <http://example.org/secretData> ?anyProperty ?comment . #
您泄漏了有關http://example.org/secretData
信息,因為<> <>* <>
將始終匹配,然后您將綁定?comment
到http://example.org/secretData
的任何屬性的所有值http://example.org/secretData
。 在這個答案中有一個如何做到這一點的例子來獲取一個地方dbpedia的緯度和經度 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.