Regex SPARQL过滤器表达式中特殊字符的处理
我访问dbpedia[1]的SPARQL端点以获取给定城市的URI。我使用以下查询来实现这一点:Regex SPARQL过滤器表达式中特殊字符的处理,regex,sparql,dbpedia,Regex,Sparql,Dbpedia,我访问dbpedia[1]的SPARQL端点以获取给定城市的URI。我使用以下查询来实现这一点: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbpedia: <http://dbpedia.org/ontology/> select distinct * where {?uri rdfs:label ?label. FILTER (REGEX(STR(?label), "^Köln
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia: <http://dbpedia.org/ontology/>
select distinct * where
{?uri rdfs:label ?label.
FILTER (REGEX(STR(?label), "^Köln$", "i")).
?uri a dbpedia:PopulatedPlace.
}
前缀rdfs:
前缀dbpedia:
选择distinct*where
{?uri rdfs:label?label。
过滤器(REGEX(STR(?label),“^Köln$”,“i”))。
?uri a dbpedia:填充的位置。
}
如果我查询一个没有德国umlaut的城市,一切正常,但如果有umlaut,我什么也得不到。当通过代码执行此查询时,我甚至收到一个406错误(不可接受) 你知道如何在针对dbpedia的SPARQL查询中处理umlauts吗 提前感谢,
坦率的
[1] 在处理您的角色时,可能在传输或其他方面存在错误。当你把它写下来时,它确实起作用,就像这样:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia: <http://dbpedia.org/ontology/>
select distinct * where
{?uri rdfs:label ?label.
FILTER (REGEX(STR(?label), "^K\u00F6ln$")).
?uri a dbpedia:PopulatedPlace.
}
前缀rdfs:
前缀dbpedia:
选择distinct*where
{?uri rdfs:label?label。
过滤器(REGEX(STR(?label),“^K\u00F6ln$”)。
?uri a dbpedia:填充的位置。
}
编辑:我现在看到这不适用于“I”标志。文档表明“u”标志适用于此处。您是否尝试过使用
^K.ln$
?“当通过代码执行此查询时,我甚至收到一个406错误(不可接受)”这听起来可能是客户机编码查询而不是查询本身的问题。此外,没有真正的理由进行筛选(REGEX(STR(?label),“^Köln$”,“i”)。
如果您想不敏感地匹配整个字符串的大小写,只需小写或大写两个字符串并比较相等。当然,在这种情况下,您不太可能真的需要大小写不敏感,您最好只要求?uri rdfs:label“Köln”@de
(如果这是正确的语言标记)。@Fede:这会起作用,但也会导致像窑这样不必要的点击。@JoshuaTaylor:在这种情况下,客户端编码可能会有问题,但我仍然无法通过他们的Web界面从终结点获得任何结果。使用?uri rdfs:标签“Köln”@de我得到了预期的结果,但我不能确定给定的城市名称实际上是哪种语言,所以我想使用“语言不敏感”的表示法。@Aaginor好吧,你可以搜索东西,然后过滤那些有字符串为“Köln”的标签的东西(或包含它)。当然,问题是现在有很多结果需要考虑和筛选。这可能不是问题,因为a PopulatedPlace
模式将缩小一些结果的范围。+1用于解决编码问题。我仍然要指出,如果目的是匹配准确的字符串,则可能是les只规范化两个字符串的大小写并比较是否相等是很昂贵的。我只得到没有任何标志的结果,但我认为这是最好的解决方案。谢谢你的回答!