用推断的超类替换个体的当前超类

时间:2017-03-28 14:34:36

标签: owl-api

Greetings教授Ignazio Palmisano,

请问有关于owl-API V5的问题

情境:

我有一个猫头鹰本体,包含一些个体和一些定义的类(具有相同的公理)。

我添加了一个新的个体“X”作为Thing的子类,我添加了各个属性。

我初始化推理器和precomputeInferences()

目标:

如果新的个体“X”被分类在现有的定义类下,我想要检索这个推断的类,并用推断的超类替换当前的单个超类Thing。

主要问题:

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

子问题:

2)我是否必须保存新推断的本体,然后将其作为断言处理,以便检索该类?我不喜欢这样做,因为我的兴趣只是用推断的超类替换当前的单个超类。

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

感谢您的时间。

真诚的问候。

1 个答案:

答案 0 :(得分:1)

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

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

因此,将r实例称为OWLReasoner,将i OWLIndividualt称为原始类型,T称为推断类型:< / p>

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包含新断言代替旧断言。根据需要保存或进一步详细说明本体。