1

是否可以在使用 Fuseki 的 SPARQL 查询中使用双引号作为 URI 的一部分?我正在使用 DBpedia 数据集,它有一些 URI,例如:

<http://dbpedia.org/resource/"Crocodile"_Dundee>

我试过了:

PREFIX dbo: <http://dbpedia.org/ontology/> SELECT ?summary WHERE { <http://dbpedia.org/resource/\"Crocodile\"_Dundee> dbo:abstract ?summary }" localhost:3030/knowledge/query

PREFIX dbo: <http://dbpedia.org/ontology/> SELECT ?summary WHERE { <http://dbpedia.org/resource/%22Crocodile%22_Dundee> dbo:abstract ?summary }" localhost:3030/knowledge/query

但继续收到以下错误:

Encountered " "<" "< "" at line 1, column 68.
Was expecting one of:
<IRIref> ...
4

2 回答 2

4

这里有两个问题:

  1. URI 中不允许使用双引号 (RFC 3986)。
  2. 当您在 HTTP URL 中将 %22 作为查询字符串发送时,另一端将对其进行解码并获得“

因此使用 POST 并将查询放在正文中可以避免问题(或编码 % 本身获取发送 %2522)。

使用--data-binarynot-d更安全。

于 2014-03-29T12:54:01.073 回答
1

经过更多的阅读和实验,问题是因为我没有正确设置Content-Type标题。它需要设置为application/sparql-query,然后您可以使用百分比编码(尽管 SPARQL 规范不鼓励这样做),如下所示:

curl -i -X POST -d 'PREFIX dbo: <http://dbpedia.org/ontology/> SELECT ?summary WHERE { <http://dbpedia.org/resource/%22Crocodile%22_Dundee> dbo:abstract ?summary }' localhost:3030/knowledge/query  --header "Content-Type: application/sparql-query"

不幸的是,我仍然无法逃脱双引号的工作。

作为奖励,这还允许您在查询中使用与号 (&):

curl -i -X POST -d 'PREFIX dbo: <http://dbpedia.org/ontology/> SELECT ?uri WHERE { { ?alias_uri rdfs:label "Gibson Dunn & Crutcher"@en; dbo:wikiPageRedirects ?uri . } UNION { ?uri rdfs:label "Gibson Dunn & Crutcher"@en NOT EXISTS {  ?uri dbo:wikiPageRedirects ?nil } } } ' localhost:3030/knowledge/query --header "Content-Type: application/sparql-query"
于 2014-03-29T03:06:52.137 回答