Как получить диапазон класса объектаProperty по его классу домена в owlapi? - PullRequest
0 голосов
/ 13 июня 2018

В моем проекте я хотел бы получить весь класс диапазона, связанный с данным классом, по ограниченным (somevaluefrom или allvalues ​​from) объектным свойствам.Я могу получить ограниченные выражения подкласса 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 голосов
/ 13 июня 2018

Напишите 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
    }
}
...