From: <lor...@us...> - 2009-05-20 09:23:00
|
Revision: 1764 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1764&view=rev Author: lorenz_b Date: 2009-05-20 09:22:49 +0000 (Wed, 20 May 2009) Log Message: ----------- added refreshing action after executing repair plan Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/RepairPlanPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairTableModel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -13,6 +13,7 @@ import org.dllearner.tools.ore.explanation.RootFinder; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; +import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataFactory; @@ -29,7 +30,7 @@ import com.clarkparsia.explanation.PelletExplanation; -public class ExplanationManager implements OWLOntologyChangeListener{ +public class ExplanationManager implements OWLOntologyChangeListener, ImpactManagerListener{ private static ExplanationManager instance; @@ -49,17 +50,18 @@ - private ExplanationManager(OWLOntologyManager manager, Reasoner reasoner, - OWLOntology ontology) { + private ExplanationManager(Reasoner reasoner) { regularExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); laconicExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); - this.manager = manager; this.reasoner = reasoner; - this.ontology = ontology; + this.manager = reasoner.getManager(); + this.ontology = reasoner.getLoadedOntologies().iterator().next(); + manager.addOntologyChangeListener(this); + manager.addOntologyChangeListener(reasoner); dataFactory = manager.getOWLDataFactory(); - + ImpactManager.getImpactManager(reasoner).addListener(this); reasonerFactory = new PelletReasonerFactory(); rootFinder = new RootFinder(manager, reasoner, reasonerFactory); @@ -75,9 +77,9 @@ } public static synchronized ExplanationManager getExplanationManager( - OWLOntologyManager manager, Reasoner reasoner, OWLOntology ontology) { + Reasoner reasoner) { if (instance == null) { - instance = new ExplanationManager(manager, reasoner, ontology); + instance = new ExplanationManager(reasoner); } return instance; } @@ -177,10 +179,12 @@ } @Override - public void ontologiesChanged(List<? extends OWLOntologyChange> arg0) - throws OWLException { + public void ontologiesChanged(List<? extends OWLOntologyChange> changes) + throws OWLException {System.out.println(changes); ontologyChanged = true; + + } public int getArity(OWLClass cl, OWLAxiom ax) { @@ -197,6 +201,20 @@ } return arity; } + + @Override + public void axiomForImpactChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted() { + reasoner.refresh(); + ontologyChanged = true; + regularExplanationCache.clear(); + laconicExplanationCache.clear(); + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -31,17 +31,22 @@ import javax.swing.event.ListSelectionListener; import org.jdesktop.swingx.JXList; +import org.mindswap.pellet.PelletOptions; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; +import org.mindswap.pellet.utils.progress.SwingProgressMonitor; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLException; import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.OWLOntologyChangeListener; import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyManager; public class ExplanationPanel extends JPanel implements ListSelectionListener, - ActionListener { + ActionListener,ImpactManagerListener{ private JXList unsatList; private JSplitPane splitPane; @@ -74,6 +79,7 @@ this.expManager = expMan; this.impManager = impMan; + impManager.addListener(this); setLayout(new BorderLayout()); Dimension minimumSize = new Dimension(400, 400); @@ -121,14 +127,29 @@ statsSplitPane.setResizeWeight(1.0D); statsSplitPane.setTopComponent(buttonExplanationsPanel); + //repair panel + JPanel impactRepairPanel = new JPanel(); + impactRepairPanel.setLayout(new BorderLayout()); + impactRepairPanel.add(new JLabel("Repair plan"), BorderLayout.NORTH); + JSplitPane impRepSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); + impRepSplit.setOneTouchExpandable(true); + impRepSplit.setDividerLocation(600); + impRepSplit.setBorder(null); + impactRepairPanel.add(impRepSplit); + JPanel impactPanel = new JPanel(); impactPanel.setLayout(new BorderLayout()); impactPanel.add(new JLabel("Lost entailments"), BorderLayout.NORTH); - JScrollPane scr = new JScrollPane(new ImpactTable(impManager)); - impactPanel.add(scr); + JScrollPane impScr = new JScrollPane(new ImpactTable(impManager)); + impactPanel.add(impScr); + impRepSplit.setRightComponent(impactPanel); - statsSplitPane.setBottomComponent(impactPanel); + RepairPlanPanel repairPanel = new RepairPlanPanel(impManager); + impRepSplit.setLeftComponent(repairPanel); + + statsSplitPane.setBottomComponent(impactRepairPanel); + statsSplitPane.setBorder(null); statsSplitPane.setDividerLocation(500); statsSplitPane.setOneTouchExpandable(true); @@ -235,9 +256,9 @@ // editor.setDescription(unsatClass); - if (regularButton.isSelected()) { + if (!unsatList.isSelectionEmpty() && regularButton.isSelected()) { showRegularExplanations(); - } else { + } else if(!unsatList.isSelectionEmpty()){ showLaconicExplanations(); } @@ -254,30 +275,73 @@ } } + + @Override + public void axiomForImpactChanged() { + // TODO Auto-generated method stub + + } + @Override + public void repairPlanExecuted() { + explanationsPanel.removeAll(); + + fillUnsatClassesList(); + repaint(); + } + + public static void main(String[] args) { try { - String file = "file:examples/ore/koala.owl"; + String file = "file:examples/ore/miniEconomy.owl"; + PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.NONE; OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI .create(file)); + + org.mindswap.pellet.utils.progress.ProgressMonitor mon = new SwingProgressMonitor(); PelletReasonerFactory reasonerFactory = new PelletReasonerFactory(); Reasoner reasoner = reasonerFactory.createReasoner(manager); reasoner.loadOntologies(Collections.singleton(ontology)); +// reasoner.getKB().getTaxonomyBuilder().setProgressMonitor(mon); +// mon.taskStarted(); reasoner.classify(); +// mon.taskFinished(); + + + +// try { +// String text = "Koala SubclassOf Class: Animal"; +// OWLEntityChecker checker = new EntityChecker(manager); +// ManchesterOWLSyntaxEditorParser parser = new ManchesterOWLSyntaxEditorParser(manager.getOWLDataFactory(),text); +// parser.setOWLEntityChecker(checker); +// parser.parseOntology(manager, ontology); +// parser.setBase(ontology.getURI().toString() + "#"); +// parser.parseDescription(); +// } catch (OWLOntologyChangeException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } catch (ParserException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } + + + + ExplanationManager expManager = ExplanationManager - .getExplanationManager(manager, reasoner, ontology); - ImpactManager impManager = ImpactManager.getImpactManager(manager, - reasoner, ontology); + .getExplanationManager(reasoner); + ImpactManager impManager = ImpactManager.getImpactManager( + reasoner); ExplanationPanel panel = new ExplanationPanel(expManager, impManager); - + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); JFrame test = new JFrame(); test.setLayout(new GridLayout(0, 1)); - test.setSize(new Dimension(1200, 700)); + test.setSize(new Dimension(1400, 1000)); test.add(panel); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); @@ -302,4 +366,8 @@ } } + + + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -6,6 +6,8 @@ import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.List; import javax.swing.AbstractCellEditor; @@ -35,6 +37,7 @@ public ExplanationTable(List<OWLAxiom> explanation, ImpactManager impMan, ExplanationManager expMan, OWLClass cl) { this.explanation = explanation; this.impMan = impMan; + impMan.addListener(this); setBackground(Color.WHITE); setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setModel(new ExplanationTableModel(explanation, expMan, impMan, cl)); @@ -86,6 +89,19 @@ } }); + + addMouseListener(new MouseAdapter() { + + final ExplanationTable table; + { + table = ExplanationTable.this; + } + public void mouseClicked(MouseEvent e){ + if(e.getClickCount() == 2){ + System.out.println(getValueAt(table.rowAtPoint(e.getPoint()), 0)); + } + } + }); } private OWLAxiom getOWLAxiomAtRow(int rowIndex){ @@ -100,13 +116,13 @@ private void changeSelection() { - - if(getSelectedRow() >=0){ - OWLAxiom rowAxiom = getOWLAxiomAtRow(getSelectedRow()); - impMan.setActualAxiom(rowAxiom); - } else { - impMan.setActualAxiom(null); - } +// +// if(getSelectedRow() >=0){ +// OWLAxiom rowAxiom = getOWLAxiomAtRow(getSelectedRow()); +// impMan.setActualAxiom(rowAxiom); +// } else { +// impMan.setActualAxiom(null); +// } } @@ -179,6 +195,12 @@ repaint(); } + + @Override + public void repairPlanExecuted() { + // TODO Auto-generated method stub + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -49,7 +49,7 @@ } else if(columnIndex == 1){ return expMan.getArity(unsat, axioms.get(rowIndex)); } else if(columnIndex == 2) { - return Boolean.valueOf(impMan.isSelected(getOWLAxiomAtRow(rowIndex)));//remove.get(rowIndex); + return Boolean.valueOf(impMan.isSelected(getOWLAxiomAtRow(rowIndex))); } else { return "rewrite"; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -11,7 +11,10 @@ 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.OWLOntologyChangeException; import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.RemoveAxiom; public class ImpactManager { @@ -21,12 +24,16 @@ private OWLAxiom actual; private List<OWLAxiom> selectedAxioms; private List<ImpactManagerListener> listeners; + private OWLOntology ontology; + private OWLOntologyManager manager; - private ImpactManager(OWLOntologyManager manager, Reasoner reasoner, OWLOntology ontology) { + private ImpactManager(Reasoner reasoner) { + this.ontology = reasoner.getLoadedOntologies().iterator().next(); + this.manager = reasoner.getManager(); impact = new HashMap<OWLAxiom, Set<OWLAxiom>>(); selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); - ranker = new AxiomRanker(ontology, reasoner, manager.getOWLDataFactory()); + ranker = new AxiomRanker(ontology, reasoner, manager); } @@ -42,24 +49,41 @@ listeners.remove(listener); } - public static synchronized ImpactManager getImpactManager(OWLOntologyManager manager, Reasoner reasoner, OWLOntology ontology) { + public static synchronized ImpactManager getImpactManager(Reasoner reasoner) { if (instance == null) { - instance = new ImpactManager(manager, reasoner, ontology); + instance = new ImpactManager(reasoner); } return instance; } - public Set<OWLAxiom> getImpactAxioms() { - Set<OWLAxiom> imp = impact.get(actual); + public Set<OWLAxiom> getImpactAxioms(OWLAxiom ax) { + + Set<OWLAxiom> imp = impact.get(ax); if (imp == null) { imp = new HashSet<OWLAxiom>(); - impact.put(actual, imp); - imp.addAll(ranker.computeImpactSOS(actual)); + impact.put(ax, imp); + if(ax != null){ + imp.addAll(ranker.computeImpactOnRemoval(ax)); + imp.addAll(ranker.computeImpactSOS(ax));//computeImpactSOS(actual)); + } } return imp; } + 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 void setActualAxiom(OWLAxiom ax){ actual = ax; fireAxiomForImpactChanged(); @@ -67,6 +91,7 @@ public void addAxiom2ImpactList(OWLAxiom ax){ selectedAxioms.add(ax); + fireAxiomForImpactChanged(); } @@ -79,11 +104,37 @@ return selectedAxioms.contains(ax); } + public List<OWLAxiom> getAxioms2Remove(){ + return selectedAxioms; + } + + public void executeRepairPlan(){ + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); + for(OWLAxiom ax : selectedAxioms){ + changes.add(new RemoveAxiom(ontology, ax)); + } + try { + manager.applyChanges(changes); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + impact.clear(); + selectedAxioms.clear(); + fireRepairPlanExecuted(); + } + private void fireAxiomForImpactChanged(){ for(ImpactManagerListener listener : listeners){ listener.axiomForImpactChanged(); } } + private void fireRepairPlanExecuted(){ + for(ImpactManagerListener listener : listeners){ + listener.repairPlanExecuted(); + } + } + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -2,4 +2,5 @@ public interface ImpactManagerListener { public abstract void axiomForImpactChanged(); + public abstract void repairPlanExecuted(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -30,7 +30,7 @@ private void rebuildData() { impact.clear(); - impact.addAll(impMan.getImpactAxioms()); + impact.addAll(impMan.getImpactForAxioms2Remove()); Collections.sort(impact); fireTableDataChanged(); } @@ -58,4 +58,12 @@ rebuildData(); } + + @Override + public void repairPlanExecuted() { + rebuildData(); + + } + + } Added: trunk/src/dl-learner/org/dllearner/tools/ore/RepairPlanPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairPlanPanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairPlanPanel.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -0,0 +1,43 @@ +package org.dllearner.tools.ore; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; + +import javax.swing.AbstractAction; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; + +public class RepairPlanPanel extends JPanel { + + /** + * + */ + private static final long serialVersionUID = 537629900742120594L; + private ImpactManager impMan; + + public RepairPlanPanel(ImpactManager impMan) { + this.impMan = impMan; + + setLayout(new BorderLayout()); + add(new JLabel("Axioms to remove"), BorderLayout.NORTH); + JPanel buttonPanel = new JPanel(new FlowLayout(2)); + add(buttonPanel, "South"); + buttonPanel.add(new JButton(new AbstractAction("compute plan") { + + public void actionPerformed(ActionEvent e) { + computeRepairPlan(); + } + + })); + + JScrollPane repScr = new JScrollPane(new RepairTable(impMan)); + add(repScr); + } + + private void computeRepairPlan() { + impMan.executeRepairPlan(); + } +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/RepairTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairTable.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -0,0 +1,24 @@ +package org.dllearner.tools.ore; + +import java.awt.Color; + +import org.jdesktop.swingx.JXTable; + +public class RepairTable extends JXTable { + + /** + * + */ + private static final long serialVersionUID = -621497634521668635L; + + public RepairTable(ImpactManager manager){ + super(new RepairTableModel(manager)); + + setShowHorizontalLines(true); + setGridColor(Color.LIGHT_GRAY); + setTableHeader(null); + getColumnModel().getColumn(0).setCellRenderer(new OWLSyntaxTableCellRenderer()); + setRowHeight(getRowHeight() + 4); + + } +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/RepairTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairTableModel.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -0,0 +1,67 @@ +package org.dllearner.tools.ore; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.swing.table.AbstractTableModel; + +import org.semanticweb.owl.model.OWLAxiom; + +public class RepairTableModel extends AbstractTableModel implements ImpactManagerListener{ + + /** + * + */ + private static final long serialVersionUID = -5898900692701380258L; + private ImpactManager impMan; + private List<OWLAxiom> axioms2Remove; + + public RepairTableModel(ImpactManager impMan) + { + + axioms2Remove = new ArrayList<OWLAxiom>(); + this.impMan = impMan; + impMan.addListener(this); + rebuildData(); + } + + private void rebuildData() + { + axioms2Remove.clear(); + axioms2Remove.addAll(impMan.getAxioms2Remove()); + Collections.sort(axioms2Remove); + fireTableDataChanged(); + } + + + + public int getRowCount() + { + return axioms2Remove.size(); + } + + public int getColumnCount() + { + return 1; + } + + public Object getValueAt(int rowIndex, int columnIndex) + { + return axioms2Remove.get(rowIndex); + } + + + @Override + public void axiomForImpactChanged() { + rebuildData(); + + } + + @Override + public void repairPlanExecuted() { + rebuildData(); + + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -11,6 +11,8 @@ 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; @@ -26,19 +28,82 @@ import org.semanticweb.owl.model.OWLSubClassAxiom; import org.semanticweb.owl.model.RemoveAxiom; +import com.clarkparsia.modularity.IncrementalClassifier; + public class AxiomRanker { private Map axiomSOSMap; + private OWLOntology ontology; private Reasoner reasoner; + private OWLOntologyManager manager; private OWLDataFactory factory; + boolean enableImpactUnsat; - public AxiomRanker(OWLOntology ont, Reasoner reasoner, OWLDataFactory fact){ + public AxiomRanker(OWLOntology ont, Reasoner reasoner, OWLOntologyManager mng){ this.ontology = ont; this.reasoner = reasoner; - this.factory = fact; + this.manager = mng; + this.factory = manager.getOWLDataFactory(); } + + 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(); + + 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>(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicExplanationGenerator.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicExplanationGenerator.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -286,8 +286,7 @@ public Set<Set<OWLAxiom>> getRegularExplanations(OWLAxiom entailment) throws ExplanationException { Set<Set<OWLAxiom>> regularJusts; - - regularJusts = pelletExplanation.getEntailmentExplanations((OWLAxiom)entailment); + regularJusts = pelletExplanation.getEntailmentExplanations((OWLAxiom)entailment); lastRegularJusts.addAll(regularJusts); return regularJusts; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-05-20 09:15:53 UTC (rev 1763) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-05-20 09:22:49 UTC (rev 1764) @@ -15,6 +15,7 @@ import org.semanticweb.owl.inference.OWLReasonerException; import org.semanticweb.owl.inference.OWLReasonerFactory; import org.semanticweb.owl.model.AxiomType; +import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataAllRestriction; import org.semanticweb.owl.model.OWLDataExactCardinalityRestriction; @@ -83,6 +84,7 @@ } public Set<OWLClass> getRootClasses(){ + rootClasses.clear(); computePossibleRoots(); pruneRoots(); rootClasses.remove(manager.getOWLDataFactory().getOWLNothing()); @@ -164,6 +166,7 @@ } private void reset(){ + depend2Classes.clear(); depth2ExistsRestrictionPropertyMap.clear(); depth2UniversalRestrictionPropertyMap.clear(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |