Mercurial > hg > duomoOWLProject
annotate src/de/mpiwg/dwinter/duomo/lexdump/OWLImporter.java @ 5:923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
author | dwinter |
---|---|
date | Mon, 07 Feb 2011 16:51:38 +0100 |
parents | 72004a788198 |
children | 19e40abb3e8a |
rev | line source |
---|---|
0 | 1 package de.mpiwg.dwinter.duomo.lexdump; |
2 | |
3 import java.io.File; | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
4 import java.io.FileWriter; |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
5 import java.io.IOException; |
0 | 6 import java.net.URI; |
7 import java.net.URISyntaxException; | |
8 import java.util.ArrayList; | |
9 import java.util.Collection; | |
10 import java.util.HashMap; | |
11 import java.util.Iterator; | |
12 import java.util.List; | |
13 | |
14 import org.apache.log4j.Logger; | |
15 | |
16 import edu.stanford.smi.protege.exception.OntologyLoadException; | |
17 import edu.stanford.smi.protegex.owl.ProtegeOWL; | |
18 import edu.stanford.smi.protegex.owl.jena.JenaOWLModel; | |
19 import edu.stanford.smi.protegex.owl.model.OWLClass; | |
20 import edu.stanford.smi.protegex.owl.model.OWLDatatypeProperty; | |
21 import edu.stanford.smi.protegex.owl.model.OWLIndividual; | |
22 import edu.stanford.smi.protegex.owl.model.OWLNamedClass; | |
23 import edu.stanford.smi.protegex.owl.model.RDFProperty; | |
24 import edu.stanford.smi.protegex.owl.model.RDFSDatatype; | |
25 import edu.stanford.smi.protegex.owl.model.RDFSLiteral; | |
26 import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFProperty; | |
27 import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSLiteral; | |
28 import edu.stanford.smi.protegex.owl.repository.RepositoryManager; | |
29 import edu.stanford.smi.protegex.owl.repository.impl.LocalFolderRepository; | |
30 | |
31 public class OWLImporter { | |
32 | |
33 JenaOWLModel owlModel; // contains the model | |
34 Logger logger = Logger.getRootLogger(); | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
35 FileWriter fh; |
0 | 36 private HashMap<String, String> typeId2className=null; |
37 private HashMap<String, OWLNamedClass> typeId2class=null; | |
4 | 38 private String ontFolder; |
39 private URI uri; | |
0 | 40 |
41 public OWLImporter(String folder, URI uri) throws OntologyLoadException { | |
42 // owlModel = ProtegeOWL.createJenaOWLModelFromURI(uri); | |
43 | |
4 | 44 this.ontFolder=folder; |
45 this.uri=uri; | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
46 try { |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
47 this.fh= new FileWriter(new File("/tmp/identifier")); |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
48 } catch (IOException e) { |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
49 // TODO Auto-generated catch block |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
50 e.printStackTrace(); |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
51 } |
4 | 52 loadOWL(folder, uri); |
53 } | |
54 | |
55 public void reloadOWL() throws OntologyLoadException{ | |
56 loadOWL(ontFolder, uri); | |
57 } | |
58 | |
59 public void loadOWL(String folder, URI uri) throws OntologyLoadException { | |
0 | 60 owlModel = ProtegeOWL.createJenaOWLModel(); |
61 // Load repository | |
62 RepositoryManager rman = owlModel.getRepositoryManager(); | |
63 | |
64 // Add working directory to repository manager. | |
65 File workingDirectory = new File(folder); | |
66 rman.addGlobalRepository(new LocalFolderRepository(workingDirectory)); | |
67 // Load ontology | |
68 | |
69 ((JenaOWLModel) owlModel).load(uri, "OWL-DL"); | |
70 } | |
71 | |
72 /** | |
73 * Drucke das Modell nach stdout | |
74 */ | |
75 public void printModel() { | |
76 Collection<?> classes = owlModel.getUserDefinedOWLNamedClasses(); | |
77 for (Iterator<?> it = classes.iterator(); it.hasNext();) { | |
78 OWLNamedClass cls = (OWLNamedClass) it.next(); | |
79 Collection<?> instances = cls.getInstances(false); | |
80 System.out.println("Class " + cls.getBrowserText() + " (" | |
81 + instances.size() + ")"); | |
82 for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { | |
83 OWLIndividual individual = (OWLIndividual) jt.next(); | |
84 System.out.println(" - " + individual.getBrowserText()); | |
85 } | |
86 } | |
87 | |
88 } | |
89 | |
90 public static void main(String args[]) throws URISyntaxException { | |
91 String base = "/Users/dwinter/Documents/Projekte/Diss - data-mining/eclipseWorkspace/de.mpiwg.dwinter.duomo/owlInput"; | |
92 URI ontologieUri = new URI( | |
93 "file:///Users/dwinter/Documents/Projekte/Diss%20-%20data-mining/eclipseWorkspace/de.mpiwg.dwinter.duomo/owlInput/duomoAnalysis.owl"); | |
94 try { | |
95 | |
96 OWLImporter im = new OWLImporter(base, ontologieUri); | |
97 im.printModel(); | |
98 } catch (OntologyLoadException e) { | |
99 // TODO Auto-generated catch block | |
100 e.printStackTrace(); | |
101 } | |
102 } | |
103 | |
104 public OWLIndividual createInstance(String string) { | |
105 OWLNamedClass owlclass = (OWLNamedClass) owlModel | |
106 .getOWLNamedClass(string); | |
107 | |
108 if (owlclass == null) { | |
109 logger.debug("Cannot find OWLClass:" + string); | |
110 return null; | |
111 } | |
112 //logger.debug("Create new individual of type:"+string); | |
113 return owlclass.createOWLIndividual(null); | |
114 | |
115 } | |
116 | |
117 public void setProperty(OWLIndividual identifier, String propertyName, | |
118 Object value) { | |
119 RDFProperty prop = owlModel.getRDFProperty(propertyName); | |
120 identifier.setPropertyValue(prop, value); | |
121 | |
122 } | |
123 | |
124 public void setDataTypePropery(OWLIndividual eventInstance, | |
125 String propertyName, String value, String lang) { | |
126 RDFProperty prop = owlModel.getRDFProperty(propertyName); | |
127 // if(OWLDatatypeProperty.class.isInstance(prop)){ | |
128 // OWLDatatypeProperty dp = (OWLDatatypeProperty)prop; | |
129 // prop.set | |
130 // | |
131 // } else { | |
132 // logger.error("Is not a datatypeprop:"+propertyName); | |
133 // } | |
134 | |
135 | |
136 RDFSLiteral langLiteral = owlModel.createRDFSLiteral(value, lang); | |
137 eventInstance.setPropertyValue(prop, langLiteral); | |
138 | |
139 | |
140 } | |
141 | |
142 public Object getRelatedIndividual(OWLIndividual cardInd, | |
143 String propertyName) { | |
144 RDFProperty prop = owlModel.getRDFProperty(propertyName); | |
145 if (prop == null) { | |
146 logger.debug("Property does not exist:" + propertyName); | |
147 } | |
148 | |
149 Object value = cardInd.getPropertyValue(prop); | |
150 return value; | |
151 } | |
152 | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
153 |
0 | 154 public OWLIndividual getIndividual(String classNameFrom, |
155 String propertyNameToClass, String classNameTo, | |
156 String propertyName2, Object value) { | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
157 return getIndividual(classNameFrom, |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
158 propertyNameToClass, classNameTo, |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
159 propertyName2, value, true); |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
160 } |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
161 |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
162 |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
163 public OWLIndividual getIndividual(String classNameFrom, |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
164 String propertyNameToClass, String classNameTo, |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
165 String propertyName2, Object value,boolean subclasses) { |
0 | 166 |
167 RDFProperty prop = owlModel.getRDFProperty(propertyName2); | |
168 | |
169 OWLClass classTo = owlModel.getOWLNamedClass(classNameTo); | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
170 Collection<?> instances = classTo.getInstances(subclasses); |
0 | 171 OWLIndividual toIv = null; |
172 // Such individiual mit propertyName2 und Wert value | |
173 for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { | |
174 OWLIndividual iv = (OWLIndividual) jt.next(); | |
175 Object propVal = iv.getPropertyValue(prop); | |
176 | |
177 if (propVal!=null && iv.getPropertyValue(prop).equals(value)) { | |
178 toIv = iv; | |
179 break; | |
180 } | |
181 } | |
182 | |
183 // kein treffer | |
184 if (toIv == null) | |
185 return null; | |
186 | |
187 // jetzt suche das Invidual, dass mit dieser Instance verbunden ist | |
188 RDFProperty prop2 = owlModel.getRDFProperty(propertyNameToClass); | |
189 | |
190 OWLClass classFrom = owlModel.getOWLNamedClass(classNameFrom); | |
191 Collection<?> instancesFrom = classFrom.getInstances(true); | |
192 OWLIndividual fromIv = null; | |
193 // Such individiual mit propertyName2 und Wert value | |
194 for (Iterator<?> jt = instancesFrom.iterator(); jt.hasNext();) { | |
195 OWLIndividual iv = (OWLIndividual) jt.next(); | |
196 Object propValue = iv.getPropertyValue(prop2); | |
197 if (propValue!=null && iv.getPropertyValue(prop2).equals(toIv)) { | |
198 fromIv = iv; | |
199 break; | |
200 } | |
201 } | |
202 | |
203 return fromIv; | |
204 } | |
205 | |
206 public List<OWLIndividual> getIndividuals(String classNameFrom, | |
207 String propertyNameToClass, String classNameTo, | |
208 String propertyName2, Object value) { | |
209 | |
210 List<OWLIndividual> returnList= new ArrayList<OWLIndividual>(); | |
211 | |
212 RDFProperty prop = owlModel.getRDFProperty(propertyName2); | |
213 | |
214 OWLClass classTo = owlModel.getOWLNamedClass(classNameTo); | |
215 Collection<?> instances = classTo.getInstances(true); | |
216 OWLIndividual toIv = null; | |
217 // Such individiual mit propertyName2 und Wert value | |
218 for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { | |
219 OWLIndividual iv = (OWLIndividual) jt.next(); | |
220 if (iv.getPropertyValue(prop).equals(value)) { | |
221 toIv = iv; | |
222 break; | |
223 } | |
224 } | |
225 | |
226 // kein treffer | |
227 if (toIv == null) | |
228 return null; | |
229 | |
230 // jetzt suche das Invidual, dass mit dieser Instance verbunden ist | |
231 RDFProperty prop2 = owlModel.getRDFProperty(propertyNameToClass); | |
232 | |
233 OWLClass classFrom = owlModel.getOWLNamedClass(classNameFrom); | |
234 Collection<?> instancesFrom = classFrom.getInstances(true); | |
235 //OWLIndividual fromIv = null; | |
236 // Such individiual mit propertyName2 und Wert value | |
237 for (Iterator<?> jt = instancesFrom.iterator(); jt.hasNext();) { | |
238 OWLIndividual iv = (OWLIndividual) jt.next(); | |
239 if (iv.getPropertyValue(prop2).equals(toIv)) { | |
240 returnList.add(iv); | |
241 break; | |
242 } | |
243 } | |
244 | |
245 return returnList; | |
246 } | |
247 | |
248 public List<OWLIndividual> getIndividuals(String className, String propertyName, | |
249 OWLIndividual targetInd) { | |
250 List<OWLIndividual> returnList= new ArrayList<OWLIndividual>(); | |
251 | |
252 RDFProperty prop = owlModel.getRDFProperty(propertyName); | |
253 | |
254 OWLClass cls = owlModel.getOWLNamedClass(className); | |
255 | |
256 Collection<?> instances = cls.getInstances(true); | |
257 // Such individiual mit propertyName2 und Wert value | |
258 for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { | |
259 OWLIndividual iv = (OWLIndividual) jt.next(); | |
260 if (iv.getPropertyValue(prop).equals(targetInd)) { | |
261 returnList.add(iv); | |
262 | |
263 } | |
264 } | |
265 | |
266 return returnList; | |
267 } | |
268 | |
269 public OWLIndividual createTimeSpan(String dateDcStart, String dateDcEnd) { | |
270 OWLIndividual timeSpan = createInstance("DatesDocument"); | |
271 | |
272 | |
273 | |
274 setProperty(timeSpan, "has_readable_date", dateDcStart); | |
275 | |
276 if(!(dateDcEnd==null || dateDcEnd.equals(""))){ | |
277 setProperty(timeSpan, "has_readable_to_date", dateDcEnd); | |
278 } else { | |
279 dateDcEnd=dateDcStart; | |
280 } | |
281 | |
282 OWLIndividual timeSpanIdentifier = createInstance("Identifier"); | |
283 setProperty(timeSpanIdentifier,"has_readable_id",dateDcStart+"-"+dateDcEnd); | |
284 | |
285 setProperty(timeSpan,"crm:P48_has_preferred_identifier",timeSpanIdentifier); | |
286 | |
287 return timeSpan; | |
288 } | |
289 | |
290 public OWLIndividual getIndividualByReadableId(String className,String identifier){ | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
291 return getIndividual(className, "crm:P48_has_preferred_identifier", "Identifier", "has_readable_id", identifier, true); |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
292 } |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
293 |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
294 public OWLIndividual getIndividualByReadableId(String className,String identifier, String classNameIdentifier,boolean subclassedIdentifier){ |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
295 return getIndividual(className, "crm:P48_has_preferred_identifier", classNameIdentifier, "has_readable_id", identifier,subclassedIdentifier); |
0 | 296 } |
297 | |
298 public String getClassNameFromTypeId(String typeId) { | |
299 if (typeId2className==null){ // hash nicht angelegt | |
300 createTypeId2classHashes(); | |
301 } | |
302 | |
303 return typeId2className.get(typeId); | |
304 | |
305 } | |
306 | |
307 private void createTypeId2classHashes() { | |
308 typeId2className= new HashMap<String,String>(); | |
309 typeId2class= new HashMap<String,OWLNamedClass>(); | |
310 | |
311 Collection<?> classes = owlModel.getUserDefinedOWLNamedClasses(); | |
312 | |
313 RDFProperty property = owlModel.getRDFProperty("duomoTypeID"); | |
314 for (Iterator<?> it = classes.iterator(); it.hasNext();) { | |
315 OWLNamedClass cls = (OWLNamedClass) it.next(); | |
316 String tid = (String) cls.getPropertyValue(property); | |
317 if(tid!=null){ | |
318 typeId2class.put(tid, cls); | |
319 typeId2className.put(tid, cls.getName()); | |
320 logger.debug("Adding to typId2className:"+tid+"---"+cls.getName()); | |
321 } | |
322 } | |
323 } | |
324 | |
325 public OWLNamedClass getClassFromTypeId(String typeId) { | |
326 if (typeId2className==null){ // hash nicht angelegt | |
327 createTypeId2classHashes(); | |
328 } | |
329 | |
330 return typeId2class.get(typeId); | |
331 } | |
332 | |
333 public void save(String string) throws URISyntaxException, Exception { | |
334 owlModel.save(new URI(string)); | |
335 | |
336 } | |
337 | |
338 public OWLIndividual createOrGetInstanceWithIdentifier(String classNameInstance, | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
339 String classNameIdentifier, String identifier,boolean followSubclasses) { |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
340 OWLIndividual ind = getIndividualByReadableId(classNameInstance, identifier,classNameIdentifier,followSubclasses); |
0 | 341 if(ind==null){ |
342 ind = createInstance(classNameInstance); | |
343 OWLIndividual identifierInd = createInstance(classNameIdentifier); | |
344 setProperty(identifierInd, "has_readable_id", identifier); | |
5
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
345 try { |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
346 fh.write(classNameInstance+" --" +classNameIdentifier+"---"+identifier+"\n"); |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
347 fh.flush(); |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
348 } catch (IOException e) { |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
349 // TODO Auto-generated catch block |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
350 e.printStackTrace(); |
923e73fa07f1
Minor changes, Suche nach Objekten nach readableId jetzt einschraenkbar, nicht auf subclassen ausweiten.
dwinter
parents:
4
diff
changeset
|
351 } |
0 | 352 setProperty(ind, "crm:P48_has_preferred_identifier", |
3 | 353 identifierInd); |
0 | 354 } |
2 | 355 return ind; |
0 | 356 } |
357 } |