作者:张莹莹,中国文学研

时间:2015-04-16 04:48:10

标签: owl ontology protege

假设我们有这些类,男人和女人,父亲和母亲分别作为子类。男人与女人脱节。

有一个名为 hasDaughter 的对象属性,其中父亲和母亲为域,子女为范围。

现在当我尝试运行推理器时,我得到了一个不一致的错误:

Man DisjointWith Woman
John hasDaughter Annie
Father SubClassOf Man
hasDaughter Domain Mother
Mother SubClassOf Woman
hasDaughter Domain Father

现在我知道这是因为父亲和母亲都有一个女儿,推理者认为,因为X有一个女儿X可以是父亲或母亲,或两者兼而有之,因为他们是不相交的,所以一定是错的。

我该怎么做才能解决这个问题?我的想法是同时拥有父级和母级课程,而不仅仅是一个家长课程,我知道这会让事情变得更容易。

2 个答案:

答案 0 :(得分:2)

您需要将您的课程分开,以便manwomanfathermother分开。所以你需要在你的本体中有两个分支:

Person
    Man
    Woman
Role
    Mother
    Father
    Daughter
    ....

您可以ManWoman分开。然后您可以说A Man hasRole FatherA Woman hasRole Mother以及其他建模决策。

或者你可以采取其他方式,你可以保留你的建模,只需定义hasFatherhasMother而不是hasDaughter,然后对这些新属性进行域名和范围限制。< / p>

答案 1 :(得分:2)

  

现在我知道这是因为父亲和母亲都可以有一个女儿,推理者认为,因为X有一个女儿X可以是一个   父亲或母亲,或两者兼而有之,因为他们是脱节的东西   一定是错的。

当您在属性上声明多个域时,解释不是分离(例如,“父亲或母亲”),而是连接(即“既是父亲又是母亲”)。如果你说

p domain A
p domain B

然后断言

x p y

推理者会推断x既是A又是B.如果你想要析取,那么你需要将union类作为域。即,你需要这样做:

hasDaugher domain (Father or Mother)

然后当你有一个断言

John hasDaughter Annie

理由推断

John is a (Father or Mother)

这与你的其他断言一致。