/*
* TestOntologyAPI.java
*
* Niraj Aswani, 09/March/07
*
* $Id: TestOntologyAPI.java 11600 2009-10-13 17:13:22Z johann_p $
*/
package gate.creole.ontology.owlim.test;
import gate.Executable;
import gate.creole.ExecutionException;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Set;
import gate.Factory;
import gate.FeatureMap;
import gate.Gate;
import gate.creole.ResourceInstantiationException;
import gate.creole.ontology.*;
import gate.util.Benchmark;
import java.util.HashSet;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
/**
* Simple test class that load an ontology available online and accesses
* its content via the ontology API
*/
public class TestOntologyAPI extends TestCase {
public static void main(String[] args) {
junit.textui.TestRunner.run(TestOntologyAPI.class);
}
File ontologiesDir = null;
File tmpDir = null;
Logger log = Logger.getLogger(this.getClass());
byte DIRECT_CLOSURE = OConstants.DIRECT_CLOSURE;
byte TRANSITIVE_CLOSURE = OConstants.TRANSITIVE_CLOSURE;
public TestOntologyAPI(String arg0) {
super(arg0);
}
protected void setUp() throws Exception {
super.setUp();
System.out.println("Starting up");
Gate.init();
File pluginHome =
new File(new File(Gate.getGateHome(), "plugins"),
"Ontology_OWLIM2");
System.out.println("Plugins Home is "+pluginHome.getAbsolutePath());
Gate.getCreoleRegister().registerDirectories(
pluginHome.toURI().toURL());
File testingDir = new File(pluginHome,"test");
assertTrue(testingDir.exists());
ontologiesDir = new File(testingDir, "ontologies");
tmpDir = getUniqueTmpDir();
assertTrue(tmpDir.canWrite());
System.out.println("Start up complete");
log.setLevel(Level.ALL);
BasicConfigurator.configure();
//log.info("This is for the logger!");
}
protected void tearDown() throws Exception {
super.tearDown();
// tmpDir.deleteOnExit();
FileUtils.deleteDirectory(tmpDir);
}
public void testAccessOldNew() throws MalformedURLException,
ResourceInstantiationException {
FeatureMap fm = Factory.newFeatureMap();
File demoFile = new File(ontologiesDir,"protonust.owl");
URL rdfXmlURL = demoFile.toURI().toURL();
fm.put("rdfXmlURL", rdfXmlURL);
Ontology ontology = (Ontology)Factory.createResource(
"gate.creole.ontology.owlim.OWLIMOntologyLR", fm);
long beginTime;
long elapsed1, elapsed2, elapsed3;
beginTime = System.nanoTime();
Set<OClass> classes = ontology.getOClasses(false);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### all classes: "+classes.size());
System.out.println("@@@@@ all classes: "+elapsed1);
assertEquals(252, classes.size());
beginTime = System.nanoTime();
classes = ontology.getOClasses(true);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### top classes: "+classes.size());
System.out.println("@@@@@ top classes: "+elapsed1);
assertEquals(15, classes.size());
beginTime = System.nanoTime();
Set<AnnotationProperty> anns = ontology.getAnnotationProperties();
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### ann props: "+anns.size());
System.out.println("@@@@@ ann props: "+elapsed1);
assertEquals(6, anns.size());
beginTime = System.nanoTime();
Set<DatatypeProperty> dats = ontology.getDatatypeProperties();
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### dat props: "+dats.size());
System.out.println("@@@@@ dat props: "+elapsed1);
assertEquals(11, dats.size());
beginTime = System.nanoTime();
Set<ObjectProperty> obs = ontology.getObjectProperties();
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### obj props: "+obs.size());
System.out.println("@@@@@ obj props: "+elapsed1);
assertEquals(43, obs.size());
beginTime = System.nanoTime();
@SuppressWarnings("deprecation")
Set<OInstance> insts = ontology.getOInstances();
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### insts: "+insts.size());
System.out.println("@@@@@ insts: "+elapsed1);
assertEquals(0, insts.size());
beginTime = System.nanoTime();
Set<RDFProperty> props = ontology.getPropertyDefinitions();
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### propdefs: "+props.size());
System.out.println("@@@@@ propdefs: "+elapsed1);
// assertEquals(0, insts.size());
beginTime = System.nanoTime();
Set<SymmetricProperty> symprops = ontology.getSymmetricProperties();
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### symprops: "+symprops.size());
System.out.println("@@@@@ symprops: "+elapsed1);
// assertEquals(0, insts.size());
/* this fails because of:
* gate.creole.ontology.owlim.ObjectPropertyImpl cannot be cast to gate.creole.ontology.TransitiveProperty
java.lang.ClassCastException: gate.creole.ontology.owlim.ObjectPropertyImpl cannot be cast to gate.creole.ontology.TransitiveProperty
at gate.creole.ontology.owlim.AbstractOWLIMOntologyImpl.getTransitiveProperties(AbstractOWLIMOntologyImpl.java:958)
at gate.creole.ontology.owlim.test.TestOntologyAPI.run_tests1(TestOntologyAPI.java:225)
at gate.creole.ontology.owlim.test.TestOntologyAPI.testWineOntology(TestOntologyAPI.java:164)
beginTime = System.nanoTime();
Set<TransitiveProperty> transprops = ontology.getTransitiveProperties();
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### symprops: "+transprops.size());
System.out.println("@@@@@ symprops: "+elapsed1);
// assertEquals(0, insts.size());
* */
OClass cBA = ontology.getOClass(
new URI("http://proton.semanticweb.org/2005/04/protonu#BusinessAbstraction",false));
assertNotNull(cBA);
beginTime = System.nanoTime();
classes = cBA.getSubClasses(TRANSITIVE_CLOSURE);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### BA subclasses all: "+classes.size());
System.out.println("@@@@@ BA subclasses all: "+elapsed1);
// assertEquals(0, insts.size());
beginTime = System.nanoTime();
classes = cBA.getSubClasses(DIRECT_CLOSURE);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### BA subclasses direct: "+classes.size());
System.out.println("@@@@@ BA subclasses direct: "+elapsed1);
// assertEquals(0, insts.size());
ontology.cleanup();
}
// testWineOntology: test ontology methods that were already present in the old
// implementation - output measurements and do some benchmarking so
// we can compare.
public void testWineOntology() throws MalformedURLException,
ResourceInstantiationException {
FeatureMap fm = Factory.newFeatureMap();
File demoFile = new File(ontologiesDir,"wine.rdfxml.owl");
URL rdfXmlURL = demoFile.toURI().toURL();
fm.put("rdfXmlURL", rdfXmlURL);
Ontology ontology = (Ontology)Factory.createResource(
"gate.creole.ontology.owlim.OWLIMOntologyLR", fm);
long beginTime;
long elapsed1;
beginTime = System.nanoTime();
Set<OClass> classes = ontology.getOClasses(false);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### all WINE classes: "+classes.size());
System.out.println("@@@@@ all WINE classes: "+elapsed1);
beginTime = System.nanoTime();
classes = ontology.getOClasses(true);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### top WINE classes: "+classes.size());
System.out.println("@@@@@ top WINE classes: "+elapsed1);
//System.out.println("Top wine classes: "+classes);
beginTime = System.nanoTime();
System.out.println("Starting to expand all classes ... ");
Set<URI> allIDs = new HashSet<URI>();
expandAllClasses(classes, allIDs, 0);
System.out.println("Exapnding classes complete");
System.out.println("##### expanded WINE classes: "+allIDs.size());
System.out.println("@@@@@ expanded WINE classes: "+elapsed1);
//List<URI> uriList = new ArrayList<URI>(allIDs);
//Collections.sort(uriList);
//for(URI u : uriList) {
// System.out.println("=== "+u);
//}
//assertEquals("Total number of wine classes and restrictions",542,allIDs.size());
ontology.cleanup();
}
public void test1Ontology() throws ResourceInstantiationException, MalformedURLException {
FeatureMap fm = Factory.newFeatureMap();
File demoFile = new File(ontologiesDir,"test1.rdfxml.owl");
URL rdfXmlURL = demoFile.toURI().toURL();
fm.put("rdfXmlURL", rdfXmlURL);
Ontology ontology = (Ontology)Factory.createResource(
"gate.creole.ontology.owlim.OWLIMOntologyLR", fm);
ontology.setDefaultNameSpace("http://dummyurl.com/20090825/test1.rdfxml.owl#");
long beginTime;
long elapsed1;
beginTime = System.nanoTime();
Set<OClass> classes = ontology.getOClasses(false);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### t1 all classes: "+classes.size());
System.out.println("@@@@@ t1 all classes: "+elapsed1);
System.out.println("T1 All classes: "+classes);
//assertEquals(252, classes.size());
beginTime = System.nanoTime();
classes = ontology.getOClasses(true);
elapsed1 = System.nanoTime() - beginTime;
System.out.println("##### t1 top classes: "+classes.size());
System.out.println("@@@@@ t1 top classes: "+elapsed1);
System.out.println("T1 Top classes: "+classes);
//assertEquals(15, classes.size());
OClass c02a = ontology.getOClass(getURI4Name(ontology,"Class02a"));
assertNotNull(c02a);
OInstance i1 = ontology.addOInstance(getURI4Name(ontology,"Ic02a01"), c02a);
assertNotNull(i1);
OClass c02b = ontology.getOClass(getURI4Name(ontology,"Class02b"));
assertNotNull(c02b);
// Class02b is asserted to be an equivalent class of Class02a so the
// newly added instance should also be an instance of c02b
Set<OInstance> is = ontology.getOInstances(c02b,TRANSITIVE_CLOSURE);
System.out.println("Instances of class02b: "+is);
System.out.println("Instances of c02b: "+is);
assertEquals(2, is.size());
i1 = is.iterator().next();
//String name = i1.getOU
//Set<OResource> x = new HashSet<OClass>();
// test deprecated getting resource by name
List<OResource> rs = ontology.getOResourcesByName("Animal");
for (OResource r : rs) {
System.out.println("Found resource: "+r+"/"+r.getClass().getName());
}
rs = ontology.getOResourcesByName("IPerson_02");
for (OResource r : rs) {
System.out.println("Found resource: "+r+"/"+r.getClass().getName());
}
rs = ontology.getOResourcesByName("iperson_02");
if(rs != null) {
for (OResource r : rs) {
System.out.println("Found resource: "+r+"/"+r.getClass().getName());
}
}
ontology.cleanup();
}
public void testMisc() throws ResourceInstantiationException, MalformedURLException {
FeatureMap fm = Factory.newFeatureMap();
//File demoFile = new File(ontologiesDir,"test1.rdfxml.owl");
//URL rdfXmlURL = demoFile.toURI().toURL();
//fm.put("rdfXmlURL", rdfXmlURL);
Ontology ontology = (Ontology)Factory.createResource(
"gate.creole.ontology.owlim.OWLIMOntologyLR", fm);
ontology.setDefaultNameSpace("http://dummyurl.com/20090825/testmisc.owl#");
AnnotationProperty anp1 = (AnnotationProperty)
ontology.getProperty(new URI("http://some.uri.com/yes#doesntexist", false));
System.out.println("Got the nonexistent property: "+anp1);
ontology.cleanup();
}
public void expandAllClasses(Set<OClass> classes, Set<URI> allIDs, int depth) {
depth = depth + 1;
if(depth > 9) {
// TODO: print everything about the node that gets us into a loop here!
assertTrue("Depth must not exceed 9",false);
}
if(classes.size() == 0) {
return;
}
//System.out.println("Expanding set: "+classes);
for (OClass c : classes) {
//System.out.println("Processing class: "+c);
URI n = c.getURI();
if(allIDs.contains(n)) {
//System.err.println("Node ID already found: "+n.toTurtle());
}
allIDs.add(n);
// get the set of direct subclasses of this class
Set<OClass> subclasses = c.getSubClasses(OConstants.DIRECT_CLOSURE);
//System.out.println("Subclasses for "+c+": "+subclasses);
expandAllClasses(subclasses,allIDs,depth);
}
}
protected File getUniqueTmpDir() {
String tmplocation = System.getProperty("run.java.io.tmpdir");
if(tmplocation == null) {
tmplocation = System.getProperty("java.io.tmpdir");
}
if(tmplocation == null) {
tmplocation = "/tmp";
}
if(tmplocation == null) {
System.err.println("Not temp-directory found, cannot continue");
System.exit(1);
}
File tmpdir = new File(tmplocation);
if(!tmpdir.exists()) {
System.err.println("Temp dir does not exist: "+tmpdir.getAbsolutePath());
System.exit(1);
}
String tmpString = Long.toString(System.currentTimeMillis(),36);
File uniqTmpDir = new File(tmpdir,"gate-towlim-"+tmpString);
uniqTmpDir.mkdir();
return uniqTmpDir;
}
protected OURI getURI(Ontology o, String uri) {
return new URI(uri, false);
}
protected OURI getURI4Name(Ontology o, String name) {
return new URI(o.getDefaultNameSpace()+name,false);
}
/** Test suite routine for the test runner */
public static Test suite() {
return new TestSuite(TestOntologyAPI.class);
} // suite
}