Глядя на ваш код, посетитель выглядит правильно и должен вывести то, что вам нужно. Однако вы применяете его только к аксиомам, которые содержат B
. Примените его ко всем эквивалентным аксиомам классов и посмотрите, приведет ли он к ожидаемому результату.
Редактировать: посетитель не может получить доступ к другим аксиомам в онтологии, если для него не доступна онтология - это потому, что A
не делает ссылка на аксиомы, которые его используют; это отношение содержится в индексах онтологии.
Таким образом, посетителю необходимо получить доступ к онтологии и найти эквивалентные аксиомы, которые содержат именованные классы, включенные в вашу root аксиому. .equivalentClassesAxioms (B);
OWLObjectVisitor v = новый OWLObjectVisitor () {
public void visit(OWLEquivalentClassesAxiom ax) {
ax.classExpressions().forEach(c -> c.accept(this));
ax.getNamedClasses().forEach(c -> owlOnt.equivalentClassesAxioms(c).forEach(q->q.accept(this)));
}
public void visit(OWLObjectSomeValuesFrom ce) {
String property = ce.getProperty().toString();
String filler = ce.getFiller().toString();
System.out.println(property);
System.out.println(filler);
}
};
эквивалентный Axiom.accept (v);