scopeNode and scopeClass (was: ISSUE-139: uniform descriptions and implementations of constraint components)

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
>>>
>>
>>
>>
>

Received on Friday, 10 June 2016 05:10:59 UTC