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