📄 wgreasonertester.java
字号:
/******************************************************************
* File: WGReasonerTester.java
* Created by: Dave Reynolds
* Created on: 09-Feb-03
*
* (c) Copyright 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* [See end of file]
* $Id: WGReasonerTester.java,v 1.28 2007/01/02 11:50:50 andy_seaborne Exp $
*****************************************************************/
package com.hp.hpl.jena.reasoner.test;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.graph.*;
import com.hp.hpl.jena.graph.query.*;
import com.hp.hpl.jena.rdf.model.impl.PropertyImpl;
import com.hp.hpl.jena.rdf.model.impl.ResourceImpl;
import com.hp.hpl.jena.reasoner.*;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.rdf.arp.test.ARPTests;
import com.hp.hpl.jena.shared.*;
import junit.framework.TestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.*;
import java.util.*;
import java.net.*;
/**
* A utility to support execution of the RDFCode working group entailment
* tests as specified in <a href="http://www.w3.org/TR/2003/WD-rdf-testcases-20030123/">
* http://www.w3.org/TR/2003/WD-rdf-testcases-20030123/</a>.
*
* <p>The manifest file defines a set of tests. Only the positive and negative
* entailment tests are handled by this utility. Each test defines a set
* of data files to load. For normal positive entailment tests we check each
* triple in the conclusions file to ensure it is included in the inferred
* graph. For postive entailment tests which are supposed to entail the
* false document we run an additional validation check. For
* negative entailment tests which tests all triples in the non-conclusions file
* and check that at least one trile is missing. </p>
*
* @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
* @version $Revision: 1.28 $ on $Date: 2007/01/02 11:50:50 $
*/
public class WGReasonerTester {
/** The namespace for the test specification schema */
public static final String NS = "http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#";
/** The base URI in which the files are purported to reside */
public static final String BASE_URI = "http://www.w3.org/2000/10/rdf-tests/rdfcore/";
/** Default location for the test data */
public static final String DEFAULT_BASE_DIR = "testing/wg/";
/** The base directory in which the test data is actually stored */
final protected String baseDir;
/** The rdf class for positive tests */
public static final Resource PositiveEntailmentTest;
/** The rdf class for positive tests */
public static final Resource NegativeEntailmentTest;
/** The constant used to indicate an invalid document */
public static final Resource FalseDocument;
/** The predicate defining the description of the test */
public static final Property descriptionP;
/** The predicate defining the status of the test */
public static final Property statusP;
/** The predicate defining the rule sets used */
public static final Property entailmentRulesP;
/** The predicate defining a premise for the test */
public static final Property premiseDocumentP;
/** The predicate defining the conclusion from the test */
public static final Property conclusionDocumentP;
/** The type of the current test */
Resource testType;
/** List of tests block because they are only intended for non-dt aware processors */
public static final String[] blockedTests = {
BASE_URI + "datatypes/Manifest.rdf#language-important-for-non-dt-entailment-1",
BASE_URI + "datatypes/Manifest.rdf#language-important-for-non-dt-entailment-2",
// Additional blocked tests, because we do not implement them ... jjc
BASE_URI + "pfps-10/Manifest.rdf#non-well-formed-literal-1",
BASE_URI + "xmlsch-02/Manifest.rdf#whitespace-facet-3",
// BASE_URI + "xmlsch-02/Manifest.rdf#whitespace-facet-2",
// BASE_URI + "xmlsch-02/Manifest.rdf#whitespace-facet-1",
// BASE_URI + "datatypes-intensional/Manifest.rdf#xsd-integer-string-incompatible",
};
// Static initializer for the predicates
static {
PositiveEntailmentTest = new ResourceImpl(NS, "PositiveEntailmentTest");
NegativeEntailmentTest = new ResourceImpl(NS, "NegativeEntailmentTest");
FalseDocument = new ResourceImpl(NS, "False-Document");
descriptionP = new PropertyImpl(NS, "description");
statusP = new PropertyImpl(NS, "status");
entailmentRulesP = new PropertyImpl(NS, "entailmentRules");
premiseDocumentP = new PropertyImpl(NS, "premiseDocument");
conclusionDocumentP = new PropertyImpl(NS, "conclusionDocument");
}
/** The rdf defining all the tests to be run */
protected Model testManifest;
protected static Log logger = LogFactory.getLog(WGReasonerTester.class);
/**
* Constructor.
* @param manifest the name of the manifest file defining these
* tests - relative to baseDir
* @param baseDir override default base directory for the tests and manifest
*/
public WGReasonerTester(String manifest, String baseDir) throws IOException {
this.baseDir = baseDir;
testManifest = loadFile(manifest);
}
/**
* Constructor.
* @param manifest the name of the manifest file defining these
* tests - relative to baseDir
*/
public WGReasonerTester(String manifest) throws IOException {
this(manifest, DEFAULT_BASE_DIR);
}
/**
* Utility to load a file in rdf/nt/n3 format as a Model.
* Files are assumed to be relative to the BASE_URI.
* @param file the file name, relative to baseDir
* @return the loaded Model
*/
public Model loadFile(String file) throws IOException {
String langType = "RDF/XML";
if (file.endsWith(".nt")) {
langType = "N-TRIPLE";
} else if (file.endsWith("n3")) {
langType = "N3";
}
Model result = ModelFactory.createNonreifyingModel();
String fname = file;
if (fname.startsWith(BASE_URI)) {
fname = fname.substring(BASE_URI.length());
}
/* Change note - jjc
* Now use InputStream instead of Reader (general hygine).
* Also treat http:.... as URL not local file.
*/
InputStream in;
if ( baseDir.startsWith("http:")) {
in = new URL(baseDir+fname).openStream();
} else {
in = new FileInputStream(baseDir + fname);
}
in = new BufferedInputStream(in);
result.read(in, BASE_URI + fname, langType);
return result;
}
/**
* Load the datafile given by the property name.
* @param test the test being processed
* @param predicate the property of the test giving the file name to load
* @return a graph containing the file contents or an empty graph if the property
* is not present
* @throws IOException if the property is present but the file can't be found
*/
private Graph loadTestFile(Resource test, Property predicate) throws IOException {
if (test.hasProperty(predicate)) {
String fileName = test.getRequiredProperty(predicate).getObject().toString();
return loadFile(fileName).getGraph();
} else {
return Factory.createGraphMem();
}
}
/**
* Run all the tests in the manifest
* @param reasonerF the factory for the reasoner to be tested
* @param testcase the JUnit test case which is requesting this test
* @param configuration optional configuration information
* @return true if all the tests pass
* @throws IOException if one of the test files can't be found
* @throws RDFException if the test can't be found or fails internally
*/
public boolean runTests(ReasonerFactory reasonerF, TestCase testcase, Resource configuration) throws IOException {
for (Iterator i = listTests().iterator(); i.hasNext(); ) {
String test = (String)i.next();
if (!runTest(test, reasonerF, testcase, configuration)) return false;
}
return true;
}
/**
* Return a list of all test names defined in the manifest for this test harness.
*/
public List listTests() {
List testList = new ArrayList();
ResIterator tests = testManifest.listSubjectsWithProperty(RDF.type, PositiveEntailmentTest);
while (tests.hasNext()) {
testList.add(tests.next().toString());
}
tests = testManifest.listSubjectsWithProperty(RDF.type, NegativeEntailmentTest);
while (tests.hasNext()) {
testList.add(tests.next().toString());
}
return testList;
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -