- From: Irene Polikoff <irene@topquadrant.com>
- Date: Fri, 6 Sep 2019 11:06:39 -0400
- To: Gary Murphy <gary@schemaapp.com>
- Cc: public-shacl@w3.org
- Message-Id: <5E327437-3C96-4A81-9B27-038BBA748C59@topquadrant.com>
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 <mailto: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 <mailto: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 <mailto:gary@schemaapp.com>> - Hunch Manifest, 15 Wyndham N 'C', Guelph > > > -- > Gary Lawrence Murphy <gary@schemaapp.com <mailto:gary@schemaapp.com>> - Hunch Manifest, 15 Wyndham N 'C', Guelph
Received on Friday, 6 September 2019 15:06:55 UTC