2015-04-21 1 views
0

Я пытаюсь удалить некоторые буквенные аннотаций из онтологии с использованием OWLAPI версии 4.0.2 (с Maven)Удалить онтологии аннотации с помощью OWLAPI

В этой цели я использую класс RemoveOntologyAnnotation и менеджер 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() всегда возвращается «Неудачно» И я не мог найти никакой документации о том, почему аннотация удаления не работает.

N.B .: найдены некоторых указаний здесь http://sourceforge.net/p/owlapi/mailman/message/28203984/ Где это похоже на работу

+0

Онтология аннотация аннотации, которые прикреплены к онтологии самой IRI; то, что вам нужно, - это утверждения аннотаций. @dhke уже предоставил хороший ответ о том, как это сделать. – Ignazio

ответ

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); 
     } 
    } 
} 
+1

Вы также можете использовать новый RemoveAxiom (annAx) для каждого изменения, затем собирать изменения и применять их все одновременно, так же, как @Djast сделал в исходном вопросе – Ignazio

+0

Спасибо за ответ! Я пытался удалить аннотацию аннотации раньше, но мне удалось удалить аксиому classe ... – vemonet