java - OWLAPI 查找特定类的所有 DataSomeValuesFrom

标签 java owl owl-api

这是我的 OWL 文件的一部分:

# Class: :Book (:Book)

SubClassOf(:Book ObjectSomeValuesFrom(:writtenBy owl:Thing))
SubClassOf(:Book DataSomeValuesFrom(:genre rdfs:Literal))
SubClassOf(:Book DataSomeValuesFrom(:title rdfs:Literal))

如何仅获取 DataSomeValuesFrom 属性? 我正在使用 owlapi 5.1.0 隐士作为推理者。

编辑:这就是我解决的方法。我不知道这是否是正确的方法,但它确实有效。

感谢@AKSV 为我提供了非常有用的信息......

          for (OWLClass cls : o.getClassesInSignature()){
            Set<OWLSubClassOfAxiom> set = o.getSubClassAxiomsForSubClass(cls);
            for(OWLSubClassOfAxiom subcl : set){
                OWLClassExpression nomeattribEXPR = subcl.getSuperClass();
                if(nomeattribEXPR.getClassExpressionType().toString().equals("DataSomeValuesFrom")){
                   //do something
                    }
                }
            }
        }

最佳答案

使用访问者以获得最佳效果(无需检查字符串的类型):

      // this is OWLAPI 5; for OWLAPI 4, use OWLObjectVisitorAdapter
      OWLObjectVisitor v=new OWLObjectVisitor(){
          public void visit(OWLSubClassOfAxiom ax) {
              ax.getSuperClass().accept(this);
          }
          public void visit(OWLDataSomeValuesFrom c){
              //do something
          }
      };
      for (OWLClass cls : o.getClassesInSignature()){
        o.getSubClassAxiomsForSubClass(cls).forEach(ax->ax.accept(v));
      }

关于java - OWLAPI 查找特定类的所有 DataSomeValuesFrom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53267937/

相关文章:

java - 正确使用双重检查惯用法

owl - 为什么没有使用 rdfs :subPropertyOf? 进行属性类型传播

java - 一个 classe owl api 的父类(super class)

java - 我无法更新本体模型

rdf - 在本体中,如何将属性的值定义为日期时间

java - OWLAPI : Use of 'Imports' enum

java - 使用 Eclipse 自动添加 OpenGL 导入

java - Swing:多面板显示哪些对象并突出显示文本

java - 如何 stub 我测试类的私有(private)方法调用

SPARQL 查询具有特定前缀的所有对象?