ShEx/ShapeMap

From Semantic Web Standards
Jump to: navigation, search

ShEx Validation is defined in terms of a Shape Map, a mapping of nodes to shapes. This page describes different techniques for associating nodes with shapes.

SHACL target*

The SHACL Specification section 2 defines a set of properties for associating nodes with shapes. These are defined as RDF properties, implying an execution model where the node/shape associations are supplied in RDF. Below, these are listed, along with terse labels for them for use in other execution environments such as HTML forms:

propertyshort namedescription
sh:targetNodetargetNodeselects the specified RDF node.
sh:targetClasstargetClassselects RDF nodes with a type arc to the specified node.
sh:targetSubjectsOftargetSubjectsOfselects all subjects of arcs with the specified predicate.
sh:targetObjectsOftargetObjectsOfselects all objects of arcs with the specified predicate.

These are functions which return a list of nodes. The nodes are paired with a shape name to construct a ShapeMap. For example, a ShapeMap could be a list like (using JSON's [] notation for lists):

   [[ targetClass(foaf:Person), my:PersonShape ],
    [ targetSubjectsOf(foaf:knows), my:PersonShape ],
    [ targetObjectsOf(foaf:knows), my:PersonShape ]]

to test any node which has `rdf:type` `foaf:Person` or is the subject or object of a `foaf:knows` arc. The data:

   <Alice> a foaf:Person ; foaf:knows <Bob>, <Claire> .
   <Don> foaf:knows <Evan> .

produces a ShapeMap:

   [[ <Alice>, my:PersonShape ], # targetClass(foaf:Person), targetSubjectsOf(foaf:knows)
    [ <Bob>, my:Personshape ], # targetObjectsOf(foaf:knows)
    [ <Clair>, my:Personshape ], # targetObjectsOf(foaf:knows)
    [ <Don>, my:Personshape ], # targetSubjectsOf(foaf:knows)
    [ <Evan>, my:Personshape ], # targetObjectsOf(foaf:knows) ]]

Note that there are three reasons for `[ <Alice>, my:PersonShape ]` to appear but ShapeMaps are a set of node/shape pairs.

SPARQL query

A Sparql query links nodes to a shape.

select ?node ?shape
{
  ...
}

OWL inference

Each instance within the database to be validated need to be typed or its type needs to be inferred with the OWL open world inference engines/modes. Each class is associated to a shape or vise versa.