在Sparql WHERE子句中使用命名空间前缀时处理逗号

在Sparql WHERE子句中使用命名空间前缀时处理逗号,sparql,semantic-web,dbpedia,virtuoso,Sparql,Semantic Web,Dbpedia,Virtuoso,我试图查询DBPedia类别“口腔、唾液、腺体和颌骨疾病”的skos:wierade属性。此类别在以下URI中可用: 以下查询提供了所需的输出: PREFIX skos: <http://www.w3.org/2004/02/skos/core#> SELECT ?broaderCategory WHERE { <http://dbpedia.org/resource/Category:Diseases_of_oral_cavity,_salivary_gland

我试图查询DBPedia类别“口腔、唾液、腺体和颌骨疾病”的
skos:wierade
属性。此类别在以下URI中可用:

以下查询提供了所需的输出:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

SELECT ?broaderCategory
WHERE {
    <http://dbpedia.org/resource/Category:Diseases_of_oral_cavity,_salivary_glands_and_jaws> skos:broader ?broaderCategory
}
第二个查询在类别名称的“,”处返回语法错误。用转义序列(十六进制unicode和html)替换逗号并没有帮助。而且,使用字符串文字(
dbc:“[category]”
dbc:“[category]”
)的语法也不正确


在这种情况下应如何处理逗号?

此答案基于:

前缀IRIs的本地部分不允许使用某些特殊字符。根据

带前缀的名称是XML QName的超集。它们的不同之处在于,前缀名称的本地部分可能包括:

  • 前导数字,例如
    支腿:3032571
    isbn13:9780136019701
  • 非前导冒号,例如,
    og:video:height
  • 保留字符转义序列,例如
    wgs:lat \-long
  • 此外,关于的部分为我们提供了更多的见解:

    %-编码序列在IRIs的字符范围内,并且在本地名称中明确允许。它们显示为“%”,后跟两个十六进制字符,并表示相同的三个字符序列。这些序列在处理期间不被解码。“海龟”中的术语表示IRI,而不是IRI。写为
    ex:%66oo bar
    并带有前缀
    @prefix ex:
    的术语也表示IRI

    更新(根据下面的评论) 正如@AndyS所指出的

    保留字符转义序列由一个“\”后跟一个~.-!$&”组成()*+,;=/?#@%_ 并表示“\”右侧的字符

    因此,使用
    \
    转义适用于逗号,即您可以编写
    \,
    。不幸的是,这在Virtuoso Web UI中仍然失败

    Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Bad character '\' (0x5c) in SPARQL expression at '\'
    

    所以这应该是一个bug。

    @AndyS谢谢你的提示,你是对的,我更新了我的答案。正如@AKSW所指出的,这看起来确实是个bug。我已经内部报告了。您可以通过和/或获取更新并提高优先级;如果使用商业版,可能(也)合适。(免责声明:我为……工作,制片人。)
    Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Bad character '\' (0x5c) in SPARQL expression at '\'