刻面分类和本体在类库检索中的应用

出处:余金山,刘云城 发布于:2011-08-29 14:26:08

 

  类库是程序员用来实现各种功能的类的集合。在程序设计里面是一个基本概念。所谓类,可以理解为是一组语句的集合,用来描述一组具有共同属性和功能的对象。也可以简单的理解为FRAMEWORK.类库主要的好处是它们将Win32 API的常用的功能和外挂SDK的功能封装到了一个统一的包中。采用清晰而有条理的方式对类库进行了分组和描述,这样开发者能更容易地找到他们的应用程序所需的大多数功能。相反,在过去几年中,新功能要么被"绑缚"到Win32 API上,要由通过独立的API(例如用于图形的Directx,或者用于XML和SOAP的不同的SDK)来提供。对它们能做的逻辑分组就是按照字母顺序进行排序。结果,使用Win32 API和各种SDK经常使人晕头转向,而开发者必须判断几个类似的API中哪一个适合他们特定的要求。

  本文介绍一个结合刻面分类描述和本体语义的类库管理和检索方法,通过刻面分类描述机制和本体的语义扩展及推理能力,有效地对类进行存储和管理,方便用户快捷准确地从类库中寻找适合自己需要的类,从而更好地达到软件复用的目的。主要内容有:给出一个合适的刻面模型对类进行不同维度的描述;XML在刻面分类描述中的应用;在刻面分类的基础上建立本体库,用来表示类的整个分类体系,以及基于刻面分类和本体的检索方法。

  1 类库的刻面分类与描述

  类的整体说明信息包括类的语义信息和类的关系信息。类的语义信息包括类名、属性、服务、所属类型、所属开发阶段等信息。类的关系信息包括类与其他类的关系信息。

  在类库中,每个元素都是一个类,这些类由属性和作用于属性之上的操作构成。属性可以分为静态属性和动态属性。静态属性属于所有对象的全体,意味着不存在该类的对象,静态属性也是存在的;动态属性随着对象的存在而存在,随对象的改变而改变。操作也可以分为静态操作和动态操作。两者不同之处在于静态操作可以不存在操作的主体,而动态操作必须要有操作的主体,即发起者。

  类与其他类之间具有几种不同的关系.

  (1)继承关系。在继承关系中子类自动继承父类的属性和方法,子类依赖父类而存在,如果单独复用子类,而忽略了其父类,必然会导致信息的不完整,而出现复用错误。所以,作为依赖方的子类入库时,需要同时保存父类的信息以及它们之间的继承关系。

  (2)聚合关系。当整体和部分的关系紧密时,整体不能缺少部分,所以作为依赖方的整体入库时,需要同时保存部分类的信息和它们之间的聚合关系。

  (3)实例连接关系。一般通过对象的属性来表示一个对象与另一个对象之间的依赖关系。一般来说,该关系并不影响对象作为独立存在的类入库。

  (4)消息连接。即所谓的类与类之间的合作关系。消息连接具有很强的依赖性。一方要通过调用另一方的服务来实现本身所提供的服务,如果缺少对方的支持,则本身无法完成相应的服务。因此作为依赖方的调用类入库时,需要同时保存被调用类的复用信息以及它们之间的合作关系。

  通过以上几种关系的分析可知,依赖性在各个关系中普遍存在。如果一个类不能单独存在,必须依赖其他类存在并得以保持其完整性,则需要将被依赖类和依赖类以及它们之间的关系同时入库保存。

  本系统用刻面分类表示类本身的信息,类与其他类之间的关系则通过本体描述。

  根据刻面分类描述的精简、一致性、全面性、刻面正交性、易于理解的原则,选择以下刻面和子刻面:

  类的基本信息:类的ID、名称、版本,类的入库时间等。

  类的功能:操作、操作对象、操作描述等。

  类的应用环境:开发语言、硬件环境、操作平台、数据库平台等。

  类的应用领域:类的具体应用范畴。

  类的刻面分类与术语示例如表1所示。

  用类的刻面信息建立类库的刻面模型,使用XML语言进行描述,同时在类入库的时候,根据用户所提交的信息,自动生成XML文档。例如DBconnect类的刻面信息:

  <?xml?version?="1.0"?encoding?="GB2312"?standalone="yes"??>

  <?XML-stylesheet?type="text/xsl"?href="yxfqust.xsl"??>

  <!-- class faceted information-->

  <?xml version="1.0"?>

  <Class>

  <!-- basic information -->

  <BasicInfo>

  <ID>001</ID>

  <Name>DBConnect</Name>

  <Version>1.0</Version>

  <Provider>sun</Provider>

  <EnrollTime>2000-01-01</EnrollTime>

  </BasicInfo>

  <!-- application platform -->

  <ApplicationPlatform>

  <DL>Java</DL>

  <Database>mysql,sqlserver</Database>

  <system>windows,linux</system>

  </ApplicationPlatform>

  <!-- application domain -->

  <ApplicationDomain>information system</ApplicationDomain>

  <!-- operation information -->

  <OperationInfo>

  <Operation>connect to database </Operation>

  <OperationOn>database</OperationOn>

  <OperationDesc>connect to database in different ways</OperationDesc>

  </OperationInfo>

  </Class>

  从具体问题的需求出发,XML具有如下的突出优点[5]:

  (1)可读性。用XML描述对于任何用户或是计算机程序来说,都容易阅读和处理。

  (2)XML的自描述性使得客户端在收到数据的同时也能理解数据的逻辑结构和含义,从而能直接对这些自描述的XML文件中的数据进行操作,增强了检索的语义和作用。

  (3)表示的独立性和内容的独立性带来的灵活性。内容与表示的分离,支持用户界面个性化。表示和操作的分离,支持不同数据源的无缝连接。

  (4)强大的表达能力。无论是何种数据源,新的、老的,是否异构,XML都可以用统一的模式进行描述和访问。

  (5)可扩展性。XML可以在不破坏现有结构和系统的情况下增加新的数据字段,不影响新老客户端的使用。

  XML的这些特点可以为使用者在需要访问不同的源类库时提供标准的统一接口

  检索采用XML树的索引技术和模型匹配检索算法.

  一个刻面描述可以展开成为一棵刻面描述树,而XML文档的数据结构就是树状结构。对一个刻面描述方案,可以将其中的刻面和子刻面分别映射为树中对应的父节点和子节点,对采用某个刻面描述方案描述的类,可以将其对应的刻面描述术语映射为对应的叶子节点。

  对于类的查询也可以相应地表示为一棵查询树,即将查询中出现的刻面名和子刻面名转化为对应的父节点和子节点,将查询刻面的术语值转化为叶子节点,并且用一个虚拟的根节点将它们组合成为一棵查询树。因此,对于类的检索就转化为查询树与库中类的刻面描述树之间的匹配。

  用户在客户端输入查询条件后,由服务层中的元数据服务组件负责根据用户查询条件生成X-Query查询语句,并进行同义词与近义词处理。然后将生成的X-Query查询语句通过数据访问接口的查询解释器分解查询请求,按照数据映射提供的存储规则与对象合成器交互,使用XML数据的无序树匹配的松弛匹配技术进行检索。

  2 建立本体表示类库中类的依赖性关系

  这里引入本体的主要目的为:(1)利用本体描述类之间的关系;(2)通过本体扩展类库的刻面分类描述体系,利用本体具有的良好的概念层次结构和对逻辑推理的支持,实现基于语义上的匹配检索,从而提高查全率和查准率。

  本体不仅可以描述类与类之间的各种关系及刻面术语之间的同义词和上下文关系,还可以描述刻面术语之间所具有的其他各种关系,从而尽量从语义上来建立类信息的全面描述。

  (1)概念类。概念类表示特定领域中的一组或一类实体,每个概念的不同特点可以由不同的属性描述。如工作描述、功能、行为。语义上讲,它表示的是对象的集合。

  (2)公理是表示某一个特定领域内的一些永真式,用来描述和解释元素及其元素之间的关联和约束问题。

  (3)关系代表概念类之间的关系,形式上定义为n维的笛卡尔乘积的子集。基本关系是类的层次关系,即所谓的继承关系。除此之外,还有连接关系,连接关系表示除了上下位关系之外的其他关系。具体关系如表2所示。

  (4)实例代表元素。从语义上可以理解为对象。

  OWL(Web Ontology Language)是W3C开发的一种网络本体语言,用于对本体进行语义描述。由于OWL是针对各方面的需求在DAML+0IL 的基础上改进而开发的,所以一方面要保持对DAML+0IL/RDFS的兼容性,另一方面又要保证更加强大的语义表达能力,同时还要保证描述逻辑(DL,Description Logic)的可判定推理,因此,W3C的设计人员针对各类特征的需求制定了三种相应的OWL的子语言,即OWL Lite、OWL DL和OWL Full,而且各子语言的表达能力递增。OWL Lite是表达能力弱的子语言。它是OWL DL的一个子集,但是通过降低OWL DL中的公理约束,保证了迅速高效的推理。它支持基数约束,但基数值只能为0或l.因为OWL Lite表达能力较弱,为其开发支持工具要比其他两个子语言容易一些。OWL Lite用于提供给那些仅需要一个分类层次和简单约束的用户

  本体的开发使用由HP实验室研究开发的基于Java的开放源代码Jena.选择Jena的理由是:它为解析RDF、RDFS、OWL和SPARQL提供了一个编程环境和一个基于规则的推理引擎;Jena允许将数据保存到硬盘或OWL文件或关系数据库中;Jena的推理机制支持在创建模型的时候将推理机与模型相关联,能实现基于规则的推理。

  对于类库检索,本体库中关系的重要意义在于支持语义推理和扩展查询,以提高查全率和查准率。要进行基于本体的类库检索,首先应该建立一个本体库,针对类库进行分析和抽取概念:类库、类、类的基本信息、类的刻面信息、类的接口信息、刻面、术语等。同时分析概念与概念之间的关系。

  用OWL语言来描述类库本体可在描述逻辑的基础上建立概念分类层次,然后定义概念类的属性和创建类的实例。

  首先确定本体所包含的概念和概念的层次,如类库中出现的概念包括以下几个实体:Library、Class、Facet、Terms等。

  可以用OWL语言定义如下:

  (1)OWL的概念通过owl:Class定义

  <owl: Class rdf:ID="Library">

  <rdfs: label>类库</rdfs:label>

  </owl: Class>

  (2)概念之间的继承关系可以用<rdfs:subClassOf>表示。如功能刻面是刻面的一个子概念:

  <owl: Class rdf: ID="OperationFacet">

  <rdfs: label>功能刻面</rdfs:label>

  <rdfs: subClassOf rdf resource="#Facet">

  </owl: Class>

  (3)定义概念的属性属性是一个二元的关系。OWL定义了两种属性,即owl:Datatype Property和owl:Object Property.前者是概念的成员和数据类型,后者是不同概念之间的关系。如定义一个DatatyperProperty属性的className:

  <owl: DatatypeProperty rdf: ID="className">

  <rdfs: domain rdf: resource="Class">

  <rdfs: range rdf: resource="&xsd;string">

  </owl: DatatypeProperty>

  下面定义一个ObjectProperty属性的containClass:

  <owl: ObjectProperty rdf: ID="containClass">

  <rdfs: domain rdf resouce="#Library"/>

  <rdfs: range rdf:resource="#Class">

  </owl: ObjectProperty>

  (4)传递性TransitiveProperty

  对称性SymmetricProperty、自反性Inverseof、等价传递性InverseFunctionalProperty.

  (5)定义类与类之间的等价关系

  <owl:InverseFunctionalProperty rdf:ID="equals">

  <owl:inverseOf rdf:resoure="#equals"/>

  <rdfs:domain rdf:resource="#class1">

  <rdfs:range rdf:resoure="#class2"/>

  Owl可以用来定义和表示类与类、类与属性之间丰富的语义关系。在面向对象中类与类之间的关系是确定的,如继承、依赖、聚合等。

  本体库的建立是相当麻烦的,如果能够在软件设计过程中抽取本体,则以后本体的建立会节省不少的时间。目前,将面向对象的思想与本体建模的思想相结合得到了一定的研究,这些研究成果对领域本体的构建有一定的推进作用。例如参考文献[9]给出的一种从UML类图到OWL映射方法。

  3 加入本体后的类库检索

  在进行检索时,首先利用本体知识对检索条件进行预处理,对检索条件进行加强与扩展,然后检索引擎用处理后的条件进行检索,将得到更符合用户需求的返回结果。利用本体含有的语义信息检索出语义上匹配的类。

  基于本体描述的类库,可以分作三层:层为数据服务层,存放刻面描述完毕的类实体,实现对类的存储,包括本体库和XML数据库等;中间层为功能应用层,包括本体的推理检索模块,数据访问等功能,主要采用组件开发技术来完成功能;外层是表示层,负责与用户的交互及为用户显示界面和提供一个可视化的浏览接口。如图1所示。


  实现采用MVC架构的Struts.

  本体的查询模块通过Jena提供的推理机接口,利用同义、上下位和语义关系,或者第三方推理机推理出隐含的语义,从而使得查询得以扩展。利用Owl本体概念的描述逻辑进行相关和相近概念的推理运算。

  (1)用户通过查询界面输入查询条件。

  (2)生成初始查询,如分词、关键词匹配。

  (3)查询扩展。对初始查询进行语义扩展,然后把扩展后的术语集通过查询界面显示给用户。本体扩展包括以下几种类型:同义扩展、层次扩展、属性扩展、公理扩展和规则扩展。返回的术语集包括术语之间的关系以及相应的解释。

  (4)细化:用户根据返回的术语集进一步明确自己的需求。

  (5)执行查询和返回查询结果,同时考虑将检索结果按照查询匹配度进行排序。

  4 实验评测

  环境和工具:Tomcat服务器,Eclipse开发平台,Protégé,sql server2000数据库,Jena推理机,Java类库中的资源。

  类库常规关键词检索方法与本系统检索方法的效率对比,如表3所示。

  类作为面向对象设计中的重要元素,为软件复用的实现提供了良好的条件。为了改进现有的类库检索不方便、效率低等问题,本系统在刻面描述的基础上,结合本体语义检索的思想,较好地解决了传统的类库检索方法无法真正理解用户的检索意图,以及查全率和查准率相对差的缺点,用户可方便快捷地从类库中寻找适合自己需要的类,从而更好地达到软件复用的目的。下一步工作将是实现类库中的类的刻面自动分类和本体信息提取。

 


  

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:
技术客服:

0571-85317607

网站技术支持

13606545031

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!