- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 30 Oct 2015 14:41:47 +1000
- To: public-data-shapes-wg@w3.org
On 10/30/2015 3:43, Peter F. Patel-Schneider wrote: > On 10/28/2015 10:29 PM, Holger Knublauch wrote: >> On 10/29/2015 14:14, Peter F. Patel-Schneider wrote: > [...] >>> I here propose several changes the normative bits of the version of Part 2 >>> that was prepared for ISSUE-95, >>> http://w3c.github.io/data-shapes/shacl/index-ISSUE-95.html, that fix many of >>> the problems there. I have not proposed changes for any of the bits marked > [...] >>> SHACL also includes a more general superclass sh:Template that may be used >>> for other kinds of templates (rules, stored queries etc). Well-defined, >>> non-abstract templates must provide at least one body using a property such >>> as sh:sparql. >>> -> >>> Well-defined templates must provide at least one body using a property such >>> as sh:sparql. >> Why drop sh:Template? It is already used as shared superclass of >> sh:ConstraintTemplate and sh:ScopeTemplate, plus we have various other types >> of templates in production and having a shared superclass streamlines the >> infrastructure to manage them. > > > > The uses of sh:Template in the spec are: > > 1/ SHACL also includes a more general superclass sh:Template that may be used > for other kinds of templates (rules, stored queries etc). > > This doesn't add anything to the spec at all. > > 2/ sh:Template is subclass of rdfs:Class, which means that templates can be > instantiated via rdf:type. > > Make the appropriate subclasses directly be subclass of rdfs:Class. > > 3/ If a sh:Template has a value for sh:sparql, then the corresponding instances > need to follow the same execution rules as outlined for SPARQL-based > Constraints and SPARQL-based Scopes. > > I don't think that this is correct. In any case it can just be stated on > the appropriate subclasses. > > In sum, sh:Template doesn't add anything to SHACL. The same argument could be applied to any abstract superclass, anywhere. But often such abstract superclasses help to better structure a class hierarchy and to reuse declarations. Templates are also a distinct general concept, and some definitions can be made for all kinds of templates. Here is what the Turtle source code looks like sh:Template a sh:ShapeClass ; rdfs:subClassOf sh:Macro ; rdfs:subClassOf sh:SPARQLExecutable ; rdfs:label "Template" ; rdfs:comment "A macro that acts as an abstraction of a (reusable) SPARQL query. The query can be parameterized by the supplied arguments." ; sh:abstract true ; sh:property [ sh:predicate sh:labelTemplate ; sh:datatype sh:text ; rdfs:label "label template" ; rdfs:comment "Outlines how human-readable labels of instances of this template class shall be produced. The values must be strings that can contain {?argName} as placeholders for the actual values of the given argument. There may be multiple values, for different languages." ; ] ; . which shows that it does actually define the property sh:labelTemplate, which applies to every template. This would have to be repeated in every subclass. Given that we at TopQuadrant already have specific plans to add other subclasses of sh:Template, and that the cost of keeping sh:Template in the spec is really minimal, I suggest to keep sh:Template in the spec. Why is this such a big deal? Holger
Received on Friday, 30 October 2015 04:42:27 UTC