2015-07-10 64 views
0

我使用官方的DBpedia端点做了SPARQL查询。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种语言一堆摘要:英文俄语。 俄罗斯文摘仅在可用时才存在,因为我使用“可选”。 显然我得到了很多空的属性。

我会用英文摘要替换空白属性(始终存在)。

阅读W3C SPARQL页面,我发现有一个特殊的测试值,这是真的,当一个变量被设置:绑定

我想编写这样的事:

If Bound (?RussianAbstract), "?RussianAbstract", "?EnglishAbstract" 

- - >如果RussianAbstract存在,保持它;否则,把EnglishAbstract而不是它。

有谁知道我该如何使它工作?要做到这一点

+0

您可能会发现[空属性生成值(http://stackoverflow.com/q/19723721/1281433)是有用的,以及[SPARQL:如何使类标签显示为类的列名称?](http://stackoverflow.com/q/26114572/1281433),如果其他地址不可用,则实际使用一个值进行地址解析。 –

回答

2

一种方法是使用COALESCE

SELECT ?museum (COALESCE(?RussianAbstract, ?EnglishAbstract) as ?Abstract) 
+0

谢谢,聚结是正确的解决方案! – cataciandevil81