- From: Arnaud Le Hors <lehors@us.ibm.com>
- Date: Tue, 18 Aug 2015 14:35:04 -0700
- To: Holger Knublauch <holger@topquadrant.com>
- Cc: RDF Data Shapes Working Group <public-data-shapes-wg@w3.org>
- Message-Id: <201508182135.t7ILZDMQ006945@d03av02.boulder.ibm.com>
Hi Holger, I know we didn't get to look into this issue last week but we will do so this week. I don't think the change you're proposing qualifies as merely editorial in nature given that it would require a change of an existing implementation if there were one. But I agree it is fairly straightforward and I hope it won't be controversial. Regards. -- Arnaud Le Hors - Senior Technical Staff Member, Open Web Technologies - IBM Software Group Holger Knublauch <holger@topquadrant.com> wrote on 08/13/2015 03:45:40 PM: > From: Holger Knublauch <holger@topquadrant.com> > To: RDF Data Shapes Working Group <public-data-shapes-wg@w3.org> > Date: 08/13/2015 03:46 PM > Subject: Re: shapes-ISSUE-79 (Validation functions): Cleaner > separation between value checking and property iteration [SHACL Spec] > > Arnaud, > > we did not open this ISSUE today, so now I am not sure how to proceed. > It feels like a rather low-level issue that (hopefully) few people will > have a strong opinion about. Templates are probably an area where most > WG members have not even taken a deep look at. If that is the case, may > I treat this as an editorial issue and update the spec accordingly? > > Thanks, > Holger > > > On 8/13/2015 16:25, Simon Steyskal wrote: > > Hi! > > > >> Yes correct. A naive implementation would auto-generate a query such as > >> > >> SELECT ?this ?subject ?predicate (?value AS ?object) ?datatype > >> WHERE { > >> ?this ?predicate ?value . > >> FILTER (!sh:hasDatatype(?value, ?datatype)) . > >> } > >> > >> based on the sh:validationFunction=sh:hasDatatype triple. It walks > >> through the result set and for each row produces one violation, using > >> the sh:message attached to the template. If the sh:message = "Your > >> literal must have datatype {?datatype}" then the engine can determine > >> that ?datatype is needed to populate the message, and therefore needs > >> to be projected out from the SELECT. The same applies to ?this or the > >> other variables. (I have implemented this today to confirm that it > >> works). > > > > Ahh ok.. If we agree on this approach, those implications should be > > explicitly mentioned in the respective sections of the spec, though. > > > > thanks, > > simon > > > > --- > > DDipl.-Ing. Simon Steyskal > > Institute for Information Business, WU Vienna > > > > www: http://www.steyskal.info/ twitter: @simonsteys > > > > Am 2015-08-13 08:15, schrieb Holger Knublauch: > >> On 8/13/2015 16:09, Simon Steyskal wrote: > >>> Hi! > >>> > >>>> The message is defined by the surrounding template, using sh:message. > >>>> I cannot think of other important information that could not be > >>>> generalized. > >>> > >>> I thought that the results of the SELECT query were responsible for > >>> "populating" the sh:message. > >>> In the sense that, if e.g. one wants to specify the node that has > >>> violated a constraint in the message too, ?this (retrieved from the > >>> query results) would have to be used. > >> > >> Yes correct. A naive implementation would auto-generate a query such as > >> > >> SELECT ?this ?subject ?predicate (?value AS ?object) ?datatype > >> WHERE { > >> ?this ?predicate ?value . > >> FILTER (!sh:hasDatatype(?value, ?datatype)) . > >> } > >> > >> based on the sh:validationFunction=sh:hasDatatype triple. It walks > >> through the result set and for each row produces one violation, using > >> the sh:message attached to the template. If the sh:message = "Your > >> literal must have datatype {?datatype}" then the engine can determine > >> that ?datatype is needed to populate the message, and therefore needs > >> to be projected out from the SELECT. The same applies to ?this or the > >> other variables. (I have implemented this today to confirm that it > >> works). > >> > >> HTH > >> Holger > >
Received on Tuesday, 18 August 2015 21:35:51 UTC