- From: Karen Coyle <kcoyle@kcoyle.net>
- Date: Sun, 12 Jun 2016 09:30:36 -0700
- To: Dimitris Kontokostas <kontokostas@informatik.uni-leipzig.de>
- Cc: public-data-shapes-wg <public-data-shapes-wg@w3.org>
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