- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Fri, 9 Dec 2016 09:50:28 -0800
- To: Andy Seaborne <andy@apache.org>, public-rdf-shapes@w3.org
The point is that SPARQL does not evaluate variables when it does BGP
matching. So SHACL pre-binding does not affect SPARQL BGP matching.
The evaluation of BGP ( $this ex:p ?value ) thus does not take into account
the pre-binding of this, resulting in two solution mappings.
peter
On 12/09/2016 09:30 AM, Andy Seaborne wrote:
> Appendix A says:
>
> """
> Pre-binding a variable with a value means that the SPARQL processor needs to
> evaluate all occurrences of variables with that same name (including
> occurrences in inner targets and nested SELECT queries) so that they have the
> provided value. In other words, whenever a SPARQL processor evaluates a
> pre-bound variable, it must use the given value.
> """
>
> While the wording may not be ideal, as already noted in ISSUE-68, I read "they
> have the provided value". The provided value is "(this, ex:n)".
>
> So the core comment here is ISSUE-68?
>
> Andy
>
> On 09/12/16 16:09, Peter F. Patel-Schneider wrote:
>> Remember that the definition of pre-binding is as in the SHACL document,
>> Appendix A. The definition involves evaluation of SPARQL variables, which
>> does not happen when matching BGPs.
>>
>> peter
>>
>> On 12/09/2016 02:19 AM, Andy Seaborne wrote:
>>> Peter,
>>>
>>> On 09/12/16 02:46, Peter F. Patel-Schneider wrote:
>>> ...
>>>> The SPARQL definition here uses the following SPARQL query
>>>>
>>>> SELECT DISTINCT $this ?value
>>>> WHERE {
>>>> $this ex:p ?value .
>>>> FILTER NOT EXISTS
>>>> { $value rdf:type/rdfs:subClassOf* $class . }
>>>> }
>>>>
>>>> with this pre-bound to ex:n and class pre-bound to ex:c.
>>>>
>>>> According to the SHACL document
>>>> evaluating this SPARQL query will produce a non-empty solution sequence,
>>>> namely
>>>> { { (this, ex:m), (value,ex:l) } }
>>>> because
>>>> $this ex:p ?value .
>>>> will produce the set of solutions
>>>> { { (this, ex:n), (value,ex:m) } ,
>>>> { (this, ex:m), (value,ex:l) } }
>>>
>>> I don't follow this part.
>>>
>>> On just the " $this ex:p ?value ." pattern, why, when ?this=ex:n, is the
>>> second solution present?
>>>
>>> I think there is only one match. { { (this, ex:n), (value,ex:m) } }
>>> and then the overall result is zero rows.
>>>
>>>
>>> For both proposal-A and proposal-B used for pre-binding, that seems to be the
>>> case. $this is restricted before the FILTER is applied.
>>>
>>> (NB I acknowledge that Proposal-A is not proposed for pre-binding and wasn't
>>> suggested as such)
>>>
>>> Andy
>>>
Received on Friday, 9 December 2016 17:51:04 UTC