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属性也可以对其特性进行详细的声明。还可以对属性取值的基数约束。
浙公网安备 33010602011771号