1

我在Protege中创建了一个简单的 OWL 本体来描述人际关系:

  • :人,男人,女人
    • 人是男人和女人的超类
    • 男人和女人是脱节的
  • 对象属性:hasChild
    • 它的域和范围是 Person
  • 个人: a (Man), b (Man) , c (Man) --- x (Woman), y (Woman), z (Woman)
  • 断言
    • 一个 hasChild x
    • 一个 hasChild y
    • c有子a

现在我想查询所有孩子是独生女的人。我在 DL 查询选项卡中编写了这个查询:

Person and hasChild only Woman

但它不返回任何实例!或者对于只有两个孩子的人的简单查询

Person and hasChild exactly 2

这两个查询都没有返回任何实例,谁能告诉我有什么问题?

谢谢

4

1 回答 1

4

DL 有一个开放世界假设 (OWA)。这意味着在本体中捕获的知识是不完整的。另一种选择是封闭世界假设(CWA),它用于数据库等。在 CWA 中,所有未声明的内容都不存在。

根据 OWA,我们从上面的本体中所知道的只是 a 和 c 有一些孩子。我们不知道 a 是否有多个孩子,因为 x 和 y 可能相同(为了避免这种情况,应该使用 DifferentIndividuals() 公理)。我们不知道这些是否是唯一的孩子:在开放世界中,任何人都可以拥有其他任何性别的孩子,这些孩子在本体中被忽略了。这就是为什么这些查询的答案是一个空集。

获得预期答案的最简单方法是关闭知识。如果本体将包含一个公理

a instanceOf (hasChild only {x,y})

那么 a 将成为第一个查询的答案。如果,另外,一个公理

DifferentIndividuals(x,y)

将被添加,然后第二个查询将返回一个。Protege 允许人们轻松地制作第二类公理。

于 2014-10-29T14:21:51.367 回答