📄 testreasoners.java
字号:
/******************************************************************
* File: TestReasoners.java
* Created by: Dave Reynolds
* Created on: 19-Jan-03
*
* (c) Copyright 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* [See end of file]
* $Id: TestReasoners.java,v 1.34 2007/01/02 11:50:48 andy_seaborne Exp $
*****************************************************************/
package com.hp.hpl.jena.reasoner.test;
import com.hp.hpl.jena.reasoner.transitiveReasoner.*;
import com.hp.hpl.jena.reasoner.rulesys.RDFSRuleReasonerFactory;
import com.hp.hpl.jena.reasoner.*;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.graph.*;
import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.util.IteratorCollection;
import com.hp.hpl.jena.util.PrintUtil;
import com.hp.hpl.jena.vocabulary.*;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* Outline unit tests for initial experimental reasoners
*
* @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
* @version $Revision: 1.34 $ on $Date: 2007/01/02 11:50:48 $
*/
public class TestReasoners extends TestCase {
/**
* Boilerplate for junit
*/
public TestReasoners( String name ) {
super( name );
}
/**
* Boilerplate for junit.
* This is its own test suite
*/
public static TestSuite suite() {
return new TestSuite(TestReasoners.class);
}
/**
* Test the basic functioning of a Transitive closure cache
*/
public void testTransitiveReasoner() throws IOException {
ReasonerTester tester = new ReasonerTester("transitive/manifest.rdf");
ReasonerFactory rf = TransitiveReasonerFactory.theInstance();
assertTrue("transitive reasoner tests", tester.runTests(rf, this, null));
}
/**
* Test rebind operation for the transitive reasoner
*/
public void testTransitiveRebind() {
Graph data = Factory.createGraphMem();
Node C1 = Node.createURI("C1");
Node C2 = Node.createURI("C2");
Node C3 = Node.createURI("C3");
Node C4 = Node.createURI("C4");
data.add( new Triple(C1, RDFS.subClassOf.asNode(), C2) );
data.add( new Triple(C2, RDFS.subClassOf.asNode(), C3) );
Reasoner reasoner = TransitiveReasonerFactory.theInstance().create(null);
assertTrue(reasoner.supportsProperty(RDFS.subClassOf));
assertTrue(! reasoner.supportsProperty(RDFS.domain));
InfGraph infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this,
infgraph.find(C1, null, null),
new Object[] {
new Triple(C1, RDFS.subClassOf.asNode(), C1),
new Triple(C1, RDFS.subClassOf.asNode(), C2),
new Triple(C1, RDFS.subClassOf.asNode(), C3)
} );
Graph data2 = Factory.createGraphMem();
data2.add( new Triple(C1, RDFS.subClassOf.asNode(), C2) );
data2.add( new Triple(C2, RDFS.subClassOf.asNode(), C4) );
infgraph.rebind(data2);
// Incremental additions
Node a = Node.createURI("a");
Node b = Node.createURI("b");
Node c = Node.createURI("c");
infgraph.add(new Triple(a, RDFS.subClassOf.asNode(), b));
infgraph.add(new Triple(b, RDFS.subClassOf.asNode(), c));
TestUtil.assertIteratorValues(this,
infgraph.find(b, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(b, RDFS.subClassOf.asNode(), c),
new Triple(b, RDFS.subClassOf.asNode(), b)
} );
TestUtil.assertIteratorValues(this,
infgraph.find(a, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(a, RDFS.subClassOf.asNode(), a),
new Triple(a, RDFS.subClassOf.asNode(), b),
new Triple(a, RDFS.subClassOf.asNode(), c)
} );
Node p = Node.createURI("p");
Node q = Node.createURI("q");
Node r = Node.createURI("r");
infgraph.add(new Triple(p, RDFS.subPropertyOf.asNode(), q));
infgraph.add(new Triple(q, RDFS.subPropertyOf.asNode(), r));
TestUtil.assertIteratorValues(this,
infgraph.find(q, RDFS.subPropertyOf.asNode(), null),
new Object[] {
new Triple(q, RDFS.subPropertyOf.asNode(), q),
new Triple(q, RDFS.subPropertyOf.asNode(), r)
} );
TestUtil.assertIteratorValues(this,
infgraph.find(p, RDFS.subPropertyOf.asNode(), null),
new Object[] {
new Triple(p, RDFS.subPropertyOf.asNode(), p),
new Triple(p, RDFS.subPropertyOf.asNode(), q),
new Triple(p, RDFS.subPropertyOf.asNode(), r)
} );
}
/**
* Test delete operation for Transtive reasoner.
*/
public void testTransitiveRemove() {
Graph data = Factory.createGraphMem();
Node a = Node.createURI("a");
Node b = Node.createURI("b");
Node c = Node.createURI("c");
Node d = Node.createURI("d");
Node e = Node.createURI("e");
Node closedP = RDFS.subClassOf.asNode();
data.add( new Triple(a, RDFS.subClassOf.asNode(), b) );
data.add( new Triple(a, RDFS.subClassOf.asNode(), c) );
data.add( new Triple(b, RDFS.subClassOf.asNode(), d) );
data.add( new Triple(c, RDFS.subClassOf.asNode(), d) );
data.add( new Triple(d, RDFS.subClassOf.asNode(), e) );
Reasoner reasoner = TransitiveReasonerFactory.theInstance().create(null);
InfGraph infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this, infgraph.find(a, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(a, closedP, a),
new Triple(a, closedP, b),
new Triple(a, closedP, b),
new Triple(a, closedP, c),
new Triple(a, closedP, d),
new Triple(a, closedP, e)
});
TestUtil.assertIteratorValues(this, infgraph.find(b, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(b, closedP, b),
new Triple(b, closedP, d),
new Triple(b, closedP, e)
});
infgraph.delete(new Triple(b, closedP, d));
TestUtil.assertIteratorValues(this, infgraph.find(a, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(a, closedP, a),
new Triple(a, closedP, b),
new Triple(a, closedP, b),
new Triple(a, closedP, c),
new Triple(a, closedP, d),
new Triple(a, closedP, e)
});
TestUtil.assertIteratorValues(this, infgraph.find(b, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(b, closedP, b),
});
infgraph.delete(new Triple(a, closedP, c));
TestUtil.assertIteratorValues(this, infgraph.find(a, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(a, closedP, a),
new Triple(a, closedP, b)
});
TestUtil.assertIteratorValues(this, infgraph.find(b, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(b, closedP, b)
});
TestUtil.assertIteratorValues(this, data.find(null, RDFS.subClassOf.asNode(), null),
new Object[] {
new Triple(a, closedP, b),
new Triple(c, closedP, d),
new Triple(d, closedP, e)
});
}
/**
* Test metalevel add/remove subproperty operations for transitive reasoner.
*/
public void testTransitiveMetaLevel() {
doTestMetaLevel(TransitiveReasonerFactory.theInstance());
}
/**
* Test metalevel add/remove subproperty operations for rdsf reasoner.
*/
public void testRDFSMetaLevel() {
doTestMetaLevel(RDFSRuleReasonerFactory.theInstance());
}
/**
* Test metalevel add/remove subproperty operations for a reasoner.
*/
public void doTestMetaLevel(ReasonerFactory rf) {
Graph data = Factory.createGraphMem();
Node c1 = Node.createURI("C1");
Node c2 = Node.createURI("C2");
Node c3 = Node.createURI("C3");
Node p = Node.createURI("p");
Node q = Node.createURI("q");
Node sC = RDFS.subClassOf.asNode();
Node sP = RDFS.subPropertyOf.asNode();
Node ty = RDF.type.asNode();
data.add( new Triple(c2, sC, c3));
data.add( new Triple(c1, p, c2));
Reasoner reasoner = rf.create(null);
InfGraph infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this, infgraph.find(c1, sC, null),
new Object[] {
});
infgraph.add(new Triple(p, q, sC));
TestUtil.assertIteratorValues(this, infgraph.find(c1, sC, null),
new Object[] {
});
infgraph.add(new Triple(q, sP, sP));
TestUtil.assertIteratorValues(this, infgraph.find(c1, sC, null),
new Object[] {
new Triple(c1, sC, c1),
new Triple(c1, sC, c2),
new Triple(c1, sC, c3)
});
infgraph.delete(new Triple(p, q, sC));
TestUtil.assertIteratorValues(this, infgraph.find(c1, sC, null),
new Object[] {
});
}
/**
* Check a complex graph's transitive reduction.
*/
public void testTransitiveReduction() {
Model test = FileManager.get().loadModel("testing/reasoners/bugs/subpropertyModel.n3");
Property dp = test.getProperty(TransitiveReasoner.directSubPropertyOf.getURI());
doTestTransitiveReduction(test, dp);
}
/**
* Test that a transitive reduction is complete.
* Assumes test graph has no cycles (other than the trivial
* identity ones).
*/
public void doTestTransitiveReduction(Model model, Property dp) {
InfModel im = ModelFactory.createInfModel(ReasonerRegistry.getTransitiveReasoner(), model);
for (ResIterator i = im.listSubjects(); i.hasNext();) {
Resource base = i.nextResource();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -