# Re: Another thing on property paths...

From: Andy Seaborne <andy.seaborne@epimorphics.com>
Date: Fri, 17 Dec 2010 14:19:36 +0000
Message-ID: <4D0B7178.9@epimorphics.com>
To: Axel Polleres <axel.polleres@deri.org>
CC: SPARQL Working Group <public-rdf-dawg@w3.org>

On 17/12/10 09:53, Axel Polleres wrote:
> Independent from Jorge's remarks on the comments list, I have had another
> question on PropertyPaths, particulary about ZeroLengthPath:
>
>
> Admittedly, find the e.g. the zeroLengthPath operator quite unintiuitive at the moment,
> linking *ALL* nodes with each other...

It does not.

eval(D(G), ZeroLengthPath(vx:var, path, vy:var))) =
{ {(vx, term), (vy, term)} | term in nodes(G) }
card[] = 1

NB: same *term*

Nodes are linked to themselves only by {0}

> that means that e.g.
>
> ?X knows* ?Y
>
> for not only the transitively linked pairs of resources via the knows property,
> ALL pairs of nodes in the graph... Actually, I isn't a more standard way of treating 0-length paths just as
> reflexive, i.e. only linking each node reflexively with itself?
>
> I would at least find this more intuitive and returning less noisy results, i.e. "what I can reach from one node
> in 0 steps is just the node itself" sounds intuitive to me. Am I mistaken here? If yes, why?
> At least, I don't understand why we *need* to return the pairs of all nodes here?
>
> Example:
>
> alice knows bob .
> bob knows charly .
>
> Pattern:
> ?X knows* ?Y

> Result ALL:

Where did these result come from?  I see no reason for many of them.

They include the property -

[[
A zero length path matches all subjects and all objects in the graph
]]

excludes IRIs that are only properties

?X foaf:knows* ?Y
==
{ ?X foaf:knows{0} ?Y } UNION { ?X foaf:knows+ ?Y }

{ ?X foaf:knows{0} ?Y }

---------------------------------------------------
| X                      | Y                      |
===================================================
| <http://example.org/a> | <http://example.org/a> |
| <http://example.org/b> | <http://example.org/b> |
| <http://example.org/c> | <http://example.org/c> |
---------------------------------------------------

{ ?X foaf:knows+ ?Y }

---------------------------------------------------
| X                      | Y                      |
===================================================
| <http://example.org/a> | <http://example.org/b> |
| <http://example.org/a> | <http://example.org/c> |
| <http://example.org/b> | <http://example.org/c> |
---------------------------------------------------

so ?X foaf:knows* ?Y

---------------------------------------------------
| X                      | Y                      |
===================================================
| <http://example.org/a> | <http://example.org/a> |
| <http://example.org/a> | <http://example.org/b> |
| <http://example.org/a> | <http://example.org/c> |
| <http://example.org/b> | <http://example.org/b> |
| <http://example.org/b> | <http://example.org/c> |
| <http://example.org/c> | <http://example.org/c> |
---------------------------------------------------

which gets me:

?X ?Y  Reason:
-----
a  a   {0}
a  b   +
a  c   +
a  k   ?? property
b  b   {0}
b  a   ?????
b  c   +
b  k   ?? property
c  c   {0}
c  a   ?????
c  b   ?????
c  k   ?? property
k  k   ?? property
k  a   ?? property
k  b   ?? property
b  c   +
a  b   + <--- repeat why?
b  c   + <--- repeat why?
a  c   + <--- repeat why?

Result REFLEXIVE:
?X ?Y
-----
a  a
b  b
c  c
k  k   ?? property
a  b
b  c
a  c
>
> (a = alice, b = bob, c = chalry, k = knows)
>
> Can someony explain to me why the reflexive only version of ZeroLengthPath wouldn't work with the rest?

>
> Axel
Received on Friday, 17 December 2010 14:20:14 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:01:02 UTC