2

私は 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  ) .
  }
}

?advertが からバインドされていない場合は、を使用して として作成し?parentたいと考えています。これは機能していません。Sparql 1.1 を使用しています?parentG?scopedItem

4

1 に答える 1

1

あなたの問題はスコープの1つです。SPARQLはボトムアップから評価されるため、BINDステートメントをどちらも配置していない?parent?parentG、スコープ内にない時点で、?advertバインドされているかどうかに関係なく、何も返されません。

ステートメントをクエリ内の 1 レベル外に移動する必要があり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  ) .
}

これにより、2 つのOPTIONAL句を使用する必要がなくなることにも注意してください。

于 2013-04-10T18:14:06.017 に答える