/* * Created on Aug 30, 2005 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package org.mindswap.swoop.utils.graph.hierarchy.popup; import java.util.Collection; import java.util.Iterator; import java.util.Set; import org.mindswap.swoop.SwoopModel; import org.semanticweb.owl.model.OWLAnd; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataProperty; import org.semanticweb.owl.model.OWLDescription; import org.semanticweb.owl.model.OWLEnumeration; import org.semanticweb.owl.model.OWLException; import org.semanticweb.owl.model.OWLIndividual; import org.semanticweb.owl.model.OWLNot; import org.semanticweb.owl.model.OWLObjectProperty; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOr; import org.semanticweb.owl.model.OWLProperty; import org.semanticweb.owl.model.OWLRestriction; import org.semanticweb.owl.model.OWLSubClassAxiom; /** * @author Dave * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class OntologyFinder { /* * Given an axiom, we find which ontology this particular axiom belongs to. * * pseudocode: * if desc is atomic, then find where desc is * if an enumeration, find where any individual belongs to (they should all belong to the same one) * if is a {union, intersection, not}, then do recursion on a subpart * if a restriction, find where relation is from */ public static OWLOntology findContainingOntologyBySubclassAxiom(SwoopModel model, OWLSubClassAxiom axe) { try { OWLDescription subDesc = axe.getSubClass(); OWLDescription supDesc = axe.getSubClass(); boolean isSubAtomic = ( subDesc instanceof OWLClass); boolean isSupAtomic = ( supDesc instanceof OWLClass); if ( isSubAtomic ) return findOntologyByNamedClass( model, (OWLClass)subDesc ); else if ( isSupAtomic ) return findOntologyByNamedClass( model, (OWLClass)supDesc ); else return findOntologyByDescription( model, subDesc ); } catch ( Exception e ) { e.printStackTrace(); } return null; } protected static OWLOntology findOntologyByDescription( SwoopModel model, OWLDescription desc ) { try { if ( desc instanceof OWLClass) return findOntologyByNamedClass( model, (OWLClass)desc ); else if ( desc instanceof OWLAnd ) return findOntologyByDescription( model, (OWLDescription)((OWLAnd)desc).getOperands().iterator().next() ); else if ( desc instanceof OWLOr ) return findOntologyByDescription( model, (OWLDescription)((OWLOr)desc).getOperands().iterator().next() ); else if ( desc instanceof OWLNot ) return findOntologyByDescription( model, (OWLDescription)((OWLNot)desc).getOperand() ); else if ( desc instanceof OWLEnumeration ) return findOntologyByEnumeration( model, (OWLEnumeration)desc ); else if ( desc instanceof OWLRestriction ) return findOntologyByProperty( model, ((OWLRestriction)desc).getProperty() ); } catch (OWLException e) { e.printStackTrace(); } return null; } protected static OWLOntology findOntologyByNamedClass( SwoopModel model, OWLClass concept ) { try { Collection ontologies = model.getOntologies(); for ( Iterator it = ontologies.iterator(); it.hasNext(); ) { OWLOntology ont = (OWLOntology)it.next(); OWLClass c = ont.getClass( concept.getURI() ); if ( c != null) // this means c is found in ont return ont; } } catch ( OWLException e) { e.printStackTrace(); } return null; } protected static OWLOntology findOntologyByEnumeration( SwoopModel model, OWLEnumeration enum_ ) { try { Set individuals = enum_.getIndividuals(); if ( individuals.isEmpty() ) System.err.println("[OntologyFinder.findOntologyByEnumeration] Enumeration is empty! "); OWLIndividual ind = (OWLIndividual)individuals.iterator().next(); return findOntologyByIndividual( model, ind); } catch ( OWLException e ) { e.printStackTrace(); } return null; } protected static OWLOntology findOntologyByProperty( SwoopModel model, OWLProperty prop ) { if ( prop instanceof OWLDataProperty ) return findOntologyByDataProperty( model, (OWLDataProperty)prop ); else if (prop instanceof OWLObjectProperty ) return findOntologyByObjectProperty( model, (OWLObjectProperty)prop ); return null; } protected static OWLOntology findOntologyByIndividual( SwoopModel model, OWLIndividual individual ) { try { Collection ontologies = model.getOntologies(); for ( Iterator it = ontologies.iterator(); it.hasNext(); ) { OWLOntology ont = (OWLOntology)it.next(); OWLIndividual ind = ont.getIndividual( individual.getURI() ); if ( ind != null) // this means ind is found in ont return ont; } } catch ( OWLException e) { e.printStackTrace(); } return null; } protected static OWLOntology findOntologyByDataProperty( SwoopModel model, OWLDataProperty property ) { try { Collection ontologies = model.getOntologies(); for ( Iterator it = ontologies.iterator(); it.hasNext(); ) { OWLOntology ont = (OWLOntology)it.next(); OWLDataProperty prop = ont.getDataProperty( property.getURI() ); if ( prop != null) // this means ind is found in ont return ont; } } catch ( OWLException e ) { e.printStackTrace(); } return null; } protected static OWLOntology findOntologyByObjectProperty( SwoopModel model, OWLObjectProperty property ) { try { Collection ontologies = model.getOntologies(); for ( Iterator it = ontologies.iterator(); it.hasNext(); ) { OWLOntology ont = (OWLOntology)it.next(); OWLDataProperty prop = ont.getDataProperty( property.getURI() ); if ( prop != null) // this means ind is found in ont return ont; } } catch ( OWLException e ) { e.printStackTrace(); } return null; } /* public static Set findRelatedOntologes(SwoopModel model, OWLObject obj) { Collection ontologies = model.getOntologies(); return findOntologiesFromAxiom( (OWLObject)obj, model, ontologies ); } private static Set findOntologiesFromAxiom( OWLObject axe, SwoopModel model, Collection ontologies) { HashSet ontologiesToHighLight = new HashSet(); ConciseFormatEntityRenderer renderer = new ConciseFormatEntityRenderer(); OWLEntityCollectorVisitor visitor = new OWLEntityCollectorVisitor( renderer, model); try { axe.accept( visitor ); OWLEntityStorage storage = visitor.getStoredResult(); Set keys = storage.keySet(); for ( Iterator it = keys.iterator(); it.hasNext(); ) { OWLEntity entity = (OWLEntity)it.next(); if ( entity instanceof OWLClass ) { OWLClass concept = (OWLClass)entity; for (Iterator iter = ontologies.iterator(); iter.hasNext(); ) { OWLOntology ont = (OWLOntology)iter.next(); if ( ont.getClass( concept.getURI() ) != null ) ontologiesToHighLight.add( ont ); } } // more ifs here! } return ontologiesToHighLight; } catch (OWLException ex) { ex.printStackTrace(); } return null; } */ }