SPARQL 为缺失字段生成值
SPARQL generate Values for missing fields
我正在尝试编写 SELECT,它为我提供了 Table 中的所有值。我有可选值,如果它们不存在,我希望用标准值填充它们。
这是我的代码:
SELECT * WHERE {
?a nmo:hasObject nm:coin
OPTIONAL
{ ?a nmo:hasAuthority ?b }
OPTIONAL
{ ?a nmo:hasMaterial ?c }}
我得到的 id 如下:
?a ?b ?c
1 yx
2 ab
3 xz bc
我想要的是如果没有值就用字符串"missing"填充:
?a ?b ?c
1 yx "missing"
2 "missing" ab
3 xz bc
关于如何构建 SELECT 以获得此输出的任何想法?
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)
}
我可能会在这里使用 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 }
}
我正在尝试编写 SELECT,它为我提供了 Table 中的所有值。我有可选值,如果它们不存在,我希望用标准值填充它们。
这是我的代码:
SELECT * WHERE {
?a nmo:hasObject nm:coin
OPTIONAL
{ ?a nmo:hasAuthority ?b }
OPTIONAL
{ ?a nmo:hasMaterial ?c }}
我得到的 id 如下:
?a ?b ?c
1 yx
2 ab
3 xz bc
我想要的是如果没有值就用字符串"missing"填充:
?a ?b ?c
1 yx "missing"
2 "missing" ab
3 xz bc
关于如何构建 SELECT 以获得此输出的任何想法?
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)
}
我可能会在这里使用 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 }
}