Log in Help
Print
Homereleasesgate-5.1-beta2-build3402-ALLpluginsOntologysrcgatecreoleontologyimplsesame 〉 AbstractOntologyImplSesame.java
 
/*
 *  Copyright (c) 1998-2009, The University of Sheffield.
 *
 *  This file is part of GATE (see http://gate.ac.uk/), and is free
 *  software, licenced under the GNU Library General Public License,
 *  Version 2, June 1991 (in the distribution as file licence.html,
 *  and also available at http://gate.ac.uk/gate/licence.html).
 *
 *  Johann Petrak 2009-08-13
 *
 *  $Id: AbstractOntologyImplSesame.java 11598 2009-10-13 13:44:17Z johann_p $
 */
package gate.creole.ontology.impl.sesame;

import gate.creole.ontology.GateOntologyException;
import gate.creole.ontology.OBNodeID;
import gate.creole.ontology.OConstants;
import gate.creole.ontology.OConstants.OntologyFormat;
import gate.creole.ontology.OConstants.QueryLanguage;
import gate.creole.ontology.OURI;
import gate.creole.ontology.OntologyBooleanQuery;
import gate.creole.ontology.OntologyTupleQuery;
import gate.creole.ontology.impl.AbstractOntologyImpl;
import gate.creole.ontology.impl.Utils;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.util.Set;

/**
 *
 * @author johann
 */
public abstract class AbstractOntologyImplSesame extends AbstractOntologyImpl {


  public void readOntologyData(java.net.URL theURL, String baseURI,
      OConstants.OntologyFormat format, boolean asImport) {
    InputStream is;
    try {
      is = theURL.openStream();
    } catch (IOException ex) {
      throw new GateOntologyException("Problem reading from URL " + theURL, ex);
    }
    boolean isBaseURIset = true;
    if(baseURI == null || baseURI.length() == 0) {
      isBaseURIset = false;
      baseURI = OConstants.ONTOLOGY_DEFAULT_BASE_URI;
    }
    ((OntologyServiceImplSesame) ontologyService).readOntologyData(is,
        baseURI, format, asImport);
    try {
      is.close();
    } catch (IOException ex) {
      throw new GateOntologyException("Problem closing stream from URL " + theURL, ex);
    }
    if(!asImport) {
      if(isBaseURIset && getDefaultNameSpace() == null) {
        setDefaultNameSpace(baseURI);
      }
      Set<OURI> us = addOntologyURIs();
      int n = us.size();
      if(n == 0) {
        Utils.warning("No ontology URI found for ontology loaded from "+theURL);
      } else if(n > 1) {
        Utils.warning("More than one("+n+") ontology URI found for ontology loaded from "+theURL+": "+us);
      } else {
        setDefaultNameSpaceFromOntologyURI();
      }
    }
  }

  public void readOntologyData(File selectedFile, String baseURI,
      OConstants.OntologyFormat format, boolean asImport) {
    boolean isBaseURIset = true;
    if(baseURI == null || baseURI.length() == 0) {
      isBaseURIset = false;
      baseURI = OConstants.ONTOLOGY_DEFAULT_BASE_URI;
    }
   ((OntologyServiceImplSesame) ontologyService).readOntologyData(selectedFile,
        baseURI, format, asImport);
    if(!asImport) {
      if(isBaseURIset && getDefaultNameSpace() == null) {
        setDefaultNameSpace(baseURI);
      }
      Set<OURI> us = addOntologyURIs();
      int n = us.size();
      if(n == 0) {
        Utils.warning("No ontology URI found for ontology loaded from "+selectedFile.getAbsolutePath());
      } else if(n > 1) {
        Utils.warning("More than one("+n+") ontology URI found for ontology loaded from "+selectedFile.getAbsolutePath()+": "+us);
      } else {
        setDefaultNameSpaceFromOntologyURI();
      }
    }
  }

  public void readOntologyData(Reader in, String baseURI, OntologyFormat format,
      boolean asImport) {
    boolean isBaseURIset = true;
    if(baseURI == null || baseURI.length() == 0) {
      isBaseURIset = false;
      baseURI = OConstants.ONTOLOGY_DEFAULT_BASE_URI;
    }
    ((OntologyServiceImplSesame) ontologyService).readOntologyData(in,
        baseURI, format, asImport);
    if(!asImport) {
      if(isBaseURIset && getDefaultNameSpace() == null) {
        setDefaultNameSpace(baseURI);
      }
      Set<OURI> us = addOntologyURIs();
      int n = us.size();
      if(n == 0) {
        Utils.warning("No ontology URI found for ontology loaded");
      } else if(n > 1) {
        Utils.warning("More than one("+n+") ontology URI found for ontology loaded: "+us);
      } else {
        setDefaultNameSpaceFromOntologyURI();
      }
    }
  }

  public void readOntologyData(InputStream in, String baseURI,
      OntologyFormat format, boolean asImport) {
    boolean isBaseURIset = true;
    if(baseURI == null || baseURI.length() == 0) {
      isBaseURIset = false;
      baseURI = OConstants.ONTOLOGY_DEFAULT_BASE_URI;
    }
    ((OntologyServiceImplSesame) ontologyService).readOntologyData(in,
        baseURI, format, asImport);
    if(!asImport) {
      if(isBaseURIset && getDefaultNameSpace() == null) {
        setDefaultNameSpace(baseURI);
      }
      Set<OURI> us = addOntologyURIs();
      int n = us.size();
      if(n == 0) {
        Utils.warning("No ontology URI found for ontology loaded");
      } else if(n > 1) {
        Utils.warning("More than one("+n+") ontology URI found for ontology loaded: "+us);
      } else {
        setDefaultNameSpaceFromOntologyURI();
      }
    }
  }

  private void setDefaultNameSpaceFromOntologyURI() {
    if(getDefaultNameSpace() == null && getOntologyURIs().size() == 1) {
      String uri = getOntologyURIs().get(0).toString();
      if(!uri.endsWith("#")) {
        uri = uri + "#";
      }
      setDefaultNameSpace(uri);
    }
  }

  public void writeOntologyData(File selectedFile,
      OConstants.OntologyFormat format, boolean includeImports) {
    FileWriter fw;
    try {
      fw = new FileWriter(selectedFile);
    } catch (IOException ex) {
      throw new GateOntologyException("Could not open writer for file " +
          selectedFile.getAbsolutePath(), ex);
    }
    ((OntologyServiceImplSesame) ontologyService).writeOntologyData(fw,
        format, includeImports);
  }

  public void writeOntologyData(OutputStream out, OntologyFormat format,
      boolean includeImports) {
    ((OntologyServiceImplSesame) ontologyService).writeOntologyData(out,
        format, includeImports);
  }

  public void writeOntologyData(Writer out, OntologyFormat format,
      boolean includeImports) {
    ((OntologyServiceImplSesame) ontologyService).writeOntologyData(out,
        format, includeImports);
  }

  /**
   * Load the system imports into a repository that does not have them
   * loaded yet.
   */
  public void loadSystemImports() {
    File pluginDir = getPluginDir();
    File owlFile = new File(new File(pluginDir, "config"), "owl.rdfs");
    ((OntologyServiceImplSesame) ontologyService).loadSystemImport(owlFile,
        "http://www.w3.org/2002/07/owl#", OConstants.OntologyFormat.RDFXML);
    File rdfsFile = new File(new File(pluginDir, "config"), "rdf-schema.rdf");
    ((OntologyServiceImplSesame) ontologyService).loadSystemImport(rdfsFile,
        "http://www.w3.org/2000/01/rdf-schema#", OConstants.OntologyFormat.RDFXML);
  }

  @Override
  public void cleanOntology() {
    super.cleanOntology();
    loadSystemImports();
  }

  public OURI createOURI(String uriString) {
    return new OURIImpl(uriString);
  }

  public OURI createOURIForName(String resourceName) {
    // TODO: check and normalize resourceName
    String baseURI = getDefaultNameSpace();
    if(baseURI == null) {
      throw new GateOntologyException("Cannot create OURI, no system name space (base URI) set");
    }
    return new OURIImpl(baseURI+resourceName);
  }

  public OURI createOURIForName(String resourceName, String baseURI) {
    // TODO: check and normalize resource name, maybe also URI, or do the
    // latter in the OURI constructor?
    return new OURIImpl(baseURI+resourceName);
  }

  public OURI generateOURI(String resourceName) {
    String baseURI = getDefaultNameSpace();
    if(baseURI == null) {
      throw new GateOntologyException("No default name space set, cannot generate OURI");
    }
    return generateOURI(resourceName, baseURI);
  }

  public OURI generateOURI(String resourceName, String baseURI) {
    if(resourceName == null) {
      resourceName = "";
    }
    // TODO: check and normalize resource name so it is a valid part of an IRI

    // now append our generated suffix
    resourceName = 
        resourceName +
        Long.toString(System.currentTimeMillis(),36) +
        Integer.toString(Math.abs(randomGenerator.nextInt(1296)),36);
    OURI uri = null;
    while(true) {
      uri = createOURIForName(resourceName);
      if (!((OntologyServiceImplSesame)ontologyService).containsURI(uri)) {
        break;
      }
    }
    return uri;
  }

  public OBNodeID createOBNodeID(String id) {
    return new OBNodeIDImpl(id);
  }

  public OntologyBooleanQuery createBooleanQuery(String query, QueryLanguage lang) {
    return new UtilBooleanQuery(
        ((OntologyServiceImplSesame)ontologyService).getRepositoryConnection(),
        query, lang);
  }

  public OntologyTupleQuery createTupleQuery(String query, QueryLanguage lang) {
    return new UtilTupleQueryIterator(
        ((OntologyServiceImplSesame)ontologyService).getRepositoryConnection(),
        query, lang);
    
  }

  @Deprecated
  public String executeQuery(String serqlQuery) {
    return ((OntologyServiceImplSesame)ontologyService).executeQuery(serqlQuery);
  }


}