SPARQL 正则表达式不匹配带有 "i" 标志的波斯字符
SPARQL regex doesn't match Persian characters with the "i" flag
我希望忽略大小写 "i" 标志只会增加匹配项的数量,而不是减少它们,但是以下 SPARQL 查询(端点 http://www.snik.eu/sparql)确实会导致一个没有标志的匹配项但没有匹配项:
select * { ?s rdfs:label ?l. filter(regex(str(?l),"قانون بیمارستان")) }
-> 1 场比赛
select * { ?s rdfs:label ?l. filter(regex(str(?l),"قانون بیمارستان","i")) }
-> 不匹配
对于非波斯语字母,它按预期工作:
select count(*) { ?s rdfs:label ?l.filter(regex(str(?l),"Information"))
}
-> 319 场比赛
select count(*) { ?s rdfs:label ?l.filter(regex(str(?l),"Information","i"))
}
-> 363 场比赛
出现此行为的原因是什么?我如何才能将其更改为预期的行为?
Virtuoso 版本 07.20.3217 Linux (x86_64-unknown-linux-gnu),单服务器版
P.S.:
升级到 07.20.3229 后问题仍然存在。
DBpedia上也出现了这个问题,现在有相同的版本:
select *
{
<http://dbpedia.org/resource/Persian_language> dbo:abstract ?l.
filter(regex(str(?l),"فارسی","i")).
}
我在 https://github.com/openlink/virtuoso-opensource/issues/705 的 Virtuoso GitHub 存储库中发现了一个关于此问题的未解决问题,似乎正在调查中。
感谢所有评论者帮助调查并提供了很好的解决方法和替代方案。
我希望忽略大小写 "i" 标志只会增加匹配项的数量,而不是减少它们,但是以下 SPARQL 查询(端点 http://www.snik.eu/sparql)确实会导致一个没有标志的匹配项但没有匹配项:
select * { ?s rdfs:label ?l. filter(regex(str(?l),"قانون بیمارستان")) }
-> 1 场比赛
select * { ?s rdfs:label ?l. filter(regex(str(?l),"قانون بیمارستان","i")) }
-> 不匹配
对于非波斯语字母,它按预期工作:
select count(*) { ?s rdfs:label ?l.filter(regex(str(?l),"Information"))
}
-> 319 场比赛
select count(*) { ?s rdfs:label ?l.filter(regex(str(?l),"Information","i"))
}
-> 363 场比赛
出现此行为的原因是什么?我如何才能将其更改为预期的行为?
Virtuoso 版本 07.20.3217 Linux (x86_64-unknown-linux-gnu),单服务器版
P.S.: 升级到 07.20.3229 后问题仍然存在。
DBpedia上也出现了这个问题,现在有相同的版本:
select *
{
<http://dbpedia.org/resource/Persian_language> dbo:abstract ?l.
filter(regex(str(?l),"فارسی","i")).
}
我在 https://github.com/openlink/virtuoso-opensource/issues/705 的 Virtuoso GitHub 存储库中发现了一个关于此问题的未解决问题,似乎正在调查中。
感谢所有评论者帮助调查并提供了很好的解决方法和替代方案。