代码之家  ›  专栏  ›  技术社区  ›  Wassadamo

Protege 5/OWL中类/个体属性的推理问题

  •  1
  • Wassadamo  · 技术社区  · 6 年前

    我想能够推断出哪些成分结合得很好,考虑到它们的性质,哪些性质是互补的。

    我有一个本体论,

    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 回复  |  直到 6 年前