view 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 source

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




}