W3C home > Mailing lists > Public > public-data-shapes-wg@w3.org > March 2016

shapes-ISSUE-131 (sh:hasShape ill defined): The definition of sh:hasShape has errors and holes [SHACL Spec]

From: RDF Data Shapes Working Group Issue Tracker <sysbot+tracker@w3.org>
Date: Mon, 07 Mar 2016 23:49:40 +0000
To: public-data-shapes-wg@w3.org
Message-Id: <E1ad4uC-000Dgl-Of@maia.w3.org>
shapes-ISSUE-131 (sh:hasShape ill defined): The definition of sh:hasShape has errors and holes [SHACL Spec]

http://www.w3.org/2014/data-shapes/track/issues/131

Raised by: Peter Patel-Schneider
On product: SHACL Spec

The SHACL spec currently defines hasShape as follows:

**************
The SPARQL definitions in this section also assume the existence of a
built-in SPARQL function sh:hasShape, which takes the following arguments:

Argument          Value Type 	Summary
$focusNode 	  rdfs:Resource The focus node to validate.
$shape 		  sh:Shape  	The shape to validate the focus node against.
$shapesGraph 	  rdfs:Resource The current shapes graph.
$recursionIsError xsd:boolean 	If set to true then any recursive occurrence
		  		of the same resource against the same shape
				signals a failure, with the function
				returning undefined. If not true then any
				recursive occurrence must return true. 

The result of the sh:hasShape function is either true, false or
undefined. The function returns true if the validation of the ?focusNode
against the given ?shape produces no validation results with severity
sh:Violation. Note that any validation results produced inside of the
sh:hasShape function are temporary, i.e. they are not added to the results
graph of the surrounding execution environment. However, some
implementations may add those nested validation results as annotations to
the surrounding validation results, via sh:detail.
**************

There are several problems with this definition.

First, it uses type in a way different from the rest of the document.  This
is not just a case where SHACL typing changed---literals never had types in
SHACL.  (This is a good argument to use a qualifier wherever SHACL typing is
meant.)

Second, dependency loops are currently invalid in SHACL.  The precise
meaning of what is a dependency loop is is a bit uncertain, but it is
certainly the case that recursively running the same shape on the same
resource counts as a dependency loop.  sh:hasShape needs to be defined in
such a way to signal that an invalid situation has occured.

Third, some constraints need to have bindings passed through the
sh:hasShape, or they cannot correctly compute validation results.  However,
SPARQL is silent on the variable environment available inside functions so
any information has to be passed via arguments.

Fourth, arguments to SPARQL functions are RDF terms and thus are not graphs.
Received on Monday, 7 March 2016 23:49:42 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 19:30:30 UTC