- 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