- From: Arthur Ryman <arthur.ryman@gmail.com>
- Date: Thu, 5 Nov 2015 12:11:05 -0500
- To: Jose Emilio Labra Gayo <jelabra@gmail.com>
- Cc: Holger Knublauch <holger@topquadrant.com>, RDF Data Shapes Working Group <public-data-shapes-wg@w3.org>
Jose, My reading of the spec is that sh:hasValue is an existential qualifier. The graph MUST have one triple that has the value. Therefore the graph would be invalid if your optional property was missing. I believe you can express your constraint by saying: 1. maxCount is 1 2. use a qualified cardinality constraint with maxCount 1 for the desired value -- Arthur On Thu, Nov 5, 2015 at 3:45 AM, Jose Emilio Labra Gayo <jelabra@gmail.com> wrote: > 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 17:11:36 UTC