- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 5 May 2017 07:48:08 +1000
- To: "Peter F. Patel-Schneider" <pfpschneider@gmail.com>, public-rdf-shapes@w3.org
On 5/05/2017 4:04, Peter F. Patel-Schneider wrote: > This is the first requirement that SHACL implementations signal a failure > when they encounter shapes that are ill-formed or that they do not handle. > > This is a significant change to SHACL-SPARQL and requires sigmificant change > to SHACL-SPARQL implementations. Checking the restrictions on pre-binding > is not simple at all as it requires determining whether pre-bound variables > are in scope in subqueries. > > The test pre-binding-006.ttl does not return all potentially pre-bound > variables from its subquery and thus now results in a failure. The test > suite is missing an example showing a subquery using SELECT * that does > return all potentially pre-bound results, such as > > ex:s1 a sh:NodeShape ; > sh:sparql [ sh:select """ > SELECT ?this { > SELECT * WHERE { $this a $value . $shapesGraph a $currentShape } > }""" ] . > > > Given that there is now a requirement on SHACL implementations to check for > certain kinds of ill-formed shapes or shapes that they do not handle it is > even less defensible to not require them to check for other kinds of > ill-formed shapes and shapes that they do not handle. The only reason why we have changed the policy to be stricter is because you have filed a formal objection. I otherwise wouldn't have favored this approach, esp because it reduces the flexibility for implementers in case more syntax cases get supported in the future. I am very sad that the W3C process allows this kind of outside influence and hope it doesn't get overused further. Holger > Peter F. Patel-Schneider > Nuance Communications > > > > > On 05/03/2017 07:06 PM, Holger Knublauch wrote: >> On 3/05/2017 1:52, Peter F. Patel-Schneider wrote: >>> This is a formal objection to the definition of pre-binding approved by the >>> working group in its meeting of 26 April 2017 and in the SHACL Editor's >>> Draft current as of 28 April 2017 (but with date indicated as 11 April >>> 2017). >>> >>> Pre-binding has never had a suitable definition in SHACL. Problems with >>> pre-binding have been known to the working group since at least June of >>> 2015. The current definition of pre-binding has multiple documented >>> problems. The only change to pre-binding from Candidate Recommendation has >>> been to paper over some of these problems by excluding large numbers of >>> SPARQL queries from SHACL-SPARQL. >>> >>> These exclusions introduce new interoperability problems for SHACL. These >>> exclusions remove many useful SPARQL queries from SHACL-SPARQL, including an >>> example SPARQL query in the SHACL document. These exclusions also do not >>> exclude all SPARQL queries whose meaning is not as expected with >>> pre-binding. >>> >>> The solution to the continuing problems with pre-binding is not to exclude >>> more and more of SPARQL but to either fix pre-binding so that it works >>> correctly or eliminate pre-binding from SHACL. >>> >>> >>> >>> Although this is nowhere stated in the SHACL document, it appears that the >>> indent of the current definition of pre-binding is to make the binding of a >>> pre-bound variable available everywhere in the query except for in >>> sub-queries that do not project the variable. The current definition of >>> pre-binding tries to achieve this by two main mechanisms. The first >>> mechanism is renaming of variables in sub-queries that are not projected to >>> fresh variables. The second mechanism joins pre-bound bindings to all basic >>> graph patterns, property path expressions, and named graph patterns in the >>> query. >>> >>> However, the current definition of pre-binding fails to achieve the goal >>> stated above. The bindings of pre-bound variables are sometimes not >>> available when needed. This causes problems in a large number of queries, >>> many of which have been already pointed out. Also the pre-bound bindings >>> are available even in places where none of the variables are in scope. This >>> causes problems for MINUS. >>> >>> The recent changes to the pre-binding section of the SHACL document do not >>> actually change the definition of pre-binding to fix these problems but >>> instead just exclude many SPARQL queries from SHACL, presumably to keep only >>> non-problematic queries. The exclusions are very broad, and eliminate many >>> queries that do not have any problems for the current definition of >>> pre-binding. >>> >>> The exclusion of so many SPARQL queries, particularly as many of them are >>> non-problematic, is a new source of interoperability problems for SHACL. It >>> is easy for users to write SHACL-SPARQL shapes that are excluded. The >>> behaviour of SHACL-SPARQL implementations on these excluded shapes is >>> undefined but SHACL-SPARQL implementations are not required to produce any >>> sort of signal when they encounter these excluded shapes. Different >>> completely conforming SHACL-SPARQL implementations are thus allowed to >>> silently produce different results for these shapes. >> This has been changed today: engines are now required to produce a failure if >> they detect such queries. >> >>> The exclusions are so broad that they even exclude the example potential >>> definitional query for sh:EqualsConstraintComponent in the current SHACL >>> document itself. >>> >>> The exclusions do not even exclude all problematic queries. For example, a >>> SPARQL-SHACL shape based on the non-excluded query >>> SELECT DISTINCT $this WHERE { >>> { SELECT $this ?class WHERE { VALUES ?class { ex:C ex:D } } } >>> BIND ( $this AS ?that ) >>> ?that a ?class . } >>> will produce violations for all target nodes whenever any node in the graph >>> has ex:C or ex:D as a value for rdf:type counter to the expectation that it >>> should produce violations only for target nodes that have ex:C or ex:D as a >>> value for rdf:type. >>> >>> The use of a problematic definition of pre-binding needs to be eliminated >>> from SHACL. Papering over these problems, even if possible, is not a >>> suitable solution. >> You have enumerate various issues that had already been fixed before you wrote >> your formal objection. MINUS and VALUES were already made illegal. The example >> at sh:equals was already removed. You may want to update your objection to >> reflect the latest changes. >> >> You have been a very vocal critic of pre-binding for over two years now. But >> it is much easier to criticize a design than to propose workable alternatives. >> No-one has produced a better definition of pre-binding so far. Dropping the >> whole feature of SHACL-SPARQL only because of some cases that can easily be >> worked around is not a productive proposal. Pre-binding has been used >> successfully in practice in many applications including those based on SPIN. >> If you can produce a better definition of such a feature that still covers >> similar use cases then it will certainly happily be considered for future >> revisions of SHACL. This is version 1.0 only, and few of the widely used >> standards (RDF, SPARQL, OWL) have solved everything perfectly in their first >> iterations. >> >> Holger >>
Received on Thursday, 4 May 2017 21:48:49 UTC