From: <lor...@us...> - 2009-09-05 08:02:49
|
Revision: 1835 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1835&view=rev Author: lorenz_b Date: 2009-09-05 08:02:35 +0000 (Sat, 05 Sep 2009) Log Message: ----------- added undo option for applied changes in repair panel removed some warnings Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/OWLSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairPlanPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/Delete16.gif trunk/src/dl-learner/org/dllearner/tools/ore/Edit16.gif trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableCellRenderer.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -103,13 +103,14 @@ import org.semanticweb.owl.util.SimpleURIMapper; import org.semanticweb.owl.vocab.NamespaceOWLOntologyFormat; -import com.clarkparsia.explanation.PelletExplanation; +import com.clarkparsia.modularity.IncrementalClassifier; public class PelletReasoner extends ReasonerComponent { private Reasoner reasoner; private OWLOntologyManager manager; private OWLOntology ontology; + private IncrementalClassifier classifier; // the data factory is used to generate OWL API objects private OWLDataFactory factory; @@ -285,8 +286,14 @@ // TODO: add method to find datatypes } } - reasoner.loadOntologies(allImports); - dematerialise(); + try { + classifier.loadOntologies(allImports); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// reasoner.loadOntologies(allImports); +// dematerialise(); } /* @@ -329,7 +336,7 @@ } - private void dematerialise(){ + public void dematerialise(){ long dematStartTime = System.currentTimeMillis(); logger.debug("dematerialising concepts"); @@ -379,14 +386,9 @@ } public boolean isConsistent(){ - return reasoner.isConsistent(); + return classifier.getReasoner().isConsistent(); +// return reasoner.isConsistent(); } - - public Set<Set<OWLAxiom>> getInconsistencyReasons(){ - PelletExplanation expGen = new PelletExplanation(manager, reasoner.getLoadedOntologies()); - - return expGen.getInconsistencyExplanations(); - } @Override public ReasonerType getReasonerType() { @@ -396,8 +398,15 @@ @Override public void releaseKB() { - reasoner.clearOntologies(); - reasoner.dispose(); + try { + classifier.clearOntologies(); + classifier.dispose(); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// reasoner.clearOntologies(); +// reasoner.dispose(); } @@ -437,23 +446,30 @@ manager = OWLManager.createOWLOntologyManager(); factory = manager.getOWLDataFactory(); //set classification output to "none", while default is "console" - PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.SWING; + PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.NONE; // change log level to WARN for Pellet, because otherwise log // output will be very large Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); pelletLogger.setLevel(Level.WARN); - reasoner = new Reasoner(manager); - manager.addOntologyChangeListener(reasoner); + classifier = new IncrementalClassifier(manager); + reasoner = classifier.getReasoner(); + } public void classify(){ - reasoner.classify(); + try { + classifier.classify(); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } public void realise(){ try { + reasoner.realise(); } catch (OWLReasonerException e) { // TODO Auto-generated catch block @@ -462,7 +478,7 @@ } public void refresh(){ - reasoner.refresh(); + classifier.getReasoner().refresh(); } public void addProgressMonitor(ProgressMonitor monitor){ @@ -1521,5 +1537,9 @@ return reasoner; } + public IncrementalClassifier getClassifier(){ + return classifier; + } + } Added: trunk/src/dl-learner/org/dllearner/tools/ore/Delete16.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/Delete16.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/Edit16.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/Edit16.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,11 +1,13 @@ package org.dllearner.tools.ore; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import org.dllearner.tools.ore.explanation.AxiomUsageChecker; import org.dllearner.tools.ore.explanation.CachedExplanationGenerator; import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.RootFinder; @@ -13,10 +15,8 @@ import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataFactory; -import org.semanticweb.owl.model.OWLException; +import org.semanticweb.owl.model.OWLEntity; import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyChange; -import org.semanticweb.owl.model.OWLOntologyChangeListener; import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.OWLSubClassAxiom; @@ -24,7 +24,7 @@ import uk.ac.manchester.cs.owl.explanation.ordering.DefaultExplanationOrderer; import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationTree; -public class ExplanationManager implements OWLOntologyChangeListener, RepairManagerListener, OREManagerListener{ +public class ExplanationManager implements OREManagerListener{ private static ExplanationManager instance; @@ -35,8 +35,6 @@ private RootFinder rootFinder; - private boolean ontologyChanged = true; - private boolean isComputeAllExplanations = false; private int maxExplantionCount = 1; private boolean allExplanationWarningChecked = false; @@ -46,8 +44,8 @@ private List<ExplanationManagerListener> listeners; + private AxiomUsageChecker usageChecker; - private CachedExplanationGenerator gen; @@ -57,14 +55,14 @@ this.manager = reasoner.getManager(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); - manager.addOntologyChangeListener(this); dataFactory = manager.getOWLDataFactory(); - RepairManager.getRepairManager(oreMan).addListener(this); explanationOrderer = new DefaultExplanationOrderer(); orderingMap = new HashMap<Explanation, List<Map<OWLAxiom, Integer>>>(); rootFinder = new RootFinder(); + + usageChecker = new AxiomUsageChecker(ontology); listeners = new ArrayList<ExplanationManagerListener>(); @@ -72,10 +70,6 @@ } - public ExplanationManager() { - // TODO Auto-generated constructor stub - } - public static synchronized ExplanationManager getInstance( OREManager oreMan) { if (instance == null) { @@ -84,19 +78,16 @@ return instance; } - public static synchronized ExplanationManager getInstance(){ - if (instance == null) { - instance = new ExplanationManager(); - } - return instance; - } - public Set<OWLClass> getDerivedClasses(){ return rootFinder.getDerivedClasses(); } public Set<OWLClass> getRootUnsatisfiableClasses(){ - return rootFinder.getRootClasses(); + if(rootFinder != null){ + return rootFinder.getRootClasses(); + } else { + return Collections.<OWLClass>emptySet(); + } } public Set<Explanation> getUnsatisfiableExplanations(OWLClass unsat) { @@ -148,8 +139,12 @@ return ordering; } + public Set<OWLEntity> getUsage(OWLAxiom axiom){ + return usageChecker.getUsage(axiom); + } + private ArrayList<Map<OWLAxiom, Integer>> getTree2List(Tree<OWLAxiom> tree){ ArrayList<Map<OWLAxiom, Integer>> ordering = new ArrayList<Map<OWLAxiom, Integer>>(); Map<OWLAxiom, Integer> axiom2Depth = new HashMap<OWLAxiom, Integer>(); @@ -160,9 +155,7 @@ } return ordering; } - - public int getArity(OWLClass cl, OWLAxiom ax) { int arity = 0; @@ -206,18 +199,6 @@ public int getMaxExplantionCount(){ return maxExplantionCount; } - - @Override - public void repairPlanExecuted(List<OWLOntologyChange> changes) { - reasoner.refresh(); - ontologyChanged = true; - } - - @Override - public void repairPlanChanged() { - // TODO Auto-generated method stub - - } public void addListener(ExplanationManagerListener l){ listeners.add(l); @@ -254,18 +235,13 @@ public Set<OWLAxiom> getRemainingAxioms(OWLAxiom source, OWLAxiom part){ return gen.getRemainingAxioms(source, part); } - - @Override - public void ontologiesChanged(List<? extends OWLOntologyChange> changes) - throws OWLException { - ontologyChanged = true; - } @Override public void activeOntologyChanged() { ontology = OREManager.getInstance().getPelletReasoner().getOWLAPIOntologies(); reasoner = OREManager.getInstance().getPelletReasoner().getReasoner(); gen = new CachedExplanationGenerator(ontology, reasoner); + orderingMap.clear(); } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,40 +1,47 @@ package org.dllearner.tools.ore; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; -import org.dllearner.tools.ore.explanation.AxiomRanker; +import org.dllearner.tools.ore.explanation.LostEntailmentsChecker; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyManager; -public class ImpactManager implements RepairManagerListener{ +public class ImpactManager implements RepairManagerListener, OREManagerListener{ private static ImpactManager instance; - private Map<OWLAxiom, Set<OWLAxiom>> impact; - private AxiomRanker ranker; - private OWLAxiom actual; + private LostEntailmentsChecker lostEntailmentsChecker; private List<OWLAxiom> selectedAxioms; private List<ImpactManagerListener> listeners; private OWLOntology ontology; private OWLOntologyManager manager; private Reasoner reasoner; + private OREManager oreMan; + + private Set<OWLAxiom> lostEntailments; + private Set<OWLAxiom> addedEntailments; private ImpactManager(OREManager oreMan) { + this.oreMan = oreMan; this.reasoner = oreMan.getPelletReasoner().getReasoner(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); - impact = new HashMap<OWLAxiom, Set<OWLAxiom>>(); + + lostEntailments = new HashSet<OWLAxiom>(); + addedEntailments = new HashSet<OWLAxiom>(); + selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); - ranker = new AxiomRanker(ontology, reasoner, manager); - RepairManager.getRepairManager(oreMan).addListener(this); + + lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getPelletReasoner().getClassifier(), manager); + RepairManager.getInstance(oreMan).addListener(this); + oreMan.addListener(this); + } @@ -57,46 +64,31 @@ return instance; } - - public Set<OWLAxiom> getImpactAxioms(OWLAxiom ax) { - - Set<OWLAxiom> imp = impact.get(ax); - if (imp == null) { - imp = new HashSet<OWLAxiom>(); - impact.put(ax, imp); - if(ax != null){ -// imp.addAll(ranker.computeImpactOnRemoval(ax)); - imp.addAll(ranker.computeImpactSOS(ax)); - } - } - return imp; + public Set<OWLAxiom> getLostEntailments(){ + return lostEntailments; } - public Set<OWLAxiom> getImpactForAxioms2Remove(){ - Set<OWLAxiom> totalImpact = new HashSet<OWLAxiom>(); - for(OWLAxiom ax : selectedAxioms){ - Set<OWLAxiom> imp = getImpactAxioms(ax); - if(imp != null){ - totalImpact.addAll(imp); - } - - - } - return totalImpact; + public Set<OWLAxiom> getAddedEntailments(){ + return addedEntailments; } - public void setActualAxiom(OWLAxiom ax){ - actual = ax; - fireImpactListChanged(); + public void computeImpactForAxiomsInRepairPlan(){ + lostEntailments.clear(); + addedEntailments.clear(); + List<OWLOntologyChange> repairPlan = RepairManager.getInstance(oreMan).getRepairPlan(); + List<Set<OWLAxiom>> classificationImpact = lostEntailmentsChecker.computeClassificationImpact(repairPlan); + lostEntailments.addAll(classificationImpact.get(0)); + addedEntailments.addAll(classificationImpact.get(1)); + Set<OWLAxiom> structuralImpact = lostEntailmentsChecker.computeStructuralImpact(repairPlan); + lostEntailments.addAll(structuralImpact); } - public void addAxiom2ImpactList(OWLAxiom ax){ - selectedAxioms.add(ax); - + public void addSelection(OWLAxiom ax){ + selectedAxioms.add(ax); fireImpactListChanged(); } - public void removeAxiomFromImpactList(OWLAxiom ax){ + public void removeSelection(OWLAxiom ax){ selectedAxioms.remove(ax); fireImpactListChanged(); } @@ -121,10 +113,26 @@ @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { selectedAxioms.clear(); - impact.clear(); + lostEntailments.clear(); + addedEntailments.clear(); fireImpactListChanged(); } + + @Override + public void activeOntologyChanged() { + this.reasoner = oreMan.getPelletReasoner().getReasoner(); + this.ontology = reasoner.getLoadedOntologies().iterator().next(); + this.manager = reasoner.getManager(); + lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getPelletReasoner().getClassifier(), manager); + selectedAxioms.clear(); + lostEntailments.clear(); + addedEntailments.clear(); + fireImpactListChanged(); + + } + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -31,13 +31,11 @@ import org.dllearner.tools.ore.ui.wizard.Wizard; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.InconsistencyExplanationPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.IntroductionPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.KnowledgeSourcePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.LearningPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.RepairPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.SavePanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.UnsatisfiableExplanationPanelDescriptor; /** @@ -68,9 +66,10 @@ // TODO Auto-generated catch block e.printStackTrace(); } + Locale.setDefault(Locale.ENGLISH); final Wizard wizard = new Wizard(); - wizard.getDialog().setTitle("DL-Learner ORE-Tool"); + wizard.getDialog().setTitle("DL-Learner Ontology Repair and Enrichment"); Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); wizard.getDialog().setSize(dim); @@ -101,12 +100,10 @@ if (!(args.length == 1)){ wizard.setCurrentPanel(IntroductionPanelDescriptor.IDENTIFIER); } else{ - OREManager.getInstance().setCurrentKnowledgeSource(new File(args[0]).toURI()); - OREManager.getInstance().initPelletReasoner(); -// ((KnowledgeSourcePanelDescriptor) descriptor2).getPanel().setFileURL(args[0]); wizard.setCurrentPanel(KnowledgeSourcePanelDescriptor.IDENTIFIER); - wizard.setLeftPanel(1); - + wizard.setLeftPanel(1); + ((KnowledgeSourcePanelDescriptor)wizard.getModel().getPanelHashMap().get(KnowledgeSourcePanelDescriptor.IDENTIFIER)).loadOntology(new File(args[0]).toURI()); + } SwingUtilities.invokeLater(new Runnable() { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,7 +1,5 @@ package org.dllearner.tools.ore; -import java.io.IOException; -import java.io.StringWriter; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; @@ -35,11 +33,7 @@ import org.dllearner.reasoning.PelletReasoner; import org.dllearner.tools.ore.ui.DescriptionLabel; import org.mindswap.pellet.exceptions.InconsistentOntologyException; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLException; -import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; - public class OREManager { @@ -183,32 +177,6 @@ } } - - - public String getInconsistencyExplanationsString(){ - ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); - StringWriter buffer = new StringWriter(); - renderer.startRendering(buffer); - try { - renderer.render(getInconsistencyExplanations()); - } catch (UnsupportedOperationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - renderer.endRendering(); - return buffer.toString(); - } - - private Set<Set<OWLAxiom>> getInconsistencyExplanations(){ - return pelletReasoner.getInconsistencyReasons(); - } - public OntologyModifier getModifier() { return modifier; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -2,46 +2,41 @@ import java.util.ArrayList; import java.util.List; -import java.util.Set; import java.util.Stack; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.AddAxiom; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyChangeException; import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.RemoveAxiom; -public class RepairManager { +public class RepairManager implements OREManagerListener{ private static RepairManager instance; - - private OWLAxiom actual; - private List<OWLAxiom> axioms2Remove; - private List<OWLAxiom> axioms2Keep; private List<RepairManagerListener> listeners; - private OWLOntology ontology; + private OWLOntologyManager manager; private Reasoner reasoner; + private List<OWLOntologyChange> repairPlan; + private Stack<List<OWLOntologyChange>> undoStack; private Stack<List<OWLOntologyChange>> redoStack; - private RepairManager(OREManager oreMan) { + private RepairManager(OREManager oreMan){ this.reasoner = oreMan.getPelletReasoner().getReasoner(); - this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); - - axioms2Remove = new ArrayList<OWLAxiom>(); - axioms2Keep = new ArrayList<OWLAxiom>(); - + listeners = new ArrayList<RepairManagerListener>(); undoStack = new Stack<List<OWLOntologyChange>>(); redoStack = new Stack<List<OWLOntologyChange>>(); + + repairPlan = new ArrayList<OWLOntologyChange>(); + + oreMan.addListener(this); } @@ -57,100 +52,77 @@ listeners.remove(listener); } - public static synchronized RepairManager getRepairManager(OREManager oreMan) { + public static synchronized RepairManager getInstance(OREManager oreMan) { if (instance == null) { instance = new RepairManager(oreMan); } return instance; } - public void addAxiom2Remove(OWLAxiom ax){ - axioms2Remove.add(ax); + public void addToRepairPlan(OWLOntologyChange change){ + repairPlan.add(change); fireRepairPlanChanged(); } - public void addAxioms2Remove(Set<OWLAxiom> axioms){ - axioms2Remove.addAll(axioms); + public void removeFromRepairPlan(OWLOntologyChange change){ + repairPlan.remove(change); fireRepairPlanChanged(); } - public void removeAxiom2Remove(OWLAxiom ax){ - axioms2Remove.remove(ax); - fireRepairPlanChanged(); + public List<OWLOntologyChange> getRepairPlan(){ + return repairPlan; } - public void removeAxioms2Remove(Set<OWLAxiom> axioms){ - axioms2Remove.removeAll(axioms); - fireRepairPlanChanged(); + public boolean isUndoable(){ + return !undoStack.isEmpty(); } - public void addAxiom2Keep(OWLAxiom ax){ - axioms2Keep.add(ax); - fireRepairPlanChanged(); - } - - public void addAxioms2Keep(Set<OWLAxiom> axioms){ - axioms2Keep.addAll(axioms); - fireRepairPlanChanged(); - } - - public void removeAxiom2Keep(OWLAxiom ax){ - axioms2Keep.remove(ax); - fireRepairPlanChanged(); - } - - public void removeAxioms2Keep(Set<OWLAxiom> axioms){ - axioms2Keep.removeAll(axioms); - fireRepairPlanChanged(); - } - - public boolean isSelected(OWLAxiom ax){ - return axioms2Remove.contains(ax); - } - - public List<OWLAxiom> getAxioms2Remove(){ - return axioms2Remove; - } - - public List<OWLAxiom> getAxioms2Keep(){ - return axioms2Keep; - } - public void executeRepairPlan(){ - List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); - for(OWLAxiom ax : axioms2Remove){ - changes.add(new RemoveAxiom(ontology, ax)); - } - for(OWLAxiom ax : axioms2Keep){ - changes.add(new AddAxiom(ontology, ax)); - } + try { - manager.applyChanges(changes); + manager.applyChanges(repairPlan); } catch (OWLOntologyChangeException e) { System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); e.printStackTrace(); } - undoStack.push(changes); - axioms2Remove.clear(); - axioms2Keep.clear(); + undoStack.push(new ArrayList<OWLOntologyChange>(repairPlan)); + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(repairPlan); + + repairPlan.clear(); fireRepairPlanExecuted(changes); + } public void undo(){ List<OWLOntologyChange> changes = undoStack.pop(); redoStack.push(changes); + try { - manager.applyChanges(changes); + manager.applyChanges(getInverseChanges(changes)); } catch (OWLOntologyChangeException e) { System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); e.printStackTrace(); } + + fireRepairPlanExecuted(changes); } public void redo(){ } + private List<OWLOntologyChange> getInverseChanges(List<OWLOntologyChange> changes){ + List<OWLOntologyChange> inverseChanges = new ArrayList<OWLOntologyChange>(changes.size()); + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){ + inverseChanges.add(new AddAxiom(change.getOntology(), change.getAxiom())); + } else { + inverseChanges.add(new RemoveAxiom(change.getOntology(), change.getAxiom())); + } + } + return inverseChanges; + } + private void fireRepairPlanChanged(){ for(RepairManagerListener listener : listeners){ listener.repairPlanChanged(); @@ -158,9 +130,14 @@ } private void fireRepairPlanExecuted(List<OWLOntologyChange> changes){ - for(RepairManagerListener listener : listeners){ listener.repairPlanExecuted(changes); } } + + @Override + public void activeOntologyChanged() { + repairPlan.clear(); + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,5 +1,7 @@ package org.dllearner.tools.ore; +import java.awt.Cursor; + import javax.swing.JDialog; import javax.swing.SwingWorker; @@ -50,4 +52,18 @@ public synchronized void cancelCurrentThread(){currentThread.stop(); } + + public void setTaskStarted(String message){ + dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + statusBar.setProgressTitle(message); + statusBar.showProgress(true); + } + + public void setTaskFinished(){ + dialog.setCursor(null); + statusBar.setProgressTitle("Done"); + statusBar.showProgress(false); + } + + } Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,269 +0,0 @@ -package org.dllearner.tools.ore.explanation; - -import java.net.URI; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.mindswap.pellet.owlapi.PelletReasonerFactory; -import org.mindswap.pellet.owlapi.Reasoner; -import org.mindswap.pellet.utils.SetUtils; -import org.semanticweb.owl.apibinding.OWLManager; -import org.semanticweb.owl.inference.OWLReasonerException; -import org.semanticweb.owl.model.AxiomType; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLClass; -import org.semanticweb.owl.model.OWLDataFactory; -import org.semanticweb.owl.model.OWLDataPropertyDomainAxiom; -import org.semanticweb.owl.model.OWLDescription; -import org.semanticweb.owl.model.OWLDisjointClassesAxiom; -import org.semanticweb.owl.model.OWLObjectPropertyDomainAxiom; -import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; -import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyChangeException; -import org.semanticweb.owl.model.OWLOntologyCreationException; -import org.semanticweb.owl.model.OWLOntologyManager; -import org.semanticweb.owl.model.OWLSubClassAxiom; -import org.semanticweb.owl.model.RemoveAxiom; - -import com.clarkparsia.modularity.IncrementalClassifier; -import com.clarkparsia.modularity.ModuleExtractor; -import com.clarkparsia.modularity.ModuleExtractorFactory; - -public class AxiomRanker { - - private Map axiomSOSMap; - - private OWLOntology ontology; - private Reasoner reasoner; - private OWLOntologyManager manager; - private OWLDataFactory factory; - private IncrementalClassifier classifier; - - boolean enableImpactUnsat; - - public AxiomRanker(OWLOntology ont, Reasoner reasoner, OWLOntologyManager mng){ - this.ontology = ont; - this.reasoner = reasoner; - this.manager = mng; - this.factory = manager.getOWLDataFactory(); - ModuleExtractor extractor = ModuleExtractorFactory.createModuleExtractor(); - classifier = new IncrementalClassifier(manager, reasoner, extractor); - - } - - public Set<OWLAxiom> computeImpactOnRemoval(OWLAxiom ax){ - Set<OWLAxiom> impact = new HashSet<OWLAxiom>(); - - try { -// IncrementalClassifier classifier = new IncrementalClassifier(manager); - classifier.loadOntology(ontology); - classifier.classify(); - Set<OWLClass> inc = classifier.getInconsistentClasses(); - for(OWLDescription cl : ontology.getClassesInSignature()){ - if(!inc.contains(cl)){ - for(OWLClass sup : SetUtils.union(classifier.getAncestorClasses(cl))){ - if(!sup.equals(factory.getOWLThing())){ - for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ - if(!sub.equals(factory.getOWLNothing())){ - impact.add(factory.getOWLSubClassAxiom(cl, sup)); - } - } - - } - } - - } - } - - - manager.applyChange(new RemoveAxiom(ontology, ax)); - - classifier.classify(); - inc = classifier.getInconsistentClasses();System.out.println(inc); - - for(OWLDescription cl : ontology.getClassesInSignature()){ - if(!inc.contains(cl)){ - for(OWLClass sup : SetUtils.union(classifier.getAncestorClasses(cl))){ - if(!sup.equals(factory.getOWLThing())){ - for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ - if(!sub.equals(factory.getOWLNothing())){ - impact.remove(factory.getOWLSubClassAxiom(cl, sup)); - } - } - - } - } - - } - } - manager.addAxiom(ontology, ax);classifier.classify(); - - } catch (OWLReasonerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLOntologyChangeException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return impact; - } - - public Set<OWLAxiom> computeImpactSOS(OWLAxiom axiom) { - Set<OWLAxiom> result = new HashSet<OWLAxiom>(); - if (axiom instanceof OWLSubClassAxiom) { - OWLSubClassAxiom subAx = (OWLSubClassAxiom) axiom; - if (subAx.getSubClass() instanceof OWLClass && subAx.getSuperClass() instanceof OWLClass) { - OWLClass sub = (OWLClass) subAx.getSubClass(); - OWLClass sup = (OWLClass) subAx.getSuperClass(); - - for (OWLClass desc : SetUtils.union(reasoner.getDescendantClasses(sub))) { - - for (OWLClass anc : SetUtils.union(reasoner.getAncestorClasses(sup))) { - - if (!anc.equals(factory.getOWLThing()) && !desc.equals(factory.getOWLNothing())) { - OWLSubClassAxiom ax = factory.getOWLSubClassAxiom(desc, anc); - result.add(ax); - } - } - } - } - }else if (axiom instanceof OWLDisjointClassesAxiom) { - Set<OWLDescription> disjointClasses = ((OWLDisjointClassesAxiom) axiom).getDescriptions(); - boolean complex = false; - for (OWLDescription dis : disjointClasses) { - if (dis.isAnonymous()) { - complex = true; - break; - } - } - if (!complex) { - - List<OWLDescription> disjoints = new ArrayList<OWLDescription>(disjointClasses); - - - - for (OWLDescription dis : new ArrayList<OWLDescription>(disjoints)) { - if (!dis.equals(factory.getOWLNothing())) { - disjoints.remove(dis); - Set<? extends OWLDescription> descendants = SetUtils.union(reasoner.getDescendantClasses(dis.asOWLClass())); - descendants.removeAll(reasoner.getEquivalentClasses(factory.getOWLNothing())); -// if (enableImpactUnsat) { -// descendants.addAll(((OWLClass) dis).getSubClasses(ontology)); -// } - for (OWLDescription desc1 : descendants) { - - if (!desc1.equals(factory.getOWLNothing())) { - if (enableImpactUnsat || !reasoner.getEquivalentClasses((desc1)).contains(factory.getOWLNothing())) { - for (OWLDescription desc2 : disjoints) { - - if (!desc2.equals(desc1)) { - Set<OWLDescription> newDis = new HashSet<OWLDescription>(); - newDis.add(desc1); - newDis.add(desc2); - OWLDisjointClassesAxiom ax = factory.getOWLDisjointClassesAxiom(newDis); - result.add(ax); - } - } - } - } - } - - disjoints.add(dis); - - - } - } -// return result; - } - } - else if (axiom instanceof OWLObjectPropertyDomainAxiom) { - OWLObjectPropertyDomainAxiom pd = (OWLObjectPropertyDomainAxiom) axiom; - - if (pd.getDomain() instanceof OWLClass) { - OWLClass dom = (OWLClass) pd.getDomain(); - Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); - for (OWLClass sup : superClasses) { - - OWLObjectPropertyDomainAxiom ax = factory.getOWLObjectPropertyDomainAxiom( pd.getProperty(), sup); - result.add(ax); - } - } - } - else if (axiom instanceof OWLDataPropertyDomainAxiom) { - OWLDataPropertyDomainAxiom pd = (OWLDataPropertyDomainAxiom) axiom; - - if (pd.getDomain() instanceof OWLClass) { - OWLClass dom = (OWLClass) pd.getDomain(); - Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); - for (OWLClass sup : superClasses) { - - OWLDataPropertyDomainAxiom ax = factory.getOWLDataPropertyDomainAxiom( pd.getProperty(), sup); - result.add(ax); - } - } - } - else if (axiom instanceof OWLObjectPropertyRangeAxiom) { - OWLObjectPropertyRangeAxiom pd = (OWLObjectPropertyRangeAxiom) axiom; - - if (pd.getRange() instanceof OWLClass) { - OWLClass ran = (OWLClass) pd.getRange(); - Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(ran)); - for (OWLClass sup : superClasses) { - - OWLObjectPropertyRangeAxiom ax = factory.getOWLObjectPropertyRangeAxiom(pd.getProperty(), sup); - result.add(ax); - } - } - } - for(OWLAxiom ax : result){ - System.out.println(reasoner.isEntailed(axiom)); - } - return result; - } - - - - - - public static void main(String[] args){ - - try { - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - OWLDataFactory dFactory = manager.getOWLDataFactory(); - OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI.create("file:examples/ore/koala.owl")); - PelletReasonerFactory factory = new PelletReasonerFactory(); - Reasoner reasoner = factory.createReasoner(manager); - reasoner.loadOntology(ontology); - reasoner.classify(); - - - OWLClass cl1 = dFactory.getOWLClass(URI.create("http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#koala")); - OWLClass cl2 = dFactory.getOWLClass(URI.create("http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#person")); - OWLAxiom ax = dFactory.getOWLSubClassAxiom(cl1, dFactory.getOWLObjectComplementOf(cl2)); - Set<OWLClass> before = null; - Set<OWLClass> after = null; - - before = SetUtils.union(reasoner.getSuperClasses(cl1)); - manager.applyChange(new RemoveAxiom(ontology, ax)); - after = SetUtils.union(reasoner.getSuperClasses(cl1)); - System.out.println(SetUtils.difference(before, after)); - - System.out.println(cl1.getSuperClasses(ontology)); - System.out.println(after); - - - - } catch (OWLOntologyCreationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLOntologyChangeException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - -} Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -0,0 +1,43 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLEntity; +import org.semanticweb.owl.model.OWLOntology; + +public class AxiomUsageChecker { + + private OWLOntology ontology; + private Map<OWLAxiom, Set<OWLEntity>> axiom2UsageMap; + + public AxiomUsageChecker(OWLOntology ontology){ + this.ontology = ontology; + axiom2UsageMap = new HashMap<OWLAxiom, Set<OWLEntity>>(); + } + + private Set<OWLEntity> computeUsage(OWLAxiom axiom) { + Set<OWLEntity> usage = new HashSet<OWLEntity>(); + for(OWLEntity ent : axiom.getSignature()){ + for(OWLAxiom ax : ontology.getLogicalAxioms()){ + if(ax.getSignature().contains(ent)){ + usage.addAll(ax.getSignature()); + } + } + } + + return usage; + } + + public Set<OWLEntity> getUsage(OWLAxiom axiom){ + Set<OWLEntity> usage = axiom2UsageMap.get(axiom); + if(usage == null){ + usage = computeUsage(axiom); + axiom2UsageMap.put(axiom, usage); + } + return usage; + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.Map.Entry; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; @@ -19,7 +18,6 @@ import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyManager; -import org.semanticweb.owl.model.RemoveAxiom; import uk.ac.manchester.cs.owl.modularity.ModuleType; @@ -49,7 +47,7 @@ laconicExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); lastRequestedRegularSize = new HashMap<OWLAxiom, Integer>(); lastRequestedLaconicSize = new HashMap<OWLAxiom, Integer>(); - RepairManager.getRepairManager(OREManager.getInstance()).addListener(this); + RepairManager.getInstance(OREManager.getInstance()).addListener(this); // regularExpGen = new PelletExplanation(manager, Collections.singleton(ontology)); // laconicExpGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(ontology)); Copied: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java (from rev 1834, trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -0,0 +1,245 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.mindswap.pellet.owlapi.Reasoner; +import org.mindswap.pellet.utils.SetUtils; +import org.semanticweb.owl.inference.OWLReasonerException; +import org.semanticweb.owl.model.AddAxiom; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLDataPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLDisjointClassesAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.OWLOntologyChangeException; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.OWLSubClassAxiom; +import org.semanticweb.owl.model.RemoveAxiom; + +import com.clarkparsia.modularity.IncrementalClassifier; + +public class LostEntailmentsChecker { + + + private OWLOntology ontology; + private Reasoner reasoner; + private OWLOntologyManager manager; + private OWLDataFactory factory; + private IncrementalClassifier classifier; + + boolean enableImpactUnsat; + + public LostEntailmentsChecker(OWLOntology ont, IncrementalClassifier classifier, OWLOntologyManager mng){ + this.ontology = ont; + this.classifier = classifier; + this.manager = mng; + this.factory = manager.getOWLDataFactory(); + this.reasoner = classifier.getReasoner(); + + } + + public List<Set<OWLAxiom>> computeClassificationImpact(List<OWLOntologyChange> changes){ + List<Set<OWLAxiom>> impact = new ArrayList<Set<OWLAxiom>>(2); + Set<OWLAxiom> entailmentsBefore = new HashSet<OWLAxiom>(); + Set<OWLAxiom> entailmentsAfter = new HashSet<OWLAxiom>(); + Set<OWLAxiom> lostEntailments = new HashSet<OWLAxiom>(); + Set<OWLAxiom> addedEntailents = new HashSet<OWLAxiom>(); + + try{ + Set<OWLClass> inc = classifier.getInconsistentClasses(); + for(OWLDescription cl : ontology.getClassesInSignature()){ + if(!inc.contains(cl) && !cl.isOWLThing()){ + for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ + if(!sub.isOWLNothing() && !inc.contains(sub)){ + entailmentsBefore.add(factory.getOWLSubClassAxiom(sub, cl)); + } + } + } + } + + + manager.applyChanges(changes); + + classifier.classify(); + inc = classifier.getInconsistentClasses(); + + for(OWLDescription cl : ontology.getClassesInSignature()){ + if(!inc.contains(cl) && !cl.isOWLThing()){ + for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ + if(!sub.isOWLNothing() && !inc.contains(sub)){ + entailmentsAfter.add(factory.getOWLSubClassAxiom(sub, cl)); + } + } + } + } + lostEntailments = SetUtils.difference(entailmentsBefore, entailmentsAfter); + addedEntailents = SetUtils.difference(entailmentsAfter, entailmentsBefore); + impact.add(0, lostEntailments); + impact.add(1, addedEntailents); + manager.applyChanges(getInverseChanges(changes)); + + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return impact; + } + + public Set<OWLAxiom> computeStructuralImpact(List<OWLOntologyChange> changes) {reasoner.refresh(); + Set<OWLAxiom> possibleLosts = new HashSet<OWLAxiom>(); + Set<OWLAxiom> realLosts = new HashSet<OWLAxiom>(); + OWLAxiom axiom; + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){ + axiom = change.getAxiom(); + if (axiom instanceof OWLSubClassAxiom) { + OWLSubClassAxiom subAx = (OWLSubClassAxiom) axiom; + if (subAx.getSubClass() instanceof OWLClass && subAx.getSuperClass() instanceof OWLClass) { + OWLClass sub = (OWLClass) subAx.getSubClass(); + OWLClass sup = (OWLClass) subAx.getSuperClass(); + + for (OWLClass desc : SetUtils.union(reasoner.getDescendantClasses(sub))) { + + for (OWLClass anc : SetUtils.union(reasoner.getAncestorClasses(sup))) { + + if (!anc.equals(factory.getOWLThing()) && !desc.equals(factory.getOWLNothing())) { + OWLSubClassAxiom ax = factory.getOWLSubClassAxiom(desc, anc); + possibleLosts.add(ax); + } + } + } + } + }else if (axiom instanceof OWLDisjointClassesAxiom) { + Set<OWLDescription> disjointClasses = ((OWLDisjointClassesAxiom) axiom).getDescriptions(); + boolean complex = false; + for (OWLDescription dis : disjointClasses) { + if (dis.isAnonymous()) { + complex = true; + break; + } + } + if (!complex) { + + List<OWLDescription> disjoints = new ArrayList<OWLDescription>(disjointClasses); + + + + for (OWLDescription dis : new ArrayList<OWLDescription>(disjoints)) { + if (!dis.equals(factory.getOWLNothing())) { + disjoints.remove(dis); + Set<? extends OWLDescription> descendants = SetUtils.union(reasoner.getDescendantClasses(dis.asOWLClass())); + + descendants.removeAll(reasoner.getEquivalentClasses(factory.getOWLNothing())); +// if (enableImpactUnsat) { +// descendants.addAll(((OWLClass) dis).getSubClasses(ontology)); +// } + for (OWLDescription desc1 : descendants) { + + if (!desc1.equals(factory.getOWLNothing())) { + if (enableImpactUnsat || !reasoner.getEquivalentClasses((desc1)).contains(factory.getOWLNothing())) { + for (OWLDescription desc2 : disjoints) { + + if (!desc2.equals(desc1)) { + Set<OWLDescription> newDis = new HashSet<OWLDescription>(); + newDis.add(desc1); + newDis.add(desc2); + OWLDisjointClassesAxiom ax = factory.getOWLDisjointClassesAxiom(newDis); + possibleLosts.add(ax); + } + } + } + } + } + + disjoints.add(dis); + + + } + } +// return result; + } + } + else if (axiom instanceof OWLObjectPropertyDomainAxiom) { + OWLObjectPropertyDomainAxiom pd = (OWLObjectPropertyDomainAxiom) axiom; + + if (pd.getDomain() instanceof OWLClass) { + OWLClass dom = (OWLClass) pd.getDomain(); + Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); + for (OWLClass sup : superClasses) { + + OWLObjectPropertyDomainAxiom ax = factory.getOWLObjectPropertyDomainAxiom( pd.getProperty(), sup); + possibleLosts.add(ax); + } + } + } + else if (axiom instanceof OWLDataPropertyDomainAxiom) { + OWLDataPropertyDomainAxiom pd = (OWLDataPropertyDomainAxiom) axiom; + + if (pd.getDomain() instanceof OWLClass) { + OWLClass dom = (OWLClass) pd.getDomain(); + Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); + for (OWLClass sup : superClasses) { + + OWLDataPropertyDomainAxiom ax = factory.getOWLDataPropertyDomainAxiom( pd.getProperty(), sup); + possibleLosts.add(ax); + } + } + } + else if (axiom instanceof OWLObjectPropertyRangeAxiom) { + OWLObjectPropertyRangeAxiom pd = (OWLObjectPropertyRangeAxiom) axiom; + + if (pd.getRange() instanceof OWLClass) { + OWLClass ran = (OWLClass) pd.getRange(); + Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(ran)); + for (OWLClass sup : superClasses) { + + OWLObjectPropertyRangeAxiom ax = factory.getOWLObjectPropertyRangeAxiom(pd.getProperty(), sup); + possibleLosts.add(ax); + } + } + } + } + + } + + for(OWLAxiom ax : possibleLosts){ + try { + manager.applyChanges(changes); + if(!reasoner.isEntailed(ax)){ + realLosts.add(ax); + } + manager.applyChanges(getInverseChanges(changes)); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + return realLosts; + } + + private List<OWLOntologyChange> getInverseChanges(List<OWLOntologyChange> changes){ + List<OWLOntologyChange> inverseChanges = new ArrayList<OWLOntologyChange>(changes.size()); + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){ + inverseChanges.add(new AddAxiom(change.getOntology(), change.getAxiom())); + } else { + inverseChanges.add(new RemoveAxiom(change.getOntology(), change.getAxiom())); + } + } + return inverseChanges; + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -11,7 +11,10 @@ import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.OREManagerListener; +import org.dllearner.tools.ore.RepairManager; +import org.dllearner.tools.ore.RepairManagerListener; import org.mindswap.pellet.owlapi.PelletReasonerFactory; +import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.inference.OWLReasoner; import org.semanticweb.owl.inference.OWLReasonerException; @@ -51,10 +54,10 @@ import org.semanticweb.owl.model.OWLQuantifiedRestriction; import org.semanticweb.owl.model.RemoveAxiom; -public class RootFinder implements OWLDescriptionVisitor, OREManagerListener, OWLOntologyChangeListener{ +public class RootFinder implements OWLDescriptionVisitor, OREManagerListener, OWLOntologyChangeListener, RepairManagerListener{ private OWLOntologyManager manager; - private OWLReasoner reasoner; + private Reasoner reasoner; private OWLReasonerFactory reasonerFactory; private Set<OWLClass> depend2Classes; @@ -67,7 +70,7 @@ private boolean ontologyChanged = true; - int depth; + private int depth; private Map<Integer, Set<OWLObjectAllRestriction>> depth2UniversalRestrictionPropertyMap; private Map<Integer, Set<OWLObjectPropertyExpression>> depth2ExistsRestrictionPropertyMap; @@ -96,7 +99,8 @@ parent2Children = new HashMap<OWLClass, Set<OWLClass>>(); OREManager.getInstance().addListener(this); - OREManager.getInstance().getPelletReasoner().getOWLOntologyManager().addOntologyChangeListener(this); + RepairManager.getInstance(OREManager.getInstance()).addListener(this); +// OREManager.getInstance().getPelletReasoner().getOWLOntologyManager().addOntologyChangeListener(this); } public Set<OWLClass> getRootClasses(){ @@ -121,6 +125,14 @@ } public void computeRootDerivedClasses(){ +// this.manager = OWLManager.createOWLOntologyManager(); +// try { +// this.ontology = manager.createOntology(URI.create("all"), reasoner.getLoadedOntologies()); +// } catch (OWLOntologyCreationException e) { +// e.printStackTrace(); +// } catch (OWLOntologyChangeException e) { +// e.printStackTrace(); +// } rootClasses.clear(); derivedClasses.clear(); depend2Classes.clear(); @@ -136,7 +148,7 @@ } private void computePossibleRoots(){ - try {derivedClasses.addAll(reasoner.getInconsistentClasses()); + derivedClasses.addAll(reasoner.getInconsistentClasses()); for(OWLClass cls : derivedClasses){ reset(); for(OWLDescription equi : cls.getEquivalentClasses(ontology)){ @@ -160,9 +172,7 @@ rootClasses.add(cls); } } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } private void pruneRoots() { @@ -222,7 +232,7 @@ private void checkObjectRestriction(OWLQuantifiedRestriction<OWLObjectPropertyExpression,OWLDescription> restr){ OWLDescription filler = restr.getFiller(); - try { + if(filler.isAnonymous()){ depth++; filler.accept(this); @@ -237,10 +247,8 @@ } addExistsRestrictionProperty(restr.getProperty()); } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } private void addExistsRestrictionProperty(OWLObjectPropertyExpression expr){ @@ -265,19 +273,17 @@ @Override public void visit(OWLClass cls) { - try { + if(!reasoner.isSatisfiable(cls)) { depend2Classes.add(cls); } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } @Override public void visit(OWLObjectIntersectionOf and) { - try { + for(OWLDescription op : and.getOperands()) { if(op.isAnonymous()){ op.accept(this); @@ -285,15 +291,13 @@ depend2Classes.add(op.asOWLClass()); } } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } @Override public void visit(OWLObjectUnionOf or) { - try { + for(OWLDescription op : or.getOperands()){ if(reasoner.isSatisfiable(op)){ return; @@ -306,9 +310,7 @@ depend2Classes.add(op.asOWLClass()); } } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } @Override @@ -399,4 +401,16 @@ ontologyChanged = true; } + + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted(List<OWLOntologyChange> changes) { + ontologyChanged = true; + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -306,7 +306,7 @@ public Set<OWLAxiom> getSourceAxioms(OWLAxiom axiom){ Map<OWLAxiom, Set<OWLAxiom>> axioms2SourceMap = oPlus.getAxiomsMap(); Set<OWLAxiom> sourceAxioms = new HashSet<OWLAxiom>(); - + System.out.println(axiom); for(OWLAxiom ax : axioms2SourceMap.get(axiom)){ if(ontology.containsAxiom(ax)){ sourceAxioms.add(ax); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt =================================================================== (Binary files differ) Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -11,6 +11,7 @@ import java.util.List; import javax.swing.AbstractCellEditor; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.UIManager; @@ -41,21 +42,22 @@ public ExplanationTable(Explanation exp, OWLClass cl) { - repMan = RepairManager.getRepairManager(OREManager.getInstance()); + repMan = RepairManager.getInstance(OREManager.getInstance()); repMan.addListener(this); setBackground(Color.WHITE); setHighlighters(HighlighterFactory.createAlternateStriping()); setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setModel(new ExplanationTableModel(exp, cl)); - TableColumn column4 = getColumn(3); - column4.setCellRenderer(new ButtonCellRenderer()); - column4.setCellEditor(new ButtonCellEditor()); - column4.setResizable(false); + TableColumn column5 = getColumn(4); + column5.setCellRenderer(new ButtonCellRenderer()); + column5.setCellEditor(new ButtonCellEditor()); + column5.setResizable(false); setRowHeight(getRowHeight() + 4); getColumn(1).setMaxWidth(30); getColumn(2).setMaxWidth(30); - getColumn(3).setMaxWidth(80); + getColumn(3).setMaxWidth(30); + getColumn(4).setMaxWidth(30); getSelectionModel().addListSelectionListener( new ListSelectionListener() { @@ -133,7 +135,8 @@ setForeground(table.getForeground()); setBackground(UIManager.getColor("Button.background")); } - setText( (value ==null) ? "" : value.toString() ); + setIcon(new ImageIcon("src/dl-learner/org/dllearner/tools/ore/Edit16.gif")); + setText(""); return this; } @@ -164,7 +167,7 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { text = (value == null) ? "" : value.toString(); - editButton.setText(text); + editButton.setText(""); return editButton; } @@ -182,7 +185,7 @@ @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { - // TODO Auto-generated method stub + repaint(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -7,8 +7,11 @@ import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.explanation.Explanation; +import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.RemoveAxiom; public class ExplanationTableModel extends AbstractTableModel { @@ -22,18 +25,20 @@ private ImpactManager impMan; private RepairManager repMan; private OWLClass unsat; + private OWLOntology ont; public ExplanationTableModel(Explanation exp, OWLClass cl){ this.exp = exp; this.expMan = ExplanationManager.getInstance(OREM... [truncated message content] |