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;
      }