如何使用 OWL API 分析复杂的 class 公理

How to analyze a complex class axiom using OWL API

我阅读了 OWL API 文档,大多数示例都是关于创建 class 公理并将它们添加到 ontology 中的。现在,我需要检索 class 的限制,并提取限制中的元素。

例如,在 pizza.owl 中,ChessePizza class 由限制定义:"Pizza and (hasTopping some CheeseTopping)"。我可以使用 "getEquivalentClassesAxioms" 函数来获取整个公理。但是我想知道这个公理的细节,比如这个公理中使用的对象属性(hasTopping)和classes(CheeseTopping)。有没有提取公理元素的方法?

例如,为所有存在限制提取 属性 的最佳方法是编写 OWLObjectVisitor.

在访问者中,您为访问者知道的每个 class 实施一个 visit(OWL... o)。对于定义 A equivalentTo p some Q 的公理,访问者看起来像:

OWLObjectVisitor v = new OWLObjectVisitor() {
    public void visit(OWLEquivalentClassesAxiom ax) {
        // this is an example of recursive visit
        ax.classExpressions().forEach(c->c.accept(v));
    }

    public void visit(OWLObjectSomeValuesFrom ce) {
        OWLObjectPropertyExpression p = ce.getProperty();
        // here you can do what you need with the property.
    }
};
axiom.accept(v);