Re: scopeNode and scopeClass

Dimitris, thanks, but I wasn't suggesting to use node scope or node 
constraint. The example with node constraint is what Holger supplied. My 
use case is related to classes. classScope is defined as: "A class scope 
for class $scopeClass is defined as the set of all SHACL instances of 
$scopeClass in the data graph." Key here is that it is *all SHACL 
instances of $scopeClass*. However, the current spec does not allow one 
to use minCount or maxCount with scopeClass. That is what I was 
questioning. With Peter's proposal of having all constraints be usable 
with all scope types, I believe that one should be able to use counts 
with classes in scope. In any case, I think that the use case "n 
instances of classA" is a legitimate use case, and should logically be 
coded as a classScope since a user will think of it as relating to a class.

Honestly, I think the spec is getting more obscure in its meaning, or 
maybe it is just that the more I read it the less sense it makes.

kc

On 6/12/16 6:45 AM, Dimitris Kontokostas wrote:
> Hi Karen,
>
> I think there is some confusion here on the role of scope and node
> constraints
>
> when we put the constraint in the node (nodeConstraints) the node
> constraint does not apply on all the focus nodes together but on the
> focus nodes one by one, as it does on the property constraints.
>
> let's take the example you had in mind
> ex:MyShape
>     a sh:Shape ;
>     sh:scopeNode foaf:Person ;
>     sh:constraint [
>         sh:maxCount 2 ;
>     ] .
>
> with data
> ex:Bob a foaf:Person
> ex:Alice a foaf:Person
> ex:Carol a foaf:Person
>
> in this case the sh:maxCount argument is applied separately for ex:Bob,
> ex:Alice and ex:Carol and it is always valid.
> The reason this shape is always valid for any graph because each focus
> node always has count = 1 when it is evaluated
> (this goes with the discussion that some constraints does not make sense
> in certain contexts)
>
> if you want to limit the number of Persons inside a data graph, Holgers
> example would do the trick but doesn't take SHACL instances into
> account, only direct types
>
> Dimitris
>
> On Sun, Jun 12, 2016 at 1:13 PM, Karen Coyle <kcoyle@kcoyle.net
> <mailto:kcoyle@kcoyle.net>> wrote:
>
>     Sorry my last note was abrupt - was in an airport and my flight was
>     called. Here's my summary of this issue:
>
>     - min/maxCount are defined only for predicate-based constraints
>     - maxCount "n" instances of classA cannot be a class-based constraint
>     - the validation requirement "n instances of classA" must be done as:
>
>      ex:MyShape
>          a sh:Shape ;
>          sh:scopeNode foaf:Person ;
>          sh:inverseProperty [
>              sh:predicate rdf:type ;
>              sh:maxCount 2 ;
>          ] .
>
>     My response is that
>
>     1) this is inconsistent. If there is a need to count instances of a
>     class it should be done with scopeClass as with all other
>     class-based validation requirements
>     2) this is not clear in the SHACL document. (I would be interested
>     to hear from others on the list whether this was obvious to them.)
>
>     I don't think we should accept this kind of inconsistency in the
>     standard.
>
>     kc
>
>
>     On 6/9/16 10:10 PM, Holger Knublauch wrote:
>
>         Karen,
>
>         I am a bit lost about what you are referring to. This discussion
>         started
>         about using scopeNode to represent number of instances in a
>         graph, and
>         then we added scopeClass into the mix. So I assume you are probably
>         referring to the examples in sections 2.1.1 and 2.1.2. The scopeNode
>         example in 2.1.1 has nothing to do with rdf:type. For class-based
>         scopes, 2.1.2 already has two different data graphs - the first
>         one with
>         Alice and Bob is showing "direct" instances, while the ex:Who a
>         ex:Doctor example already demonstrates how rdfs:subClassOf
>         triples are
>         used.
>
>         Or are you looking for a mechanism to count instances of a given
>         class
>         within the data graph, also taking subclasses into consideration?
>
>         Could you clarify?
>
>         Holger
>
>         PS: I have changed the subject line of this email to reflect the
>         drift
>         in topic
>
>
>         On 10/06/2016 14:08, Karen Coyle wrote:
>
>             It isn't a question of switching them. I find that the
>             examples do not
>             show the difference between class-defined nodes and
>             predicate-defined
>             node that uses rdf:type as the predicate. Since all
>             rdf:type/s must be
>             explicitly defined, these are either the same, or they are
>             different,
>             and if they are different, that needs to be made clear.
>
>             kc
>
>             On 6/9/16 9:26 AM, Irene Polikoff wrote:
>
>                 Examples in the spec would not have the same result if
>                 scopeNode and
>                 scopeClass were switched. They look pretty clear to me
>                 as they all
>                 identify what focus nodes would be selected.
>
>                 May be the following will help:
>
>                 Let¹s say there is a graph like so:
>
>                 ex:Person rdfs:label ŒPerson¹.
>                 ex:Person rdfs:label ŒHuman Being¹.
>                 ex:Alice rdf:type ex:Person.
>                 ex:Alice rdfs:label ŒAlice¹.
>                 ex:Alice rdfs:label ŒAlice Jones¹.
>                 ex:Bob rdf:type ex:Person.
>                 ex:Joe rdf:type ex:Person.
>                 ex:Joe rdfs;label ŒJoe¹.
>
>                 And a shape
>
>                 ex:Shape1
>                      a sh:Shape ;
>                      sh:scopeNode ex:Person ;
>                      sh:property [
>                          sh:predicate rdfs:label ;
>                          sh:maxCount 1 ;
>                      ] .
>
>
>                 The node in focus is ex:Person and there will be a
>                 violation because it
>                 has two labels. No other nodes are in focus, no other
>                 violations.
>
>                 If there was a different shape
>
>                 ex:Shape2
>                 a sh:Shape ;
>                 sh:scopeClass ex:Person ;
>                 sh:property [
>                 sh:predicate rdfs:label ;
>                 sh:maxCount 1 ;
>                 ] .
>
>
>                 Then, three nodes are in scope - ex:Alice, ex:Bob and
>                 ex:Joe. There will
>                 be one violation for ex:Alice.
>
>                 Lets look at the shape Holger has below. This shape
>                 demonstrates, among
>                 other things, that the validation can look at triples
>                 with the focus
>                 nodes
>                 as objects by using sh:inverseProperty
>
>                 ex:MyShape
>                      a sh:Shape ;
>                      sh:scopeNode ex:Person ;
>                      sh:inverseProperty [
>                          sh:predicate rdf:type ;
>                          sh:maxCount 2 ;
>                      ] .
>
>                 The focus node is ex:Person and there will be a
>                 violation since there
>                 are
>                 three triples that follow the {?x rdf:type ex:Person}
>                 pattern.
>
>
>                 Irene
>
>
>
>                 On 6/9/16, 1:33 AM, "Karen Coyle" <kcoyle@kcoyle.net
>                 <mailto:kcoyle@kcoyle.net>> wrote:
>
>                     Holger, that still doesn't explain what the
>                     difference is. What is the
>                     quality of a SHACL class that is different to a
>                     triple with a predicate
>                     of rdf:type? Are you saying that scopeClass
>                     implies/allows subclass
>                     relationships to be included? If so, that must be
>                     said in the
>                     specification, and it should be illustrated in the
>                     examples. As it is,
>                     the examples given would have the same result using
>                     either predicate.
>
>                     Also, the section that introduces scopeNode does not
>                     say that it
>                     applies
>                     only to the subject of a triple. If that is the
>                     case, then it needs to
>                     specify that.
>
>                     kc
>
>                     On 6/8/16 9:44 PM, Holger Knublauch wrote:
>
>
>                         On 9/06/2016 14:40, Karen Coyle wrote:
>
>                             sh:scopeClass <foaf:Person> and sh:scopeNode
>                             <foaf:Person> appear to
>                             identify the same focus node(s) in the data
>                             graph.
>
>
>                         sh:scopeNode means "the (class) node itself".
>                         sh:scopeClass means "all SHACL instances of the
>                         class".
>
>                         So they do not identify the same focus nodes.
>
>                         Holger
>
>
>
>
>                             ***shape1***
>                             ex:MyShape
>                                 a sh:Shape ;
>                                 sh:scopeNode foaf:Person ;
>                                 sh:inverseProperty [
>                                     sh:predicate rdf:type ;
>                                     sh:maxCount 2 ;
>                                 ] .
>
>                             ***shape2***
>                             ex:PersonShape
>                                 a sh:Shape ;
>                                 sh:scopeClass ex:Person .
>
>                             ***data graph***
>
>                             ex:Alice a ex:Person .
>                             ex:Bob a ex:Person .
>                             ex:NewYork a ex:Place .
>
>                             Where does the spec address the reason for this?
>
>                             kc
>
>                             On 6/7/16 10:09 PM, Holger Knublauch wrote:
>
>
>
>                                 On 8/06/2016 14:57, Karen Coyle wrote:
>
>
>
>                                     On 6/7/16 7:38 PM, Holger Knublauch
>                                     wrote:
>
>                                         Yes and SHACL should implement
>                                         the same policy, because
>                                         sh:maxCount
>                                         also
>                                         only makes sense for
>                                         predicate-based constraints and
>                                         not node
>                                         constraints.
>
>
>                                     Does this then rule out a constraint
>                                     like "n things of type x"? For
>                                     example, if you want to limit the
>                                     number of foaf:Person nodes?
>
>
>                                 No. To express "A graph must have at
>                                 most 2 instances of
>                                 foaf:Person"
>                                 you would write
>
>                                 ex:MyShape
>                                     a sh:Shape ;
>                                     sh:scopeNode foaf:Person ;
>                                     sh:inverseProperty [
>                                         sh:predicate rdf:type ;
>                                         sh:maxCount 2 ;
>                                     ] .
>
>                                 In other words "there must be at most 2
>                                 triples that have
>                                 foaf:Person
>                                 as
>                                 object and rdf:type as predicate".
>
>                                 Peter's suggested use of sh:maxCount at
>                                 node constraints would mean
>
>                                 "Verify that the set of value nodes is
>                                 not larger than two. Oh, and
>                                 regardless of the actual data, I already
>                                 know that this set of value
>                                 nodes has size 1, because it always
>                                 consists of the focus node only.
>                                 So
>                                 actually I only need to test whether the
>                                 value of sh:maxCount > 0."
>
>                                 which is a rather useless construct. You
>                                 have just confirmed that
>                                 misusing sh:maxCount as node constraints
>                                 will likely confuse users.
>
>                                 Is this difference clearer now, or what
>                                 else could I clarify?
>
>                                 Thanks,
>                                 Holger
>
>
>
>
>
>
>
>
>                     --
>                     Karen Coyle
>                     kcoyle@kcoyle.net <mailto:kcoyle@kcoyle.net>
>                     http://kcoyle.net
>                     m: 1-510-435-8234
>                     skype: kcoylenet/+1-510-984-3600 <tel:%2B1-510-984-3600>
>
>
>
>
>
>
>
>
>
>     --
>     Karen Coyle
>     kcoyle@kcoyle.net <mailto:kcoyle@kcoyle.net> http://kcoyle.net
>     m: 1-510-435-8234
>     skype: kcoylenet/+1-510-984-3600 <tel:%2B1-510-984-3600>
>
>
>
>
> --
> 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
>

-- 
Karen Coyle
kcoyle@kcoyle.net http://kcoyle.net
m: 1-510-435-8234
skype: kcoylenet/+1-510-984-3600

Received on Sunday, 12 June 2016 16:31:02 UTC