- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Tue, 25 Jan 2011 17:02:47 +0000
- To: Matthew Perry <matthew.perry@oracle.com>
- CC: W3C SPARQL Working Group <public-rdf-dawg@w3.org>
On 25/01/11 14:41, Matthew Perry wrote:
> For pp16 and pp25, these paths repeat a node (i.e. contain a cycle). I
> thought we were using a node marking algorithm to prevent cycles.
We currently have a triple marking algorithm which puts in the end node
which means you can get a duplicate from a cycle.
We could change ArbitraryLengthPath to also record node passed through.
For me, a consistent view is more important. Also, with cycles
Data: (DAG, not cycle).
:a :p :b .
:b :p :z .
:a :p :c .
:c :p :z .
and
{ :a :p/:p ?X }
{ :a :p ?v .?v :p ?X } # SPARQL 1.0
have the endpoint twice.
{ :a :p* ?X } has :z twice.
{ :a :p/:p ?X }
Data: cycle:
:a :q :b .
:b :q :c .
:c :q :a .
and { :a :q+ ?X }
does not have a duplicate but :q* does because it includes the starting
point and :q* = :q{0} UNION :q+
> 2) pp16 -- I don't understand why the path d --> e --> f --> e is
included.
pp16 is a bit unnatural if read with interpretation of the meaning of
the property: find me everyone ?X knows, recursively is "+", not "*"
Data contains:
:d foaf:knows :e .
:e foaf:knows :f .
:f foaf:knows :e .
{ ?X foaf:knows* ?Y } =
{ ?X foaf:knows{0} ?Y } UNION { ?X foaf:knows+ ?Y }
{ ?X foaf:knows{0} ?Y } ==> ?X=:d, ?Y=:d
{ ?X foaf:knows+ ?Y } ==> ?X=:d, ?Y = :e, ?f then :e again as
the triple ":f foaf:knows :e" is travered, the endpoint included and the
cycle stops.
Any loop where ArbitraryLengthPath is not starting in the cycle is going
to give a duplicate and it differenates from the same without the final
step (no cycle).
> 3) pp25 -- I don't understand why the path a --> c --> c is included.
:a :p :c .
:c :p :c .
so :c goes to :c (a cycle of one triple).
Andy
Received on Tuesday, 25 January 2011 17:03:25 UTC