On 11/05/2020 16:27, Chris Tomlinson wrote:
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.

sh:conforms  true ;

will only appear if there are no violations.


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

A small illustration would help ...


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>?

jena-shacl is part of the Jena project.

TopQuadrant/shacl is built using Jena - it is an independent project.

    Andy


Thanks,
Chris




Reply via email to