@Override protected OpenlletCmdApp create() { return new OpenlletExplain(); } }, fileIRI("test/data/modularity/koala.owl"));
public void explainEquivalentClass(final OWLClass c1, final OWLClass c2) { if (c1.equals(c2)) { return; } final OWLAxiom axiom = OWL.equivalentClasses(c1, c2); explainAxiom(axiom); }
public void explainUnsatisfiableClass(final OWLClass cls) { explainSubClass(cls, OWL.Nothing); }
verbose("Explain all the subclass relations in the ontology"); explainClassHierarchy(); verbose("Explain all the unsatisfiable classes"); explainUnsatisfiableClasses(); verbose("Explain unsatisfiability of " + _name1); explainUnsatisfiableClass((OWLClass) _name1); verbose("Explain property assertion " + _name1 + " and " + _name2 + " and " + _name3); explainPropertyValue((OWLIndividual) _name1, (OWLProperty) _name2, _name3); verbose("Explain subclass relation between " + _name1 + " and " + _name2); explainSubClass((OWLClass) _name1, (OWLClass) _name2); verbose("Explain instance relation between " + _name1 + " and " + _name2); explainInstance((OWLIndividual) _name1, (OWLClass) _name2); printStatistics();
private void explainClassHierarchy(final OWLClass cls, final Node<OWLClass> eqClasses, final Set<OWLClass> visited) throws OWLException { if (visited.contains(cls)) { return; } visited.add(cls); visited.addAll(eqClasses.entities().collect(Collectors.toList())); for (final OWLClass eqClass : eqClasses) { _monitor.incrementProgress(); explainEquivalentClass(cls, eqClass); } _reasoner.getInstances(cls, true).entities().forEach(ind -> explainInstance(ind, cls)); final NodeSet<OWLClass> subClasses = _reasoner.getSubClasses(cls, true); final Map<OWLClass, Node<OWLClass>> subClassEqs = new HashMap<>(); for (final Node<OWLClass> equivalenceSet : subClasses) { if (equivalenceSet.isBottomNode()) { continue; } final OWLClass subClass = equivalenceSet.getRepresentativeElement(); subClassEqs.put(subClass, equivalenceSet); explainSubClass(subClass, cls); } for (final Map.Entry<OWLClass, Node<OWLClass>> entry : subClassEqs.entrySet()) { explainClassHierarchy(entry.getKey(), entry.getValue(), visited); } }
public void explainClassHierarchy() throws OWLException { final Set<OWLClass> visited = new HashSet<>(); _reasoner.flush(); startTask("Classification"); _reasoner.getKB().classify(); finishTask("Classification"); startTask("Realization"); _reasoner.getKB().realize(); finishTask("Realization"); _monitor = new ConsoleProgressMonitor(); _monitor.setProgressTitle("Explaining"); _monitor.setProgressLength((int) _reasoner.getRootOntology().classesInSignature().count()); _monitor.taskStarted(); final Node<OWLClass> bottoms = _reasoner.getEquivalentClasses(OWL.Nothing); explainClassHierarchy(OWL.Nothing, bottoms, visited); final Node<OWLClass> tops = _reasoner.getEquivalentClasses(OWL.Thing); explainClassHierarchy(OWL.Thing, tops, visited); _monitor.taskFinished(); }
public void explainUnsatisfiableClasses() { for (final OWLClass cls : _reasoner.getEquivalentClasses(OWL.Nothing)) { if (cls.isOWLNothing()) { continue; } explainUnsatisfiableClass(cls); } }
public void explainPropertyValue(final OWLIndividual s, final OWLProperty p, final OWLObject o) { if (p.isOWLObjectProperty()) { explainAxiom(OWL.propertyAssertion(s, (OWLObjectProperty) p, (OWLIndividual) o)); } else { explainAxiom(OWL.propertyAssertion(s, (OWLDataProperty) p, (OWLLiteral) o)); } }
public void explainInstance(final OWLIndividual ind, final OWLClass c) { if (c.isOWLThing()) { return; } final OWLAxiom axiom = OWL.classAssertion(ind, c); explainAxiom(axiom); }
public void explainSubClass(final OWLClass sub, final OWLClass sup) { if (sub.equals(sup)) { return; } if (sub.isOWLNothing()) { return; } if (sup.isOWLThing()) { return; } final OWLSubClassOfAxiom axiom = OWL.subClassOf(sub, sup); explainAxiom(axiom); }