我试图查询skos:broader
属性中的DBPedia类别"Diseases_of_oral_cavity,_salivary_glands_and_jaws“。此类别可在以下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
}
需要使用Python代码和Sparql包装器查询skos:broader
属性的几个类别。我试图通过为所有PREFIX
类别URI定义一个DBPedia类别URI并在WHERE
子句中使用它来提高代码的可读性,如下所示:
PREFIX dbpcat: <http://dbpedia.org/resource/Category:>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?broaderCategory
WHERE {
dbpcat:Diseases_of_oral_cavity,_salivary_glands_and_jaws skos:broader ?broaderCategory
}
第二个查询在类别名称“,”处返回一个语法错误。用转义序列(十六进制、unicode和html)替换逗号没有帮助。而且,使用字符串文本(dbc:"[category]"
和dbc:'''[category]'''
)也不是正确的语法。
在这种情况下,逗号应该如何处理?
发布于 2016-09-05 19:36:29
这个答案是基于海龟的W3C推荐
一些特殊字符是不允许在局部部分的前缀虹膜。根据关于IRIs的一节
前缀名称是XML QNames的超集。它们的不同之处在于前缀名称的本地部分可能包括:
leg:3032571
或isbn13:9780136019701
og:video:height
wgs:lat\-long
此外,关于逸出序列的部分给我们提供了更多的见解:
%编码序列在IRIs的字符范围内,并且在本地名称中显式允许。它们以'%‘的形式出现,后面跟着两个十六进制字符,并表示相同的三个字符序列。这些序列在处理过程中不被解码。在海龟中写成http://a.example/%66oo-bar的术语指的是IRI http://a.example/%66oo-bar,而不是IRI http://a.example/foo-bar。一个用前缀
ex:%66oo-bar
写成@prefix ex: <http://a.example/>
的术语也指定了IRI http://a.example/%66oo-bar。
更新(根据下面的评论)
正如AndyS所指出的,
保留字符转义序列由'\‘后面跟着~.-!$&'()*+之一组成,=/?#@%_并表示'\’右边的字符。
因此,使用\
进行转义适用于逗号,即您可以编写\,
。不幸的是,这仍然在Virtuoso中失败
Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Bad character '\' (0x5c) in SPARQL expression at '\'
那应该是个窃听器。
https://stackoverflow.com/questions/39338506
复制相似问题