- From: Dimitris Kontokostas <kontokostas@informatik.uni-leipzig.de>
- Date: Sun, 12 Jun 2016 00:33:18 +0300
- To: "Peter F. Patel-Schneider" <pfpschneider@gmail.com>
- Cc: RDF Data Shapes Working Group <public-data-shapes-wg@w3.org>
- Message-ID: <CA+u4+a0k4PEy-qzPk9tyKenC7ibTvCMQFS85WSK4wmvtqOX+iw@mail.gmail.com>
On Fri, Jun 10, 2016 at 4:21 PM, Peter F. Patel-Schneider < pfpschneider@gmail.com> wrote: > Pre-binding and sh:hasShape form a large part of the meaning of SHACL. > They > are not just part of the extension mechanism in SHACL but are used in the > definition of the core of SHACL. > > In Section 1.5 there is > > This specification uses parts of SPARQL 1.1 in the normative definition > of > the semantics of the SHACL Core constraints and scopes. > > SPARQL variables using $ marker represent external values that must be > pre-bound in the SPARQL query before execution. > > Some SHACL constraints are defined with the use of the sh:hasShape > function. > > In Section 4 there is > > The SPARQL definitions in this section also assume the existence of a > built-in SPARQL function sh:hasShape. > > Then pre-binding shows up in the normative definition of every core > constraint component and sh:hasShape shows up the normative definitions of > sh:not, sh:and, sh:or, sh:shape, and sh:qualifiedValueShape. > It is possible to implement the core of SHACL without using sh:hasShape and > pre-binding but this implementation will be implementing something that is > defined in large part by sh:hasShape and pre-binding. > Hi Peter, Could these core components be defined in the spec only with prose or would we need another way (like a query generation algorithm)? > In the extension part of SHACL, sh:hasShape and pre-binding are used > directly when writing the SPARQL code that implement templates. Problems > with sh:hasShape and pre-binding thus are not just problems with an > underlying definition of SHACL but also directly affect the meaning of > constructs that are employed by users of SHACL. > > It is possible to have a SPARQL-based extension mechanism for SHACL that > does not use sh:hasShape and does not use pre-binding. Thus neither > sh:hasShape nor pre-binding is needed for SHACL. > > > sh:hasShape is currently defined in Appendix A of the SHACL specification, > http://w3c.github.io/data-shapes/shacl/#hasShape. sh:hasShape currently > produces three results: undefined recursion is encountered, true if no > violation validation result is produced, and false if some violation result > is produced. > > This desription of sh:hasShape has several problems. First, it is unclear > as to which validation results count in the description. Is it only result > from the direct validation of the focus node or do results from embedded > shapes count? Second, the three possibilities are not disjoint. Third, > recursion is not possible in SHACL so the undefined result can never occur. > > However, the biggest problem with sh:hasShape is that it depends on > pre-binding. sh:hasShape has to evaluate SPARQL queries in a context where > several query variables are limited to certain values. This is an innate > peculiarity of using a SPARQL function that in turn initiates further > SPARQL > query processing so problems in pre-binding are problems for sh:hasShape. > > > Pre-binding of variables in SHACL is currently defined in Appenix B of the > SHACL specification, http://w3c.github.io/data-shapes/shacl/#pre-binding. > > Pre-binding is defined, in full, as > > 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 scopes 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. > > This definition does not align with the definition of SPARQL at all. > SPARQL > is a query language and often does not evaluate query variables. In > particular, SPARQL does not evaluate query variables in basic graph > patterns. The definition of basic graph pattern matching in SPARQL, from > https://www.w3.org/TR/sparql11-query/#BasicGraphPattern, is > > Let BGP be a basic graph pattern and let G be an RDF graph. > μ is a solution for BGP from G when there is a pattern instance mapping P > such that P(BGP) is a subgraph of G and μ is the restriction of P to the > query variables in BGP. > > Note that there is no notion of evaluation here at all. Using evaluation > as > the basis of the definition of pre-binding is thus disconnected from a > large > part of the behaviour of SPARQL. > > This disconnect shows up in even the simplest of SPARQL queries that > implement constraint components. Consider the normative SPARQL definition > of sh:class in property constraints > > SELECT $this ($this AS ?subject) $predicate (?value AS ?object) > WHERE { > $this $predicate ?value . > FILTER NOT EXISTS { ?value rdf:type/rdfs:subClassOf* $class } . > } > > The pre-binding of $this and $predicate does not affect meaning of the > basic > graph pattern > > $this $predicate ?value . > > so that, according to the definitionf of SHACL and SPARQL, the solution > sequence generated from matching this basic graph pattern will have > solutions for each triple in the data graph. This is already a total > failure but what happens next? Well the filter is used to remove some of > the solutions, using the SPARQL semantic Filter function. Each solution is > checked to see whether the filter evaluates to true for that solution. > Because the filter expression is an EXISTS expression it uses the SPARQL > substitute function, which for each query variable in ?value > rdf:type/rdfs:subClassOf* $class replacces it by its mapping in the > solution, if any. There is a solution for each triple in the data graph > this will result in that many substitutions. Next each of these > substitutions is separately matched against the data graph. This matching > will have a result for values of $this that are the subject of an rdf:type > triple and then these solutions are filtered out. So the end result will > have a solution for every triple in the data graph where the subject of the > triple is not the subject of an rdf:type triple. > > Of course this is completely not what the result should be. However, it is > what the current definition of SHACL says the result is. > > > Some SPARQL expert is going to have to take a close look at pre-binding to > determine what its definition should be. However, before that there needs > to be a closer look taken at how pre-binding should operate. For example, > should prebinding affect variables throughout the query or only variables > that would be affected by a BIND construct at the beginning of the query? > There should be some examples generated to show how pre-binding works under > these two options so that the working group can make an informed decision. > > > Peter F. Patel-Schneider > Nuance Communications > > > -- Dimitris Kontokostas Department of Computer Science, University of Leipzig & DBpedia Association Projects: http://dbpedia.org, http://rdfunit.aksw.org, http://aligned-project.eu Homepage: http://aksw.org/DimitrisKontokostas Research Group: AKSW/KILT http://aksw.org/Groups/KILT
Received on Saturday, 11 June 2016 21:34:13 UTC