繁体   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