- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Wed, 5 Aug 2015 17:35:40 -0700
- To: Holger Knublauch <holger@topquadrant.com>, public-data-shapes-wg <public-data-shapes-wg@w3.org>
I have not modified my position on recursion. However, I have not had
adequate time to work on this issue. Therefore, so that other issues can be
discussed and possibly resolved, I have been careful to connect problems and
solutions only to particular kinds of recursion that are relevant to the issue
at hand.
peter
On 08/05/2015 05:04 PM, Holger Knublauch wrote:
> Hi Peter,
>
> sometimes over the last few weeks you seem to have given up your preference
> towards disallowing recursion in general. (I also notice that none of the
> Recursion use cases on the corresponding Wiki page [1] have received a correct
> work-around). Unless I am again misunderstanding your position, I think this
> is a positive development towards a resolution of several tickets and we can
> focus on controlling the error handling.
>
> If someone can come up with a definite response to the error handling
> questions that is implementable in SPARQL then I'd also be happy to shift away
> from my preference of executing the AND/OR operands in order.
>
> Holger
>
> [1]
> https://www.w3.org/2014/data-shapes/wiki/ISSUE-66:_SHACL_spec_ill-founded_due_to_non-convergence_on_data_loops
>
>
> On 8/5/2015 10:53, Peter F. Patel-Schneider wrote:
>> My comments at last week's teleconference during
>> http://www.w3.org/2015/07/30-shapes-minutes.html#item07 was not exactly to
>> suggest that errors should be treated as false, but to point out that SPARQL
>> has a solution for boolean operators that works with errors and does not
>> require ordered evaluation of conjuncts and disjuncts. The solution is
>> detailed at http://www.w3.org/TR/sparql11-query/#evaluation
>>
>>
>> Does this work for SHACL? It may depend on what constructs are permitted,
>> and thus what kinds of logical errors can be produced.
>>
>> For example, consider the following shape schema with all shapes totally
>> open
>>
>> <NS> { :r ! <NS> }
>> <E> { }
>> <S> { :s ( <NS> or <E> ) }
>>
>> with graph
>>
>> { :a :r :b .
>> :b :r :a .
>> :z :s :a . }
>>
>> Here there appears to be two possibilities for shape membership. In one
>> possibility :a is in <NS> but :b is not and in the other the opposite is the
>> case. It appears, however, that either way :z is in <S> and that the order
>> of the disjuncts in the definition of <S> shouldn't affect the answer.
>>
>> However, consider the same shape schema but with graph
>>
>> { :a :r :b .
>> :b :r :c .
>> :c :r :a .
>> :z :s :a . }
>>
>> Here there does not appear to be any possibilities. If :a is in <NS> then
>> it shouldn't be. However, if :a is not in <NS> then it should be. So
>> should :z be in <S>? Probably not, as there is something going
>> fundamentally wrong here. Maybe this malaise should pollute all answers,
>> even to the point of generating errors instead of non-membership. However,
>> again, the order of the disjuncts in the definition of <S> shouldn't affect
>> the answer.
>>
>> Maybe a more complex version of the SPARQL treatment of errors in boolean
>> operators will be the right solution if this construct is allowed in SHACL.
>> However, I do not know if I have enumerated all the possibilities that have
>> to be considered.
>>
>> peter
>>
>>
>> On 08/02/2015 09:13 PM, Holger Knublauch wrote:
>>> Peter, as far as I understood it, your proposal in the recent meeting was to
>>> treat (recursion) errors to mean "false". For example if a Shape would be
>>> defined as A OR B and A leads to infinite recursion while B evaluates to true
>>> then the overall Shape would still be true. Likewise, if S = A AND B and A
>>> leads to an infinite loop then the overall result will always be false,
>>> regardless of B.
>>>
>>> I have not made up my mind yet whether this interpretation makes sense. My
>>> understanding was that infinite recursion (or any other fatal error) means "I
>>> don't know"/"unknown", and that these fatal errors are always propagated up to
>>> the outside caller(s) to make sure that the user gets a meaningful error
>>> message. Your suggested interpretation basically says that infinite recursion
>>> means "false", and errors would not be propagated up.
>>>
>>> Are we sure this interpretation is desirable and well-defined? I have no
>>> strong opinion (others in the WG have thought more about recursion than I
>>> have) but I guess we should then apply the same changes to sh:valueShape, XOR
>>> and NOT.
>>>
>>> If nobody sees problems, then I'd appreciate a proposal so that we can move
>>> on. But as long as there are doubts that this alternative is well-defined, I'd
>>> prefer to play it safe and continue with the current design.
>>>
>>> Holger
>>>
>>> PS: Arthur asked about why an rdf:List is used instead of direct properties.
>>> Whatever we decide about the execution order, I still believe we need an
>>> rdf:List so that tools can display consistent expressions - if they are
>>> unordered triples, there is no way to have users enter "A OR B" and then
>>> always get "A OR B" in the display back. An alternative design would be to
>>> limit AND and OR to two operands, sh:left and sh:right, but that sounds rather
>>> ugly.
>>>
>
>
Received on Thursday, 6 August 2015 00:36:13 UTC