Re: Required parameters of SPARQL-based Constraint Components

Hi Holger,

This is an excellent solution, thank you!

I did realize the spec did not specify this as an error. Now with your
solution, I can produce warnings to make sure the custom components are
properly used - otherwise there is no feedback to the user, as if the data
successfully passed the constraint.

Thanks!
Jakub

On Tue, Oct 3, 2017 at 11:40 PM, Holger Knublauch <holger@topquadrant.com>
wrote:

> Hi Jakub,
>
> what you describe can be generalized to SHACL shapes graph validation,
> i.e. applying SHACL to itself. Constraint component declarations are in
> RDF, so we have all data available for what you need. sh:parameter
> declarations by default do not test for non-optional values, because the
> spec doesn't define this as an error. So that needs to be implemented as an
> additional, explicit check.
>
> I have implemented this as an exercise, using SHACL-SPARQL. The basic
> query is
>
> SELECT $this ?otherPath ?path
> WHERE {
>     {
>         ?cc a sh:ConstraintComponent .
>         ?cc sh:parameter ?param .
>         ?param sh:path ?path .
>         FILTER NOT EXISTS { ?param sh:optional true } .
>         FILTER isIRI(?path) .
>     }
>     $this ?path ?anyValue .
>     ?cc sh:parameter ?otherParam .
>     ?otherParam sh:path ?otherPath .
>     FILTER (?otherParam != ?param && isIRI(?otherPath)) .
>     FILTER NOT EXISTS { $this ?otherParam ?anyOther } .
> }
>
> If you include this shape into the data graph (which is your shapes graph)
> then it will report the error, e.g. in TopBraid Composer as
>
>
>
> (This was a rather quick attempt, I hope there are not too many errors in
> the SPARQL query).
>
> And yes, it may be possible to use something like dash:coExistsWith (
> http://datashapes.org/constraints.html#CoExistsWithConstraintComponent)
> but then you'd need to repeat this for every constraint component, while
> the solution above applies to all shapes in your graph, and all components.
>
> HTH
> Holger
>
>
>
> On 4/10/2017 12:09, Jakub Moskal wrote:
>
> I defined a SPARQL-based component with two parameters, neither of which
> is optional. When I use this component in a shape but provide only one
> parameter, the shape is simply ignored by the ​SHACL ​API​ (
> https://github.com/TopQuadrant/shacl)​. It only works when I provide both
> required parameters.
>
> Is there any mechanism to create a warning ​when a shape definition
> lack​s​​​ a required parameter? I tried using DASH dash:coExistsWith​ in a
> definition of the component parameters​, but it didn't change anything.
>
> Thanks,
> Jakub​
>
>
>

Received on Wednesday, 4 October 2017 20:31:28 UTC