diff --git a/shacl12-core/images/Class-Diagram-Arrows.png b/shacl12-core/images/Class-Diagram-Arrows.png
deleted file mode 100644
index 7145e83f..00000000
Binary files a/shacl12-core/images/Class-Diagram-Arrows.png and /dev/null differ
diff --git a/shacl12-core/images/Makefile b/shacl12-core/images/Makefile
new file mode 100644
index 00000000..0a74db0f
--- /dev/null
+++ b/shacl12-core/images/Makefile
@@ -0,0 +1,4 @@
+all: SHACL-UML.svg
+
+%.svg: %.puml
+ plantuml -Tsvg $^
diff --git a/shacl12-core/images/SHACL-UML.puml b/shacl12-core/images/SHACL-UML.puml
new file mode 100644
index 00000000..927667a2
--- /dev/null
+++ b/shacl12-core/images/SHACL-UML.puml
@@ -0,0 +1,66 @@
+@startuml
+hide circles
+hide empty members
+skinparam pathHoverColor red ' on cover, highlight blue links as red
+' skinparam topurl https://raw.githack.com/w3c/data-shapes/master/shacl12-core/index.html ' links resolve to anchors in current HTML page, when the SVG is embedded
+
+class " The following introduction is non-normative.
- The following informal diagram provides an overview of some of the key classes in the SHACL vocabulary.
+ The following UML diagram provides an overview of some of the key classes and properties in the SHACL vocabulary.
Each box represents a class.
The content of the boxes under the class name lists some of the properties that instances of these classes may have, together with their value types.
- The arrows indicate
+ The Turtle serialization of the SHACL vocabulary contains the complete SHACL vocabulary.
- The Turtle serialization of the SHACL vocabulary contains the complete SHACL vocabulary.
- Shapes and Constraints
rdfs:subClassOf triples.
+ Empty arrowheads indicate inheritance (rdfs:subClassOf) and normal arrowheads indicate RDF relations.
+
- Changes between SHACL 1.0 Core and SHACL 1.2 Core
diff --git a/shacl12-sparql/index.html b/shacl12-sparql/index.html
index 5ecb3331..f6dc805b 100644
--- a/shacl12-sparql/index.html
+++ b/shacl12-sparql/index.html
@@ -930,7 +930,7 @@ Syntax of SPARQL-based Constraints
and this value is either true or false.
- SELECT queries used in the context of property shapes use a special variable named PATH as a placeholder for the path used by the shape.
+ SELECT queries used in the context of property shapes use a special variable named PATH (spelled in UPPERCASE) as a placeholder for the path used by the shape.
The only legal use of the variable
+ Let
+ If the shape is a property shape, then prior to execution
+ substitute the variable
+ There is one validation result for each solution that does not have PATH in the SPARQL queries of SPARQL-based constraints
@@ -1042,19 +1042,27 @@ Validation with SPARQL-based Constraints
$sparql be a value of sh:sparql.
- There are no validation results if the SPARQL-based constraint has true
- as a value for the property sh:deactivated.
- Otherwise, execute the SPARQL query specified by the SPARQL-based constraint $sparql
- pre-binding the variable this as described in .
- If the shape is a property shape, then prior to execution
- substitute the variable PATH where it appears in the predicate
- position of a triple pattern
- with a valid SPARQL surface syntax string of the SHACL property path
- specified via sh:path at the property shape.
- There is one validation result for each solution that does not have true as the binding for the variable failure.
- These validation results MUST have the property values explained in .
- A failure MUST be produced if and only if one of the solutions has true as the binding for failure.
+ $sparql be a value of sh:sparql.
+ There are no validation results if the SPARQL-based constraint has true
+ as a value for the property sh:deactivated.
+ Otherwise, execute the SPARQL query specified by the SPARQL-based constraint $sparql
+ pre-binding the variable this as described in .
+ PATH where it appears in the predicate
+ position of a triple pattern
+ with a valid SPARQL surface syntax string of the SHACL property path
+ specified via sh:path at the property shape.
+ If sh:path is not a well-formed SHACL property path then return an error,
+ and as a precaution may also substitute the signal value "BAD-PATH", which will make the SPARQL query invalid.
+ true as the binding for the variable failure.
+ These validation results MUST have the property values explained in .
+ A failure MUST be produced if and only if one of the solutions has true as the binding for failure.
+ Validation with SPARQL-based Constraint Components
PATH where it appears in the predicate
- position of a triple pattern
- with a valid SPARQL surface syntax string of the SHACL property path
- specified via sh:path at the property shape.
+ substitute the variable PATH with a valid SPARQL surface syntax string of the SHACL property path
+ (see the reference "substitute" for details).
Let QS be the solutions produced by executing the SPARQL query.
Security and Privacy Considerations
SHACL-SPARQL includes all the security issues of SPARQL.
+ In particular, the substitution of variable PATH constitutes SPARQL string injection, which may pose additional risks.