- From: Gary Murphy <gary@schemaapp.com>
- Date: Wed, 10 Apr 2019 12:12:18 -0400
- To: Håvard Ottestad <hmottestad@gmail.com>
- Cc: Holger Knublauch <holger@topquadrant.com>, public-shacl@w3.org
- Message-ID: <CADnyxpsLshxyvV+3obXbHV95PKogq=cOEES0B4OMOa-ZRkUpPg@mail.gmail.com>
Håvard, If you happen to still have those instructions could you forward a copy to me? Thanks. Gary. On Tue, Mar 26, 2019 at 10:00 AM Håvard Ottestad <hmottestad@gmail.com> wrote: > I ended up asking Holger, and he kindly explained how he recommends to use > it for nested violations (eg. sh:or). So RDF4J does the same. > > Håvard > > On 26 Mar 2019, at 14:33, Gary Murphy <gary@schemaapp.com> wrote: > > do we have any documentation on patterns of use for sh:details? > > I found your post at https://github.com/TopQuadrant/shacl/issues/14 that > outlines the effect and mentions docs could be coming, but > https://www.w3.org/TR/shacl/#results-detail is pretty short on details > (pardon the pun) > > and as much as I like the Playground for testing, I'd be using the java > implementation for any real work. > > On Wed, Mar 20, 2019 at 6:51 PM Holger Knublauch <holger@topquadrant.com> > wrote: > >> Yes, the WG had discussed this during the design of SHACL and decided to >> not include "nested" violations from sh:node (and similar constraint types) >> into the top-level validation report. Instead, sh:details was introduced >> and, for example, the TopBraid SHACL API (in Java) does support a flag to >> activate these details. I don't think the JavaScript-based SHACL playground >> has this option. >> >> Holger >> >> >> On 21/03/2019 2:48 am, Gary Murphy wrote: >> >> using nested NodeShapes called in with sh:node gives a result that is >> very close, but lacks clarity in the report: >> >> Given our old friend Bob: >> ex:Bob >> a schema:Person ; >> schema:givenName "Robert" ; >> schema:familyName "Junior" ; >> schema:birthDate "1971-07-07x"^^xsd:string ; >> schema:deathDate "1968-09-10"^^xsd:date ; >> >> and the shacl rules >> schema:DateTimeNodeShape >> a sh:NodeShape ; >> sh:or ( >> [ sh:datatype xsd:dateTime ] >> [ sh:datatype xsd:date ] >> [ >> sh:datatype xsd:string ; >> sh:pattern >> "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}[0-9+Z-]*)?$" ; >> ] >> ) ; >> sh:name "dateTime" ; >> sh:message "date must be xsd:date, xsd:dateTime or xsd:string in ISO >> format, eg 2018-12-18T12:00:00.000+0500" ; >> sh:severity sh:Warning ; >> . >> >> schema:PersonShape >> a sh:NodeShape ; >> sh:targetClass schema:Person ; >> sh:property [ >> sh:path schema:birthDate ; >> sh:node schema:DateTimeNodeShape ; >> sh:lessThan schema:deathDate ; >> sh:maxCount 1 ; >> ] ; >> . >> >> A violation of sh:Warning in the DateTimeNodeShape and it's sh:message >> are ignored, and the UI would receive the unhelpful report >> >> [ >> a sh:ValidationResult ; >> sh:resultSeverity sh:Violation ; >> sh:sourceConstraintComponent sh:NodeConstraintComponent ; >> sh:sourceShape _:n396 ; >> sh:focusNode <http://example.org/ns#Bob> ; >> sh:value "1971-07-07x" ; >> sh:resultPath schema:birthDate ; >> sh:resultMessage "Value does not have shape schema:DateTimeNodeShape" ; >> ] . >> >> ps -- thanks for spotting the +-Z slip in the regex; my datasets never >> crossed this, but clearly +Z- is what was meant ;) >> >> On Wed, Mar 20, 2019 at 11:43 AM Gary Murphy <gary@schemaapp.com> wrote: >> >>> Thanks -- I think NodeShape is probably what I'm needing as this allows >>> segmenting the sh:message apart from the rest of the rules, and for >>> UI-building purposes, avoids duplicate sh:property blocks >>> >>> On Tue, Mar 19, 2019 at 8:51 PM Irene Polikoff <irene@topquadrant.com> >>> wrote: >>> >>>> A PropertyShape must have sh:path - see >>>> https://www.w3.org/TR/shacl/#property-shapes >>>> >>>> If there is no {myshape:DateShape sh:path ?something} triple, you have >>>> an invalid shapes graph. >>>> >>>> You could create a node shape defining conditions on the value. Then, >>>> use it like this: >>>> >>>> myshape:PersonShape a sh:NodeShape ; >>>> sh:property [ >>>> sh:path ex:birthDate ; >>>> sh:node myshape:DateShape; >>>> sh:lessThan ex:deathDate ; >>>> sh:message "Birth date must be before death date unless time >>>> travel is possible” .} >>>> >>>> In this example, myshape:DateShape is a node shape. For example: >>>> >>>> myshape:DateShape a sh:NodeShape ; >>>> sh:datatype xsd:string ; >>>> >>>> sh:pattern "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[0-9.+-Z]*$”. >>>> >>>> >>>> You can also use sh:or in the node shape, but your syntax is incorrect. >>>> It would be something like >>>> >>>> myshape:DateShape a sh:NodeShape ; >>>> sh:or ( >>>> [ >>>> sh:datatype xsd:dateTime; >>>> ] >>>> [ >>>> sh:datatype xsd:string ; >>>> >>>> sh:pattern "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[0-9.+-Z]*$”; >>>> ] >>>> ) . >>>> >>>> Although, I think your sh:pattern value may have some syntax issues as >>>> well. >>>> >>>> >>>> On Mar 19, 2019, at 2:17 PM, Gary Murphy <gary@schemaapp.com> wrote: >>>> >>>> Seeking some guidance with a frequent pattern: I have several >>>> properties which are all constrained to xsd:dateTime or xsd:string with a >>>> regex for ISO dates, but each of these properties also has other >>>> constraints such as maxCount = 1 >>>> >>>> So for a familiar example, in Person, for birthDate, I have these >>>> alternatives in sh:or clauses, plus I have the maxCount and the sh:lessThan >>>> deathDate rules, but when the data value is the wrong type, the violation >>>> takes the sh:message for the entire test, reporting only that the >>>> sh:OrConstraintComponent was violated and then a second violation for >>>> sh:LessThanConstraintComponent. >>>> >>>> I can of course split these into successive sh:property rules for the >>>> same sh:path and each with it's own sh:message, but the same datatype >>>> constraints apply also to deathDate and every other date value in my >>>> graph. I'd far prefer to define the rules for all date-like paths in one >>>> place. >>>> >>>> Is it possible to define a generic "value shape" where the rules are >>>> applied to the current path rather than to a path defined in the shape >>>> itself? >>>> >>>> something like >>>> >>>> myshape:DateShape a sh:PropertyShape ; >>>> [ sh:datatype xsd:dateTime ] >>>> [ sh:datatype xsd:date ] >>>> [ sh:datatype xsd:string ; >>>> sh:pattern >>>> "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[0-9.+-Z]*$" ; >>>> ] >>>> ) ; >>>> sh:name "dateTime" ; >>>> gist:start "2017-12-18T17:00:00Z"^^xsd:dateTime ; >>>> sh:message "Date must be xsd:date xsd:dateTime or string in ISO >>>> format, eg 2018-12-18T12:00:00.000+0500" . >>>> >>>> myshape:PersonShape a sh:NodeShape ; >>>> sh:property [ >>>> sh:path ex:birthDate ; >>>> sh:??? myshape:DateShape ; # can this be done? >>>> sh:lessThan ex:deathDate ; >>>> sh:message "Birth date must be before death date unless time >>>> travel is possible" . >>>> >>>> Is there any mechanism in shacl to apply a path-agnostic shape? >>>> -- >>>> Gary Lawrence Murphy <gary@schemaapp.com> - Hunch Manifest, 15 Wyndham >>>> N 'C', Guelph >>>> >>>> >>>> >>> >>> -- >>> Gary Lawrence Murphy <gary@schemaapp.com> - Hunch Manifest, 15 Wyndham >>> N 'C', Guelph >>> >> >> >> -- >> Gary Lawrence Murphy <gary@schemaapp.com> - Hunch Manifest, 15 Wyndham N >> 'C', Guelph >> >> > > -- > Gary Lawrence Murphy <gary@schemaapp.com> - Hunch Manifest, 15 Wyndham N > 'C', Guelph > > -- Gary Lawrence Murphy <gary@schemaapp.com> - Hunch Manifest, 15 Wyndham N 'C', Guelph
Received on Wednesday, 10 April 2019 16:12:54 UTC