这是基于用于计算在描述中使用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