使用 FILTER 和 REGEX 根据文字变量查找 URI

Find URI based on literal variable using FILTER and REGEX

我需要使用来自其他 skos:Concept 的 skos:prefLabel(文字)找到 skos:Concept 的 URI。这是我的查询:

SELECT ?variableURI ?variablePref ?entityPrefRegex ?entityURI ?entityPref WHERE {
    ?variableURI skos:prefLabel ?variablePref .
    FILTER(REGEX(?variablePref,"^Dissolved .* in surface water"))
    BIND(REPLACE(?variablePref,"^Dissolved (.*) concentration in surface water", "") AS ?entityPrefRegex).
    ?entityURI skos:prefLabel ?entityPref .
    FILTER(REGEX(?entityPref,?entityPrefRegex,"i")) 
}

我的问题是过滤部分return没有结果,我不明白为什么。

这是我尝试 link 我的实体

的示例变量
variableURI variablePref entityPrefRegex
<:c_7e508e0e> "Dissolved aluminium concentration in surface water"@en "aluminium"@en
<:c_b5dec35c> "Dissolved arsenic concentration in surface water"@en "arsenic"@en
<:c_bc765ffd> "Dissolved boron concentration in surface water"@en "boron"@en
<:c_4ce4d2c7> "Dissolved caesium concentration in surface water"@en "caesium"@en

以及相应的实体。如您所见,除了大写字母外,文字完全相同。

entityURI entityPref
<:c_d57d0742> "Aluminium"@en
<:c_d57d077> "Arsenic"@en
<:c_d57d0728> "Boron"@en
<:c_d57d0745> "Caesium"@en

REGEX 的模式(第二个)参数是“简单文字”(“没有语言标记或数据类型 IRI”的文字)。在这种情况下,看起来您正在使用具有 @en 语言标记的 ?entityPref 值:

FILTER(REGEX(?entityPrefRegex,?entityPref,"i"))

尝试将模式转换为纯字符串:

FILTER(REGEX(?entityPrefRegex,STR(?entityPref),"i"))