2013-04-10 37 views
1

我是Sparql的新手。我有一個查詢從不同的主題(比如parent和parentG)獲取屬性。Sparql bound()不起作用

我一直在使用

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束縛,我想要去?parentG並使其作爲?scopedItem。這不起作用。我們使用SPARQL 1.1

回答

0

你的問題是作用域之一,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 ) . 
} 

注意這也使得使用兩個OPTIONAL條款不必要的

+0

感謝羅布,這是及時和有益的..我得到了那爲我的要求工作。 – gpsbabu 2013-04-11 09:14:55