如何强制 class 恰好具有给定 属性 之一
How to force a class to have exactly one of a given property
我有一个 class 人和一组数据属性:First_Name、姓氏、性别、DoB、Country_of_Birth。数据属性将其域设置为人员。我想在我的 ontology 中设置的是一条规则,该规则规定每个人 必须 恰好具有这些属性中的每一个。
所以在 Protege 中,我将 Person 设置为 "First_Name exactly 1 xsd:string"、"Surname exactly 1 xsd:string" 等的子class。然后我设置了一个有姓氏的个人,但没有 First_Name、性别等
然后我运行推理。我期望的是它会引发不一致(姓氏被分配给不符合成为人的要求的个人)但不,推理者推断个人是一个人,尽管它是没有所需的属性。
这是正确的行为吗?如何使 ontology 以我希望的方式运行?因为我想要的是 ontology 对不完整的数据具有鲁棒性(例如,你不能添加一个没有名字的人)。
是的,这是正确的行为,因为 Protege 使用 开放世界假设 而不是 封闭世界假设 例如关系数据库.在开放世界假设下,没有任何未明确说明或可以从明确已知信息中推导出来的假设。当你创建一个你没有分配 First_Name
的个体(可能是 Person
类型)时,在开放世界假设下,推理者仅仅假设 First_Name
是未知的,而不是它确实是不存在(就像封闭世界假设的情况一样)。因此,即使推断个体必须是 Person
类型,推理者也没有给出不一致的原因。要获得不一致,您必须声明已知个人既是 Person
又没有 First_Name
。对于个人 john
,这可以通过断言实现:
john Type Person
john Type First_Name max 0 xsd:string
我有一个 class 人和一组数据属性:First_Name、姓氏、性别、DoB、Country_of_Birth。数据属性将其域设置为人员。我想在我的 ontology 中设置的是一条规则,该规则规定每个人 必须 恰好具有这些属性中的每一个。
所以在 Protege 中,我将 Person 设置为 "First_Name exactly 1 xsd:string"、"Surname exactly 1 xsd:string" 等的子class。然后我设置了一个有姓氏的个人,但没有 First_Name、性别等
然后我运行推理。我期望的是它会引发不一致(姓氏被分配给不符合成为人的要求的个人)但不,推理者推断个人是一个人,尽管它是没有所需的属性。
这是正确的行为吗?如何使 ontology 以我希望的方式运行?因为我想要的是 ontology 对不完整的数据具有鲁棒性(例如,你不能添加一个没有名字的人)。
是的,这是正确的行为,因为 Protege 使用 开放世界假设 而不是 封闭世界假设 例如关系数据库.在开放世界假设下,没有任何未明确说明或可以从明确已知信息中推导出来的假设。当你创建一个你没有分配 First_Name
的个体(可能是 Person
类型)时,在开放世界假设下,推理者仅仅假设 First_Name
是未知的,而不是它确实是不存在(就像封闭世界假设的情况一样)。因此,即使推断个体必须是 Person
类型,推理者也没有给出不一致的原因。要获得不一致,您必须声明已知个人既是 Person
又没有 First_Name
。对于个人 john
,这可以通过断言实现:
john Type Person
john Type First_Name max 0 xsd:string