【问题标题】:Escaping double quotes in a Fuseki SPARQL query?在 Fuseki SPARQL 查询中转义双引号?
【发布时间】:2014-03-29 00:40:36
【问题描述】:

是否可以在使用 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> ...

【问题讨论】:

    标签: rdf sparql jena semantic-web fuseki


    【解决方案1】:

    这里有两个问题:

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

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

    使用--data-binary 而不是-d 更安全。

    【讨论】:

    • 感谢您的澄清!我假设问题是双引号使其成为无效的 IRI,但不幸的是 DBpedia 没有遵循该约定。
    • @frnsys 您能否解释一下“DBpedia 不符合该约定”的含义?毕竟,DBpedia 并没有定义是什么使 IRI 有效或无效。他们可能有格式错误的数据,但在这种情况下,你能提供一个例子吗? Encoding scheme of DBpedia URIs 表示“维基百科页面名称中可能出现的以下字符采用百分比编码:“(双引号)%(百分比)?(问号)\(反斜杠)^(插入符号)`(反引号)”。
    • @JoshuaTaylor 我得到的是像&lt;http://dbpedia.org/resource/"Crocodile"_Dundee&gt; 这样的URI,而不是它们的百分比编码,但我现在意识到这可能是因为在我收到它们时它们已经被解码了。
    【解决方案2】:

    经过更多阅读和实验,问题是因为我没有正确设置 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多