- From: Dimitris Kontokostas <kontokostas@informatik.uni-leipzig.de>
- Date: Tue, 19 Jul 2016 09:17:30 +0300
- To: Holger Knublauch <holger@topquadrant.com>
- Cc: public-data-shapes-wg <public-data-shapes-wg@w3.org>
- Message-ID: <CA+u4+a1awj=vc4W-PT2j_xSoZUV5T=kSN66vV3iuCHKTZw-QTg@mail.gmail.com>
On Tue, Jul 19, 2016 at 3:35 AM, Holger Knublauch <holger@topquadrant.com>
wrote:
> On 18/07/2016 18:34, Dimitris Kontokostas wrote:
>
> In general I am in favor of syntax simplifications but I have some
> concerns on this one, mainly from the use perspective
> What might not be straightforward for the users with this proposal is that
> when they use sh:or in property constraints they will not be able to use
> components such as
> sh:hasValue, sh:equals, sh:disjoint, sh:min/maxCount, sh:uniqLang and in
> general all components with NC not checked in the table of section 4
> e.g. when someone defines that a property ex:p must :
> - have sh:hasValue X or sh:hasValue Z
> - be sh:equals to ex:p1 or ex:p2
> they will always get back failures or violations (depending on ISSUE-139)
>
>
> Let's try to get to the bottom of this.
>
> In the current syntax the above would be expressed as
>
> ex:MyShape
> a sh:Shape ;
> sh:constraint [
> sh:or (
> [ sh:property [
> sh:predicate ex:p ;
> sh:hasValue X ;
> ] ]
> [ sh:property [
> sh:predicate ex:p ;
> sh:hasValue Z ;
> ] ]
> ) ;
> ] ;
> sh:constraint [
> sh:or (
> [ sh:property [
> sh:predicte ex:p ;
> sh:equals ex:p1 ;
> ] ]
> [ sh:property [
> sh:predicte ex:p ;
> sh:equals ex:p2 ;
> ] ]
> ) ;
> ] .
>
> i.e. the sh:or must be placed on the outside. With the new syntax that
> situation does not change, only that the sh:constraint triples would be
> collapsed:
>
> ex:MyShape
> a sh:Shape ;
> sh:or (
> [ sh:property [
> sh:predicate ex:p ;
> sh:hasValue X ;
> ] ]
> [ sh:property [
> sh:predicate ex:p ;
> sh:hasValue Z ;
> ] ]
> ) ;
> sh:or (
> [ sh:property [
> sh:predicte ex:p ;
> sh:equals ex:p1 ;
> ] ]
> [ sh:property [
> sh:predicte ex:p ;
> sh:equals ex:p2 ;
> ] ]
> ) .
>
> Using sh:hasValue and the other operators inside of an sh:or at a property
> constraint would not have the desired effect, because sh:or iterates over
> all values of the property and then applies the constraint independently.
> And the members of the sh:or list are sh:Shapes, not sh:NodeConstraints.
>
> But this topic seems orthogonal to the question of merging
> sh:NodeConstraint with sh:Shape to me. Could you clarify where you see the
> connection?
>
I agree that if you know how you want to do something the new syntax will
make it easier for you.
but if we merge sh:Shapes with with sh:NodeConstraints, we will make it
very natural for people to express shapes in a wrong way, i.e. write it like
ex:MyShape
a sh:Shape ;
sh:property [
sh:predicate ex:p ;
sh:or (
[sh:hasValue X ;]
[sh:hasValue Y ;]
) ;
sh:or (
[sh:equals ex:p1 ;]
[sh:equals ex:p2 ;]
) ;
] ;
and it will be harder for us to explain why the former is wrong while the
following is correct
ex:MyShape
a sh:Shape ;
sh:property [
sh:predicate ex:p ;
sh:or (
[sh:datatype ex:d1 ;]
[sh:datatype ex:d2 ;]
) ;
sh:or (
[sh:class ex:c1 ;]
[sh:class ex:c2 ;]
) ;
] ;
imho If we keep the sh:constraint (or sh:node) explicit in the definition
it will be easier to explain the difference
--
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 Tuesday, 19 July 2016 06:18:26 UTC