W3C home > Mailing lists > Public > public-shacl@w3.org > September 2018

Re: A question on sh:xone and sh:targetObjectsOf

From: Gary Murphy <gary@schemaapp.com>
Date: Mon, 10 Sep 2018 10:15:58 -0400
Message-ID: <CADnyxpsRKHozQBgeONUn6m0j3YJWCMUsiRDMXoPY-1gY1LYfhA@mail.gmail.com>
To: Holger Knublauch <holger@topquadrant.com>
Cc: public-shacl@w3.org
Thanks for that tip, and I'm a bit disappointed by xor, it had so nearly
worked ;)  I think I entered it by mistake while editing xone and when it
nearly gave nearly the results I expected, I just went with it (even
thought, logically, it's function was already covered by xone)

But inversePath did solve the issue within an xone:

sh:property [
        sh:xone (
            [ sh:path [ sh:inversePath schema:review ];
              sh:minCount 1; ]
            [ sh:path schema:itemReviewed ;
              sh:minCount 1 ] );
        sh:severity sh:Error ;
        ] .

seems to do what I need!

On Fri, Sep 7, 2018 at 9:02 PM Holger Knublauch <holger@topquadrant.com>
wrote:

> Hi Gary,
>
> there is no sh:xor in SHACL, so we can remove that from the discussion. If
> you had results with this then sh:xor didn't have any effect to the
> validation.
>
> Also you seem to want to use sh:targetXY statements as a validation
> condition. If I understand what you are trying to express as "not used as a
> value of schema:review" then
>
>     sh:not [ sh:targetObjectsOf schema:review ] ;
> needs to be rewritten using sh:max/minCount, maybe
>
>     sh:property [
>         sh:path [ sh:inversePath schema:review ] ;
>         sh:maxCount 1;
>     ] ;
> The above would walk schema:review "backwards" starting at the focus node
> (instance of AggregateRating).
>
> Maybe this informs your next steps?
>
> Holger
>
>
>
> On 8/09/2018 6:00 AM, Gary Murphy wrote:
>
> 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
>
>
>    1. 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
>
> --
*Gary Murphy*
Developer, Schema App
e: gary@schemaapp.com <martha@schemaapp.com>
w: https://www.schemaapp.com
Received on Monday, 10 September 2018 14:16:34 UTC

This archive was generated by hypermail 2.3.1 : Monday, 10 September 2018 14:16:35 UTC