You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Andrey Razumovsky <ra...@gmail.com> on 2011/08/19 19:12:33 UTC

Obtaining what reasoner has added

Hi Jena folks,

I would like to know how to know what reasoner has added to my OntModel,
i.e. given Graph and InfGraph get all newly added triples. In fact, I could
not even implement straightforward way - I've not found any way to get all
triples from the Graph.
Could you advice some handy mehods please? I'm using Jena 2.6.4

Thanks,
Andrey

Re: Obtaining what reasoner has added

Posted by Andrey Razumovsky <ra...@gmail.com>.
Thanks Dave,

That helped. plain.remove(baseModel) worked oddly for me, removing something
I did not want to remove, but listing statements with filter works great.

2011/8/20 Dave Reynolds <da...@gmail.com>

> On Fri, 2011-08-19 at 21:12 +0400, Andrey Razumovsky wrote:
> > Hi Jena folks,
> >
> > I would like to know how to know what reasoner has added to my OntModel,
> > i.e. given Graph and InfGraph get all newly added triples. In fact, I
> could
> > not even implement straightforward way - I've not found any way to get
> all
> > triples from the Graph.
> > Could you advice some handy mehods please? I'm using Jena 2.6.4
>
> If you are talking about the built in Rule reasoners then the first
> thing to be aware of is that some triples are added as new deductions
> straight away and then more are determined dynamically in response to
> questions.
>
> So while you can get the basic forward deductions using
> getDeductionsModel() if you want all the deducible triples you need to
> ask the reasoner for everything.
>
> One easy way to do that is to create a plain no-inference model to hold
> the materialized deductions:
>
>  OntModel inf   = ModelFactory.createOntologyModel(infspec, baseModel);
>  OntModel plain =
>           ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
>  plain.add(inf);
>
> If you want only the deductions then do:
>
>   plain.remove(baseModel);
>
> If you want the deductions on the fly rather than storing them, then
> instead use:
>
>   inf.listStatements()
>
> If you want the deductions on the fly but not the base data then use:
>
>   inf.listStatements().filterDrop( f )
>
> where f is a filter to drop the statments which were in base Model
> (exercise for the reader :)).
>
> Dave
>
>
>


-- 
Andrey

Re: Obtaining what reasoner has added

Posted by Dave Reynolds <da...@gmail.com>.
On Fri, 2011-08-19 at 21:12 +0400, Andrey Razumovsky wrote: 
> Hi Jena folks,
> 
> I would like to know how to know what reasoner has added to my OntModel,
> i.e. given Graph and InfGraph get all newly added triples. In fact, I could
> not even implement straightforward way - I've not found any way to get all
> triples from the Graph.
> Could you advice some handy mehods please? I'm using Jena 2.6.4

If you are talking about the built in Rule reasoners then the first
thing to be aware of is that some triples are added as new deductions
straight away and then more are determined dynamically in response to
questions.

So while you can get the basic forward deductions using
getDeductionsModel() if you want all the deducible triples you need to
ask the reasoner for everything.

One easy way to do that is to create a plain no-inference model to hold
the materialized deductions:

  OntModel inf   = ModelFactory.createOntologyModel(infspec, baseModel);
  OntModel plain =
           ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
  plain.add(inf);

If you want only the deductions then do:

   plain.remove(baseModel);

If you want the deductions on the fly rather than storing them, then
instead use:

   inf.listStatements()

If you want the deductions on the fly but not the base data then use:

   inf.listStatements().filterDrop( f )

where f is a filter to drop the statments which were in base Model
(exercise for the reader :)).

Dave