Mercurial > hg > TripleStoreManager
view src/de/mpiwg/itgroup/triplestoremanager/owl/MetaDataHandler.java @ 3:6c8dac2c5214
New tools export graph and generate landing page of an echo ressource
author | dwinter |
---|---|
date | Thu, 21 Jun 2012 12:24:29 +0200 |
parents | 221a0fd0a5d3 |
children |
line wrap: on
line source
package de.mpiwg.itgroup.triplestoremanager.owl; import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; 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 de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException; 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.OWLIndividual; import edu.stanford.smi.protegex.owl.model.OWLNamedClass; import edu.stanford.smi.protegex.owl.model.RDFProperty; 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.DefaultRDFSNamedClass; import edu.stanford.smi.protegex.owl.repository.RepositoryManager; import edu.stanford.smi.protegex.owl.repository.impl.LocalFolderRepository; public class MetaDataHandler { //String ontologieUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/NamedIdentityManager/ontologies/namedIdentities.owl"; String ontologieUriString = "file:///Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/MPIWG-ontologies/namedIdentities.owl"; //String ontologieUriString = "http://ontologies.mpiwg-berlin.mpg.de/owl/authorities/namedIdentities"; //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"; String owlFolder = "/Users/dwinter/Documents/Projekte/ECHO-eSciDoc-MPDL/escidocMPIWG/MPIWG-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 Collection 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) { Collection props2 = owlclass.getPossibleRDFProperties(); Collection props1 = owlclass.getAssociatedProperties(); props1.addAll(props2); return props1; } else { logger.debug("Cannot find OWLClass:" + string); logger.debug("Trying RDFSClass"); RDFSNamedClass rdfsclass=(RDFSNamedClass)owlModel.getRDFSNamedClass(string); if (rdfsclass != null) { Collection props2 = rdfsclass.getPossibleRDFProperties(); //System.out.println(props2); Collection props1 = rdfsclass.getAssociatedProperties(); props1.addAll(props2); return props1; } 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; } }