Re: [PP] Duplicates with :p*

Matt,

That should not be different in style from case 2, which has a cycle of 
2, rather than a cycle of 1.

(rename for clarity)
 > assuming data
 > :A :p :B .
 > :B :p :C .
 > :C :p :C .

 >>> Paths:
 >>> P1) :A :p* ?X
 >>> P2) :A :p+ ?Y

P1) => ?X = :A :B :C
P2) => ?Y =    :B :C

It would be good to hear from anyone who proposed the triple marking.

The overall goal here is "all paths" and one node on each path 
possibility.  That was the objective to leave the possibilities for path 
length and fits (in style) with the purchase order example where 
duplicates at the end of the path are needed for aggregation and the 
implications of equivalence of some paths and BGPs.

 >>> Details still to be worked on.

Do you have any specific proposals for the details?

 Andy

On 10/02/11 18:55, Matthew Perry wrote:
> Hi Andy,
>
> What about the other issue of node marking vs edge marking for paths like
> a-->b-->c-->c
>
> assuming data
> :a :p :b .
> :b :p :c .
> :c :p :c .
>
> and query
> { :a :p+ ?x }
>
> node marking gives
> ?x = :b :c
>
> edge marking gives
> ?x = :b :c :c
>
> Thanks,
> Matt
>
> On 2/10/2011 11:33 AM, Lee Feigenbaum wrote:
>> On 2/10/2011 11:08 AM, Andy Seaborne wrote:
>>> Summary:
>>>
>>> 1/ Proposal to have an explicit :p* operator
>>> instead of :p* = :p{0} UNION :p+
>>>
>>> 2/ path-* would return only one node for a possible path
>>> That does not path-* duplicate free if there are
>>> multiple ways to the same end.
>>
>> Read as:
>>
>> That does not make path-* duplicate free if there are multiple ways to
>> the same endpoint.
>>
>> (thanks to Andy on IRC for the clarification.)
>>
>> Lee
>>
>>> c.f. literals and aggregation example
>>> c.f. BGPs and projection.
>>>
>>> Details still to be worked on.
>>>
>>>
>>> Currently,
>>>
>>> :p* = :p{0} UNION :p+
>>>
>>> This is a source of duplicates because :p{0} may include a node and then
>>> :p+ will also include it if the path loops back to the start.
>>>
>>> Defining
>>> :p+ = :p/:p*
>>>
>>> would also lead to duplicates because of the hidden projection in the
>>> "/" so two operators are needed.
>>>
>>> Example 1:
>>>
>>> :a :p :b .
>>> :b :p :c .
>>> :c :p :a .
>>>
>>> which is:
>>>
>>> :c
>>> / \
>>> / \
>>> :a --> :b
>>>
>>> Paths:
>>> P1) :a :p* ?X
>>> P2) :a :p+ ?Y
>>>
>>> we want:
>>> P1) => ?X = :a :b :c
>>> P2) => ?Y = :a :b :c
>>>
>>> Example 2:
>>>
>>> :a :p :b .
>>> :b :p :c .
>>> :c :p :b .
>>>
>>> :c
>>> / \
>>> \ /
>>> :a --> :b
>>>
>>> we want
>>> P1) => ?X = :a :b :c
>>> P2) => ?Y = :b :c
>>>
>>>
>>> It should be possible to have the same algorithm, with different
>>> starting conditions, for :p+ and :p*.
>>>
>>> Andy
>>>
>>>
>>
>

Received on Friday, 11 February 2011 23:37:46 UTC