删除 OWLAPI 中的特定 class 和公理
Deleting specific class and axioms in OWLAPI
我正在尝试删除 class 和那个 class 的公理。我尝试了不同的选择,但无法让它们按照我想要的方式工作。这是我的代码(它什么都不删除...):
if(clazz.toString().contains("2381")) {
Stream<OWLClassAssertionAxiom> axiomstodelete = ontology.classAssertionAxioms(clazz);
OWLEntityRemover remover = new OWLEntityRemover(Collections.singleton(ontology));
axiomstodelete.forEach(i -> i.individualsInSignature().forEach(j -> j.accept(remover)));
manager.applyChanges(remover.getChanges());
}
更新:
此代码似乎适用于 class 和相关公理删除:
OWLEntityRemover remover = new OWLEntityRemover(Collections.singleton(ontology));
currentClass.accept(remover);
manager.applyChanges(remover.getChanges());
现在,有一个条件,基于此我想删除特定 class 的所有子classes(分支)。问题是我必须自下而上,因为我需要在层次结构中找到条件为真的 "lowest" class。我使用此代码:
currentClass = class_stack.pop();
removeClass(manager, clazz);
prevClass = class_stack.peek();
while(isBottom(reasoner, prevClass) && !class_stack.isEmpty() && !checkCondition(prevClass)) {
currentClass = class_stack.pop();
removeClass(manager, currentClass);
prevClass = class_stack.peek();
}
它适用于一个叶子,但它不适用于叶子的父级,因为父级的 isBottom 条件不为真,即使它的所有子级都被删除。我现在有一个解决方法 - 删除叶子后,保存 ontology,然后再次重新加载并删除下一个叶子等。最好将其合并为一个 运行.
For Ignazio - 这是一个分支示例,显示了为什么我要检查底部(C 代表 class,条件为真,L - 对于其他 classes)。如果我上左分支: L (bottom?->yes->delete) -> L(bottom?->yes->delete) -> L (bottom?->NO->leave for now)。然后查看右分支:C(bottom?->yes && condition?->yes -> leave!)
C
|
L
/ \
L L
/ \
L C
我需要的结果应该是:
C
|
L
|
L
|
C
您已经选择了要删除的公理。跳过删除的实体并在 ontology.
上使用 remove 方法
我正在尝试删除 class 和那个 class 的公理。我尝试了不同的选择,但无法让它们按照我想要的方式工作。这是我的代码(它什么都不删除...):
if(clazz.toString().contains("2381")) {
Stream<OWLClassAssertionAxiom> axiomstodelete = ontology.classAssertionAxioms(clazz);
OWLEntityRemover remover = new OWLEntityRemover(Collections.singleton(ontology));
axiomstodelete.forEach(i -> i.individualsInSignature().forEach(j -> j.accept(remover)));
manager.applyChanges(remover.getChanges());
}
更新: 此代码似乎适用于 class 和相关公理删除:
OWLEntityRemover remover = new OWLEntityRemover(Collections.singleton(ontology));
currentClass.accept(remover);
manager.applyChanges(remover.getChanges());
现在,有一个条件,基于此我想删除特定 class 的所有子classes(分支)。问题是我必须自下而上,因为我需要在层次结构中找到条件为真的 "lowest" class。我使用此代码:
currentClass = class_stack.pop();
removeClass(manager, clazz);
prevClass = class_stack.peek();
while(isBottom(reasoner, prevClass) && !class_stack.isEmpty() && !checkCondition(prevClass)) {
currentClass = class_stack.pop();
removeClass(manager, currentClass);
prevClass = class_stack.peek();
}
它适用于一个叶子,但它不适用于叶子的父级,因为父级的 isBottom 条件不为真,即使它的所有子级都被删除。我现在有一个解决方法 - 删除叶子后,保存 ontology,然后再次重新加载并删除下一个叶子等。最好将其合并为一个 运行.
For Ignazio - 这是一个分支示例,显示了为什么我要检查底部(C 代表 class,条件为真,L - 对于其他 classes)。如果我上左分支: L (bottom?->yes->delete) -> L(bottom?->yes->delete) -> L (bottom?->NO->leave for now)。然后查看右分支:C(bottom?->yes && condition?->yes -> leave!)
C
|
L
/ \
L L
/ \
L C
我需要的结果应该是:
C
|
L
|
L
|
C
您已经选择了要删除的公理。跳过删除的实体并在 ontology.
上使用 remove 方法