- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 23 Jan 2015 13:57:11 +1000
- To: RDF Data Shapes Working Group <public-data-shapes-wg@w3.org>
May I suggest we try to resolve the long-standing issue of Shapes versus Classes in the specific context of LDOM. Maybe we can make progress if we have a specific metamodel in front of us. In the current draft, class definitions are containers of constraints, i.e. rdfs:Class a rdfs:Class ; rdfs:subClassOf rdfs:Resource ; ldom:property [ ldom:predicate ldom:constraint ; ldom:valueType ldom:Constraint ; ] ; ldom:property [ ldom:predicate ldom:property ; ldom:valueType ldom:PropertyConstraint ; ] ; which means that you can define a class such as ex:Rectangle ldom:property [ ldom:predicate ex:height ; ... ] ... This could (easily) be generalized by moving the properties into a new a class ldom:Shape a rdfs:Class ; rdfs:subClassOf rdfs:Resource ; ldom:property [ ldom:predicate ldom:constraint ; ldom:valueType ldom:Constraint ; ] ; ldom:property [ ldom:predicate ldom:property ; ldom:valueType ldom:PropertyConstraint ; ] ; which serves as superclass of rdfs:Class rdfs:Class a rdfs:Class ; rdfs:subClassOf ldom:Shape ; This would mean that users could define stand-alone shapes ex:MyShape a ldom:Shape ; ldom:property [ ... ] ... And this shape could be reused such as in ex:MyClass a rdfs:Class ; ldom:constraint [ a ldom:ShapeConstraint ; ldom:all ex:MyShape ; ] ... or as an entry point to the validation: FILTER ldom:violatesConstraints(?resource, ex:MyShape) (maybe renaming the function above to ldom:hasShape). Since rdfs:Class is a subclass of ldom:Shape, class definitions become special kinds of shape definitions. The main differences between classes and shapes would be: - Classes can be instantiated, i.e. you can have ex:MyRectangle a ex:Rectangle - Class-based constraints get inherited (Shapes cannot have rdfs:subClassOf) I don't see practical problems with such a design, and in fact it may be a cleaner separation of concerns. The reason why these two concepts are currently merged into one is that the differences are fairly small, and people could simply define an anonymous (even typeless) class as a collection of constraints, as in Example 9 http://spinrdf.org/ldomprimer.html#template-constraints Thoughts? Cheers, Holger
Received on Friday, 23 January 2015 04:00:40 UTC