如何在OWLAPI中区分断言和推断的公理?

时间:2018-05-03 11:44:49

标签: java owl owl-api

我的目标是通过OWLAPI分别捕获断言和推断的公理,换句话说,区别在于本体论中已经存在的公理与那些不存在但仅由推理者推断出来的公理。

例如:

public void printHierarchy(OWLReasoner r, OWLClass clazz, int level, Set<OWLClass> visited) throws OWLException {
  //Only print satisfiable classes to skip Nothing

  if (!visited.contains(clazz) && reasoner.isSatisfiable(clazz)) {
    visited.add(clazz);
    for (int i = 0; i < level * 4; i++) {
      System.out.print(" ");
    }

    System.out.println(labelFor(clazz, r.getRootOntology()));

     // Find the children and recurse
    NodeSet<OWLClass> classes = r.getSubClasses(clazz, true);
    for (OWLClass child : classes.getFlattened()) {
      printHierarchy(r, child, level + 1);
    }
  }
}

函数getSubClasses返回OWL类的所有子类,如果在本体中提及或不提及,则不进行区分。 我也可以进行手动检查,但可能相当昂贵。 所以,我的问题如下:是否有一个内置函数或一个解决方法来单独捕获推断的公理?

1 个答案:

答案 0 :(得分:1)

没有任何预先存在的,正如评论中所建议的那样,您可以创建推论结果所暗示的公理,并检查它们是否存在于本体中。该过程中最昂贵的部分将是公理创建,但复杂性仍然是线性的 - 推理仍然可能是最大的成本。