- From: RDF Data Shapes Working Group Issue Tracker <sysbot+tracker@w3.org>
- Date: Wed, 27 Jan 2016 07:11:52 +0000
- To: public-data-shapes-wg@w3.org
shapes-ISSUE-119 (rdf:Lists): Defining constraints on (values of) rdf:Lists [SHACL - Core]
http://www.w3.org/2014/data-shapes/track/issues/119
Raised by: Simon Steyskal
On product: SHACL - Core
While working through the list of possible open use cases/requirements Karen sent us, I noticed that we haven't tackled the (special?) treatment of rdf:Lists yet (as we agreed on to do so in resolution of ISSUE-46 [1] which says: "RESOLUTION: Close ISSUE-46 by adding requirements 2.6.12 and 2.6.13 [2] as proposed by Richard in [3]").
One approach for accomodating [2] could be to specify that whenever certain types of property constraints are defined for a property which has an rdf:List as its value, those constraints are actually applied to all members of that list rather than on the list itself:
-----------------------------------
Example:
-----------------------------------
ex:ExampleShape a sh:Shape ;
sh:scopeClass ex:ExampleClass ;
sh:property [
sh:datatype xsd:integer ;
sh:predicate ex:list ;
] .
ex:ValidExample a ex:ExampleClass ;
ex:list (1 2 3) .
ex:InvalidExample a ex:ExampleClass ;
ex:list (1 "aa" 3) .
-----------------------------------
However, certain types of property constraints should still only be applied to the actual rdf:List itself:
-----------------------------------
Example:
-----------------------------------
ex:ExampleShape a sh:Shape ;
sh:scopeClass ex:ExampleClass ;
sh:property [
sh:minCount 2 ;
sh:maxCount 2 ;
sh:predicate ex:list ;
] .
ex:ValidExample a ex:ExampleClass ;
ex:list (1 2 3) ;
ex:list (1 3 5) .
ex:InvalidExample a ex:ExampleClass ;
ex:list (1 2 3) .
-----------------------------------
To avoid potential conflicts if someone wants to specify that, e.g., the value of a certain property must be an rdf:List AND that all values of that list must be of type ex:Example, we could introduce a concept similar to sh:valueShape called sh:listShape:
-----------------------------------
Example:
-----------------------------------
ex:ExampleShape a sh:Shape ;
sh:scopeClass ex:ExampleClass ;
sh:property [
sh:class rdf:List ;
sh:listShape [
a sh:Shape ;
sh:constraint [
sh:class ex:Dog
]
]
sh:predicate ex:list ;
] .
ex:ValidExample a ex:ExampleClass ;
ex:list (ex:Lassie ex:Beethoven) .
ex:InvalidExample a ex:ExampleClass ;
ex:list (ex:Lassie ex:Flipper) .
ex:Lassie a ex:Dog .
ex:Beethoven a ex:Dog .
ex:Flipper a ex:Dolphin .
-----------------------------------
However, if we want to allow treating each member of an rdf:List differently, we have to come up with some other ideas such as introducing another constraint type alongside sh:PropertyConstraint, sh:NodeConstraint, ... called, e.g., sh:ListConstraint.
best regards,
simon
[1] https://www.w3.org/2014/data-shapes/track/issues/46
[2] http://w3c.github.io/data-shapes/data-shapes-ucr/#r6.12-expressivity-checking-for-well-formed-rdf-lists
[3] https://lists.w3.org/Archives/Public/public-data-shapes-wg/2015May/0017.html
[UC26] http://w3c.github.io/data-shapes/data-shapes-ucr/#uc26-rdf-lists-and-ordered-data
[UC42] http://w3c.github.io/data-shapes/data-shapes-ucr/#uc42-constraining-rdf-graphs-to-provide-better-mapping-to-json
Received on Wednesday, 27 January 2016 07:11:54 UTC