1

我是 Protégé 的新手,所以我有一个非常基本的问题。我有课程ChildParent. Child有子类Girl

child1有类型Girlchild2类型Childannapeter有 类型Parent. 此外,还有关系,没有进一步的anna isParentOf child1特征peter isParentOf child2

现在我想定义类ParentOfGirl,使其等价于Parent and isParentOf only Girl. 我希望推理器推断出anna具有这种新类型,但事实并非如此。

我添加了该Inverse functional属性,isParentOf因为父母可以有多个孩子。如果我再添Symmetric加到我得到的anna具有 type的关系ParentOfGirl,但我不想必须isParentOf是对称的。

如果我在没有对称的情况下查看上述语义,我会看到:

ParentOfGirl ≡ {anna, peter} ⋂ { x ∊ owl:Thing | 如果 ∀y (x, y) ∊ isParentOf 那么 y ∊ 女孩}

child1 ∊ 孩子和 child1 ∊ 女孩

isParentOf ≡ {(anna, child1), (peter, child2)}

thenchild1是唯一与 typeChild相关的个体,anna它也有 type Girl。在我看来,在这种情况下,推理器只能从右到左查看关系,因为如果isParentOf是对称的,它会推导出anna。此外,如果它与 child2 无关,我希望它peter也会存在。ParentOfGirl但这也不会发生。

为什么推理器(Pellet 或 HermiT)看不到那anna是 a ParentOfGirl

4

1 回答 1

1

@AKSW 在评论中是正确的。推理者无法判断父母是否只有女孩。您需要断言此功能,例如通过向个人添加类型。

不过,在这种情况下,此断言将等同于您寻求的推论 - 所以这不是一个很好的解决方法。

如果您将 forall 更改为一些,您将能够找到至少一个女孩的父母。这是您的目标类的超类,可能会帮助您的应用程序。

于 2016-10-08T12:22:19.277 回答