Mercurial > hg > duomoOWLProject
view 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 |
line wrap: on
line source
package de.mpiwg.dwinter.duomo.lexdump; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; import edu.stanford.smi.protege.exception.OntologyLoadException; import edu.stanford.smi.protegex.owl.ProtegeOWL; import edu.stanford.smi.protegex.owl.jena.JenaOWLModel; import edu.stanford.smi.protegex.owl.model.OWLClass; import edu.stanford.smi.protegex.owl.model.OWLDatatypeProperty; import edu.stanford.smi.protegex.owl.model.OWLIndividual; import edu.stanford.smi.protegex.owl.model.OWLNamedClass; import edu.stanford.smi.protegex.owl.model.RDFProperty; import edu.stanford.smi.protegex.owl.model.RDFSDatatype; import edu.stanford.smi.protegex.owl.model.RDFSLiteral; import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFProperty; import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSLiteral; import edu.stanford.smi.protegex.owl.repository.RepositoryManager; import edu.stanford.smi.protegex.owl.repository.impl.LocalFolderRepository; public class OWLImporter { JenaOWLModel owlModel; // contains the model Logger logger = Logger.getRootLogger(); FileWriter fh; private HashMap<String, String> typeId2className=null; private HashMap<String, OWLNamedClass> typeId2class=null; private String ontFolder; private URI uri; public OWLImporter(String folder, URI uri) throws OntologyLoadException { // owlModel = ProtegeOWL.createJenaOWLModelFromURI(uri); this.ontFolder=folder; this.uri=uri; try { this.fh= new FileWriter(new File("/tmp/identifier")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } loadOWL(folder, uri); } public void reloadOWL() throws OntologyLoadException{ loadOWL(ontFolder, uri); } public void loadOWL(String folder, URI uri) throws OntologyLoadException { owlModel = ProtegeOWL.createJenaOWLModel(); // Load repository RepositoryManager rman = owlModel.getRepositoryManager(); // Add working directory to repository manager. File workingDirectory = new File(folder); rman.addGlobalRepository(new LocalFolderRepository(workingDirectory)); // Load ontology ((JenaOWLModel) owlModel).load(uri, "OWL-DL"); } /** * Drucke das Modell nach stdout */ public void printModel() { Collection<?> classes = owlModel.getUserDefinedOWLNamedClasses(); for (Iterator<?> it = classes.iterator(); it.hasNext();) { OWLNamedClass cls = (OWLNamedClass) it.next(); Collection<?> instances = cls.getInstances(false); System.out.println("Class " + cls.getBrowserText() + " (" + instances.size() + ")"); for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { OWLIndividual individual = (OWLIndividual) jt.next(); System.out.println(" - " + individual.getBrowserText()); } } } public static void main(String args[]) throws URISyntaxException { String base = "/Users/dwinter/Documents/Projekte/Diss - data-mining/eclipseWorkspace/de.mpiwg.dwinter.duomo/owlInput"; URI ontologieUri = new URI( "file:///Users/dwinter/Documents/Projekte/Diss%20-%20data-mining/eclipseWorkspace/de.mpiwg.dwinter.duomo/owlInput/duomoAnalysis.owl"); try { OWLImporter im = new OWLImporter(base, ontologieUri); im.printModel(); } catch (OntologyLoadException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public OWLIndividual createInstance(String string) { OWLNamedClass owlclass = (OWLNamedClass) owlModel .getOWLNamedClass(string); if (owlclass == null) { logger.debug("Cannot find OWLClass:" + string); return null; } //logger.debug("Create new individual of type:"+string); return owlclass.createOWLIndividual(null); } public void setProperty(OWLIndividual identifier, String propertyName, Object value) { RDFProperty prop = owlModel.getRDFProperty(propertyName); identifier.setPropertyValue(prop, value); } public void setDataTypePropery(OWLIndividual eventInstance, String propertyName, String value, String lang) { RDFProperty prop = owlModel.getRDFProperty(propertyName); // if(OWLDatatypeProperty.class.isInstance(prop)){ // OWLDatatypeProperty dp = (OWLDatatypeProperty)prop; // prop.set // // } else { // logger.error("Is not a datatypeprop:"+propertyName); // } RDFSLiteral langLiteral = owlModel.createRDFSLiteral(value, lang); eventInstance.setPropertyValue(prop, langLiteral); } public Object getRelatedIndividual(OWLIndividual cardInd, String propertyName) { RDFProperty prop = owlModel.getRDFProperty(propertyName); if (prop == null) { logger.debug("Property does not exist:" + propertyName); } Object value = cardInd.getPropertyValue(prop); return value; } public OWLIndividual getIndividual(String classNameFrom, String propertyNameToClass, String classNameTo, String propertyName2, Object value) { return getIndividual(classNameFrom, propertyNameToClass, classNameTo, propertyName2, value, true); } public OWLIndividual getIndividual(String classNameFrom, String propertyNameToClass, String classNameTo, String propertyName2, Object value,boolean subclasses) { RDFProperty prop = owlModel.getRDFProperty(propertyName2); OWLClass classTo = owlModel.getOWLNamedClass(classNameTo); Collection<?> instances = classTo.getInstances(subclasses); OWLIndividual toIv = null; // Such individiual mit propertyName2 und Wert value for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { OWLIndividual iv = (OWLIndividual) jt.next(); Object propVal = iv.getPropertyValue(prop); if (propVal!=null && iv.getPropertyValue(prop).equals(value)) { toIv = iv; break; } } // kein treffer if (toIv == null) return null; // jetzt suche das Invidual, dass mit dieser Instance verbunden ist RDFProperty prop2 = owlModel.getRDFProperty(propertyNameToClass); OWLClass classFrom = owlModel.getOWLNamedClass(classNameFrom); Collection<?> instancesFrom = classFrom.getInstances(true); OWLIndividual fromIv = null; // Such individiual mit propertyName2 und Wert value for (Iterator<?> jt = instancesFrom.iterator(); jt.hasNext();) { OWLIndividual iv = (OWLIndividual) jt.next(); Object propValue = iv.getPropertyValue(prop2); if (propValue!=null && iv.getPropertyValue(prop2).equals(toIv)) { fromIv = iv; break; } } return fromIv; } public List<OWLIndividual> getIndividuals(String classNameFrom, String propertyNameToClass, String classNameTo, String propertyName2, Object value) { List<OWLIndividual> returnList= new ArrayList<OWLIndividual>(); RDFProperty prop = owlModel.getRDFProperty(propertyName2); OWLClass classTo = owlModel.getOWLNamedClass(classNameTo); Collection<?> instances = classTo.getInstances(true); OWLIndividual toIv = null; // Such individiual mit propertyName2 und Wert value for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { OWLIndividual iv = (OWLIndividual) jt.next(); if (iv.getPropertyValue(prop).equals(value)) { toIv = iv; break; } } // kein treffer if (toIv == null) return null; // jetzt suche das Invidual, dass mit dieser Instance verbunden ist RDFProperty prop2 = owlModel.getRDFProperty(propertyNameToClass); OWLClass classFrom = owlModel.getOWLNamedClass(classNameFrom); Collection<?> instancesFrom = classFrom.getInstances(true); //OWLIndividual fromIv = null; // Such individiual mit propertyName2 und Wert value for (Iterator<?> jt = instancesFrom.iterator(); jt.hasNext();) { OWLIndividual iv = (OWLIndividual) jt.next(); if (iv.getPropertyValue(prop2).equals(toIv)) { returnList.add(iv); break; } } return returnList; } public List<OWLIndividual> getIndividuals(String className, String propertyName, OWLIndividual targetInd) { List<OWLIndividual> returnList= new ArrayList<OWLIndividual>(); RDFProperty prop = owlModel.getRDFProperty(propertyName); OWLClass cls = owlModel.getOWLNamedClass(className); Collection<?> instances = cls.getInstances(true); // Such individiual mit propertyName2 und Wert value for (Iterator<?> jt = instances.iterator(); jt.hasNext();) { OWLIndividual iv = (OWLIndividual) jt.next(); if (iv.getPropertyValue(prop).equals(targetInd)) { returnList.add(iv); } } return returnList; } public OWLIndividual createTimeSpan(String dateDcStart, String dateDcEnd) { OWLIndividual timeSpan = createInstance("DatesDocument"); setProperty(timeSpan, "has_readable_date", dateDcStart); if(!(dateDcEnd==null || dateDcEnd.equals(""))){ setProperty(timeSpan, "has_readable_to_date", dateDcEnd); } else { dateDcEnd=dateDcStart; } OWLIndividual timeSpanIdentifier = createInstance("Identifier"); setProperty(timeSpanIdentifier,"has_readable_id",dateDcStart+"-"+dateDcEnd); setProperty(timeSpan,"crm:P48_has_preferred_identifier",timeSpanIdentifier); return timeSpan; } public OWLIndividual getIndividualByReadableId(String className,String identifier){ return getIndividual(className, "crm:P48_has_preferred_identifier", "Identifier", "has_readable_id", identifier, true); } public OWLIndividual getIndividualByReadableId(String className,String identifier, String classNameIdentifier,boolean subclassedIdentifier){ return getIndividual(className, "crm:P48_has_preferred_identifier", classNameIdentifier, "has_readable_id", identifier,subclassedIdentifier); } public String getClassNameFromTypeId(String typeId) { if (typeId2className==null){ // hash nicht angelegt createTypeId2classHashes(); } return typeId2className.get(typeId); } private void createTypeId2classHashes() { typeId2className= new HashMap<String,String>(); typeId2class= new HashMap<String,OWLNamedClass>(); Collection<?> classes = owlModel.getUserDefinedOWLNamedClasses(); RDFProperty property = owlModel.getRDFProperty("duomoTypeID"); for (Iterator<?> it = classes.iterator(); it.hasNext();) { OWLNamedClass cls = (OWLNamedClass) it.next(); String tid = (String) cls.getPropertyValue(property); if(tid!=null){ typeId2class.put(tid, cls); typeId2className.put(tid, cls.getName()); logger.debug("Adding to typId2className:"+tid+"---"+cls.getName()); } } } public OWLNamedClass getClassFromTypeId(String typeId) { if (typeId2className==null){ // hash nicht angelegt createTypeId2classHashes(); } return typeId2class.get(typeId); } public void save(String string) throws URISyntaxException, Exception { owlModel.save(new URI(string)); } public OWLIndividual createOrGetInstanceWithIdentifier(String classNameInstance, String classNameIdentifier, String identifier,boolean followSubclasses) { OWLIndividual ind = getIndividualByReadableId(classNameInstance, identifier,classNameIdentifier,followSubclasses); if(ind==null){ ind = createInstance(classNameInstance); OWLIndividual identifierInd = createInstance(classNameIdentifier); setProperty(identifierInd, "has_readable_id", identifier); try { fh.write(classNameInstance+" --" +classNameIdentifier+"---"+identifier+"\n"); fh.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } setProperty(ind, "crm:P48_has_preferred_identifier", identifierInd); } return ind; } }