用推断的超级 class 替换个体的当前超级 class

Replace current super class of an individual with the inferred superclass

您好 Ignazio Palmisano 教授,

请问我有一个关于 owl-API V5

的问题

场景:

我有一个 owl ontology,其中包含一些个体和一些已定义的 classes(具有等效公理)。

我添加了一个新个体 "X" 作为 Thing 的子class,并且我添加了个体属性。

我初始化推理机和预计算推理()

目标:

如果新个体 "X" 在现有定义 class 下被 class 化,我想检索这个推断 class 并替换当前个体 superclass 具有推断超级的东西class.

主要问题:

1) 请问最好的方法是什么?

子题:

2) 我是否必须保存新的推断 ontology 然后按照断言处理它,以便检索 class?我不喜欢这样做,因为我的兴趣只是用推断的 superclass.

替换当前的单个 superclass

我试图找到如何做到这一点,我遇到了: EntitySearcher.getTypes(OWLIndividual, OWLOntology),但是这只检索原始断言的 superclass 而不是推断的。

感谢您的宝贵时间。

诚挚的问候。

为了将断言的 class 替换为推断的(或多个 - 可能不止一个),您需要执行以下操作:

  • 检索推断的类型
  • 删除断言类型
  • 添加推断类型

因此,调用 r OWLReasoner 实例,i OWLIndividualt 其原始类型和 T 推断类型:

OWLOntology o = ...
OWLReasoner r = ...
// This returns the node of direct types - i.e., the set of equivalent classes that are the most specific named types including i among their instances
// This will always be a Node even for a single class. If the reasoner can infer that there are equivalent classes, they all will appear in the Node
Node<OWLClass> types = r.getTypes(i, true);

// remove existing type assertions
o.removeAxioms(o.getClassAssertionAxioms(i));

// add the new ones
OWLDataFactory df = ...
Stream<OWLAxiom> axiomsToAdd = types.entities().map(T->df.getOWLClassAssertionAxiom(T, i));
o.addAxioms(OWLAPIStreamUtils.asList(axiomsToAdd));

现在 o 包含新的断言来代替旧的断言。根据需要保存或进一步详细说明 ontology。