on sh:qualifiedValueShapesDisjoint

The recent addition of sh:qualifiedValueShapesDisjoint adds several negative
aspects to SHACL.

The definition of how sh:qualifiedValueShapesDisjoint works involves the
term "parent", which is not defined.  This is yet another example of sloppy
definition in the SHACL document.

It used to be that it was possible to determine whether a focus node
conformed to a shape by just looking at the information in the shapes graph
reachable by following links in a forward direction.  With this change links
have to be followed in a reverse direction as well.

The addition does not add any expressive power as it can be easily captured
by using slighly more complex shapes as the values of
sh:qualifiedValueShape.

What happens when an involved shape is used in several shapes, as in:

ex:S1 a sh:Shape ;
  sh:targetClass ex:C1 ;
  sh:qualifiedValueShapesDisjoint true ;
  sh:property [
    sh:path ex:p1 ;
    sh:qualifiedValueShape [ sh:class ex:C2 ] ;
    sh:qualifiedMinCount 1 ;
    sh:qualifiedMaxCount 1 ;
  ] ;
  sh:property ex:S2 .

ex:S2
  sh:path ex:p1 ;
  sh:qualifiedValueShape [ sh:class ex:C3 ] ;
  sh:qualifiedMinCount 1 ;
  sh:qualifiedMaxCount 1 .

ex:S3 a sh:Shape ;
  sh:property ex:s2 .

It seems to me that ex:S3 checks for exactly one ex:p1 value that is a SHACL
instance of ex:C3 and not a SHACL instance of ex:C2.


As this construct has problems and doesn't add any new capabilities there is
no reason to retain it.


Peter F. Patel-Schneider
Nuance Communications

Received on Wednesday, 15 February 2017 15:28:17 UTC