一种基于本位的Web语义规则软件体系结构的研究摘要:以Web服务为基础的面向服务软件体系结构(SOA)扮演着越来越重要的角色,其开发方法和建模研究正成为软件工程领域一个新的热点问题。目前软件系统面向大规模和复杂业务处理的要求,研究对业务流程和逻辑进行形式化的逻辑描述和逻辑处理,引入Mandarax规则引擎进行业务逻辑的推理处理,实现业务逻辑的集中处理。作为一个可复用的系统构架设计的基于规则的软件体系结构,使用Prova建立规则层,利用规则引擎实现业务逻辑的推理处理,通过规则层应用实验的实现证明基于规则的软件系统结构的可行性和有效性,在一定程度上完善了软件工程设计技术的理论层次。关键词:语义Web;Prova语言;规则层;规则引擎AmethodbasedonstandardWebsemanticrulesofthesoftwarearchitectureresearchGanHongPanDanGuangZhouCityConstructionCollegeGuangZhou510925【Abstract】Thispaperaimsattheneedoflargescaleandcomplexbusinessprocessesofcurrentsoftwaresystem,focusesonformalizingthelogicaldescriptionanddisposalofbusinessflowandlogic.Mandarax,aJavaruleengine,isintroducedforconsequenceofthebusinessrules.AsareusablesystemarchitectureintegratesthemainresearchachievementwhichbuildstherulelayerusingProva,implementsthereasoningprocessofbusinesslogic.Therule-basedsoftwaresystemarchitectureisprovedtobefeasibleandeffective,morecompleteinthetheorylevelofsoftwareengineeringdesigntechniqueatsomeextent.【Keywords】semanticWeb;Provalanguage;layerofrules;ruleengine1概述近年来,在web环境下的软件系统结构的研究,人们逐渐认识到,整个软件系统结构的设计与规格说明己经比在早期软件开发中占有重要地位的算法选择和计算问题的数据结构更为重要,代码级别的复用方式现在己经远不能满足软件开发的需求。业务规则的概念便在这种情况下诞生。业务规则是一组准确凝练的语句,用于描述、约束及控制企业的结构、运作和战略[1]。业务规则系统是完成业务逻辑快速变换的理想方案,它将业务逻辑本身和实现分离开来,以业务规则的形式表述,系统执行业务规则以完成企业的业务流程,使得业务逻辑的变化不会影响到应用系统本身。2问题描述作为下一代Web技术,语义Web的出现和发展己成为推动业务规则相关技术发展新驱动力之一。语义Web的核心思想是赋给当前Web信息以机器可以理解的语义,克服当前Web信息只能供人工阅读和理解的弊端,使施加于Web信息之上的各种智能技术更加易于实现。语义Web的出现使Internet上杂乱浩瀚的“信息海洋”变成了脉络清晰的“知识网络”,为高层次的智能Web应用提供了广阔的运转空间[2]。语义信息模型今后必将成为Internet上的主流信息模型,从而跨越Web信息检索和信息集成在语义异构等难点上的困扰,实现网上许多目前很难实现的一系列智能化应用。基于规则的服务水平协议(RuleBasedServiceLevelAgreements,RBSLA)是慕尼黑工业大学正在研究的课题,是在语义Web规则层上的一个尝试。它将一个商业合同条款用一定格式的规则进行描述,并使用规则引擎实现SLA管理工具的功能。3研究目标在现有软件系统结构分层模式的基础上,结合语义Web规则进行推理的能力,本文围绕规则层主要进行了以下研究工作:研究规则层与表示层、数据层的通信方式,通过设计仿真的应用环境证明规则层的可行性。4规则层与数据层的通信方式Prova源于JensDietrich开发的基于Java的Mandarax推理系统。它是以Mandaraxruleengine为基础的Script语言,结合了描述和命令编程。Prova通过提供适当的语法、集成Java自身的语法以及代理信息和反映规则等方式扩展了Mandarax的应用并增强了语义的描述[3]。在一般应用软件的架构设计中,数据层通常表现为关系数据库,对大的数据集(例如用户数据和产品信息等)的操作通常都需要数据库系统的支持才能快速有效地完成。虽然Prova本身也提供了类似的数据结构来存储数据,但是其执行效率相对于企业应用级的软件是比较慢的[4]。而且本文设计规则层的初衷也只是在于以规则集合来代替原本写入到源代码中的应用逻辑,而不是想要代替整个逻辑层和数据层。因此,需要达到的目的就是实现规则层与数据层的通信,使得规则引擎可以获取数据库中的信息。因为这些数据会经常改变,所以只通过一次读取是不够的,需要将数据动态引入到KnowledgeBase中。(1)使用Prova连接数据库:在Prova语法中,提供了内嵌的连接数据库的谓词location。location是一个事实,只有Head部分。(2)使用Prova打开数据库:为了打开数据库,还要定义一个Exception。这样在数据库打开过程中出现问题时,可以捕获异常以便确认出错的环节。这样就可以使用dbopen这个谓词来打开数据库,并且查询记录后产生一个以谓词customer描述的事实,然后放入到KnowledgeBase中。5规则层与表示层的通信方式在规则层中,谓词是最基本的元素,也是进行推理的源头。在规则层与表示层通信交互的过程中,由表示层传入一个谓词,也就是提出一个查询然后交由规则引擎进行推理,最后将结果传回表示层,返回给用户[5]。规则层与表示层进行通信需要做到3点:(1)规则层提供接受谓词并进行查询的机制;(2)规则层以事实或谓词参数的方式返回推理结果;(3)表示层能够获取并分析规则层的推理结论。6基于规则的软件体系结构综上所述,本文已经讨论了规则的生成、规则的标准化,从而建立了整个规则层;又通过规则引擎的推理机制,使用Prova的相关语法设计了规则层与表示层和数据层的通信方式[6]。至此,这个基于规则的软件体系结构己经基本成形,其具体架构见图1。图1基于规则的软件体系结构7规则层应用实验的实现7.1需求分析本应用设计了以下场景:服务商为客户提供网络硬盘的服务,并对客户区分不同级别,系统根据用户级别给予不同用户相应的折扣方案;客户使用Web服务查询自己当前级别以及目前网络硬盘的已用空间;管理员使用管理端监视网络硬盘服务的运行情况,动态对运行情况作出模糊的统计,在服务出现故障时去通知相应的人员。应用实验的目的如下:(1)设计规则层,使用相应的机制解决冲突;(2)描述规则层与数据层的关系,使用2种方法存取数据;(3)使用Web服务作为表现层与规则层通信;(4)使用普通应用程序与规则层通信。7.2设计与实现7.2.1规则层建立根据需求,实验共分为2套应用逻辑,分别对应客户的查询和管理员对所提供网络硬盘服务能否正常使用的监视。(1)对应客户的逻辑,本文设计了2个典型的冲突,即以下3条规则:1)前一年预交15000元费用的用户,被认为是可以享受12%优惠的金卡用户。2)前一年预交10000元费用的用户,被认为是可以享受8%优惠的银卡用户。3)在某特殊时期,所有银卡用户享受统一的9%优惠,也就是在管理员根据这段促销时期的这种需求添加相应规则后。可以看出,在这3条规则中,前2条的冲突在于,一个预交15000元以上的用户既被认为是gold,又被认为是silver,存在优先级的冲突,需要用GCLP解决;第3条只在某时期有效,它属于DefeasibleLugics。基于此,下面结合使用2种方式处理如下:1)定义绝对的非和可废止的非;2)定义优先级;3)使用GCLP的方式来处理。规则冲突是不可避免出现的一种情况,现在对于常见的规则冲突,DL和GCLP等方法已经是很成熟的解决方案了。所以,在具体应用中,开发人员可以设计为应用程序专门制定的图形界面,输入产生冲突的规则,因为规则都具有标准的格式,所以应用程序可以方便地得到规则的Head和Body部分,并套用到对应的解决方法模板中,完成解决冲突的工作。(2)对应管理员的逻辑,实验也设计了以下3个方面:1)使用EA形式的ECA规则来检查服务的运行状况。2)通过逻辑规则的推理来判断某时刻出现故障时应通知谁;分别设计了不同职务等级的几个人员,如果要通知的人员因生病缺席或正在休假,则通知后面的人,直到成功通知到某人为止。3)为表现层提供绘制线形图的相应规则。7.2.2数据库的使用在实验中,本文分别尝试了2种数据的存放方法:(1)使用事实存放数据。(2)使用MySQL来记录每次网络硬盘服务的故障时间。以上2种方式都可以实现数据的存取。综合来说,使用规则层模式设计的应用系统,依然需要大型数据库作为数据层;规则层的事实可以用来存放常用的静态信息。在实际应用中,可以结合上述2种方式来实现基于规则软件体系结构中的数据层。7.3表示层的执行效果本应用实验首先编写了wrapper来向Mandarax提交一套规则。它的主要作用是分析Prova文件中的事实、规则和查询,将其中的事实和规则加入到KnowledgeBase中并激活,根据最后提交的查询使用规则引擎推导结果。其次,在实验中借用了MVC模式中Viewer的思想,使用了DefavltText-Viewer、AdvancedTextViewer、GraphicBarChartViewer和Gra-phicTimeSeriesViewer来直接接收谓词,并显示推理结果[7]。实验中使用MySQL作为数据层,使用Tomcat+Axis实现Web服务的发布和部署,通过对系统中Tomcat服务器的启动和关闭来模拟网络硬盘服务是否有效。执行结果如图2和图3所示。图2DL对优先级的处理结果图3GCLP对优先级的处理结果8实验结果分析本文实验主要围绕规则层的两大问题:规则层的建立和规则层的通信机制,将一组应用逻辑抽象为规则层,然后基于该规则层设计和实现了2个Web服务以及其管理模块。可以看到,整个系统的应用逻辑全部在规则层中实现,所以如果用户需求发生了变化,需要修改的只是规则层中的规则,而不再需要修改源代码。也就是说,通过修改规则层的相关规则就可以实现对系统功能的维护和修改,与其他2层的具体实现无关。实验基本体现了基于规则的软件体系结构的通用性以及其易于修改和维护的特点,达到了实验的预期效果。因此,在确保规则层的建立和规则层的通信机制这2点成立并且能够实现的前提下,就可以将软件的应用逻辑层抽象成为规则层。这样做的优点在于:(1)降低了软件的维护成本。在用户需求发生变动时,不需要修改源代码,而改为修改对应的规则,所有的变动只发生在规则层,与其他2层无关。(2)为软件的使用者根据需求自行修改软件提供了可能。规则是通用的,与开发语言无关。所以,开发人员可以设计一套针对性强的GUI给用户,让用户可以根据自己的需求对规则进行增删改的变动。(3)由于规则层相对独立于其他2层,而且规则层的基本元素是谓词,一阶逻辑中对谓词的运算依然可行,因此统一了标准的规则层更容易实现异构系统的集成。9结束语本文着重讨论基于规则的应用逻辑层的建立和规则层的通信方式。在应用实验中,基于规则的应用逻辑层采用了类似Prolog的规则形式,用Oryx作为规则的输入方式,使用规则引擎Mandarax来完成对规则的推导工作,并且利用Mandarax的扩展Prova支持Java的谓词和函数调用这一