- From: Axel Polleres <axel.polleres@deri.org>
- Date: Mon, 27 Feb 2012 23:16:05 +0100
- To: Andy Seaborne <andy.seaborne@epimorphics.com>
- Cc: "SPARQL Working Group" <public-rdf-dawg@w3.org>
Hi Andy,
Two questions for clarification:
> A minimal change is a pair of new operators {*} and {+} which are the
> analogous to * and +.
>
> {*} and {+} are counting
> * and + are not (a change to 2LC).
1) So, would e.g. :p{*}/:q* mix non-counting and counting?
2) Is this meant on top or alternatively to DISTINCT() ?
best,
Axel
On 27 Feb 2012, at 22:49, Andy Seaborne wrote:
> 1/ There are two use cases for arbitrary length paths
> UC1: Finding or testing for connectivity of nodes: e.g. rdfs:subClassOf*
> UC2: Coping with variable structures and aggregation
>
>
> 2/ Property paths can be expensive, notably in UC2.
>
> 3/ We want to leave open the possibility of path lengths
>
> (foaf:knows* is not a clear cut example - your LinkedIn graph is not
> simple connectivity)
>
> 4/ PP transforms are used to define property path evaluation
> leaving only ZeroLengthPath, ZeroOrMorePath, OneOrMorePath, and
> NegatedPropertySet to be defined in the evaluation semantics.
>
> -----
>
> DISTINCT is one way forward.
>
> ?x DISTINCT(path) ?y .
>
> is the pairs of (?x,?y) connected by path.
>
> ?x DISTINCT(path*) ?y is connectivity.
> ?x path* ?y is counting as per current spec.
>
> -----
>
> A minimal change is a pair of new operators {*} and {+} which are the
> analogous to * and +.
>
> {*} and {+} are counting
> * and + are not (a change to 2LC).
>
> (This is based on guessing {?length} is a future path length syntax -
> see also discussion of {N,M}
>
> This is less than ?x DISTINCT(path) ?y
> It can be "as well as".
>
> Roughly: the distinct * and + are achieved by changing ALP to remove the
> last line "remove x from V". We need to check the edge cases still.
>
> It's this state management operation that controls whether the test for
> termination is along the current path (counting) or whether the function
> has visited the node at all.
>
> -----
> For {*}:
>
> {N,M} is untouched.
> {0,*} is defined to be equivalent to {*} (i.e. still counting)
>
> {N,M} can be very expensive (think {0,N} in a clique of N nodes) but it
> is syntax for ways to write the pattern as it would be in SPARQL 1.0
>
> ?X:p{1,M} ?Y is
>
> ?X :p ?Y .
> UNION
> ?x :p ?a1 . ?a1 :p Y
> UNION
> ?x :p ?a1 . ?a1 :p ?a2 . ?a2 :p ?Y
> ...
> ?x :p ?a1 . ?a1 :p ?a2 . ?a(M-1) :p ?Y
>
> Andy
>
>
Received on Monday, 27 February 2012 22:16:38 UTC