- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 20 May 2016 13:31:33 +1000
- To: "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
On 20/05/2016 11:19, Holger Knublauch wrote: > On 20/05/2016 10:58, Peter F. Patel-Schneider wrote: >> On 05/19/2016 03:47 PM, Holger Knublauch wrote: >>> >>> On 20/05/2016 1:07, Peter F. Patel-Schneider wrote: >>>> It seems to me that one of the goals of syntax simplification is to >>>> end up >>>> with a simpler syntax. One aspect of having a simpler syntax, to >>>> me, is >>>> that constructs that intuitively make sense are permitted, >>>> particularly if >>>> similar constructs are also permitted. >>>> >>>> 1/ Because existing property constraints can be conjoined, it >>>> should be >>>> possible to conjoin existing shapes, like >>>> >>>> ex:s1 rdf:type sh:Shape ; >>>> sh:nodeKind sh:IRI ; >>>> sh:class ex:Citizen . >>>> >>>> ex:s2 rdf:type sh:Shape ; >>>> sh:property [ sh:predicate ex:child ; >>>> sh:class ex:Person ] . >>>> >>>> ex:s3 rdf:type sh:Shape ; >>>> sh:scopeClass ex:Person ; >>>> sh:filter [ sh:property [ sh:predicate sh:age ; >>>> sh:minInclusive 18 ] ] ; >>>> sh:and ( ex:s1 ex:s2 ) . >>>> So sh:and is needed unless there is >>>> another simple way to achieve this. >>> This can be written using sh:shape (in case it gets approved): >>> >>> ex:s3 rdf:type sh:Shape ; >>> sh:scopeClass ex:Person ; >>> sh:filter [ sh:property [ sh:predicate sh:age ; >>> sh:minInclusive 18 ] ] ; >>> sh:shape ex:s1 ; >>> sh:shape ex:s2 . >>> >>> So unless we want to create a sh:and as an alternative syntax >>> aligning with >>> sh:or, I don't think we need sh:and. >> This new feature probably means that sh:and is redundant. Whether it >> is a >> good idea to have sh:or and sh:not without a matching sh:and is a >> separate matter. On whether sh:and would still make sense, I believe the solution with sh:shape has several advantages: - it doesn't require an extra (and ugly) rdf:List - any constraint violations will automatically get "propagated up" into the surrounding shape, while sh:and would by default "swallow" them This also lead me to think there is further potential here. We agree sh:Shape is an intersection of constraint/components, i.e. in order to fulfill the whole shape, all individual constraints need to be fulfilled. Assuming we have sh:Shape rdfs:subClassOf sh:Constraint, why not introduce a similar construct for unions of constraints: sh:Union rdfs:subClassOf sh:Constraint . Then, sh:or would point at instances of sh:Union: ex:PersonShape sh:property [ sh:predicate ex:address ; sh:or [ # a sh:Union (optional) sh:datatype xsd:string ; sh:class ex:Address ; ] ] The difference between sh:Shape and sh:Union would be that all constraint components would be treated with "or" semantics instead of "and". We could this way get rid of rdf:Lists and have a more regular syntax. Just a thought for now... Holger
Received on Friday, 20 May 2016 03:32:09 UTC