Re: Interaction between minCount and hasValue

Thanks, however, although the previous example can be defined using
filterShape, the question remains about what is the expected behaviour of a
SHACL processor that encounters "sh:minCount 0" and "sh:hasValue" at the
same time.

For example, if we have:

:UserShape
   a sh:Shape ;
    sh:property [
        sh:predicate :role ;
        sh:hasValue :User ;
        sh:minCount 0 ;
        sh:maxCount 1 ;
    ]    .

:u1 sh:nodeShape :UserShape ; :role :User .
:u2 sh:nodeShape :UserShape.

What should a SHACL processor do?

1.- Validate the graph because both :u1 and :u2 satisfy the :UserShape
constraints
2.- Complain that :u2 doesn't satisfy the sh:hasValue constraint
3.- Raise an error because the :UserShape is not well formed

Best regards, Jose Labra

On Thu, Nov 5, 2015 at 6:55 AM, Holger Knublauch <holger@topquadrant.com>
wrote:

> Hi Jose,
>
> I think you can use a sh:filterShape to limit when your constraint applies.
>
> Untested:
>
> :UserShape
>    a sh:Shape ;
>     sh:property [
>         sh:predicate :role ;
>         sh:hasValue :User ;
>         sh:filterShape [
>             sh:property [
>                 sh:predicate :role ;
>                 sh:minCount 1 ;
>             ] ;
>         ]
>     ]    .
>
> The intention of the above is to say that the hasValue constraint only
> applies to instances where :role has at least one value.
>
> Holger
>
>
>
> On 11/5/2015 15:47, Jose Emilio Labra Gayo wrote:
>
> I would like to model optional properties which can appear or not, but in
> case that they appear have a fixed value.
>
> For example, in ShEx, I can define the following shape:
>
> <UserShape> {
>    rdfs:label xsd:string,
>    ex:role ex:User ?
> }
>
> where ex:role is an optional property with a fixed value. If it appears,
> it must be ex:User.
>
> My first thought is that the previous example could be represented in
> Shacl as:
>
> :UserShape
>    a sh:Shape ;
>    sh:property [
>         sh:predicate rdfs:label ;
>         sh:datatype xsd:string ;
>         sh:minCount 1 ;
>         sh:maxCount 1 ;
>     ] ;
>     sh:property [
>         sh:predicate :role ;
>         sh:hasValue :User ;
>         sh:minCount 0 ;
>         sh:maxCount 1 ;
>     ]    .
>
> However,reading the spec, I am not sure about the interaction between
> sh:minCount and sh:hasValue.
>
> It appears that if we include sh:minCount 0, the spec says: "If the value
> is 0 then this constraint is always satisfied and so may be omitted."
>
> However, the definition of sh:hasValue says: "A validation result must be
> produced if there is no triple that has the focus node as its subject,
> the sh:predicate as its predicate and the sh:hasValue as its object." and
> the SPARQL query seems to raise an error in that case, which means that the
> following instance data woud not be valid:
>
> :user1 rdfs:label "Student 2" .
>
> Is is possible to combine optional properties with fixed values as in the
> previous example or is there another way to define it?
>
> --
> -- Jose Labra
>
>
>


-- 
-- Jose Labra

Received on Thursday, 5 November 2015 08:46:34 UTC