@Nonnull @Override public GetOboTermRelationshipsResult execute(@Nonnull GetOboTermRelationshipsAction action, @Nonnull ExecutionContext executionContext) { return new GetOboTermRelationshipsResult(relationshipsManager.getRelationships(action.getEntity().asOWLClass())); } }
private Set<OWLClass> getEquivalentClasses (OWLReasoner reasoner, OWLClass c) { Node<OWLClass> equivalentClasses = reasoner.getEquivalentClasses(c); Set<OWLClass> results; if (!c.isAnonymous()) { results = equivalentClasses.getEntities(); } else { results = equivalentClasses.getEntitiesMinus(c.asOWLClass()); } return results; }
List<OWLOntologyChange> getDirectInferredEdges(OWLClass ce) { List<OWLOntologyChange> changes = new ArrayList<>(); //find direct inferred superclasses, D Set<OWLClass> directSuperclasses = reasoner.getSuperClasses(ce, true).getFlattened(); //find indirect superclasses, I Set<OWLClass> indirectSuperclasses = reasoner.getSuperClasses(ce, false).getFlattened(); //find asserted superclasses, A Set<OWLClassExpression> assertedSuperclasses = ce.asOWLClass().getSuperClasses(ont); //for each d in D, add an edge subClassOf(x d) for (OWLClass directSuperclass: directSuperclasses) { OWLAxiom axiom = factory.getOWLSubClassOfAxiom(ce, directSuperclass); AddAxiom addAxiom = new AddAxiom(ont, axiom); changes.add(addAxiom); } //for each a in A for (OWLClassExpression assertedSuperclass: assertedSuperclasses) { if (assertedSuperclass.isAnonymous()) { continue; } //if a is in I and not in D, then remove edge subClassOf(x a) if (indirectSuperclasses.contains(assertedSuperclass.asOWLClass()) && !directSuperclasses.contains(assertedSuperclass.asOWLClass())) { OWLAxiom axiom = factory.getOWLSubClassOfAxiom(ce, assertedSuperclass); RemoveAxiom removeAxiom = new RemoveAxiom(ont, axiom); changes.add(removeAxiom); } } return changes; }