If statement Sparql绑定()不工作

If statement Sparql绑定()不工作,if-statement,bind,sparql,If Statement,Bind,Sparql,我是Sparql的新手,我有一个从不同主题(比如parent和parentG)获取属性的查询 我试过使用 PREFIX ac: <http://ac.com/ns/> PREFIX dcterms: <http://purl.org/dc/terms/> PREFIX rdf: <htp://www.w3.org/1999/02/22-rdf-syntax-ns#> CONSTRUCT { ?item dcterms:isPartOf ?parent

我是Sparql的新手,我有一个从不同主题(比如parent和parentG)获取属性的查询

我试过使用

PREFIX ac: <http://ac.com/ns/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX rdf: <htp://www.w3.org/1999/02/22-rdf-syntax-ns#>

CONSTRUCT 
{
  ?item dcterms:isPartOf ?parent .
  ?parent dcterms:isPartOf ?parentG .
  ?item ac:scopedItem ?scopedItem .
}
WHERE 
{
  BIND ( <http://ac.com/content/Test1> as ?item )  .
  ?item dcterms:isPartOf ?parent .
  ?parent dcterms:isPartOf ?parentG .
  OPTIONAL 
  {
    OPTIONAL {?parent ac:htmlAdv ?advert .}
    BIND ( IF (BOUND (?advert), ?parent, ?parentG )  as ?scopedItem  ) .
  }
}
前缀ac:
前缀dcterms:
前缀rdf:
构造
{
?项目术语:isPartOf?父项。
?父dcterms:isPartOf?parentG。
?ac项:scopedItem?scopedItem。
}
哪里
{
绑定(作为?项)。
?项目术语:isPartOf?父项。
?父dcterms:isPartOf?parentG。
可选的
{
可选{?父ac:htmlAdv?广告。}
绑定(如果(绑定(?广告),?父级,?父级)作为?scopedItem)。
}
}

如果
?广告
未从
?父项
绑定,我想使用
?父项
并将其设置为
?scopedItem
。这是行不通的。我们正在使用Sparql 1.1

您的问题是范围问题,Sparql是自下而上评估的,因此在您放置
BIND
语句的地方,
?parent
?parentG
都不在范围内,因此无论
?advert
是否绑定,您都不会返回任何内容

您需要在查询中将
BIND
语句移出一个级别,然后它应该可以正常工作:

PREFIX ac: <http://ac.com/ns/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX rdf: <htp://www.w3.org/1999/02/22-rdf-syntax-ns#>

CONSTRUCT 
{
  ?item dcterms:isPartOf ?parent .
  ?parent dcterms:isPartOf ?parentG .
  ?item ac:scopedItem ?scopedItem .
}
WHERE 
{
  BIND ( <http://ac.com/content/Test1> as ?item )  .
  ?item dcterms:isPartOf ?parent .
  ?parent dcterms:isPartOf ?parentG .
  OPTIONAL 
  {
    ?parent ac:htmlAdv ?advert .
  }
  BIND ( IF (BOUND (?advert), ?parent, ?parentG )  as ?scopedItem  ) .
}
前缀ac:
前缀dcterms:
前缀rdf:
构造
{
?项目术语:isPartOf?父项。
?父dcterms:isPartOf?parentG。
?ac项:scopedItem?scopedItem。
}
哪里
{
绑定(作为?项)。
?项目术语:isPartOf?父项。
?父dcterms:isPartOf?parentG。
可选的
{
?父ac:htmlAdv?广告。
}
绑定(如果(绑定(?广告),?父级,?父级)作为?scopedItem)。
}

注意:这也使得使用两个
可选
子句变得不必要

谢谢Rob.,这是及时且有用的。。我得到了我的要求工作。