RDF模型的核心是用主体-谓词-客体的三元组来描述资源间的二元关系。通过RDF(S)能表示一些简单的本体,描述某些本体知识,包括子类和子属性关系、属性的定义域和值域约束以及类的实例等,但还缺少局部值域定义、类/属性/个体的等价性、不相交类、类的布尔结合、基数约束、关于属性特性的描述等。

  为此,W3C提出了OWL扩展RDF(S),既能支持合理有效的推理,又能对本体知识充分描述。
  
  6.3 OWL语法(里面提到的抽象语法仅用于OWL DL和OWL Lite,不适用于OWL Full) 
  1、OWL语法概述
  OWL本体是一个RDF文档,包含在一个rdf:RDF元素中。一个OWL本体可能以一系列的关于本体的声明作为开始,包含注释、版本控制以及导入其他本体等内容,称为本体头部。
  owl:Ontology元素是用来声明关于当前文档的OWL元数据的,可以记录版本信息和导入文档所依赖的一些定义。rdf:about属性为本体提供名称和引用,一般取值为空表示本体的名称是owl:Ontology元素的基准URI,即本体所在的文档URI或上下文中xml:base指定的URI。rdfs:coment和rdfs:label为本体提供自然语言注释和标签。owl:priorVersion为本体版本控制提供相关信息。owl:imports用于导入其他一些文体,将内容引入为当前文档的一部分。
  在本体头部后面跟随的是构成本体的实际定义,包括类公理、属性公理和个体事实等内容。
 
  2、简单类、个体和属性
  一个OWL本体中的大部分元素是类、属性、类的实例以及这些实例间的有关系有关。
  a、类
  OWL类的定义由两部分组成:引入或引用一个名称,以及一个限制列表。如下定义:
<owl:Class rdf:ID="Person"/>
<owl:Class rdf:ID="Male"/>
<owl:Class rdf:ID="Man">
 <rdfs:subClassOf rdf:resource="#Person"/>
</owl:Class>
<owl:Class rdf:about="#Man"/>
 <rdfs:subClassOf rdf:resource="#Male"/>
</owl:Class>
  定义了Person、Man、Male三个类,并且声明了Man是Person和Male的子类。
  用抽象语法表示为(Class表示定义一个类,且前者是后者的子类。OWL所有个体都是类owl:thing的成员,定义空类用的是owl:Nothing):
Class(ex:Person partial owl:Thing)
Class(ex:Male partial owl:Thing)
Class(ex:Man partial owl:Thing)
subClassOf(ex:Man ex:Person)
subClassOf(ex:Man ex:Male)
  后两句也可表示为:Class(ex:Man partial ex:Person ex:Male) 
  b、个体 
  除了描述类,本体还要描述类的成员,也就是个体。在OWL DL和Lite中,个体和类是分离的集合,即一个资源不能同时是个体和类,但在Full中可以。
  可用rdf:type为个体声明多个其所属的类:
<owl:Thing rdf:ID="TOM"/>
 <rdf:type rdf:resource="#Person"/>
 <rdf:type rdf:resource="#Male"/>
</owl:Thing>
  抽象语法:Individual)ex:Tom type(ex:Person) type(ex:male))
  c、属性
  一个属性是一个二元关系,在OWL中有两个类型的属性:对象属性和数据类型属性,分别表示类的实例之间的关系和类的实例与文字之间的关系。对象属性用owl:ObjectProperty定义,用rdfs:domain和rdfs:range表示定义域与值域。以下定义了一个create属性,它的定义域是Person类,即只有Person类的实例才有这个属性。
<owl:ObjectProperty rdf:ID="create">
  <rdfs:domain rdf:resource="#Person"/>
<owl:ObjectProperty>
  可以将一个属性定义为某个已有属性的子属性,如定义一个create的子属性createBook,限定该属性值只能是Book类的实例。
<owl:ObjectProperty rdf:ID="createBook">
  <rdfs:subPropertyOf rdf:resource="#create"/>
 <rdfs:range rdf:resource="#Book"/>
<owl:ObjectProperty>
  属性的使用,下例可以推断出DiaryOfTom一定是一本书,即Book类的实例,因为createBook属性的值域是Book。
<owl:Thing rdf:ID="DiaryOfTom"/>
<ex:Man rdf:ID="Tom"/>
  <ex:createBook rdf:resource="#DiaryOfTom">
</ex:Man>
 
  数据类型属性和对象类型的区别在于其值域只能是数据类型。OWL使用的大部分XMLSchema定义的数据类型。
 
  3、复杂类
  OWL提供了一些类构造子用于创建复杂类,如基本的集合操作,即并owl:unionOf、交owl:intersectionOf、补owl:complementOf。还有owl:oneOf构造子枚举类的所有实例来定义一个类,还有声明多个类不相交的owl:disjionWith。
   a、集合运算,用交运算作例
<owl:Class rdf:ID="Man">
  <owl:intersectionOf rdf:parseType="Collection">
     <owl:Class rdf:about="#Person">
     <owl:Class rdf:about="#Male">   
  </owl:intersectionOf>
</owl:Class>
  b、枚举类
<owl:Class rdf:ID="RGBColor">
  <owl:oneOf rdf:parseType="Collection">
     <owl:Thing rdf:about="#Red"/>
     <owl:Thing rdf:about="#Green"/>
     <owl:Thing rdf:about="#Blue"/>
  </owl:oneOf>
</owl:Class>
    c、匿名类
  OWL通过owl:Restriction定义匿名类,所谓匿名类是通过对其应用的属性约束定义的,对应于描述逻辑中通过存在约束、全称约束和关系的基数约束等构造子的概念。
  d、复杂类
  实现多层嵌套的复杂类定义。
 
  4、属性的特性和约束
  正如描述逻辑中的关系可以有可传递、函数和逆关系等特性,OWL属性也可以对其特性进行详细的声明。还可以对属性取值的基数约束。
posted on 2012-12-07 15:20  王国龙  阅读(720)  评论(0)    收藏  举报