Re: RDF-Entailment: Remove duplicate anonymous resources - looking for an algorithm

I've implemented the algorithm I described yesterday for jena (with 
litle fixes).

The source is here:
A jar containing source, classes and junit-test ist here:

I'm happy to add new tests while I hope someone finds a way to make 
things faster.

Just to get an idea on how long it takes:

It took 27ms to find out that a 2 statements model is lean
It took 22831ms to find out that a 253 statements model is lean
It took 5ms to reduce a model from 4 to 2 statements
It took 1ms to reduce a model from 4 to 2 statements

Guess, how long will it take to leanify a model with 150278 statements 
(that's the size of the model of the website at


Reto Bachmann-Gmür schrieb:

> Just saw the first (fixable) bug, see below
> I wrote:
>> ....
>>boolean implies(Node n1, Node n2, List history1, List history2, Set knownNotImplying, Set conditionalImplications) {
>> for every other statement (n2, p, o2) or (o2, p, n2) in p2 check if there is a statement (n1, p, o1) respectively (o1, p, n1) in p1 with the same predicate and for which implies(o1, o2, history1.clone(),history2.clone(), knownNotImplying, conditionalImplications) is true, otherwise add {n1, n2} to knownNotImpying an return false;
>> conditionalImplications.add({n1, n2}) and return true;
> The recursive call to implies(...) may add elements to 
> conditionalImplications which should be removed when the mehod return 
> false, so before every "return false" the conditionalImplications-set 
> should be reset to the same values as when the method was invoked.
> probably not the last bug....
> reto

Received on Thursday, 24 November 2005 07:17:30 UTC