我试图删除该班级的班级和公理。我尝试了不同的选择,无法按照我想要的方式工作。这是我的代码(它没有删除任何内容......):
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());
}
&#13;
更新: 这段代码似乎适用于类和相关的公理删除:
OWLEntityRemover remover = new OWLEntityRemover(Collections.singleton(ontology));
currentClass.accept(remover);
manager.applyChanges(remover.getChanges());
现在,有一个条件,基于此条件我想删除特定类的所有子类(分支)。问题是我必须自下而上,因为我需要找到最低的&#34;条件为true的层次结构中的类。我使用这段代码:
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();
}
&#13;
它适用于一个叶子,但它不适用于叶子的父级,因为父级的isBottom条件不是真的,即使在删除了所有子级之后也是如此。我现在有一个解决方法 - 在删除leaf后,保存本体,然后重新加载并删除下一个叶子等。很高兴能在一次运行中完成。
对于Ignazio - 这是一个分支示例,说明我为什么要检查底部(C代表具有真实条件的类,L代表其他类)。如果我上左分支:L(底部? - &gt;是 - &gt;删除) - &gt; L(底部? - &gt;是 - &gt;删除) - &gt; L(底部? - &gt; NO->暂时离开)。然后检查右侧分支:C(底部? - &gt;是&amp;&amp;条件? - &gt;是 - &gt;离开!)
C
|
L
/ \
L L
/ \
L C
我需要的结果应该是:
C
|
L
|
L
|
C
答案 0 :(得分:1)
您已选择要删除的公理。跳过已删除的实体,并在本体上使用remove方法。