我正在尝试通过标签字段进行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
答案 0 :(得分:2)
应用STR(?label)
会导致语言标记被删除,因此请从您比较的字符串中删除@es
。