One option is to look at the DatasetGraphMonitor class which provides a
for wrapping another dataset (e.g. a TDB one) and then responding to
changes e.g. by validating constraints.  Bear in mind that this will see
each change as it arrives and you may not want to validate constraints
until an entire update has finished (since presumably you allow for
inconsistent states mid-update).  In principal this should be possible
since the monitor informs a DatasetChanges implementation which has a
start() and finish() method but this doesn't appear to get called anywhere.

A better alternative might be to implement a custom UpdateEngine and
validate constraints in the finishRequest() call since your guaranteed
that a complete update has happened at that point.  You can then throw an
error if the constraints are violated which will have the side effect or
rendering the transaction as failed and causing the updates to be
discarded. If you do this then you will need to use the ja:loadClass
mechanism to integrate into Fuseki since you will need to write some code
to wire in your custom update engine.

Rob


On 5/29/13 2:12 PM, "Matías Parodi" <mparodil...@gmail.com> wrote:

>Hello,
>
>Thanks for your answer. In my first email on this thread I explained what
>I
>was trying to achieve:
>
>I'm using Jena rhrough Fuseki from a Ruby on Rails web app, now I want to
>add Spin to the stack so I can force some constraints on the insertions.
>What you said in your last paragraph is exactly what I want to do, and
>yes,
>the example I pasted is from Spin's distribution.
>
>Matt
>
>
>On Wed, May 29, 2013 at 6:03 PM, Rob Vesse <rve...@yarcdata.com> wrote:
>
>> The class that Fuseki needs to load can be essentially anything, however
>> when you mentioned a class with ja:loadClass all that actually happens
>>is
>> that the class is initialized I.e. it's static initializer block (if
>>any)
>> gets called.  Typically you would use the static initializer block to
>>wire
>> up things into Fuseki e.g. adding custom query engines etc.
>>
>>
>> It is unclear exactly what you are trying to do, the example you copy
>>and
>> pasted (which appears to be direct from the SPIN examples) is a command
>> line program that does a one time validation of some data against some
>> SPIN constraints.  If you use the example you gave absolutely nothing
>>will
>> happen since there is no static initializer block and the main() method
>> will never get called.
>>
>> Presumably you are wanting to integrate SPIN with Fuseki so that you can
>> continually validate SPIN constraints as new data is added to the
>>system?
>> If you can explain your goals better then you will get better answers
>>
>> Rob
>>
>> On 5/29/13 1:22 PM, "Matías Parodi" <mparodil...@gmail.com> wrote:
>>
>> >I guess this is it: http://paste.kde.org/753266/
>> >
>> >I couldn't find any real example of what to put in the class Fuseki
>>needs
>> >to load, all I found is that I can load the class using ja:loadClass
>>(btw,
>> >loadClass is not even in the vocabulary, I don't know where it's
>> >defined......)
>> >
>> >Am I supposed to compile the example I pasted above? How does fuseki
>>know
>> >when to call it? I'm confused now..
>> >
>> >Thanks.
>> >
>> >
>> >On Wed, May 29, 2013 at 12:10 PM, Martynas Jusevičius
>> ><marty...@graphity.org
>> >> wrote:
>> >
>> >> Not sure about Fuseki architecture, as I'm using JAX-RS REST layer
>> >> over Jena instead. But yeah it looks like you'll need to write some
>> >> Java code and plug it in. It could work as a request filter of some
>> >> kind.
>> >>
>> >> SPINConstraints is probably the class you need, I think an example
>> >> should be included with the API:
>> >>
>> >>
>> >>
>> 
>>http://topbraid.org/spin/api/1.2.0/spin/apidocs/org/topbraid/spin/constra
>> >>ints/SPINConstraints.html
>> >> 1.3.0 Javadoc is not online though, you would have to look in the
>> >> distribution.
>> >>
>> >> Martynas
>> >>
>> >> On Wed, May 29, 2013 at 6:01 PM, Matías Parodi
>><mparodil...@gmail.com>
>> >> wrote:
>> >> > Thank you for your answer. The Spin's distribution I downloaded
>>from
>> >>the
>> >> > link you pasted above only has Java examples, useful when your
>> >> application
>> >> > is using Jena directly. I'm using Jena through Fuseki, it's a Ruby
>>on
>> >> Rails
>> >> > app...
>> >> >
>> >> > I guess I'll have to write a class with <something> and ask Fuseki
>>to
>> >> load
>> >> > it on startup, I'm trying to find an example now.
>> >> >
>> >> >
>> >> > On Wed, May 29, 2013 at 11:44 AM, Martynas Jusevičius <
>> >> marty...@graphity.org
>> >> >> wrote:
>> >> >
>> >> >> Hey Matias,
>> >> >>
>> >> >> I'm using SPIN API in Graphity Linked Data platform. Here's an
>> >>example
>> >> >> of a SPIN-based SPARQL QueryBuilder:
>> >> >>
>> >> >>
>> >>
>> >>
>> 
>>https://github.com/Graphity/graphity-browser/blob/master/src/main/java/or
>> >>g/graphity/processor/query/QueryBuilder.java
>> >> >>
>> >> >> I'm also planning to use SPIN constraints to validate incoming RDF
>> >> input.
>> >> >>
>> >> >> You can add SPIN dependency as described here:
>> >> >> http://topbraid.org/spin/api/
>> >> >> The documentation is scarce, but you can look at the code since
>>it's
>> >> >> open-source. Constraints are handled by the SPINConstraints
>>class, as
>> >> >> far as I remember. You can also get help from Holger in the Google
>> >> >> Group:
>> >> >> https://groups.google.com/forum/?fromgroups=#!forum/topbraid-users
>> >> >>
>> >> >> Martynas
>> >> >> graphityhq.com
>> >> >>
>> >> >> On Wed, May 29, 2013 at 5:23 PM, David Jordan
>><david.jor...@sas.com>
>> >> >> wrote:
>> >> >> > I have the same interests, but don't have a commitment to
>>Pellet,
>> >>at
>> >> >> least not yet.
>> >> >> >
>> >> >> > -----Original Message-----
>> >> >> > From: Matías Parodi [mailto:mparodil...@gmail.com]
>> >> >> > Sent: Wednesday, May 29, 2013 10:17 AM
>> >> >> > To: users@jena.apache.org
>> >> >> > Subject: Spin integration
>> >> >> >
>> >> >> > Hello,
>> >> >> >
>> >> >> > I haven't found information about how to integrate Spin
>> >>(spinrdf.org)
>> >> >> with Jena. Is there any way to do so?
>> >> >> >
>> >> >> > I'll really appreciate any information on that matter since the
>> >> >> application I'm working on uses Jena through Fuseki, and now I
>>need
>> >>to
>> >> >> force some constraints when an insertion is done in TDB.
>> >> >> >
>> >> >> > By the way, I'm using the reasoner Pellet.
>> >> >> >
>> >> >> > Thank you,
>> >> >> > Matt
>> >> >>
>> >>
>>
>>

Reply via email to