- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 15 Apr 2016 03:22:51 +1000
- To: public-data-shapes-wg@w3.org
Hi Karen,
a simple, clear explanation for this question may not exist because this
isn't a simple question. A detailed look at the consequences is needed.
Let me enumerate a few reasons why I think merging these concepts is a
bad idea:
0) Separated concepts is how the spec is currently written. This may be
brushed away by saying that nothing is finalized yet, but if we changed
this now, any early adopter will need to redo their early adoption. Who
knows what users will be saying and what we will discover. We as a
Working Group, our specs and the implementations would be thrown back
significantly if we made such a change now. For any such change at the
current stage, there need to be good reasons.
1) Simplification was mentioned as the main reason for merging these
concepts. However, that simplification comes at significant costs,
because we would lose the ability to distinguish different use cases and
roles. Calling everything a "shape" is blurring the lines.
2) An important role is the distinction between the various constraint
types: NodeConstraint, PropertyConstraint, InversePropertyConstraint.
Not all constraint properties (such as sh:closed) make sense in all
three contexts. Having separate concepts (and subclasses of
sh:Constraint) provides a natural way of stating under which conditions
which properties make sense.
3) There is nothing conceptually difficult about the current design, and
therefore no need to change anything. "Shapes are a collection of
constraints and define a scope". Shapes are similar to class
definitions, and intuitive to understand by most people. Property
constraints declare a property at a class.
4) There is already long practical experience with this design. Both
Resource Shapes and SPIN have separated shapes and constraints. This
pattern has proven to work well.
5) Having separate concepts makes it easier to define the metamodel. A
metamodel with base classes sh:Shape and sh:Constraint makes it natural
to define their properties based on rdfs:range/rdfs:domain or similar
techniques.
6) Shapes have different attributes than constraints. An example is that
only shapes can have a scope. Other examples are the linkage with
classes and future extensions such as rules. If shapes were also playing
the role of constraints, then many of these shapes would serve as
sub-objects that only make sense in the context of their parent shape
(just like property constraints now). It makes no sense to have scopes
or rules on such sub-shapes.
7) Constraints have different attributes than shapes. For example,
sh:PropertyConstraints can have sh:name, sh:description and sh:group.
Merging these concepts would need to state that all shapes may have
sh:name and sh:description, which is incorrect. The domain of sh:name
includes sh:PropertyConstraint, not sh:Shape.
8) For property constraints, sh:predicate belongs into the constraint,
not outside. Peter's design is quietly pretending that no such thing
exists, and he uses an extremely ugly trick based on an rdf:List where
the first member is the sh:predicate and the second member is a shape.
Here you have the equivalent of sh:PropertyConstraint, but as a poorly
structured and implicit object. In fact the presence of this
intermediate List proves that some object is needed, if only to specify
the predicate.
9) If we drop constraints then the syntax is becoming inconsistent, as
there will be multiple ways to state the same thing. I mentioned this
before but Peter has not continued that thread. As soon as you want to
specify a different sh:severity for a constraint, you need an object to
attach this to. This leads to the following two patterns:
ex:MyShape a sh:Shape ;
sh:closed true .
ex:MyShape a sh:Shape ;
sh:shape [ sh:closed true ; sh:severity sh:Warning ] .
Such different patterns are a nightmare for users, for tool developers
and anyone who wants to make sense of a shapes document. Completely
different code needs to be written only to set different severity.
Algorithms become more complicating.
10) In Peter's design, shapes carry different semantics depending on
where they are used. If they appear in the rdf:List that is the value of
sh:propValues, then they are interpreted to apply to the set of values
of the property which is the first item in that rdf:List. In Proposal 3,
their semantics only depends on their rdf:type (although that rdf:type
may be derived from the default value type).
There may be more reasons but it's 3:22 am here so my brain is not up to
speed.
Holger
On 14/04/2016 14:22, Karen Coyle wrote:
> One of the differences between the proposals put forth by Holger and
> Peter is whether there need to be both shapes and constraints
> (Holger's view) or just shapes (Peter's). This sounds to me like an
> important difference, but I need an explanation of why 1) Holger
> thinks just having shapes will not work and 2) why Peter thinks we do
> not need both.
>
> A simple, clear explanation of each point of view would be very much
> appreciated.
>
> Thanks,
> kc
>
Received on Thursday, 14 April 2016 17:23:28 UTC