簡體   English   中英

SPARQL三元組中不區分大小寫的匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM