我是Protégé的新手,所以我有一个非常基本的问题。
我有课程Child
和Parent
。 Child
具有子类Girl
。
child1
的类型为Girl
,child2
的类型为Child
,anna
和peter
的类型均为Parent
}。此外,关系anna isParentOf child1
和peter isParentOf child2
没有其他特征。
现在我想定义类ParentOfGirl
,使其等同于Parent and isParentOf only Girl
。我希望推理者推断anna
有这种新类型,但事实并非如此。
我将Inverse functional
属性添加到isParentOf
,因为父级可以有多个子级。如果我然后将Symmetric
添加到我得到的anna
类型为ParentOfGirl
的关系中,但我不希望isParentOf
具有对称性。
如果我看一下上面没有对称性的语义,我会看到:
ParentOfGirl≡{anna,peter}⋂{xε猫头鹰:事情|如果∀y(x,y)ε是父亲,则yεTeat}
child1ε儿童和儿童1ε女孩
isParentOf≡{(anna,child1),(peter,child2)}
然后child1
是与Child
相关的anna
类型的唯一个人,并且还有类型Girl
。在我看来,推理者只能在这种情况下从右到左查看关系,因为如果isParentOf
是对称的,它会推导出anna
。此外,如果peter
与child2没有关系,我希望ParentOfGirl
也在anna
。但这也不会发生。
为什么推理者(Pellet或HermiT)看不到ParentOfGirl
是{{1}}?
答案 0 :(得分:1)
@AKSW在评论中是正确的。推理者无法判断父母是否只有女孩。您需要断言此功能,例如向个人添加类型。
在这种情况下,这个断言相当于你所寻求的推理 - 所以它不是一个非常好的解决方法。
如果你将forall改为某些人,你将能够找到至少一个女孩的父母。这是目标类的超类,可能有助于您的应用程序。