仅检索根 classes/classes 而没有断言父 class 的子 class

Retrieve just root classes/classes with no asserted subclassof parent class

是否有一种简单的方法可以从 OWLA​​PI 中的 OWL ontology 中仅检索根 classes?在这里我的意思是命名为 classes 没有断言父 class。增加了复杂性,尽量不使用推理器,因为本体非常庞大,并且推理器没有在足够快的时间内(通常)完成。一如既往的感谢!

实际上使用推理器会使任务变得微不足道,因为没有父项的唯一命名 class 将是 owl:Thing.

开个玩笑,你需要把 ontology 签名中的所有 class 都拿走,并确保每个 class 都不会出现在子 class 公理中作为 subclass(或者,如果是的话,另一边的 class 是 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);

此示例打印出那些 classes 的 IRI。