owl:inverseOf
通常用于定义属性之间的反向关系。形式P1 owl:inverseOf P2
的公理断言,对于P1的属性扩展中的每对(x,y),在P2的属性扩展中存在一对(y,x),反之亦然,例如{{ 1}}和hasChild
。
如何在具有多个域和范围的对象属性之间定义此类反向关系,例如:
hasParent
如果我知道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 Spike
,我如何对本体进行建模,以便推理器推断出Mammy hasCat Tom
和Spike hasOwner Mammy
?
答案 0 :(得分:4)
忘记任何拥有所有者的东西都是猫或狗的难以理解的限制,你可以使用(用Turtle语法)更接近合理的模型:
hasDog rdfs:subPropertyOf [ owl:inverseOf hasOwner ] .
hasCat rdfs:subPropertyOf [ owl:inverseOf hasOwner ] .
这样做的好处是不会创建新的类名或新的属性名。
PS:我做知道拥有主人的东西,既不是猫也不是狗。
答案 1 :(得分:1)
我认为你的逻辑存在缺陷。
hasOwner owl:inverseOf hasDog
hasOwner owl:inverseOf hasCat
如果hasCat
和hasDog
相同,则这两个陈述只能为真。考虑一下,如果P1
是P2
的倒数和P3
的倒数,则传递性P2
必须与P3
相同。
您应该使用谓词hasPet
作为hasOwner
的倒数,创建一个类Pet
并创建它的Dog
和Cat
子类。< / p>
然后,您可以制定规则,推断P1 hasPet P2
和P2 isA Cat
之后的P1 hasCat P2
。{/ p>