📄 testbasiclp.java
字号:
/******************************************************************
* File: TestBasicLP.java
* Created by: Dave Reynolds
* Created on: 22-Jul-2003
*
* (c) Copyright 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* [See end of file]
* $Id: TestBasicLP.java,v 1.16 2007/01/11 17:18:18 der Exp $
*****************************************************************/
package com.hp.hpl.jena.reasoner.rulesys.test;
import java.util.*;
import com.hp.hpl.jena.graph.*;
import com.hp.hpl.jena.reasoner.*;
import com.hp.hpl.jena.reasoner.rulesys.*;
import com.hp.hpl.jena.reasoner.test.TestUtil;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import com.hp.hpl.jena.vocabulary.*;
import java.io.*;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Early test cases for the LP version of the backward chaining system.
* <p>
* To be moved to a test directory once the code is working.
* </p>
* @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
* @version $Revision: 1.16 $ on $Date: 2007/01/11 17:18:18 $
*/
public class TestBasicLP extends TestCase {
// Useful constants
Node p = Node.createURI("p");
Node q = Node.createURI("q");
Node r = Node.createURI("r");
Node s = Node.createURI("s");
Node t = Node.createURI("t");
Node u = Node.createURI("u");
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 C1 = Node.createURI("C1");
Node C2 = Node.createURI("C2");
Node C3 = Node.createURI("C3");
Node C4 = Node.createURI("C4");
Node D1 = Node.createURI("D1");
Node D2 = Node.createURI("D2");
Node D3 = Node.createURI("D3");
Node sP = RDFS.Nodes.subPropertyOf;
Node sC = RDFS.Nodes.subClassOf;
Node ty = RDF.Nodes.type;
/**
* Boilerplate for junit
*/
public TestBasicLP( String name ) {
super( name );
}
/**
* Boilerplate for junit.
* This is its own test suite
*/
public static TestSuite suite() {
// return new TestSuite( TestBasicLP.class );
TestSuite suite = new TestSuite();
suite.addTest(new TestBasicLP( "testCME" ));
return suite;
}
/**
* Return an inference graph working over the given rule set and raw data.
* Can be overridden by subclasses of this test class.
* @param rules the rule set to use
* @param data the graph of triples to process
*/
public InfGraph makeInfGraph(List rules, Graph data) {
FBRuleReasoner reasoner = new FBRuleReasoner(rules);
FBRuleInfGraph infgraph = (FBRuleInfGraph) reasoner.bind(data);
// infgraph.setTraceOn(true);
return infgraph;
}
/**
* Return an inference graph working over the given rule set and raw data.
* Can be overridden by subclasses of this test class.
* @param rules the rule set to use
* @param data the graph of triples to process
* @param tabled an array of predicates that should be tabled
*/
public InfGraph makeInfGraph(List rules, Graph data, Node[] tabled) {
FBRuleReasoner reasoner = new FBRuleReasoner(rules);
FBRuleInfGraph infgraph = (FBRuleInfGraph) reasoner.bind(data);
for (int i = 0; i < tabled.length; i++) {
infgraph.setTabled(tabled[i]);
}
return infgraph;
}
/**
* Test basic rule operations - lookup, no matching rules
*/
public void testBaseRules1() {
doBasicTest("[r1: (?x r c) <- (?x p b)]",
new Triple(Node.ANY, p, b),
new Object[] {
new Triple(a, p, b)
} );
}
/**
* Test basic rule operations - simple chain rule
*/
public void testBaseRules2() {
doBasicTest("[r1: (?x r c) <- (?x p b)]",
new Triple(Node.ANY, r, c),
new Object[] {
new Triple(a, r, c)
} );
}
/**
* Test basic rule operations - chain rule with head unification
*/
public void testBaseRules3() {
doBasicTest("[r1: (?x r ?x) <- (?x p b)]",
new Triple(Node.ANY, r, a),
new Object[] {
new Triple(a, r, a)
} );
}
/**
* Test basic rule operations - rule with head unification, non-temp var
*/
public void testBaseRules4() {
doBasicTest("[r1: (?x r ?x) <- (?y p b), (?x p b)]",
new Triple(Node.ANY, r, a),
new Object[] {
new Triple(a, r, a)
} );
}
/**
* Test basic rule operations - simple cascade
*/
public void testBaseRules5() {
doBasicTest("[r1: (?x q ?y) <- (?x r ?y)(?y s ?x)]" +
"[r2: (?x r ?y) <- (?x p ?y)]" +
"[r3: (?x s ?y) <- (?y p ?x)]",
new Triple(Node.ANY, q, Node.ANY),
new Object[] {
new Triple(a, q, b)
} );
}
/**
* Test basic rule operations - chain rule which will fail at head time
*/
public void testBaseRules6() {
doBasicTest("[r1: (?x r ?x) <- (?x p b)]",
new Triple(a, r, b),
new Object[] {
} );
}
/**
* Test basic rule operations - chain rule which will fail in search
*/
public void testBaseRules7() {
doBasicTest("[r1: (?x r ?y) <- (?x p c)]",
new Triple(a, r, b),
new Object[] {
} );
}
/**
* Test basic rule operations - simple chain
*/
public void testBaseRules8() {
doBasicTest("[r1: (?x q ?y) <- (?x r ?y)]" +
"[r2: (?x r ?y) <- (?x p ?y)]",
new Triple(Node.ANY, q, Node.ANY),
new Object[] {
new Triple(a, q, b)
} );
}
/**
* Test basic rule operations - simple chain
*/
public void testBaseRules9() {
doBasicTest("[r1: (?x q ?y) <- (?x r ?y)]" +
"[r2: (?x r ?y) <- (?y p ?x)]",
new Triple(Node.ANY, q, Node.ANY),
new Object[] {
new Triple(b, q, a)
} );
}
/**
* Test backtracking - simple triple query.
*/
public void testBacktrack1() {
doTest("[r1: (?x r ?y) <- (?x p ?y)]",
new Triple[] {
new Triple(a, p, b),
new Triple(a, p, c),
new Triple(a, p, d)
},
new Triple(a, p, Node.ANY),
new Object[] {
new Triple(a, p, b),
new Triple(a, p, c),
new Triple(a, p, d)
} );
}
/**
* Test backtracking - chain to simple triple query.
*/
public void testBacktrack2() {
doTest("[r1: (?x r ?y) <- (?x p ?y)]",
new Triple[] {
new Triple(a, p, b),
new Triple(a, p, c),
new Triple(a, p, d)
},
new Triple(a, r, Node.ANY),
new Object[] {
new Triple(a, r, b),
new Triple(a, r, c),
new Triple(a, r, d)
} );
}
/**
* Test backtracking - simple choice point
*/
public void testBacktrack3() {
doTest("[r1: (?x r C1) <- (?x p b)]" +
"[r2: (?x r C2) <- (?x p b)]" +
"[r3: (?x r C3) <- (?x p b)]",
new Triple[] {
new Triple(a, p, b)
},
new Triple(a, r, Node.ANY),
new Object[] {
new Triple(a, r, C1),
new Triple(a, r, C2),
new Triple(a, r, C3)
} );
}
/**
* Test backtracking - nested choice point
*/
public void testBacktrack4() {
doTest("[r1: (?x r C1) <- (?x p b)]" +
"[r2: (?x r C2) <- (?x p b)]" +
"[r3: (?x r C3) <- (?x p b)]" +
"[r4: (?x s ?z) <- (?x p ?w), (?x r ?y) (?y p ?z)]",
new Triple[] {
new Triple(a, p, b),
new Triple(C1, p, D1),
new Triple(C2, p, D2),
new Triple(C3, p, D3)
},
new Triple(a, s, Node.ANY),
new Object[] {
new Triple(a, s, D1),
new Triple(a, s, D2),
new Triple(a, s, D3)
} );
}
/**
* Test backtracking - nested choice point with multiple triple matches
*/
public void testBacktrack5() {
doTest("[r1: (?x r C3) <- (C1 p ?x)]" +
"[r2: (?x r C2) <- (C2 p ?x)]" +
"[r4: (?x s ?y) <- (?x r ?y)]",
new Triple[] {
new Triple(C1, p, D1),
new Triple(C1, p, a),
new Triple(C2, p, D2),
new Triple(C2, p, b)
},
new Triple(Node.ANY, s, Node.ANY),
new Object[] {
new Triple(D1, s, C3),
new Triple(a, s, C3),
new Triple(D2, s, C2),
new Triple(b, s, C2)
} );
}
/**
* Test backtracking - nested choice point with multiple triple matches, and
* checking temp v. permanent variable usage
*/
public void testBacktrack6() {
doTest("[r1: (?x r C1) <- (?x p a)]" +
"[r2: (?x r C2) <- (?x p b)]" +
"[r3: (?x q C1) <- (?x p b)]" +
"[r4: (?x q C2) <- (?x p a)]" +
"[r5: (?x s ?y) <- (?x r ?y) (?x q ?y)]",
new Triple[] {
new Triple(D1, p, a),
new Triple(D2, p, a),
new Triple(D2, p, b),
new Triple(D3, p, b)
},
new Triple(Node.ANY, s, Node.ANY),
new Object[] {
new Triple(D2, s, C1),
new Triple(D2, s, C2),
} );
}
/**
* Test backtracking - nested choice point with simple triple matches
*/
public void testBacktrack7() {
doTest( "[r1: (?x r C1) <- (?x p b)]" +
"[r2: (?x r C2) <- (?x p b)]" +
"[r3: (?x r C3) <- (?x p b)]" +
"[r3: (?x r D1) <- (?x p b)]" +
"[r4: (?x q C2) <- (?x p b)]" +
"[r5: (?x q C3) <- (?x p b)]" +
"[r5: (?x q D1) <- (?x p b)]" +
"[r6: (?x t C1) <- (?x p b)]" +
"[r7: (?x t C2) <- (?x p b)]" +
"[r8: (?x t C3) <- (?x p b)]" +
"[r9: (?x s ?y) <- (?x r ?y) (?x q ?y) (?x t ?y)]",
new Triple[] {
new Triple(a, p, b),
},
new Triple(Node.ANY, s, Node.ANY),
new Object[] {
new Triple(a, s, C2),
new Triple(a, s, C3),
} );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -