Rdf 在Fuseki SPARQL查询中转义双引号?

Rdf 在Fuseki SPARQL查询中转义双引号?,rdf,sparql,jena,semantic-web,fuseki,Rdf,Sparql,Jena,Semantic Web,Fuseki,在使用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\"_Dund

在使用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> ...

经过更多的阅读和实验,问题是因为我没有正确设置内容类型标题。它需要设置为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"
不幸的是,我仍然无法得到逃逸双引号的工作

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

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"

经过更多的阅读和实验,问题是因为我没有正确设置内容类型标题。它需要设置为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"
不幸的是,我仍然无法得到逃逸双引号的工作

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

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"

这里有两个问题:

URI RFC 3986中不允许使用双引号。 当您将%22作为HTTP URL中的查询字符串发送时,另一端将对其进行解码并获取 因此,使用POST并将查询放在正文中可以避免问题,也可以对%2本身进行编码以获得发送%2522


使用-data二进制文件而不是-d更安全。

这里有两个问题:

URI RFC 3986中不允许使用双引号。 当您将%22作为HTTP URL中的查询字符串发送时,另一端将对其进行解码并获取 因此,使用POST并将查询放在正文中可以避免问题,也可以对%2本身进行编码以获得发送%2522


使用-data二进制文件而不是-d更安全。

感谢您的澄清!我假设问题是双引号使其成为无效的IRI,但不幸的是DBpedia不符合该约定。@frnsys您能澄清一下什么是DBpedia不符合该约定吗?毕竟,DBpedia没有定义是什么使IRI有效或无效。他们可能有格式不正确的数据,但在这种情况下,你能举个例子吗?上面说“维基百科页面名称中可能出现的以下字符是百分比编码的:双引号%percent?问号\反斜杠^caret`backtick”。@JoshuaTaylor我得到的URI类似于而不是百分比编码,但我现在意识到这可能是因为在我收到它们的时候它们已经被解码了。谢谢你的澄清!我假设问题是双引号使其成为无效的IRI,但不幸的是DBpedia不符合该约定。@frnsys您能澄清一下什么是DBpedia不符合该约定吗?毕竟,DBpedia没有定义是什么使IRI有效或无效。他们可能有格式不正确的数据,但在这种情况下,你能举个例子吗?上面说“维基百科页面名称中可能出现的以下字符是百分比编码的:双引号%percent?问号\反斜杠^caret`backtick”。@JoshuaTaylor我得到的URI类似于而不是百分比编码,但我现在意识到这可能是因为在我收到它们的时候它们已经被解码了。