- From: Holger Knublauch <holger@topquadrant.com>
- Date: Fri, 10 Jun 2016 15:10:21 +1000
- To: public-data-shapes-wg@w3.org
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