存档

文章标签 ‘Closure’

本体建模设计模式——Closure

2008年9月20日

问题提出

OWL有些时候与我们的本能思维模式有些背离,因为我们不是生活在一个逻辑的世界里,不可能任何事物都能准确定义的。比如这样一个例子:肉食动物,草食动物,不偏食动物。

按照我们的思维模式,草食动物是要吃一些草的

  1. <owl:Class rdf:about="#carnivore">
  2.         <owl:equivalentClass>
  3.             <owl:Restriction>
  4.                 <owl:onProperty rdf:resource="#eats"/>
  5.                 <owl:someValuesFrom rdf:resource="#meat"/>
  6.             </owl:Restriction>
  7.         </owl:equivalentClass>
  8.         <rdfs:subClassOf rdf:resource="#animal"/>
  9.     </owl:Class>

按照我们的思维模式,肉食性动物是要吃一些肉的

  1. <owl:Class rdf:about="#herbivore">
  2.         <owl:equivalentClass>
  3.             <owl:Restriction>
  4.                 <owl:onProperty rdf:resource="#eats"/>
  5.                 <owl:someValuesFrom rdf:resource="#veg"/>
  6.             </owl:Restriction>
  7.         </owl:equivalentClass>
  8.         <rdfs:subClassOf rdf:resource="#animal"/>
  9.     </owl:Class>

按照我们的思维模式,不偏食性动物既是吃肉也是吃草的

  1. <owl:Class rdf:about="#omnivore">
  2.         <owl:equivalentClass>
  3.             <owl:Class>
  4.                 <owl:intersectionOf rdf:parseType="Collection">
  5.                     <owl:Restriction>
  6.                         <owl:onProperty rdf:resource="#eats"/>
  7.                         <owl:someValuesFrom rdf:resource="#meat"/>
  8.                     </owl:Restriction>
  9.                     <owl:Restriction>
  10.                         <owl:onProperty rdf:resource="#eats"/>
  11.                         <owl:someValuesFrom rdf:resource="#veg"/>
  12.                     </owl:Restriction>
  13.                 </owl:intersectionOf>
  14.             </owl:Class>
  15.         </owl:equivalentClass>
  16.         <rdfs:subClassOf rdf:resource="#animal"/>
  17.     </owl:Class>

如果我们这样定义之后,经过推理机的整理,如下图所示:

我们发现,omnivore成为了herbivore和carnivore的子类,而实际上,这3各类应该各自不相干,没有谁是谁的子类那种关系,它们是平行的。就这是因为在OWL的推理世界中,有一种原则叫Open World Reasoning,在这种原则下,肉食性动物也会吃草,因为eats这个object property仅仅定义了someValueFrom meat,推理机认为只要有一些meat就可以了,但没有排他性,即也可以吃其他类型的食物。在这里例子里面,当然omnivore会成为carnivore的子类。

目标

精确表达OWL一些类直接的从属关系,达到无二义性。这就是封闭性设计模式。

实现

在原有基础上,分别给carnivore和herbivore加上

注意

这里容易搞混的是allValuesFrom的准确含义,它所限制的是object property的范围,而没有限制object property本身。这里的allValuesFrom指要么没有,要么就是指定的类的实例,而someValuesFrom是指必须有一个或者一个以上指定的类的实例,但同时有其他类的实例也被允许。因此,这里少了这2个限制都不行。

本体建模设计模式ODPS , , ,