Java 针对dcterms:subject的葡萄牙语dbpedia端点的SPARQL查询不返回任何结果
我测试了这个查询:Java 针对dcterms:subject的葡萄牙语dbpedia端点的SPARQL查询不返回任何结果,java,sparql,jena,dbpedia,dublin-core,Java,Sparql,Jena,Dbpedia,Dublin Core,我测试了这个查询: SELECT ?comment WHERE {<http://pt.dbpedia.org/resource/Portugal> dcterms:subject ?comment} 但是我使用的是Jena,当我尝试用Jena进行查询时,我没有得到任何结果。 这就是我对Jena进行查询的方式: private String getComment(String uri) { RDFNode node; String comme
SELECT ?comment WHERE {<http://pt.dbpedia.org/resource/Portugal> dcterms:subject ?comment}
但是我使用的是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;
}
私有字符串getComment(字符串uri){
RDFNode节点;
字符串注释=”;
最终字符串查询=
“前缀rdf:\n”+
“前缀dcterms:\n”+
“选择?注释{”+
“dcterms:主题?注释。”+
"}";
最终字符串端点=”http://pt.dbpedia.org/sparql";
最终结果集rs=QueryExecutionFactory.sparqlService(端点,查询).execSelect();
while(rs.hasNext()){
QuerySolution QuerySolution=rs.next();
node=querySolution.get(“comment”);
comment=node.toString();
}
回复评论;
}
有什么问题吗?
谢谢大家! dcterms:
前缀有输入错误
dcterms:
前缀不正确(末尾有subject
)。应该是
http://purl.org/dc/terms/
使用ParameterizedSparqlStrings可避免注入问题
此外,将uri
参数拼接到查询中的方式有点脆弱,并且容易受到注入攻击。例如,如果uri
是以下字符串,会发生什么情况
>*?任何财产?评论#
你会泄露
http://example.org/secretData
,因为*
将始终匹配,然后您将的注释绑定到的任何属性的所有值http://example.org/secretData
。有一个例子说明了如何在to中执行此操作。您还没有演示如何调用它。调用时,uri
的值是多少?哦,对不起!这个值是:我将它与http一起使用,正如上面第一个查询中所写的,这是因为当我将它粘贴到评论中时,它会改变它的形式。你可以在评论(和帖子)中用反勾(`
)环绕文本,使它们成为代码,而不是标记文本。非常感谢!这真是件蠢事,但你帮了我很多!很乐意帮忙。你应该考虑使用A代替字符串连接,因为我在回答中描述的原因。谢谢!关于ParameterizedSparqlStrings的非常有用的示例!!
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;
}