Mercurial > hg > NamedIdentityManager
diff src/de/mpiwg/itgroup/nimanager/owl/MetaDataHandler.java @ 0:1384a0d382fa
first input
author | dwinter |
---|---|
date | Thu, 30 Jun 2011 11:44:24 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/de/mpiwg/itgroup/nimanager/owl/MetaDataHandler.java Thu Jun 30 11:44:24 2011 +0200 @@ -0,0 +1,285 @@ +package de.mpiwg.itgroup.nimanager.owl; + +import java.io.File; +import java.net.MalformedURLException; +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 java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.openrdf.repository.RepositoryException; + +import com.hp.hpl.jena.graph.impl.LiteralLabel; +import com.hp.hpl.jena.util.FileUtils; + +import de.mpiwg.itgroup.nimanager.exceptions.TripleStoreHandlerException; + +import edu.stanford.smi.protege.exception.OntologyLoadException; +import edu.stanford.smi.protege.storage.xml.XMLString; +import edu.stanford.smi.protegex.owl.ProtegeOWL; +import edu.stanford.smi.protegex.owl.jena.JenaOWLModel; +import edu.stanford.smi.protegex.owl.jena.creator.OwlProjectFromUriCreator; +import edu.stanford.smi.protegex.owl.model.OWLIndividual; +import edu.stanford.smi.protegex.owl.model.OWLModel; +import edu.stanford.smi.protegex.owl.model.OWLNamedClass; +import edu.stanford.smi.protegex.owl.model.RDFProperty; +import edu.stanford.smi.protegex.owl.model.RDFResource; +import edu.stanford.smi.protegex.owl.model.RDFSNamedClass; +import edu.stanford.smi.protegex.owl.model.impl.DefaultOWLNamedClass; +import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFProperty; +import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass; +import edu.stanford.smi.protegex.owl.repository.RepositoryManager; +import edu.stanford.smi.protegex.owl.repository.impl.LocalFolderRepository; +import edu.stanford.smi.protegex.owl.ui.profiles.OWLProfiles; +import edu.stanford.smi.protegex.owl.ui.profiles.ProfilesManager; + +public class MetaDataHandler { + + String ontologieUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies/namedIdentities.owl"; + //String rdfUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies/rdf-schema"; + String owlFolder = "/Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies"; + + static MetaDataHandler instance=null; + + private JenaOWLModel owlModel; + + public JenaOWLModel getOwlModel() { + return owlModel; + } + + private Logger logger = Logger.getRootLogger(); + + public MetaDataHandler() { + try { + URI ontologieUri = new URI(ontologieUriString); + loadOWL(owlFolder, ontologieUri); + } catch (URISyntaxException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return; + } catch (OntologyLoadException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + logger.info("initialized handler"); + + } + +// public JenaOWLModel createMyJenaOWLModelFromURI(String uri) throws OntologyLoadException { +// //Collection errors = new ArrayList(); +// OwlProjectFromUriCreator creator = new OwlProjectFromUriCreator(); +// creator.setLang(FileUtils. +// creator.setOntologyUri(uri); +// //creator.create(errors); +// JenaOWLModel owlModel = creator.getOwlModel(); +// //handleErrors(errors); +// return owlModel; +// } + + public void loadOWL(String folder, URI uri) throws OntologyLoadException { + //owlModel = ProtegeOWL.createJenaOWLModel(); + + owlModel = ProtegeOWL.createJenaOWLModelFromURI(ontologieUriString); + + //ProfilesManager.setProfile(owlModel, OWLProfiles.RDFSClass_but_not_OWLClass_Type.getURI()); + // Load repository + RepositoryManager rman = owlModel.getRepositoryManager(); + + // Add working directory to repository manager. + File workingDirectory = new File(folder); + rman.addGlobalRepository(new LocalFolderRepository(workingDirectory)); + + LocalFolderRepository localRepository = new LocalFolderRepository(new File("/tmp")); + rman.addProjectRepository(localRepository); + + + + + // Load ontology + + //((JenaOWLModel) owlModel).load(uri, "OWL-FULL"); + } + + /** + * Gibt alle Properties der Klasse zurueck, d.h. auch diejenigen die inferiert werden. + * @param string + * @return + */ + public Set getAssociatedPropsForClass(String string) { + + + + OWLNamedClass owlclass; + try { + owlclass = (OWLNamedClass) owlModel.getOWLNamedClass(string); + } catch (Exception e) { + logger.debug("Problem getting OWLClass, try RDFS later."); + //wenn eine Klasse sowohl eine RDFS als auch per Zuordnung in der Ontologie eine OWL classe ist, wir hier eine Fehler ausgeworfen: + //java.lang.ClassCastException: edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass cannot be cast to edu.stanford.smi.protegex.owl.model.OWLNamedClass + //at edu.stanford.smi.protegex.owl.model.impl.AbstractOWLModel.getOWLNamedClass(Unknown Source) + owlclass= null; + } + + if (owlclass != null) { + return owlclass.getAssociatedProperties(); + } else { + logger.debug("Cannot find OWLClass:" + string); + logger.debug("Trying RDFSClass"); + RDFSNamedClass rdfsclass=(RDFSNamedClass)owlModel.getRDFSNamedClass(string); + if (rdfsclass != null) { + return rdfsclass.getAssociatedProperties(); + } else { + logger.debug("Cannot find RDFSClass:" + string); + return null; + } + } + + + + } + + /** + * Gibt alle direkten Properties der angegebenen Klasse zurueck. + * @param string + * @return + */ + public Collection getDirectPropsForClass(String string, Boolean transitiv) { + + + + OWLNamedClass owlclass; + try { + owlclass = (OWLNamedClass) owlModel.getOWLNamedClass(string); + } catch (Exception e) { + logger.debug("Problem getting OWLClass, try RDFS later."); + //wenn eine Klasse sowohl eine RDFS als auch per Zuordnung in der Ontologie eine OWL classe ist, wir hier eine Fehler ausgeworfen: + //java.lang.ClassCastException: edu.stanford.smi.protegex.owl.model.impl.DefaultRDFSNamedClass cannot be cast to edu.stanford.smi.protegex.owl.model.OWLNamedClass + //at edu.stanford.smi.protegex.owl.model.impl.AbstractOWLModel.getOWLNamedClass(Unknown Source) + owlclass= null; + } + + if (owlclass != null) { + return owlclass.getUnionDomainProperties(transitiv); + } else { + logger.debug("Cannot find OWLClass:" + string); + logger.debug("Trying RDFSClass"); + RDFSNamedClass rdfsclass=(RDFSNamedClass)owlModel.getRDFSNamedClass(string); + if (rdfsclass != null) { + + return rdfsclass.getUnionDomainProperties(transitiv); + } else { + logger.debug("Cannot find RDFSClass:" + string); + return null; + } + } + + + + } + + + public List<String> getEquivalentClasses(String string) { + OWLNamedClass owlclass = (OWLNamedClass) owlModel + .getOWLNamedClass(string); + + List<String> retList = new ArrayList<String>(); + Collection eqClasses = owlclass.getEquivalentClasses(); + Iterator it = eqClasses.iterator(); + while(it.hasNext()){ + Object cls = it.next(); + String name = ""; + if (DefaultOWLNamedClass.class.isInstance(cls)){ + name=((DefaultOWLNamedClass)cls).getName(); + } else if (DefaultRDFSNamedClass.class.isInstance(cls)){ + name=((DefaultRDFSNamedClass)cls).getName(); + } + retList.add(name); + + } + + return retList; + } + + + public static void main(String args[]) throws RepositoryException, TripleStoreHandlerException { + TripleStoreHandler th = new TripleStoreHandler("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111", "dba", "dba"); + MetaDataHandler mh = new MetaDataHandler(); + + //Set<DefaultRDFProperty> props= mh.getPropsForClass("http://dbpedia.org/ontology/Person"); + + mh.getEquivalentClasses("http://dbpedia.org/ontology/Person"); + + //Map<String, String> ret = th.getValues(props,"<http://dbpedia.org/resource/Abraham_Lincoln>"); + + //Map<String, String> ret = th.getResources("http://xmlns.com/foaf/0.1/name","Abraham Lincoln","en"); + //System.out.println(ret); + } + + public OWLIndividual generateEntity(String clsName, Map<String, Object> values) { + OWLNamedClass owlclass = (OWLNamedClass) owlModel + .getOWLNamedClass(clsName); + + OWLIndividual inst = (OWLIndividual) owlclass.createInstance(null); + for(String key:values.keySet()){ + RDFProperty property =owlModel.getRDFProperty(key); + inst.setPropertyValue(property, values.get(key)); + + + } + + return inst; + } + + public OWLIndividual generateEntity(String clsName, String instanceName) { + OWLNamedClass owlclass = (OWLNamedClass) owlModel + .getOWLNamedClass(clsName); + + OWLIndividual inst = (OWLIndividual) owlclass.createInstance(instanceName); + + + return inst; + } + + public OWLIndividual generateEntity(String clsName, String instanceName, Map<String, Object> values) { + OWLNamedClass owlclass = (OWLNamedClass) owlModel + .getOWLNamedClass(clsName); + + OWLIndividual inst = (OWLIndividual) owlclass.createInstance(instanceName); + + for(String key:values.keySet()){ + RDFProperty property =owlModel.getRDFProperty(key); + inst.setPropertyValue(property, values.get(key)); + + + } + + return inst; + } + + public void printIndividual(OWLIndividual ind){ + Collection<RDFProperty> props = ind.getRDFProperties(); + Iterator<RDFProperty> propsIts = props.iterator(); + while(propsIts.hasNext()){ + RDFProperty prop = propsIts.next(); + System.err.println(prop.getName()+":"+ind.getPropertyValue(prop)); + } + } + + public static MetaDataHandler getInstance(){ + + if (instance==null){ + instance = new MetaDataHandler(); + } + return instance; + } + + + + +}