- From: Holger Knublauch <holger@topquadrant.com>
- Date: Mon, 6 Jun 2016 16:14:09 +1000
- To: public-data-shapes-wg <public-data-shapes-wg@w3.org>
On 6/06/2016 6:36, Peter F. Patel-Schneider wrote:
> Yes, each constraint component should not need more than one implementation,
> whether it is in the core or otherwise.
While I share the same goal, I don't see how it can work in practice.
You have not yet responded to how this would look in cases like
sh:hasValue where being forced to use the query snippet for node
constraints and property constraints would lead to abysmal performance.
> Otherwise there are just that many more ways of introducing an error.
This is IMHO not a strong enough argument to *prevent* multiple queries.
It's a nice-to-have. No need to cripple the language just for that. If
an extension developer creates a poorly tested and broken extension then
it's a bug that he or she needs to fix. That's the same as everywhere.
>
> Yes, in the current setup each constraint component should be usable in node
> constraints, in property constraints, and in inverse property constraints.
> Otherwise there is an extra cognitive load on users to figure out when a
> constraint component can be used. The idea is to not have errors result from
> these extra uses, though. Just as sh:minLength does not cause an error when a
> value node is a blank node neither should sh:datatype cause an error when used
> in an inverse property constraint. Of course, an sh:datatype in an inverse
> property constraint will always be false on a data graph that is not an
> extended RDF graph.
I completely disagree. Compared with OWL, this policy would mean that
any constraint-like property should be applicable everywhere. For
example in addition to
ex:Person
a owl:Class ;
owl:disjointWith ex:Animal ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty ex:gender ;
owl:maxCardinality 1 ;
] .
the policy that you propose would also allow
ex:Person
a owl:Class ;
owl:maxCardinality 1 ;
rdfs:subClassOf [
a owl:Restriction ;
owl:onProperty ex:gender ;
owl:disjointWith ex:Animal ;
] .
Do you remember why the OWL WG did not apply the same policy that you
describe?
In the case of SHACL you would allow something like
ex:PersonShape
a sh:Shape ;
sh:maxCount 1 ;
sh:property [
sh:predicate ex:gender ;
sh:closed true ;
] .
(Note the sh:maxCount would be utterly confusing to people, needlessly
increasing the cognitive load.)
There are good reasons why languages are designed to disallow certain
nonsensical statements: they support "compile-time" checking of syntax
errors, and enable input forms to suggest relevant properties.
I would also appreciate a response to the case of primary keys from my
previous email. Using them in inverse property constraints would be
meaningless and misleading. There must be a way for extension developers
to indicate for which cases a constraint component can be used.
sh:context is playing that role. We could potentially use Shapes and
sh:scopeClass instead, but then the meta-shapes would overlap with the
actual data shapes.
I believe the general problem that we have again and again is that you
(Peter) seem to focus on the constraint validation aspect only, while I
(and hopefully others) also want workable support for the other use
cases of SHACL such as form generation. From a pure validation
perspective, it may indeed be possible to formulate queries for all
three cases, even if they are dummies. But from a users' perspective
this makes no sense. And even from an implementation point of view,
forcing all the 3 cases everywhere is an extra burden. I believe cutting
down to a maximum of two queries will be acceptable and is easily
achievable without the drastic redesign you are proposing.
I wouldn't mind walking through the core vocabulary again to see if we
can further generalize some components. For example sh:hasShape could be
applied to node constraints too (pending a renaming probably). But there
still needs to be a generic context mechanism for extension authors. As
a tool developer I need that feature.
Holger
>
> peter
>
>
> On 06/05/2016 09:57 AM, Dimitris Kontokostas wrote:
>> So, this goes into the SPARQL extension mechanism, which also affects the
>> definition of the core language and, with what you propose,
>> - there should be _only one_ SPARQL query that will address all three
>> contexts, and any other contexts we may introduce in the future (e.g. for paths)
>> - even if it doesn't make sense in some cases or even if it would result in an
>> error when used, all contexts will be enabled for all components with this one
>> generic SPARQL query, right?
>>
>> (apologies if you discussed this already on the last telco)
>>
>> Dimitris
>>
>>
>> On Sun, Jun 5, 2016 at 6:06 PM, Peter F. Patel-Schneider
>> <pfpschneider@gmail.com <mailto:pfpschneider@gmail.com>> wrote:
>>
>> My recent messages have been about constraint components in general. Of
>> course, the examples of constraint components that are easiest to discuss are
>> the core constraint components, and when discussing core constraint components
>> there are also issues related to how they are described in the SHACL
>> specification.
>>
>>
>> Right now constraint components in both the core and in the extension have the
>> potential for tripartite behaviour - one behaviour in node constraints, one
>> behaviour in property constraints, and one behaviour in inverse property
>> constraints. No core constraint components actually work this way at present,
>> but the potential is there. This should be changed so that constraint
>> components, both in the core and in the extension, have a common behaviour for
>> node constraints, property constraints, and inverse property constraints.
>>
>> Not only should each constraint component have a single behaviour, but
>> constraint components should share common behaviours. Right now it is
>> possible for a constraint component to do something completely different with
>> the property. For example, a constraint component could decide to use the
>> constraint's property in an inverse direction in both inverse property
>> constraints and property constraints or could just ignore the property
>> altogether.
>>
>> Further, there should also be a common description of this behaviour common to
>> constraint components. Some core constraint components, e.g., sh:class, are
>> already described using a terminology, namely value nodes, that can easily
>> apply to all constraint components. Other constraint components, such as
>> sh:minCount and sh:equals, are described using different terminology that
>> describes the same thing. This makes sh:minCount and sh:equals appear to be
>> quite different from sh:class. Either the descriptions should align or there
>> should be different syntactic categories for sh:class and sh:minCount.
>>
>> It is also possible to resolve this problem by using a different syntax for
>> SHACL. ShEx does this by having a single property-crossing construct. OWL
>> does this by having multiple property-crossing constructs, including
>> ObjectAllValuesFrom and ObjectSomeValuesFrom. In both ShEx and OWL there are
>> many constructs, including the analogues of sh:class, that then just work on
>> single entities with no need to worry about focus nodes vs value nodes or
>> properties vs inverse properties.
>>
>>
>> Along with the problems of differing behaviour and description there is also
>> the problem of tripartite implementations, both of core and extended
>> constraint components. Why should sh:class need three pointers to
>> implementations, even if they are the same? Why should sh:minCount need two
>> (or three) implementations?
>>
>> One could say that this doesn't matter at all because SHACL implementations
>> are free to implement core constructs however they see fit. However, this
>> implementation methodology is completely exposed for constraint components in
>> the extension. It would be much better if only a single simple implementation
>> was needed for each constraint component. It would also be much better if the
>> implementations of constraint components did not need to worry about how value
>> nodes are determined.
>>
>>
>> So my view is that SHACL is currently has the worst of all possible worlds.
>> Its syntax is complex, because each constraint component has its own rules for
>> where it can occur. Its behaviour is complex, because each constraint
>> component decides how to behave in each kind of constraint. Its description
>> is complex, because different constraint components are described in different
>> ways. Its implementation is complex, because constraint components can have
>> up to three different implementations each of which is often more complex than
>> necessary.
>>
>> peter
>>
>>
>>
>>
>>
>>
>> On 06/05/2016 06:45 AM, Dimitris Kontokostas wrote:
>> > I was planning to ask for clarifications on this as well
>> >
>> > Is this thread about enabling all contexts in all SHACL Core components only
>> > or a suggestion to change the SPARQL extension mechanism in general?
>> > These two can be independent of each other imho.
>> >
>> > Best,
>> > Dimitris
>> >
>> > On Sun, Jun 5, 2016 at 10:10 AM, Holger Knublauch
>> <holger@topquadrant.com <mailto:holger@topquadrant.com>
>> > <mailto:holger@topquadrant.com <mailto:holger@topquadrant.com>>> wrote:
>> >
>> > Peter, could you clarify whether you were only talking about the core
>> > constraint components and how the spec would define them, or about the
>> > general mechanism? I am not too concerned about how we write things
>> in the
>> > spec. There is only one SPARQL query per component right now in the
>> spec.
>> >
>> > Thanks
>> > Holger
>> >
>> > Sent from my iPad
>> >
>>
>>
>>
>>
>> --
>> Dimitris Kontokostas
>> Department of Computer Science, University of Leipzig & DBpedia Association
>> Projects: http://dbpedia.org, http://rdfunit.aksw.org, http://aligned-project.eu
>> Homepage: http://aksw.org/DimitrisKontokostas
>> Research Group: AKSW/KILT http://aksw.org/Groups/KILT
>>
Received on Monday, 6 June 2016 06:14:40 UTC