【问题标题】:How to make a deep copy of an OWLOntology如何制作 OWLOntology 的深层副本
【发布时间】:2013-08-08 15:05:01
【问题描述】:

在我的程序中,我需要制作OWLOntology 实例的深层副本。

我想我需要创建一个新的OWLOntologyManager

ontologyManager = OWLManager.createOWLOntologyManager();

现在我想向管理器添加一个本体,它是给定 OWLOntology 的深层副本。 我不想从文档中再次加载本体,因为这需要很多时间。

我怎样才能以简单的方式做到这一点?

【问题讨论】:

  • 我在文档中看不到任何相关的克隆或类似方法,因此您最好的选择可能是将本体写入字符串,然后再次加载,至少这样可以减少硬盘读/写延迟。

标签: java ontology owl owl-api


【解决方案1】:

据我所知,确实没有深拷贝的方法。一种解决方案是将第一个本体中存在的所有公理添加到新创建的本体实例中。这样您就可以将所有内容保存在内存中,无需重新读取文件。 OWL 实体(类、属性等)也应该被复制。

以下代码应该可以工作(未经测试):

manager.addAxioms(newOntology, oldOntology.getAxioms());

【讨论】:

    【解决方案2】:

    就公理而言,本体的所有内容都是不可变对象,因此深拷贝只需将 OWLOntology 中的所有公理添加到另一个 OWLOntology 中 - 您只需在不同的 OWLOntologyManager 中创建具有相同 OWLOntologyID 的 OWLOntology 并添加所有的公理。 由于公理、实体和表达式都是不可变的,让它们被两个 OWLOntologies 引用不会导致更改从一个传播到另一个,或竞争条件。

    添加所有公理可以像loopasam answer那样完成,这确实是正确的。

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 2016-01-29
      相关资源
      最近更新 更多