[英]Case insensitive match in SPARQL triple
有沒有辦法使以下查詢不區分大小寫?
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
dbr:Game_of_Thrones
將返回true。
我嘗試使用LCASE()
但在三元組中不允許使用它。 還有另一種方法嗎? 我正在使用DBpedia SPARQL端點( https://dbpedia.org/sparql )。
IRI區分大小寫是有充分理由的。 如果您真的想解決此問題,則必須在每個UNION
子句中使用FILTER(lcase(str(?tmp)) = lcase(str(?r)))
:
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))) }
}
請注意,這可能會導致性能下降,因為它必須掃描所有三元組並進行String比較。
對於模糊搜索,您應該真正考慮全文索引。
我還建議不要使用第二個UNION
子句,只要您要查找的資源可能不是架構實體,因此就永遠不會出現在RDF三元組的謂詞位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.