- From: John Walker <john.walker@semaku.com>
- Date: Sat, 16 Sep 2017 20:51:32 +0000
- To: "public-rdf-shapes@w3.org" <public-rdf-shapes@w3.org>
- Message-ID: <AM4PR0201MB173031DD8B987FF813CCAF259A6D0@AM4PR0201MB1730.eurprd02.prod.outlook.>
Hi,
I have a question about behavior in SHACL playground.
I am trying to use a closed shape to validate a case where the data graph should have instances/resources that have either property A or B.
As a minimal example, I want to validate that a ex:Person must have either ex:firstName OR ex:givenName.
Also, there should be no other statements in the graph.
Example data graph:
```
@prefix ex: <http://example.org/ns#> .
ex:Bob a ex:Person ;
ex:firstName "Robert" ;
ex:givenName "Bob" .
ex:Alice a ex:Person ;
ex:firstName "Alice" .
ex:Edward a ex:Person ;
ex:givenName "Ted" .
```
Example shapes graph:
```
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix ex: <http://example.org/ns#> .
ex:OrConstraintExampleShape
a sh:NodeShape ;
sh:targetClass ex:Person ;
# sh:property [
# sh:path [ sh:alternativePath ( ex:firstName ex:givenName ) ] ;
# sh:minCount 1 ;
# sh:maxCount 1 ;
# ] ;
sh:xone (
[
sh:path ex:firstName ;
sh:minCount 1 ;
sh:maxCount 1 ;
]
[
sh:path ex:givenName ;
sh:minCount 1 ;
sh:maxCount 1 ;
]
) ;
sh:ignoredProperties (rdf:type) ;
sh:closed true.
```
Here I tried a couple of alternate ways to express the constraint, namely SHACL property paths and logical constraint components.
However, I observe that when using either approach in combination with a closed shape, the playground always gives validation error that the ex:firstName and ex:givenName predicates are not allowed.
Or is it required to add additional property shapes where those predicates are explicitly enumerated as a value of sh:path?
As in:
```
ex:OrConstraintExampleShape
sh:property [ sh:path ex:firstName ] , [ sh:path ex:givenName ] .
```
Regards,
John
Received on Saturday, 16 September 2017 20:52:04 UTC