on divergence between textual and SPARQL definitions

There are several places where the textual definition of validation differs
from the SPARQL definition.


Consider, for example the shapes graph

se:s1 rdf:type sh:Shape ;
 sh:targetNode ex:n ;
 sh:property [ sh:predicate ex:p ;
               sh:class ex:c ] .

and the data graph

ex:n ex:p ex:m .
ex:m rdf:type ex:c ;
  ex:p ex:l .


According to the textual definition of sh:ClassConstraintComponent this data
graph conforms to this shapes graph as no validation result is produced for
ex:n because its sole value for ex:p is a SHACL instance of ex:c in the data
graph.


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) } }

Therefore according to the SPARQL definition of sh:ClassConstraintComponent
this data graph does not conform to this shapes graph.


>>>>>>>>>>>>>>>>>>ISSUE<<<<<<<<<<<<<<<<<<<<<<<<
The textual and SPARQL definitions conflict in several places.  One or the
other needs to be fixed or dropped.
>>>>>>>>>>>>>>>>>>ISSUE<<<<<<<<<<<<<<<<<<<<<<<<



Peter F. Patel-Schneider
Nuance Communications

Received on Friday, 9 December 2016 02:46:50 UTC