具有不同域或范围的多个 owl:inverseOf

Multiple owl:inverseOf with different domains or ranges

owl:inverseOf 通常用于定义属性之间的反向关系。 P1 owl:inverseOf P2 形式的公理断言对于 P1 的 属性 扩展中的每一对 (x,y),在 P2 的 属性 扩展中存在一对 (y,x) ,反之亦然,例如 hasChildhasParent.

如何定义具有多个域和范围的对象属性之间的这种反向关系,例如:

hasOwner owl:inverseOf hasDog
hasOwner owl:inverseOf hasCat

Classes: Person, Dog, Cat
ObjectProperties: hasOwner, hasDog, hasCat
    hasOwner:
        Domains: Dog or Cat
        Ranges: Person
    hasDog:
        Domains: Person
        Ranges: Dog
    hasCat:
        Domains: Person
        Ranges: Cat

如果我知道 Mammy hasDog SpikeMammy hasCat Tom,我该如何建模 ontology 以便推理者可以推断出 Spike hasOwner MammyTom hasOwner Mammy

我觉得你的逻辑有问题。

hasOwner owl:inverseOf hasDog
hasOwner owl:inverseOf hasCat

这两个陈述只有在 hasCathasDog 相同时才成立。想一想,如果P1P2的倒数和P3的倒数,那么根据传递性,P2一定和P3一样。

您应该有一个谓词 hasPet 作为 hasOwner 的逆运算,创建一个 class Pet 并使 DogCat 子 class 个。

然后您可以制定规则来推断 P1 hasPet P2P2 isA Cat 遵循 P1 hasCat P2

忘记任何拥有所有者的东西要么是猫要么是狗这一难以理解的限制,您可以使用(在 Turtle 语法中)更接近合理的模型:

hasDog rdfs:subPropertyOf [ owl:inverseOf hasOwner ] .
hasCat rdfs:subPropertyOf [ owl:inverseOf hasOwner ] .

这具有不创建新的 class 名称或新的 属性 名称的缺点。

PS:我知道知道有主人的东西,既不是猫也不是狗。