Re: abstract syntax for SHACL

No it's not a requirement and I didn't claim that. All I am pointing out 
is that this Abstract Syntax is not a complete representation of SHACL, 
so it should be renamed.

Holger


On 4/07/2016 2:25, Karen Coyle wrote:
> 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).
>>>
>>
>>
>>
>

Received on Sunday, 3 July 2016 22:27:26 UTC