0

让我们考虑一个

(1) P Domain CSuper
(2) CSub subClassOf CSuper

使用 Jena,我试图列出CSub. 我认为P不能将其列为CSub. 我的理由:P是 的声明属性CSubiff CSub是 的域P, from (1)CSuper是一个域P,并不意味着它CSub也是一个域;(1) 表示如果(x, y)P,那么xCSuper,显然x可能(不是)CSub

令人惊讶的是,即使使用 OntModelSpec.OWL_DL_MEM_RULE_INF 或 Pellet ,Jena 也在使用方法时P作为声明属性列出!我错过了什么吗?CSublistDeclaredProperties

更新: 某个类的声明属性是什么意思?这是否意味着属性是它们的域的类!

4

1 回答 1

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就是问题所在。

于 2015-03-04T11:43:08.993 回答