OntologyUtilities.java
001 /*
002  *  Copyright (c) 1995-2010, The University of Sheffield. See the file
003  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004  *
005  *  This file is part of GATE (see http://gate.ac.uk/), and is free
006  *  software, licenced under the GNU Library General Public License,
007  *  Version 2, June 1991 (in the distribution as file licence.html,
008  *  and also available at http://gate.ac.uk/gate/licence.html).
009  *
010  *  $Id: UtilBooleanQuery.java 11110 2009-08-20 19:29:40Z johann_p $
011  */
012 package gate.creole.ontology;
013 
014 import gate.Factory;
015 import gate.FeatureMap;
016 import gate.Gate;
017 import gate.Resource;
018 import gate.creole.ResourceInstantiationException;
019 import gate.util.GateException;
020 
021 import java.io.File;
022 import java.net.URL;
023 import java.util.HashMap;
024 import java.util.Iterator;
025 import java.util.Locale;
026 
027 /**
028  * This class provides various Utility methods that can be used to
029  * perform some generic options. For more information see javadoc of
030  * each individual static method.
031  
032  @author Niraj Aswani
033  @author Johann Petrak
034  
035  @deprecated the use of this class and all its methods should be avoided
036  * in the future. See the individual methods for replacements.
037  */
038 @Deprecated
039 public class OntologyUtilities {
040 
041   /**
042    * Checks the availability of an existing instance of the Ontology
043    * with the given URL in the GATE's CreoleRegister. If found, returns
044    * the first available one (doesn't guranttee in which order). If not
045    * found, attempts to create one using OWLIM implementation with
046    * RDF/XML as ontology type and if successful returns the newly
047    * created instance of the ontology.
048    
049    @param url
050    @return
051    @throws ResourceInstantiationException
052    @deprecated - this method should be avoided
053    */
054   @Deprecated
055   public static Ontology getOntology(URL url)
056           throws ResourceInstantiationException {
057     java.util.List<Resource> loadedOntologies = null;
058     Ontology ontology = null;
059     try {
060       loadedOntologies = Gate.getCreoleRegister().getAllInstances(
061               Ontology.class.getName());
062     }
063     catch(GateException ge) {
064       throw new ResourceInstantiationException("Cannot list loaded ontologies",
065               ge);
066     }
067 
068     Iterator<Resource> ontIter = loadedOntologies.iterator();
069     while(ontology == null && ontIter.hasNext()) {
070       Ontology anOntology = (Ontology)ontIter.next();
071       if(anOntology.getURL().equals(url)) {
072         ontology = anOntology;
073         break;
074       }
075     }
076 
077     try {
078       // if not found, load it
079       if(ontology == null) {
080         // hardcoded to use OWL as the ontology type
081         FeatureMap params = Factory.newFeatureMap();
082         params.put("persistLocation", File.createTempFile("abc""abc")
083                 .getParentFile().toURI().toURL());
084         params.put("rdfXmlURL", url);
085         ontology = (Ontology)Factory.createResource(
086                 "gate.creole.ontology.owlim.OWLIMOntologyLR", params);
087       }
088     }
089     catch(Exception e) {
090       throw new ResourceInstantiationException(
091               "Cannot create a new instance of ontology", e);
092     }
093     return ontology;
094   }
095 
096   /**
097    * Given a URI, this methord returns the name part
098    
099    @param uri
100    @return
101    @deprecated use {@link OURI#getResourceName} instead
102    */
103   @Deprecated
104   public static String getResourceName(String uri) {
105     int index = uri.lastIndexOf('#');
106     if(index < 0) {
107       index = uri.lastIndexOf('/');
108       if(index < 0) {
109         return uri;
110       }
111       if(index + > uri.length()) {
112         return uri;
113       }
114     }
115     return uri.substring(index + 1, uri.length());
116   }
117 
118   /**
119    * Map containing uri and respective instance of datatypes
120    */
121   private static HashMap<String, DataType> datatypeMap = new HashMap<String, DataType>();
122   static {
123     datatypeMap.put("http://www.w3.org/2001/XMLSchema#boolean", DataType
124             .getBooleanDataType());
125     datatypeMap.put("http://www.w3.org/2001/XMLSchema#byte", DataType
126             .getByteDataType());
127     datatypeMap.put("http://www.w3.org/2001/XMLSchema#date", DataType
128             .getDateDataType());
129     datatypeMap.put("http://www.w3.org/2001/XMLSchema#decimal", DataType
130             .getDecimalDataType());
131     datatypeMap.put("http://www.w3.org/2001/XMLSchema#double", DataType
132             .getDoubleDataType());
133     datatypeMap.put("http://www.w3.org/2001/XMLSchema#duration", DataType
134             .getDurationDataType());
135     datatypeMap.put("http://www.w3.org/2001/XMLSchema#float", DataType
136             .getFloatDataType());
137     datatypeMap.put("http://www.w3.org/2001/XMLSchema#int", DataType
138             .getIntDataType());
139     datatypeMap.put("http://www.w3.org/2001/XMLSchema#integer", DataType
140             .getIntegerDataType());
141     datatypeMap.put("http://www.w3.org/2001/XMLSchema#long", DataType
142             .getLongDataType());
143     datatypeMap.put("http://www.w3.org/2001/XMLSchema#negativeInteger",
144             DataType.getNegativeIntegerDataType());
145     datatypeMap.put("http://www.w3.org/2001/XMLSchema#nonNegativeInteger",
146             DataType.getNonNegativeIntegerDataType());
147     datatypeMap.put("http://www.w3.org/2001/XMLSchema#nonPositiveInteger",
148             DataType.getNonPositiveIntegerDataType());
149     datatypeMap.put("http://www.w3.org/2001/XMLSchema#positiveInteger",
150             DataType.getPositiveIntegerDataType());
151     datatypeMap.put("http://www.w3.org/2001/XMLSchema#short", DataType
152             .getShortDataType());
153     datatypeMap.put("http://www.w3.org/2001/XMLSchema#string", DataType
154             .getStringDataType());
155     datatypeMap.put("http://www.w3.org/2001/XMLSchema#time", DataType
156             .getTimeDataType());
157     datatypeMap.put("http://www.w3.org/2001/XMLSchema#unsignedByte", DataType
158             .getUnsignedByteDataType());
159     datatypeMap.put("http://www.w3.org/2001/XMLSchema#unsignedInt", DataType
160             .getUnsignedIntDataType());
161     datatypeMap.put("http://www.w3.org/2001/XMLSchema#unsignedLong", DataType
162             .getUnsignedLongDataType());
163     datatypeMap.put("http://www.w3.org/2001/XMLSchema#unsignedShort", DataType
164             .getUnsignedShortDataType());
165     datatypeMap.put("http://www.w3.org/2001/XMLSchema#dateTime", DataType
166             .getDateTimeDataType());
167     
168   }
169 
170   /**
171    * Map containing language codes and their respective locales
172    */
173   private static HashMap<String, Locale> localsMap = new HashMap<String, Locale>();
174   static {
175     localsMap.put("aa", OConstants.AFAR);
176     localsMap.put("ab", OConstants.ABKHAZIAN);
177     localsMap.put("af", OConstants.AFRIKAANS);
178     localsMap.put("am", OConstants.AMHARIC);
179     localsMap.put("ar", OConstants.ARABIC);
180     localsMap.put("as", OConstants.ASSAMESE);
181     localsMap.put("ay", OConstants.AYMARA);
182     localsMap.put("az", OConstants.AZERBAIJANI);
183     localsMap.put("ba", OConstants.BASHKIR);
184     localsMap.put("be", OConstants.BYELORUSSIAN);
185     localsMap.put("bg", OConstants.BULGARIAN);
186     localsMap.put("bh", OConstants.BIHARI);
187     localsMap.put("bi", OConstants.BISLAMA);
188     localsMap.put("bn", OConstants.BENGALI);
189     localsMap.put("bo", OConstants.TIBETAN);
190     localsMap.put("br", OConstants.BRETON);
191     localsMap.put("ca", OConstants.CATALAN);
192     localsMap.put("co", OConstants.CORSICAN);
193     localsMap.put("cs", OConstants.CZECH);
194     localsMap.put("cy", OConstants.WELSH);
195     localsMap.put("da", OConstants.DANISH);
196     localsMap.put("de", OConstants.GERMAN);
197     localsMap.put("dz", OConstants.BHUTANI);
198     localsMap.put("el", OConstants.GREEK);
199     localsMap.put("en", OConstants.ENGLISH);
200     localsMap.put("eo", OConstants.ESPERANTO);
201     localsMap.put("es", OConstants.SPANISH);
202     localsMap.put("et", OConstants.ESTONIAN);
203     localsMap.put("eu", OConstants.BASQUE);
204     localsMap.put("fa", OConstants.PERSIAN);
205     localsMap.put("fi", OConstants.FINNISH);
206     localsMap.put("fj", OConstants.FIJI);
207     localsMap.put("fo", OConstants.FAROESE);
208     localsMap.put("fr", OConstants.FRENCH);
209     localsMap.put("fy", OConstants.FRISIAN);
210     localsMap.put("ga", OConstants.IRISH);
211     localsMap.put("gd", OConstants.SCOTS);
212     localsMap.put("gl", OConstants.GALICIAN);
213     localsMap.put("gn", OConstants.GUARANI);
214     localsMap.put("gu", OConstants.GUJARATI);
215     localsMap.put("ha", OConstants.HAUSA);
216     localsMap.put("he", OConstants.HEBREW);
217     localsMap.put("hi", OConstants.HINDI);
218     localsMap.put("hr", OConstants.CROATIAN);
219     localsMap.put("hu", OConstants.HUNGARIAN);
220     localsMap.put("hy", OConstants.ARMENIAN);
221     localsMap.put("ia", OConstants.INTERLINGUA);
222     localsMap.put("id", OConstants.INDONESIAN);
223     localsMap.put("ie", OConstants.INTERLINGUE);
224     localsMap.put("ik", OConstants.INUPIAK);
225     localsMap.put("is", OConstants.ICELANDIC);
226     localsMap.put("it", OConstants.ITALIAN);
227     localsMap.put("iu", OConstants.INUKTITUT);
228     localsMap.put("ja", OConstants.JAPANESE);
229     localsMap.put("jw", OConstants.JAVANESE);
230     localsMap.put("ka", OConstants.GEORGIAN);
231     localsMap.put("kk", OConstants.KAZAKH);
232     localsMap.put("kl", OConstants.GREENLANDIC);
233     localsMap.put("km", OConstants.CAMBODIAN);
234     localsMap.put("kn", OConstants.KANNADA);
235     localsMap.put("ko", OConstants.KOREAN);
236     localsMap.put("ks", OConstants.KASHMIRI);
237     localsMap.put("ku", OConstants.KURDISH);
238     localsMap.put("ky", OConstants.KIRGHIZ);
239     localsMap.put("la", OConstants.LATIN);
240     localsMap.put("ln", OConstants.LINGALA);
241     localsMap.put("lo", OConstants.LAOTHIAN);
242     localsMap.put("lt", OConstants.LITHUANIAN);
243     localsMap.put("lv", OConstants.LATVIAN);
244     localsMap.put("mg", OConstants.MALAGASY);
245     localsMap.put("mi", OConstants.MAORI);
246     localsMap.put("mk", OConstants.MACEDONIAN);
247     localsMap.put("ml", OConstants.MALAYALAM);
248     localsMap.put("mn", OConstants.MONGOLIAN);
249     localsMap.put("mo", OConstants.MOLDAVIAN);
250     localsMap.put("mr", OConstants.MARATHI);
251     localsMap.put("ms", OConstants.MALAY);
252     localsMap.put("mt", OConstants.MALTESE);
253     localsMap.put("my", OConstants.BURMESE);
254     localsMap.put("na", OConstants.NAURU);
255     localsMap.put("ne", OConstants.NEPALI);
256     localsMap.put("nl", OConstants.DUTCH);
257     localsMap.put("no", OConstants.NORWEGIAN);
258     localsMap.put("oc", OConstants.OCCITAN);
259     localsMap.put("om", OConstants.OROMO);
260     localsMap.put("or", OConstants.ORIYA);
261     localsMap.put("pa", OConstants.PUNJABI);
262     localsMap.put("pl", OConstants.POLISH);
263     localsMap.put("ps", OConstants.PASHTO);
264     localsMap.put("pt", OConstants.PORTUGUESE);
265     localsMap.put("qu", OConstants.QUECHUA);
266     localsMap.put("rm", OConstants.RHAETO_ROMANCE);
267     localsMap.put("rn", OConstants.KIRUNDI);
268     localsMap.put("ro", OConstants.ROMANIAN);
269     localsMap.put("ru", OConstants.RUSSIAN);
270     localsMap.put("rw", OConstants.KINYARWANDA);
271     localsMap.put("sa", OConstants.SANSKRIT);
272     localsMap.put("sd", OConstants.SINDHI);
273     localsMap.put("sg", OConstants.SANGHO);
274     localsMap.put("sh", OConstants.SERBO_CROATIAN);
275     localsMap.put("si", OConstants.SINHALESE);
276     localsMap.put("sk", OConstants.SLOVAK);
277     localsMap.put("sl", OConstants.SLOVENIAN);
278     localsMap.put("sm", OConstants.SAMOAN);
279     localsMap.put("sn", OConstants.SHONA);
280     localsMap.put("so", OConstants.SOMALI);
281     localsMap.put("sq", OConstants.ALBANIAN);
282     localsMap.put("sr", OConstants.SERBIAN);
283     localsMap.put("ss", OConstants.SISWATI);
284     localsMap.put("st", OConstants.SESOTHO);
285     localsMap.put("su", OConstants.SUNDANESE);
286     localsMap.put("sv", OConstants.SWEDISH);
287     localsMap.put("sw", OConstants.SWAHILI);
288     localsMap.put("ta", OConstants.TAMIL);
289     localsMap.put("te", OConstants.TELUGU);
290     localsMap.put("tg", OConstants.TAJIK);
291     localsMap.put("th", OConstants.THAI);
292     localsMap.put("ti", OConstants.TIGRINYA);
293     localsMap.put("tk", OConstants.TURKMEN);
294     localsMap.put("tl", OConstants.TAGALOG);
295     localsMap.put("tn", OConstants.SETSWANA);
296     localsMap.put("to", OConstants.TONGA);
297     localsMap.put("tr", OConstants.TURKISH);
298     localsMap.put("ts", OConstants.TSONGA);
299     localsMap.put("tt", OConstants.TATAR);
300     localsMap.put("tw", OConstants.TWI);
301     localsMap.put("ug", OConstants.UIGHUR);
302     localsMap.put("uk", OConstants.UKRAINIAN);
303     localsMap.put("ur", OConstants.URDU);
304     localsMap.put("uz", OConstants.UZBEK);
305     localsMap.put("vi", OConstants.VIETNAMESE);
306     localsMap.put("vo", OConstants.VOLAPUK);
307     localsMap.put("wo", OConstants.WOLOF);
308     localsMap.put("xh", OConstants.XHOSA);
309     localsMap.put("yi", OConstants.YIDDISH);
310     localsMap.put("yo", OConstants.YORUBA);
311     localsMap.put("za", OConstants.ZHUANG);
312     localsMap.put("zh", OConstants.CHINESE);
313     localsMap.put("zu", OConstants.ZULU);
314   }
315 
316   /**
317    * Gets the respective datatype for the given datatype URI. If the URI
318    * is invalid, the method returns null.
319    
320    @param datatypeURI
321    @return
322    @deprecated use {@link DataType#getDataType} instead
323    */
324   @Deprecated
325   public static DataType getDataType(String datatypeURI) {
326     return datatypeMap.get(datatypeURI);
327   }
328 
329   /**
330    * Gets the respective locale for the given 2 character language code.
331    * If the code doesn't match, the method returns null.
332    
333    @param languageCode
334    @return
335    @deprecated use {@link DataType#getLocale} instead
336    */
337   @Deprecated
338   public static Locale getLocale(String languageCode) {
339     if(languageCode == nullreturn null;
340     return localsMap.get(languageCode.toLowerCase());
341   }
342 
343   /**
344    * This method by using the default name space and the provided
345    * ontology resource name, creates a new instance of URI. If
346    * isAnonymousResource is set to true, an anonymous URI only using the
347    * resource name is created.
348    
349    @param ontology
350    @param aResourceName
351    @param isAnonymousResource
352    @return an instance of URI
353    @deprecated - use {@link Ontology#createOURI(String)} and related methods
354    * instead.
355    */
356   @Deprecated
357   public static URI createURI(Ontology ontology, String aResourceName,
358           boolean isAnonymousResource) {
359     if(isAnonymousResource) {
360       return new URI(aResourceName, true);
361     }
362 
363     String uri = ontology.getDefaultNameSpace() + aResourceName;
364     return new URI(uri, false);
365   }
366 }