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