Вопрос обманчиво прост, но есть важные ограничения, которые должны быть явными, прежде чем код может быть написан.
Под иерархия в онтологии, где есть только именованные классы и аксиомы подклассов между именованными классамипросто:
A subclassOf B
C subclassOf B
Субиерархия B
полностью описана этими двумя аксиомами, так что вы можете выбрать их и легко скопировать:
OWLOntology source = ...
OWLOntology destination = ...
OWLClass a = ...
source.subClassAxiomsForSuperClass(a).forEach(destination::addAxiom);
// repeat on the subclass in each axiom recursively
Однако, если есть анонимклассы, проблема быстро усложняется:
A subclassOf exist r D
exist r D subclassOf B
C subclassOf B
Выбор набора аксиом для копирования в онтологию назначения становится очень сложным, если необходимо сохранить все выводы, а также утвержденную иерархию (дляНапример, GCI показан в приведенном выше примере. Существует много литературы о модульности и атомном разложении, обе являются областями исследований, которые охватывают тему выбора аксиом, которые допускают все выводы, которые относятся к исходной сигнатуре - в данном случае,ваш стартовый класс.
Вы можете получить набор аксиом, используя SyntacticLocalityModuleExtractor
:
destination.addAxioms(new SyntacticLocalityModuleExtractor(
source.getOWLOntologyManager(),
source,
ModuleType.STAR));
Однако вы должны прочитать соответствующие статьи в литературе, чтобы понять преимущества и недостатки доступных подходов.Некоторые отправные точки:
http://owl.cs.manchester.ac.uk/research/modularity/
http://www.cs.man.ac.uk/~delvescc/dl-10.pdf
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3113511/