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

时间:2018-06-13 07:37:08

标签: owl-api

在我的项目中,我想通过一个受限制的(somevaluefrom或allvalues)objectproperties来获取与给定类相关的所有范围类。我可以获得包含给定类的受限子类的Axioms表达式,但是如何在这些表达式中获取范围类?换句话说,我怎样才能将所有相关的类都放到给定的类中,不包括继承的子类。

例如:

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>))  

我怎样才能获得范围类#Country和#Mild

感谢您的关注!

1 个答案:

答案 0 :(得分:0)

编写一个OWLObjectVisitor并覆盖您感兴趣的限制的访问(OWL ...类型)。此时,

type.getFiller()

将产生你所追求的课程。

示例在文档中: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
    }
}