如何区分 OWLAPI 中的断言公理和推断公理?
How to distinguish asserted from inferred axioms in OWLAPI?
我的目标是通过 OWLAPI 分别捕获断言和推断的公理,换句话说,区别在于 ontology 中已经存在的公理和那些不存在但只是推断的公理由推理者。
例如:
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 returns OWL class 的所有子classes,不区分是否在 ontology 中提及.
我也可以执行手动检查,但它可能非常昂贵。
所以,我的问题如下:是否有内置函数或变通方法来捕获与推断公理分开断言的断言?
没有预先存在的,正如评论中所建议的,您可以创建推理结果所暗示的公理,并检查它们是否存在于 ontology 中。该过程中最昂贵的部分将是公理创建,但这在复杂性上仍然是线性的 - 推理仍然可能是最大的成本。
我的目标是通过 OWLAPI 分别捕获断言和推断的公理,换句话说,区别在于 ontology 中已经存在的公理和那些不存在但只是推断的公理由推理者。
例如:
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 returns OWL class 的所有子classes,不区分是否在 ontology 中提及. 我也可以执行手动检查,但它可能非常昂贵。 所以,我的问题如下:是否有内置函数或变通方法来捕获与推断公理分开断言的断言?
没有预先存在的,正如评论中所建议的,您可以创建推理结果所暗示的公理,并检查它们是否存在于 ontology 中。该过程中最昂贵的部分将是公理创建,但这在复杂性上仍然是线性的 - 推理仍然可能是最大的成本。