How to do repetition in SHACL (revised)

We want a shape that is satisfied (i.e., not violated) by nodes that have
between nc and mc values (including unbounded) for ex:p that satisfy shape C
and between nb and mb values (including unbounded) for ex:p that satisfy
shape B and no other values for ex:p.  Further there are no nodes that can
satisfy both C and B.

This can be done with the following SHACL shape:

S rdf:type sh:Shape ;
  sh:property [ sh:predicate ex:p ;
  sh:qualifiedValueShape C ;
          sh:qualifiedMinCount nc ;
   sh:qualifiedMaxCount mc ] ;
  sh:property [ sh:predicate ex:p ;
  sh:qualifiedValueShape B ;
          sh:qualifiedMinCount nb ;
   sh:qualifiedMaxCount mb ] ;
  sh:property [ sh:predicate ex:p ;
  sh:valueShape [ rdf:type sh:Shape ;
          sh:constraint [ rdf:type sh:OrConstraint ;
            sh:shapes ( C B ) ] ] ] .

If the "no other values for ex:p" is not wanted, then the last constraint is
removed.


If C and B are not disjoint *and no values are supposed to be in the
intersection*, then the constraint

  sh:property [ sh:predicate ex:p ;
  sh:valueShape [ rdf:type sh:Shape ;
          sh:constraint [ rdf:type sh:AndConstraint ;
            sh:shapes ( C B ) ] ] ;
  sh:qualifiedMaxCount 0 ]

is added.

NB:  None of this has been checked against a SHACL implementation, so the
syntax might not be completely correct.

Received on Wednesday, 9 September 2015 11:42:42 UTC