- From: Gary Murphy <gary@schemaapp.com>
- Date: Fri, 20 Sep 2019 15:46:04 -0400
- To: Irene Polikoff <irene@topquadrant.com>
- Cc: public-shacl@w3.org
- Message-ID: <CADnyxpvTv31J+utHw2f3pNh0nDp3S1QPZ4R+HoGDpERiUB-F-A@mail.gmail.com>
Thanks for the clarification (and correction) I may still be a bit lost, I'm thinking the basic shacl structure would be :OrganizationShape a sh:NodeShape ; sh:property [ sh:path ( sh:inversePath rdf:type schema:contactType ); sh:datatype xsd:string ; sh:minCount 1 ; ] ; sh:targetNode :Organization . it seems to be working ;) On Fri, Sep 20, 2019 at 3:25 PM Irene Polikoff <irene@topquadrant.com> wrote: > I think I made a typo. > > I meant to say: > > Use sh:targetNode :Organization > > Then, for all property shapes use a path with inverse of rdf:type e.g. > > ^rdf:type/schema:sameAs > > To constrain values of schema:sameAs for organizations. > > Since you are looking specifically for a triple {?s rdf:type > :Organization} you are not constraining values for members of subclasses. > > On Sep 20, 2019, at 3:07 PM, Gary Murphy <gary@schemaapp.com> wrote: > > It's been a while since I had the chance to try this -- your Option 2 > using an inverse path does seem my best choice as { ?s rdf:type > :Organization } is exactly the constraint I need and I thought I'd > understood the method, but I'm still having trouble phrasing > sh:targetObjectsOf to constrain to just that one rdf:type value. > > On Fri, Sep 6, 2019 at 12:02 PM Gary Murphy <gary@schemaapp.com> wrote: > >> oh yes, much better. thank you! >> >> On Fri, Sep 6, 2019 at 11:06 AM Irene Polikoff <irene@topquadrant.com> >> wrote: >> >>> When a property shape is targeting class members, it applies to all >>> class members including those that are members of subclasses. >>> >>> Deactivating, de-activates the shape for all targets. There is no way to >>> keep it active for some and deactivate it for others. >>> >>> When different behavior is needed for different classes that have a >>> common parent, I could think of the following options: >>> >>> 1. Target at the lowest level of the class hierarchy that would work for >>> your purposes >>> >>> 2. Do not use class target (implicit of explicit). Instead use >>> sh:targetObjectOf on the inverse of the rdf:type property >>> >>> This may be the most appropriate solution in your situation. It would >>> target only resources that are subjects in the {?s rdf:type :Organization} >>> triples. Instances of subclasses would not be targeted. >>> >>> 3. Various other modeling options >>> >>> Such as creating “view Or abstract classes” for the purpose of >>> targeting only >>> >>> e.g. >>> >>> Organization >>> NonProfit Organization >>> Government Organization >>> Commercial Organization >>> Local Business >>> >>> Create a class >>> >>> Non-Commercial Organization >>> >>> Make NonProfit Organization and Government Organization its subclasses. >>> This could be done in addition to them being subclasses of Organization so >>> that Non-Commercial Organization is not part of the above hierarchy. >>> >>> Now, you could target Non-Commercial Organization. >>> >>> This is a variant on what Jakub’s proposed using SPARQL target approach. >>> >>> On Sep 6, 2019, at 10:33 AM, Gary Murphy <gary@schemaapp.com> wrote: >>> >>> Well that's the problem, the constraints don't always say the same >>> thing, or may have different sh:severity, or may be contingent on other >>> properties of the sub-class item or inverse paths; if there's no mechanism, >>> then of course there has to be a work-around, which may be to >>> programmatically sift the received shacl results to select out those >>> pertaining to the actual instance class before displaying them. >>> >>> I had hoped it may be possible to limit the scope of sh:deactivated in >>> some way, so in the sub-class, a rule could implicate the ancestor shape by >>> name, deactivate it, and then provide it's own class-specific test, but >>> then again, when the shacl engine encountered the parent rule, how could it >>> know? I'm thinking Jakub's method of excluding the subClass in the >>> ancestor rule may be the best option. >>> >>> >>> On Thu, Sep 5, 2019 at 3:10 PM Irene Polikoff <irene@topquadrant.com> >>> wrote: >>> >>>> Since LocalBusiness is a subclass of Organization, you do not need to >>>> repeat the constraint for it. >>>> >>>> It is already in place. There is no override since the constraints say >>>> the same thing. It is just unnecessary repetition. >>>> >>>> On Sep 5, 2019, at 2:32 PM, Gary Murphy <gary@schemaapp.com> wrote: >>>> >>>> >>>> Is it possible to specifically override a rule when applied to a >>>> subclass? >>>> >>>> I have >>>> schema:LocalBusiness rdfs:subClassOf schema:Organization >>>> >>>> and in the shapes rules for both I have >>>> sh:path schema:sameAs ; >>>> sh:minCount 1 ; >>>> >>>> and each has a message, but the message is (slightly) different; when I >>>> validate the file, I get both rules reporting, so there are two messages, >>>> one for Organization, one for LocalBusiness >>>> >>>> Is there a general pattern for avoiding this? I'd like to override the >>>> Organization rule rather than see both. >>>> >>>> -- >>>> 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 Friday, 20 September 2019 19:46:40 UTC