- From: Irene Polikoff <irene@topquadrant.com>
- Date: Thu, 09 Jun 2016 12:26:45 -0400
- To: <kcoyle@kcoyle.net>, <public-data-shapes-wg@w3.org>
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 Thursday, 9 June 2016 16:27:18 UTC