假设我有以下实例数据和属性公理:
玛丽有孩子约翰
本有孩子汤姆
玛丽有丈夫本hasHusbandChild:hasHusband • hasChild
如何创建属性hasChilds使得:
hasChilds: hasChild ⊔ hasHusbandChild
是真的?
假设我有以下实例数据和属性公理:
玛丽有孩子约翰
本有孩子汤姆
玛丽有丈夫本hasHusbandChild:hasHusband • hasChild
如何创建属性hasChilds使得:
hasChilds: hasChild ⊔ hasHusbandChild
是真的?
OWL 不支持联合属性,您可以在其中说诸如
- p ≡ q ⊔ r
但您可以获得以下效果:
- q ⊔ r ⊑ p
通过做两个公理:
- q⊑p
- 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 中定义属性链,例如:
- q • r ≡ p
但是您在子属性公理的左侧使用属性链:
- 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 规则。