我试图使用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/找到了一些迹象 它似乎工作的地方
答案 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);
}
}
}