W3C home > Mailing lists > Public > public-rdf-shapes@w3.org > February 2017

Re: behaviour of ASK-based validators

From: Holger Knublauch <holger@topquadrant.com>
Date: Wed, 22 Feb 2017 19:42:49 +1000
To: "Peter F. Patel-Schneider" <pfpschneider@gmail.com>, public-rdf-shapes@w3.org
Message-ID: <c46e584c-f222-a60e-e611-b93e720c3d18@topquadrant.com>
On 22/02/2017 0:41, Peter F. Patel-Schneider wrote:
> The current wording produces decidedly different results from the previous
> one.  Previously solution modifiers were stripped off ASK-based validators but
> this is no longer done.
>
> The current wording also produces a set of mappings from variables to terms,
> which is not a solution mapping if there is more than one value node and is
> never a solution sequence.  I guess that the simplest fix to get a solution
> sequence would be to say "Let QS be an unordered list of these solutions."
> This seems weird but a solution sequence is supposed to be "a list of
> solutions, possibly ordered".

I have switched from

Let <code>QS</code> be the unionof these <a>solutions</a>.

to

Let <code>QS</code> be a listof these <a>solutions</a>.

(calling a list "unordered" sounds like a contradiction to me, so "a 
list" is hopefully OK - it can indeed be any order among these solutions).

I have to confess I still don't understand why this nuance is so 
important, neither do I agree that whether we allow solution modifiers 
or not has any impact on this topic, but I hope we can close this thread 
now.

Holger

>
> But I don't know if this is what is supposed to be the case because of the
> decided change from the previous behaviour.  Going back to the previous
> behaviour would require more changes.
>
> Peter F. Patel-Schneider
> Nuance Communications
>
>
>
> On 02/20/2017 09:46 PM, Holger Knublauch wrote:
>>
>> On 16/02/2017 13:33, Peter F. Patel-Schneider wrote:
>>> Given that I don't know what the working group wants the definition to be, I
>>> can't produce wording for it.  All I can say is that the current wording does
>>> not make sense because it produces results that are not what would come from a
>>> SPARQL query.
>> The intended meaning of ASK-based validators has not changed since earlier
>> versions. See for example
>>
>>      https://www.w3.org/TR/2016/WD-shacl-20160814/#SPARQLAskValidator
>>
>> which explains how ASK-based validators can be translated into corresponding
>> SELECT queries, projecting ?this and ?value. We have moved away from this
>> definition because you pointed out that it relies on SPARQL EXISTS which is
>> currently poorly defined.
>>
>> Holger
>>
>>
>>> The union of a set of SPARQL solutions, even if a solution is considered to be
>>> a set of pairs, is neither a solution sequence nor a set of solutions nor even
>>> necessary a solution.
>>>
>>> peter
>>>
>>>
>>> On 02/15/2017 04:08 PM, Holger Knublauch wrote:
>>>> On 13/02/2017 13:28, Peter F. Patel-Schneider wrote:
>>>>> rom 6.3:
>>>>> For each value node v where the SPARQL ASK query returns false with v
>>>>> pre-bound to the variable value, create one solution consisting of the
>>>>> bindings ($this, focus node) and ($value, v). Let QS be the union of these
>>>>> solutions.
>>>>>
>>>>>
>>>>> In SPARQL a solution mapping, a.k.a. solution, is a partial function from
>>>>> variables to RDF terms.  The result of a SPARQL SELECT query is a sequence
>>>>> of solution mappings.
>>>> As defined in the terminology section, the SHACL spec uses the term solution
>>>> as a set of bindings, and a binding is a pair. We are not talking about
>>>> partial functions. Therefore the rest of your email does not apply.
>>>>
>>>>> Union is not an operation directly defined on partial functions.  So the
>>>>> wording in Section 6.3 is broken from the start.  However, partial functions
>>>>> can be considered to be a set of bindings of variables to RDF terms where
>>>>> there is at most one binding for any particular variable.  So the union in
>>>>> the construction is then the union of the partial functions considered as
>>>>> sets of bindings.
>>>>>
>>>>> But then there is the problem that the parallel construction for SELECT
>>>>> queries is just the result of the query, which is a sequence of solution
>>>>> mappings.  A sequence of solution mappings is not the same as the union of a
>>>>> set of solution mappings.
>>>>>
>>>>> First, a sequence is not a set at all.  However, often the order of the
>>>>> solution mappings is unimportant so the result of a SPARQL SELECT query can
>>>>> often be considered to be a set of solution mappings.  But even then a set
>>>>> of solution mappings is not the same as the union of solution mappings.
>>>>>
>>>>>
>>>>> Consider what happens in this situation:
>>>>> Focus Node    Value Node    query result    solution mapping
>>>>> ex:F1        ex:V1        false         {(this,ex:F1),(value,ex:V1)}
>>>>> ex:F1        ex:v2        false        {(this,ex:F1),(value,ex:V2)}
>>>>> ex:F2        ex:V1        false        {(this,ex:F2),(value,ex:V1)}
>>>>> ex:F2        ex:V1        true
>>>> How can F2/V1 first produce false and then true?
>>>>
>>>>> Result  {(this,ex:F1),(value,ex:V1),(value,ex:V2),(this,ex:F2)}
>>>>> The result is not a set of solution mappings.  It isn't even itself a
>>>>> solution mapping.
>>>>>
>>>>>
>>>>> This is yet another example of the continuing sloppiness in the SHACL
>>>>> document.  It does not appear that anyone from the working group with any
>>>>> significant mathematical expertise has bothered to take even a quick look at
>>>>> the definition of SHACL.
>>>> Peter, the WG has several members with significant mathematical expertise, and
>>>> yes we do bother a lot about the document. Making general statements and
>>>> claims as above is unhelpful and unfounded, and does not contribute to a
>>>> constructive dialog.
>>>>
>>>> The WG sees no issue with the language, but feel free to propose an
>>>> alternative, and this is the third time in this email thread that I am
>>>> suggesting this way forward.
>>>>
>>>> Holger
>>>>
>>>>
>>>>> Peter F. Patel-Schneider
>>>>> Nuance Communications
>>>>>
>>>>>
>>>>> On 02/12/2017 06:06 PM, Holger Knublauch wrote:
>>>>>> On 10/02/2017 23:47, Peter F. Patel-Schneider wrote:
>>>>>>> On 02/09/2017 09:46 PM, Holger Knublauch wrote:
>>>>>>>> On 10/02/2017 8:49, Peter F. Patel-Schneider wrote:
>>>>>>>>> On 02/09/2017 02:23 PM, Holger Knublauch wrote:
>>>>>>>>>> On 10/02/2017 1:18, Peter F. Patel-Schneider wrote:
>>>>>>>>>>> On 02/08/2017 10:50 PM, Holger Knublauch wrote:
>>>>>>>>>>>> On 9/02/2017 8:54, Peter F. Patel-Schneider wrote:
>>>>>>>>>>>>> This part of the description of the behaviour of ASK-based validators
>>>>>>>>>>>>> doesn't
>>>>>>>>>>>>> make any sense at all.  I have no idea what is supposed to be
>>>>>>>>>>>>> going on
>>>>>>>>>>>>> here.
>>>>>>>>>>>>>
>>>>>>>>>>>>> "Let QS be the union of the solutions produced for each value node v
>>>>>>>>>>>>> in vs
>>>>>>>>>>>>> so that the solution variable this is bound to the focus node and
>>>>>>>>>>>>> value is
>>>>>>>>>>>>> bound to v."
>>>>>>>>>>>> I don't see what's difficult or ambiguous here. QS is a set of
>>>>>>>>>>>> solutions.
>>>>>>>>>>>> Each
>>>>>>>>>>>> solution is a set of name-value pairs (as defined by SPARQL) and I am
>>>>>>>>>>>> enumerating these pairs.
>>>>>>>>>>>>
>>>>>>>>>>>> If you have a specific suggestion for wording that you would find
>>>>>>>>>>>> clearer to
>>>>>>>>>>>> understand, then I'd be happy to include that.
>>>>>>>>>>>>
>>>>>>>>>>>> Holger
>>>>>>>>>>> What does produce mean here?
>>>>>>>>>>> What is doing the producing?
>>>>>>>>>>> What does "so that" mean?
>>>>>>>>>> I have reworded that paragraph, please let me know if things remain
>>>>>>>>>> ambiguous
>>>>>>>>>> from your point of view.
>>>>>>>>> "For each value node v where the SPARQL ASK query returns false with v
>>>>>>>>> pre-bound to the variable value, create one solution consisting of the
>>>>>>>>> bindings ($this, focus node) and ($value, v). Let QS be the union of
>>>>>>>>> these
>>>>>>>>> solutions."
>>>>>>>>>
>>>>>>>>> Ok, so now the bindings don't come from SPARQL at all.  Instead the SHACL
>>>>>>>>> impelementation constructs them.  That was previously not clear at all.
>>>>>>>>>
>>>>>>>>> But now there appears to be several errors.
>>>>>>>>>
>>>>>>>>> The construction of QS doesn't end up with a solution sequence or even
>>>>>>>>> generally a solution at all.
>>>>>>>> QS is the set of solutions. There is no need for those to form a sequence.
>>>>>>>> Also if that set is empty, then no violation will be produced, which is
>>>>>>>> intentional.
>>>>>>> No, the construction of QS ends up with a set of mappings, not a set of
>>>>>>> solutions or a solution sequence, and this set of mappings is likely not
>>>>>>> even
>>>>>>> a solution.
>>>>>> See https://www.w3.org/TR/sparql11-query/#docResultDesc SPARQL uses the
>>>>>> terms
>>>>>> - binding: a pair (variable, RDF term)
>>>>>> - solution: a set of bindings
>>>>>> - result set: set of solutions
>>>>>>
>>>>>> The terminology used in the description of the ASK semantics is IMHO
>>>>>> consistent with this terminology and I don't see how it could be
>>>>>> misinterpreted. If you have a better proposal, please give me a substitution
>>>>>> paragraph.
>>>>>>
>>>>>>>>> Now ASK-based validators only get one pre-bound variable, value.  (Or
>>>>>>>>> is it
>>>>>>>>> instead that the value node is the variable that is being pre-bound?)
>>>>>>>>> This
>>>>>>>>> doesn't seem right.
>>>>>>>> The paragraph below the two bullet items also states that ?this will be
>>>>>>>> bound.
>>>>>>> That's not actually what the paragraph says.  What it does say doesn't make
>>>>>>> sense at all.  How can an execution be required to *use* a variable at all,
>>>>>>> and, in particular, how can it be required to *use* a variable only if the
>>>>>>> implementation supports something?
>>>>>> I don't agree with your statement that the current wording "doesn't make
>>>>>> sense
>>>>>> at all". Even if the term "use" is not formally defined there is really only
>>>>>> one possible interpretation of that term, assuming the reader applies a tiny
>>>>>> bit of good will. Anyway, I have removed the term "use" if you feel so
>>>>>> strongly about these details.
>>>>>>
>>>>>> Holger
>>>>>>
>>>>>>
>>>>>>>>>>> How is this bound to a focus node in a property shape?
>>>>>>>>>> That's consistent with how it works for SELECT queries and node
>>>>>>>>>> shapes. I
>>>>>>>>>> don't see that issue.
>>>>>>>>> A quick examination of 5.3.1, *the* place where the pre-binding of
>>>>>>>>> this (by
>>>>>>>>> the way, there are still $'s there)
>>>>>>>> I think that using $ in these cases is more readable, but anyway,
>>>>>>>> switched to
>>>>>>>> name only.
>>>>>>>>
>>>>>>>>>       and also linked to from 6.3, produces:
>>>>>>>>>
>>>>>>>>> $this     The value node.
>>>>>>>>>
>>>>>>>>> I noticed this wording some time ago.  It looked to me like a nice
>>>>>>>>> change but
>>>>>>>>> it is hard to see how the variable this can then end up bound to the
>>>>>>>>> focus
>>>>>>>>> node in SPARQL-based constraint components in most property shapes.
>>>>>>>> Right. I felt uneasy with this too, so thanks for pointing this out. I
>>>>>>>> have
>>>>>>>> raised
>>>>>>>>
>>>>>>>>         https://www.w3.org/2014/data-shapes/track/issues/230
>>>>>>>>
>>>>>>>> with the suggestion of using $this always for the focus node, but
>>>>>>>> adding the
>>>>>>>> ability to use $PATH in sh:sparql. This will make it consistent with
>>>>>>>> SPARQL-based constraint components. Do you have any concerns with this
>>>>>>>> proposal?
>>>>>>>>
>>>>>>>> I have meanwhile updated the editor's draft to reflect the changes that
>>>>>>>> I'd
>>>>>>>> like to see. I have added a new example to 5.1 to bring attention to using
>>>>>>>> sh:sparql in property shapes. I fixed some other smaller glitches along
>>>>>>>> the
>>>>>>>> way.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Holger
>>>>>>> peter
>>>>>>>
Received on Wednesday, 22 February 2017 09:43:30 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 17:02:48 UTC