SPARQL 将空属性替换为其他属性
SPARQL replace empty attributes with others
我使用官方 DBpedia 端点进行了 SPARQL 查询。
我就以主题为例:
SELECT ?museum ?EnglishAbstract ?RussianAbstract
WHERE {
?museum dbpedia-owl:abstract ?EnglishAbstract.
?museum a dbpedia-owl:Museum.
filter(lang(?EnglishAbstract)='en')
optional{
?museum dbpedia-owl:abstract ?RussianAbstract.
?museum a dbpedia-owl:Museum.
filter(lang(?RussianAbstract)='ru')
}}
GROUP BY ?museum
通过这个查询(效果很好),我为每一行 (museum
) 找到了一堆 2 种语言的摘要:英语和俄语。
俄语摘要仅在可用时出现,因为我使用 "OPTIONAL"。
显然我得到了很多空属性。
我会将空白属性替换为英文摘要(始终存在)。
阅读 W3C SPARQL 页面,我发现有一个特定的测试值在设置变量时为真:Bound
我想这样写:
If Bound (?RussianAbstract), "?RussianAbstract", "?EnglishAbstract"
-->如果RussianAbstract
存在,持有它;否则,用 EnglishAbstract
代替它。
有谁知道我怎样才能让它发挥作用?
一种方法是使用 COALESCE
:
SELECT ?museum (COALESCE(?RussianAbstract, ?EnglishAbstract) as ?Abstract)
我使用官方 DBpedia 端点进行了 SPARQL 查询。
我就以主题为例:
SELECT ?museum ?EnglishAbstract ?RussianAbstract
WHERE {
?museum dbpedia-owl:abstract ?EnglishAbstract.
?museum a dbpedia-owl:Museum.
filter(lang(?EnglishAbstract)='en')
optional{
?museum dbpedia-owl:abstract ?RussianAbstract.
?museum a dbpedia-owl:Museum.
filter(lang(?RussianAbstract)='ru')
}}
GROUP BY ?museum
通过这个查询(效果很好),我为每一行 (museum
) 找到了一堆 2 种语言的摘要:英语和俄语。
俄语摘要仅在可用时出现,因为我使用 "OPTIONAL"。
显然我得到了很多空属性。
我会将空白属性替换为英文摘要(始终存在)。
阅读 W3C SPARQL 页面,我发现有一个特定的测试值在设置变量时为真:Bound
我想这样写:
If Bound (?RussianAbstract), "?RussianAbstract", "?EnglishAbstract"
-->如果RussianAbstract
存在,持有它;否则,用 EnglishAbstract
代替它。
有谁知道我怎样才能让它发挥作用?
一种方法是使用 COALESCE
:
SELECT ?museum (COALESCE(?RussianAbstract, ?EnglishAbstract) as ?Abstract)