Re: [TF-PP] Scoping the design space

On 28 Sep 2009, at 17:15, Paul Gearon wrote:

[snip]

>> Naively (ignoring complexity problems), allowing ?p to take any  
>> value seems to produce more
>> interesting use cases, especially in untidy real world data, where  
>> people might use different
>> predicates interchangably, e.g:
>>
>> SELECT ?s ?ob1 ?ob2 ?p WHERE {
>>     ?s ?p* ?y .
>>     FILTER(?p = <:somePredicate> || ?p =<:someSimilarPredicate> ) .
>> }
>
> Filtering is not binding, though it may often appear the have the same
> effect (ignoring performance). This is a case that shows the
> difference though.
>
> Does {?s ?p* ?o} bind every individual predicate transitively, or does
> it treat all predicates as a group and search through the group
> transitively? As an example, consider the following family:
>
> :fred : hasAncestor :mary
> :mary : hasAncestor :anne
> :mary :hasSibling :peter
> :peter :hasSibling :harry
>
> If we treat each predicate individually, then we'd get the following  
> bindings:
> ?s    ?p     ?o
> :fred :hasAncestor :mary
> :mary :hasAncestor :anne
> :fred : hasAncestor :anne    <-- new
> :mary :hasSibling :peter
> :peter :hasSibling :harry
> :mary :hasSibling :harry    <-- new

That depends on the semantics of *, in regex it means "0 or more", so  
I'd expect to see

:fred :hasAncestor :fred
:mary :hasAncestor :mary
etc.

with ?p+ I'd expect to see what you have above. ?p* is useful for RDFS  
(and OWL?) style transitive properties though, as they have that  
semantics.

> This could be useful for following many predicate chains at once,
> though it doesn't offer significantly more functionality than doing a
> union between the results of following each predicate individually.
> Still, it's useful.
>
> If we treat the predicates as a group that can be transitive, then we
> might see something like the following binding:
>
> ?s    ?p     ?o
> :fred : hasAncestor :mary
> :mary : hasAncestor :anne
> :mary :hasSibling :peter
> :peter :hasSibling :harry
> :fred :hasAncestor :anne    <-- new
> :mary :hasSibling :harry    <-- new
> :fred :hasAncestor/:hasSibling :peter    <-- new
> :fred :hasAncestor/:hasSibling :harry    <-- new

?p not taking a single value per row seems at odds with the SPARQL  
algebra to me.

> P.S. in an earlier email I mistyped, and said our transitive
> predicates costs Mulgara log(n) when I should have said n.log(n). But
> you all knew what I meant, right?  :-)

Yup :)

- Steve

-- 
Steve Harris
Garlik Limited, 2 Sheen Road, Richmond, TW9 1AE, UK
+44(0)20 8973 2465  http://www.garlik.com/
Registered in England and Wales 535 7233 VAT # 849 0517 11
Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10  
9AD

Received on Tuesday, 29 September 2009 09:53:05 UTC