当前位置: 首页 > 知识库问答 >
问题:

OWLAPI查找特定类的所有DataSomeValues

红存
2023-03-14

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

# Class: :Book (:Book)

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

如何仅从属性中获取datasomevalues?我使用owlapi 5.1.0和Hermit作为推理机。

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

感谢@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
                    }
                }
            }
        }

共有1个答案

董飞
2023-03-14

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

      // 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));
      }
 类似资料:
  • 问题内容: 我正在开发一个应用程序(Quartz调度程序),其中有一个作业类负责实际执行工作,我们需要在Quartz调度程序中创建触发器时告知/传递作业类的名称。 我想为所有想使用该API的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业之外)。这个想法是创建一个(标记)接口,如果有人想将其类声明为调度程序作业类,那么他们要做的就是(声明)实现该接口。 我不确定如何找到合约之后的类(

  • 下面是适当的方法签名的样子: (问题领域是扑克;列举奥马哈扑克牌中所有可能的板卡组合。是的,还有其他方法可以解决这个问题,但我正在测试这个方法,因为处理比特比大多数其他选择要快得多。)

  • 这类似于子集和问题,只是稍有不同,不是检查集合是否有一个和为9的子集,而是我们必须找到这样的子集的个数。我在这里遵循子集和问题的解法。但是我想知道如何修改它来返回子集的计数。

  • 问题内容: 尽管我们已部署了最新的类,但我们正在使用的是旧版本的类。要扫描应用程序服务器所有子文件夹中的所有JAR文件,我们如何编写一个小的Shell脚本来打印出找到该特定类的JARS文件的文件名? 问题答案: 就像是: 您可以这样包装: 然后将在当前目录下找到的所有jar文件中搜索该类