001 package org.nlp2rdf.ontology;
002
003 import com.hp.hpl.jena.ontology.OntModel;
004 import com.hp.hpl.jena.ontology.OntModelSpec;
005 import com.hp.hpl.jena.ontology.impl.OntModelImpl;
006 import com.hp.hpl.jena.rdf.model.Model;
007 import com.hp.hpl.jena.rdf.model.ModelFactory;
008 import org.slf4j.Logger;
009 import org.slf4j.LoggerFactory;
010
011 import java.io.IOException;
012 import java.io.InputStream;
013 import java.net.MalformedURLException;
014 import java.net.URL;
015 import java.util.HashSet;
016 import java.util.Set;
017
018 /**
019 * @author Sebastian Hellmann - http://bis.informatik.uni-leipzig.de/SebastianHellmann
020 * Created: 29.06.11
021 * <p/>
022 * //TODO there is some domain specific replacements in this class
023 * private String toClasspath(String ontologyUrl) throws MalformedURLException{
024 * ontologyUrl = ontologyUrl.replace("http://nlp2rdf.lod2.eu/schema/sso/", "http://nlp2rdf.lod2.eu/schema/sso/sso.owl");
025 * ontologyUrl = ontologyUrl.replace("http://nlp2rdf.lod2.eu/schema/string/", "http://nlp2rdf.lod2.eu/schema/string/string.owl");
026 */
027 public class ClasspathLoader implements OntologyLoader {
028 private static Logger log = LoggerFactory.getLogger(ClasspathLoader.class);
029
030 public static void main(String[] args) throws Exception {
031 String test = "http://nlp2rdf.lod2.eu/schema/sso/";
032 System.out.println(new ClasspathLoader().loadOntology(test));
033 }
034
035 public class CC extends OntModelImpl {
036 public CC(OntModelSpec spec, Model model) {
037 super(spec, model);
038 }
039 }
040
041 @Override
042 public OntModel loadOntology(String ontologyUri) {
043 return loadOntology(ontologyUri, OntModelSpec.OWL_DL_MEM);
044 }
045
046 @Override
047 public OntModel loadOntology(String ontologyUri, OntModelSpec spec) {
048 OntModel model = ModelFactory.createOntologyModel(spec);
049 model.getDocumentManager().setProcessImports(false);
050 try {
051 InputStream is = this.getClass().getClassLoader().getResourceAsStream(toClasspath(ontologyUri));
052 model.read(is, "");
053 log.info("ontology " + ontologyUri + " was loaded from classpath. ");
054 } catch (MalformedURLException e) {
055 log.error("" + ontologyUri, e);
056 } catch (IOException e) {
057 log.warn("ontology was not in classpath, loading from url" + ontologyUri, e);
058 log.error("exit for development");
059 System.exit(0);
060 model.read(ontologyUri);
061 }
062 return model;
063 }
064
065
066 @Override
067 public void loadImports(OntModel model) {
068 loadImports(model, new HashSet<String>());
069 }
070
071
072 private void loadImports(OntModel m, Set<String> loaded) {
073 for (String one : m.listImportedOntologyURIs()) {
074 log.debug("adding one more: " + one);
075 if (loaded.add(one) == false) {
076 log.debug("skipping " + one + " (already loaded)");
077 continue;
078 }
079 OntModel sm = loadOntology(one);
080 loadImports(sm);
081 m.addSubModel(sm);
082 }
083 }
084
085
086 public String toClasspath(String ontologyUrl) throws MalformedURLException {
087
088 ontologyUrl = ontologyUrl.replace("http://nlp2rdf.lod2.eu/schema/sso/", "http://nlp2rdf.lod2.eu/schema/sso/sso.owl");
089 ontologyUrl = ontologyUrl.replace("http://nlp2rdf.lod2.eu/schema/string/", "http://nlp2rdf.lod2.eu/schema/string/string.owl");
090
091 StringBuilder sb = new StringBuilder();
092
093 URL u = new URL(ontologyUrl);
094
095 //reverse host
096 String host = u.getHost();
097 for (String s : host.split("\\.")) {
098 sb.insert(0, s + "/");
099 }
100
101 //sb.insert(0, "classpath:");
102
103 //get path
104 sb.append(u.getPath());
105
106 return sb.toString().replace("//", "/");
107
108 }
109
110 }