Darn it!!

When I use the correct parameter name it “works":

curl -s GET http://ldspdi-dev.bdrc.io/shapes/core/PersonShapes | curl -XPOST 
--data-binary @-  --header 'Content-type: text/turtle' 
'http://host:port/fuseki/newcorerw/shacl?graph=http://purl.bdrc.io/graph/P707’

I just am not getting over seeing sh:conforms true when it seems like a third 
result should be present.

I think I don’t get how to properly think of shacl validation.

Anyway sorry to bother ,
Chris


> On May 11, 2020, at 10:19 AM, Chris Tomlinson <[email protected]> 
> wrote:
> 
> Hi Andy,
> 
>> On May 10, 2020, at 2:53 PM, Andy Seaborne <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> On 08/05/2020 21:34, Chris Tomlinson wrote:
>> 
>>> 2) In any event, when I call the endpoint like:
>>> curl -s GET http://ldspdi-dev.bdrc.io/shapes/core/PersonShapes 
>>> <http://ldspdi-dev.bdrc.io/shapes/core/PersonShapes> | curl -XPOST 
>>> --data-binary @-  --header 'Content-type: text/turtle' 
>>> 'http://ahost:aport/fuseki/newcorerw/shacl?http://purl.bdrc.io/graph/P707 
>>> <http://ahost:aport/fuseki/newcorerw/shacl?http://purl.bdrc.io/graph/P707>'
>> 
>> Maybe it's email corruption but that isn't the invocation syntax.
>> 
>> That should have ?graph=
>> 
>> Otherwise it defaults to "?graph=default" which seems consistent with the 
>> report.
>> 
>> "?http://purl.bdrc.io/graph/P707 <http://purl.bdrc.io/graph/P707>" is going 
>> to be ignored and for you that's the union default graph.
> 
> I’ve tried adding query= parameter and it doesn’t make any difference:
> 
> curl -s GET http://ldspdi-dev.bdrc.io/shapes/core/PersonShapes 
> <http://ldspdi-dev.bdrc.io/shapes/core/PersonShapes> | curl -XPOST 
> --data-binary @-  --header 'Content-type: text/turtle' 
> 'http://host:port/fuseki/newcorerw/shacl?query=http://purl.bdrc.io/graph/P707 
> <http://host:port/fuseki/newcorerw/shacl?query=http://purl.bdrc.io/graph/P707>'
> 
> I get the same results as I reported. When using PersonShapes I see:
> 
> [ a            sh:ValidationReport ;
>   sh:conforms  false ;
>   sh:result    [ a                             sh:ValidationResult ;
>                  sh:focusNode                  bdr:UNKNOWN_Person ;
>                  sh:resultMessage              "minCount[1]: Invalid 
> cardinality: expected min 1: Got count = 0" ;
>                  sh:resultPath                 bdo:personName ;
>                  sh:resultSeverity             sh:Violation ;
>                  sh:sourceConstraintComponent  sh:MinCountConstraintComponent 
> ;
>                  sh:sourceShape                bds:PersonShape-personName
>                ]
> ] .
> 
> Regardless of whether a Person graph (P707), Work graph (W1FPL1), or no graph 
> (NO_GRAPH) is used.
> 
> When using WorkShapes everything reports sh:conforms true ;.
> 
> I have written small test cases using the jena-shacl libs that fetch the 
> above shapes and target graphs and they produce expected validation results. 
> 
> To fully conform some elements of the dataset union graph are needed which is 
> why I’m investigating the shacl endpoint as a way of performing validation of 
>  single graph in the context of the entire dataset.
> 
> 
>>> Is there any way to tell whether the shapes graph in some sense doesn’t 
>>> apply to the data graph? This seems like an important distinction.
>> 
>> You can add a constraint that is always triggered.
>> 
>> [] sh:targetNode ex:myNode
>> 
>> is always triggered; it does not require ex:myNode to be in the data.
>> 
>> From there, a SPARQL constraint could do any validations for "right graph", 
>> "empty graph" etc.
> 
> Thanks for the pointer. I’ll explore this idea once I get more understanding.
> 
> Also, what is the relationship of jena-shacl to TopBraid SHACL API 
> <https://github.com/TopQuadrant/shacl>?
> 
> Thanks,
> Chris
> 
> 

Reply via email to