为什么 rdfs:subPropertyOf 没有 属性 类型传播?

Why No Property Type Propagation with rdfs:subPropertyOf?

假设我有

:hasParent rdfs:subPropertyOf :hasAncestor . :hasAncestor rdf:type owl:TransitiveProperty .

在给定出身的情况下,这具有推断所有真正祖先关系的令人满意的结果。但我很惊讶它也没有使 :hasParent 有效传递的负面影响。 p rdfs:subPropertyOf q不就是p "inherits" q的元属性,包括a owl:TransitiveProperty吗?

看似不对称,我们从 A rdfs:subClassOf BB :hasFriend C 中看到 A :hasFriend C 也是从 A rdf:type B 开始的。为什么子属性也不会发生这种情况?

Doesn't P rdfs:subPropertyOf Q mean P "inherits" Q's meta-properties,
including a owl:TransitiveProperty?

一般不会。

  • P rdfs:subPropertyOf Q means∀x∀y(P(x,y) → Q(x,y)) (1)

  • Q a owl:TransitiveProperty means∀x∀y∀z(Q(x,y) ∧ Q(y,z) → Q(x,z)) (2)

不幸的是,(1) 和 (2) 不包含 ∀x∀y∀z(P(x,y) ∧ P(y,z) → P(x,z))

你可以找到一个反模型online:

顺便说一句,函数 属性 的子 属性 也是函数。

Stanislav 已经很好地回答了这个问题。我想在这里解决的是评论中提到的想法,即 "inheritance of classes" 与 "inheritance of properties".

不对称

面向对象

(1)在面向对象编程语言中,当classA继承自classB时,表示[=所有实例的集合84=] A 是 class B 所有实例集合的子集。此外,由于属性属于特定的 class,这意味着 class A 将具有 class B 的所有属性(即 class A 继承了 class B) 的所有属性。

(2) 当 class A 具有类型 C 的属性 c 时,它表明(或多或少)存在关联 c 在 classes AC 之间。

OWL/RDFS

(1) 与 OWL/RDFS 的一个很大区别是属性 属于 class。当我们说 A rdfs:subClassOf B 时,我们说集合 AB 的子集。它什么也没说。例如,如果我们有

B a rdfs:Class .
B rdfs:label "Label for class B" .
A a rdfs:Class .
A rdfs:subClassOf B .

class A 不是 "inherit" class B 的标签。

(2) OWL/RDFS 中的属性在实例之间指定, 而不是 在 class 之间指定。我在我的博客上详细写了关于 this 的内容。当您声明 P rdfs:subProperty R 时,这意味着 P 中的个体对集合是 R.

中个体对集合的子集

但是功能属性是继承的...

不,他们不是。由于功能属性的语义,它看起来确实如此。如果我们有一个可用的 属性 R,这意味着 R 的令人满意的赋值可以是 {(a,1), (b,2)}。也就是说,同一个主题不能链接到 2 个不同的对象。 IE。你不能有 {(a,1), (a,2)}

现在,如果您有 P rdfs:subPropertyOf RPR 的子集,因此 P 也将起作用。 IE。 if R = {(a,1), (b,2)} R 的任何子集也将起作用。