- From: Martynas Jusevičius <martynas@graphity.org>
- Date: Tue, 10 May 2016 07:18:32 +0000
- To: Holger Knublauch <holger@topquadrant.com>, RDF Data Shapes Working Group <public-data-shapes-wg@w3.org>
- Message-ID: <CAE35Vmy3NYN4LGTv-sUJB2hzvE=3VNPmZuLjrR_HwhjjPoYXDg@mail.gmail.com>
Since SPIN takes an object-oriented view on inheritance, my guess is that SHACL does the same. I had suggested some time ago that it can be defined using simple rules (Jena rules in this case): [constructors: (?class rdf:type rdfs:Class), (?class < http://spinrdf.org/spin#constructor> ?o), (?subClass rdfs:subClassOf ?class), noValue(?subClass <http://spinrdf.org/spin#constructor>) -> (?subClass <http://spinrdf.org/spin#constructor> ?o) ] [constraints: (?class rdf:type rdfs:Class), (?class < http://spinrdf.org/spin#constraint> ?o), (?subClass rdfs:subClassOf ?class), noValue(?subClass <http://spinrdf.org/spin#constraint>) -> (?subClass <http://spinrdf.org/spin#constraint> ?o) ] https://groups.google.com/forum/m/#!msg/topbraid-users/vKkcn_5Esek/4vXFHq6MBQAJ On Tue, 10 May 2016 at 08:43, Holger Knublauch <holger@topquadrant.com> wrote: > On 10/05/2016 14:31, Tom Johnson wrote: > > > > On Mon, May 9, 2016 at 8:18 PM, Holger Knublauch <holger@topquadrant.com> > wrote: > >> On 10/05/2016 12:30, Tom Johnson wrote: >> >> >> >> On Mon, May 9, 2016 at 5:29 PM, Holger Knublauch <holger@topquadrant.com> >> wrote: >> >>> >>> >>> On 10/05/2016 10:11, Tom Johnson wrote: >>> >>> Irene, you say: >>> >>> > "Doing more" doesn't create a problem, but, on the other hand, it is >>> not required. >>> >>> I'm really uncertain about this. Couldn't inferring further class >>> relations (e.g., by using the entailment mechanism included in the spec) >>> cause different results for basically every operation in SHACL? >>> >>> >>> Can you think of a specific example? sh:entailment would potentially >>> produce additional triples. But this is the user's choice, and then the >>> user may expect to see additional validation results... >>> >> >> We seem to be in agreement that inferring additional triples will change >> results. Examples seem obvious; adding a `subClassOf` statement whose >> subject is any class referenced in a shape will do the trick, but that's >> far from the only example. >> >> This seems like a problem to me because I don't see that it's clear where >> triples like `subClassOf` must appear (data graph? shapes graph? any >> graph?) for a resource to count as a shape, or to match various constraint >> components. >> >> >> To have an effect on sh:scopeClass and sh:class, the subClassOf triples >> must be in the data graph. >> > > Is this stated somewhere in the current spec? I haven't been able to find > it, if so. > > > For sh:scopeClass, Section 2.1.2: > > "Note that, according to the SHACL instance definition, all the > rdfs:subClassOf declarations must exist in the data graph." > > For sh:class the same rules apply as for every other constraint component > - it looks for triples in the data graph. We could theoretically repeat > this everywhere, e.g. for sh:minCount, but at some stage this should be > clear. However, given that multiple people have run into this question > recently, I have just added a clarification to sh:class: > > > https://github.com/w3c/data-shapes/commit/4c0b8f1cbc8faa09624d1a35fc0a8ef564af09b7 > > > Also, the question applies equally to cases where the intent is presumably > that (only?) the data graph counts. For instance: which resources count as > sh:Shapes? > > > This would have to be in Section 4, but this is currently under revision > and may be merged with section 2 shortly, so I'll not touch it right now. > But the intent is that any Shape definition triples such as ex:MyShape > rdf:type sh:Shape are only relevant if they are in the shapes graph. > > > Note that adding a `subClassOf` triple to a shapes graph to effect >> validation could be considered a feature; I'm unsure whether that feature >> is supported. >> >> >> Currently the spec only looks at the data graph. >> >> >> Additionally, `sh:entailment` seems generally under/un-defined. Can >> inference effect data graphs only? or also shapes graphs? Which triples can >> be considered by a reasoner and how are inferred triples used by the SHACL >> semantics? >> >> >> I have just clarified this to the sh:entailment section: >> >> >> https://github.com/w3c/data-shapes/commit/71a9eeaff0317de0cdca6b36500412dabc922f78 >> >> I am unsure how many people will actually use sh:entailment, so any >> feedback/requirement may help us add missing details. It is very brief >> right now, indeed. >> > > I think some clear definition is called for; otherwise, I would simply > remove the feature; is there a functional difference between entailment (in > this case) and providing a mechanism for the user/engine to add arbitrary > triples to the data or shapes graph during pre-processing? This could be a > simpler way to think of the problem. > > > Regardless of whether sh:entailment exists, any implementer or engine > already has any freedom to modify the graphs prior to sending them to the > SHACL engine. This is outside of the SHACL language. The rest needs to be > decided by the WG, for which I cannot speak here. > > > Holger > > > > > - Tom > > > Holger >> >> >> >> Some of my other concerns about the specifics of `class` and `instance` >> definitions seem to be in the process of being fixed up; from a quick >> reading of the latest editor's draft, this is looking promising. >> >> - Tom >> >> >>> Thanks, i >>> Holger >>> >>> >>> >>> >>> In lieu of a repeat of previous conversations, I'll just say: For me, as >>> an implementer in waiting, this is a huge problem. On last reading, very >>> little seemed unambiguously defined. >>> >>> - Tom >>> >>> On Mon, May 9, 2016 at 12:14 PM, Irene Polikoff <irene@topquadrant.com> >>> wrote: >>> >>>> Karen, >>>> >>>> As I understand it, RDFS inferencing is one way to address this. >>>> However, >>>> RDFS inferencing would do more than what is specified here. "Doing more² >>>> doesn¹t create a problem, but, on the other hand, it is not required. >>>> >>>> Another way to address this is to run a query as follows: >>>> >>>> SELECT ?resource >>>> WHERE { >>>> >>>> ?class rdfs:subClassOf* example:Class1 . >>>> ?resource a ?class . >>>> >>>> } >>>> >>>> Running this query would not change any graphs. As an aside, RDFS >>>> inferencing is also often done without modifying any graphs. Inferences >>>> are calculated on the fly when users/systems query data without any >>>> materialization of inferred triples. At least, this is how triple stores >>>> that support RDFS inferencing typically work. >>>> >>>> Does your concern have to do with where the rdfs:subClassOf triples come >>>> from - would they exist in the data graph, would they exist in the >>>> shapes >>>> graph? They could be in either. If no subclass triples are there, then >>>> the >>>> first triple match simply binds ?class to example:Class1 and the query >>>> result is the same as if we were only looking for nodes that are >>>> connected >>>> to example:Class1 via rdf:type link. >>>> >>>> It doesn¹t seem to be a role of SHACL to mandate where these triples >>>> should be located. If they are available in either of the graphs, a >>>> SHACL >>>> engine should take them into account. If they are not available, than it >>>> doesn¹t take them into account. >>>> >>>> In our experience, users typically put the subclass triples into the >>>> shapes graph. At the same time, they need flexibility to do whatever >>>> fits >>>> their architecture and processes. >>>> >>>> >>>> Irene Polikoff >>>> >>>> >>>> On 5/9/16, 1:47 PM, "Karen Coyle" <kcoyle@kcoyle.net> wrote: >>>> >>>> >Type >>>> >The types of a node are its values of rdf:type as well as the >>>> >superclasses of these values. >>>> > >>>> >This conflates two different relationships: the relationship of a >>>> >subject to a class (as defined in RDF/RDFS), defining the subject as an >>>> >instance of the class; and the sub-/super-class relationships between >>>> >classes. I dont' see how this can be achieved without inferencing. >>>> > >>>> >If we assume some pre-processing of the data graph to include the >>>> >superclasses, then type is precisely as it is defined in RDF - there >>>> are >>>> >just more type statements in the graph. >>>> > >>>> >As stated, this is quite an expansion of the meaning of type. In >>>> >addition, it appears to require modifications to the data graph to >>>> >include the super classes of each class (presumably up to and including >>>> >rdfs:Resource). >>>> > >>>> >I think it would be best if SHACL defined the shape and data graphs as >>>> >immutable, thus expecting that all operations read but do not modify >>>> the >>>> >graphs. I thought we had come to that conclusion. >>>> > >>>> >kc >>>> >>>> >>>> >>>> >>> >>> >>> -- >>> -Tom Johnson >>> >>> >>> >> >> >> -- >> -Tom Johnson >> >> >> > > > -- > -Tom Johnson > > >
Received on Tuesday, 10 May 2016 07:27:27 UTC