- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Tue, 8 Sep 2015 03:53:04 -0700
- To: RDF Data Shapes Working Group <public-data-shapes-wg@w3.org>
1.x Relationship between SHACL and RDFS SHACL uses RDF and RDFS vocabulary (in particular rdf:type, rdfs:Class, rdfs:subClassOf, rdfs:label, rdfs:comment, rdf:Property, rdf:List, rdf:langLiteral, and rdfs:Resource) and notions (notably classes, instance, and subclasses). However, SHACL does not use this vocabulary or these notions in the way that they are defined in RDF and RDFS [RDF Semantics Document]. When determining subclass and instance relationships SHACL only uses the transitive closure of rdfs:subClassOf, ignoring in particular the RDF axioms, the RDFS meaning of rdfs:Resource, the reflexivity of rdfs:subClassOf, the effect of subproperties of rdfs:subClassOf, and the effects of rdfs:domain and rdfs:range. Note that rdfs:subClassOf transitivity is not uniformly applied throughout SHACL. It is only used when SHACL explicitly determines type and subclass relationships in the control graph and the data. In other places only triples that are explicitly present in the control graph or the data are considered. For example, SHACL property constraints on rdf:type and rdfs:subClassOf only utilize triples that are explicitly in the data. Similarly, subproperties of rdfs:label and rdfs:commment and subclasses of rdf:List are not recognized in the control graph. - The section on sh:valueClass should be rewritten as The property sh:valueClass can be used to verify that each value of the given property is an instance of a type. The values of sh:valueClass must be classes (instances of rdfs:Class). The main difference with sh:directValueType is that sh:valueClass also includes subclasses of the type. Property Value Type Summary sh:valueClass rdfs:Class Type of all values TEXTUAL DEFINITION A validation result must be produced for each triple that has the focus node as its subject, the sh:predicate as its predicate and where the object is either a literal or a non-literal without a matching type. A non-literal matches a type if it has an rdf:type value that is the type or one of its (transitive) subclasses via rdfs:subClassOf. Each produced validation result must have the focus node as its sh:root and sh:subject, the sh:predicate as its sh:predicate and the respective violating value as its sh:object.
Received on Tuesday, 8 September 2015 10:53:37 UTC