本体建模设计模式——If-Then结构
这个模式是从继承的角度来描述的,并非我们所熟悉的因果关系。它不能描述例如“如果今天下雨,我们不去春游”这样的语义,但它能描述例如“如果这个社团的兴趣是足球,则它就是球类社团”。前者不能用OWL来描述语义是因为下雨和春游没有内在的关联,后者能用OWL来描述语义是因为足球和球类社团存在着关系。从一些案例中,总结出If-Then结构能将某些类用前因后果联系起来,但是必须的一个条件是它们之间存在着一定的关联。我们来看UML结构图:
从图中我们可以总结出这个模式中含有2个公理,1个表达方式,第一个公理是EqualentClasses,意思是将一个命名类与一个匿名类等价,模拟其If条件,这之中用到了表达方式someValuesFrom,意思为只要这个命名类有了这个条件后,即会如何。第二个公理是SubClassOf,描述了Then之后的条件,也运用到了someValuesFrom。在这个模式中有一个命名类if_then_class,这个类属于中间过渡类,在这个设计模式之后的类或许根本都不知道这样的类存在,但却在被它的If-Then结构引导着。
我们设计出了这样一个应用场景:在一个学校中,只要是球类社团,就有体育经济补助,反过来说,只要一个社团它是球类社团,它不自觉地就成为了体育经济补助类社团。
我们首先把if_then_class构造出来,先命名If_BallOrg_Then_SportSubsidyOrg,之后让它去继承一个匿名类,这个匿名类就是Then之后的结果,最后利用EquivalentClasses公理和另外一个匿名类等价,表示了If 的条件:
- <SubClassOf>
- <OWLClass URI="&organizations;If_BallOrg_Then_SportSubsidyOrg"/>
- <OWLClass URI="&organizations;Organization"/>
- </SubClassOf>
- <SubClassOf>
- <OWLClass URI="&organizations;If_BallOrg_Then_SportSubsidyOrg"/>
- <ObjectSomeValuesFrom>
- <ObjectProperty URI="&organizations;HasSubsidy"/>
- <OWLClass URI="&organizations;SportSubsidy"/>
- </ObjectSomeValuesFrom>
- </SubClassOf>
- <EquivalentClasses>
- <OWLClass URI="&organizations;If_BallOrg_Then_SportSubsidyOrg"/>
- <ObjectSomeValuesFrom>
- <ObjectProperty URI="&organizations;hasInterest"/>
- <OWLClass URI="&organizations;BallSport"/>
- </ObjectSomeValuesFrom>
- </EquivalentClasses>
完成了这个if_then_class的定义后,我们来加入应用元素进行测试。第一个类是一个足球社团FootballOrg,让它满足if_then_class中的If条件,值得注意的是FootballOrg对if_then_class一无所知,它根本不知道有这样一个条件性的类存在,就好比每个网站并不知道自己的排名,自己也无法排名,但专业的排名机构会对其排名。第二个类是体育经济补助类社团SportSubsidyOrg,这个类同样也不知道if_then_class,更不会知道FootballOrg。
- <SubClassOf>
- <OWLClass URI="&organizations;FootballOrg"/>
- <OWLClass URI="&organizations;Organization"/>
- </SubClassOf>
- <SubClassOf>
- <OWLClass URI="&organizations;FootballOrg"/>
- <ObjectSomeValuesFrom>
- <ObjectProperty URI="&organizations;hasInterest"/>
- <OWLClass URI="&organizations;Football"/>
- </ObjectSomeValuesFrom>
- </SubClassOf>
- <SubClassOf>
- <OWLClass URI="&organizations;SportSubsidyOrg"/>
- <OWLClass URI="&organizations;Organization"/>
- </SubClassOf>
- <EquivalentClasses>
- <OWLClass URI="&organizations;SportSubsidyOrg"/>
- <ObjectSomeValuesFrom>
- <ObjectProperty URI="&organizations;HasSubsidy"/>
- <OWLClass URI="&organizations;SportSubsidy"/>
- </ObjectSomeValuesFrom>
- </EquivalentClasses>
FootballOrg继承了一个匿名类,说明这个社团有一些兴趣爱好是在足球上的。SportSubsidyOrg等价一个类,说明了凡是有体育津贴的,一律是属于SportSubsidyOrg类的。当推理完成后,这3个类发生了关系。首先,If_BallOrg_Then_SportSubsidyOrg由于已经继承了一个匿名类,这个匿名类是有体育津贴的,因此If_BallOrg_Then_SportSubsidyOrg被Classify到了SportSubsidyOrg下属。其次,FootballOrg继承了一个匿名类,这个匿名类是有兴趣爱好足球的,因此FootballOrg被Classify到了If_BallOrg_Then_SportSubsidyOrg下属。由于If_BallOrg_Then_SportSubsidyOrg这座桥的原因,现在FootballOrg被归属到了SportSubsidyOrg类里面,即:FootballOrg在毫不知情的情况下,成为了SportSubsidyOrg的子类。我们在总结中,发现了这3个类的关联都是由于EquivalentClasses这个公理起到了连接作用,将本来并不认识的2个类,通过类的属性将它们关联了起来,从来形成了一张语义大网。if_then_class在这个模式中也起到了这种作用。