使用OWLAPI删除本体注释

时间:2015-04-21 15:20:08

标签: java owl ontology owl-api

我试图使用OWLAPI版本4.0.2(来自Maven)从本体中删除一些文字注释

为此,我使用了RemoveOntologyAnnotation类和manager 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/找到了一些迹象 它似乎工作的地方

1 个答案:

答案 0 :(得分:1)

正如您在问题中链接的邮件列表线程中所指出的,关于本体和本体元素注释的注释是两回事。

RemoveOntologyAnnotation仅删除本体上的注释。

元素的注释使用公理表示,特别是OWLAnnotationAssertionAxiom s:因此,必须使用OWLOntologyManager.removeAxiom()或类似方法删除它们:

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