001 package eu.lod2.nlp2rdf.schema.tools;
002
003 import java.util.Map;
004 import java.util.HashMap;
005
006 import com.hp.hpl.jena.ontology.Individual;
007 import com.hp.hpl.jena.ontology.OntModel;
008 import com.hp.hpl.jena.ontology.Ontology;
009 import com.hp.hpl.jena.ontology.OntDocumentManager;
010
011 import org.apache.commons.logging.Log;
012 import org.apache.commons.logging.LogFactory;
013
014 /**
015 * Factory
016 */
017 public class Factory {
018
019 private static Log log = LogFactory.getLog(Factory.class);
020
021 private static OntModel defaultModel = null;
022
023 private static Map<java.lang.String, java.lang.String> uri2Type;
024
025 static {
026 uri2Type = new HashMap<java.lang.String, java.lang.String>();
027 uri2Type.put("http://www.w3.org/2002/07/owl#Thing", "eu.lod2.nlp2rdf.schema.IThing");
028 uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/StopWord", "eu.lod2.nlp2rdf.schema.sso.IStopWord");
029 uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/Word", "eu.lod2.nlp2rdf.schema.sso.IWord");
030 uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/Phrase", "eu.lod2.nlp2rdf.schema.sso.IPhrase");
031 uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/OffsetBasedString", "eu.lod2.nlp2rdf.schema.str.IOffsetBasedString");
032 uri2Type.put("http://nlp2rdf.lod2.eu/schema/sso/Sentence", "eu.lod2.nlp2rdf.schema.sso.ISentence");
033 uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/Document", "eu.lod2.nlp2rdf.schema.str.IDocument");
034 uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/String", "eu.lod2.nlp2rdf.schema.str.IString");
035 uri2Type.put("http://nlp2rdf.lod2.eu/schema/topic/Topic", "eu.lod2.nlp2rdf.schema.topic.ITopic");
036 uri2Type.put("http://nlp2rdf.lod2.eu/schema/string/ContextHashBasedString", "eu.lod2.nlp2rdf.schema.str.IContextHashBasedString");
037 }
038
039 /**
040 * Sets the default ontModel that may be used by ontology wrapper classes when no explicit ontModel argument is provided
041 */
042 public static void setDefaultModel(OntModel defaultModel) {
043 Factory.defaultModel = defaultModel;
044 }
045
046 /**
047 * Returns the default ontModel set with setDefaultModel()
048 */
049 public static OntModel getDefaultModel() {
050 if (defaultModel == null) {
051 throw new RuntimeException("No default OntModel was provided to eu.lod2.nlp2rdf.schema.tools.Factory");
052 }
053 return defaultModel;
054 }
055
056 /**
057 * Returns the interface name for a given OWL Class
058 */
059 public static java.lang.String getJavaInterfaceName(java.lang.String uri) {
060 return uri2Type.get(uri);
061 }
062
063 /**
064 * Returns true if there is a java interface for the
065 * given OWL Class
066 */
067 public static boolean hasJavaType(java.lang.String uri) {
068 return uri2Type.containsKey(uri);
069 }
070
071 /**
072 * Deletes the individual with URI from the OntModel
073 */
074 public static boolean deleteInstance(java.lang.String uri, OntModel ontModel) {
075 Individual individual = ontModel.getIndividual(uri);
076 if (individual != null) {
077 individual.remove();
078 return true;
079 }
080 log.warn("Could not remove non existing instance " + uri + " from model");
081 return false;
082 }
083
084 /**
085 * Same as deleteInstance, but works with the default OntModel
086 * @see Factory#deleteInstance(java.lang.String, OntModel)
087 */
088 public static boolean deleteInstance(java.lang.String uri) {
089 return deleteInstance(uri, getDefaultModel());
090 }
091
092 /**
093 * Registers all custom classes with jena
094 */
095 public static void registerCustomClasses() {
096 log.info("Registering custom classes with jena");
097 eu.lod2.nlp2rdf.schema.Thing.register();
098 eu.lod2.nlp2rdf.schema.sso.StopWord.register();
099 eu.lod2.nlp2rdf.schema.sso.Word.register();
100 eu.lod2.nlp2rdf.schema.sso.Phrase.register();
101 eu.lod2.nlp2rdf.schema.str.OffsetBasedString.register();
102 eu.lod2.nlp2rdf.schema.sso.Sentence.register();
103 eu.lod2.nlp2rdf.schema.str.Document.register();
104 eu.lod2.nlp2rdf.schema.str.String.register();
105 eu.lod2.nlp2rdf.schema.topic.Topic.register();
106 eu.lod2.nlp2rdf.schema.str.ContextHashBasedString.register();
107 }
108
109 /**
110 * Adds imports statements to an ontology and adds
111 * imported subModels to a model.
112 *
113 * Currently, this uses the namespace URI without trailing '#' or ':'
114 * as location.
115 */
116 public static void registerImports(Ontology ontology, OntModel ontModel) {
117 log.info("Adding import statements to the model");
118 OntDocumentManager odm = OntDocumentManager.getInstance();
119 log.debug("Adding import ../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/string/string.ttl to the model");
120 odm.loadImport(ontModel, "../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/string/string.ttl");
121 ontology.addImport(ontModel.createResource("../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/string/string.ttl"));
122 log.debug("Adding import http://nlp2rdf.lod2.eu/schema/string/ to the model");
123 odm.loadImport(ontModel, "http://nlp2rdf.lod2.eu/schema/string/");
124 ontology.addImport(ontModel.createResource("http://nlp2rdf.lod2.eu/schema/string/"));
125 log.debug("Adding import ../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/topic/topic.ttl to the model");
126 odm.loadImport(ontModel, "../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/topic/topic.ttl");
127 ontology.addImport(ontModel.createResource("../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/topic/topic.ttl"));
128 log.debug("Adding import ../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/sso/sso.ttl to the model");
129 odm.loadImport(ontModel, "../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/sso/sso.ttl");
130 ontology.addImport(ontModel.createResource("../../core/nif/src/main/resources/eu/lod2/nlp2rdf/schema/sso/sso.ttl"));
131 log.debug("Adding import http://nlp2rdf.lod2.eu/schema/sso/ to the model");
132 odm.loadImport(ontModel, "http://nlp2rdf.lod2.eu/schema/sso/");
133 ontology.addImport(ontModel.createResource("http://nlp2rdf.lod2.eu/schema/sso/"));
134 log.debug("Adding import http://nlp2rdf.lod2.eu/schema/topic/ to the model");
135 odm.loadImport(ontModel, "http://nlp2rdf.lod2.eu/schema/topic/");
136 ontology.addImport(ontModel.createResource("http://nlp2rdf.lod2.eu/schema/topic/"));
137 log.debug("Adding import http://ns.aksw.org/scms/ to the model");
138 odm.loadImport(ontModel, "http://ns.aksw.org/scms/");
139 ontology.addImport(ontModel.createResource("http://ns.aksw.org/scms/"));
140 log.debug("Adding import http://www.w3.org/XML/1998/namespace to the model");
141 odm.loadImport(ontModel, "http://www.w3.org/XML/1998/namespace");
142 ontology.addImport(ontModel.createResource("http://www.w3.org/XML/1998/namespace"));
143 }
144
145 /**
146 * Same as registerImports, but works with the default OntModel
147 * @see Factory#registerImports(Ontology, OntModel)
148 */
149 public void registerImports(Ontology ontology) {
150 registerImports(ontology, getDefaultModel());
151 }
152 }