Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OWL Api,将类从父级A移动到父级B_Java_Owl_Owl Api - Fatal编程技术网

Java OWL Api,将类从父级A移动到父级B

Java OWL Api,将类从父级A移动到父级B,java,owl,owl-api,Java,Owl,Owl Api,我有一个关于OWLAPI使用的快速问题 假设我有一个叫做物种的类,它有一个哺乳动物亚类,它有一个灵长类,它有一个人类亚类 物种->哺乳动物->灵长类->人类 出于某种原因,我想在我们的软件中对其进行重新分类,并说灵长类不再被视为哺乳动物,它们应该是一个物种的直接亚类 这意味着我们的图表现在应该是这样的 物种->灵长类->人类 谁能给我指一下正确的方向吗 使用OWLAPI查找父类非常简单 reasoner.getSuperClasses(chield, true).entities().colle

我有一个关于OWLAPI使用的快速问题

假设我有一个叫做物种的类,它有一个哺乳动物亚类,它有一个灵长类,它有一个人类亚类

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

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

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

物种->灵长类->人类

谁能给我指一下正确的方向吗

使用OWLAPI查找父类非常简单

reasoner.getSuperClasses(chield, true).entities().collect(Collectors.toSet[OWLClass])

但是我现在如何将类从父类中“分离”出来呢?

如果您有一个本体,其中的关系:

  • 物种->哺乳动物
  • 哺乳动物->灵长类
  • 灵长类->人类
直接断言(不是推理计算的结果)

在owlapi中,这表示为公理:

  • 猫头鹰亚纲(哺乳动物,种)
  • 猫头鹰亚纲(灵长类,哺乳动物)
  • 猫头鹰亚纲(人类,灵长类)
  • 解决方案可能是删除旧的子类断言并添加新的断言(除非您正在使用Allen-temporal)

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

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

    如果专门化关系没有在本体中直接断言;这将更加复杂。你必须知道为什么“人类”是“哺乳动物”的一个子类。“推理机”的“解释”系统可能会对您有所帮助。

    不仅仅是“可能”——如果子类axiom被断言,则必须删除它才能更改层次结构。如果是推断的,则有必要了解原因并删除/抵消推断的原因。非常感谢。这也将保留人类所有潜在的子类和个体。还是我必须手动跟踪它们?
    manager.remove(ontology, axiom)
    manager.add(ontology, axiom)