From: <lor...@us...> - 2009-08-24 09:19:31
|
Revision: 1829 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1829&view=rev Author: lorenz_b Date: 2009-08-24 09:19:17 +0000 (Mon, 24 Aug 2009) Log Message: ----------- * started simple Sparql extraction panel * made some changes in GUI 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/ExplanationPanel.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/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/RepairManagerListener.java trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/OWLSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RecentManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.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/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/SavePanelDescriptor.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/KnowledgeSourcePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/StatsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt trunk/src/dl-learner/org/dllearner/tools/ore/toggled.gif trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SparqlExtractOptionsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/untoggled.gif Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ColumnListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ReasonerProgressUI.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassPanelOWLDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassPanelSparqlDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassPanelOWL.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassPanelSparql.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -59,6 +59,7 @@ import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.OWLFile; import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.tools.ore.explanation.PelletExplanationGenerator; import org.dllearner.utilities.Helper; import org.dllearner.utilities.owl.ConceptComparator; import org.dllearner.utilities.owl.ConceptTransformation; @@ -394,6 +395,7 @@ factory = manager.getOWLDataFactory(); //set classification output to "none", while default is "console" PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.SWING; + // change log level to WARN for Pellet, because otherwise log // output will be very large Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,15 +1,13 @@ 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.CachedExplanationGenerator; +import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.RootFinder; -import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; @@ -26,8 +24,6 @@ import uk.ac.manchester.cs.owl.explanation.ordering.DefaultExplanationOrderer; import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationTree; -import com.clarkparsia.explanation.PelletExplanation; - public class ExplanationManager implements OWLOntologyChangeListener, RepairManagerListener{ private static ExplanationManager instance; @@ -37,11 +33,9 @@ private PelletReasonerFactory reasonerFactory; private OWLOntology ontology; private Reasoner reasoner; - private PelletExplanation regularExpGen; - private LaconicExplanationGenerator laconicExpGen; + private RootFinder rootFinder; - private Map<OWLClass, Set<Set<OWLAxiom>>> regularExplanationCache; - private Map<OWLClass, Set<Set<OWLAxiom>>> laconicExplanationCache; + private Set<OWLClass> unsatClasses; private Set<OWLClass> rootClasses; boolean ontologyChanged = true; @@ -56,9 +50,7 @@ private ExplanationManager(Reasoner reasoner) { - regularExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); - laconicExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); - + this.reasoner = reasoner; this.manager = reasoner.getManager(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); @@ -71,21 +63,20 @@ rootFinder = new RootFinder(manager, reasoner, reasonerFactory); - regularExpGen = new PelletExplanation(reasoner.getManager(), reasoner.getLoadedOntologies()); - - laconicExpGen = new LaconicExplanationGenerator(manager, - reasonerFactory, manager.getOntologies()); - rootClasses = new HashSet<OWLClass>(); unsatClasses = new HashSet<OWLClass>(); listeners = new ArrayList<ExplanationManagerListener>(); - gen = new CachedExplanationGenerator(ontology); + gen = new CachedExplanationGenerator(ontology, reasoner); } - public static synchronized ExplanationManager getExplanationManager( + public ExplanationManager() { + // TODO Auto-generated constructor stub + } + + public static synchronized ExplanationManager getInstance( Reasoner reasoner) { if (instance == null) { instance = new ExplanationManager(reasoner); @@ -93,8 +84,10 @@ return instance; } - public static synchronized ExplanationManager getExplanationManager(){ - + public static synchronized ExplanationManager getInstance(){ + if (instance == null) { + instance = new ExplanationManager(); + } return instance; } @@ -125,28 +118,28 @@ OWLSubClassAxiom entailment = dataFactory.getOWLSubClassAxiom(unsat, dataFactory.getOWLNothing()); - Set<Set<OWLAxiom>> explanations; + Set<Explanation> explanations; if (isComputeAllExplanations) { explanations = gen.getExplanations(entailment); } else { explanations = gen.getExplanations(entailment, maxExplantionCount); } - return getOrderedExplanations(entailment, explanations); + return getOrderedExplanations(explanations); } public Set<List<OWLAxiom>> getInconsistencyExplanations(){ OWLSubClassAxiom entailment = dataFactory.getOWLSubClassAxiom(dataFactory.getOWLThing(), dataFactory.getOWLNothing()); - Set<Set<OWLAxiom>> explanations; + Set<Explanation> explanations; if (isComputeAllExplanations) { explanations = gen.getExplanations(entailment); } else { explanations = gen.getExplanations(entailment, maxExplantionCount); } - return getOrderedExplanations(entailment, explanations); + return getOrderedExplanations(explanations); } @@ -160,13 +153,13 @@ return ordering; } - private Set<List<OWLAxiom>> getOrderedExplanations(OWLAxiom entailment, Set<Set<OWLAxiom>> explanations){ + private Set<List<OWLAxiom>> getOrderedExplanations(Set<Explanation> explanations){ DefaultExplanationOrderer orderer = new DefaultExplanationOrderer(); Set<List<OWLAxiom>> orderedExplanations = new HashSet<List<OWLAxiom>>(); ArrayList<OWLAxiom> ordering; - for(Set<OWLAxiom> explanation : explanations){ + for(Explanation explanation : explanations){ ordering = new ArrayList<OWLAxiom>(); - ExplanationTree tree = orderer.getOrderedExplanation(entailment, explanation); + ExplanationTree tree = orderer.getOrderedExplanation(explanation.getEntailment(), explanation.getAxioms()); // ordering.add(tree.getUserObject()); for(Tree<OWLAxiom> child : tree.getChildren()){ @@ -186,12 +179,12 @@ public int getArity(OWLClass cl, OWLAxiom ax) { int arity = 0; - Set<Set<OWLAxiom>> explanations = gen.getExplanations(dataFactory.getOWLSubClassAxiom(cl, dataFactory.getOWLNothing())); + Set<Explanation> explanations = gen.getExplanations(dataFactory.getOWLSubClassAxiom(cl, dataFactory.getOWLNothing())); if(explanations != null){ - for (Set<OWLAxiom> explanation : explanations) { - if (explanation.contains(ax)) { + for (Explanation explanation : explanations) { + if (explanation.getAxioms().contains(ax)) { arity++; } } @@ -201,7 +194,7 @@ public void setLaconicMode(boolean laconic){ gen.setComputeLaconicExplanations(laconic); - fireExplanationLimitChanged(); + fireExplanationTypeChanged(); } @@ -224,14 +217,9 @@ } @Override - public void repairPlanExecuted() { + public void repairPlanExecuted(List<OWLOntologyChange> changes) { reasoner.refresh(); ontologyChanged = true; - regularExpGen = new PelletExplanation(reasoner.getManager(), reasoner.getLoadedOntologies()); - laconicExpGen = new LaconicExplanationGenerator(manager, - reasonerFactory, reasoner.getLoadedOntologies()); - regularExplanationCache.clear(); - laconicExplanationCache.clear(); } @Override @@ -254,6 +242,12 @@ } } + public void fireExplanationTypeChanged(){ + for(ExplanationManagerListener listener : listeners){ + listener.explanationTypeChanged(); + } + } + public void setAllExplanationWarningChecked(){ allExplanationWarningChecked = true; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -34,7 +34,7 @@ import org.dllearner.tools.ore.ui.ExplanationTable; import org.dllearner.tools.ore.ui.ImpactTable; import org.dllearner.tools.ore.ui.StatusBar; -import org.dllearner.tools.ore.ui.UnsatClassesListCellRenderer; +import org.dllearner.tools.ore.ui.UnsatClassesTableCellRenderer; import org.dllearner.tools.ore.ui.wizard.panels.ExplanationTablePanel; import org.dllearner.tools.ore.ui.wizard.panels.RepairPlanPanel; import org.jdesktop.swingx.JXList; @@ -46,11 +46,12 @@ import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyManager; public class ExplanationPanel extends JPanel implements ListSelectionListener, - ActionListener,ImpactManagerListener, ExplanationManagerListener{ + ActionListener,ImpactManagerListener, ExplanationManagerListener, RepairManagerListener{ private JXList unsatList; private JSplitPane splitPane; @@ -64,7 +65,7 @@ private JRadioButton regularButton; private JRadioButton laconicButton; - private UnsatClassesListCellRenderer listRenderer; + private UnsatClassesTableCellRenderer listRenderer; private ExplanationManager expManager; private ImpactManager impManager; @@ -91,11 +92,11 @@ Dimension minimumSize = new Dimension(400, 400); - listRenderer = new UnsatClassesListCellRenderer(expManager); + listRenderer = new UnsatClassesTableCellRenderer(expManager); unsatList = new JXList(); fillUnsatClassesList(); unsatList.addListSelectionListener(this); - unsatList.setCellRenderer(listRenderer); +// unsatList.setCellRenderer(listRenderer); listScrollPane = new JScrollPane(unsatList); listScrollPane.setPreferredSize(minimumSize); @@ -298,13 +299,13 @@ } @Override - public void axiomForImpactChanged() { + public void impactListChanged() { // TODO Auto-generated method stub } @Override - public void repairPlanExecuted() { + public void repairPlanExecuted(List<OWLOntologyChange> changes) { explanationsPanel.removeAll(); fillUnsatClassesList(); @@ -369,8 +370,8 @@ ExplanationManager expManager = ExplanationManager - .getExplanationManager(reasoner); - ImpactManager impManager = ImpactManager.getImpactManager( + .getInstance(reasoner); + ImpactManager impManager = ImpactManager.getInstance( reasoner); RepairManager repManager= RepairManager.getRepairManager(reasoner); ExplanationPanel panel = new ExplanationPanel(expManager, @@ -412,6 +413,12 @@ } + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -11,9 +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.OWLOntologyManager; -public class ImpactManager { +public class ImpactManager implements RepairManagerListener{ private static ImpactManager instance; private Map<OWLAxiom, Set<OWLAxiom>> impact; @@ -33,6 +34,7 @@ selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); ranker = new AxiomRanker(ontology, reasoner, manager); + RepairManager.getRepairManager(reasoner).addListener(this); } @@ -48,7 +50,7 @@ listeners.remove(listener); } - public static synchronized ImpactManager getImpactManager(Reasoner reasoner) { + public static synchronized ImpactManager getInstance(Reasoner reasoner) { if (instance == null) { instance = new ImpactManager(reasoner); } @@ -85,18 +87,18 @@ public void setActualAxiom(OWLAxiom ax){ actual = ax; - fireAxiomForImpactChanged(); + fireImpactListChanged(); } public void addAxiom2ImpactList(OWLAxiom ax){ selectedAxioms.add(ax); - fireAxiomForImpactChanged(); + fireImpactListChanged(); } public void removeAxiomFromImpactList(OWLAxiom ax){ selectedAxioms.remove(ax); - fireAxiomForImpactChanged(); + fireImpactListChanged(); } public boolean isSelected(OWLAxiom ax){ @@ -104,11 +106,25 @@ } - private void fireAxiomForImpactChanged(){ + private void fireImpactListChanged(){ for(ImpactManagerListener listener : listeners){ - listener.axiomForImpactChanged(); + listener.impactListChanged(); } } + + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted(List<OWLOntologyChange> changes) { + selectedAxioms.clear(); + impact.clear(); + fireImpactListChanged(); + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,6 +1,5 @@ package org.dllearner.tools.ore; public interface ImpactManagerListener { - public abstract void axiomForImpactChanged(); - public abstract void repairPlanExecuted(); + public abstract void impactListChanged(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -30,8 +30,7 @@ import org.dllearner.tools.ore.ui.wizard.Wizard; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.ClassPanelOWLDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.ClassPanelSparqlDescriptor; +import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; 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; @@ -79,21 +78,18 @@ WizardPanelDescriptor descriptor2 = new KnowledgeSourcePanelDescriptor(); wizard.registerWizardPanel(KnowledgeSourcePanelDescriptor.IDENTIFIER, descriptor2); - WizardPanelDescriptor descriptor3 = new ClassPanelOWLDescriptor(); - wizard.registerWizardPanel(ClassPanelOWLDescriptor.IDENTIFIER, descriptor3); + WizardPanelDescriptor descriptor3 = new ClassChoosePanelDescriptor(); + wizard.registerWizardPanel(ClassChoosePanelDescriptor.IDENTIFIER, descriptor3); - WizardPanelDescriptor descriptor4 = new ClassPanelSparqlDescriptor(); - wizard.registerWizardPanel(ClassPanelSparqlDescriptor.IDENTIFIER, descriptor4); + WizardPanelDescriptor descriptor4 = new LearningPanelDescriptor(); + wizard.registerWizardPanel(LearningPanelDescriptor.IDENTIFIER, descriptor4); - WizardPanelDescriptor descriptor5 = new LearningPanelDescriptor(); - wizard.registerWizardPanel(LearningPanelDescriptor.IDENTIFIER, descriptor5); + WizardPanelDescriptor descriptor5 = new RepairPanelDescriptor(); + wizard.registerWizardPanel(RepairPanelDescriptor.IDENTIFIER, descriptor5); - WizardPanelDescriptor descriptor6 = new RepairPanelDescriptor(); - wizard.registerWizardPanel(RepairPanelDescriptor.IDENTIFIER, descriptor6); + WizardPanelDescriptor descriptor6 = new SavePanelDescriptor(); + wizard.registerWizardPanel(SavePanelDescriptor.IDENTIFIER, descriptor6); - WizardPanelDescriptor descriptor7 = new SavePanelDescriptor(); - wizard.registerWizardPanel(SavePanelDescriptor.IDENTIFIER, descriptor7); - if (!(args.length == 1)){ wizard.setCurrentPanel(IntroductionPanelDescriptor.IDENTIFIER); } else{ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -17,7 +17,7 @@ import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; -import org.dllearner.core.LearningAlgorithm; +import org.dllearner.core.KnowledgeSource; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; @@ -26,6 +26,7 @@ import org.dllearner.core.owl.ObjectQuantorRestriction; import org.dllearner.core.owl.Union; import org.dllearner.kb.OWLFile; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.reasoning.PelletReasoner; @@ -46,7 +47,7 @@ private PelletReasoner pelletReasoner; private ClassLearningProblem lp; private CELOE la; - private OWLFile ks; + private KnowledgeSource ks; private String baseURI; private Map<String, String> prefixes; @@ -81,7 +82,7 @@ public void setCurrentKnowledgeSource(URI uri){ ks = cm.knowledgeSource(OWLFile.class); try { - ks.getConfigurator().setUrl(uri.toURL()); + ((OWLFile)ks).getConfigurator().setUrl(uri.toURL()); ks.init(); } catch (MalformedURLException e) { // TODO Auto-generated catch block @@ -93,6 +94,11 @@ } + public void setCurrentKnowledgeSource(SparqlKnowledgeSource ks){ + this.ks = ks; + + } + public void setLearningProblem(){ lp = cm.learningProblem(ClassLearningProblem.class, pelletReasoner); @@ -245,8 +251,12 @@ this.maxNrOfResults = maxNrOfResults; } + public int getMaxNrOfResults(){ + return maxNrOfResults; + } + /** * Sets the class that has to be learned. * @param oldClass class that is chosen to be (re)learned @@ -288,7 +298,7 @@ } - public LearningAlgorithm getLa() { + public CELOE getLa() { return la; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,13 +1,9 @@ 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 java.util.Stack; -import org.dllearner.tools.ore.explanation.AxiomRanker; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; @@ -27,6 +23,9 @@ private OWLOntology ontology; private OWLOntologyManager manager; private Reasoner reasoner; + + private Stack<List<OWLOntologyChange>> undoStack; + private Stack<List<OWLOntologyChange>> redoStack; private RepairManager(Reasoner reasoner) { this.reasoner = reasoner; @@ -36,6 +35,8 @@ axioms2Remove = new ArrayList<OWLAxiom>(); listeners = new ArrayList<RepairManagerListener>(); + undoStack = new Stack<List<OWLOntologyChange>>(); + redoStack = new Stack<List<OWLOntologyChange>>(); } @@ -87,21 +88,36 @@ System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); e.printStackTrace(); } - + undoStack.push(changes); axioms2Remove.clear(); - fireRepairPlanExecuted(); + fireRepairPlanExecuted(changes); } + public void undo(){ + List<OWLOntologyChange> changes = undoStack.pop(); + redoStack.push(changes); + try { + manager.applyChanges(changes); + } catch (OWLOntologyChangeException e) { + System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); + e.printStackTrace(); + } + } + + public void redo(){ + + } + private void fireRepairPlanChanged(){ for(RepairManagerListener listener : listeners){ listener.repairPlanChanged(); } } - private void fireRepairPlanExecuted(){ + private void fireRepairPlanExecuted(List<OWLOntologyChange> changes){ for(RepairManagerListener listener : listeners){ - listener.repairPlanExecuted(); + listener.repairPlanExecuted(changes); } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,6 +1,10 @@ package org.dllearner.tools.ore; +import java.util.List; + +import org.semanticweb.owl.model.OWLOntologyChange; + public interface RepairManagerListener { - public abstract void repairPlanExecuted(); + public abstract void repairPlanExecuted(List<OWLOntologyChange> changes); public abstract void repairPlanChanged(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -21,7 +21,6 @@ import java.net.MalformedURLException; import java.net.URL; -import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -34,17 +33,11 @@ import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.reasoning.FastInstanceChecker; -import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.utilities.datastructures.SetManipulation; -import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL; import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; -import com.hp.hpl.jena.query.ResultSet; -import com.hp.hpl.jena.query.ResultSetFactory; - /** * Test class for SPARQL mode. * @@ -55,7 +48,7 @@ @SuppressWarnings("unused") public static void main(String[] args) throws MalformedURLException { - String exampleClass = "http://dbpedia.org/class/yago/LeadersOfPoliticalParties"; + String exampleClass = "http://dbpedia.org/ontology/HistoricPlace"; String exampleClassKBString = "\"" + exampleClass + "\""; ComponentManager cm = ComponentManager.getInstance(); @@ -104,7 +97,7 @@ cm.applyConfigEntry(ks, "predefinedEndpoint", "DBPEDIA"); ks.getConfigurator().setInstances(instances); ks.getConfigurator().setPredefinedFilter("YAGO"); - ks.getConfigurator().setSaveExtractedFragment(true); +// ks.getConfigurator().setSaveExtractedFragment(true); ks.init(); ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); reasoner.init(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -3,45 +3,52 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Map.Entry; +import org.dllearner.tools.ore.RepairManager; +import org.dllearner.tools.ore.RepairManagerListener; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; 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.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; -import com.clarkparsia.explanation.PelletExplanation; import com.clarkparsia.modularity.ModularityUtils; import com.clarkparsia.owlapi.OntologyUtils; -public class CachedExplanationGenerator implements ExplanationGenerator{ +public class CachedExplanationGenerator implements ExplanationGenerator, RepairManagerListener{ private Map<OWLAxiom, OWLOntology> axiom2Module; - private Map<OWLAxiom, Set<Set<OWLAxiom>>> regularExplanationCache; - private Map<OWLAxiom, Set<Set<OWLAxiom>>> laconicExplanationCache; + private Map<OWLAxiom, Set<Explanation>> regularExplanationCache; + private Map<OWLAxiom, Set<Explanation>> laconicExplanationCache; private Map<OWLAxiom, Integer> lastRequestedRegularSize; private Map<OWLAxiom, Integer> lastRequestedLaconicSize; private boolean laconicMode = false; - private PelletExplanation regularExpGen; + private PelletExplanationGenerator regularExpGen; private LaconicExplanationGenerator laconicExpGen; private OWLOntology ontology; private OWLOntologyManager manager; - public CachedExplanationGenerator(OWLOntology ontology){ + public CachedExplanationGenerator(OWLOntology ontology, Reasoner reasoner){ this.ontology = ontology; this.manager = OWLManager.createOWLOntologyManager(); axiom2Module = new HashMap<OWLAxiom, OWLOntology>(); - regularExplanationCache = new HashMap<OWLAxiom, Set<Set<OWLAxiom>>>(); - laconicExplanationCache = new HashMap<OWLAxiom, Set<Set<OWLAxiom>>>(); + regularExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); + laconicExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); lastRequestedRegularSize = new HashMap<OWLAxiom, Integer>(); lastRequestedLaconicSize = new HashMap<OWLAxiom, Integer>(); + RepairManager.getRepairManager(reasoner).addListener(this); // regularExpGen = new PelletExplanation(manager, Collections.singleton(ontology)); // laconicExpGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(ontology)); @@ -52,20 +59,20 @@ } @Override - public Set<OWLAxiom> getExplanation(OWLAxiom entailment){ + public Explanation getExplanation(OWLAxiom entailment){ return getExplanations(entailment, 1).iterator().next(); } @Override - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment){ + public Set<Explanation> getExplanations(OWLAxiom entailment){ return getExplanations(entailment, -1); } @Override - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment, int limit){ - Set<Set<OWLAxiom>> explanations = new HashSet<Set<OWLAxiom>>(); + public Set<Explanation> getExplanations(OWLAxiom entailment, int limit){ + Set<Explanation> explanations = new HashSet<Explanation>(); try { if(!laconicMode){ @@ -80,9 +87,9 @@ return explanations; } - private Set<Set<OWLAxiom>> computeLaconicExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ + private Set<Explanation> computeLaconicExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ - Set<Set<OWLAxiom>> explanations = laconicExplanationCache.get(entailment); + Set<Explanation> explanations = laconicExplanationCache.get(entailment); Integer lastRequestedSize = lastRequestedLaconicSize.get(entailment); if(lastRequestedSize == null){ lastRequestedSize = Integer.valueOf(0); @@ -105,8 +112,8 @@ return explanations; } - private Set<Set<OWLAxiom>> computeRegularExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ - Set<Set<OWLAxiom>> explanations = regularExplanationCache.get(entailment); + private Set<Explanation> computeRegularExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ + Set<Explanation> explanations = regularExplanationCache.get(entailment); Integer lastRequestedSize = lastRequestedRegularSize.get(entailment); if(lastRequestedSize == null){ lastRequestedSize = Integer.valueOf(0); @@ -117,15 +124,38 @@ module = OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(Collections.singleton(ontology), entailment.getSignature(), ModuleType.TOP_OF_BOT)); } axiom2Module.put(entailment, module); - regularExpGen = new PelletExplanation(manager, Collections.singleton(module)); + regularExpGen = new PelletExplanationGenerator(manager, Collections.singleton(module)); if(limit == -1){ - explanations = regularExpGen.getEntailmentExplanations(entailment); + explanations = regularExpGen.getExplanations(entailment); } else { - explanations = regularExpGen.getEntailmentExplanations(entailment, limit); + explanations = regularExpGen.getExplanations(entailment, limit); } regularExplanationCache.put(entailment, explanations); lastRequestedRegularSize.put(entailment, Integer.valueOf(limit)); } return explanations; } + + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted(List<OWLOntologyChange> changes) { + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){System.out.println(changes); + for(Entry<OWLAxiom, Set<Explanation>> entry: regularExplanationCache.entrySet()){ + for(Explanation explanation : entry.getValue()){ + if(explanation.getAxioms().contains(change.getAxiom())){ + entry.getValue().remove(explanation);System.out.println("test"); + } + } + + } + } + } + + } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -0,0 +1,56 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.Set; +import java.util.TreeSet; + +import org.semanticweb.owl.model.OWLAxiom; + +public class Explanation { + + private Set<OWLAxiom> axioms; + private OWLAxiom entailment; + + + public Explanation(OWLAxiom entailment, Set<OWLAxiom> axioms){ + this.entailment = entailment; + this.axioms = axioms; + } + + public OWLAxiom getEntailment(){ + return entailment; + } + + public Set<OWLAxiom> getAxioms(){ + return axioms; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + if(axioms.isEmpty()) + return "Explanation: <Empty>\n"; + sb.append("Explanation ["); + sb.append(entailment); + sb.append("]\n"); + for(OWLAxiom ax : (new TreeSet<OWLAxiom>(axioms))){ + sb.append("\t"); + sb.append(ax); + sb.append("\n"); + } + + return sb.toString(); + } + + @Override + public boolean equals(Object obj) { + Explanation exp = (Explanation)obj; + return exp.getEntailment().equals(entailment) && exp.getAxioms().equals(axioms); + } + + @Override + public int hashCode() { + return entailment.hashCode() + axioms.hashCode(); + } + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -5,8 +5,8 @@ import org.semanticweb.owl.model.OWLAxiom; public interface ExplanationGenerator { - public abstract Set<OWLAxiom> getExplanation(OWLAxiom enatilment); - public abstract Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment); - public abstract Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment, int limit); + public abstract Explanation getExplanation(OWLAxiom enatilment); + public abstract Set<Explanation> getExplanations(OWLAxiom entailment); + public abstract Set<Explanation> getExplanations(OWLAxiom entailment, int limit); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,6 +1,5 @@ package org.dllearner.tools.ore.explanation; -import java.io.IOException; import java.io.PrintWriter; import java.net.URI; import java.util.Collections; @@ -131,8 +130,8 @@ // .getExplanations(unsatAxiom); // renderer.render(unsatAxiom, preciseJusts); // } - Set<Set<OWLAxiom>> preciseJusts = expGen.getExplanations(unsatAxiom); - renderer.render(unsatAxiom, preciseJusts); + Set<Explanation> preciseJusts = expGen.getExplanations(unsatAxiom); +// renderer.render(unsatAxiom, preciseJusts); renderer.endRendering(); } catch (OWLOntologyCreationException e) { @@ -145,10 +144,7 @@ // TODO Auto-generated catch block e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + } } public static void miniTest(){ @@ -171,8 +167,8 @@ OWLSubClassAxiom unsatAxiom = factory.getOWLSubClassAxiom(c, factory.getOWLNothing()); LaconicExplanationGenerator expGen = new LaconicExplanationGenerator(manager, resonerFact, Collections.singleton(ontology)); - Set<Set<OWLAxiom>> preciseJusts = expGen.getExplanations(unsatAxiom); - renderer.render(unsatAxiom, preciseJusts); + Set<Explanation> preciseJusts = expGen.getExplanations(unsatAxiom); +// renderer.render(unsatAxiom, preciseJusts); renderer.endRendering(); expGen.returnSourceAxioms(preciseJusts); @@ -191,9 +187,6 @@ } catch (OWLException e) { // TODO Auto-generated catch block e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } @@ -230,13 +223,13 @@ - Set<Set<OWLAxiom>> regularJusts = expGen.getRegularExplanations(axiom); + Set<Explanation> regularJusts = expGen.getRegularExplanations(axiom); System.out.println("Regular explanations:"); - renderer.render(axiom, regularJusts); +// renderer.render(axiom, regularJusts); - Set<Set<OWLAxiom>> preciseJusts = expGen.getExplanations(axiom); + Set<Explanation> preciseJusts = expGen.getExplanations(axiom); System.out.println("Precise explanations:"); - renderer.render(axiom, preciseJusts); +// renderer.render(axiom, preciseJusts); renderer.endRendering(); @@ -251,9 +244,6 @@ // TODO Auto-generated catch block e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -0,0 +1,129 @@ +package org.dllearner.tools.ore.explanation; + +import java.net.URI; +import java.util.HashSet; +import java.util.Set; + +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; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.reasonerfactory.pellet.PelletReasonerFactory; + +import com.clarkparsia.explanation.BlackBoxExplanation; +import com.clarkparsia.explanation.GlassBoxExplanation; +import com.clarkparsia.explanation.HSTExplanationGenerator; +import com.clarkparsia.explanation.SatisfiabilityConverter; +import com.clarkparsia.explanation.TransactionAwareSingleExpGen; + +public class PelletExplanationGenerator implements ExplanationGenerator{ + static { + setup(); + } + + /** + * Very important initialization step that needs to be called once before a + * reasoner is created. This function will be called automatically when + * GlassBoxExplanation is loaded by the class loader. This function simply + * calls the {@link GlassBoxExplanationGenerator#setup()} function. + */ + public static void setup() { + GlassBoxExplanation.setup(); + } + + + private HSTExplanationGenerator expGen; + + private SatisfiabilityConverter converter; + + public PelletExplanationGenerator(OWLOntologyManager manager, Set<OWLOntology> ontologies) { + this( manager, ontologies, null, true ); + } + + public PelletExplanationGenerator(OWLOntologyManager manager, Set<OWLOntology> ontologies, boolean useGlassBox) { + this( manager, ontologies, null, useGlassBox ); + } + + private PelletExplanationGenerator(OWLOntologyManager manager, Set<OWLOntology> ontologies, Reasoner reasoner, boolean useGlassBox) { + + + // If there is no existing reasoner create a new one and load the ontologies + if( reasoner == null ) { + reasoner = new Reasoner( manager ); + reasoner.loadOntologies( ontologies ); + } + + // Create a single explanation generator + TransactionAwareSingleExpGen singleExp = useGlassBox + ? new GlassBoxExplanation( manager ) + : new BlackBoxExplanation( manager ); + + // Create multiple explanation generator + expGen = new HSTExplanationGenerator( singleExp ); + + // Set the necessary fields + expGen.setReasonerFactory( new PelletReasonerFactory() ); + expGen.setReasoner( reasoner ); + expGen.setOntologies( ontologies ); + + // Create the converter that will translate axioms into class expressions + converter = new SatisfiabilityConverter( manager.getOWLDataFactory() ); + setup(); + } + + public PelletExplanationGenerator(Reasoner reasoner) { + this( reasoner.getManager(), reasoner.getLoadedOntologies(), reasoner, true ); + } + + public PelletExplanationGenerator(Reasoner reasoner, boolean useGlassBox) { + this( reasoner.getManager(), reasoner.getLoadedOntologies(), reasoner, useGlassBox ); + } + + @Override + public Explanation getExplanation(OWLAxiom entailment) { + OWLDescription unsatClass = converter.convert( entailment ); + return new Explanation( entailment, expGen.getExplanation( unsatClass )); + } + + @Override + public Set<Explanation> getExplanations(OWLAxiom entailment) { + OWLDescription unsatClass = converter.convert( entailment ); + Set<Explanation> explanations = new HashSet<Explanation>(); + for(Set<OWLAxiom> axioms : expGen.getExplanations( unsatClass )){ + explanations.add(new Explanation(entailment, axioms)); + } + return explanations; + } + + @Override + public Set<Explanation> getExplanations(OWLAxiom entailment, int limit) { + OWLDescription unsatClass = converter.convert( entailment ); + Set<Explanation> explanations = new HashSet<Explanation>(); + for(Set<OWLAxiom> axioms : expGen.getExplanations( unsatClass, limit)){ + explanations.add(new Explanation(entailment, axioms)); + } + return explanations; + } + + public static void main(String[] args) throws OWLOntologyCreationException{ + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLDataFactory factory = manager.getOWLDataFactory(); + OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI.create("file:examples/ore/tambis.owl")); + Reasoner reasoner = new org.mindswap.pellet.owlapi.PelletReasonerFactory().createReasoner(manager); + reasoner.loadOntology(ontology); + PelletExplanationGenerator expGen = new PelletExplanationGenerator(reasoner); + + + + OWLClass unsat = factory.getOWLClass(URI.create("http://krono.act.uji.es/Links/ontologies/tambis.owl#metal")); + OWLAxiom entailment = factory.getOWLSubClassAxiom(unsat, factory.getOWLNothing()); + System.out.println(expGen.getExplanation(entailment)); + } + + +} 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-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -7,7 +7,9 @@ import java.util.Map; import java.util.Set; +import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.ExplanationException; +import org.dllearner.tools.ore.explanation.PelletExplanationGenerator; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.inference.OWLReasonerFactory; import org.semanticweb.owl.model.OWLAxiom; @@ -21,16 +23,14 @@ import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.OWLSubClassAxiom; -import com.clarkparsia.explanation.PelletExplanation; - public class LaconicExplanationGenerator { - private PelletExplanation pelletExplanation; + private PelletExplanationGenerator pelletExplanation; private OWLOntologyManager manager; private OWLOntology ontology; - private Set<Set<OWLAxiom>> lastRegularJusts; - private Set<Set<OWLAxiom>> allPreviouslyFoundJustifications; + private Set<Explanation> lastRegularExplanations; + private Set<Explanation> allPreviouslyFoundExplanations; private OPlus oPlus; public LaconicExplanationGenerator(OWLOntologyManager manager, @@ -48,8 +48,8 @@ e.printStackTrace(); } - pelletExplanation = new PelletExplanation(manager, ontologies); - lastRegularJusts = new HashSet<Set<OWLAxiom>>(); + pelletExplanation = new PelletExplanationGenerator(manager, ontologies); + lastRegularExplanations = new HashSet<Explanation>(); } /** @@ -70,8 +70,8 @@ } - public Set<Set<OWLAxiom>> getLastRegularJustifications() { - return lastRegularJusts; + public Set<Explanation> getLastRegularJustifications() { + return lastRegularExplanations; } /** @@ -81,39 +81,39 @@ * @return * @throws OWLException */ - public Set<Set<OWLAxiom>> computePreciseJusts(OWLAxiom entailment, int limit) + public Set<Explanation> computePreciseJusts(OWLAxiom entailment, int limit) throws OWLException { - Set<Set<OWLAxiom>> regularJusts = pelletExplanation - .getEntailmentExplanations((OWLAxiom) entailment); + Set<Explanation> regularExplanations = pelletExplanation + .getExplanations((OWLAxiom) entailment); System.out.println(new StringBuilder().append( - "Got regular justifications: ").append(regularJusts.size()) + "Got regular justifications: ").append(regularExplanations.size()) .toString()); - lastRegularJusts.clear(); - lastRegularJusts.addAll(regularJusts); - allPreviouslyFoundJustifications = new HashSet<Set<OWLAxiom>>(); - allPreviouslyFoundJustifications.addAll(regularJusts); - Set<Set<OWLAxiom>> nonLaconicJusts = new HashSet<Set<OWLAxiom>>(); - Set<Set<OWLAxiom>> laconicJusts = new HashSet<Set<OWLAxiom>>(); + lastRegularExplanations.clear(); + lastRegularExplanations.addAll(regularExplanations); + allPreviouslyFoundExplanations = new HashSet<Explanation>(); + allPreviouslyFoundExplanations.addAll(regularExplanations); + Set<Explanation> nonLaconicExplanations = new HashSet<Explanation>(); + Set<Explanation> laconicExplanations = new HashSet<Explanation>(); Set<OWLAxiom> axiomsInPreviousOntology = new HashSet<OWLAxiom>(); long counter = 0L; for (;;) { counter++; System.out.println(new StringBuilder().append("Count ").append( counter).toString()); - Set<OWLAxiom> unionOfAllJustifications = new HashSet<OWLAxiom>(); - for (Set<OWLAxiom> just : allPreviouslyFoundJustifications) { - unionOfAllJustifications.addAll(just); + Set<OWLAxiom> unionOfAllExplanations = new HashSet<OWLAxiom>(); + for (Explanation expl : allPreviouslyFoundExplanations) { + unionOfAllExplanations.addAll(expl.getAxioms()); } // Set<OWLAxiom> lastOPlus = new // HashSet<OWLAxiom>(computeOPlus(unionOfAllJustifications)); - Set<OWLAxiom> oPlus = computeOPlus(unionOfAllJustifications); + Set<OWLAxiom> oPlus = computeOPlus(unionOfAllExplanations); OWLOntologyManager man2 = OWLManager.createOWLOntologyManager(); OWLOntology extendedOntology = man2.createOntology(oPlus); for (OWLLogicalAxiom logAx : ontology.getLogicalAxioms()) { - if (!unionOfAllJustifications.contains(logAx) + if (!unionOfAllExplanations.contains(logAx) || oPlus.contains(logAx)) { man2.addAxiom(extendedOntology, logAx); } @@ -130,65 +130,67 @@ axiomsInPreviousOntology.clear(); axiomsInPreviousOntology .addAll(extendedOntology.getLogicalAxioms()); - Set<Set<OWLAxiom>> allPrevJustsCopy = new HashSet<Set<OWLAxiom>>( - allPreviouslyFoundJustifications); + Set<Explanation> allPrevJustsCopy = new HashSet<Explanation>( + allPreviouslyFoundExplanations); Set<OWLOntology> ont2 = new HashSet<OWLOntology>(); ont2.add(extendedOntology); - PelletExplanation expGen = new PelletExplanation(man2, ont2); - Set<Set<OWLAxiom>> currentJustifications = expGen - .getEntailmentExplanations((OWLAxiom) entailment); + PelletExplanationGenerator expGen = new PelletExplanationGenerator(man2, ont2); + Set<Explanation> currentExplanations = expGen + .getExplanations((OWLAxiom) entailment); - allPreviouslyFoundJustifications.addAll(currentJustifications); - if (allPreviouslyFoundJustifications.equals(allPrevJustsCopy)) { + allPreviouslyFoundExplanations.addAll(currentExplanations); + if (allPreviouslyFoundExplanations.equals(allPrevJustsCopy)) { break; } - for (Set<OWLAxiom> currentJust : currentJustifications) { - if (!laconicJusts.contains(currentJust) - && !nonLaconicJusts.contains(currentJust)) { - if (isLaconic(currentJust, entailment)) { - laconicJusts.add(currentJust); + for (Explanation currentExplanation : currentExplanations) { + if (!laconicExplanations.contains(currentExplanation) + && !nonLaconicExplanations.contains(currentExplanation)) { + if (isLaconic(currentExplanation)) { + laconicExplanations.add(currentExplanation); } else { - nonLaconicJusts.add(currentJust); + nonLaconicExplanations.add(currentExplanation); } - if (laconicJusts.size() == limit) { - return retrieveAxioms(laconicJusts); + if (laconicExplanations.size() == limit) { + return laconicExplanations;//retrieveAxioms(laconicJusts); } } } } - Set<Set<OWLAxiom>> laconicJustifications = new HashSet<Set<OWLAxiom>>(); - for (Set<OWLAxiom> just : allPreviouslyFoundJustifications) { - if (!nonLaconicJusts.contains(just)) { - if (laconicJusts.contains(just)) { - laconicJustifications.add(just); - } else if (isLaconic(just, entailment)) { - laconicJustifications.add(just); + Set<Explanation> explanations = new HashSet<Explanation>(); + for (Explanation explanation : allPreviouslyFoundExplanations) { + if (!nonLaconicExplanations.contains(explanation)) { + if (laconicExplanations.contains(explanation)) { + explanations.add(explanation); + } else if (isLaconic(explanation)) { + explanations.add(explanation); } } } - return retrieveAxioms(laconicJustifications); + return retrieveAxioms(explanations); } - public boolean isLaconic(Set<OWLAxiom> justification, OWLAxiom entailment) + public boolean isLaconic(Explanation explanation) throws ExplanationException { boolean laconic; try { OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - Set<OWLAxiom> justificationSigmaClosure = computeOPlus(justification); + Set<OWLAxiom> justificationSigmaClosure = computeOPlus(explanation.getAxioms()); OWLOntology justificationSigmaClosureOnt = manager .createOntology(justificationSigmaClosure); - PelletExplanation expGen2 = new PelletExplanation(manager, + PelletExplanationGenerator expGen2 = new PelletExplanationGenerator(manager, Collections.singleton(justificationSigmaClosureOnt)); - Set<Set<OWLAxiom>> exps = expGen2.getEntailmentExplanations( - entailment, Integer.MAX_VALUE); +// Set<Set<OWLAxiom>> exps = expGen2.getEntailmentExplanations( +// entailment, 2); + Explanation expl = expGen2.getExplanation(explanation.getEntailment()); - laconic = Collections.singleton(justification).equals(exps); +// laconic = Collections.singleton(justification).equals(exps); + laconic = explanation.equals(expl); } catch (OWLOntologyCreationException e) { throw new ExplanationException(e); @@ -198,23 +200,23 @@ return laconic; } - private Set<Set<OWLAxiom>> retrieveAxioms(Set<Set<OWLAxiom>> explanations) { + private Set<Explanation> retrieveAxioms(Set<Explanation> explanations) { Map<OWLAxiom, Set<OWLAxiom>> sourceAxioms2OPlus = new HashMap<OWLAxiom, Set<OWLAxiom>>(); - for (Set<OWLAxiom> just : allPreviouslyFoundJustifications) { - for (OWLAxiom ax : just) { + for (Explanation explanation : allPreviouslyFoundExplanations) { + for (OWLAxiom ax : explanation.getAxioms()) { if (ontology.containsAxiom(ax)) { sourceAxioms2OPlus.put(ax, computeOPlus(Collections.singleton(ax))); } } } - Set<Set<OWLAxiom>> reconstituedExplanations = new HashSet<Set<OWLAxiom>>(); + Set<Explanation> reconstituedExplanations = new HashSet<Explanation>(); - for (Set<OWLAxiom> expl : explanations) { + for (Explanation explanation : explanations) { Map<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>> lhs2SubClassAxiom = new HashMap<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>>(); Set<OWLAxiom> reconstituedAxioms = new HashSet<OWLAxiom>(); - for (OWLAxiom laconicAx : expl) { + for (OWLAxiom laconicAx : explanation.getAxioms()) { if (laconicAx instanceof OWLSubClassAxiom) { OWLSubClassAxiom subAx = (OWLSubClassAxiom) laconicAx; if (subAx.getSubClass().isAnonymous()) { @@ -262,7 +264,7 @@ } } - reconstituedExplanations.add(reconstituedAxioms); + reconstituedExplanations.add(new Explanation(explanation.getEntailment(), reconstituedAxioms)); } @@ -271,39 +273,39 @@ - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment) throws ExplanationException { - Set<Set<OWLAxiom>> set; + public Set<Explanation> getExplanations(OWLAxiom entailment) throws ExplanationException { + Set<Explanation> explanations; try { - set = computePreciseJusts(entailment, 2147483647); + explanations = computePreciseJusts(entailment, 2147483647); } catch (OWLException e) { throw new ExplanationException(e); } - return set; + return explanations; } - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment, int limit) + public Set<Explanation> getExplanations(OWLAxiom entailment, int limit) throws ExplanationException { - Set<Set<OWLAxiom>> set; + Set<Explanation> explanations; try { - set = computePreciseJusts(entailment, limit); + explanations = computePreciseJusts(entailment, limit); } catch (OWLException e) { throw new ExplanationException(e); } - return set; + return explanations; } - public Set<Set<OWLAxiom>> getRegularExplanations(OWLAxiom entailment) throws ExplanationException { - Set<Set<OWLAxiom>> regularJusts; - regularJusts = pelletExplanation.getEntailmentExplanations((OWLAxiom)entailment); - lastRegularJusts.addAll(regularJusts); + public Set<Explanation> getRegularExplanations(OWLAxiom entailment) throws ExplanationException { + Set<Explanation> regularJusts; + regularJusts = pelletExplanation.getExplanations((OWLAxiom)entailment); + lastRegularExplanations.addAll(regularJusts); return regularJusts; } - public void returnSourceAxioms(Set<Set<OWLAxiom>> explanations){ + public void returnSourceAxioms(Set<Explanation> explanations){ Map<OWLAxiom, Set<OWLAxiom>> sourceMap = oPlus.getAxiomsMap(); System.out.println(sourceMap); - for(Set<OWLAxiom> explanation: explanations){ - for(OWLAxiom ax : explanation){ + for(Explanation explanation: explanations){ + for(OWLAxiom ax : explanation.getAxioms()){ System.out.println(ax + " gehört zu " + sourceMap.get(ax)); } Added: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/toggled.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/toggled.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -0,0 +1,42 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Color; +import java.util.Set; + +import javax.swing.ListSelectionModel; + +import org.dllearner.core.owl.NamedClass; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.HighlighterFactory; + +public class ClassesTable ext... [truncated message content] |