OWL Api,将班级从父母A移到B

时间:2017-04-04 19:29:49

标签: java owl owl-api

我对猫头鹰api的使用有一个快速的问题。

假设我有一个名为Species的类,它有一个Subclass哺乳动物,它有一个子类灵长类动物,它有一个子类Human。

物种 - >哺乳动物 - >灵长类动物 - >人

出于某种原因,我想在我们的软件中对此进行重新分类,并说灵长类动物不再被视为哺乳动物,而是它们应该是物种的直接子类。

意味着我们的图表现在应该是这样的

物种 - >灵长类动物 - >人

任何人都可以指出我正确的方向吗?

使用owl-api

找到我们的父类很容易
reasoner.getSuperClasses(chield, true).entities().collect(Collectors.toSet[OWLClass])

但我怎样才能分离'我的班级现在来自它的父母?

1 个答案:

答案 0 :(得分:3)

如果你有关系的本体论:

  • 种类 - >哺乳动物
  • 哺乳动物 - >灵长类动物
  • 灵长类动物 - >人类
直接断言

(不是推理计算的结果)。

然后在owlapi中,这表示为公理:

  1. OWLSubClass(哺乳动物,物种)
  2. OWLSubClass(灵长类动物,哺乳动物)
  3. OWLSubClass(人类,灵长类动物)
  4. 解决方案可能是删除旧的subClass断言并添加新的断言(除非你正在使用Allen-temporal)。

    OWLDataFactory factory = manager.getOWLDataFactory();
    ontology.remove(factory.getOWLSubClassOfAxiom(primate, mammal));
    ontology.add(factory.getOWLSubClassOfAxiom(primate, species));
    

    注意:如果您使用的是owlapi版本低于5的版本,那么我们必须使用OWLOntologyManager删除/添加本体中的公理:

    manager.remove(ontology, axiom)
    manager.add(ontology, axiom)
    

    如果专业化关系未在您的本体中直接断言;它会复杂得多。你必须知道为什么'人类'是查看哺乳动物的子类。也许是'解释'推理系统'可以帮到你。