簡體   English   中英

針對dcterms的針對葡萄牙語dbpedia端點的SPARQL查詢:subject不返回任何結果

[英]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/

使用ParameterizedSparqlStrings可以避免注入問題

此外,您將uri參數拼接到查詢中的方式有​​點脆弱,並且受到注入攻擊。 例如,如果uri是以下字符串會發生什么?

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

您泄漏了有關http://example.org/secretData信息,因為<> <>* <>將始終匹配,然后您將綁定?commenthttp://example.org/secretData的任何屬性的所有值http://example.org/secretData 這個答案中有一個如何做到這一點的例子來獲取一個地方dbpedia的緯度和經度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM