Greetings教授Ignazio Palmisano,
请问有关于owl-API V5的问题
情境:
我有一个猫头鹰本体,包含一些个体和一些定义的类(具有相同的公理)。
我添加了一个新的个体“X”作为Thing的子类,我添加了各个属性。
我初始化推理器和precomputeInferences()
目标:
如果新的个体“X”被分类在现有的定义类下,我想要检索这个推断的类,并用推断的超类替换当前的单个超类Thing。
主要问题:
1)请问最好的方法是什么?
子问题:
2)我是否必须保存新推断的本体,然后将其作为断言处理,以便检索该类?我不喜欢这样做,因为我的兴趣只是用推断的超类替换当前的单个超类。
我试图找到如何做到这一点,我遇到了: EntitySearcher.getTypes(OWLIndividual,OWLOntology),但是这只检索原始断言的超类而不是推断的。
感谢您的时间。
真诚的问候。
答案 0 :(得分:1)
为了将断言的类替换为推断的类(或多个 - 可能不止一个),您需要执行以下操作:
因此,将r
实例称为OWLReasoner
,将i
OWLIndividual
,t
称为原始类型,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包含新断言代替旧断言。根据需要保存或进一步详细说明本体。