Mercurial > hg > TripleStoreManager
annotate src/de/mpiwg/itgroup/triplestoremanager/owl/MetaDataHandler.java @ 3:6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
author | dwinter |
---|---|
date | Thu, 21 Jun 2012 12:24:29 +0200 |
parents | 221a0fd0a5d3 |
children |
rev | line source |
---|---|
0 | 1 package de.mpiwg.itgroup.triplestoremanager.owl; |
2 | |
3 import java.io.File; | |
4 import java.net.URI; | |
5 import java.net.URISyntaxException; | |
6 import java.util.ArrayList; | |
7 import java.util.Collection; | |
8 import java.util.Iterator; | |
9 import java.util.List; | |
10 import java.util.Map; | |
11 import java.util.Set; | |
12 | |
13 import org.apache.log4j.Logger; | |
14 import org.openrdf.repository.RepositoryException; | |
15 | |
16 import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException; | |
17 import edu.stanford.smi.protege.exception.OntologyLoadException; | |
18 import edu.stanford.smi.protegex.owl.ProtegeOWL; | |
19 import edu.stanford.smi.protegex.owl.jena.JenaOWLModel; | |
20 import edu.stanford.smi.protegex.owl.model.OWLIndividual; | |
21 import edu.stanford.smi.protegex.owl.model.OWLNamedClass; | |
22 import edu.stanford.smi.protegex.owl.model.RDFProperty; | |
23 import edu.stanford.smi.protegex.owl.model.RDFSNamedClass; | |
24 import edu.stanford.smi.protegex.owl.model.impl.DefaultOWLNamedClass; | |
25 import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass; | |
26 import edu.stanford.smi.protegex.owl.repository.RepositoryManager; | |
27 import edu.stanford.smi.protegex.owl.repository.impl.LocalFolderRepository; | |
28 | |
29 public class MetaDataHandler { | |
30 | |
3
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
31 //String ontologieUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies/namedIdentities.owl"; |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
32 String ontologieUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/MPIWG-ontologies/namedIdentities.owl"; |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
33 //String ontologieUriString = "http://ontologies.mpiwg-berlin.mpg.de/owl/authorities/namedIdentities"; |
0 | 34 //String rdfUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies/rdf-schema"; |
3
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
35 //String owlFolder = "/Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies"; |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
36 String owlFolder = "/Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/MPIWG-ontologies/"; |
0 | 37 |
38 static MetaDataHandler instance=null; | |
39 | |
40 private JenaOWLModel owlModel; | |
41 | |
42 public JenaOWLModel getOwlModel() { | |
43 return owlModel; | |
44 } | |
45 | |
46 private Logger logger = Logger.getRootLogger(); | |
47 | |
48 public MetaDataHandler() { | |
49 try { | |
50 URI ontologieUri = new URI(ontologieUriString); | |
51 loadOWL(owlFolder, ontologieUri); | |
52 } catch (URISyntaxException e) { | |
53 // TODO Auto-generated catch block | |
54 e.printStackTrace(); | |
55 return; | |
56 } catch (OntologyLoadException e) { | |
57 // TODO Auto-generated catch block | |
58 e.printStackTrace(); | |
59 } | |
60 logger.info("initialized handler"); | |
61 | |
62 } | |
63 | |
64 // public JenaOWLModel createMyJenaOWLModelFromURI(String uri) throws OntologyLoadException { | |
65 // //Collection errors = new ArrayList(); | |
66 // OwlProjectFromUriCreator creator = new OwlProjectFromUriCreator(); | |
67 // creator.setLang(FileUtils. | |
68 // creator.setOntologyUri(uri); | |
69 // //creator.create(errors); | |
70 // JenaOWLModel owlModel = creator.getOwlModel(); | |
71 // //handleErrors(errors); | |
72 // return owlModel; | |
73 // } | |
74 | |
75 public void loadOWL(String folder, URI uri) throws OntologyLoadException { | |
76 //owlModel = ProtegeOWL.createJenaOWLModel(); | |
77 | |
78 owlModel = ProtegeOWL.createJenaOWLModelFromURI(ontologieUriString); | |
79 | |
80 //ProfilesManager.setProfile(owlModel, OWLProfiles.RDFSClass_but_not_OWLClass_Type.getURI()); | |
81 // Load repository | |
82 RepositoryManager rman = owlModel.getRepositoryManager(); | |
83 | |
84 // Add working directory to repository manager. | |
85 File workingDirectory = new File(folder); | |
86 rman.addGlobalRepository(new LocalFolderRepository(workingDirectory)); | |
87 | |
88 LocalFolderRepository localRepository = new LocalFolderRepository(new File("/tmp")); | |
89 rman.addProjectRepository(localRepository); | |
90 | |
91 | |
92 | |
93 | |
94 // Load ontology | |
95 | |
96 //((JenaOWLModel) owlModel).load(uri, "OWL-FULL"); | |
97 } | |
98 | |
99 /** | |
100 * Gibt alle Properties der Klasse zurueck, d.h. auch diejenigen die inferiert werden. | |
101 * @param string | |
102 * @return | |
103 */ | |
3
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
104 public Collection getAssociatedPropsForClass(String string) { |
0 | 105 |
106 | |
107 | |
108 OWLNamedClass owlclass; | |
109 try { | |
110 owlclass = (OWLNamedClass) owlModel.getOWLNamedClass(string); | |
111 } catch (Exception e) { | |
112 logger.debug("Problem getting OWLClass, try RDFS later."); | |
113 //wenn eine Klasse sowohl eine RDFS als auch per Zuordnung in der Ontologie eine OWL classe ist, wir hier eine Fehler ausgeworfen: | |
114 //java.lang.ClassCastException: edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass cannot be cast to edu.stanford.smi.protegex.owl.model.OWLNamedClass | |
115 //at edu.stanford.smi.protegex.owl.model.impl.AbstractOWLModel.getOWLNamedClass(Unknown Source) | |
116 owlclass= null; | |
117 } | |
118 | |
119 if (owlclass != null) { | |
3
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
120 Collection props2 = owlclass.getPossibleRDFProperties(); |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
121 Collection props1 = owlclass.getAssociatedProperties(); |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
122 props1.addAll(props2); |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
123 return props1; |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
124 |
0 | 125 } else { |
126 logger.debug("Cannot find OWLClass:" + string); | |
127 logger.debug("Trying RDFSClass"); | |
128 RDFSNamedClass rdfsclass=(RDFSNamedClass)owlModel.getRDFSNamedClass(string); | |
129 if (rdfsclass != null) { | |
3
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
130 Collection props2 = rdfsclass.getPossibleRDFProperties(); |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
131 //System.out.println(props2); |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
132 |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
133 Collection props1 = rdfsclass.getAssociatedProperties(); |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
134 props1.addAll(props2); |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
135 return props1; |
6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
dwinter
parents:
2
diff
changeset
|
136 |
0 | 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 } |