在OWL中,有没有办法说明某个特定类的个体必须通过特定的对象属性与另一个人相关?
例如,我想说明:
forall(x) Object(x) -> exists(y) Shape(y) ^ hasShape(x, y)
即,"对于所有对象,存在一个形状为对象的形状。"
因此,如果有一个Object类型的个人没有与之关联的形状,推理者会发现它不一致。
我尝试了一个公理:
Object SubClassOf hasShape min 1 Shape
但它不起作用。
似乎问题是因为OWL中的Object Property没有标识,但是这个问题是否有解决方法?
(我使用Protege 5.2.0)
答案 0 :(得分:2)
您是正确的Object SubClassOf hasShape min 1 Shape
的含义是Object
的每个人都通过Shape
属性与hasShape
的个人相关联。
因此,如果您创建的x
类型Object
没有x
与Shape
的个人相关联,那么为什么推理器不会确定您的本体不一致?造成这种情况的原因是开放世界假设。非正式地,它意味着推理者可以从本体论中做出的唯一推论是基于本体论中陈述的明确信息或者可以从明确陈述的信息中得出的内容。
当您声明x
是Object
时,本体中有无明确信息,表明x
不通过Shape
属性与hasShape
个人相关联。要明确表示x
不是这样的关系,您必须按如下方式定义x
:
Individual: x
Types:
Object,
hasShape max 0 owl:Thing
是的,这个问题与你所说的身份无关。
答案 1 :(得分:0)
我找到的一个解决方案是通过制作猫头鹰来制作本体"封闭的世界",相当于目前为止定义的所有个体的集合。