Jeff, re. constraint validation during update -- it's not something I've tried, but I think it should be doable depending on whether your constraint can solely run on the request body, or does it need to check against the state of the whole DB. In the first case it might be possible to implement a server filter or a JAX-RS ContainerRequestFilter for example that executes the constraint. In the second case you probably need SPIN or SHACL constraint support in the triplestore itself. I think Dydra (https://dydra.com) supports it.
I think it would be easier to validate if your request would contain an RDF graph and not a SPARQL INSERT DATA command. I think the end result would be the same? That was my use case -- validating RDF data incoming through the Linked Data API. Here's a filter for JAX-RS: https://github.com/AtomGraph/Processor/blob/master/src/main/java/com/atomgraph/server/io/ValidatingModelProvider.java Hope it helps. On Tue, Aug 13, 2019 at 7:55 PM Jeff Lerman <[email protected]> wrote: > > Thanks all. To acknowledge some points: > > 1. Yes, OWL rules per se aren’t meant as constraints. Nonetheless, > constraints against a graph can be useful, and enforcement at > assertion-time for some (sub)set of those can also be useful. > > 2. Notwithstanding the fact that it’s valid (and even useful, to > effectively assert equivalence) under OWL to assert a non-DAG over > :subClassOf edges (the shorthand I’ll use to discuss triples with > :subClassOf as the predicate), it can certainly be useful to disallow that > for some graphs. > > Martynas, thank you - https://github.com/spinrdf/spinrdf looks promising! > I’m reading the docs now. Can you comment on whether it can be set up to > automatically run a rule at the time of SPARQL UPDATE, and reject the > update if the rule would be violated by it? > > 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/> > > > On Tue, Aug 13, 2019 at 8:08 AM Martynas Jusevičius <[email protected]> > wrote: > > > You could also SPARQL as SPIN constraints: > > https://www.w3.org/Submission/spin-modeling/#spin-constraints > > > > Can be implemented using SPIN API: https://github.com/spinrdf/spinrdf > > > > On Tue, Aug 13, 2019 at 4:07 PM Andy Seaborne <[email protected]> wrote: > > > > > > > > > > > > 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/> > > > >> > > > > > >
