我正在尝试写一个SELECT,它给了我表中的所有值。我有可选的值,我希望这些值填充标准值,如果它们不存在。
这是我的代码:
SELECT * WHERE {
?a nmo:hasObject nm:coin
OPTIONAL
{ ?a nmo:hasAuthority ?b }
OPTIONAL
{ ?a nmo:hasMaterial ?c }}
我得到以下内容:
?a ?b ?c
1 yx
2 ab
3 xz bc
如果没有值,我想要的是填充字符串“missing”:
?a ?b ?c
1 yx "missing"
2 "missing" ab
3 xz bc
有关如何构造SELECT以获得此输出的任何想法?
答案 0 :(得分:5)
我可能在这里使用coalesce:
SELECT
?a
(coalesce (?b, ?missing) as ?bb)
(coalesce (?c, ?missing) as ?cc)
WHERE {
VALUES ?missing { "missing" }
?a nmo:hasObject nm:coin
OPTIONAL
{ ?a nmo:hasAuthority ?b }
OPTIONAL
{ ?a nmo:hasMaterial ?c }
}
答案 1 :(得分:3)
SPARQL 1.1 BIND
与IF
结合使用可以实现此目的:
SELECT * WHERE
{ ?a nmo:hasObject nm:coin
OPTIONAL
{ ?a nmo:hasAuthority ?b_tmp }
OPTIONAL
{ ?a nmo:hasMaterial ?c_tmp }
BIND(if(bound(?b_tmp), ?b_tmp, "missing") AS ?b)
BIND(if(bound(?c_tmp), ?c_tmp, "missing") AS ?c)
}