Log in Help
Print
Homereleasesgate-5.1-beta2-build3402-ALLpluginsOntologysrcgatecreoleontologyimpltest 〉 Test_OWLIMOntology.java
 
/*
 *  TestOntologyAPI.java
 *
 *  Niraj Aswani, 09/March/07
 *
 *  $Id: Test_OWLIMOntology.java 11600 2009-10-13 17:13:22Z johann_p $
 */
package gate.creole.ontology.impl.test;

import gate.creole.ontology.*;
import gate.util.GateException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
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.OConstants.Closure;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.log4j.Logger;

/**
 * Run all the essential regression tests for the OWLIMOntology LR.s
 */
public class Test_OWLIMOntology extends TestCase {
  public static void main(String[] args) throws GateException, MalformedURLException {
    System.out.println("Running main");
    junit.textui.TestRunner.run(Test_OWLIMOntology.class);
  }

  public Test_OWLIMOntology(String arg0) throws GateException, MalformedURLException {
    super(arg0);
  }

  File ontologiesDir = null;
  File configDir = null;
  File tmpDir = null;
  // TODO: it seems we cannot use a static as intended here: the
  // init code still gets run for each fixture?
  static boolean isInitialized = false;
  Logger log =  Logger.getLogger(this.getClass());
  OConstants.Closure DIRECT_CLOSURE = Closure.DIRECT_CLOSURE;
  OConstants.Closure TRANSITIVE_CLOSURE = Closure.TRANSITIVE_CLOSURE;

  // global preparation stuff - check if stuff already initialized, if
  // yes, do nothing
  protected void init() throws GateException, MalformedURLException {
    if(!isInitialized) {
    System.out.println("Inititalizing ...");
    Gate.init();
    File pluginHome =
        new File(new File(Gate.getGateHome(), "plugins"),
                 "Ontology");
    System.out.println("Plugin home directory is "+pluginHome.getAbsolutePath());
    Gate.getCreoleRegister().registerDirectories(
            pluginHome.toURI().toURL());
    File testingDir = new File(pluginHome,"test");
    assertTrue(testingDir.exists());
    ontologiesDir = new File(testingDir, "ontologies");
    assertTrue(ontologiesDir.exists());
    tmpDir = getUniqueTmpDir();
    assertTrue(tmpDir.canWrite());
    System.out.println("Init complete");
    } else {
      isInitialized = true;
    }
  }


  /**
   * per-test set up stuff
   * @throws Exception
   */
  protected void setUp() throws Exception {
    super.setUp();
    init();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

  // testLoadImports: test the loading of an existing ontology, finding the ontology
  // URI, import mappings, imports etc.
  public void testLoadImports() throws MalformedURLException,
          ResourceInstantiationException {
    FeatureMap fm = Factory.newFeatureMap();
    File demoFile = new File(ontologiesDir,"protonu.owl");
    URL rdfXmlURL = demoFile.toURI().toURL();
    fm.put("rdfXmlURL", rdfXmlURL);
    fm.put("baseURI", "");
    File mappingsFile = new File(ontologiesDir,"mappingsfile1.txt");
    URL mappingsFileURL = mappingsFile.toURI().toURL();
    fm.put("mappingsURL",mappingsFileURL);
    fm.put("persistent","false");
    fm.put("loadImports", "true");
    Ontology ontology = (Ontology)Factory.createResource(
            "gate.creole.ontology.impl.sesame.OWLIMOntology", fm);
    // we should now have the protou ontology loaded and the protons ontology
    // imported from the local directory. The protont import should have
    // been ignored, as specified in the mappings file.
    Set<OClass> allClasses = ontology.getOClasses(false);
    //for(OClass aClass : allClasses ) {
    //  System.out.println("Class: "+aClass+" / "+aClass.getONodeID().toTurtle());
    //}
    // Check if the Base URI was set from the loaded ontology
    System.out.println("Found default nameSpace: "+ontology.getDefaultNameSpace());
    assertEquals("Default Name Space",
        "http://proton.semanticweb.org/2005/04/protonu#",
        ontology.getDefaultNameSpace());
    //System.out.println("Found ontology URIs: "+ontology.getOntologyURIs());
    // make sure we find classes from protonu and protont, but not protons
    OClass c1 = ontology.getOClass(ontology.createOURIForName("SportEvent"));
    assertNotNull(c1);
    ontology.cleanup();
  }


  // testAccessOldNew: test ontology methods that were already present in the old
  // implementation - output measurements and do some benchmarking so
  // we can compare.
  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.impl.sesame.OWLIMOntology", fm);

    long beginTime;
    long elapsed1;

    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());
    //System.out.println("Classes: "+classes);


    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());

    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());

    OURI cBAURI = ontology.createOURIForName("BusinessAbstraction");
    //System.out.println("OUIR: "+cBAURI+" / "+cBAURI.toTurtle());
    OClass cBA = ontology.getOClass(cBAURI);
    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.getOResourcesWith(null, null);
    //ontology.getOResourcesWith(null, null);
    //ontology.getDistance(null, null);

    // TODO:
    // for a couple of classes, get all subclasses, direct subclasses
    //   get all superclasses ...

    ontology.cleanup();
  }

  public void testWineOntology() throws MalformedURLException,
          ResourceInstantiationException {
    FeatureMap fm = Factory.newFeatureMap();
    // For local wine:
    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.impl.sesame.OWLIMOntology", fm);

    // For remote wine:
    //fm.put("repositoryID","owlim-wine");
    //fm.put("repositoryLocation","http://localhost:8080/openrdf-sesame");
    //Ontology ontology = (Ontology)Factory.createResource(
    //        "gate.creole.ontology.impl.sesame.ConnectSesameOntology", 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 ... ");
    List<ONodeID> allIDs = new ArrayList<ONodeID>();
    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<ONodeID> uriList = new ArrayList<ONodeID>(allIDs);
    //Collections.sort(uriList);
    //for(ONodeID u : uriList) {
    //  System.out.println("=== "+u);
    //}

    // TODO: try to find the WineColor class ...
    OClass c1 = ontology.getOClass(getURI4Name(ontology,"WineColor"));
    assertNotNull("Find WineColor",c1);

    // TODO: what is the atual correct number of total and top wine classes to
    // expect, what is the number of instances and properties?
    //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.impl.sesame.OWLIMOntology", 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(3, is.size());

    i1 = is.iterator().next();

    is = ontology.getOInstances();
    System.out.println("All instances in ontology: "+is);
    System.out.println("Number of all instances: "+is.size());
    // the 30 from the stored ontology plus the one we created
    assertEquals(31,is.size());

    OInstance i2 = ontology.getOInstance(ontology.createOURIForName("IClass01_10"));
    assertNotNull(i2);
    Set<OClass> iclasses = i2.getOClasses(DIRECT_CLOSURE);
    System.out.println("Direct classes for IClass01_10: "+iclasses);
    assertEquals(2,iclasses.size());
    iclasses = i2.getOClasses(TRANSITIVE_CLOSURE);
    System.out.println("Transitive classes for IClass01_10: "+iclasses);

    OInstance i3 = ontology.getOInstance(ontology.createOURIForName("IPerson_01"));
    iclasses = i3.getOClasses(DIRECT_CLOSURE);
    System.out.println("Direct classes for IPerson_01: "+iclasses);
    iclasses = i3.getOClasses(TRANSITIVE_CLOSURE);
    System.out.println("Transitive classes for IPerson_01: "+iclasses);

    //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");
    for (OResource r : rs) {
      System.out.println("Found resource: "+r+"/"+r.getClass().getName());
    }

    String theQuery = "SELECT DISTINCT x,y " + " from {x} rdfs:subClassOf {y}";
    String queryResult = ontology.executeQuery(theQuery);
    //System.out.println("Query Result is: >"+queryResult+"<");
    ontology.cleanup();
  }

   public void testCreateModify() throws MalformedURLException,
          ResourceInstantiationException,
          FileNotFoundException,
          IOException {
    FeatureMap fm = Factory.newFeatureMap();
    Ontology ontology = (Ontology)Factory.createResource(
            "gate.creole.ontology.impl.sesame.OWLIMOntology", fm);

    long beginTime;
    long elapsed1;

    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(0, classes.size());

    // set the Base URI
    ontology.setDefaultNameSpace("http://gate.ac.uk/Ontology/testCreateModify/#");
    // create some classes
    ontology.addOClass(getURI4Name(ontology,"Class01"));
    OClass c02 = ontology.addOClass(getURI4Name(ontology,"Class02"));
    assertNotNull(c02);
    OClass c0201 = ontology.addOClass(getURI4Name(ontology,"Class0201"));
    assertNotNull(c0201);
    c02.addSubClass(c0201);
    OClass c020101 = ontology.addOClass(getURI4Name(ontology,"Class020101"));
    assertNotNull(c020101);
    c0201.addSubClass(c020101);


    beginTime = System.nanoTime();
    classes = ontology.getOClasses(false);
    elapsed1 = System.nanoTime() - beginTime;
    System.out.println("##### all classes: "+classes.size());
    System.out.println("@@@@@ all classes: "+elapsed1);
    assertEquals(4, classes.size());

    OClass c02b = ontology.getOClass(getURI4Name(ontology,"Class02"));
    assertNotNull("Find Class02 again",c02b);

    beginTime = System.nanoTime();
    classes = c02b.getSubClasses(DIRECT_CLOSURE);
    elapsed1 = System.nanoTime() - beginTime;
    System.out.println("##### c02 sub classes: "+classes.size());
    System.out.println("@@@@@ c02 sub classes: "+elapsed1);
    assertEquals(1, classes.size());

    beginTime = System.nanoTime();
    classes = c02b.getSubClasses(TRANSITIVE_CLOSURE);
    elapsed1 = System.nanoTime() - beginTime;
    System.out.println("##### c02 all classes: "+classes.size());
    System.out.println("@@@@@ c02 all classes: "+elapsed1);
    assertEquals(2, classes.size());

    // add annotation, datatype, object properties, subproperties,
    // transitive properties
    // instances
    // restrictions

    // delete some of the stuff added and see if it is gone



    // save to the tmp dir
    File savedOntology = new File(tmpDir,"testCreateModify.rdfxml.owl");
    FileOutputStream os = new FileOutputStream(savedOntology);
    ontology.writeOntologyData(os, OConstants.OntologyFormat.RDFXML, false);
    os.close();
    File savedOntologyT = new File(tmpDir,"testCreateModify.turtle.owl");
    os = new FileOutputStream(savedOntologyT);
    ontology.writeOntologyData(os, OConstants.OntologyFormat.TURTLE, false);
    os.close();
    savedOntologyT = new File(tmpDir,"testCreateModifyWithImports.turtle.owl");
    os = new FileOutputStream(savedOntologyT);
    ontology.writeOntologyData(os, OConstants.OntologyFormat.TURTLE, true);
    os.close();

    ontology.cleanup();

    //////////////////////////////////////////////////
    URL savedOntoURL = savedOntology.toURI().toURL();
    fm.put("rdfXmlURL", savedOntoURL);
    ontology = (Ontology)Factory.createResource(
            "gate.creole.ontology.impl.sesame.OWLIMOntology", fm);
    ontology.setDefaultNameSpace("http://gate.ac.uk/Ontology/testCreateModify/#");

    beginTime = System.nanoTime();
    classes = ontology.getOClasses(false);
    elapsed1 = System.nanoTime() - beginTime;
    System.out.println("##### 2 all classes: "+classes.size());
    System.out.println("@@@@@ 2 all classes: "+elapsed1);
    assertEquals(4, classes.size());

    c02b = ontology.getOClass(getURI4Name(ontology,"Class02"));
    assertNotNull("Find Class02 again",c02b);

    beginTime = System.nanoTime();
    classes = c02b.getSubClasses(DIRECT_CLOSURE);
    elapsed1 = System.nanoTime() - beginTime;
    System.out.println("##### c02 sub classes: "+classes.size());
    System.out.println("@@@@@ c02 sub classes: "+elapsed1);
    assertEquals(1, classes.size());

    beginTime = System.nanoTime();
    classes = c02b.getSubClasses(TRANSITIVE_CLOSURE);
    elapsed1 = System.nanoTime() - beginTime;
    System.out.println("##### c02 all classes: "+classes.size());
    System.out.println("@@@@@ c02 all classes: "+elapsed1);
    assertEquals(2, classes.size());


    ontology.cleanup();


   }



  // ***************************************************************
  // ************************** HELPER METHODS 
  // ***************************************************************

  // this is for testing if we can recursively expand all classes  and
  // to see how many distinct IDs we find that way
   // for each of the classes in the parameter, do a depth first exapansion
   // of direct subclasses until we do not get any more.
   // For each path down the subclass hierarchy, remember the IDs and
   // check if we have already seen such an ID
  public void expandAllClasses(Set<OClass> classes, List<ONodeID> allIDs, int depth) {
    depth = depth + 1;
    if(depth > 10) {
      // TODO: print everything about the node that gets us into a loop here!
      assertTrue("Depth must not exceed 10",false);
    }
    if(classes.size() == 0) {
      return;
    }
    //System.out.println("Expanding set: "+classes);
    for (OClass c : classes) {

      //System.out.println("Processing class: "+c);
      ONodeID n = c.getONodeID();
      if(allIDs.contains(n)) {

        System.err.println("Node ID already found: "+n);
        System.err.println("Class is "+c.getClass().getName());
        System.err.println("Equivalent classes: "+c.getEquivalentClasses());
        System.err.println("SubClasses: "+c.getSubClasses(DIRECT_CLOSURE));
        System.err.println("Expanding this set: "+classes);
        System.err.println("Seen Nodes: "+allIDs);

      }
      // get the set of direct subclasses of this class
      // only expand if it is not an anonymous class
      //if(! (c instanceof AnonymousClass)) {
        Set<OClass> subclasses = c.getSubClasses(OConstants.Closure.DIRECT_CLOSURE);
        // check the subclasses ...
        if(subclasses.contains(c)) {
          System.out.println("Subclass of itself: "+c);
          assertTrue(false);
        }
        //System.out.println("Subclasses for "+c+": "+subclasses);
        List<ONodeID> newlist = new ArrayList<ONodeID>(allIDs);
        newlist.add(n);
        expandAllClasses(subclasses,newlist,depth);
      //}
    }
  }
  public void expandAllClassesOLD(Set<OClass> classes, Set<ONodeID> allIDs, int depth) {
    depth = depth + 1;
    if(depth > 10) {
      // TODO: print everything about the node that gets us into a loop here!
      assertTrue("Depth must not exceed 10",false);
    }
    if(classes.size() == 0) {
      return;
    }
    //System.out.println("Expanding set: "+classes);
    for (OClass c : classes) {
      //System.out.println("Processing class: "+c);
      ONodeID n = c.getONodeID();
      if(allIDs.contains(n)) {

        System.err.println("Node ID already found: "+n);
        System.err.println("Class is "+c.getClass().getName());
        System.err.println("Equivalent classes: "+c.getEquivalentClasses());
        System.err.println("SubClasses: "+c.getSubClasses(DIRECT_CLOSURE));
        System.err.println("Expanding this set: "+classes);
        System.err.println("Seen Nodes: "+allIDs);

      }
      allIDs.add(n);
      // get the set of direct subclasses of this class
      // only expand if it is not an anonymous class
      //if(! (c instanceof AnonymousClass)) {
        Set<OClass> subclasses = c.getSubClasses(OConstants.Closure.DIRECT_CLOSURE);
        // check the subclasses ...
        if(subclasses.contains(c)) {
          System.out.println("Subclass of itself: "+c);
          assertTrue(false);
        }
        //System.out.println("Subclasses for "+c+": "+subclasses);
        expandAllClassesOLD(subclasses,allIDs,depth);
      //}
    }
  }

  protected static 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 o.createOURI(uri);
  }

  protected OURI getURI4Name(Ontology o, String uri) {
    return o.createOURIForName(uri);
  }

  /** Test suite routine for the test runner */
  public static Test suite() {
    System.out.println("Running suite");
    return new TestSuite(Test_OWLIMOntology.class);
  } // suite
}