1

假设我有以下实例数据和属性公理:

玛丽有孩子约翰
本有孩子汤姆
玛丽有丈夫本

hasHusbandChild:hasHusband • hasChild

如何创建属性hasChilds使得:

hasChilds: hasChild ⊔ hasHusbandChild

是真的?

4

1 回答 1

3

OWL 不支持联合属性,您可以在其中说诸如

  1. p ≡ q ⊔ r

但您可以获得以下效果:

  1. q ⊔ r ⊑ p

通过做两个公理:

  1. q⊑p
  2.  r⊑p

现在,2 与 1 不同,因为对于 1,您知道如果 p(x,y),那么 q(x,y) 或 r(x,y),而对于 2,p(x,y ) 可以为真,而 q(x,y) 或 r(x,y) 都不为真。

同样,您不能在 OWL 中定义属性链,例如:

  1. q • r ≡ p

但是您在子属性公理的左侧使用属性链:

  1. q • r ⊑ p

当然,两者之间的区别在于,如果使用 6,您可以有 p(x,y),而 x 和 y 没有通过 aq • r 链连接。

不太清楚你在问什么,但我认为你想问的是是否有办法说 x 的配偶的孩子也是 x 的孩子。您可以在 OWL2 中使用属性链来做到这一点,特别是

hasSpuse • hasChild ⊑ hasChild

这等价于一阶公理:

∀ x,y,z : (hasSpouse(x,y) ∧ hasChild(y,z)) → hasChild(x,z)

Stack Overflow 上的许多其他问题都与此处相关,并将提供有关如何将这种公理添加到您的 OWL 本体的更多指导:

作为替代方案,您还可以将一阶公理编码为 SWRL 规则。

于 2014-10-01T14:07:27.793 回答