我对猫头鹰api的使用有一个快速的问题。
假设我有一个名为Species的类,它有一个Subclass哺乳动物,它有一个子类灵长类动物,它有一个子类Human。
物种 - >哺乳动物 - >灵长类动物 - >人
出于某种原因,我想在我们的软件中对此进行重新分类,并说灵长类动物不再被视为哺乳动物,而是它们应该是物种的直接子类。
意味着我们的图表现在应该是这样的
物种 - >灵长类动物 - >人
任何人都可以指出我正确的方向吗?
使用owl-api
找到我们的父类很容易reasoner.getSuperClasses(chield, true).entities().collect(Collectors.toSet[OWLClass])
但我怎样才能分离'我的班级现在来自它的父母?
答案 0 :(得分:3)
如果你有关系的本体论:
(不是推理计算的结果)。
然后在owlapi中,这表示为公理:
解决方案可能是删除旧的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)
如果专业化关系未在您的本体中直接断言;它会复杂得多。你必须知道为什么'人类'是查看哺乳动物的子类。也许是'解释'推理系统'可以帮到你。