Это не слишком сложно. В RDF ваши данные могут быть такими простыми, как прямое кодирование графа:
@prefix : <urn:ex:>
:A :connectedTo :B .
:B :connectedTo :C, :D .
:D :connectedTo :F .
:F :connectedTo :E, :G .
Затем, используя пути свойств SPARQL, вы можете найти каждый узел, для которого существует путь свойств connectedTo от A к нему и от него к E. , включая сами A и E:
prefix : <urn:ex:>
select ?mid where {
:A :connectedTo* ?mid .
?mid :connectedTo* :E .
}
-------
| mid |
=======
| :D |
| :F |
| :B |
| :A |
| :E |
-------
Если вы хотите привести их в порядок, вы можете дополнительно подсчитать, сколько элементов находится между A и «средним узлом». (Это описано в моем ответе на Можно ли получить положение элемента в коллекции RDF в SPARQL?)
prefix : <urn:ex:>
select ?mid (count(?premid) as ?i) where {
:A :connectedTo* ?premid .
?premid :connectedTo* ?mid .
?mid :connectedTo* :E .
}
group by ?mid
-----------
| mid | i |
===========
| :D | 3 |
| :F | 4 |
| :E | 5 |
| :B | 2 |
| :A | 1 |
-----------
If you actually want a single result that looks more or less like "A, B, C, D, E, F", then you adapt these queries using the techniques from my answer to Aggregating results from SPARQL query, which shows how to concatenate these into a single string.
person
Joshua Taylor
schedule
11.08.2015