在Sparql WHERE子句中使用命名空间前缀时处理逗号
我试图查询DBPedia类别“口腔、唾液、腺体和颌骨疾病”的在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
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
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 '\'