1. 引言
知识表示是一种机器可解释的真实世界知识的一种描述,或者说是对知识的一组约定,一种计算机可以接受的用于描述知识的数据结构。基于知识表示可以对感兴趣的领域进行推理,因此知识表示是实现人工智能应用的前提和基础。传统的知识表示方法如谓词逻辑表示法、产生式规则表示法、语义网络表示法、框架表示法都只能针对具体的知识类型,无法兼顾知识表示能力和推理能力。因此在知识的共享、重用、维护、扩展方面存在一定的局限性。本体作为一种形式化的,对于共享概念体系的明确而又详细的说明,能更好地以一种结构化的、可计算和可共享的形式表示各种术语、概念所隐含的知识,同时随着语义Web技术的发展,基于本体的知识表示方法已经得到广泛的应用 [1] 。
OWL (Web Ontology Language, OWL) [2] 是由国际万维网组织W3C推荐和使用的基于本体的语义Web建模语言,集成语义Web规则语言SWRL (Semantics Web rule language, SWRL) [3] 构成目前强大的知识表示工具,使得知识表示具有更强大表示能力和推理能力。OWL本体知识表示的基础是建立在语义Web框架上的,包括XML、XML模式、资源描述框架RDF (Resource Description Framework, RDF) [4] 、RDF模式和一阶描述逻辑等。OWL知识库通常包括本体概念定义库(TBox)、概念标注的知识实例库(ABox)和知识规则库,主要以XML/RDF格式存储。OWL语言是作为通用的本体知识描述语言标准且能够广泛的集成到推理操作中。在语义表达方面比XML、RDF、RDFS具备更强的可供机器理解内容的能力。很多建模工具支持OWL语言,如Protégé、Jena的OWLAPI、Fact++等。随着知识库和本体数量的增长及广泛应用,高效率地表示和处理本体信息非常重要,同时要求OWL本体知识表示与具体工程中智能信息处理融合。
2. 相关研究现状
目前OWL知识建模方式主要以开源库Protégé [5] 作为建模工具,OWL API和Apache Jena完成查询和推理,但采用Java语言编写,由不同的模块组成,知识推理和语义查询的效率较低,从其它语言接近Java API比较困难,最近,采用C语言实现的Redland RDF框架 [6] 提供了对RDF三元组的解析、存储和查询功能,但还缺乏对OWL的支持;文献 [7] 采用C++开发一个用于存储和查询RDF三元组、解析RDF/XML文档和公理的OWLcpp库;孔静 [8] 研究OWL在.NET环境下解析。但总体看,还缺乏高效、与目前广泛使用的面向对象技术融合的本体语义查询和知识推理的工具,影响OWL本体知识表示技术的应用。
本文在对OWL本体知识表示架构、知识定义、文档格式和句法研究基础上,采用VisualC++2010编程开发平台,提出和实现了将OWL定义的知识概念、实例和规则映射到C++定义的对象类、对象实例和产生式知识规则,旨在集成本体技术和面向对象知识表示方法的优势,弥补当前主流的本体知识库的表示方法在表示能力、知识共享、知识重用、知识维护等方面的缺点,为后续高效、大规模知识推理打下基础。
3. OWL本体知识库
3.1. OWL本体
OWL是W3C组织推荐的国际通用的标准本体描述语言。它建立在XML/RDF等已有标准基础上,通过添加大量的基于描述逻辑的语义原语来描述和构建各种本体。所以基于OWL建立的本体有丰富的语义表达能力并具有完善的推理机制,能更清晰完整地表达领域内的概念和概念之间的联系。
OWL提供了三种表达能力递增的子语言 [4] :OWL Lite、OWL DL和OWL FULL。OWL Lite表达能力最弱,OWL DL (DL表示描述逻辑)能支持需要最强表达能力的推理,且这个推理系统能够保证计算的一致性和可判定性,它包括了OWL语言的所有成份,但有一定的限制。OWL FULL包括了OWL语言的所有成份,并且取消了OWL DL中的限制。本文研究和讨论是OWL DL。
OWL是建立在RDF和RDF Schema之上,采用基于XML句法。OWL文档通常也称为OWL本体。一个OWL本体由概念类、类的属性和类实例组成的XML文档,因此一个OWL本体可以表示为XML的层次树结构,分解为根元素、不同层次的类元素和属性元素。
一个OWL本体的根元素是一个rdf:RDF元素,根元素规定该本体定义的一组命名空间。
xmlns:OWL =http://www.w3.org/2002/07/OWL#
xmlns:rdf =http://www.w3.org/1999/02/22-rdf-syntax-ns#
xmlns:rdfs=http://www.w3.org/2000/01/rdf-schema#
xmlns:xsd =http://www.w3.org/2001/XMLSchema#
此外一个本体还可能从一组断言开始,这些断言包括评述、版本控制和引入其它本体等,成组地放在OWL:Ontology元素下。下面介绍OWL本体的类元素和属性元素 [4] 。
3.1.1. 类元素
OWL中预先定义了OWL:Thing和OWL:Nothing两个类,OWL:Thing位于类层次结构的最顶端,包含了所有客观存在的事物,OWL:Nothing代表空类,位于类层次结构的最底端。用户自定义的类分别对应于领域种最基本的概念。因此,所有用户自定义的类都隐含地是OWL:Thing的子类。
1) 类的定义
类定义可以通过使用OWL:Class标签来实现,例如定义一个名为associateProfessor的类,同时它属于教职人员academicStaffMember的子类:
2) 类与类之间关系公理
OWL主要定义如下类公理关系:
· 不相交关系:用OWL:disjointWith显式定义一个类与另一个类不相交,或者无交集。
· 相等关系:用OWL: equivalentClass显式定义一个类与另一个类是相等或者等价的。
3.1.2. 特性元素
类特性也称关系,要联系一个类与另一个类或数据,需要定义类的特性。
1) 特性分类
OWL包含如下两种类型的特性:
· 对象特性:对象特性可以通过使用OWL:ObjectProperty标签来定义。对象特性通常表示两个类的实例之间的关系。
· 数据特性:数据特性可以通过OWL:DatatypeProperty标签来定义。表示类的实例与RDF文字或XML Schema数据类型间的关系。
2) 特性的定义
无论是对象特性还是数据特性,在特性定义时,需要用rdfs:domain定义特性关系的域(domain),rdfs:range定义关系的范围。
OWL定义了一组特性关系公理,例如相反关系inverseProperties、等价关系equivalentProperty、函数关系FunctionalProperty、对称关系SymmetricProperty、和传递关系TransitiveProperty等关系。此外,特性可以通过OWL:Restriction来进行限制,属性限制的类型包含allValuesFrom、someValuesFrom、OWL:cardinality、hasValue等类型。
3.1.3. 实例元素
实例也称类的个体,OWL通过类标签或者rdf:type来定义。由于实例是类的个体,因此,每一个实例具备所属类的全部特性。
实例与实例之间通过类特性建立关系,大量相互交织的关系构成RDF形式的知识图。客观世界的知识不都是能抽象出知识规则,但是可以表达为实例及其实例之间的关系。
3.2. OWL本体知识库框架
本体以一种结构化的、可计算和可共享的、明确和显式的形式化方法,通过描述领域内的各种术语、概念及关系来表示领域内的知识,本体知识库可以用概念C、特性P、实例I、关系R和公理A组成的如下5元组表示:KB = {C, P, I, R, A}。
更进一步将上述5元组分为如下三个部分:
TBox:是该领域的概念术语的集合。Tbox收集领域内的知识概念、公理以及概念与概念之间的关系;
ABox:是实例断言的集合。收集由概念标记的一组实例,即操作知识对象的集合;实例与实例之间通过特性关系采用RDF模式联系起来;
规则库:规则库表示推理的知识产生式规则,通常采用SWRL语言定义。
上述三部分构成OWL本体知识库框架,如图1所示。
3.3. OWL领域本体知识库构建
在对领域知识深入分析和大量知识获取基础上,基于上述领域本体知识库框架和OWL语言就可以对领域知识建模。然而完全采用OWL语言去定义十分繁琐,容易出错。一般采用本体建模工具完成本体的形式化描述,目前应用较多的OWL本体建模工具是由斯坦福大学开发的Protégé本体编辑器。
在Protégé本体编辑器中本体结构以属性的层次目标结构显示,用户可以通过点击相应的项目创建或
编辑本体类、子类、属性、实例等,使用户在概念层次上设计领域模型,Protégé支持多重集成,并对新数据进行一致性检查,并且具有很强的可扩展性,可以将Protégé的内部表示转化成多种形式的文本格式,包括:XML,RDF(S),OIL,DAML,DAML,OWL等系列语言。
本文要转换和处理的OWL本体就是采用Protégé本体编辑器构建的本体,以RDF/XML格式的OWL文档文件。
4. OWL本体知识的面向对象表示
4.1. 本体知识库面向对象设计
面向对象(Object-Oriented)方法是将客观世界抽象为具有共同属性的对象类及对象个体,对象与对象之间通过关系联系起来。使用面向对象的表示方法,具有封装性、模块性、继承性、易于维护和扩展性的优点,已经广泛应用与各类信息系统的程序开发中。
基于上述OWL本体知识库的各元素分析,可以抽象设计为如下C++类:
1) 概念类
将OWL本体知识库TBox中的定义的所有概念的基本属性抽象,定义为一个C++概念类:CClassObject,即TBox中的定义的所有领域知识概念映射为CClassObject的一个实例对象。
根据上述2.1节介绍的OWL本体类元素特性,主要定义如下类属性:
· 类名称。表示概念名称,用一个CString变量表示。
· 命名空间。命名空间表示标识符的上下文或者标识符的作用范围,这里是指定义的本体概念空间。一个概念标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的,一般采用可共享的统一资源描述符定义。
· 父类对象指针,通过该指针实现OWL本体类的子类定义,形成概念的层次结构。
2) 对象特性类
将OWL本体知识库中TBox中的定义的属性类别中的对象属性进行抽象,定义一个C++对象属性类:CProperryObject,即TBox中的定义的对象属性描述映射为面型对象类CProperryObject的属性成员。根据上述2.1节介绍的OWL本体属性元素特性,主要定义如下对象属性:
· 定义域(domain):
定义域指对象特性关系中对象的范围,根据上面定义,只能在CClassObject定义的对象或者其子类定义的对象范围内,因此可以通过定义一个CClassObject指针来表示。
· 值域(range):
值域是指定义域中所有对象在该特性法则下对应的所有对象所组成的集合。根据上面定义,值域也只能在CClassObject定义的对象或者其子类定义的对象范围内,可以定义一个CClassObject指针来表示。
3) 数据特性类
和对象属性的映射机制类似,不同的是对象属性表示的实例之间的关系,而数据属性则是描述类实例和RDF文字或XML Schema数据类型间的关系。根据上述2.1节介绍的OWL本体属性元素特性,将OWL本体本体中关于数据属性的描述映射为CDataObject中的数据成员。
4) 实例对象类
将OWL本体知识库ABox中的所有个体实例进行抽象,定义一个C++实例对象类:CInstanceObject,即ABox中的定义的所有具体的实例描述都映射为CInstanceObject对象。因此每个实例对象都需要一个所属类的指针变量,以说明该实例的类标识。
部分面向对象表示的类及类关系如图2所示。
4.2. OWL文档面向对象解析
前面已经介绍,OWL文档采用RDF/XML格式,本文采用TinyXml2 [9] 作为XML解析引擎。TinyXml2是一个基于DOM (Document Object Model,文档对象模型),自由授权处理XML文档格式的C语言解析器,定义了对保存为XML格式的本体文件数据进行读取、操作的方法。
本文从XML文档对象模型层次树的根节点开始,遍历OWL类节点、特性节点、实例节点和规则节点,逐层对本体文件中相关的数据进行解析,解析过程如图3所示。
通过逐层解析,将OWL中的类、特性、实例和规则转换为C++中类对象、特性对象、实例对象和规则对象,所生成的对象分别保存在各自的容器中,实现OWL知识本体到面向对象的映射和转换,为后续的语义推理打下了基础。
5. OWL知识库面向对象表示实例
下面以制造特征自动识别知识库为例来说明OWL本体知识库的面向对象表示流程。
![](//html.hanspub.org/file/2-2690312x10_hanspub.png)
Figure 2. Part class diagram of the object-oriented knowledge base
图2. 部分OWL知识库面向对象类图
![](//html.hanspub.org/file/2-2690312x11_hanspub.png)
Figure 3. The parsing process of OWL files
图3. OWL文档解析流程
5.1. OWL制造特征识别语义知识库
制造特征是机械零件上具有制造意义一组形状,制造特征语义隐含丰富的关于形状和产品制造知识。本文作者之前提出一个加工特征自动识别的语义方法 [10] ,基于OWL本体技术,采用Protégé构建一个OWL制造特征识别语义知识库,主要由如下三大部分组成:
· TBox:定义制造特征类(MFeature class)、加工面类(MFace class)、几何类(Geomface class)、对象特性和数据特性。图4给出部分内容和层次结构。
· ABox:在制造特征识别语义知识库中,实例是对实体边界模型几何面自动识别和语义标注动态生成的个体,在后续识别推理过程中,还不断有加工面实例、特征实例生成,ABox是动态变化的,因此该实例不讨论ABox的对象转换。
· 规则库:使用SWRL语义网络规则语言定义的推理规则,和实例一起送入推理引擎完成推理过程。通常SWRL定义的知识规则保存在单独的规则库文件中,也可以保存在OWL文档中,目前制造特征识别语义知识库定义了上百条识别知识规则。
上述三大部分内容保存在一个Feature.OWL文件中,图5给出部分文档。
5.2. 面向对象转换
本文基于Visual C++ 2010开发平台和TinyXml2,编程实现OWL本体知识库的面向对象的转换。转换程序具备加载读取OWL文档文件、解析构造本体知识的面向对象表示、编辑修改、添加知识库、序
![](//html.hanspub.org/file/2-2690312x12_hanspub.png)
Figure 4. Part manufacture feature recognition ontology in semantic knowledge base class and object features
图4. 部分制造特征识别语义知识库中本体类和对象特性
![](//html.hanspub.org/file/2-2690312x13_hanspub.png)
Figure 5. Owl semantic knowledge base manufacturing identification document motioned
图5. OWL制造特征识别语义知识库文档示意
![](//html.hanspub.org/file/2-2690312x14_hanspub.png)
Figure 6. The part of results for the OWL ontology knowledge base to object-oriented conversion
图6. OWL本体知识库到面向对象转换的部分结果
列化保存为OWL兼容的RDF/XML格式文档。
转换系统将本实例的OWL文档“Feature.OWL”打开读入,进行转换后在界面左侧以树结构形式列出解析的概念类对象、对象特性、数据特性;在中间主窗口以图形化方式显示知识库实例对象和关系的RDF图。图6给出笔者采用Visual C++开发的本体知识库系统界面及部分转换的结果。
6. 结束语
本体技术能更好地以一种结构化的、可计算和可共享的形式表示各种术语、概念所隐含的知识,基于本体的知识表示方法已经得到广泛的应用。在工程信息处理中,高效率地表示和集成本体信息非常重要。本文针对目前缺乏高效的OWL本体知识处理与集成工具的现状,在研究OWL本体知识表示框架、语言句法和文档结构基础上,基于面向对象技术,设计了一个面向对象的OWL本体知识库表示模型;基于XML文档解析平台,对RDF/XML格式的OWL文档实现解析,将OWL本体知识库转换构建为面向对象的本体知识库,和当前针对OWL本体知识库的知识表示相比,采用了统一标准且使用广泛的知识表示方法,提高了解析的效率和可移植性,改善了当前解析技术中对于代码分散、知识层次结构划分不清晰的缺点,使得整个知识表示结构紧凑、逻辑性强,为高效的知识推理和知识检索服务打下了基础。
本文介绍的工作还只是面向对象的本体知识库工作的一部分,下一步还将在SWRL规则转换、本体知识库编辑、面向对象的语义推理和知识服务等方面开展更深入的研究。