【发布时间】: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