java - 如何使用 owlapi 5.1 检索 OWL 类的子类?

标签 java owl owl-api

我正在重写一个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/

相关文章:

java - 将 OWL 公理转换为曼彻斯特语法

java - 如何将 RDF 三元组添加到 OWLOntology?

java - 无法解析符号 RecyclerViewActions/RecyclerViewMatcher

xml - OWL2 XML 到 AnyLogic ALP

java - 从 RDF 节点拉出字符串

java - 在java web中使用OWL API获取快照SPARQL查询

hadoop - 基于Map Reduce的OWL文件推理

java - 为什么我的文件总是被覆盖?

java - Spring Data JPA - for循环不保存实体

java - 在 Hibernate 中执行过程