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

时间:2018-01-24 17:08:39

标签: sparql

我正在尝试通过标签字段进行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

1 个答案:

答案 0 :(得分:2)

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