This question already has an answer here:
- Querying a Graph path in SPARQL 1 answer
We have the following turtle dataset representing a graph where we want to observe some properties.
@prefix v1: <http://localhost:9091/graphe/> .
@prefix v2: <http://localhost:9091/graphe#> .
v1:a v2:p v1:b.
v1:a v2:q v1:f.
v1:a v2:p v1:g.
v1:b v2:p v1:c.
v1:c v2:q v1:h.
v1:c v2:p v1:i.
v1:c v2:p v1:d.
v1:d v2:p v1:e.
v1:f v2:p v1:g.
v1:f v2:q v1:l.
v1:f v2:p v1:k.
v1:g v2:p v1:c.
v1:g v2:p v1:f.
v1:h v2:p v1:n.
v1:i v2:q v1:j.
v1:j v2:p v1:o.
v1:j v2:q v1:n.
v1:k v2:p v1:l.
v1:l v2:p v1:g.
v1:m v2:q v1:g.
v1:n v2:p v1:m.
The query we are expecting to write must print all the full paths between a source and a destination node.
PREFIX g: <http://localhost:9091/graphe-ttl-1>
PREFIX t: <http://localhost:9091/graphe#>
PREFIX o: <http://localhost:9091/graphe/>
SELECT * WHERE {
GRAPH g: {
o:a t:p{*} o:o .
}}
Here is the query we wrote so far but we are getting no output since we dont have any variables expression. Thank you for your help.
There's no way to do that with sparql property paths: you just find out whether there is a path, not what the path is.
You could try:
but I'm not convinced that will work.
Edit: ok, that does work (I thought * would be greedy), although you won't get the properties. I use !ex:nothing* to indicated 'any property' (there must be a better way):
This will give u path between a & n nodes.
select ?start ?end (count(?mid) as ?length) where {values (?start ?end) { (:a :n) } ?start :p+ ?mid . ?mid :p* ?end . }group by ?start ?end