📄 testfbrules.java
字号:
TestUtil.assertIteratorValues(this,
infgraph.find(C1, sC, a),
new Object[] {
} );
}
/**
* Test complex rule head unification
*/
public void testBackchain2() {
Graph data = Factory.createGraphMem();
data.add(new Triple(c, q, d));
List rules = Rule.parseRules(
"[r1: (c r ?x) <- (?x p f(?x b))]" +
"[r2: (?y p f(a ?y)) <- (c q ?y)]"
);
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this,
infgraph.find(c, r, null), new Object[] { } );
data.add(new Triple(c, q, a));
rules = Rule.parseRules(
"[r1: (c r ?x) <- (?x p f(?x a))]" +
"[r2: (?y p f(a ?y)) <- (c q ?y)]"
);
reasoner = createReasoner(rules);
infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this,
infgraph.find(c, r, null),
new Object[] {
new Triple(c, r, a)
} );
data = Factory.createGraphMem();
data.add(new Triple(a, q, a));
data.add(new Triple(a, q, b));
data.add(new Triple(a, q, c));
data.add(new Triple(b, q, d));
data.add(new Triple(b, q, b));
rules = Rule.parseRules(
"[r1: (c r ?x) <- (?x p ?x)]" +
"[r2: (?x p ?y) <- (a q ?x), (b q ?y)]"
);
reasoner = createReasoner(rules);
infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this,
infgraph.find(c, r, null),
new Object[] {
new Triple(c, r, b)
} );
rules = Rule.parseRules(
"[r1: (c r ?x) <- (?x p ?x)]" +
"[r2: (a p ?x) <- (a q ?x)]"
);
reasoner = createReasoner(rules);
infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this,
infgraph.find(c, r, null),
new Object[] {
new Triple(c, r, a)
} );
}
/**
* Test restriction example
*/
public void testBackchain3() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, ty, r));
data.add(new Triple(a, p, b));
data.add(new Triple(r, sC, C1));
data.add(new Triple(C1, ty, OWL.Restriction.asNode()));
data.add(new Triple(C1, OWL.onProperty.asNode(), p));
data.add(new Triple(C1, OWL.allValuesFrom.asNode(), c));
List rules = Rule.parseRules(
"[rdfs9: (?a rdf:type ?y) <- (?x rdfs:subClassOf ?y) (?a rdf:type ?x)]" +
"[restriction2: (?C owl:equivalentClass all(?P, ?D)) <- (?C rdf:type owl:Restriction), (?C owl:onProperty ?P), (?C owl:allValuesFrom ?D)]" +
"[rs2: (?X rdf:type all(?P,?C)) <- (?D owl:equivalentClass all(?P,?C)), (?X rdf:type ?D)]" +
"[rp4: (?Y rdf:type ?C) <- (?X rdf:type all(?P, ?C)), (?X ?P ?Y)]"
);
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this,
infgraph.find(b, ty, c), new Object[] {
new Triple(b, ty, c)
} );
}
/**
* Test example hybrid rule.
*/
public void testHybrid1() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, p, b));
data.add(new Triple(p, ty, s));
List rules = Rule.parseRules(
"[r1: (?p rdf:type s) -> [r1b: (?x ?p ?y) <- (?y ?p ?x)]]"
);
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
TestUtil.assertIteratorValues(this,
infgraph.find(null, p, null), new Object[] {
new Triple(a, p, b),
new Triple(b, p, a)
} );
}
/**
* Test example hybrid rule.
*/
public void testHybrid2() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, r, b));
data.add(new Triple(p, ty, s));
List rules = Rule.parseRules(
"[a1: -> (a rdf:type t)]" +
"[r0: (?x r ?y) -> (?x p ?y)]" +
"[r1: (?p rdf:type s) -> [r1b: (?x ?p ?y) <- (?y ?p ?x)]]" +
"[r2: (?p rdf:type s) -> [r2b: (?x ?p ?x) <- (?x rdf:type t)]]"
);
Reasoner reasoner = createReasoner(rules);
FBRuleInfGraph infgraph = (FBRuleInfGraph) reasoner.bind(data);
infgraph.setDerivationLogging(true);
infgraph.prepare();
assertTrue("Forward rule count", infgraph.getNRulesFired() == 3);
TestUtil.assertIteratorValues(this,
infgraph.find(null, p, null), new Object[] {
new Triple(a, p, a),
new Triple(a, p, b),
new Triple(b, p, a)
} );
// Suppressed until LP engine implements rule counting, if ever
// assertTrue("Backward rule count", infgraph.getNRulesFired() == 8);
// Check derivation tracing as well
// Suppressed until LP engine implements derivation tracing
Iterator di = infgraph.getDerivation(new Triple(b, p, a));
assertTrue(di.hasNext());
RuleDerivation d = (RuleDerivation)di.next();
assertTrue(d.getRule().getName().equals("r1b"));
TestUtil.assertIteratorValues(this, d.getMatches().iterator(), new Object[] { new Triple(a, p, b) });
assertTrue(! di.hasNext());
}
/**
* Test example hybrid rules for rdfs.
*/
public void testHybridRDFS() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, p, b));
data.add(new Triple(p, RDFS.range.asNode(), C1));
List rules = Rule.parseRules(
"[rdfs2: (?p rdfs:domain ?c) -> [(?x rdf:type ?c) <- (?x ?p ?y)] ]" +
"[rdfs3: (?p rdfs:range ?c) -> [(?y rdf:type ?c) <- (?x ?p ?y)] ]" +
"[rdfs5a: (?a rdfs:subPropertyOf ?b), (?b rdfs:subPropertyOf ?c) -> (?a rdfs:subPropertyOf ?c)]" +
"[rdfs5b: (?a rdf:type rdf:Property) -> (?a rdfs:subPropertyOf ?a)]" +
"[rdfs6: (?p rdfs:subPropertyOf ?q) -> [ (?a ?q ?b) <- (?a ?p ?b)] ]" +
"[rdfs7: (?a rdf:type rdfs:Class) -> (?a rdfs:subClassOf ?a)]" +
"[rdfs8: (?a rdfs:subClassOf ?b), (?b rdfs:subClassOf ?c) -> (?a rdfs:subClassOf ?c)]" +
"[rdfs9: (?x rdfs:subClassOf ?y) -> [ (?a rdf:type ?y) <- (?a rdf:type ?x)] ]" +
"" );
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
// ((FBRuleInfGraph)infgraph).setTraceOn(true);
TestUtil.assertIteratorValues(this,
infgraph.find(b, ty, null), new Object[] {
new Triple(b, ty, C1)
} );
}
/**
* Test example hybrid rules for rdfs.
*/
public void testHybridRDFS2() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, p, b));
data.add(new Triple(p, sP, r));
data.add(new Triple(r, RDFS.range.asNode(), C1));
List rules = Rule.parseRules(
"[rdfs3: (?p rdfs:range ?c) -> [(?y rdf:type ?c) <- (?x ?p ?y)] ]" +
"[rdfs6: (?p rdfs:subPropertyOf ?q) -> [ (?a ?q ?b) <- (?a ?p ?b)] ]" +
"" );
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
// ((FBRuleInfGraph)infgraph).setTraceOn(true);
TestUtil.assertIteratorValues(this,
infgraph.find(b, ty, C1), new Object[] {
new Triple(b, ty, C1)
} );
}
/**
* Test access to makeInstance machinery from a Brule.
*/
public void testMakeInstance() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, ty, C1));
List rules = Rule.parseRules(
"[r1: (?x p ?t) <- (?x rdf:type C1), makeInstance(?x, p, C2, ?t)]" +
"[r2: (?t rdf:type C2) <- (?x rdf:type C1), makeInstance(?x, p, C2, ?t)]" +
"" );
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
Node valueInstance = getValue(infgraph, a, p);
assertNotNull(valueInstance);
Node valueInstance2 = getValue(infgraph, a, p);
assertEquals(valueInstance, valueInstance2);
Node valueType = getValue(infgraph, valueInstance, RDF.type.asNode());
assertEquals(valueType, C2);
}
/**
* Test access to makeInstance machinery from a Brule.
*/
public void testMakeInstances() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, ty, C1));
List rules = Rule.parseRules(
"[r1: (?x p ?t) <- (?x rdf:type C1), makeInstance(?x, p, ?t)]" +
"" );
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
Node valueInstance = getValue(infgraph, a, p);
assertNotNull(valueInstance);
Node valueInstance2 = getValue(infgraph, a, p);
assertEquals(valueInstance, valueInstance2);
}
/**
* Test case for makeInstance which failed during development.
*/
public void testMakeInstanceBug() {
Graph data = Factory.createGraphMem();
data.add(new Triple(a, ty, r));
data.add(new Triple(r, sC, Functor.makeFunctorNode("some", new Node[] {p, C1})));
List rules = Rule.parseRules(
"[some1: (?C rdfs:subClassOf some(?P, ?D)) ->"
+ "[some1b: (?X ?P ?T) <- (?X rdf:type ?C), unbound(?T), noValue(?X, ?P), makeInstance(?X, ?P, ?D, ?T) ]"
+ "[some1b2: (?T rdf:type ?D) <- (?X rdf:type ?C), bound(?T), makeInstance(?X, ?P, ?D, ?T) ]"
+ "]");
Reasoner reasoner = createReasoner(rules);
InfGraph infgraph = reasoner.bind(data);
Node valueInstance = getValue(infgraph, a, p);
assertNotNull(valueInstance);
Node valueType = getValue(infgraph, valueInstance, ty);
assertEquals(valueType, C1);
}
/**
* Test numeric functors
*/
public void testNumericFunctors() {
String rules =
"[r1: (?x p f(a, ?x)) -> (?x q f(?x)) ]" +
"[r1: (?x p f(a, 0)) -> (?x s res) ]" +
"";
List ruleList = Rule.parseRules(rules);
Graph data = Factory.createGraphMem();
data.add(new Triple(n1, p, Util.makeIntNode(2)) );
data.add(new Triple(n2, p, Functor.makeFunctorNode("f", new Node[] {
a, Util.makeIntNode(0) })));
data.add(new Triple(n3, p, Functor.makeFunctorNode("f", new Node[] {
a, Node.createLiteral( "0", "", XSDDatatype.XSDnonNegativeInteger ) } )));
InfGraph infgraph = createReasoner(ruleList).bind(data);
TestUtil.assertIteratorValues(this, infgraph.find(null, s, null),
new Triple[] {
new Triple(n2, s, res),
new Triple(n3, s, res),
});
}
/**
* Test the builtins themselves
*/
public void testBuiltins2() {
// Numeric comparisions
Node lt = Node.createURI("lt");
Node gt = Node.createURI("gt");
Node le = Node.createURI("le");
Node ge = Node.createURI("ge");
Node eq = Node.createURI("eq");
Node ne = Node.createURI("ne");
String rules =
"[r1: (?x q ?vx), (?y q ?vy), lessThan(?vx, ?vy) -> (?x lt ?y)]" +
"[r2: (?x q ?vx), (?y q ?vy), greaterThan(?vx, ?vy) -> (?x gt ?y)]" +
"[r3: (?x q ?vx), (?y q ?vy), le(?vx, ?vy) -> (?x le ?y)]" +
"[r4: (?x q ?vx), (?y q ?vy), ge(?vx, ?vy) -> (?x ge ?y)]" +
"[r5: (?x q ?vx), (?y q ?vy), notEqual(?vx, ?vy) -> (?x ne ?y)]" +
"[r6: (?x q ?vx), (?y q ?vy), equal(?vx, ?vy) -> (?x eq ?y)]" +
"";
List ruleList = Rule.parseRules(rules);
Graph data = Factory.createGraphMem();
data.add(new Triple(n1, q, Util.makeIntNode(2)) );
data.add(new Triple(n2, q, Util.makeIntNode(2)) );
data.add(new Triple(n3, q, Util.makeIntNode(3)) );
InfGraph infgraph = createReasoner(ruleList).bind(data);
TestUtil.assertIteratorValues(this, infgraph.find(n1, null, n2),
new Triple[] {
new Triple(n1, eq, n2),
new Triple(n1, le, n2),
new Triple(n1, ge, n2),
});
TestUtil.assertIteratorValues(this, infgraph.find(n1, null, n3),
new Triple[] {
new Triple(n1, ne, n3),
new Triple(n1, lt, n3),
new Triple(n1, le, n3),
});
TestUtil.assertIteratorValues(this, infgraph.find(n3, null, n1),
new Triple[] {
new Triple(n3, ne, n1),
new Triple(n3, gt, n1),
new Triple(n3, ge, n1),
});
// Floating point comparisons
data = Factory.createGraphMem();
data.add(new Triple(n1, q, Util.makeIntNode(2)) );
data.add(new Triple(n2, q, Util.makeDoubleNode(2.2)) );
data.add(new Triple(n3, q, Util.makeDoubleNode(2.3)) );
infgraph = createReasoner(ruleList).bind(data);
TestUtil.assertIteratorValues(this, infgraph.find(n1, null, n2),
new Triple[] {
new Triple(n1, ne, n2),
new Triple(n1, le, n2),
new Triple(n1, lt, n2),
});
TestUtil.assertIteratorValues(this, infgraph.find(n2, null, n3),
new Triple[] {
new Triple(n2, ne, n3),
new Triple(n2, le, n3),
new Triple(n2, lt, n3),
});
// XSD timeDate point comparisons
data = Factory.createGraphMem();
XSDDatatype dt = new XSDDatatype("dateTime");
data.add(new Triple(n1, q, Node.createLiteral("2000-03-04T20:00:00Z", "", XSDDatatype.XSDdateTime)));
data.add(new Triple(n2, q, Node.createLiteral("2001-03-04T20:00:00Z", "", XSDDatatype.XSDdateTime)));
data.add(new Triple(n3, q, Node.createLiteral("2002-03-04T20:00:00Z", "", XSDDatatype.XSDdateTime)));
infgraph = createReasoner(ruleList).bind(data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -