這是基於用於計算在描述中使用SPARQL的RDF列表中的元素的位置相同的技術:Is it possible to get the position of an element in an RDF Collection in SPARQL?
如果數據是這樣的:
@prefix : <http://example.org> .
:orgA :hasSuborganization :orgB, :orgC, :orgD.
:orgB :hasSuborganization :orgE, :orgF.
:orgE :hasSuborganization :orgG.
:orgG :hasSuborganization :orgH.
描述這樣一個層次結構:
那麼你可以使用這樣的查詢:
prefix : <http://example.org>
select ?super ?sub (count(?mid) as ?distance) {
?super :hasSuborganization* ?mid .
?mid :hasSuborganization+ ?sub .
}
group by ?super ?sub
order by ?super ?sub
,得到的結果類似這樣:
$ sparql --query query.rq --data subs.n3
----------------------------
| super | sub | distance |
============================
| :orgA | :orgB | 1 |
| :orgA | :orgC | 1 |
| :orgA | :orgD | 1 |
| :orgA | :orgE | 2 |
| :orgA | :orgF | 2 |
| :orgA | :orgG | 3 |
| :orgA | :orgH | 4 |
| :orgB | :orgE | 1 |
| :orgB | :orgF | 1 |
| :orgB | :orgG | 2 |
| :orgB | :orgH | 3 |
| :orgE | :orgG | 1 |
| :orgE | :orgH | 2 |
| :orgG | :orgH | 1 |
----------------------------
這裏的竅門是要認識到從X到Y的任何路徑可以作爲一個被看作(可能是空的)從X到某個中間節點Z的路徑(非空表示可以選擇X作爲Z)與從Z到Y的(非空)路徑級聯。可能的Z方式選擇數表示路徑的長度。
這不是一個簡單的在線查詢,但是這個_can_可以實現。 [是否可以在SPARQL中的RDF集合中獲取元素的位置?](http://stackoverflow.com/q/17523804/1281433)簡化爲相同類型的查詢,並且答案有一個響亮的「是」。 – 2013-09-24 20:23:09