让我们考虑一下
(1) P Domain CSuper
(2) CSub subClassOf CSuper
使用Jena,我试图列出CSub
的声明属性。我认为P
不能被列为CSub
的声明属性。我的理由:P
是CSub
的声明属性, iff CSub
是P
的域,来自(1){{1} } CSuper
的域名并不意味着P
也是域名; (1)表示如果CSub
为(x, y)
,则P
为x
,显然CSuper
可能(不是)为{ {1}}。
令人惊讶的是,当使用x
方法时,即使使用OntModelSpec.OWL_DL_MEM_RULE_INF或Pellet,Jena也会将CSub
列为P
的声明属性! 我错过了什么吗?
更新 某些类的声明属性是什么意思?它是否意味着属性属于它们的类!
答案 0 :(得分:2)
你想:
theClass.listDeclaredProperties(false);
listDeclaredProperties()
相当于使用默认值direct = false调用listDeclaredProperties(boolean)。
direct
- 如果为true,则将返回的属性限制为与此类直接关联的属性。如果为false,则此类的超类的属性将不会在此类的声明属性中列出。
我认为您误解了声明的属性。这将返回类可能(或必须)具有的属性。假设我们有一个类层次结构:
A > B > C
还有:
P domain B
所有Bs
和Cs
都可能拥有P
属性 - 在那里没有矛盾。但是,并非所有As
都有P
属性 - not-Bs
是问题所在。