Как получить подклассы класса OWL, используя owlapi 5.1? - PullRequest
0 голосов
/ 30 октября 2019

Я переписываю Java-программу, которая читает файл OWL и строит базу данных графиков. Программа использует более старую версию OWLAPI, и многие методы get теперь устарели. Я реорганизовал мой код для использования Stream. Прямо сейчас я пытаюсь получить подклассы для каждого класса в моем OWL-файле.

Используя OWLSubClassOfAxiom, я могу получить нужные подклассы, но мне все еще нужно отфильтровать результат, чтобы получить только подкласс

    final OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
    OWLOntology ontology = load(manager);

    //--create a reasoner to check that the ontology is consistent
    OWLReasonerFactory reasonerFactory = new 
    StructuralReasonerFactory();
    OWLReasoner reasoner = reasonerFactory.createReasoner(ontology);
    reasoner.precomputeInferences();
    boolean consistent = reasoner.isConsistent();


    if (consistent) {
      //--get all classes in the ontology
      for (OWLClass oc : ontology.classesInSignature().collect(Collectors.toSet())) {
          System.out.println( "Class: " + oc.toString() );
          //--get all the SubClassOfAxiom of each class
          for (OWLSubClassOfAxiom sca: ontology.subClassAxiomsForSuperClass(oc).collect(Collectors.toSet())) {
            System.out.println( "    Subclass: " + sca.toString() );
          }
        }
    }

Пример вывода выглядит следующим образом:

Class: <http://www.nist.gov/el/ontologies/kitting.owl#PoseLocation>
    Subclass: SubClassOf(<http://www.nist.gov/el/ontologies/kitting.owl#PoseLocationIn> <http://www.nist.gov/el/ontologies/kitting.owl#PoseLocation>)

В этом примере, используя owlapi 5.1, как я могу получить PoseLocationIn, который является подклассом PoseLocation?

1 Ответ

0 голосов
/ 31 октября 2019

Используйте класс Searcher, он предназначен для удобной замены удаленных методов при переходе с OWLAPI 3 на 5. Searcher::getSubClasses выполняет ту же работу.

...