- From: Karen Coyle <kcoyle@kcoyle.net>
- Date: Sun, 3 Jul 2016 09:25:45 -0700
- To: public-data-shapes-wg@w3.org
Is it a requirement of SHACL that the extension mechanism be used to define the core? I don't remember that. kc On 7/2/16 7:30 PM, Holger Knublauch wrote: > We should be clear that this Abstract Syntax is only for the Core > language of SHACL. I believe a more general Abstract Syntax would need > to be starting with the extension mechanism, and then use itself to > describe the core vocab. > > But I guess if the goal is to create a linkage between ShEx and SHACL, > then this doesn't matter much. > > Holger > > > On 1/07/2016 1:12, Eric Prud'hommeaux wrote: >> finishing the remaining Parameters... >> >> * Eric Prud'hommeaux <eric@w3.org> [2016-06-29 11:30-0400] >>> In order to tie the surface syntax of ShEx to SHACL, I wrote up an >>> abstract syntax for SHACL. I tried to use the same types as described >>> in the SHACL document but I'd like folks to check it for consistency. >>> >>> Notation >>> TypeName := label1:Type1, label2:Set[Type2] >>> means TypeName has two component addressed by label1 and label2. >>> label1 is a Type1 (defined elsewhere in the abstract syntax or in >>> RDF standards) and label2 is a set of things matching Type2. >> Schema := shapes:Set[Shape] >> A Schema is a set of Shapes. (Do we care about schema boundaries?) >> >> Shape := label:IRI|BNode, scopes:Set[Scope], >> filters:Set[Shape], constraints:Set[Constraint] >> A Shape has a label of some IRI or BNode, and sets of scopes, filter >> shapes and constraints. >> The "in-scope" nodes are the nodes in the data graph which >> 1 match any of the scopes. >> 2 pass all of the filter Shapes. (Scopes in filter Shapes have no >> effect.) >> Validation returns the set of errors returned from testing each >> constraint against each "focus node" in the in-scope node. >> >> # Scopes >> Scope := ScopeNode|ScopeClass|PropertyScope|InversePropertyScope >> A Scope is either a ScopeNode or a ScopeClass or a PropertyScope. >> >> ScopeNode := node:IRI|Bnode # later demands told bnodes. >> A ScopeNode matches node in the data graph. >> >> ScopeClass := type:IRI >> A ScopeClass matches any node in the data graph with the triple >> (node, rdf:type, type). >> >> PropertyScope := predicate:IRI >> A PropertyScope matches any node in the data graph with a triple >> (node, predicate, _) where "_" is any node. >> >> InversePropertyScope := predicate:IRI >> A PropertyScope matches any node in the data graph with a triple >> (_, predicate, node) where "_" is any node. >> >> # Constraints >> Constraint := NodeConstraint|PropertyConstraint| >> InversePropertyConstraint|Constraint >> >> A Constraint is either PropertyConstraint or InversePropertyConstraint >> or a NodeConstraint. Each type of Constraint selects a value node >> and tests it against a set of Paramenters. Parameters take >> arguments, including "numeric" which is the set of SPARQL numeric >> types enumerated in SPARQL Operand Data Types >> <http://www.w3.org/TR/sparql11-query/#operandDataTypes>. >> >> Exceptions: three Parameters, MinCount, MaxCount, and UniqueLang are >> evaluated against the set of all value nodes identified for testing >> by PropertyConstraint or InversePropertyConstraint. >> >> Three other Parameters, QualifiedMinCount, QualifiedMaxCount, and >> QualifiedValueShape, are evaluated against the set of all value >> nodes identified for testing by PropertyConstraint or >> InversePropertyConstraint and for which the evaluation of all other >> Parameters returned no errors. >> >> NodeConstraint := parms:Set[NCParameter] >> Testing a NodeConstraint against a focus node returns all of the >> errors from testing each NCParameter against the the value node >> where the value node is the focus node. >> >> PropertyConstraint := predicate:IRI, parms:Set[PCParameter] >> Testing a NodeConstraint against a focus node returns all of the >> errors >> from testing each NCParameter against each value node in the triple >> (focus node, predicate, value node). >> >> InversePropertyConstraint := predicate:IRI, parms:Set[IPCParameter] >> Testing a NodeConstraint against a focus node returns all of the >> errors >> from testing each NCParameter against each value node in the triple >> (value node, predicate, focus node). >> >> Constraint := @@still fuzzy on what's permitted in a general >> constraint. >> Extrapolate from Closed? >> >> >> NP, PC and IPC Parameters are listed in the first table in >> <http://w3c.github.io/data-shapes/shacl/#h-constraints>. >> >> # Nary Parameters - evaluate a set of value nodes. >> ## Cardinality: PC, ICP >> MinCount := ref:numeric >> Testing a MinCount parameter against a set of value nodes returns an >> error if the number of value nodes is less than ref. >> QualifiedMinCount := ref:numeric >> As noted above, QualifiedMinCount takes a set of value nodes that >> have passed all non-cardinality tests. It's evaluation is the same >> as the evaluation of MinCount. >> >> MaxCount := ref:numeric >> Testing a MaxCount parameter against a set of value nodes returns an >> error if the number of value nodes is greater than ref. >> QualifiedMaxCount := ref:numeric >> As noted above, QualifiedMaxCount takes a set of value nodes that >> have passed all non-cardinality tests. It's evaluation is the same >> as the evaluation of MaxCount. >> >> UniqueLang := b:boolean >> Testing a UniqueLang parameter against a set of value nodes returns an >> error if two or more of the value nodes are RDFLiterals with the same >> language tag. >> >> # Unary Parameters - evaluate a single value node. >> ## Logical operators: NC, PC, IPC >> And := shapes:Set[Shape] >> Testing an And parameter against a value node returns the errors from >> testing each of shapes against the value node. >> >> Or := shapes:Set[Shape] >> Testing an Or parameter against a value node returns an unspecified >> error if testing each of shapes against the value node returned an >> error. >> Not := shape:Shape >> Testing an Or parameter against a value node returns an unspecified >> error if testing shape against the value node returned no >> error. >> >> ## RDF term type of value node: NC, PC, IPC >> NodeKind := kind:"IRI"|"blank node"|"literal" >> Testing a NodeKind parameter against a value node returns an error if >> • kind = "IRI" and value node is not an IRI >> • kind = "blank node" and value node is not an blank node >> • kind = "literal" and value node is not an RDFLiteral >> >> ## RDF term equivalence: NC, PC, IPC >> HasValue := val:RDF term @@ listed as PC, IPC as of 2016-06-30 >> Testing a HasValue parameter against a value node returns an error if >> the value node is a different RDF term than val. >> >> In := vals:Set[RDF term] >> Testing a HasValue parameter against a value node returns an error if >> the value node is not in vals. >> >> ## Datatype: NC, PC >> Datatype := dt:IRI >> Testing a Datatype parameter against a value node returns an error if >> the value node is not an RDFLiteral or of the datatype of the value >> node is not the same RDF term as dt. >> >> DatatypeIn := dts:Set[IRI] >> Testing a Datatype parameter against a value node returns an error if >> the value node is not an RDFLiteral or of the datatype of the value >> node is not the set dts. >> >> ## lexical form parameters: >> ### XML Schema string facets: NC, PC, ICP >> MinLength := ref:numeric >> Testing a MinLength paramenter against a value node returns an error >> if the lexical form of the value node is longer than ref. >> >> MaxLength := ref:numeric >> Testing a MinLength paramenter against a value node returns an error >> if the lexical form of the value node is shorter than ref. >> >> Pattern := pat:RDFLiteral >> Testing a Pattern paramenter against a value node returns an error >> if evaluating the SPARQL regex function with the lexical form of >> value node and pat is false or results in a type error. >> >> Stem := str:RDFLiteral >> Testing a Stem parameter against a value node returns an error if >> the value node is not an IRI or the lexical form of the value node >> does not start with str. >> >> ## RDFLiteral value parameters >> ### XML Schema numeric facets: NC, PC >> MaxExclusive := ref:RDFLitera >> Testing a MaxExclusive parameter against a value node returns an >> error if the evaluation of (value node > ref) in SPARQL1.1 Operator >> Mapping returns false or results in a type error. >> >> MaxInclusive := ref:RDFLiteral >> Testing a MaxExclusive parameter against a value node returns an >> error if the evaluation of (value node >= ref) in SPARQL1.1 Operator >> Mapping returns false or results in a type error. >> >> MinExclusive := ref:RDFLiteral >> Testing a MaxExclusive parameter against a value node returns an >> error if the evaluation of (value node > ref) in SPARQL1.1 Operator >> Mapping returns false or results in a type error. >> >> MinInclusive := ref:RDFLiteral >> Testing a MaxExclusive parameter against a value node returns an >> error if the evaluation of (value node >= ref) in SPARQL1.1 Operator >> Mapping returns false or results in a type error. >> >> ## Comparison with sibling property: PC >> Equals := sibling:RDFLiteral >> Testing an Equals parameter against a value node returns an >> error if there is no node v in (focus node, sibling, v) in the data >> graph or the evaluation of (value node = v) in SPARQL1.1 Operator >> Mapping returns false or results in a type error. >> >> LessThan := sibling:RDFLiteral >> Testing an LessThan parameter against a value node returns an >> error if there is no node v in (focus node, sibling, v) in the data >> graph or the evaluation of (value node < v) in SPARQL1.1 Operator >> Mapping returns false or results in a type error. >> >> LessThanEquals := sibling:RDFLiteral >> Testing an LessThanEquals parameter against a value node returns an >> error if there is no node v in (focus node, sibling, v) in the data >> graph or the evaluation of (value node <= v) in SPARQL1.1 Operator >> Mapping returns false or results in a type error. >> >> Disjoint := sibling:RDFLiteral >> Testing an Disjoint parameter against a value node returns an >> error if any node v in (focus node, sibling, v) in the data graph >> or the evaluation of (value node < v) in SPARQL1.1 Operator Mapping >> returns false or results in a type error. >> >> ## Nested shape constraints: PC, IPC >> Shape := nested:Shape @@ listed as NC, PC, IPC as of 2016-06-30 >> Testing a Shape parameter against a value node returns any errors >> returned when validating the value node as nested (c.f. definition >> of Shape above). >> QualifiedValueShape := nested:Shape >> As noted above, QualifiedValueShape takes a set of value nodes that >> have passed all non-cardinality tests. It's evaluation is the same >> as the evaluation of Shape. >> >> Class := t:IRI @@ + subClassOf* >> Testing a Class parameter against a value node returns any errors >> returned when validating the value node as a Shape with a single >> PropertyConstraint with a predicate(rdf:type) and HasValue(t). >> >> ClassIn := t:IRI @@ + subClassOf* >> Testing a ClassIn parameter against a value node returns any errors >> returned when validating the value node as a Shape with a single >> PropertyConstraint with a predicate(rdf:type) and In(t). >> > > > -- Karen Coyle kcoyle@kcoyle.net http://kcoyle.net m: 1-510-435-8234 skype: kcoylenet/+1-510-984-3600
Received on Sunday, 3 July 2016 16:26:18 UTC