- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Fri, 10 Jul 2015 21:37:42 -0700
- To: Holger Knublauch <holger@topquadrant.com>, public-data-shapes-wg@w3.org
I don't see how that can work correctly. I think that a full description is needed for analysis by the working group. peter On 07/10/2015 07:12 PM, Holger Knublauch wrote: > sh:hasShape creates its own (nested) validation engine. This produces new > constraint violations. If one of them is a sh:FatalError then sh:hasShape > returns unbound, which in turn may lead to further sh:FatalErrors in the > surrounding engine. > > Holger > > > On 7/11/2015 12:05, Peter F. Patel-Schneider wrote: >> So 'A while ago I had suggested a solution to the recursion question that >> would throw a fatal error ("cannot handle") whenever it encounters a recursive >> call to sh:hasShape with the same ?node/?shape pair.' >> [https://lists.w3.org/Archives/Public/public-data-shapes-wg/2015Jul/0033.html] >> is not correct? If sh:hasShape doesn't throw an error, how does the failure >> get through SPARQL FILTER constructs, e.g., in the expansion of sh:valueShape? >> >> peter >> >> >> On 07/10/2015 06:48 PM, Holger Knublauch wrote: >>> sh:hasShape doesn't throw a fatal error by itself, but reports "unbound". >>> Every SPARQL function may return no binding, and queries can chose how to >>> handle this, e.g. >>> >>> BIND (sh:hasShape(...) AS ?hasShape) . >>> FILTER bound(?hasShape) . >>> >>> The "fatal error" (sh:FatalError) is created by the surrounding SHACL engine >>> based on the results of the SELECT queries. The current convention in my draft >>> is that sh:FatalError is triggered if a SELECT query returns a variable ?error >>> = true. We can of course change this convention - maybe ?fatalError would be a >>> better indicator. >>> >>> This is all worked out on a branch, but I am not permitted to change the main >>> document anymore without resolutions from the WG. You can see the current >>> details in the shacl-ref document, e.g. at >>> >>> http://w3c.github.io/data-shapes/shacl-ref/#AbstractValueShapePropertyConstraint >>> >>> >>> You can see there that the SELECT returns ?error=true if !bound(?hasShape) >>> >>> The authors of custom constraints and macros using SPARQL can use the same >>> mechanisms to take full control over how they want to treat unsupported >>> recursion. >>> >>> Please confirm if this resolves your issue. >>> >>> HTH >>> Holger >>> >>> >>> On 7/11/15 12:32 AM, RDF Data Shapes Working Group Issue Tracker wrote: >>>> shapes-ISSUE-73 (sh:hasShape error handling): how do recursion errors from >>>> sh:hasShape interact with SPARQL [SHACL Spec] >>>> >>>> http://www.w3.org/2014/data-shapes/track/issues/73 >>>> >>>> Raised by: Peter Patel-Schneider >>>> On product: SHACL Spec >>>> >>>> If sh:hasShape can throw a fatal error, then there needs to be a >>>> specification of how this error interacts with the rest of SPARQL. >>>> >>>> Otherwise the results of certain shape validations can depend on, for >>>> example, the order of evaluation of constructs that SPARQL leaves open. >>>> >>>> In a macro defined as >>>> >>>> orproperties(?p,?q,?s) >>>> >>>> expanding to >>>> >>>> SELECT ?this (?this as ?subject) >>>> WHERE { >>>> ?this ?p ?pv . >>>> ?this ?q ?qv . >>>> FILTER (sh:hasShape(?pv, ?s, ?shapesGraph) >>>> || sh:hasShape(?qv, ?s, ?shapesGraph) ) . >>>> } >>>> >>>> the results of validation could depend on the order in which the two >>>> sh:hasShapes are evaluated. >>>> >>>> >>>> >>> >
Received on Saturday, 11 July 2015 04:38:14 UTC