On 13/08/2019 06:31, Lorenz Buehmann wrote:
The rules in Jena are not meant to be constraints. there are constraint
language for RDF like SHACL, SHEX - there is(was?) as SHACL API from
TopQuadrant [1] but even better, Andy has implemented something in that
direction quite recently [2]. I'm sure he can tell you more about the
current status and whether it is appropriate for your use case.

Yes, that's a goal. But not in the first release and the use case here of "not a DAG" is interestingly special.

Initial, the functionality is:

1/ Command line - "shacl validate" and "shacl parse"
2/ Fuseki validation service - send shapes, get back report on a specific graph 3/ API - for a single graph, execute constraints on a transaction and abort on shape violation.

There are no substantive extensions to SHACL core and SPARQL. We can build up a library of extensions if there are constraints that are better in java, close to the data, then if they form common needs, we can add those (contributions welcome!)

And there ought to be a documented a way to load custom ones - you can do it with the Jena initialization jar loading but there's no documentation.

For your example:

A/ You want a dataset as target - thoughts on that in [2] (it isn't implemented). Feature 3 is only one graph at this stage.

B/ The validator will need to be a SPARQL one, its not in the SHACL core set of operations.

    Andy

[1] https://github.com/TopQuadrant/shacl

[2] https://afs.github.io/shacl-datasets.html

On 13.08.19 05:09, Jeff Lerman wrote:
Is there any way, with Jena (either the distributed version or via any
additional software anyone is aware of) to implement enforcement of
constraints on assertions, at the time of assertion?

In particular, it’d be very helpful to be able to protect the graph(s) from
any assertion that breaks the assumption (in RDFS and OWL reasoners) that
rtfs:subClassOf “edges” form a directed acyclic graph.  Ideally, an UPDATE
(or other operation adding content to the store) would fail if that rule
(and maybe a small collection of similarly “basic” rules) would be violated
by storing the updated data.  For example, this would fail with an error:

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX local: <http://localhost:8080/fuseki/jcl_test/data/>

INSERT DATA {
   GRAPH local:notadag {
     <c> rdfs:subClassOf <d> .
     <d> rdfs:subClassOf <c> .
   }
}


Thanks,
—Jeff



[image: email_sig_logo_vert.png]

Jeff Lerman

AI Scientist

Mobile: 510-495-4621

www.invitae.com

[image: email_sig_social_linkedin.png]
<https://www.linkedin.com/in/jefflerman/>


Reply via email to