【发布时间】:2017-12-11 19:24:12
【问题描述】:
你好,
我正在使用 Java OWL API(版本 5)并想检查一个类是否是另一个类的子类。现在我通过获取预期子类的所有超类并检查该列表是否包含预期的超类来做到这一点。这种方法有效,但如果类和我的本体变得更大,我需要这样做很多,它并不是很有效。
在 OWL API 的早期版本中,OWLClassReasoner 中似乎有一个 isSubclassOf(.., ..) 方法。但在当前版本中,两者都不再存在。
我是否忽略了某些东西,如果没有,是否有更有效的方法来完成这项任务?
【问题讨论】:
-
我不知道 'isSubClassOf()' 但有 'getSubClasses()' 和 'getSuperClasses()' 应该可以完成这项工作。注意,现在你的方法还不完整,因为它使用了 owl2 表达性的子部分;如果这是您想要的,那么在您的特定情况下,可能会有比 DL 推理器更快的东西。你真正需要什么?
-
正确且常用的方法是使用
OWLReasoner::isEntailed()方法和相应的公理作为参数,即在您的情况下是 SubClassOf 公理。 -
@AKSW 谢谢,这就是我的意思。这是
OWLSubClassOfAxiom subClassOfAxiom = dataFactory.getOWLSubClassOfAxiom(subClass, superClass); reasoner.isEntailed(subClassOfAxiom);的正确方法还是我可以创建公理? -
不,这是正确的方法。