- 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