有没有办法让以下查询不区分大小写?
ASK {
VALUES (?r) { (dbr:Game_of_Thrones) }
{ ?r ?p ?o }
UNION
{ ?s ?r ?o }
UNION
{ ?s ?p ?r }
}
无论我使用dbr:Game_of_Thrones
还是dbr:game_of_thrones
,都会返回true。
我尝试使用LCASE()
,但不允许在三元组中使用。还有另外一种方法吗?
我正在使用DBpedia SPARQL端点(https://dbpedia.org/sparql)。
答案 0 :(得分:2)
IRI是区分大小写的,原因很充分。如果您真的想解决这个问题,那么您必须在每个FILTER(lcase(str(?tmp)) = lcase(str(?r)))
子句中使用UNION
:
ASK {
VALUES (?r) { (dbr:Game_of_Thrones) }
{ ?tmp ?p ?o. FILTER(LCASE(STR(tmp)) = LCASE(STR(?r))) }
UNION
{ ?s ?r ?o. FILTER(LCASE(STR(tmp)) = LCASE(STR(?r))) }
UNION
{ ?s ?p ?r. FILTER(LCASE(STR(tmp)) = LCASE(STR(?r))) }
}
注意,这可能导致性能不佳,因为它必须扫描所有三元组并进行字符串比较。
对于模糊搜索,您应该考虑全文索引。
我建议省略第二个UNION
条款,只要您正在寻找可能不是模式实体的资源,因此,永远不会出现在RDF三元组的谓词位置。< / p>