📄 testbasiclp.java
字号:
new Triple(b, p, c),
},
new Triple(Node.ANY, r, Node.ANY),
new Object[] {
new Triple(a, r, b),
new Triple(b, r, c)
} );
}
/**
* Test tabled predicates. Simple transitive closure case.
*/
public void testTabled2() {
doTest("[r1: (?a p ?c) <- (?a p ?b)(?b p ?c)]",
new Node[] { p },
new Triple[] {
new Triple(a, p, b),
new Triple(b, p, c),
new Triple(b, p, d),
},
new Triple(Node.ANY, p, Node.ANY),
new Object[] {
new Triple(a, p, b),
new Triple(b, p, c),
new Triple(a, p, c),
new Triple(b, p, d),
new Triple(a, p, d),
} );
}
/**
* Test tabled predicates. Simple transitive closure over normal predicates
*/
public void testTabled3() {
doTest("[r1: (?x p ?z) <- (?x p ?y), (?y p ?z)]" +
"[r2: (?x p ?z) <- (?x e ?z), (?z q ?z)]",
new Node[] { p },
new Triple[] {
new Triple(a, e, b),
new Triple(a, e, d),
new Triple(b, e, c),
new Triple(a, q, a),
new Triple(b, q, b),
new Triple(c, q, c),
},
new Triple(a, p, Node.ANY),
new Object[] {
new Triple(a, p, b),
// new Triple(b, p, c),
new Triple(a, p, c)
} );
}
/**
* Test tabled predicates. Co-routining example.
*/
public void testTabled4() {
doTest("[r1: (?x a ?y) <- (?x c ?y)]" +
"[r2: (?x a ?y) <- (?x b ?z), (?z c ?y)]" +
"[r3: (?x b ?y) <- (?x d ?y)]" +
"[r4: (?x b ?y) <- (?x a ?z) (?z c ?y)]",
new Node[] { a, b },
new Triple[] {
new Triple(p, c, q),
new Triple(q, c, r),
new Triple(p, d, q),
new Triple(q, d, r),
},
new Triple(p, a, Node.ANY),
new Object[] {
new Triple(p, a, q),
new Triple(p, a, r)
} );
}
/**
* Test tabled predicates. Simple transitive closure case.
*/
public void testTabled5() {
doTest("[r1: (?a p ?c) <- (?a p ?b)(?b p ?c)]" +
"[r2: (?a r ?b) <- (?a q ?b)]",
new Node[] { p },
new Triple[] {
new Triple(a, p, b),
new Triple(b, p, c),
new Triple(a, q, d),
new Triple(c, q, d),
},
new Triple(a, Node.ANY, Node.ANY),
new Object[] {
new Triple(a, p, b),
new Triple(a, p, c),
new Triple(a, q, d),
new Triple(a, r, d),
} );
}
/**
* Test tabled predicates. Simple transitive closure case, tabling set
* by rule base.
*/
public void testTabled6() {
doTest("[-> table(p)] [r1: (?a p ?c) <- (?a p ?b)(?b p ?c)]",
new Triple[] {
new Triple(a, p, b),
new Triple(b, p, c),
new Triple(b, p, d),
},
new Triple(Node.ANY, p, Node.ANY),
new Object[] {
new Triple(a, p, b),
new Triple(b, p, c),
new Triple(a, p, c),
new Triple(b, p, d),
new Triple(a, p, d),
} );
}
/**
* Test tabled calls with aliased local vars in the call.
*/
public void testTabled7() {
doTest("[r1: (?a q ?b) <- (?a p ?b)]" +
"[r2: (?a q ?a) <- (?a s ?a)]" +
"[r2: (?a r ?z) <- (?a q ?a)]",
new Node[] { },
new Triple[] {
new Triple(a, p, b),
new Triple(c, p, c),
new Triple(a, p, a),
new Triple(b, s, e),
new Triple(d, s, d),
},
new Triple(Node.ANY, r, C1),
new Object[] {
new Triple(a, r, C1),
new Triple(c, r, C1),
new Triple(d, r, C1),
} );
}
/**
* Test RDFS example.
*/
public void testRDFS1() {
doTest(
"[ (?a rdf:type C1) <- (?a rdf:type C2) ]" +
"[ (?a rdf:type C2) <- (?a rdf:type C3) ]" +
"[ (?a rdf:type C3) <- (?a rdf:type C4) ]",
new Node[] { ty },
new Triple[] {
new Triple(a, ty, C1),
new Triple(b, ty, C2),
new Triple(c, ty, C3),
new Triple(d, ty, C4),
},
new Triple(Node.ANY, ty, C1),
new Object[] {
new Triple(a, ty, C1),
new Triple(b, ty, C1),
new Triple(c, ty, C1),
new Triple(d, ty, C1),
} );
}
/**
* Test RDFS example - branched version
*/
public void testRDFS2() {
doTest(
"[ (?a rdf:type C1) <- (?a rdf:type C2) ]" +
"[ (?a rdf:type C1) <- (?a rdf:type C3) ]" +
"[ (?a rdf:type C1) <- (?a rdf:type C4) ]",
new Node[] { ty },
new Triple[] {
new Triple(a, ty, C1),
new Triple(b, ty, C2),
new Triple(c, ty, C3),
new Triple(d, ty, C4),
},
new Triple(Node.ANY, ty, C1),
new Object[] {
new Triple(a, ty, C1),
new Triple(b, ty, C1),
new Triple(c, ty, C1),
new Triple(d, ty, C1),
} );
}
/**
* A problem from the original backchainer tests - interaction
* of tabling and functor expansion.
*/
public void testProblem1() {
doTest(
"[r1: (a q f(?x,?y)) <- (a s ?x), (a t ?y)]" +
"[r2: (a p ?x) <- (a q ?x)]" +
"[r3: (a r ?y) <- (a p f(?x, ?y))]",
new Node[] { p },
new Triple[] {
new Triple(a, s, b),
new Triple(a, t, c)
},
new Triple(a, r, Node.ANY),
new Object[] {
new Triple(a, r, c)
} );
}
/**
* A problem from the original backchainer tests - tabled closure operation.
*/
public void testProblem2() {
String ruleSrc =
"[rdfs8: (?a rdfs:subClassOf ?c) <- (?a rdfs:subClassOf ?b), (?b rdfs:subClassOf ?c)]" +
"[rdfs7: (?a rdfs:subClassOf ?a) <- (?a rdf:type rdfs:Class)]";
doTest( ruleSrc,
new Node[] { ty, sC },
new Triple[] {
new Triple(C1, sC, C2),
new Triple(C2, sC, C3),
new Triple(C1, ty, RDFS.Class.asNode()),
new Triple(C2, ty, RDFS.Class.asNode()),
new Triple(C3, ty, RDFS.Class.asNode())
},
new Triple(Node.ANY, sC, Node.ANY),
new Object[] {
new Triple(C1, sC, C2),
new Triple(C1, sC, C3),
new Triple(C1, sC, C1),
new Triple(C2, sC, C3),
new Triple(C2, sC, C2),
new Triple(C3, sC, C3)
} );
}
/**
* A problem from the original backchainer tests - bound/unbound primitives
*/
public void testProblem3() {
String rules = "[r1: (?x r ?y ) <- bound(?x), (?x p ?y) ]" +
"[r2: (?x r ?y) <- unbound(?x), (?x q ?y)]";
doTest(rules,
new Triple[] {
new Triple(a, p, b),
new Triple(a, q, c)
},
new Triple(a, r, Node.ANY),
new Object[] {
new Triple(a, r, b)
} );
doTest(rules,
new Triple[] {
new Triple(a, p, b),
new Triple(a, q, c)
},
new Triple(Node.ANY, r, Node.ANY),
new Object[] {
new Triple(a, r, c)
} );
}
/**
* A problem from the original backchainer tests - head unification test
*/
public void testProblem4() {
String rules = "[r1: (c r ?x) <- (?x p ?x)]" +
"[r2: (?x p ?y) <- (a q ?x), (b q ?y)]";
doTest(rules,
new Node[] { r, p },
new Triple[] {
new Triple(a, q, a),
new Triple(a, q, b),
new Triple(a, q, c),
new Triple(b, q, b),
new Triple(b, q, d),
},
new Triple(c, r, Node.ANY),
new Object[] {
new Triple(c, r, b)
} );
}
/**
* A problem from the original backchainer tests - RDFS example which threw an NPE
*/
public void testProblem5() {
String ruleSrc =
"[rdfs8: (?a rdfs:subClassOf ?c) <- (?a rdfs:subClassOf ?b), (?b rdfs:subClassOf ?c)]" +
"[rdfs9: (?a rdf:type ?y) <- (?x rdfs:subClassOf ?y), (?a rdf:type ?x)]" +
"[(rdf:type rdfs:range rdfs:Class) <-]" +
"[rdfs3: (?y rdf:type ?c) <- (?x ?p ?y), (?p rdfs:range ?c)]" +
"[rdfs7: (?a rdfs:subClassOf ?a) <- (?a rdf:type rdfs:Class)]";
doTest( ruleSrc,
new Node[] { ty, sC },
new Triple[] {
new Triple(p, sP, q),
new Triple(q, sP, r),
new Triple(C1, sC, C2),
new Triple(C2, sC, C3),
new Triple(a, ty, C1)
},
new Triple(a, ty, Node.ANY),
new Object[] {
new Triple(a, ty, C1),
new Triple(a, ty, C2),
new Triple(a, ty, C3)
} );
}
/**
* A problem from the original backchainer tests - RDFS example which threw an NPE
*/
public void testProblem6() {
String ruleSrc =
"[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)]";
doTest( ruleSrc,
new Node[] { ty, sC, OWL.equivalentClass.asNode() },
new Triple[] {
new Triple(a, ty, r),
new Triple(a, p, b),
new Triple(r, sC, C1),
new Triple(C1, ty, OWL.Restriction.asNode()),
new Triple(C1, OWL.onProperty.asNode(), p),
new Triple(C1, OWL.allValuesFrom.asNode(), c)
},
new Triple(b, ty, c),
new Object[] {
new Triple(b, ty, c)
} );
}
/**
* A problem from the original backchainer tests - incorrect additional deduction.
* Was due to interpeter setup failing to clone input variables.
*/
public void testProblem7() {
String ruleSrc =
"[rdfs8: (?a rdfs:subClassOf ?c) <- (?a rdfs:subClassOf ?b), (?b rdfs:subClassOf ?c)]" +
"[rdfs9: (?a rdf:type ?y) <- (?x rdfs:subClassOf ?y), (?a rdf:type ?x)]" +
// "[(rdf:type rdfs:range rdfs:Class) <-]" +
// "[rdfs3: (?y rdf:type ?c) <- (?x ?p ?y), (?p rdfs:range ?c)]" +
"[rdfs3: (?y rdf:type rdfs:Class) <- (?x rdf:type ?y)]" +
"[rdfs7: (?a rdfs:subClassOf ?a) <- (?a rdf:type rdfs:Class)]";
List rules = Rule.parseRules(ruleSrc);
Node[] tabled = new Node[] { ty, sC };
Triple[] triples = new Triple[] {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -