Код в вопросе содержит ошибку: он не загружает желаемую импортированную онтологию (пиццу) в менеджер.
OWLImportsDeclaration im = factory.getOWLImportsDeclaration(IRI.create("https://protege.stanford.edu/ontologies/pizza/pizza.owl"));
manager.applyChange(new AddImport(ontology,im));
Эти строки просто добавляют объявление owl:imports
в заголовок онтологии (_:x a owl:Ontology
) для pizza-iri.
Чтобы код работал, вам нужно отдельно загрузить онтологию пиццы:
OWLOntology pizza = manager.loadOntology(IRI.create("https://protege.stanford.edu/ontologies/pizza/pizza.owl"));
OWLImportsDeclaration im = factory.getOWLImportsDeclaration(pizza.getOntologyID().getOntologyIRI().orElseThrow(AssertionError::new));
manager.applyChange(new AddImport(ontology, im));
Теперь вы можете проверить, что все импорта и ссылки действительно присутствуют и корректны, и, следовательно,ваша онтология имеет ссылку на онтологию пиццы:
Assert.assertEquals(1, ontology.importsDeclarations().count());
Assert.assertEquals(1, ontology.imports().count());
Assert.assertEquals(2, manager.ontologies().count());
Тогда вы можете получить все OWL-классы из обеих онтологий в виде одной коллекции или java-Stream:
ontology.classesInSignature(Imports.INCLUDED).forEach(System.err::println);
Также, пожалуйста,примечание: метод Set<OWLClass> getClassesInSignature(boolean includeImportsClosure)
устарел (в OWL-API v5 ).