如何强制某个类只拥有给定属性

时间:2018-01-05 14:19:50

标签: ontology protege

我有一个Person类和一组数据属性:First_Name,Surname,Gender,DoB,Country_of_Birth。数据属性的域名设置为Person。我想在我的本体中设置的是一条规则,规定每个人必须正好拥有这些属性中的每一个。

所以在Protege中,我将Person设置为“First_Name正好1 xsd:string”,“Surname正好1 xsd:string”等的子类。然后我设置了一个姓氏个人,但没有First_Name,性别等。

然后我运行推理器。我所期望的是它会使一个不一致的东西变得合适(姓氏被分配给一个不符合要求的个人)但不是,推理者推断个人是一个人,尽管事实是没有所需的属性。

这是正确的行为吗?如何使本体按照我想要的方式运行?因为我想要的是本体对于不完整的数据是健壮的(例如,你不能添加没有名字的人)。

1 个答案:

答案 0 :(得分:3)

是的,由于Protege使用开放世界假设而不是例如关系数据库的封闭世界假设,这是正确的行为。在开放世界的假设下,没有任何东西可以假设没有明确说明或者可以从明确已知的信息中得出。当你创建一个你没有分配Person的个体(可能是First_Name类型)时,在开放世界的假设下,推理者只是认为First_Name是未知的,而不是它不存在(如封闭世界假设的情况)。因此,即使推断出个体必须是Person类型,推理者也没有给出任何不一致的原因。要获得不一致,您必须声明已知该个人既是Person又没有First_Name。通过声明:

可以为个人john实现这一点
john Type Person
john Type First_Name max 0 xsd:string