【问题标题】:getting all types for instance using owl api 3.4.10 and jfact 1.2.1例如使用 owl api 3.4.10 和 jfact 1.2.1 获取所有类型
【发布时间】:2016-10-17 09:06:02
【问题描述】:

我使用 Protege 制作了一个本体。它由两个基类组成。它们中的每一个都有三个子类。子类是具有特定对象和数据属性的类。当我创建一个实例时,我将它作为类个体,但具有这样的数据属性,因此该实例也属于某个子类。当我在 Protege 中运行 Hermit 时,它做得很好。它说我的实例属于类和子类。但是在 Java 和 Owlapi 的 Jfact 中,当我尝试打印子类中的所有实例时,我的实例只属于超类,而不属于子类。是关于 JFact 还是其他什么?

for (OWLClass c : ont.getClassesInSignature()) {
            if (c.getIRI().getFragment().equals("Baby")) {
                NodeSet<OWLClass> subClasses = reasoner.getSubClasses(c, false);

                for (OWLClass subClass : subClasses.getFlattened()) {
                    System.out.println(subClass.getIRI().getFragment());


                    NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(subClass, false);

                    for (OWLNamedIndividual i : instances.getFlattened()) {
                        System.out.println(i.getIRI().getFragment());

                        s += i.getIRI().getFragment() + " ";
                    }
                }
                }
            }

【问题讨论】:

  • 请分享您遇到问题的代码。
  • 我分享了代码。它可以工作,但输出不像我预期的那样(就像 Protege 中的 Hermit 一样)。这个 Baby 类有三个子类。我创建了 Baby 实例,但它应该被推理器识别为子类之一的实例,但是这段代码说子类没有它们的实例。

标签: owl ontology owl-api reasoning


【解决方案1】:

看起来像 JFact 中的一个错误。你能在它的跟踪器上添加一个问题,包括版本和本体吗?

编辑:JFact 1.2.1 是古老的并且有已知的错误。至少更新到 1.2.4(和 OWLAPI 3.5.5,3.x 版本的最新版本)。

如果可能,我建议更新到 OWLAPI 4(用于 Java 7)或 5(用于 Java 8)和相同的 JFact 主版本。

【讨论】:

  • 我在 sourceforge 上给你发消息。
  • 我试过了,但是在Android项目中导入OWLAPI有问题。 JFact 1.2.4 和相同的旧 OWL 并没有解决我为给定实例推断子类的问题。另外,我制作了新的Android项目,尝试使用Pellet,但导入也没有成功。
  • 您能描述一下失败的原因吗?如果您愿意,请在 GitHub 上提出问题,以便我们解决导入问题。
猜你喜欢
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多