Hi Andy,

Thanks for the reply. I'll try again tomorrow with the clarification regarding 
?graph= which is in the doc but not the examples and I didn't read the doc 
above the examples closely.

Chris

> On May 10, 2020, at 14:53, Andy Seaborne <[email protected]> wrote:
> 
> 
> 
>> On 08/05/2020 21:34, Chris Tomlinson wrote:
>> Hello,
>> I’ve enabled a shacl endpoint as described in Apache Jena Shacl 
>> <https://jena.apache.org/documentation/shacl/> and have some questions.
>> Our objective in using the endpoint is to be able to validate a given 
>> resource graph in the tdb:unionDefaultGraph against a given shapes graph.
>> 1) I added:
>>     fuseki:endpoint  [ fuseki:operation fuseki:shacl ; fuseki:name "shacl" ] 
>> ;
>> to the Fuseki assembler file for a dataset and restarted, and it is 
>> reachable.
>> One observation is that using the above “new style” endpoint declaration 
>> apparently can be replaced by:
>>     fuseki:serviceShacl          "shacl" ;
>> I’m not sure about this but the comment in the doc:
>>> This is not installed into a dataset setup by default; a configuration file 
>>> using fuseki:serviceShacl is necessary
>> seems to suggest it sort of.
> 
> That wasn't intended - I'll fix the documentation.
> 
> The limitation is that fuseki:serviceQuery etc require fixed names to known 
> to the configuration engine which is in fuseki-core.
> 
> Extension operations (new operations can be added to Fuseki) use the new 
> style where the predicate is fuseki:operation. In fact, for SHACL, it can be 
> added quite simply because it comes from Jena itself but the code seems to 
> say that the old-style isn't enabled.
> 
> 
>> 2) In any event, when I call the endpoint like:
>> curl -s GET 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'
> 
> 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"; is going to be ignored and for you that's 
> the union default graph.
> 
> 
>> I see a result like:
>> [ 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
>>                ]
>> ] .
>> which is surprising given that there’s no reference in the graph 
>> http://purl.bdrc.io/graph/P707 <http://purl.bdrc.io/graph/P707>  that refers 
>> eventually to bdr:UNKNOWN_Person. The P707 graph is a Person graph. I’ve 
>> also tried using an encoded url, http%3a%2f%2fpurl.bdrc.io%2fgraph%2fP707, 
>> but that makes no difference.
>> In fact, using a non-Person graph like http://purl.bdrc.io/graph/W12827 
>> <http://purl.bdrc.io/graph/W12827> produces the same result. As does, 
>> submitting a non-existent graph URL like http://no.such.org/flip/flop 
>> <http://no.such.org/flip/flop>.
> 
> See above.
> 
>> This all leads me to conclude that SHACL-Validation#L61 
>> <https://github.com/apache/jena/blob/ab7882a73445c7a75e811eb58d06211c410891b0/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/servlets/SHACL_Validation.java#L61>
>>  isn’t getting in a way that I understand.
>> I haven’t found any logging that gives any helpful entries and so I’m asking 
>> questions rather than diving deeper for now.
>> If I use another shape graph like 
>> http://ldspdi-dev.bdrc.io/shapes/core/WorkShapes 
>> <http://ldspdi-dev.bdrc.io/shapes/core/WorkShapes>, then I get a result like:
>> [ a            sh:ValidationReport ;
>>   sh:conforms  true
>> ] .
>> again regardless of the graph argument.
>> I don’t understand the results.
>> 3) This result leads to a related question. It seems that a result of:
>>     sh:conforms  true
>> means that the data graph conforms to the shapes graph in all respects where 
>> the shapes graph picks out features in the data graph, even if the shapes 
>> graph picks out nothing at all in the data graph.
> 
> Yes - that a SHACL-ism.
> 
> An empty graph or graph with no targets is "conforms true".
> 
>> 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.
> 
>> I appreciate any help on these questions,
>> Chris
> 
>    Andy

Reply via email to