use of org.apache.jena.reasoner.Reasoner in project jena by apache.
the class TestReasoners method testTransitiveBindReuse.
/**
* The reasoner contract for bind(data) is not quite precise. It allows for
* reasoners which have state so that reusing the same reasoner on a second data
* model might lead to interference. This in fact used to happen with the transitive
* reasoner. This is a test to check that the transitive reasoner state reuse has been fixed at source.
*/
public void testTransitiveBindReuse() {
Reasoner r = ReasonerRegistry.getTransitiveReasoner();
InfModel om1 = ModelFactory.createInfModel(r, ModelFactory.createDefaultModel());
Resource c1 = om1.createResource(PrintUtil.egNS + "Class1");
Resource c2 = om1.createResource(PrintUtil.egNS + "Class2");
Resource c3 = om1.createResource(PrintUtil.egNS + "Class3");
om1.add(c1, RDFS.subClassOf, c2);
om1.add(c2, RDFS.subClassOf, c3);
om1.prepare();
assertFalse(om1.isEmpty());
InfModel om2 = ModelFactory.createInfModel(r, ModelFactory.createDefaultModel());
StmtIterator si = om2.listStatements();
boolean ok = !si.hasNext();
si.close();
assertTrue("Transitive reasoner state leak", ok);
}
use of org.apache.jena.reasoner.Reasoner in project jena by apache.
the class TestReasoners method testTransitiveRebind.
/**
* Test rebind operation for the transitive reasoner
*/
public void testTransitiveRebind() {
Graph data = Factory.createGraphMem();
Node C1 = NodeFactory.createURI("C1");
Node C2 = NodeFactory.createURI("C2");
Node C3 = NodeFactory.createURI("C3");
Node C4 = NodeFactory.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 = NodeFactory.createURI("a");
Node b = NodeFactory.createURI("b");
Node c = NodeFactory.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 = NodeFactory.createURI("p");
Node q = NodeFactory.createURI("q");
Node r = NodeFactory.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) });
}
use of org.apache.jena.reasoner.Reasoner in project jena by apache.
the class TestReasoners method testRDFSRebind.
/**
* Test rebind operation for the RDFS reasoner
*/
public void testRDFSRebind() {
Graph data = Factory.createGraphMem();
Node C1 = NodeFactory.createURI("C1");
Node C2 = NodeFactory.createURI("C2");
Node C3 = NodeFactory.createURI("C3");
Node C4 = NodeFactory.createURI("C4");
data.add(new Triple(C1, RDFS.subClassOf.asNode(), C2));
data.add(new Triple(C2, RDFS.subClassOf.asNode(), C3));
Reasoner reasoner = RDFSRuleReasonerFactory.theInstance().create(null);
InfGraph infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this, infgraph.find(C1, RDFS.subClassOf.asNode(), 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);
TestUtil.assertIteratorValues(this, infgraph.find(C1, RDFS.subClassOf.asNode(), null), new Object[] { new Triple(C1, RDFS.subClassOf.asNode(), C1), new Triple(C1, RDFS.subClassOf.asNode(), C2), new Triple(C1, RDFS.subClassOf.asNode(), C4) });
}
use of org.apache.jena.reasoner.Reasoner in project jena by apache.
the class TestReasoners method testTransitiveRemove.
/**
* Test delete operation for Transtive reasoner.
*/
public void testTransitiveRemove() {
Graph data = Factory.createGraphMem();
Node a = NodeFactory.createURI("a");
Node b = NodeFactory.createURI("b");
Node c = NodeFactory.createURI("c");
Node d = NodeFactory.createURI("d");
Node e = NodeFactory.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) });
}
use of org.apache.jena.reasoner.Reasoner in project jena by apache.
the class TestReasoners method doTestMetaLevel.
/**
* Test metalevel add/remove subproperty operations for a reasoner.
*/
public void doTestMetaLevel(ReasonerFactory rf) {
Graph data = Factory.createGraphMem();
Node c1 = NodeFactory.createURI("C1");
Node c2 = NodeFactory.createURI("C2");
Node c3 = NodeFactory.createURI("C3");
Node p = NodeFactory.createURI("p");
Node q = NodeFactory.createURI("q");
Node sC = RDFS.subClassOf.asNode();
Node sP = RDFS.subPropertyOf.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[] {});
}
Aggregations