public OWLOntology getMergedOntology() throws ExplanationException { try { if (mergedOntology == null) { mergedOntology = man.createOntology(IRI.create("owlapi:ontology:merge"), reasoner.getRootOntology().importsClosure(), true); } return mergedOntology; } catch (OWLOntologyCreationException e) { throw new ExplanationException(e); } catch (OWLOntologyChangeException e) { throw new ExplanationException(e); } }
public StructuralRootDerivedReasoner(OWLOntologyManager man, OWLReasoner reasoner) { this.man = man; this.reasoner = reasoner; this.child2Parent = new HashMap<>(); this.parent2Child = new HashMap<>(); roots = new HashSet<>(); try { getMergedOntology(); } catch (ExplanationException e) { e.printStackTrace(); } dirty = true; }
private void refill() { try { panels.forEach(ExplanationDisplay::dispose); explanationDisplayHolder.removeAll(); explanationDisplayHolder.validate(); OWLAxiom entailment = workbenchManager.getEntailment(); WorkbenchSettings settings = workbenchManager.getWorkbenchSettings(); Set<Explanation<OWLAxiom>> justifications = workbenchManager.getJustifications(entailment); List<Explanation<OWLAxiom>> exps = getOrderedExplanations(justifications); int count = 1; for (Explanation<OWLAxiom> exp : exps) { final ExplanationDisplay explanationDisplayPanel = createExplanationDisplay(exp, count, exps.size(), settings.getLimit()); ExplanationDisplayList list = new ExplanationDisplayList(editorKit, workbenchManager, explanationDisplayPanel, count); list.setBorder(BorderFactory.createEmptyBorder(2, 0, 10, 0)); explanationDisplayHolder.add(list); panels.add(explanationDisplayPanel); count++; if (!settings.isFindAllExplanations() && count > settings.getLimit()) { break; } } explanationDisplayHolder.add(Box.createVerticalStrut(10)); scrollPane.validate(); } catch (ExplanationException e) { logger.error("An error occurred whilst computing explanations: {}", e.getMessage(), e); } }
@Override public Set<Explanation<E>> getExplanations(E entailment, int limit) throws ExplanationException { try { module = extractModule(workingAxioms, checkerFactory.createEntailementChecker(entailment)); prunningDifferences.clear(); Set<Explanation<E>> explanations = new HashSet<>(); Explanation<E> expl = computeExplanation(entailment); explanations.add(expl); progressMonitor.foundExplanation(this, expl, Collections.unmodifiableSet(explanations)); if (progressMonitor.isCancelled()) { return Collections.singleton(expl); } if (expl.isEmpty()) { return Collections.emptySet(); } if (limit > 1) { constructHittingSetTree(entailment, expl, explanations, new HashSet<Set<OWLAxiom>>(), new HashSet<OWLAxiom>(), limit); } if (explanations.isEmpty()) { throw new NotEntailedException(entailment); } return explanations; } catch (OWLException e) { throw new ExplanationException(e); } }
private Set<Explanation<OWLAxiom>> computeLaconicExplanations(Explanation<OWLAxiom> explanation, int limit) throws ExplanationException { try { if(modelManager.getReasoner().isConsistent()) { OWLReasonerFactory rf = getReasonerFactory(); ExplanationGenerator<OWLAxiom> g = org.semanticweb.owl.explanation.api.ExplanationManager.createLaconicExplanationGeneratorFactory(rf).createExplanationGenerator(explanation.getAxioms()); return g.getExplanations(explanation.getEntailment(), limit); } else { OWLReasonerFactory rf = getReasonerFactory(); InconsistentOntologyExplanationGeneratorFactory fac = new InconsistentOntologyExplanationGeneratorFactory(rf, Long.MAX_VALUE); LaconicExplanationGeneratorFactory<OWLAxiom> lacFac = new LaconicExplanationGeneratorFactory<>(fac); ExplanationGenerator<OWLAxiom> g = lacFac.createExplanationGenerator(explanation.getAxioms()); return g.getExplanations(explanation.getEntailment(), limit); } } catch (ExplanationException e) { throw new ExplanationException(e); } }