- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Thu, 13 Oct 2016 10:35:32 -0400
- To: Dimitris Kontokostas <kontokostas@informatik.uni-leipzig.de>
- Cc: public-data-shapes-wg <public-data-shapes-wg@w3.org>
* Dimitris Kontokostas <kontokostas@informatik.uni-leipzig.de> [2016-10-13 14:47+0300] > There have been quite a few talks lately about what is a shape, focus > nodes, referenced shapes, filters etc and most boil down to how shapes are > used and different roles shapes take > e.g. as a simple shape, as a filter shape, constraining shape (in sh:shape, > sh:or, etc) > > One idea to fix this that came up after yesterday's telco with Karen was to > differentiate these cases as follows > A shape is a constraint with optional targets (currently shape is a > subclass of Constraint so this is true anyway) > All other cases will be referring to constraints, not shapes > e.g. the range of a filter is a constraint, not a shape > similar the range of sh:shape is again a constraint as for sh:and, sh:or, > sh:qualifiedShape > > this fixes the problems of what we do with targets of a shape when that > shape is referenced from another shape. With this change, the reference > will be only to constraints, not shapes. > > This will require the renaming of some SHACL Core constructs but I believe > it will improve the language. > e.g. sh:filterShape could be renamed to sh:filterConstrain, sh:filter, > sh:condition > sh:shape to sh:constraint > sh:qualifiedValueShape to qualifiedValueConstraint > (sh:not/or/and are not affected) > > Any feedback is welcome In the abstract syntax, I made an effort to follow the SHACL terminology: [[ Schemas and Shapes Schema := shapes:Set[Shape] Shape := label:IRI|BNode, targets:Set[Target], filters:Set[Shape], constraints:Set[Test] Test := Constraint|Algebraic Constraints Constraint := NodeConstraint|PathConstraint NodeConstraint := parms:Set[Parameter] PathConstraint := path:SPARQLPropertyPath, parms:Set[Parameter] Parameters Parameter := UnaryParameter | NaryParameter Unary Parameters UnaryParameter := NodeKind | In | Class | Datatype | MinLength | MaxLength | Pattern | Stem | MinInclusive | MinExclusive | MaxInclusive | MaxExclusive | LessThanEquals | LessThan | Equals | Disjoint | HasShape RDF term type of value node NodeKind := kind:"IRI"|"blank node"|"literal" RDF term equivalence In := vals:Set[RDF term] Class := t:IRI Datatype Datatype := dt:IRI XML Schema string facets MinLength := ref:numeric MaxLength := ref:numeric Pattern := pat:RDFLiteral, flagstr:RDFLiteral Stem := str:RDFLiteral XML Schema numeric facets MinInclusive := ref:RDFLiteral MinExclusive := ref:RDFLiteral MaxInclusive := ref:RDFLiteral MaxExclusive := ref:RDFLiteral Comparison with specified property LessThanEquals := siblingProp:RDFLiteral LessThan := siblingProp:RDFLiteral Equals := siblingProp:RDFLiteral Disjoint := siblingProp:RDFLiteral Nested shape constraints HasShape := nested:Shape N-ary Parameters NaryParameter := UniqueLang | HasValue | MinCount | MaxCount | QualifiedMinCount | QualifiedMaxCount | QualifiedValueShape Uniqueness UniqueLang := b:boolean RDF term equivalence HasValue := val:RDF term Cardinality MinCount := ref:numeric MaxCount := ref:numeric QualifiedCardinality QualifiedMinCount := ref:numeric QualifiedMaxCount := ref:numeric QualifiedValueShape := nested:Shape Logical operators Algebraic := And|Or|Not And := shapes:Set[Shape] Or := shapes:Set[Shape] Not := shape:Shape Targets Target := TargetNode|TargetClass|TargetSubjectsOf|TargetObjectsOf TargetNode := node:IRI|literal|BNode TargetClass := type:IRI TargetSubjectsOf := predicate:IRI TargetObjectsOf := predicate:IRI ]] I think it would be greatly improved if we renamed s/Constraint/Selector/g s/Parameter/Constraint/g as what are currently called constraints select a bunch of triples which are then constrained by "parameters". c.f. http://w3c.github.io/data-shapes/shacl-abstract-syntax/#issue-1 It would look like this: [[ Schemas and Shapes Schema := shapes:Set[Shape] Shape := label:IRI|BNode, targets:Set[Target], filters:Set[Shape], selectors:Set[Test] Test := Selector|Algebraic Selectors Selector := NodeSelector|PathSelector NodeSelector := parms:Set[Constraint] PathSelector := path:SPARQLPropertyPath, parms:Set[Constraint] Constraints Constraint := UnaryConstraint | NaryConstraint Unary Constraints UnaryConstraint := NodeKind | In | Class | Datatype | MinLength | MaxLength | Pattern | Stem | MinInclusive | MinExclusive | MaxInclusive | MaxExclusive | LessThanEquals | LessThan | Equals | Disjoint | HasShape RDF term type of value node NodeKind := kind:"IRI"|"blank node"|"literal" RDF term equivalence In := vals:Set[RDF term] Class := t:IRI Datatype Datatype := dt:IRI XML Schema string facets MinLength := ref:numeric MaxLength := ref:numeric Pattern := pat:RDFLiteral, flagstr:RDFLiteral Stem := str:RDFLiteral XML Schema numeric facets MinInclusive := ref:RDFLiteral MinExclusive := ref:RDFLiteral MaxInclusive := ref:RDFLiteral MaxExclusive := ref:RDFLiteral Comparison with specified property LessThanEquals := siblingProp:RDFLiteral LessThan := siblingProp:RDFLiteral Equals := siblingProp:RDFLiteral Disjoint := siblingProp:RDFLiteral Nested shape selectors HasShape := nested:Shape N-ary Constraints NaryConstraint := UniqueLang | HasValue | MinCount | MaxCount | QualifiedMinCount | QualifiedMaxCount | QualifiedValueShape Uniqueness UniqueLang := b:boolean RDF term equivalence HasValue := val:RDF term Cardinality MinCount := ref:numeric MaxCount := ref:numeric QualifiedCardinality QualifiedMinCount := ref:numeric QualifiedMaxCount := ref:numeric QualifiedValueShape := nested:Shape Logical operators Algebraic := And|Or|Not And := shapes:Set[Shape] Or := shapes:Set[Shape] Not := shape:Shape Targets Target := TargetNode|TargetClass|TargetSubjectsOf|TargetObjectsOf TargetNode := node:IRI|literal|BNode TargetClass := type:IRI TargetSubjectsOf := predicate:IRI TargetObjectsOf := predicate:IRI ]] Of course, we could do this in the abstract-syntax doc, but I think this would improve readability for the SHACL doc as well as make it easier for folks writing code or papers about it. > Best, > Dimitris > -- > Dimitris Kontokostas > Department of Computer Science, University of Leipzig & DBpedia Association > Projects: http://dbpedia.org, http://rdfunit.aksw.org, > http://aligned-project.eu > Homepage: http://aksw.org/DimitrisKontokostas > Research Group: AKSW/KILT http://aksw.org/Groups/KILT -- -ericP office: +1.617.599.3509 mobile: +33.6.80.80.35.59 (eric@w3.org) Feel free to forward this message to any list for any purpose other than email address distribution. There are subtle nuances encoded in font variation and clever layout which can only be seen by printing this message on high-clay paper.
Received on Thursday, 13 October 2016 14:35:37 UTC