繁体   English   中英

如何建立不区分大小写的SPARQL过滤器?

[英]How to build case-insensitive SPARQL filter?

我正在尝试使用SPARQL通过按标签字段进行搜索来构建一些查询,而不区分大小写。

我从这个查询开始,它运作良好:

SELECT distinct ?concepto, ?objeto, ?label WHERE {?concepto rdfs:comment ?objeto. ?concepto rdfs:label ?label. FILTER (lang(?label) = 'es' && ?label='Francisco de Quevedo'@es && (lang(?objeto) = 'es' || lang(?objeto) = 'en'))} LIMIT 100

但是,如果我尝试添加FILTER约束以使查询不区分大小写,那么它将不起作用:

SELECT distinct ?concepto, ?objeto, ?label WHERE {?concepto rdfs:comment ?objeto. ?concepto rdfs:label ?label. FILTER (lang(?label) = 'es' && lcase(str(?label))='francisco de quevedo'@es && (lang(?objeto) = 'es' || lang(?objeto) = 'en'))} LIMIT 100

通过标签搜索一般概念(例如:Galaxy,Mountain,Francisco de Quevedo)进行查询搜索的不同选项。 我只需要标识一个包含此主题的对象,并且以前不知道标签是用小写还是大写注册的。

下一个代码不起作用(这是一个繁重的查询,并获取包含单词Galaxy的所有对象:

SELECT distinct ?concepto ?objeto ?label WHERE {?concepto rdfs:comment ?objeto. ?concepto rdfs:label ?label FILTER (lang(?label) = 'es' && (lang(?objeto) = 'es' || lang(?objeto) = 'en') && regex(?label, "Galaxia","i"))} LIMIT 100

其他代码工作正常,我获得了正确的对象,但是我需要确切地知道它是如何写的(大写或小写):

SELECT distinct ?concepto ?objeto ?label WHERE { ?concepto rdfs:comment ?objeto. ?concepto rdfs:label ?label FILTER (lang(?label) = 'es' && (lang(?objeto) = 'es' || lang(?objeto) = 'en') && ?label = "Galaxia"@es)} LIMIT 1000

最后一个在性能上还可以,但是获得了很多结果,我只需要获取西班牙语中按标签搜索的对象Galaxy:

SELECT distinct ?concepto ?objeto ?label WHERE {?concepto rdfs:comment ?objeto. ?concepto rdfs:label ?label. ?label bif:contains '"Galaxia"' FILTER (lang(?label) = 'es' && (lang(?objeto) = 'es' || lang(?objeto) = 'en'))} LIMIT 100

应用STR(?label)导致语言标签被删除,因此@es从要比较的字符串中删除@es

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM