我使用官方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
)都有两种语言的抽象:英语和俄语。
俄语摘要仅在可用时才存在,因为我使用“可选”。
显然我得到了很多空洞的属性。
我会用英文摘要(总是存在)替换空白属性。
阅读W3C SPARQL页面,我发现设置变量时有一个特定的测试值:Bound
我想写这样的东西:
If Bound (?RussianAbstract), "?RussianAbstract", "?EnglishAbstract"
- >如果RussianAbstract
存在,请保留;否则,请将EnglishAbstract
代替它。
有谁知道我怎样才能让它发挥作用?
答案 0 :(得分:2)
执行此操作的一种方法是使用COALESCE
:
SELECT ?museum (COALESCE(?RussianAbstract, ?EnglishAbstract) as ?Abstract)