在我的程序中,我需要对OWLOntology
.
我想我需要创建一个新的OWLOntologyManager
:
ontologyManager = OWLManager.createOWLOntologyManager();
现在我想向管理器添加一个本体,它是给定 OWLOntology 的深层副本。我不想从文档中再次加载本体,因为这需要很多时间。
我怎样才能以简单的方式做到这一点?
据我所知,确实没有深度复制的方法。一种解决方案是将第一个本体中存在的所有公理添加到新创建的本体实例中。这样您就可以将所有内容保存在内存中,而无需重新读取文件。OWL 实体(类、属性等)也应该被复制。
以下代码应该可以工作(未经测试):
manager.addAxioms(newOntology, oldOntology.getAxioms());
就公理而言,本体的所有内容都是不可变对象,因此深拷贝只需将 OWLOntology 中的所有公理添加到另一个 OWLOntology 中 - 您只需在不同的 OWLOntologyManager 中创建具有相同 OWLOntologyID 的 OWLOntology 并添加所有公理. 由于公理、实体和表达式都是不可变的,让它们被两个 OWLOntologies 引用不会导致更改从一个传播到另一个,或竞争条件。
添加所有公理可以像 loopasam answer 一样完成,这确实是正确的。