/** * Test early detection of illegal backward rules. */ public void testBRuleErrorHandling() { Graph data = Factory.createGraphMem(); List<Rule> rules = Rule.parseRules( "[a1: -> [(?x eg:p ?y) (?x eg:q ?y) <- (?x eg:r ?y)]]" ); boolean foundException = false; try { GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.HYBRID); InfGraph infgraph = reasoner.bind(data); infgraph.prepare(); } catch (ReasonerException e) { foundException = true; } assertTrue("Catching use of multi-headed brules", foundException); }
/** * Test early detection of illegal backward rules. */ public void testBRuleErrorHandling() { Graph data = Factory.createGraphMem(); List<Rule> rules = Rule.parseRules( "[a1: -> [(?x eg:p ?y) (?x eg:q ?y) <- (?x eg:r ?y)]]" ); boolean foundException = false; try { GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.HYBRID); InfGraph infgraph = reasoner.bind(data); infgraph.prepare(); } catch (ReasonerException e) { foundException = true; } assertTrue("Catching use of multi-headed brules", foundException); }
grr.setMode(GenericRuleReasoner.HYBRID); try { grr.setRules(Rule.parseRules(Util.loadRuleParserFromResourceFile("etc/expt.rules"))); } catch (WrappedIOException e) { System.out.println("Failed to open rules file: " + e.getCause() );
grr.setMode(GenericRuleReasoner.HYBRID); try { grr.setRules(Rule.parseRules(Util.loadRuleParserFromResourceFile("etc/expt.rules"))); } catch (WrappedIOException e) { System.out.println("Failed to open rules file: " + e.getCause() );
/** * Test recursive rules involving functors. * May lock up in there is a bug. * TODO: arrange test to run in a separate thread with a timeout */ public void doTestFunctorLooping(RuleMode mode) { Graph data = Factory.createGraphMem(); data.add(new Triple(a, r, b)); List<Rule> rules = Rule.parseRules( "(?x r ?y) -> (?x p func(?x)). (?x p ?y) -> (?x p func(?x))." ); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(mode); InfGraph infgraph = reasoner.bind(data); // The p should have been asserted but is invisible assertFalse( infgraph.contains(Node.ANY, p, Node.ANY) ); }
/** * Test recursive rules involving functors. * May lock up in there is a bug. * TODO: arrange test to run in a separate thread with a timeout */ public void doTestFunctorLooping(RuleMode mode) { Graph data = Factory.createGraphMem(); data.add(new Triple(a, r, b)); List<Rule> rules = Rule.parseRules( "(?x r ?y) -> (?x p func(?x)). (?x p ?y) -> (?x p func(?x))." ); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(mode); InfGraph infgraph = reasoner.bind(data); // The p should have been asserted but is invisible assertFalse( infgraph.contains(Node.ANY, p, Node.ANY) ); }
); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.HYBRID);
); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.HYBRID);
/** * Resolve a bug using remove in rules themselves. */ public void testAddRemove2() { Graph data = Factory.createGraphMem(); data.add(new Triple(a, p, Util.makeIntNode(0))); List<Rule> rules = Rule.parseRules( "(?x p ?v)-> (?x q inc(1, a)).\n" + "(?x p ?v)-> (?x q inc(1, b)).\n" + "(?x p ?v) (?x q inc(?i, ?t)) noValue(?x r ?t) sum(?v, ?i, ?s) -> remove(0,1), (?x p ?s) (?x r ?t).\n"); // Older version, relied on implicit rule ordering in Jena2.2 not value in 2.3 // "(?x p ?v) noValue(a r 1) -> (?x q inc(1, a)) (?x r 1).\n" + // "(?x p ?v) noValue(a r 2) -> (?x q inc(1, b)) (?x r 2).\n" + // "(?x p ?v) (?x q inc(?i, ?t)) sum(?v, ?i, ?s) -> remove(0,1), (?x p ?s).\n"); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.FORWARD_RETE); InfGraph infgraph = reasoner.bind(data); TestUtil.assertIteratorValues(this, infgraph.find(a, p, null), new Object[] { new Triple(a, p, Util.makeIntNode(2)) } ); } }
/** * Resolve a bug using remove in rules themselves. */ public void testAddRemove2() { Graph data = Factory.createGraphMem(); data.add(new Triple(a, p, Util.makeIntNode(0))); List<Rule> rules = Rule.parseRules( "(?x p ?v)-> (?x q inc(1, a)).\n" + "(?x p ?v)-> (?x q inc(1, b)).\n" + "(?x p ?v) (?x q inc(?i, ?t)) noValue(?x r ?t) sum(?v, ?i, ?s) -> remove(0,1), (?x p ?s) (?x r ?t).\n"); // Older version, relied on implicit rule ordering in Jena2.2 not value in 2.3 // "(?x p ?v) noValue(a r 1) -> (?x q inc(1, a)) (?x r 1).\n" + // "(?x p ?v) noValue(a r 2) -> (?x q inc(1, b)) (?x r 2).\n" + // "(?x p ?v) (?x q inc(?i, ?t)) sum(?v, ?i, ?s) -> remove(0,1), (?x p ?s).\n"); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.FORWARD_RETE); InfGraph infgraph = reasoner.bind(data); TestUtil.assertIteratorValues(this, infgraph.find(a, p, null), new Object[] { new Triple(a, p, Util.makeIntNode(2)) } ); } }
/** * Minimal rule tester to check basic pattern match, forward style. */ public void testForward() { Graph test = Factory.createGraphMem(); test.add(new Triple(a, p, b)); test.add(new Triple(b, p, c)); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(ruleList); reasoner.setMode(GenericRuleReasoner.FORWARD); // Check data bind version InfGraph infgraph = reasoner.bind(test); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); // Check schema bind version infgraph = reasoner.bindSchema(test).bind(Factory.createGraphMem()); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); }
/** * Minimal rule tester to check basic pattern match, backward style. */ public void testBackward() { Graph test = Factory.createGraphMem(); test.add(new Triple(a, p, b)); test.add(new Triple(b, p, c)); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(ruleList); reasoner.setMode(GenericRuleReasoner.BACKWARD); // Check data bind version InfGraph infgraph = reasoner.bind(test); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); // Check schema bind version infgraph = reasoner.bindSchema(test).bind(Factory.createGraphMem()); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); }
/** * Minimal rule tester to check basic pattern match, backward style. */ public void testBackward() { Graph test = Factory.createGraphMem(); test.add(new Triple(a, p, b)); test.add(new Triple(b, p, c)); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(ruleList); reasoner.setMode(GenericRuleReasoner.BACKWARD); // Check data bind version InfGraph infgraph = reasoner.bind(test); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); // Check schema bind version infgraph = reasoner.bindSchema(test).bind(Factory.createGraphMem()); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); }
/** * Minimal rule tester to check basic pattern match, forward style. */ public void testForward() { Graph test = Factory.createGraphMem(); test.add(new Triple(a, p, b)); test.add(new Triple(b, p, c)); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(ruleList); reasoner.setMode(GenericRuleReasoner.FORWARD); // Check data bind version InfGraph infgraph = reasoner.bind(test); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); // Check schema bind version infgraph = reasoner.bindSchema(test).bind(Factory.createGraphMem()); TestUtil.assertIteratorValues(this, infgraph.find(null, p, null), ans); }
/** * Delete bug in generic rule reasoner. */ public void testGenericDeleteBug() { Model data = ModelFactory.createDefaultModel(); String NS = "urn:x-hp:eg/"; Property p = data.createProperty(NS, "p"); Resource x = data.createResource(NS + "x"); Resource y = data.createResource(NS + "y"); Statement sy = data.createStatement(y, p, "foo"); data.add(sy); data.add(x, p, "foo"); // String rule = "[(?x eg:p ?m) -> (?x eg:same ?x)]"; String rule = "[(?x eg:p ?m) (?y eg:p ?m) -> (?x eg:same ?y) (?y eg:same ?x)]"; GenericRuleReasoner reasoner = (GenericRuleReasoner) GenericRuleReasonerFactory.theInstance().create(null); reasoner.setMode(GenericRuleReasoner.FORWARD_RETE); reasoner.setRules(Rule.parseRules(rule)); InfModel inf = ModelFactory.createInfModel(reasoner, data); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 3); inf.remove(sy); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 0); }
/** * Delete bug in generic rule reasoner. */ public void testGenericDeleteBug() { Model data = ModelFactory.createDefaultModel(); String NS = "urn:x-hp:eg/"; Property p = data.createProperty(NS, "p"); Resource x = data.createResource(NS + "x"); Resource y = data.createResource(NS + "y"); Statement sy = data.createStatement(y, p, "foo"); data.add(sy); data.add(x, p, "foo"); // String rule = "[(?x eg:p ?m) -> (?x eg:same ?x)]"; String rule = "[(?x eg:p ?m) (?y eg:p ?m) -> (?x eg:same ?y) (?y eg:same ?x)]"; GenericRuleReasoner reasoner = (GenericRuleReasoner) GenericRuleReasonerFactory.theInstance().create(null); reasoner.setMode(GenericRuleReasoner.FORWARD_RETE); reasoner.setRules(Rule.parseRules(rule)); InfModel inf = ModelFactory.createInfModel(reasoner, data); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 3); inf.remove(sy); TestUtil.assertIteratorLength(inf.listStatements(y, null, (RDFNode)null), 0); }
/** * Test control of functor filtering */ public void testHybridFunctorFilter() { Graph data = Factory.createGraphMem(); data.add(new Triple(a, r, b)); data.add(new Triple(a, p, s)); List<Rule> rules = Rule.parseRules( "[r0: (?x r ?y) (?x p ?z) -> (?x q func(?y, ?z)) ]" ); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.HYBRID); InfGraph infgraph = reasoner.bind(data); TestUtil.assertIteratorValues(this, infgraph.find(null, q, null), new Object[] { } ); reasoner.setFunctorFiltering(false); infgraph = reasoner.bind(data); TestUtil.assertIteratorValues(this, infgraph.find(null, q, null), new Object[] { new Triple(a, q, Functor.makeFunctorNode("func", new Node[]{b, s})) } ); }
/** * Test control of functor filtering */ public void testHybridFunctorFilter() { Graph data = Factory.createGraphMem(); data.add(new Triple(a, r, b)); data.add(new Triple(a, p, s)); List<Rule> rules = Rule.parseRules( "[r0: (?x r ?y) (?x p ?z) -> (?x q func(?y, ?z)) ]" ); GenericRuleReasoner reasoner = (GenericRuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(rules); reasoner.setMode(GenericRuleReasoner.HYBRID); InfGraph infgraph = reasoner.bind(data); TestUtil.assertIteratorValues(this, infgraph.find(null, q, null), new Object[] { } ); reasoner.setFunctorFiltering(false); infgraph = reasoner.bind(data); TestUtil.assertIteratorValues(this, infgraph.find(null, q, null), new Object[] { new Triple(a, q, Functor.makeFunctorNode("func", new Node[]{b, s})) } ); }
reasoner.setRules(rules);
reasoner.setRules(rules);