使用 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"))
我需要使用来自其他 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"))