- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Thu, 6 Nov 2014 16:49:51 -0500
- To: Irene Polikoff <irene@topquadrant.com>
- Cc: Peter Patel-Schneider <pfpschneider@gmail.com>, public-data-shapes-wg@w3.org, Holger Knublauch <holger@topquadrant.com>
- Message-ID: <CANfjZH2EFA+q1Nmjz2jFAfqLXzztY6UusKT1zngSEW=sfLwh4A@mail.gmail.com>
So that would mean it's within SPARQL expressivity (so long as it's not recursive) but not in the more declarative template language. On Nov 6, 2014 10:15 PM, "Irene Polikoff" <irene@topquadrant.com> wrote: > > Yes, along these lines. > > -----Original Message----- > From: Eric Prud'hommeaux [mailto:eric@w3.org] > Sent: Thursday, November 06, 2014 3:57 PM > To: Irene Polikoff > Cc: 'Peter F. Patel-Schneider'; 'Holger Knublauch'; public-data-shapes-wg@w3.org > Subject: RE: Can Shapes always be Classes? > > * Irene Polikoff <irene@topquadrant.com> [2014-11-06 15:34-0500] > > I would put these constraints directly on the Issue class. > > > > Peter's suggestion of associating constraints with rdfs:Resource also works. Although, in the presence of large data sets/streams, one doesn’t want to have to check everything for every resource. A key feature of class-associated constraints is that they provide for scoping. When data is small, it doesn’t really matter. For larger data sets, a better practice would be to minimize the number of un-scoped or too broadly scoped constraints. > > If I understand, you would add the submitter and assignee constraints to the Issue class itself. Would that be in the form of a SPARQL that tested the cardinality and object of all of their respective properties? > > > > Irene > > > > -----Original Message----- > > From: Eric Prud'hommeaux [mailto:eric@w3.org] > > Sent: Thursday, November 06, 2014 12:59 PM > > To: Irene Polikoff > > Cc: Peter F. Patel-Schneider; Holger Knublauch; > > public-data-shapes-wg@w3.org > > Subject: Re: Can Shapes always be Classes? > > > > * Irene Polikoff <irene@topquadrant.com> [2014-11-06 10:46-0500] > > > True - if you have data without any type triples, they would need to be inferred first. Not a problem and, furthermore, in my experience, this situation is atypical. > > > > _:Bob has a type arc (foaf:Person), but that type doesn't fully discriminate all of the possible constraints to which it may conform, as would be the case with pretty much any publicly-consumable data. > > This is less an issue for proprietary data confined to a known number of business processes. > > > > > > > Applications know what 'objects' they are dealing with. They specify this info in their output and expect it in their input. > > > > > > Also, to get any kind of validation for assignee and submitter, there must be some triples with them as subjects in this example - otherwise, there is nothing to validate. > > > > > > Irene > > > > > > Sent from my iPhone > > > > > > > On Nov 6, 2014, at 10:29 AM, Eric Prud'hommeaux <eric@w3.org> wrote: > > > > > > > > * Eric Prud'hommeaux <eric@w3.org> [2014-11-06 09:20-0500] > > > >> * Peter F. Patel-Schneider <pfpschneider@gmail.com> [2014-11-05 > > > >> 14:46-0800] > > > >>> I'm having a hard time figuring out how "context-sensitive grammars" > > > >>> fit into this discussion. As far as I can tell, every proposal > > > >>> has the ability to decouple the constraints/shapes from > > > >>> ontologies. As far as I can tell, every proposal has the > > > >>> ability to only run the constraints/shapes against some nodes in a graph. > > > >>> This doesn't make any of these context-sensitive grammars in the > > > >>> formal sense of the word, just that the determination of which > > > >>> nodes to look at when doing constraint/shape checking depends on some notion of context. > > > >>> > > > >>> It appears to be true that the only context that can be provided > > > >>> for SPIN constraints comes from rdf:type triples (which are no > > > >>> way, shape, form, or context to be considered annotations, by the way). > > > >> > > > >> Try the exercise of validating this data: > > > >> _:IssueA :submittedBy _:Bob ; :assignedTo _:Bob . > > > >> against this schema: > > > >> OWL: > > > >> Class: x:NewIssueShape > > > >> SubClassOf: > > > >> :submittedBy some x:SubmitterShape, > > > >> :assignedTo some x:AssigneeShape > > > >> ShExC: > > > >> x:NewIssueShape { > > > >> :submittedBy @x:SubmitterShape, > > > >> :assignedTo @x:AssigneeShape > > > >> } > > > >> > > > >> In OWL, Resource Shapes, ShExC (DC Application Profiles, …), the > > > >> validator is testing _:Bob against two shapes, one for submitters > > > >> and one for assignees. In SPIN, one would have to first infer > > > >> that _:Bob a x:SubmitterShape, x:AssigneeShape . > > > >> via e.g. some OWL RL inference in order to trigger the associated > > > >> SPIN constraints. > > > > > > > > Maybe I should add that I described the current limitation in > > > > terms of context-sensitivity because the current algorithm doesn't > > > > enable the context (e.g. an owl:Restriction) to assert that _:Bob > > > > (a > > > > foaf:Person) should be constrained as a submitter and as an assignee. > > > > > > > > > > > >>> It also appears to be true that ShEx constraints are provided > > > >>> separately from the shapes themselves. The context for OWL > > > >>> constraints is determined by the form of the axiom, and can be > > > >>> the class membership of a node, the properties of a node, a > > > >>> particular node, and even other things. OWL constraints can get > > > >>> context out of RDF graphs that have no rdf:type triples at all, > > > >>> but they can also exploit the full power of RDFS class membership. > > > >>> > > > >>> peter > > > >>> > > > >>> > > > >>>> On 11/05/2014 10:25 AM, Eric Prud'hommeaux wrote: > > > >>>> * Holger Knublauch <holger@topquadrant.com> [2014-11-05 > > > >>>> 15:35+1000] > > > >>>>> On 11/5/2014 15:26, Irene Polikoff wrote: > > > >>>>>>> From: Holger Knublauch [mailto:holger@topquadrant.com] > > > >>>>>>> Sent: Wednesday, November 05, 2014 12:16 AM > > > >>>>>>> To: public-data-shapes-wg@w3.org > > > >>>>>>> Subject: Can Shapes always be Classes? > > > >>>>>>> > > > >>>>>>> I believe there is a fundamental difference in how the > > > >>>>>>> various proposals treat the relationship between resources and their shapes: > > > >>>>>>> > > > >>>>>>> - In OWL and SPIN, constraints are attached to classes. > > > >>>>>>> rdf:type triples are used to determine which constraints > > > >>>>>>> need to be evaluated for a given instance. > > > >>>>>>> > > > >>>>>>> - In the original Resource Shapes and ShEx, Shapes are > > > >>>>>>> stand-alone entities that may or may not be associated with > > > >>>>>>> a class. Other mechanisms than rdf:type are used to point from instances to their shapes. > > > >>>>>>> > > > >>>>>>> I believe the main motivation for the latter design are the > > > >>>>>>> User Stories > > > >>>>>>> S7 and S8: different shapes at different times, and > > > >>>>>>> properties can change as they pass through the workflow. I > > > >>>>>>> would like to learn more about this and have specific examples that we can evaluate. > > > >>>>>>> > > > >>>>>>> My current assumption is that these scenarios can be > > > >>>>>>> expressed via named graphs, so that different class definitions are used in different contexts. > > > >>>>>>> Which graph to use would be specified in some kind of header > > > >>>>>>> metadata or via a special property (e.g. owl:imports). > > > >>>>>>> Alternatively, different classes could be used, just like different shapes are used depending on the context. > > > >>>>>>> I argue that using rdf:type and RDFS classes is a > > > >>>>>>> well-established mechanism that we should try to build upon. > > > >>>>>>> What problems do the proponents of the decoupling see with those ideas? > > > >>>> > > > >>>> I think the fundamental issue is whether these are effectively > > > >>>> context-sensitive grammars. As currently proposed, SPIN depends > > > >>>> on type annotations attached to the data. It would be possible > > > >>>> to add a step which creates a premise when validating some > > > >>>> node. I believe this would get around all of the issues > > > >>>> stemming from requiring fully discriminating types. > > > >>>> > > > >>>> Use Case: context-sensitive-rooted-issue-interface > > > >>>> > > > >>>> An LDP service accepts new Issues. A posted issue is expected > > > >>>> to have a :name, :status and a :submittedBy. If the status is > > > >>>> :assigned, it must have an :assignedTo . It may also have > > > >>>> references to other Issues which may or may not be in the system so they are referenced by :name. > > > >>>> > > > >>>> Sample Data: > > > >>>> _:IssueA a :Issue ; > > > >>>> :name "funny smell and no lights" ; > > > >>>> :status :assigned ; > > > >>>> :submittedBy _:Bob ; > > > >>>> :assignedTo _:Bob ; > > > >>>> :related [ a :Issue ; :name "smoke coming from unit" ], > > > >>>> [ a :Issue ; :name "110V capacitor in French unit" ] . > > > >>>> > > > >>>> _:Bob a foaf:Person ; > > > >>>> foaf:givenName "Bob" ; > > > >>>> foaf:familyName "Smith" ; > > > >>>> foaf:mbox <mailto:bob@example.com> . > > > >>>> > > > >>>> There are multiple nodes of type :Issue so the client can > > > >>>> specify the start node as _:IssueA (e.g. in a header). This > > > >>>> makes the posted data a "pointed graph". > > > >>>> > > > >>>> If the requirements for the :submittedBy and the :assignedTo > > > >>>> are different, we have need context-sensitivity. > > > >>>> > > > >>>> x:NewIssueShape { > > > >>>> :name LITERAL, > > > >>>> :submittedBy @x:SubmitterShape, > > > >>>> (:status (:unassigned :unknown) > > > >>>> | :status (:assigned), > > > >>>> :assignedTo @x:AssigneeShape), > > > >>>> :related { :name LITERAL }* > > > >>>> } > > > >>>> > > > >>>> x:SubmitterShape { > > > >>>> foaf:givenName LITERAL, > > > >>>> foaf:familyName LITERAL? > > > >>>> } > > > >>>> > > > >>>> x:AssigneeShape { > > > >>>> foaf:givenName LITERAL, > > > >>>> foaf:familyName LITERAL, > > > >>>> foaf:mbox IRI > > > >>>> } > > > >>>> > > > >>>> If we have some OWL like (eliding cardinalities): > > > >>>> > > > >>>> Class: x:NewIssueShape > > > >>>> SubClassOf: > > > >>>> :name some rdfs:Literal, > > > >>>> :submittedBy some x:SubmitterShape, > > > >>>> (:status value :unassigned > > > >>>> or > > > >>>> (:status value :assigned and :assignedTo some x:AssigneeShape)) > > > >>>> :related (:name rdfs:Literal) > > > >>>> > > > >>>> Class: x:SubmitterShape > > > >>>> SubClassOf: > > > >>>> foaf:givenName some rdfs:Literal, > > > >>>> foaf:familyName some rdfs:Literal > > > >>>> > > > >>>> Class: x:AssigneeShape > > > >>>> SubClassOf: > > > >>>> foaf:givenName some rdfs:Literal, > > > >>>> foaf:familyName some rdfs:Literal, > > > >>>> foaf:mboxName some rdf:Resource > > > >>>> > > > >>>> , we can validate the data with the premise _:IssueA a x:NewIssueShape. > > > >>>> The validation will recursively test the nested constraints. > > > >>>> This of course hinges on being able to verify a premise. > > > >>>> > > > >>>> It seems reasonable to extend SPIN to test premises. It could > > > >>>> use the same idea where instead of an rdfs:range to specify an > > > >>>> expected object type, one could use Resource Shapes' > > > >>>> rs:valueShape. This would assert the premise that e.g. _:Bob a > > > >>>> x:SubmitterShape and then another _:Bob a x:AssigneeShape . > > > >>>> > > > >>>> > > > >>>>>>> I think this is a major design decision that we need to clarify early. > > > >>>>>>> Instead of excluding those scenarios, I would like to > > > >>>>>>> accommodate them without having to introduce completely new mechanisms. > > > >>>>>> Holger, > > > >>>>>> > > > >>>>>> I believe you are saying that there could be two (or more) > > > >>>>>> named graphs each containing different sets of constraints > > > >>>>>> for a particular classes (or classes). For example: > > > >>>>>> > > > >>>>>> Graph A: contains rdf:type statements for a set of classes and properties. > > > >>>>>> Can also contain other RDFS or OWL axioms > > > >>>>>> > > > >>>>>> Graph B: contains some constraints for classes declared in > > > >>>>>> Graph A > > > >>>>>> > > > >>>>>> Graph C: contains a different set of constraints for classes > > > >>>>>> declared in Graph A > > > >>>>>> > > > >>>>>> And so on > > > >>>>>> > > > >>>>>> A given application can then chose what set of constraints it > > > >>>>>> will be using > > > >>>>>> - Graph B or Graph C. > > > >>>>>> > > > >>>>>> Is this correct? > > > >>>>> > > > >>>>> Yes sorry I was brief. Let's take an extreme use case, where > > > >>>>> the same ex:Instance must fulfill different constraints in > > > >>>>> scenario A and B. > > > >>>>> > > > >>>>> ex:Instance > > > >>>>> a ex:Person ; > > > >>>>> foaf:firstName "John" . > > > >>>>> > > > >>>>> Scenario A: Each Person can have any number of first names. > > > >>>>> > > > >>>>> Scenario B: Each Person must have exactly one first name. > > > >>>>> > > > >>>>> In scenario A, it would have > > > >>>>> > > > >>>>> <instance graph> owl:imports <schema A> > > > >>>>> > > > >>>>> where <schema A> is simply the unconstrained class definition. > > > >>>>> > > > >>>>> ex:Person a rdfs:Class . > > > >>>>> > > > >>>>> In scenario B, it would owl:import <schema B> which is > > > >>>>> > > > >>>>> ex:Person a rdfs:Class ; > > > >>>>> constraint foaf:firstName exactly 1 . > > > >>>>> > > > >>>>> I hope this explains the named graph work-around. > > > >>>>> > > > >>>>> Holger > > > >> > > > >> -- > > > >> -ericP > > > >> > > > >> office: +1.617.599.3509 > > > >> mobile: +33.6.80.80.35.59 > > > >> > > > >> (eric@w3.org) > > > >> Feel free to forward this message to any list for any purpose > > > >> other than email address distribution. > > > >> > > > >> There are subtle nuances encoded in font variation and clever > > > >> layout which can only be seen by printing this message on high-clay paper. > > > > > > > > -- > > > > -ericP > > > > > > > > office: +1.617.599.3509 > > > > mobile: +33.6.80.80.35.59 > > > > > > > > (eric@w3.org) > > > > Feel free to forward this message to any list for any purpose > > > > other than email address distribution. > > > > > > > > There are subtle nuances encoded in font variation and clever > > > > layout which can only be seen by printing this message on high-clay paper. > > > > > > > > -- > > -ericP > > > > office: +1.617.599.3509 > > mobile: +33.6.80.80.35.59 > > > > (eric@w3.org) > > Feel free to forward this message to any list for any purpose other than email address distribution. > > > > There are subtle nuances encoded in font variation and clever layout which can only be seen by printing this message on high-clay paper. > > > > -- > -ericP > > office: +1.617.599.3509 > mobile: +33.6.80.80.35.59 > > (eric@w3.org) > Feel free to forward this message to any list for any purpose other than email address distribution. > > There are subtle nuances encoded in font variation and clever layout which can only be seen by printing this message on high-clay paper. >
Received on Thursday, 6 November 2014 21:50:22 UTC