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 }
}