Java 获取类OwlApi的子类

Java 获取类OwlApi的子类,java,owl,ontology,owl-api,Java,Owl,Ontology,Owl Api,有一种方法可以找到一个类的所有命名子类,而不使用reasonerfor(OWLClass-child:reasoner.getsubclass(clazz,true).getflatten()),也不使用公理进行推理?谢谢使用owl api可以查询本体以获得所有子类公理。 然后过滤结果以仅保留命名类 for (final OWLSubClassOfAxiom subClasse : ontology.getAxioms(AxiomType.SUBCLASS_OF)) { if (subC

有一种方法可以找到一个类的所有命名子类,而不使用reasoner
for(OWLClass-child:reasoner.getsubclass(clazz,true).getflatten())
,也不使用公理进行推理?谢谢

使用owl api可以查询本体以获得所有子类公理。 然后过滤结果以仅保留命名类

for (final OWLSubClassOfAxiom subClasse : ontology.getAxioms(AxiomType.SUBCLASS_OF))
{
    if (subClasse.getSuperClass() instanceof OWLClass 
         && subClasse.getSubClass() instanceof OWLClass)
    {
        System.out.println(subClasse.getSubClass() 
             + " extends " + subClasse.getSuperClass());
    }
}
使用Jena,您可以列出语句,添加“subassof”谓词的查找,然后像在OWLAPI中一样过滤以仅获取非mous对象

final StmtIterator it = model.listStatements();
while (it.hasNext())
{
    final Statement s = it.next();
    if (s.getPredicate().equals(RDFS.subClassOf) && !s.getObject().isAnon())
            System.out.println(s.getSubject() + " extends " + s.getObject());
}

谢谢你的解决方案。然而,它并没有考虑类和第一级类之间的关系,而第一级类是最重要的。我理解,因为在owl.file中没有任何引用表明这些类是reasoner所做的事情的子类。如果不使用reasoner,就无法将其考虑在内?我希望…把所有看到的子类都做一个集合,这些子类不是事物的子类。取签名中所有类的集合(B),并从(A)中删除类。B的剩余部分应该是一组额外的类,这些类是事物的直接子类。