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都应该return为真。

我尝试使用 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))) }
    }

请注意,这可能会导致性能不佳,因为它必须扫描所有三元组并进行字符串比较。

对于模糊搜索,你真的应该考虑一下全文索引。

我还建议省略第二个 UNION 子句,只要您正在寻找可能不是模式实体的资源,因此永远不会出现在 RDF 三元组的谓词位置。