用推断的超级 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
OWLIndividual
,t
其原始类型和 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。
您好 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
OWLIndividual
,t
其原始类型和 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。