使用 OWLAPI 删除 ontology 注释

Remove ontology annotation using OWLAPI

我正在尝试使用 OWLAPI 版本 4.0.2(来自 Maven)从 ontology 中删除一些文字注释

为此,我使用 RemoveOntologyAnnotation class 和管理器 applyChange() 方法。 这是我使用的(简化的)代码:

    OWLOntologyManager m = OWLManager.createOWLOntologyManager();
    OWLOntology ontology = null;
    File ontologyFile = new File(ontologyFileName);
    try {
        ontology = m.loadOntologyFromOntologyDocument(ontologyFile);
    } catch (OWLOntologyCreationException e) {
        e.printStackTrace();
    }
    for (OWLClass cls : ontology.getClassesInSignature()) {
        for (OWLAnnotation annotation : EntitySearcher.getAnnotations(cls.getIRI(), ontology)) {
            if (annotation.getValue() instanceof OWLLiteral) {
                RemoveOntologyAnnotation rm = new RemoveOntologyAnnotation(ontology, annotation);
                System.out.println(m.applyChange(rm));
            }
        }
    }

applyChange() 方法总是返回 "UNSUCCESSFULLY" 而且我找不到任何关于为什么注释删除不起作用的文档。

N.B.: 在这里找到了一些迹象 http://sourceforge.net/p/owlapi/mailman/message/28203984/ 它似乎起作用的地方

正如在您的问题中链接的邮件列表线程中也指出的那样,关于本体的注释和关于 ontology 元素的注释是两个不同的东西。

RemoveOntologyAnnotation 仅删除 ontology 本身的注释。

元素上的注释使用公理表示,特别是 OWLAnnotationAssertionAxioms: Consequently, they have to be removed using OWLOntologyManager.removeAxiom() 或类似的方式:

for (OWLClass cls : ontology.getClassesInSignature()) {
    for (OWLAnnotationAssertionAxiom annAx : EntitySearcher.getAnnotationAssertionAxioms(cls.getIRI(), ontology)) {
        if (annAx.getValue().getValue() instanceof OWLLiteral) {
            m.removeAxiom(annAx);
        }
    }
}