Получить только корневые классы / классы без утвержденного подкласса родительского класса - PullRequest
0 голосов
/ 17 октября 2019

Есть ли простой способ извлечь только корневые классы из онтологии OWL в OWLAPI? Здесь я имею в виду именованные классы без утвержденного родительского класса. Добавленная сложность, пытаясь не использовать рассуждения, потому что онтологии огромны, и рассуждение не завершается в достаточно быстрое время (как правило). Спасибо как всегда!

1 Ответ

0 голосов
/ 18 октября 2019

На самом деле использование аргумента делает задачу тривиальной, потому что единственным именованным классом без родителя будет owl:Thing.

Шутки в сторону, вам нужно взять все классы в сигнатуре онтологии и,для каждого убедитесь, что он не отображается в аксиоме подкласса как подкласс (или, если это так, класс на другой стороне равен owl:Thing.

Код будет выглядеть следующим образом:

    OWLDataFactory df=OWLManager.getOWLDataFactory();
    OWLClass thing=df.getOWLThing();
    OWLOntology o = ...
    o.classesInSignature()
                   // all asserted superclasses
        .filter(c->o.subClassAxiomsForSubClass(c)
                               // skip owl:Thing 
                    .filter(s->!thing.equals(s.getSuperClass()))
                    // only keep the ones with no superclass
                    .count()==0)
        .forEach(System.out::println);

В этом примере выводятся IRI для этих классов.

...