这不是太难.在RDF中,您的数据可以像图表的直接编码一样简单:
@prefix : <urn:ex:>
:A :connectedTo :B .
:B :connectedTo :C, :D .
:D :connectedTo :F .
:F :connectedTo :E, :G .
Run Code Online (Sandbox Code Playgroud)
然后,使用SPARQL属性路径,您可以找到每个节点,以便有一个从A到它以及从它到E的connectedTo属性路径,包括A和E本身:
prefix : <urn:ex:>
select ?mid where {
:A :connectedTo* ?mid .
?mid :connectedTo* :E .
}
Run Code Online (Sandbox Code Playgroud)
-------
| mid |
=======
| :D |
| :F |
| :B |
| :A |
| :E |
-------
Run Code Online (Sandbox Code Playgroud)
如果你想要按顺序排列,你可以另外计算A和"中间节点"之间的数量.(这在我的回答中有描述是否可以在SPARQL中获取RDF集合中元素的位置?)
prefix : <urn:ex:>
select ?mid (count(?premid) as ?i) where {
:A :connectedTo* ?premid .
?premid :connectedTo* ?mid .
?mid :connectedTo* :E .
}
group by ?mid
Run Code Online (Sandbox Code Playgroud)
-----------
| mid | i |
===========
| :D | 3 |
| :F | 4 |
| :E | 5 |
| :B | 2 |
| :A | 1 |
-----------
Run Code Online (Sandbox Code Playgroud)
如果你真的想要一个或多或少看起来像"A,B,C,D,E,F"的单个结果,那么你可以使用我对SPARQL查询的聚合结果的答案中的技术来调整这些查询,该结果显示了如何连接这些成一个字符串.