ISSUE-95: Proposed simplification and clean up of template mechanism

The current draft uses the following design:

1. sh:Template is the meta-class of all templates.
2. a resource of type sh:Template is a template. Each template is
itself a class. The template itself introduces a new set of properties
that parameterize the template. These are referred to as the
sh:Arguments of the template.
3. a resource of type template is a constraint. i.e. constraints are
viewed as instances of templates using the property rdf:type to
indicate the action of instantiating a template.

I feel that the relation between a template and the thing produced by
inserting actual values for the formal arguments of the template is
not correctly modelled by rdf:type. For example, an OO language like
Java has no difficulty implementing templates, but there are no
meta-classes in Java. An instance of a template class simply produces
instances of some other class.

I feel that people have an easier time understanding models in which
meta-classes are absent. This is the idea behind OWL and description
logic in which things are either classes, properties, or individuals.

I propose a flattened model in which there are no meta-classes.

1. sh:Template is the class of all templates.
2. a resource of type template is not a class. Instead, it has a
property that gives the type of constraint that the template produces,
e.g. sh:produces.
3. when the properties introduced by a template are used in a
constraint, that constraint acquires the additional type specified by
the sh:produces property of the template.

-- Arthur

Received on Thursday, 12 November 2015 04:24:46 UTC