- From: Gary Murphy <gary@schemaapp.com>
- Date: Tue, 19 Mar 2019 15:13:54 -0400
- To: public-shacl@w3.org
- Message-ID: <CADnyxpt1c0fitJ5HEga7iOLJ-nFo=6+qn=Ps0StOyw9RfNHejQ@mail.gmail.com>
Second promising idea: if I had a shacl function that took the path as the
parameter and applied the constraint rules, how would it trigger the
specified violation and it's message?
On Tue, Mar 19, 2019 at 2:40 PM Gary Murphy <gary@schemaapp.com> wrote:
> just for fun I tried
>
> hmshape:DateTimeShape
> a sh:PropertyShape ;
> sh:or (
> [ sh:path ex:date ]
> [ sh:path ex:birthDate ]
> [ sh:path ex:deathDate ]
> );
> ...
>
> seemed promising, but no, doesn't work ;)
>
>
> On Tue, 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
Received on Tuesday, 19 March 2019 19:14:29 UTC