我想知道
有多贵(时间)OWLOntologyManager.addAxioms(OWLOntology ont, java.util.Set<? extends OWLAxiom> axioms)
操作是。我要问的主要原因是我正在处理一个非常大的数据集,并想知道在创建公理时立即将公理添加到我的本体中是否更有效,或者等到所有公理都准备就绪并在一个方法中添加公理调用
另外,这只是因为我很好奇,各种OWLAxiom
创建方法是恒定时间操作吗?如果没有,他们有多贵?
万一你想知道,我计划在缓冲模式下应用pellet推理器,并在完成所有本体修改后刷新更改。
答案 0 :(得分:2)
添加公理需要更新一些地图(取决于公理的类型,可能存在一个或多个索引)。如果有听众等待听到对本体的更改,他们也会收到通知 - 听众是否进行了昂贵的操作。
Reasoners是听众的一个例子:通常他们会在临时集合中收集公理,直到调用flush()
。
时间成本方面,这应该等于哈希映射(或并发哈希映射)中的一个或多个插入,以及侦听器列表上的迭代,通常包含非常少的元素。预计成本将接近恒定,但对于大型本体而言,内存使用的增加可能会导致垃圾收集速度减慢。
对于最新版本的OWL API(例如4.0.2),在从文件中解析本体时使用临时列表而不是集合添加公理 - 这会降低散列成本。一旦加载完成,列表就会变成集合 - 准确地说是对公理集合的第一次读取访问。
与推理成本相比,任何这些成本都应该是无关紧要的 - 推理需要更长的时间,因为这是一个更复杂的操作。
一旦完成更改,缓冲然后刷新可能是这种情况下的最佳策略。
OWL API可以使用更好的公理批量插入,但在当前版本中,添加一组公理和添加单个公理之间几乎没有区别。