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;
+	}
+
+
+
+
+}