0
|
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 }
|