Re: more sloppiness in the SHACL document

On 12/05/2016 07:32 PM, Holger Knublauch wrote:
> (As a general comment, I think it would be most helpful if you could include
> actual suggestions in your emails, in addition to pointing out the problems
> that you see. This would significantly streamline the process.)

OK, here is a treatment of the generation of validation reports that fixes the
problems that I see there.  This treatment does depend on fixing problems in
the rest of SHACL Core.




A SHACL path is a node and an RDF graph where the node is a SHACL property
path in the graph

The SHACL path of a SHACL shape in a shapes graph S is its value for sh:path
in S, if any, and all the triples in S needed to form the SHACL property
path starting at this value; otherwise the shape has no SHACL path.

The SHACL severity of a SHACL shape in a shapes graph S is its value for
sh:severity, if present, otherwise sh:violation


A SHACL validation report is an RDF graph meeting the following conditions:
- Exactly one node in the graph has SHACL type sh:ValidationReport
- Every node in the graph that has SHACL type sh:ValidationReport meets the
  following conditions:
  - It has sh:ValidationReport as a value for rdf:type
  - It has exactly one value for sh:conforms, and that value is an RDF
    literal with datatype xsd:boolean whose lexical form is in the lexical
    space of the xsd:boolean datatype
  - The literal value of its value for sh:conforms is true if and only it
    has no values for sh:result
  - All its values for sh:result have SHACL type sh:ValidationResult
- The graph is a SHACL results graph

A SHACL results graph is an RDF graph meeting the following conditions:
- Every node in the graph that has SHACL type sh:ValidationResult meets the
  following conditions
  - It has sh:ValidationResult as a value for rdf:type.
  - It has exactly one value for sh:focusNode
  - It has at most one value for sh:resultPath and this value if present is
    a SHACL property path in the graph
  - It has at most one value for sh:valueNode
  - It has exactly one value for sh:sourceShape
  - It has exactly one value for sh:sourceConstraintComponent
  - It has exactly one value for sh:resultSeverity
  - Each of its values for sh:resultMessage, if any, are language-tagged
    literals and each has a different language tag.

A top-level validation result in an RDF graph is a node in the graph with
SHACL type sh:ValidationResult that is not the object of any triple in the
graph.

A SHACL validation report for a SHACL results graph S is any RDF graph
containing at least the triples of S plus
< n, rdf:type, sh:ValidationReport >
< n, sh:conforms, c >
< n, sh:result, r >  for each top-level validation result r in S
where n is a blank node not present in S
and c is "false"^^xsd:boolean if S contains any top-level validation results
in S, "true"^^xsd:boolean otherwise
and for any triple in the report grpah of the form <n,sh:result,q> q is a
top-level validation result in S.

Given a focus node f, an optional value node v, a shape s, an optional path
<p,P>, an optional severity e, and a constraint component C is a SHACL results
graph
- containing all the triples in P
- where p is a SHACL property path in the graph
- and which has exactly one top-level validation result n
  - whose value for sh:focusNode in the graph is f
  - whose value for sh:resultPath in the graph is p, if p is present,
    otherwise there is no value for sh:resultPath in the graph
  - whose value for sh:value in the graph is v, if v is present,
    otherwise there is no value for sh:value in the graph
  - whose value for sh:sourceShape in the graph is s
  - whose value for sh:sourceConstraintComponent in the graph is c
  - whose value for sh:resultSeverity in the graph is e, if e is present,
    otherwise sh:violation

The combination of a multiset of SHACL results graphs is the RDF union of
the graphs if the graphs do not share nodes that are top-level validation
results in any of the graphs; if the graphs do share such nodes then each
graph in the multiset is first replaced by a graph whose only difference is
that each of these shared nodes is replaced by a blank node that occurs in
none of the other replacement graphs.


Let G be a data graph.  Let S = { s1, ..., sn } be the set of shapes in a
shapes graph S.  A results graph for the validation of G against S is an RDF
graph that is a combination of some multiset {{ R1, ..., Rn }} where Ri is a
results graph for the validation of G against s in S.

Let T = { t1, ..., tn } be the complete targets from a data graph
G for a shape s in a shapes graph S.  A results graph for the validation of
G against s in S is an RDF graph that is a combination of some multiset {{
R1, ..., Rn }} where Ri is a results graph for the validation of ti using G
against s in S.

Let f be a node and G a data graph.
Let C = { c1, ..., cn } be the constraints of a shape s in a shapes graph S.
A results graph for the validation of f using G of s in S is an RDF graph
that is a combination of some multiset {{ R1, ..., Rn }} where Ri is a
results graph for ci
given f as focus node,
the value nodes for s in S of f with D as the value nodes,
D as the data graph,
s as the shape, and
S as the shapes graph.

Given f a focus node, {v1,...,vn} a set of value nodes, D a data graph, s a
shape, and
S a shapes graph
any results graph for a sh:ClassConstraintComponent constraint
with mandatory parameter values <sh:class,c>
is a combination of some multiset {{ r1, ..., rn }}
where ri is the empty RDF graph if vi is a SHACL instance of c
and ri is a validation result for f, vi, s, the path of s in S if present,
the severity of s, and sh:ClassConstraintComponent

Similarly for the other constraint components.


A Core SHACL processor MUST provide an interface that takes a data graph and
a shapes graph and produces a graph that is validation report for a results
graph for the validation of the data graph against the shapes graph or
signals an error.

Received on Tuesday, 6 December 2016 06:07:32 UTC