Я переписываю 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
?