Re: scopeNode and scopeClass

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> 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 http://kcoyle.net
>>>> m: 1-510-435-8234
>>>> skype: kcoylenet/+1-510-984-3600
>>>>
>>>
>>>
>>>
>>
>
>
>

-- 
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 10:13:31 UTC