comparison src/de/mpiwg/itgroup/nimanager/owl/MetaDataHandler.java @ 0:1384a0d382fa

first input
author dwinter
date Thu, 30 Jun 2011 11:44:24 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1384a0d382fa
1 package de.mpiwg.itgroup.nimanager.owl;
2
3 import java.io.File;
4 import java.net.MalformedURLException;
5 import java.net.URI;
6 import java.net.URISyntaxException;
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.HashMap;
10 import java.util.Iterator;
11 import java.util.List;
12 import java.util.Map;
13 import java.util.Set;
14
15 import org.apache.log4j.Logger;
16 import org.openrdf.repository.RepositoryException;
17
18 import com.hp.hpl.jena.graph.impl.LiteralLabel;
19 import com.hp.hpl.jena.util.FileUtils;
20
21 import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException;
22
23 import edu.stanford.smi.protege.exception.OntologyLoadException;
24 import edu.stanford.smi.protege.storage.xml.XMLString;
25 import edu.stanford.smi.protegex.owl.ProtegeOWL;
26 import edu.stanford.smi.protegex.owl.jena.JenaOWLModel;
27 import edu.stanford.smi.protegex.owl.jena.creator.OwlProjectFromUriCreator;
28 import edu.stanford.smi.protegex.owl.model.OWLIndividual;
29 import edu.stanford.smi.protegex.owl.model.OWLModel;
30 import edu.stanford.smi.protegex.owl.model.OWLNamedClass;
31 import edu.stanford.smi.protegex.owl.model.RDFProperty;
32 import edu.stanford.smi.protegex.owl.model.RDFResource;
33 import edu.stanford.smi.protegex.owl.model.RDFSNamedClass;
34 import edu.stanford.smi.protegex.owl.model.impl.DefaultOWLNamedClass;
35 import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFProperty;
36 import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass;
37 import edu.stanford.smi.protegex.owl.repository.RepositoryManager;
38 import edu.stanford.smi.protegex.owl.repository.impl.LocalFolderRepository;
39 import edu.stanford.smi.protegex.owl.ui.profiles.OWLProfiles;
40 import edu.stanford.smi.protegex.owl.ui.profiles.ProfilesManager;
41
42 public class MetaDataHandler {
43
44 String ontologieUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies/namedIdentities.owl";
45 //String rdfUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies/rdf-schema";
46 String owlFolder = "/Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies";
47
48 static MetaDataHandler instance=null;
49
50 private JenaOWLModel owlModel;
51
52 public JenaOWLModel getOwlModel() {
53 return owlModel;
54 }
55
56 private Logger logger = Logger.getRootLogger();
57
58 public MetaDataHandler() {
59 try {
60 URI ontologieUri = new URI(ontologieUriString);
61 loadOWL(owlFolder, ontologieUri);
62 } catch (URISyntaxException e) {
63 // TODO Auto-generated catch block
64 e.printStackTrace();
65 return;
66 } catch (OntologyLoadException e) {
67 // TODO Auto-generated catch block
68 e.printStackTrace();
69 }
70 logger.info("initialized handler");
71
72 }
73
74 // public JenaOWLModel createMyJenaOWLModelFromURI(String uri) throws OntologyLoadException {
75 // //Collection errors = new ArrayList();
76 // OwlProjectFromUriCreator creator = new OwlProjectFromUriCreator();
77 // creator.setLang(FileUtils.
78 // creator.setOntologyUri(uri);
79 // //creator.create(errors);
80 // JenaOWLModel owlModel = creator.getOwlModel();
81 // //handleErrors(errors);
82 // return owlModel;
83 // }
84
85 public void loadOWL(String folder, URI uri) throws OntologyLoadException {
86 //owlModel = ProtegeOWL.createJenaOWLModel();
87
88 owlModel = ProtegeOWL.createJenaOWLModelFromURI(ontologieUriString);
89
90 //ProfilesManager.setProfile(owlModel, OWLProfiles.RDFSClass_but_not_OWLClass_Type.getURI());
91 // Load repository
92 RepositoryManager rman = owlModel.getRepositoryManager();
93
94 // Add working directory to repository manager.
95 File workingDirectory = new File(folder);
96 rman.addGlobalRepository(new LocalFolderRepository(workingDirectory));
97
98 LocalFolderRepository localRepository = new LocalFolderRepository(new File("/tmp"));
99 rman.addProjectRepository(localRepository);
100
101
102
103
104 // Load ontology
105
106 //((JenaOWLModel) owlModel).load(uri, "OWL-FULL");
107 }
108
109 /**
110 * Gibt alle Properties der Klasse zurueck, d.h. auch diejenigen die inferiert werden.
111 * @param string
112 * @return
113 */
114 public Set getAssociatedPropsForClass(String string) {
115
116
117
118 OWLNamedClass owlclass;
119 try {
120 owlclass = (OWLNamedClass) owlModel.getOWLNamedClass(string);
121 } catch (Exception e) {
122 logger.debug("Problem getting OWLClass, try RDFS later.");
123 //wenn eine Klasse sowohl eine RDFS als auch per Zuordnung in der Ontologie eine OWL classe ist, wir hier eine Fehler ausgeworfen:
124 //java.lang.ClassCastException: edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass cannot be cast to edu.stanford.smi.protegex.owl.model.OWLNamedClass
125 //at edu.stanford.smi.protegex.owl.model.impl.AbstractOWLModel.getOWLNamedClass(Unknown Source)
126 owlclass= null;
127 }
128
129 if (owlclass != null) {
130 return owlclass.getAssociatedProperties();
131 } else {
132 logger.debug("Cannot find OWLClass:" + string);
133 logger.debug("Trying RDFSClass");
134 RDFSNamedClass rdfsclass=(RDFSNamedClass)owlModel.getRDFSNamedClass(string);
135 if (rdfsclass != null) {
136 return rdfsclass.getAssociatedProperties();
137 } else {
138 logger.debug("Cannot find RDFSClass:" + string);
139 return null;
140 }
141 }
142
143
144
145 }
146
147 /**
148 * Gibt alle direkten Properties der angegebenen Klasse zurueck.
149 * @param string
150 * @return
151 */
152 public Collection getDirectPropsForClass(String string, Boolean transitiv) {
153
154
155
156 OWLNamedClass owlclass;
157 try {
158 owlclass = (OWLNamedClass) owlModel.getOWLNamedClass(string);
159 } catch (Exception e) {
160 logger.debug("Problem getting OWLClass, try RDFS later.");
161 //wenn eine Klasse sowohl eine RDFS als auch per Zuordnung in der Ontologie eine OWL classe ist, wir hier eine Fehler ausgeworfen:
162 //java.lang.ClassCastException: edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass cannot be cast to edu.stanford.smi.protegex.owl.model.OWLNamedClass
163 //at edu.stanford.smi.protegex.owl.model.impl.AbstractOWLModel.getOWLNamedClass(Unknown Source)
164 owlclass= null;
165 }
166
167 if (owlclass != null) {
168 return owlclass.getUnionDomainProperties(transitiv);
169 } else {
170 logger.debug("Cannot find OWLClass:" + string);
171 logger.debug("Trying RDFSClass");
172 RDFSNamedClass rdfsclass=(RDFSNamedClass)owlModel.getRDFSNamedClass(string);
173 if (rdfsclass != null) {
174
175 return rdfsclass.getUnionDomainProperties(transitiv);
176 } else {
177 logger.debug("Cannot find RDFSClass:" + string);
178 return null;
179 }
180 }
181
182
183
184 }
185
186
187 public List<String> getEquivalentClasses(String string) {
188 OWLNamedClass owlclass = (OWLNamedClass) owlModel
189 .getOWLNamedClass(string);
190
191 List<String> retList = new ArrayList<String>();
192 Collection eqClasses = owlclass.getEquivalentClasses();
193 Iterator it = eqClasses.iterator();
194 while(it.hasNext()){
195 Object cls = it.next();
196 String name = "";
197 if (DefaultOWLNamedClass.class.isInstance(cls)){
198 name=((DefaultOWLNamedClass)cls).getName();
199 } else if (DefaultRDFSNamedClass.class.isInstance(cls)){
200 name=((DefaultRDFSNamedClass)cls).getName();
201 }
202 retList.add(name);
203
204 }
205
206 return retList;
207 }
208
209
210 public static void main(String args[]) throws RepositoryException, TripleStoreHandlerException {
211 TripleStoreHandler th = new TripleStoreHandler("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111", "dba", "dba");
212 MetaDataHandler mh = new MetaDataHandler();
213
214 //Set<DefaultRDFProperty> props= mh.getPropsForClass("http://dbpedia.org/ontology/Person");
215
216 mh.getEquivalentClasses("http://dbpedia.org/ontology/Person");
217
218 //Map<String, String> ret = th.getValues(props,"<http://dbpedia.org/resource/Abraham_Lincoln>");
219
220 //Map<String, String> ret = th.getResources("http://xmlns.com/foaf/0.1/name","Abraham Lincoln","en");
221 //System.out.println(ret);
222 }
223
224 public OWLIndividual generateEntity(String clsName, Map<String, Object> values) {
225 OWLNamedClass owlclass = (OWLNamedClass) owlModel
226 .getOWLNamedClass(clsName);
227
228 OWLIndividual inst = (OWLIndividual) owlclass.createInstance(null);
229 for(String key:values.keySet()){
230 RDFProperty property =owlModel.getRDFProperty(key);
231 inst.setPropertyValue(property, values.get(key));
232
233
234 }
235
236 return inst;
237 }
238
239 public OWLIndividual generateEntity(String clsName, String instanceName) {
240 OWLNamedClass owlclass = (OWLNamedClass) owlModel
241 .getOWLNamedClass(clsName);
242
243 OWLIndividual inst = (OWLIndividual) owlclass.createInstance(instanceName);
244
245
246 return inst;
247 }
248
249 public OWLIndividual generateEntity(String clsName, String instanceName, Map<String, Object> values) {
250 OWLNamedClass owlclass = (OWLNamedClass) owlModel
251 .getOWLNamedClass(clsName);
252
253 OWLIndividual inst = (OWLIndividual) owlclass.createInstance(instanceName);
254
255 for(String key:values.keySet()){
256 RDFProperty property =owlModel.getRDFProperty(key);
257 inst.setPropertyValue(property, values.get(key));
258
259
260 }
261
262 return inst;
263 }
264
265 public void printIndividual(OWLIndividual ind){
266 Collection<RDFProperty> props = ind.getRDFProperties();
267 Iterator<RDFProperty> propsIts = props.iterator();
268 while(propsIts.hasNext()){
269 RDFProperty prop = propsIts.next();
270 System.err.println(prop.getName()+":"+ind.getPropertyValue(prop));
271 }
272 }
273
274 public static MetaDataHandler getInstance(){
275
276 if (instance==null){
277 instance = new MetaDataHandler();
278 }
279 return instance;
280 }
281
282
283
284
285 }