Protege 5 / OWL中类/个人的故障推断属性

时间:2018-08-04 07:46:50

标签: rdf owl semantic-web protege rdfs

我希望能够推断出哪些成分在给定的条件下可以很好地结合在一起……它们的特性以及哪些特性可以互补。

我有一个本体,

owl:Thing
    Ingredient
        Kale
        Pear
    Taste
        Bitter
        Sweet

owl:topObjectProperty
    hasTaste
    tasteComplements
    goesWellWith

Individuals: (*would rather work with just classes)
    kale a Kale
    pear a Pear
    bitter a Bitter
    sweet a Sweet

我已经断言

Kale subClassOf hasTaste some Bitter
Pear subClassOf hasTaste some Sweet
Bitter subClassOf tasteComplements some Sweet

tasteComplements a owl:SymmetricProperty
goesWellWith a owl:SymmetricProperty

还有一个公理:

(hasTaste some Bitter) SubClassOf: goesWellWith some (hasTaste some Sweet)

首先,我希望Protege能够推断出Sweet tasteComplements some Bitter。尽管我理解为什么存在性限制中的对称属性不能那样工作。所以我会解决

sweet tasteComplements bitter
bitter tasteComplements sweet

但是令人惊讶的是,这些都没有被推断出来。我必须先手动指定其中一个,然后再推断另一个。

更重要的是我想推断:

Kale goesWellWith some Pear
Pear goesWellWith some Kale

在失败的同时,我至少希望:

kale goesWellWith pear

但这也不可以推断。根据我的一般公理,应该是从kale a Kale开始,至少必须有一个三元组:

kale hasTaste [b]    <!-- where [b] is of type Bitter -->

因此,我们也应该再增加三倍:

kale goesWellWith [y]

其中

[y] hasTaste [s]   <!-- and [s] is of type Sweet --> 
[y] is pear        <!-- the only available option in this case -->
kale goesWellWith pear

如何使这些推断在预期的人与人之间发生?类之间的东西会更好。*

更笼统地说,我想断言:

if XXX tasteComplements YYY then:
    (hasTaste some XXX) SubClassOf: goesWellWith some (hasTaste some YYY)

是否有像this answer那样通过偷偷摸摸的方法来实现这一目标? (我宁愿避免使用SWRL规则...)

* 注意

尽管我不知道如何在逻辑上做到这一点,但我宁愿推断类之间的三元组而不是个人。个人感觉像是我的成分和特性分类法中每个概念的洗衣单/清单,没有层次结构-多余且无法保持组织。理想情况下,该分类法将为某个人提供一个界面,以描述彼此互补的成分的特征。

0 个答案:

没有答案