java - OWLApi 访客模式 : get superClass axiom

标签 java owl ontology owl-api

假设我们有这个本体:

Class A:
     equivalentTo: hasRel D

Class B:
     equivalentTo: A and hasRel C

Class C
Class D

ObjectProperty: hasRel

使用访问者模式获取 hasRel C 公理(作为 OWLObjectSomeValuesFrom):

 OWLEquivalentClassesAxiom equivalentAxiom = owlOnt.equivalentClassesAxioms(B);

OWLObjectVisitor v = new OWLObjectVisitor() {

            public void visit(OWLEquivalentClassesAxiom ax) {
                ax.classExpressions().forEach(c -> c.accept(this));
            }

            public void visit(OWLObjectSomeValuesFrom ce) {
                String property = ce.getProperty().toString();
                String filler = ce.getFiller().toString();

                System.out.println(property);
                System.out.println(filler);

            }
        };

equivalentAxiom.accept(v);

但是这段代码没有正确的visit方法来遍历类A
我需要有这样的东西作为输出:

hasRel D 
hasRel C

最佳答案

查看您的代码,访问者看起来是正确的并且应该输出您需要的内容。但是,您仅将其应用于包含 B 的公理。将其应用于所有等效的类公理,并查看它是否产生预期的结果。

编辑:如果本体不可用,访问者就无法访问本体中的其他公理 - 这是因为 A 没有链接到使用它的公理;该关系保存在本体索引中。

因此访问者需要访问本体并查找包含根公理中涉及的命名类的等效公理。

OWLEquivalentClassesAxiom equalAxiom = owlOnt.equivalentClassesAxioms(B);

OWLObjectVisitor v = new OWLObjectVisitor() {

        public void visit(OWLEquivalentClassesAxiom ax) {
            ax.classExpressions().forEach(c -> c.accept(this));
            ax.getNamedClasses().forEach(c -> owlOnt.equivalentClassesAxioms(c).forEach(q->q.accept(this)));
        }

        public void visit(OWLObjectSomeValuesFrom ce) {
            String property = ce.getProperty().toString();
            String filler = ce.getFiller().toString();

            System.out.println(property);
            System.out.println(filler);

        }
    };

equivalentAxiom.accept(v);

关于java - OWLApi 访客模式 : get superClass axiom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59971857/

相关文章:

java - 使用扫描仪功能计算年龄不起作用

java - 使用 PowerMock 和 Mockito 的 protected 构造函数测试类

java - Java正则表达式中\w和\b的Unicode等价物?

java - 使用 Java Swing 设置表中一行中突出显示的文本颜色

rdf - SPARQL 查询返回满足限制的匹配项

OWL api 查找类的属性

sparql - 我们可以从两个类的限制中推断出它们之间的关系吗?

prolog - 在 Prolog 中使用逻辑仿函数

python - 对多个 RDF 文件进行 SPARQL 查询

java - Jena getNsPrefixUri 返回 null(如何为 OWL 本体定义基本 URI?)