如何通过 owlapi 中的域 class 获取 objectProperty 的范围 class?

how to get range class of objectProperty by its domain class in owlapi?

在我的项目中,我想通过受限(somevaluefrom 或 allvalues from)对象属性获取与给定 class 相关的所有范围 class。我可以获得包含给定 class 的受限制的 subclassofAxioms 表达式,但是如何在这些表达式中获取范围 class?换句话说,我怎样才能得到给定 class 的所有相关 classes,不包括继承的 subclass.

例如:

public static void printSubClassOfAxioms(OWLOntology ontology,OWLReasoner reasoner,OWLClass owlClass){  

  for(OWLSubClassOfAxiom ax:ontology.getSubClassAxiomsForSubClass(owlClass)){
        OWLClassExpression expression=ax.getSuperClass();
        System.out.println(ax);
         System.out.println(expression);
    }
 }

结果是:

SubClassOf(<#FourCheesesTopping> <#CheeseTopping>)  
SubClassOf(<#FourCheesesTopping> ObjectSomeValuesFrom(<#hasSpiciness> <#Mild>))  
SubClassOf(<#FourCheesesTopping> ObjectAllValuesFrom(<#hasCountryOfOrigin> #Country>))  

我怎样才能得到范围 classes #Country 和 #Mild

感谢您的关注!

编写一个 OWLObjectVisitor 并为您感兴趣的限制覆盖访问(OWL...类型)。在这一点上,

type.getFiller()

将产生您想要的 class。

示例在文档中:https://github.com/owlcs/owlapi/wiki/Documentation

public class RestrictionVisitor extends OWLClassExpressionVisitor {
    @Override
    public void visit(@Nonnull OWLObjectSomeValuesFrom ce) {
        // This method gets called when a class expression is an existential
        // (someValuesFrom) restriction and it asks us to visit it
    }
}