仅检索根 classes/classes 而没有断言父 class 的子 class
Retrieve just root classes/classes with no asserted subclassof parent class
是否有一种简单的方法可以从 OWLAPI 中的 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。
是否有一种简单的方法可以从 OWLAPI 中的 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。