- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Thu, 23 Nov 2006 19:41:59 +0000
- To: Steve Harris <steve.harris@garlik.com>
- Cc: Fred Zemke <fred.zemke@oracle.com>, public-rdf-dawg@w3.org
Steve Harris wrote:
>
>
> On 23 Nov 2006, at 17:37, Fred Zemke wrote:
>
>>
>> { T1 .
>> T2 . }
>> OPTIONAL { T3 }
>> OPTIONAL { T4 }
>> OPTIONAL { T5 }
>
> I still prefer it without the extra {}s.
>
>> and the query processor can effectively supply the rest
>> as shown in your expansion.
>>
>>>
>>> Plus, explaining, and implementing the difference between:
>>>
>>> { T1 . T2 . } OPTIONAL { T3 }
>>>
>>> and
>>>
>>> T1 . { T2 } OPTIONAL { T3 }
>>>
>>> is not something I relish.
>>
>> On that we have no choice, since both are presumably legal
>> in the language, whether we adopt my suggestion or not.
>
> Yes, though they may or may not mean different things. I'm not clear on
> that.
>
> My engine treats both of those as
>
> T1 . T2 . OPTIONAL { T3 }
The algebra converts that to
T1 join T2 leftjoin T3 left-associatively:
LeftJoin(Join(T1, T2), T3)
>
> which I suspect is not correct.
It is correct under the declarative/current semantics because it's everything
to the left of the OPTIONAL - the whole of the group and
T1 T2 == T1 { T2 }
[[It's not so straight forward under the constructive semantics because
inserting {} will make the difference with filters.]]
> Eg. if T1 fails, but T2 succeeds should
> the OPTIONAL be attempted?
No, for neither reading. If T1 fails, then the group fails regardless of
anything else.
Andy
>If T1 fails in my engine then T2 and the
> OPTIONAL will be shortcutted.
As does ARQ in both the engine for the current situation and the engine for
the algebra, so I hope it right :-) But it's not really the OPTIONAL that
makes the different, its the fact the T1 failing causes the group to fail.
Andy
>
> - Steve
>
Received on Thursday, 23 November 2006 19:42:13 UTC