Set<HierarchyNode<AtomicConcept>> nodes=m_directDataRoleDomains.get(atomicRole);
if (nodes==null) {
final Individual freshIndividual=Individual.createAnonymous("fresh-individual");
final Constant freshConstant=Constant.createAnonymous("fresh-constant");
final Set<Atom> roleAssertion=Collections.singleton(atomicRole.getRoleAssertion(freshIndividual,freshConstant));
final Tableau tableau=getTableau();
HierarchySearch.SearchPredicate<HierarchyNode<AtomicConcept>> searchPredicate=new HierarchySearch.SearchPredicate<HierarchyNode<AtomicConcept>>() {
public Set<HierarchyNode<AtomicConcept>> getSuccessorElements(HierarchyNode<AtomicConcept> u) {
return u.getChildNodes();
}
public Set<HierarchyNode<AtomicConcept>> getPredecessorElements(HierarchyNode<AtomicConcept> u) {
return u.getParentNodes();
}
public boolean trueOf(HierarchyNode<AtomicConcept> u) {
AtomicConcept potentialDomainConcept=u.getRepresentative();
return !tableau.isSatisfiable(false,roleAssertion,Collections.singleton(Atom.create(potentialDomainConcept,freshIndividual)),null,null,null,ReasoningTaskDescription.isDomainOf(potentialDomainConcept,atomicRole));
}
};
nodes=HierarchySearch.search(searchPredicate,Collections.singleton(m_atomicConceptHierarchy.getTopNode()),null);
m_directDataRoleDomains.put(atomicRole,nodes);
}