【问题标题】:SPARQL query against Portuguese dbpedia endpoint for dcterms:subject returns no results针对 dcterms:subject 的葡萄牙语 dbpedia 端点的 SPARQL 查询不返回任何结果
【发布时间】:2014-06-14 10:48:51
【问题描述】:

我测试了那个查询:

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

有什么问题吗? 谢谢!

【问题讨论】:

  • 你还没有展示你是怎么称呼它的。调用时uri 的值是多少?
  • 哦,对不起!值为:pt.dbpedia.org/resource/Portugal
  • 我在http中使用它,正如上面第一个查询中写的那样,这是因为当我将它粘贴到cmets时,它会改变它的形式。
  • 您可以在评论(和帖子)中用反引号 (`) 将文本括起来以使其成为代码,而不是降价文本。

标签: java sparql jena dbpedia dublin-core


【解决方案1】:

dcterms: 前缀有错别字

dcterms: 前缀不正确(末尾有 subject)。应该是

http://purl.org/dc/terms/

使用 ParameterizedSparqlStrings 避免注入问题

另外,将uri 参数拼接到查询中的方式有​​点脆弱,并且容易受到注入攻击。例如,如果uri 是以下字符串会发生什么?

> <>* <> . <http://example.org/secretData> ?anyProperty ?comment . #

您将泄露有关http://example.org/secretData 的信息,因为&lt;&gt; &lt;&gt;* &lt;&gt; 将始终匹配,然后您会将?comment 绑定到http://example.org/secretData 的任何属性的所有值。在this answerget latitude and longitude of a place dbpedia 中有一个如何执行此操作的示例。

【讨论】:

  • 非常感谢!这是一件多么愚蠢的事情,但你帮了我很多!
  • 很高兴为您提供帮助。您应该考虑使用 ParameterizedSparqlString 而不是字符串连接,因为我在答案中描述了原因。
  • 谢谢!关于 ParameterizedSparqlStrings 的非常有用的示例!
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
相关资源
最近更新 更多