SPARQL中的条件构造

SPARQL中的条件构造,sparql,Sparql,我想知道是否有可能有条件地创建construct子句的某些部分。例如,假设我们有以下构造查询: Construct {-:a a <smth:classtype>. -:a <smth:attr> ?b} WHERE {?c a <smth:anotherCalss>. Optional{?c <smth:anotherAttr> ?b}} 构造{-:a。 -:a?b}在哪里 {?C

我想知道是否有可能有条件地创建construct子句的某些部分。例如,假设我们有以下构造查询:

Construct {-:a a <smth:classtype>.
           -:a <smth:attr> ?b} WHERE
          {?c a <smth:anotherCalss>.
           Optional{?c <smth:anotherAttr> ?b}}
构造{-:a。
-:a?b}在哪里
{?CA。
可选的{c?b}

在这种情况下?b并不总是绑定到smth。我只想创建一个空白节点-:如果?b是有界的。有没有办法在sparql的construct子句中添加这样的条件?

您可以在WHERE子句中有条件地创建bnode,方法是将其放入可选的:

CONSTRUCT {?BN a <smth:classtype>.
           ?BN <smth:attr> ?b}
WHERE
          {?c a <smth:anotherCalss>.
            Optional
              {?c <smth:anotherAttr> ?b
               BIND(BNODE()AS ?BN)
              }
           }
构造{?bna。
?BN?b}
哪里
{?CA。
可选的
{c?b
绑定(BNODE()为?BN)
}
}