让我们考虑一个
(1) P Domain CSuper
(2) CSub subClassOf CSuper
使用耶拿,我正在尝试列出CSub
的声明属性。我认为P
不能被列为CSub
的声明财产。我的理由:P
是CSub
的声明属性,iff CSub
是P
的域,来自(1(CSuper
是P
的域,这并不意味着CSub
也是一个域;(1(意味着如果(x, y)
是P
,那么x
是CSuper
的,显然x
可以(不(CSub
。
令人惊讶的是,耶拿将P
列为CSub
的声明属性,即使使用OntModelSpec.OWL_DL_MEM_RULE_INF或Pellet listDeclaredProperties
方法也是如此!我错过了什么吗?
更新:某个类的声明属性是什么意思?这是否意味着该属性是它们的域的类!
你需要:
theClass.listDeclaredProperties(false);
从文档中:
listDeclaredProperties()
等效于调用默认值 direct = false 的 listDeclaredProperties(boolean(。
direct
- 如果为 true,则将返回的属性限制为与此类直接关联的属性。如果为 false,则此类的超类的属性将不会列在此类的声明属性中。
我想你误解了声明的属性。这将返回类可能(或必须(具有的属性。假设我们有一个类层次结构:
A > B > C
以及:
P domain B
所有的Bs
和Cs
都可能有属性P
——那里没有矛盾。然而,并非所有As
都有财产P
- not-Bs
是问题所在。