- 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