2016-04-27 3 views
0

Использование версии 3.х мы использовали, чтобы получить classexpressions как этотКак получить подклассы, supperclasses после обновления OWL API 3.X до 4.X?

cls.getSuperClasses(ont) 

Обновление версии 4.X мы стараемся использовать EntitySearcher но возвращать пустые наборы.

EntitySearcher.getSuperClasses(cls, ontology) 

Полный код:

public static void test() throws OWLOntologyCreationException { 

    OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); 
    OWLDataFactory factory = manager.getOWLDataFactory(); 
    OWLOntology ontology; 

    File file = new File("assets/ontologies/zebra.owl"); 
    ontology = manager.loadOntologyFromOntologyDocument(file); 

    OWLClass cls = factory.getOWLClass(IRI.create(ontology.getOntologyID().getOntologyIRI() + "#" + "Color")); 
    Set<OWLClassExpression> parentClasses = collect(EntitySearcher.getSuperClasses(cls, ontology).iterator()); 

    System.out.println(parentClasses.size()); 
} 

public static Set<OWLClassExpression> collect(Iterator<OWLClassExpression> i) { 

    Set<OWLClassExpression> set = new HashSet<OWLClassExpression>(); 
    while (i.hasNext()) { 
     OWLClassExpression res = i.next(); 
     set.add(res); 
    } 
    return set; 
} 

Используется онтология zebra.owl/Zebra Риддл или Эйнштейна загадка - DB link

Ожидаемый результат (3.X или Protege):

inverse (has_color) some House 

ответ

1

Проблема здесь:

ontology.getOntologyID().getOntologyIRI()

В OWLAPI 4 getOntologyIRI не возвращает IRI но Optional<IRI> представлять тот факт, что онтология не может иметь IRI.

Если изменить код

ontology.getOntologyID().getOntologyIRI().get()

ваш код работает и печатает 1.

Я добавил это исправление в the migration suggestions

+0

Позор на меня: /. Спасибо. –