使用 OWL API 获取 TBox 公理

Get TBox Axioms with OWL API

我正在使用 OWL API 3 / Pellet / SPARQL-DL 堆栈,并希望从 [=27] 中读取某个 class 的断言 TBox 公理=].

我可以使用 OWL API 轻松访问公理。然而,OWLClassAxiom 只是提供了在没有连接的情况下访问签名的功能。 IE。我想知道 ObjectProperty 分配给了哪个 Class。我所能检索到的是签名中所有元素的集合,没有它们之间的联系。

似乎 OWL API 并不真正支持在 class 级别上很好地使用给定的公理(阅读,而不是添加。)还是我遗漏了什么?还有其他想法如何实现吗? (使用任何工具。)

具体示例:比萨有一些 PizzaTopping。我想通过指定 Pizza 和 hasBase 来检索值 "PizzaTopping"。

如果 Pizza 是 class,那么

披萨有一些披萨浇头

不是一个合法的公理。你可能实际拥有的是

披萨子类 hasBase some PizzaTopping

这意味着 Pizza 的每个 instance 都与 hasBase 属性 的 PizzaTopping 的某些 instance 相关。该公理是一个子 class 公理,因此您需要检索 OWLSubClassOfAxiom, (which is a subclass of OWLClassAxiom).

的实例

在这种情况下,如果您有对 (hasBase some PizzaTopping)OWLClass for Pizza, then you could use OWLClass#getSuperclasses() to get a list of superclass expressions. One of them would be an OWLObjectSomeValuesFrom 表达式的引用。你必须寻找那种类型的,然后检查它是限制的 属性。

也就是说,您的既定目标

to know to which Class a ObjectProperty is assigned to

与 OWL 模型不太匹配。对象属性(和数据属性)不 "belong" 到 class 在 OWL 中。您可以像上面那样使用 subclass 公理和 属性 限制来表示 class 的成员必须具有特定 属性、

的值