- From: Gary Murphy <gary@schemaapp.com>
- Date: Fri, 7 Sep 2018 16:00:05 -0400
- To: "public-shacl@w3.org" <public-shacl@w3.org>
- Message-ID: <CADnyxpv9SuEzVZqgtc3kH5SYzxRQvM1Ymj3BqbnSymJkG97buQ@mail.gmail.com>
I have a novice question about setting alternatives in a NodeShape using sh:xone, sh:xor and sh:or I need to evaluate a property of the targetClass such that, if the node is targetObjectsOf a property in another node, then a particular property should not be defined, but if not, then it is -- this pattern occurs several times in schema.org validation rules. So for example, here was my naive attempt using sh:xone but also with sh:xor and sh:or ... hmshape:AggregateRatingShape a sh:NodeShape ; sh:targetClass schema:AggregateRating ; sh:property [ sh:xone ( [ sh:not [ sh:targetObjectsOf schema:review ] ; sh:path schema:itemReviewed ; sh:minCount 1 ; sh:severity sh:Error ; ] [ sh:targetObjectsOf schema:review ; sh:path schema:itemReviewed ; sh:maxCount 0 ; sh:severity sh:Warning ; ] ) ; ] ; . and my graph: @prefix ex: <http://example.org/ns#> . @prefix schema: <http://schema.org/> . ex:Bob a schema:Person ; schema:review ex:BobsAggregateRating ; .. ex:BobsAggregateRating a schema:AggregateRating ; schema:itemReviewed ex:Bob ; .. 1. When I take the schema:itemReviewed only out of BobsAggregateRating, the validations passes for all three xone/xor/or, which is correct. 2. When I take the schema:review only out of Bob, I get sh:sourceConstraintComponent sh:XoneConstraintComponent although I expect it to be valid by the first clause; when I use sh:xor it works as expected and there is no violation 3. When I take out both properties, the validation passes with all of sh:xone, sh:xor, and sh:or, although I expect a violation for the missing schema:itemReviewed as per the first clause 4. When I leave them both in, I get two violations, one sh:MaxCountConstraintComponent warning because of the second clause, and, with sh:xone or sh:or, I get one generic sh:Violation because none of clauses fit, which is perhaps expected since sh:xone/sh:or only need one failure to satisfy, but when I use sh:xor, I just get the one sh:MaxCountContraintComponent warning. Because of (1) and (4) it appears the (sh:not) sh:targetObjectOf is working as a selector for each rule, but why do the other two cases fail with sh:xone? I am testing this using the shacl.org/playground; I also tried this same pattern using sh:or with the same results. What am I missing here? Is this an appropriate use of sh:xone/sh:xor/sh:or and/or sh:targetObjectOf? sh:xor gets me three out of the four cases as expected, but why would it fail (3)? Any and all guidance is most welcome :) -- *Gary Murphy* Developer, Schema App e: gary@schemaapp.com <martha@schemaapp.com> w: https://www.schemaapp.com
Received on Friday, 7 September 2018 20:09:33 UTC