我正在重写一个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
的子类)?
最佳答案
使用 Searcher
类,它可以方便地替代从 OWLAPI 3 到 5 中删除的方法。Searcher::getSubClasses
执行相同的工作.
关于java - 如何使用 owlapi 5.1 检索 OWL 类的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58632582/