- From: Gary Murphy <gary@schemaapp.com>
- Date: Fri, 20 Sep 2019 15:07:34 -0400
- To: Irene Polikoff <irene@topquadrant.com>
- Cc: public-shacl@w3.org
- Message-ID: <CADnyxpteN=ahx=atYc4-8JCJ5R4uzg0FVt_3ZbJpCxugsGcJbQ@mail.gmail.com>
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
Received on Friday, 20 September 2019 19:08:09 UTC