package org.mindswap.swoop.refactoring; import java.io.File; import java.net.URI; import java.util.Iterator; import java.util.Set; import org.mindswap.swoop.SwoopModel; import org.mindswap.swoop.reasoner.PelletReasoner; import org.semanticweb.owl.model.OWLClassAxiom; import org.semanticweb.owl.model.OWLDescription; import org.semanticweb.owl.model.OWLEquivalentClassesAxiom; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLSubClassAxiom; public class TestProblematicAxioms { public static void main(String[] args) { try { run(args); } catch (Throwable e) { System.out.println("********* error **********"); printStackTrace(e); } finally { System.out.println("finished"); } } public static void printStackTrace(Throwable e) { StackTraceElement[] ste = e.getStackTrace(); System.out.println(e); System.out.println("Stack length: " + ste.length); if(ste.length > 100) { for(int i = 0; i < 10; i++) System.out.println(" " + ste[i]); System.out.println(" ..."); for(int i = ste.length - 60; i < ste.length; i++) System.out.println(" " + ste[i]); } else { for(int i = 0; i < ste.length; i++) System.out.println(" " + ste[i]); } } public static void run(String[] args) throws Exception { URI uri = (args.length > 0) ? new URI(args[0]) : //new URI("http://www.cs.man.ac.uk/~horrocks/OWL/Ontologies/tambis-full.owl"); //new URI("http://protege.stanford.edu/plugins/owl/owl-library/koala.owl"); //new URI("http://www.purl.org/net/ontology/beer"); //new URI("http://www.mpi-sb.mpg.de/~ykazakov/default-GALEN.owl"); new URI("http://www.mindswap.org/ontologies/tambis-full.owl"); SwoopModel swoopModel = new SwoopModel(); File ontFile1 = null; String fileName1 = "C:/ontologies/ProblematicAxioms/ProblematicBottom1.owl"; ontFile1 = new File(fileName1); String filePath = ontFile1.toURI().toString(); URI uri1 = new URI(filePath); System.out.println("Parsing"); OWLOntology ontology = swoopModel.addOntology(uri1); System.out.println("Done Parsing"); //Set allAxioms = ontology.getClassAxioms(); Segmentation seg = new Segmentation(ontology); //System.out.println("Getting the axioms in the ontology"); Set allAxioms = seg.getAxiomsInOntology(ontology); System.out.println("Total number of axioms in the Ontology: " + allAxioms.size()); System.out.println("done"); PelletReasoner reasoner = new PelletReasoner(); Iterator i = allAxioms.iterator(); while(i.hasNext()){ OWLClassAxiom axiom = (OWLClassAxiom)i.next(); if (axiom instanceof OWLSubClassAxiom){ OWLDescription sup = ((OWLSubClassAxiom)axiom).getSuperClass(); OWLDescription sub = ((OWLSubClassAxiom)axiom).getSubClass(); if(reasoner.isSubClassOf(sub,sup)){ System.out.println("The subclass axiom is a tautology"); } } if (axiom instanceof OWLEquivalentClassesAxiom){ Set eqclasses = ((OWLEquivalentClassesAxiom)axiom).getEquivalentClasses(); Iterator iter = eqclasses.iterator(); if(eqclasses.size() == 2){ OWLDescription first = (OWLDescription)iter.next(); OWLDescription second = (OWLDescription)iter.next(); if(seg.isObviousEquivalence((OWLEquivalentClassesAxiom)axiom)){ System.out.println("The subclass axiom is an OBVIOUS tautology"); } else{ if(reasoner.isEquivalentClass(first, second)) System.out.println("The Equivalence Axiom is a Tautology"); else System.out.println("The Equivalence Axiom is not a Tautology"); } } } } } }