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);
}
}