首页 优秀范文 信件结束语

信件结束语赏析八篇

时间:2023-01-06 13:31:12

信件结束语

信件结束语第1篇

关键词:OWL-S;UML;活动图;Web服务组合

中图分类号:TP319 文献标识码:A DoI: 10.3969/j.issn.1003-6970.2012.04.031

OWL-S Graphical modeling and Implementation based on UML activity diagram

【Abstract】with extensible Markup Language (XML) on the web services description of synthesis, there are some problems with description of the high complexity and difficult to the users to understand. The paper uses a method which based on Model Driven architecture(MDa), UML activity diagrams are used for graphical modeling of owL-S process model to realize the description of web Service composition, It is proved feasible by an example.

【Key words】owL-S; UML; activity diagram; web services composition

目前流行的Web服务描述语言是OWL-S (Web服务本体标记语言),它采用可扩展标记语言[1] (XML)对Web服务进行描述。虽然XML采用简单的标注格式,并提供一个有效描述方式和交换数据的手段,但是它存在不易于用户理解和编写的缺点,尤其是不适合对复杂的Web服务组合过程进行描述。此外,OWL-S本身虽然支持语义但却无法处理含有复杂控制结构的组合过程。因此,利用图形化的方法对Web服务组合过程的开发方法逐渐受到人们的重视,如何利用图形化的语言对OWL-S进行建模已经成为研究的一个热点。

OMG(Object Management Group)提出了基于模型驱动框架(MDA)的方法[2,3],并定义了一种统一建模语言(UML),它满足Web服务组合的要求,包括接口的描述、基本控制流模式和消息转换等,而且UML独立于执行语言,可以转换为不同的执行语言[4]。在此基础上,Gronmo等人[5]给出了UML与OWL-S的转换规则,利用活动图对语义Web服务组合进行建模;Timm 和Gannod提出一种改进模型驱动方法[6],使用UML类图和活动图对语义Web组合服务进行描述,并使用对象约束语言对控制结构中的约束条件进行规范。但是上述的方法均不支持语义,既没有对复杂的多种控制结构进行规范描述,也没有实现对Web服务组合过程的有效验证。

针对上述情况,本文提出一种采用UML活动图对OWL-S过程模型进行图形化建模的有效方法,利用UML活动图建立Web服务组合的动态行为模型。

是一个复合状态,它可以被分解为多个子活动状态,需要在一段时间内完成,用于表达状态机的非原子的运行。伪状态不做任何动作,主要用于对流程的控制,包括初始状态(init)、分岔(fork)、合并(merge)、分支(branch)和终止状态(final)。

OWL-S是DARPA组织的研究组OWL Services Coalition 提出的基于本体语言OWL的语义Web服务本体描述语言[10,11],主要用于描述Web Service 的性质和功能。它使得Web服务成为计算机可以理解的实体,从而计算机可以智能化的完成对服务的发现、调用、组合和验证等操作。OWL-S包括三个组件,即描述Web服务基本信息的三类顶层本体:

(1)ServiceProfile:它主要描述Web服务做什么,它给出服务提供者的相关信息、服务功能的信息、服务属性的信息等,服务搜寻通过ServiceProfile实现服务之间的匹配。

(2)ServiceModel:它主要描述Web服务如何做,它定义了服务具体实现的内部流程,主要包括服务的控制流和数据流,以及执行的具体步骤和逻辑执行顺序等,用于实现服务的自动化组合和执行。

(3)ServiceGrounding:它主要描述Web服务如何被使用者调用该服务,它给出了访问的具体信息,即服务的地址、协议、消息格式、端口号等,它是一种从服务抽象描述到具体服务的映射过程。

本文主要是利用UML活动图实现对ProcessModel控制结构的图形化建模。OWL-S的过程模型主要有原子过程、简单过程和组合过程三种。原子过程是一个不可再分的直接调用的过程,它没有子过程,只能一步完成;简单过程是一个不可直接调用的过程,它同样可以一步完成;组合过程由原子过程或子组合过程组成,它通过一系列的控制结构构造符将其它过程组合起来形成的复杂过程。OWL-S的控制结构构造符主要有以下八种:Sequence、If-then-Else、Choice、Split、Split+Join、Any-Order、Repeat-While和Repeat-Until。

为了实现UML活动图到OWL-S过程模型的转换,在UML活动图中必须包含足够详细的信息,在UML活动图中的基本元素是Action,在 OWL-S的过程模型中,表示为对原子

Repeat-While结构:

在执行服务S1结束后,首先判断condition是否成立,若成立,则执行服务S2,服务S2执行结束后继续判断condition是否成立,若仍然成立则继续执行服务S2,直至condition条件不成立,循环执行结束,然后执行服务S3。

Repeat-Until结构:

执行服务S1结束后,首先然后执行服务S1一次,然后判断condition条件是否成立,若成立则再次执行服务S1,执行结束后再次判断condition是否成立,若成立,则继续执行服务S1,直至condition条件不成立,循环结束,然后执行后续服务S2。

信件结束语第2篇

关键词:分布式系统; 系统组合; 形式化语义; 范畴理论; Agent

中图分类号:TP311 文献标志码:A

0引言

移动Agent技术是Agent技术与分布式计算技术相结合的产物,它的出现为分布式计算技术增加了智能性和动态性,还进一步扩展了Agent处理事务的功能移动Agent提供了一种全新的分布计算范型,给分布式系统的设计、实现和维护都带来了新的活力[1]设计和构建高质量的基于Agent的分布式系统是一个富于挑战性的任务[2],选择合适的结构建模方法对系统质量属性分析和评估具有重要作用其中,形式化的结构模型描述是解决系统中不同利益所有者之间交互及防止软件规约不规范等问题的良好方法[3]

当前,对Agent系统及其结构的形式化描述是一个活跃的研究领域图表句法理论[4]缺乏潜在的语义论基础,架构描述只能用于说明系统的静态结构,不能用于形式化分析和评估基于高级PetriNet的层次谓词变迁网[5]具有良好的分析能力,可用作推理开发的起始点,以白盒的方式来描述系统但Petri网无法层次化描述系统状态,从而产生状态组合爆炸问题到目前为止,对移动Agent的研究主要集中在它的体系结构、通信语言、合作方式等方面,这些规范或标准缺乏完备的逻辑理论基础,从而给分布式系统的规格说明、正确性验证、安全性等工作带来诸多不便,这限制了对基于Agent的分布式系统进一步的研究,阻碍了其应用发展[6]

范畴理论[7]为软件系统结构描述提供了可行的数学抽象机制,能为复杂的系统配置提供正确的语义描述在作者的前期工作中[8-9],已将范畴理论用于体系结构模型及其之间映射关系的描述本文扩展了这种思想,将进程代数(Process Algebra, PA)和范畴理论结合在一起,为基于Agent的分布式系统结构模型提出了一种形式化的语义描述框架,可用于指导分布式系统的描述和构建

1基于移动Agent的分布式计算模型

在分布式计算领域,把在分布式系统中持续自主发挥作用的,具有自主性、交互性、反应性、主动性特征的可移动计算实体称为移动Agent,其应用的目的是尽量把Agent靠近数据源,降低网络通信负载[10]

移动Agent是一种可移动的程序的抽象或对象,在多节点迁移的异构计算机网络中,可以通过网络从一台机器移动到另一台机器,能够根据任务派送在网络中执行任务在Agent服务环境中,Agent不断迁移和运行,通过Agent通信语言与其他Agent协作通信本文研究的移动Agent的架构模型如图1所示

“感知和作用” 是两个并列的动词,意思是Agent不仅能感知到周围环境的信息,还能给周围的环境反馈信息,即反作用

图1中,Agent利用环境交互模块感知和作用于外部环境;安全服务模块执行安全策略,负责Agent与外部环境的安全交互并阻止外部环境对Agent的非法访问;任务求解模块由运行模块、相关推理方法和规则组成Agent把移动过程中所获取的知识及任务求解模块保存在知识库中;Agent在任务求解过程中,由内部状态集、约束条件及路由策略控制执行内部状态集控制执行过程中的状态;约束条件约束Agent的行为和性能,路由策略用于满足复杂和非确定任务的求解,既可以是静态服务列表,也可以是基于规则的动态路由

基于移动Agent技术的分布式并行计算模型有效地解决了传统分布式并行计算方式在稳定性、灵活性、扩展性和移动性等方面存在的问题[11]图2显示了一种以移动Agent技术为基础的分布式并行计算模型,该实例将贯穿全文来说明相关的概念和模型

在图2中,本地主机上包含主计算Agent、主任务管理Agent和主分布检测Agent计算初始,主任务管理Agent将计算任务分解,主计算Agent、主任务管理Agent和主分布检测Agent分别根据任务分解情况复制本身形成多个任务计算Agent、任务管理Agent和任务分布检测Agent,主任务管理Agent将分解后的各个子计算任务分别赋给主计算Agent和各任务计算Agent,最后各组任务Agent和与其对应的计算子任务分别迁移到多个远程计算机上实现计算主计算Agent是系统的核心,它集成了移动Agent的基本设施(如创建和发送Agent等),此外还具有如下功能:1)根据用户提交的任务创建移动Agent;2)将携带任务的移动Agent派往到参与互操作的远程节点执行;3)接收移动Agent发送的查询结果

2系统模型的形式化语义描述

移动Agent本质上是一个独立运行的计算机程序,具有以下特征[12-13]: 1)移动性Agent可在网络中漫游,在不同的站点分段执行,最终正确地完成任务2)自治性Agent可按照自己的意愿完成特定的任务,对自身的动作和状态有自控能力3)协作性为完成某一任务,若干Agent在网络中相互通信和合作4)应激性Agent可对环境变化及时作出适当的反映5)主动性Agent可根据目标主动采取适当的动作

本文将Agent看作是一个封装的实体,具有连接端口、状态和行为它是一个由一系列的组件组成的互动对象,能发送消息和接收消息它有自己的状态和一些当状态改变时处理消息的方法本文以范畴理论作为系统结构模型语义描述的基本框架,有关范畴理论的基础知识可参阅文献[7,9],本文不再赘述

2.1弱互模拟和强互模拟

进程代数[14]用来形式化描述系统组件的局部行为,有关进程代数的基础知识请参考文献[9,14-15]这里仅给出如下两种互模拟关系的定义

“当且仅当,无论何时” 的意思是,这里给出的条件是充分且必要的条件,在所有的情况下都必须满足

定义1弱互模拟关系[9]PA上的二元关系WB为弱互模拟关系(Weak Bisimulation),当且仅当,无论何时,若有(P1,P2)∈WB,则对所有操作a∈Act,下列两条件同时满足:

2.2Agent规范

组件是Agent系统的基本组成单元,根据组件的内部结构及其被使用的情况,组件按粒度可被分为原子组件和复合组件[11]原子组件是数据和代码最小的具有最基本功能的自我包容体,是软件能够提供的最小粒度的“服务”,是组成系统的最基本单位,可被视为工业上的标准件;复合组件是由多个基本组件或复合组件有机组合而成的

移动Agent系统是由Agent主体、位置、复合组件、基本件、数据代码和信息组成的[13]Agent主体是进行计算和提供服务的主体,每个Agent处于一个位置,同一个位置可包含多个Agent,不同的Agent亦可拥有相同的复合组件基于作者在文献[9]中提出的端口标识和构件标识的定义,给出如下的Agent规范定义

(a)OperationGoal={〈Action, Target, Way, Input, Output, Precondiction, Effect, Quality〉}为操作性目标的集合每项操作性目标都包括动作、目的、方式以及输入、输出、前提条件和效果,用于规划问题的描述前提条件和效果用作于输入对象和输出对象的约束来表示Quality由质量因素和取值表示,应用于基于QoS的应用服务组合的选取;

8)PM描述了Agent能力的复杂活动序列,在各个应用中依据一定的控制流和数据流进行组合,PM体现了Agent的所有能力

在上述定义中,系统服务是由Agent系统所提供的一系列通用的服务应用,以保证Agent之间的协商、通信以及维护Agent生命周期,它作为基础架构存储在平台中,被所有的服务Agent所复用如Agent协商消息内容的构造应用ConfigureReturnMessage,以及结束一个Agent生命周期的KillAgent应用扩展服务以扩展平台为目的,允许建模人员编写一些扩展组件嵌入到系统中应用服务是由建模人员注册到该Agent模型中的服务,作为Agent的原子能力

Agent是目标驱动的,即每个内部状态变化、外部消息到来或时间事件会触发某些目标,而这些目标最终又驱动了规划的选择和执行Agent的系统操作一般包括:激活Agent,使其可进行计算,提供相应的服务;休眠Agent,使其不能进行计算和提供服务;移动Agent位置以及对某个Agent组件中的数据进行操作,如增加、修改、删除、查询数据中的信息等

2.3规范态射

在由Agent构成的分布式系统中,Agent之间的关联和通信,即Agent之间的交互机制直接影响着系统的运行效率Agent之间的交互和协作关系是由Agent描述模型或实现Agent的平台所提供和决定的特定的Agent与某一特定领域密切相关,特定Agent间的交互关系受到Agent类型和关系机制的约束

本文用范畴图表中的态射(Morphisms)来描述Agent规范之间的关系,不同类型的态射反映了这些关系所蕴含的不同语义,如包含的信息格式和传输协议不同

基于作者在文献[9]中提出的构件标识态射的定义,给出如下的Agent规范态射定义

显然,Agent规范态射满足态射的合成法则[9]即给定三个Agent规范AS1,AS2和AS3,如果存在态射ω1: AS1AS2和ω2: AS2AS3,那么存在一个合成态射ω2ω1: AS1AS3这个性质可用于跟踪不同规范描述之间的关系

2.4系统的组合

对基于Agent的分布式系统,按照不同的粒度可分解为多个相互作用、交互的Agent实体,一个Agent实体又可包含多个复合(或原子)组件这样,可将一个分布式系统的结构描述成一个多Agent系统[16],各个Agent按照不同领域所需不同功能的模型来设计,从而提高了系统的柔性和适应性

Agent组件模型也是由在各个不同粒度层次上的组件组合而成的与原子组件相比,复合组件的接口描述并无差异,但在复合组件内部多了一个内部结构,用来描述组件是如何进行组合的,即定义了结构配置通过配置并连接提供服务实现的组件可以实现一个面向组合功能的复合组件,进一步可以组装为面向复杂业务的Agent模型这里的组装涉及两个层次:一是模块内松散连接的组件组装;二是系统内松散连接的组件组装整个Agent模型的配置由所有部署到其中的子组件的组合来表示

范畴理论支持这种层次化的系统设计描述,余极限(Colimit)[7]可用来描述Agent规范的组合

一个分布式系统就是由Agent规范和规范态射构成的类型范畴,其中Agent规范是节点,规范态射说明了Agent之间的交互机制,整个系统配置的描述规范由范畴图表的余极限给出用范畴理论来描述Agent系统,期望各Agent体现或者需要对Agent进行证明的特性可以与Agent规范相关联,通过对这些特性在规范框架中进行描述,就能使用范畴论以一种统一的方式来计算和管理这些特性,如余极限规范中描述的特性同时给出了各部件相应特性的组合结果,态射的合成反映了Agent组件在交互和协作过程性的传递

2.5Agent迁移

在移动Agent计算环境中,计算实体是能够自主迁移的Agent,通过Agent在多个位置迁移并与其他Agent交互和协作来完成任务移动Agent迁移主要是解决Agent程序体和数据在异构节点间的迁移和恢复问题完整的移动Agent的数据状态由代码态、数据态和执行态构成[13]代码态是指能完成Agent功能并做控制的任务程序代码;数据态指的是Agent对象的一些全局变量和属性,是对Agent的一些元数据的描述,如Agent标识、目的节点、迁移路径等;执行态指的是Agent执行过程中需要保存的上下文信息

为描述这种情形,需要定义一种特殊的态射来形式化表示Agent在不同节点位置上迁移前后规范描述之间的对应关系,我们称之为Migration态射

Migrationg态射反映了Agent迁移移前后端口、目标、资源以及活动序列的一一对应关系在实际Agent迁移的实现过程中,先调用相应的方法序列化Agent代码和组件包含的对象状态,然后发送代码和对象状态等到目的地接收端可以利用反射机制和类对象解析技术,还原Agent代码态和数据态,创建一个新的相同的移动Agent

3Agent系统模型的语义分析

形式化方法支持大型复杂系统的形式模拟和验证,它可以将软件系统非形式化规范转化为具有严格语义的形式化描述[15],从而便于系统设计人员阅读、理解、修改、验证和设计开发因此,从软件系统的形式模拟与验证到实际的开发应用,形式化方法都起着一个重要的桥梁作用通过对分布式系统的形式化分析[3],可以查找出系统设计中的漏洞或缺陷,能够帮助设计者修改和优化系统,使其更规范、有效、合理

分布式计算的环境中可考察的语义特性[3,17]有很多,本文的目标并不是给出所有的语义特性集合,而是通过分析几种典型的语义约束,总结出语义特性研究的一般方法,从而为进一步全面研究系统的语义奠定基础限于篇幅,本文仅对结构、行为、规范精化以及Agent迁移等几种语义特性进行阐述

3.1模型的范畴图表

对图1所示的移动Agent的结构模型,用范畴图来表示,如图3所示,其中态射c1, c2, …描述的是不同粒度层次组件之间的聚合关系,态射f1, f2, …描述的是同一粒度层次组件之间的交互和协作机制

3.2组件描述精化的语义分析

应用组件架构技术到Agent系统建模中时,关键的架构构造映射成Agent系统中关键的抽象模型,架构风格用来建模Agent系统全局的组织关系和相互的依赖关系采用组件结构来建模Agent系统,Agent系统能从所采用的组件结构中受益选择正确、好的组件结构对基于Agent系统的软件开发具有如下影响:1)促进不同利益相关者间通信;2)展示早期设计决策;3)使用抽象来加强理解系统的能力;4)结合多层次复用技术;5)展示系统演化的程度;6)提供推理和分析系统行为的坚实基础

一般地,通过自顶向下的逐渐细化,将系统需求从业务空间逐渐向实现空间映射为了将组件模型转化为可执行的分布式系统,要根据架构模型所包含的要素及其之间的关系,进行构件化分析,得到一组需要实现的构件

在同一抽象层次上,基于范畴理论的结构模型可以帮助设计人员对Agent进行组合或流程编排;抽象层次的纵深方向上,每一规范描述可以在被继续垂直分解直至原子组件从开始到结束,每一步的设计和需求/规范都与系统级的需求/规范保持一致(满足某约束条件不能导致违背其他约束)因此,对于一个正确实现的系统组合,其每个参与者的局部行为应该遵守复合组件的设计时规范,即必须和组合的全局交互行为保持一致

架构附带的属性或约束,是强加在架构模型上的结构、行为和其他非功能方面上的限制约束方面的语义一致意指精化后的规范描述在原规范描述的基础上添加新的约束条件,但新的约束不能违背原规范所限定的约束当对这些约束条件进行分析和比较时,不仅要求精化后的约束蕴含精化前的约束,还要求精化后的规范不能违背它本身的约束

3.3结构和行为语义分析

在基于范畴理论的分布式结构模型中,范畴图表刻画了系统的结构语义它描述了分布式系统的结构配置,说明了Agent实体及其之间的关系和依赖Agent实体通过它们端口之间的通信发生交互,要分析规范精化对系统结构的影响,可根据Agent规范互连形成的范畴图表来分析Agent之间的交互和协作关系态射表示的规范依赖关系具有传递性,为了准确地判断的系统精化前后组件之间依赖关系是否一致,先通过态射合成求出Agent之间的间接依赖关系,然后逐一考察图中的所有节点对具体的算法实现可借助于图论中的传递闭包来完成,限于篇幅,在此不再赘述

组件组合的全局交互行为可以看作复合组件的设计规范,规定了各参与组件的交互方式;而组件组合的实现则由组合的每个参与者局部行为来描述在本文的描述框架中,可借用PA的弱等价概念,通过考察两个不同组件标识描述中的行为迹来判定它们的行为语义一致性弱一致性(或称为弱等价)关系关注系统的外部行为,而不考虑系统的内部行为,如不同抽象层次对应组件标识SM1和SM2的行为分别被形式化为进程P1和P2,则称态射M: SM1SM2的行为语义一致,当且仅当P2弱等价P1

特别地,基于定义6,对移动Agent迁移前后的行为一致性检验给出如下定义

4结语

移动Agent具有移动性和自主性的特点,可以解决传统的分布式并行计算设计方案存在的不足因此,将移动Agent技术应用于分布式并行计算完全可行,并且具有非常好的实用价值本文将程代数和范畴理论结合在一起,为基于Agent的分布式系统结构模型提出了一种形式化的语义描述框架,可用于指导分布式系统的描述和构建,并进一步对Agent实现组件的组合、分解和精化,以及Agent的迁移进行了语义保持特性的分析和探讨

基于本文的内容和范畴理论及进程代数的支持工具,下一步的研究包括: 1)进一步形式化定义组件标识和Agent规范,特别是Agent交互机制的形式化描述,从而提高模型的语义表述能力;2)建立系统组合的范畴论描述到自动化工具的转换规则,将该描述方法用于实际系统的自动分析和验证

参考文献:

[1]杜荣华,姚刚,吴泉源.蚁群算法在移动Agent迁移中的应用研究[J].计算机研究与发展,2007,44(2):82-287.

[2]杨际祥,谭国真,王荣生.并行与分布式计算动态负载均衡策略综述[J].电子学报,2010,38(5):1122-1130.

[3]郑红.分布式系统形式化建模技术研究[D].北京:中国科学院软件研究所,2003.

[4]SHEN J R, SUN X, HUANG G, et al. Towards a unified formal model for supporting mechanisms of dynamic component update [C]// ESEC/FSE13: Proceedings of the 10th European Software Engineering Conference Held Jointly with 13th ACM SIGSOFT International Symposium on Foundations of Software Engineering. New York: ACM, 2005: 80-89.

[5]FOX A, KICIMAN E, PATTERSON D A. Combining statistical monitoring and predictable recovery for selfmanagement [C]// WOSS 04: Proceedings of the 1st ACM SIGSOFT Workshop on Selfmanaged Systems. New York: ACM, 2004: 49-53.

[6]朱友文,黄刘生,陈国良,等.分布式计算环境下的动态可信度评估模型[J].计算机学报, 2011, 34(1): 55-64.

[7]BARR M, WELLS C. Category theory for computing science [M]. Upper Saddle River: Prentice Hall, 1990.

[8]侯金奎,万建成,杨潇,等.构件式体系结构模型映射的形式化语义[J].计算机研究与发展,2009,46(2):310-320.

[9]侯金奎.支持模型驱动开发的体系结构形式化语义与转换一致性研究[D].济南:山东大学,2008.

[10]王占杰, 刘晶晶.基于多Agent的分布式多目标任务调度机制研究[J].大连理工大学学报,2011,51(5):755-760.

[11]郑宇军,陈胜勇,凌海风,等.多Agent主从粒子群分布式计算框架[J].软件学报,2012,23(11):3000-3008.

[12]孙知信,宫婧,程媛,等.基于移动Agent的分布式仿真系统体系结构研究[J].计算机集成制造系统,2006,12(3):95-400.

[13]JAISANKAR N, SARAVANAN R, SWAMY K D. Intelligent intrusion detection system framework using mobile Agents [J]. International Journal of Network Security & Its Applications, 2009, 1(2): 73-74.

[14]BERNARDO M, CIANCARINI P, DONATIELLO L. Architecting families of software systems with process algebras [J]. ACM Transactions on Software Engineering and Methodology, 2002, 11(4): 386-426.

[15]曹木亮,吴智铭.PI网的强互模拟等价[J]. 计算机学报, 2005, 28(1): 1-8.

[16]徐小龙,程春玲,熊婧夷.基于multiAgent的云端计算融合模型的研究[J].通信学报,2010,31(10):203-211.

信件结束语第3篇

关键词: 预示语列 课堂会话 语列类型

1.引言

言语行为理论的代表人物Austin和Searle认为,人们的日常会话就是以言行事的过程,提出了“言语就是行为”的思想。然而,在实际交际中,人们往往会在实施一个言语行为之前,对对方的情况探听一番,以核实有没有向对方实施这个言语行为的可能性。

20世纪80年代初,S.C.Levinson提出“预示语列(pre-sequence)”的概念。所谓预示语列,就是施为前语列,即说话人在以言行事前,先用某些话语进行试探,以确定可否向对方实施某一言语行为。因此,它实际上是一种言语行为辅助语,说话人往往要求对方作出一定的反馈(何自然,冉永平,2009:300)。预示语是指一种特定的话轮(turn),包含这种预示语的一段会话即为预示语列。预示语列是为表达“请求”、“邀请”、“宣告”等“言外之力”的最典型的会话结构格式。

话语分析学家E.A.Sehegloff和S.C.Levinson认为言语行为理论对日常会话中的语言运用没有太大的解释力,并断言言语行为理论对预示语列做不出任何有意义的解释。然而,在实际会话中,“言语行为与预示语列并不相互排斥,一个语句可以同时完成两种功能;我们不仅能够而且必须借助言语行为理论,才能比较充分地解释预示语列这一会话现象”(辛斌1999)。因此,一个语句在适当的上下文中之所以具有预示语列的功能,正是因为它实现了某个言语行为。实施言语行为是达到交际意图的手段,当实施某个言语行为的意图是为后面将要实施的言语行为做准备时,我们便可把它看做预示语列。

本文以汉语课堂会话为语料,旨在通过对汉语课堂会话中预示语列的研究,为对外汉语教学与交际提供参考依据,并指导汉语作为第二外语的教学实践。

2.预示语列的分类

根据言语行为理论,Searle认为要成功实施一个言语行为,必须满足以下四个条件:命题内容条件(propositional content condition)、准备条件(preparatory condition)、诚意条件(sincerity condition)和根本条件(essential condition)(何兆熊,2007:101)。例如,当说话人想通过说话来实施“请求”这一言语行为时,命题内容条件是他明白自己将要向他人提出请求,准备条件是考虑听话人是否有时间或精力接受这一请求,这一准备条件正是要通过预示语来实现。

Levinson(1983)等人以预示语的功能为划分标准,将预示语列分为“请求前语列(pre-request)”、“宣告前语列(pre-announcement)”、“询问前语列(pre-inquiry)”、“结束前语列(pre-closing)”、“邀请前语列(pre-invitation)”等。一般来说,预示语不能决定预示语列的类型。这些语列的界定,必须结合完整的会话,尤其是主题项才能进行。使用预示语的主要动机是探寻可否向对方实施某一言语行为,如果预示语得到对方的回应,说话人就可以对对方实施一定的言语行为(刘睿,高飞,李朝华,2009。)

3.汉语课堂会话中的预示语列分析

对汉语课堂会话的预示语列研究,有助于帮助我们改善汉语作为第二外语的教学与实践。下面将从请求前语列、宣告前语列、询问前语列和结束前语列四个方面进行探讨。

3.1请求前语列

在日常交往中,交际者往往会在发出请求前探测对方满足自己需求的可能性,这时就会出现请求预示语(陈新仁,2002)。由于请求是让听话人为说话人做某事的行为,会威胁听话人的面子,因此在交际中需要讲究策略,主要策略之一便是使用预示语。请求前语列可分为直接请求型、商议型等。

直接请求型:(1)T:上课。(预示语)

S:(安静下来)

T:请大家把书翻到50页。

S:(大家开始翻书)(T代表老师,S代表学生,以下同)

在直接请求类型中,说话者往往通过某个间接的预示语引出将要请求的事情。本例中,“上课”这一动作词组正是充当了预示语的作用,以便预示后面“请大家翻书”的请求。

商议型:(2)S:老师,有件事情想跟您商量一下。(预示语)

T:什么呀?

S:三班打算跟我们班在周二举办联谊活动。

T:很好的活动,号召大家积极参加吧。

说话人为了表示对听话人的尊重,而采用商议型的预示语列,最常见的预示语便是“有件事要商量一下”。这个例子中,学生为了尊重和听取老师的意见使用商量型预示语,从而引出“举办联谊活动”这个事件。另外,“老师”这个呼语也充当了预示语的作用,其目的在于引起听话人的注意,从而为后面实施特定的行为做准备。

3.2宣告前语列

宣告是说话人向对方提供信息的言语行为,前提条件是我们假定对方不拥有该信息。为了了解对方掌握的情况,说话人往往会询问一番,这时就会出现宣告预示语(陈新仁,2002。)就这类预示语来说,Levinson(1983)认为,它们至少存在以下特征之一:(1)表明要宣告的内容属于哪一类或关于何人;(2)对该内容作出评价(如好、坏等);(3)常常指出要宣告的事情发生的日期;(4)一般都有一个表示宣告内容的变项,这个变项预示第二轮对答中要宣告的内容。

评价型:(3)T:告诉大家一个好消息。(预示语)

S:……(开始讨论起来)

T:今天下午学校将邀请XX大学的XX教授做讲座,欢迎大家前来。

本例中,老师为了宣告“下午有讲座,希望大家参加”这个事件,采用了评价型的预示语,一个“好”字不仅对事件的内容作出了评价,同时吸引了听话人的注意力。评价型预示语在宣告前语列中是最常用的预示语之一。

指令型:(4)T:大家听我讲!(预示语)

S:(安静下来,认真看着老师)

T:今天下午我们将会对前面学过的三课内容进行小测验,希望大家认真准备。

一般情况下,身份地位较高的人向身份地位较低的人宣告某件事情时会采用指令型预示语。这种预示语语气比较生硬。该例中,“大家听我讲”是老师向学生传达指令,语气强硬,态度严肃,用于比较正式的场合。

3.3询问前语列

在课堂会话中,询问前语列也是一种常见的预示语列。它旨在通过使用某些预示语达到询问的目的,可以分为直接询问型、指令型等询问前语列。

直接询问型:(5)T:我问你。(预示语)

S:什么事呀,老师?

T:是不是你拿了XX的书包?

直接询问型的预示语一般语气强硬,态度坚决,适合上级对下级或是同龄人之间使用。最常见的预示语就是此例中的“我问你”,这种预示语是说话人直接切入话题。

指令型:(6)T:你跟我说实话。(预示语)

S:什么事呀,老师?

T:是不是你拿了XX的书包?

指令型询问前语列语气比直接询问型更加生硬,通常情况下较少使用。此例中,老师询问S是否拿了其他同学的书包,可见老师是在很生气的情况下说出的,因此指令型询问前语列语气非常强硬,一般情况下应避免使用。

3.4结束前语列

在大多数情况下,会话的结束是在会话双方的共同协商中实现的,当会话双方认为彼此都已经完成了会话的“任务”后,就可以发出会话结束前信号(pre-closing signals)(苗兴伟,1995)。因此,会话结束前信号的发出,需要借助预示语得以实现,这种预示语一般包含标志着会话结束的话段(如今天就说这么多)或对前面会话内容的简要概括或寒暄语等(如今天跟你聊得很开心)。

暗示型:(7)T:哦,已经12点了,一上课就忘了时间。(预示语)

S:(收拾书本)

T:那我们下课吧!

暗示型结束前语列一般是为了暗示某一会话结束而采取的预示语。在此例中,老师为了结束课程而采用一种暗示的表示原因的预示语,以引起后面“下课”这个事件。它是一种常用的结束前语列预示语。

概括型:(8)T:今天我们的班会开得很成功。(预示语)

S:(鼓掌)

T:以后有好的建议欢迎大家踊跃提出来,下课吧。

为了结束某个会话,说话人有时会简要评述会话的性质。老师为了结束班会而对其进行了简要的评论(开得很成功)。这种预示语往往会顾及听话人的情感,对听话人表现出极大的尊重,因此易于被听话人接受,是很常用的结束前语列。

4.结语

通过对汉语课堂会话中预示语列的分析,我们可以看出,使用预示语列可以给对方留下思考的余地,从而使说话人在得到回应后实施自己的言语行为,在交际过程中体现了对听话人的尊重和交际者的社会语用能力。另外,以汉语课堂会话为语料分析预示语列,有助于改善和提高对外汉语教学与实践,同时为汉语作为第二外语教学提供参考依据。

参考文献:

[1]Levinson,S.C.Pragmatics[M].Cambridge:Cambridge University Press,1983.

[2]陈新仁.预示语列的会话修辞研究[J].福建外语,2002(2).

[3]顾筝.轮番说话中的话题启动预示语[J].修辞学习,2005(2).

[4]何兆熊.新编语用学概要[M].上海:上海外语教育出版社,2007.

[5]何自然,冉永平.新编语用学概论[M].北京:北京大学出版社,2009.

[6]刘睿,高飞,李朝华.公交车上会话中预示语探析[J].井冈山学院学报,2009(9).

[7]逯秋红.现代汉语会话过程中的预示语列研究[D].北京:北京语言大学,2008.

信件结束语第4篇

关键词:OWL-S;Web服务;本体;测试用例;自动生成

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)10-2257-05

OWL-S-Based Automated Test Case Generation for Web Service

SU Shi-han1,2, HAN Ke2

(1. Institute of Command and Control, PLA University of Science and Technology, Nanjing 210007, China; 2. Institute of China Electronic Systems Equipment Company, Beijing 100141, China)

Abstract: Web Service can’t be tested easily by traditional testing methods,which only provides description message for user,so the software quality is hard to pledging. At every turn,this becomes a choke point of Web Service development.Along with the progress of semantic Web,semantic-based Web Service specification has become mainstream gradually.The research will provide a powerful artifice, which aims at automated test case generation of semantic semantic-based Web Service specification. Targeted to single and simple Web services described in the OWL-S specification, this paper defines a input data model(IDM), presents a specific method to generate test case automatically which utilizes facts such as equivalence dividing of ontology and data restriction, and puts forward detailed algorithm, and it’s correctness and availability is validated by the case of Web Service named expressBuyBook.

Key words: OWL-S; web service; ontology; test case; automated generation

Web服务是一种基于SOA的全新技术架构,具有松散耦合、高度集成、数据信息规范、平立和数据可复用等特点,近年来得到广泛的关注和应用。它基于开放和通用的协议与平台,采用接口的方式向外提供服务,其服务质量与可信性等方面均可能存在问题,这将阻碍Web服务向前发展。有效的测试能够对Web服务进行验证和确认,可以提高服务提供者、服务请求者和服务注册中心之间的信任度,也能对服务质量作出保证。随着Web服务的快速发展,Web服务的数量呈爆炸性增长,很难逐一进行手动测试。所以,迫切需要提供Web服务测试的自动化。

语义Web技术和Web服务的结合产生了语义Web服务,是当前Web服务发展的主流趋势。它采用OWL-S服务标记语言,在OWL的本体框架下对服务规约进行描述,使得计算机能够理解以前只能由人工进行处理的服务规约信息,并自动根据这些描述信息来获取Web服务的各种参数。

早期,国内外学者在Web服务测试用例自动生成方面的研究主要基于WSDL语言[1-3]。还有的学者通过对WSDL语言添加扩展信息来生成测试用例[4-5]。随着语义Web服务的兴起,越来越多的学者开始研究利用语义Web描述服务规约的Web服务测试用例自动生成方法[6-9]。姜瑛利用合约变异对随机生成的测试数据集进行筛选优化[6],但由于采用随机生成初始测试数据,存在很多冗余和无效数据。Noikajana将语义描述中的输入、输出、前置条件和后置条件(IOPE)转换为决策表中的条件入口、行动入口、条件桩和行动桩,构建一个有限决策表来产生测试用例[7]。但是这种方法需要人工对条件桩和行动桩进行构造。

该文通过对OWL-S文档进行解析,定义输入数据模型(IDM),结合本体类等价划分,基数约束和属性限制,以及SWRL规则,提出了测试用例自动生成的具体算法,在一定程度上实现了测试用例自动生成,为Web服务自动化测试提供了有力手段。

1背景知识

OWL-S是一种基于本体描述语言OWL的Web服务标记语言,对Web服务的规约信息进行语义描述,使Web服务成为计算机可以理解的实体,从而可以自动完成诸如发现、调用、互操作和监控等任务。

OWL-S通过(hasValue、allvaluesFrom、someValuesFrom)来限制类中指定属性的值域,通过(minCardinality、maxCardinality、cardinality)来约束类中属性可以出现的次数,这些可以在等价分区生成时作为关键划分条件。OWL-S中的数据属性指向具体的数据类型和取值,是测试数据生成的重要依据,它重用了XMLSchema和RDF中的全部数据类型,还包括通过添加诸如minLength、maxInclusive等刻画约束,从基本数据类型中衍生出来的自定义数据类型。

这里我们将这些属性限制、基数约束和数据类型刻画约束进行分类,分别采取边界值、等价类划分和随机生成法等来生成测试数据。具体分类如表1所示。

表1约束条件分类和数据生成方法

2测试用例生成方法

2.1具体步骤

本体中的类概念具有层次结构,如果把父类看作一个输入空间的话,子类在一定程度上可以看成是父类的一个子空间,利用子类来对父类所代表的个体集合进行划分,能够产生各种有效和无效的等价分区。OWL-S中包含对Web服务所需输入参数的描述,其类型可以是内建数据类型或自定义数据类型的地址引用,也可以是类的地址引用。对于类型为类的输入参数,可以根据从本体中获取的类和属性信息,根据一定的规则生成有效和无效等价分区,再为每一个等价分区生成测试数据作为输入参数的备选测试数据。最终,生成整个Web服务的测试用例。

测试用例生成方法主要包括等价分区生成,测试数据集生成,测试数据选取三部分,具体步骤如下:

1)将被测服务的OWL-S描述文件导入分析器中,分析器根据需要利用OWL-S API导入相关的本体文件,解析出所有OWL实体,存入OWLOntology中。

2)获取被测服务中需要测试的Process服务,得到该Process服务的IOPE信息。对Inputs中的参数逐一进行分析。

3)根据该Input参数的OWL数据结构、约束条件等,进行等价子类划分。

4)根据Precondition和Effect信息,对等价分区进行再次细化。

5)对每一个等价分区逐一调用数据生成器,生成相应的测试数据,并保存在测试数据库中。

8)为每个Input参数选择一个等价类实例作为输入数据,最终生成测试用例。

2.2输入数据模型定义

利用美国Fujitsu实验室开发的OWL-S API,能够实现对OWL文件及OWL-S文件的读写,从而获取指定Web服务的全部本体信息。但为指定输入参数生成测试数据,只需要对部分涉及到的本体信息进行分析。为了能够更好地组织和保存与输入参数相关的各种OWL本体信息,我们定义一个输入数据模型(IDM),将涉及指定输入参数的本体类、属性以树的形式组织起来,这样更加方便测试用例生成算法的实现。

该模型形式化定义为六元组:IDM=,其中:

C表示OWL类的集合。

IN表示OWL个体的集合。

OP表示对象属性的集合,元素形式为:{PURI,Domain,Range}。其中,PURI表示该属性的URI地址;Domain∈C;Range∈C∪IN。

DP表示数据属性的集合,元素形式为:{PURI,Domain,DataType,DR},其中Domain∈C;DataType包括OWL-S支持的所有数据类型;DR表示对该数据类型的数据约束刻画,DR中的元素形式:{x,nonNegativeInteger or patternExpression},其中x为表1中刻画约束关键词。

EP表示类与属性之间的关系,元素形式为:{c,f,p},其中c∈C;p∈OP∪DP;f∈PR∪{¢},PR表示属性约束(Property Restriction),元素形式为:{x,Drange},其中x为表1中属性限制关键词,DRange∈Range∪DataType};f表示类与属性之间的基数约束,元素形式为:{x,nonNegativeInteger},其中x为表1中基数约束关键词,并且f可以是f1∪f2的形式。

nr表示开始节点,且nr∈C。

2.3 IDM生成算法

具体的IDM生成算法如下:

Step1:建立类的结构树。

1)使得C=¢,IN,OP=¢,DP=¢,R=¢,EP=¢;利用OWL-S API获取该Web服务的本体信息OWLOntology Ont;

2)判断输入参数的ParamType,如果指向内建数据类型或自定义数据类型,则建立dp={puri,domain,datatype,dr},其中,puri= ParamType,domain等于输入参数的ParamName;datatype和dr从本体信息中获取;并将dp放入集合DP中,即DP=DP∪{dp};然后,转到step2;否则,以该输入参数的ParamType值,建立OWLClass node,并将该节点放入集合C。即C=C∪{n},令nr=node;

3)在Ont中递归的查找类node的全部子类,放入C中。

Step2:递归建立类与属性之间的关系。

1)令node=nr,如果node=null,则转到Step4;

2)否则,从Ont中逐个获取node类的每一个属性,如果该属性为对象属性,利用该属性的puri,domain,range,建立op={puri,domain,range},并将op放入集合OP中,即OP=OP∪{op};获取该属性的基数约束和属性限制f1,建立ep={node,f1,op},并将ep放入集合EP中,即Ep=EP∪{ep};转到Step3;

3)如果该属性为数据属性,利用该属性的puri,domain,datatype,dr,建立dp={puri,domain,datatype,dr},并将dp放入集合DP中,即DP=DP∪{dp};获取该属性的基数约束和属性限制f2,建立ep={node,f2,op} ,并将ep放入集合EP中,即Ep=EP∪{ep};转到Step4。

Step3:获取对象属性指向的类的IDM子结构。

1)从Ont中获取该对象属性的range所指代的类,建立OWLClass range,并将该类放入集合C。即C=C∪{range}。

2)按照Step1(3)步和Step2中的方法获取range的子类、数据属性和对象属性信息,分别保存到相应的集合C、DP、OP和EP中,转到Step4。

Step4:Return IDM。

2.4测试数据生成算法

测试数据生成算法以IDM作为输入,生成的测试数据保存在测试数据库中,具体程序伪代码如下:

Algorithm:GeneratData

Input:IDM idm=

{IF (idm.C.getsize()= =0)&&( idm.EP.getsize()!=0)

根据EP中数据属性的数据约束刻画dr和数据类型,采用边界值法、等价类划分和随机测试的方法,可以生成指定数量的有效和无效测试数据,保存在测试数据库中。

Return;//结束程序

Else

{owlclass node=nr;

owlclassList nodes=EquipandSubOf(node); //获取类node的等价类和子类。

Foreach“n”in nodes;

List individuals=Generatindividual(n,idm);

equipValue.add(individuals);//将生成的个体存储到测试数据库中。

End Foreach

}

EndIF

}

其中部分局部函数定义:

List Generatindividual(OWLClass n,IDM idm,)

{

List eps=getEP(n,idm .EP) //获取EP中,Domain为node或其等价类、父类的属性。

Foreach“ep”in eps;

If isdataproperty(ep.property) //如果ep中包含的属性为数据属性。

{PR pr=ep.F.PR;

F f=ep.F.F;//获取该属性的属性限制和基数约束。

DataType dt=ep.property.DataType;

DR dr=ep.property.DR;//获取该属性的数据约束刻画和数据类型。

根据属性限制pr、基数约束f以及数据约束刻画dr等,采用边界值法、等价类划分和随机测试的方法,可以生成指定数量的有效和无效测试数据,保存在测试数据库中。

}

End Foreach

Foreach“ep”in eps;

If isobjectproperty(ep.property)

F f=ep.F.F;

DataType dt=ep.property.DataType;

List individuals= Generatindividual(ep.property.Range);

根据individuals中的个体以及属性限制pr和基数约束f,采用第2章中介绍的相关方法,产生指定数量的有效和无效测试数据, 保存在测试数据库中。

End Foreach

采用一定的选取规则,从数据属性产生的数据值和对象属性产生的数据值中分别选择合适的数据值,构建n类的个体集List

individual> finalindividuals。

Return finalindividuals;

}

2.5案例分析

为了更加详细的说明测试用例的生成方法,本节以expressBuyBook服务作为案例进行分析。它是一个B2C网站(省略)提供的在线书籍销售服务只包含一个expressBuy类型的输入参数。利用3.3节中介绍的算法,可以生成IDM如图1所示。

图1输入参数Order的IDM模型

这样我们根据数据类型的刻画约束可以为每一个叶节点的数据类型生成有效和无效的测试数据,结合基数约束,可以得出每一种OWL数据属性的取值。具体取值数量和数值如表2所示。

表2叶节点数据类型数据生成

在得到IDM中每一个叶节点取值后,下面我们考虑expressBuy类的整体取值个数,对于没有基数约束的属性hasbook,分别取基数为0,1,2进行处理。如果采用完全组合的方式来选用测试数据,expressBuy类的测试数据理论取值个数为:5700,里面包含了很多复杂重复的测试用例。考虑到IDM的树形结构,以及类的概念,我们引入面向对象的思想对测试数据进行组合。按照图1中每个类所处的层数,从大到小,利用基于解析空间树的组合测试方法,依次对每个类生成测试数据,逐个向上递归直到回溯到根节点,过程中,类与类、类与数据属性之间以类为整体,生成测试数据。在本例中,首先生成custInfo类的测试数据,取值个数为:8;其次生成OrderItem类的测试数据,取值个数为:22;最后,结合数据属性OrderID的取值数为5,生成OrderRequest类的测试数据,取值数为152。由此可以看出,测试用例数得到了显著降低,但每两个测试取值都满足了两两覆盖要求。

利用生成的测试用例对该服务进行测试,发现的错误如表3所示。

表3实验结果

3结论

该文以基于OWL-S描述的Web服务单个简单服务为研究对象,定义了输入数据模型(IDM),介绍了一种自动生成测试用例的方法,并给出了具体实现算法,为实现Web服务的有效测试提供了手段。通过实验,说明该方法能够产生有效的测试数据。

该方法只限于对单个简单服务进行测试。但随着Web服务的发展,一个功能通常需要利用多个简单服务的组合来实现,各个简单服务之间的调用顺序,业务逻辑以及输入输出匹配等方面都很容易发生错误。所以,在下一步的研究中我们重点针对组合服务测试用例的自动生成,希望能够进一步提高Web服务测试数据自动生成的质量和效率。

参考文献:

[1] Bai X Y,Dong W,Tsai W,et al. Chen. WSDL-Based Automatic test case generation for Web Services testing[C].Proceedings of the 2005 IEEE International Workshop on Service-Oriented System Engineering(SOSE’05),20-21,China,2005:215-220.

[2] Hanna Samer,Munro Malcolm.An Approach for Specification-based Test Case Generation for Web Services[C]. Computer Systems and Applications,2007.AICCSA’07.IEEE/ACS International Conference on,2007:16-23.

[3] Ma C Y,Du C L,Zhang T. WSDL-Based Automated Test Data Generation for Web Service[C]. International Conference on Computer Science and Software Engineering,2008:731-737.

[4] Tsai W T,Ray Paul.Extending WSDL to Facilitate Web Services Testing[C].Proceedings of the 7thIEEE International Symposium on High Assurance Systems Engineering(HASE’02), 2002:1-2.

[5]陈佳蕊,蔡国永.基于扩展WSDl变异的Web服务测试方法[J].计算机应用, 2007, 27 (7).

[6]姜瑛,辛国茂,单锦辉.一种Web服务的测试数据自动生成方法[J].计算机学报,2005,28(4):568-577.

[7] Noikajana S,Suwannasart T. Web Service Test Case Generation Based on Decision Table[C]. Proc. of the 2008 The Eighth International Conference on Quality Software,2008:321-326.

[8] Noikajana S,Suwannasart T. An Approach for Web Service Test Case Generation Based on Web Service Semantics[C].Proceedings of the International Conference on Semantic Web and Web Services,2008:171-177.

信件结束语第5篇

关键词:XML语法特性;SAX;基于事件驱动模式;事件处理器

中图分类号:TP31111文献标识码:A

文章编号:1004-373X(2008)08-064-04オ

Study on Application of XML Syntax Speciality in SAX

CAI Qihua,WANG Mingqiang

(Institute of Command Automation,PLA University of Science and Technology,Nanjing,210007,China)オ

Abstract:SAX is an important model to process a XML document.It uses an eventdriven based processing model,and this model looks on a XML document as serial events which have different event handlers.When a XML document is read by way of flow of data,relevant events are caught,and handled immediately by relevant event handlers.In this paper,XML syntax speciality and stack are used in SAX to process the XML document,such as the limitation of SAX is eliminated partially.

Keywords:XML syntax speciality;SAX;eventdriven based model;event processor

1 引 言

XML[1](Extensible Markup Language,可扩展性标记语言)由于其强大的对复杂数据的描述能力和广泛的适应性,已经逐渐地被广泛应用于各个领域。当前,用于解析XML文档的2种基本方式是DOM和SAX。其中DOM(Document Object Model)方式是首先将整个XML文档读入到内存形成一棵树状结构,应用程序可以用各种方法对该树进行遍历、插入、删除以及修改等操作[2]。该方式有着信息量丰富,并且对其中的信息可以随机访问的优点。但是由于要将整个XML文档读入内存并生成一棵树,对于非常大的XML文档,DOM解析过程就十分缓慢,同时也会耗费大量的内存资源。

SAX(Simply API for XML)采用的是一种基于事件驱动的处理模式,他的处理方式把XML文档中元素、属性、内容等都当成是事件,并且为每个事件都定义一个回调方法,这个回调方法由应用程序提供[2]。解析器以数据流的方式读入XML,当遇到某个事件时就调用相应的回调方法。该方式并不会事先将XML文档读入内存,而是在读XML文档的过程中就开始对文档进行解析。其优点就是处理效率高,特别是适合大型的XML文档处理。但是对一些类似于查询元素在XML中的位置以及元素的嵌套情况等与XML结构相关的操作,SAX 显得有些困难。

本文分析XML文档结构和语法规则特性,并且将这些特性应用到SAX解析XML文档中,利用栈数据结构来保存与XML结构相关的信息,通过对栈的分析解决类似查询元素位置和嵌套情况等问题,从而从一定程度上消除SAX在处理XML文档时所存在的不足。

2 XML文档结构和语法特点

XML是由W3C(World Wide Web Consortium,万维网协会)设计的一种可扩展的标记语言。相对HTML(Hyper Text Markup Language)语言,XML更侧重于如何结构化地描述所要表达的信息,并且有着严格的语法要求,因此结构更加的清晰,信息更便于阅读和维护。

2.1 XML文档的结构

XML文档采用树状的层次性结构,类似于层次性数据库系统[1,3]。在层次性模型结构中,有且仅有一个节点没有任何父亲,这个节点称为根节点,除根节点外所有节点都有且仅有一个父节点,也就是说XML文档结构就像一个倒置的树。如图1所示是Student.xml文档的结构图。

一般的XML文档由以下几个部分组成:XML声明、根元素、元素、属性以及注释等[1]。其中属性和注释有时也可以没有。例1是名为Student.xml的XML文档:

[HTH]例1 [HTSS]一个XML文档代码为student.xml

<?xml version=″1.0″ encoding=″GB2312″?>

<Student>

<Id>2005012</Id>

<Name>Tom</Name>

<Age>20</Age>

<School[CD#*2]Report[CD#*2]Card>

<Subject Name =″Math″>

<Grade>90</Grade>

</Subject>

<Subject Name =″English″>

<Grade>95</Grade>

</Subject>

<Subject Name =″Physics″>

<Grade>94</Grade>

</Subject>

</School[CD#*2]Report[CD#*2]Card>

</Student>

其中<?xml version=″1.0″ encoding=″GB2312″>是XML声明,其作用是告诉浏览器或者其他处理程序该文档是XML文档;其中version是XML文档的版本信息;encoding是内部信息的编码方式。而根元素部分是:

<Student>

</Student>

根元素是文档的主体部分,他包含文档的数据以及描述数据结构的信息。在根元素中,信息主要是以元素和属性的形式存储。

图1 Student.xml文档的层次性结构模型

2.2 XML文档语法特性

XML文档有着十分严格的语法规定,他必须遵循W3C所推荐规则规定的XML语法,这些语法的主要特性[1]是:

(1) XML文档中所有元素的标签(tag)都必须有相应的结束标签(ending tag)。也就是说开始标签和结束标签是成套出现的。例如:

<Student>

<Name>Tom</Name>

</Student>

其中所有标签都是封闭的,例如数据“Tom” 包含在<Name>和</Name>标签对之间,其中<Name>是开始标签,</Name>是结束标签。

(2) XML文档中所有元素都必须合理地嵌套,不容许交叉混乱的嵌套。例如:

<Student>

<Name>Tom</Name>

<School[CD#*2]Report[CD#*2]Card>

<Subject>Math</Subject>

<Grade>90</Grade>

</School[CD#*2]Report[CD#*2]Card>

</Student>

该XML文档中元素的嵌套是层次分明合理的。又例如:

<Student>

<Name>Tom</Name>

<School[CD#*2]Report[CD#*2]Card>

<Subject>Math</Subject>

<Grade>90</Grade>

</Student>

</School[CD#*2]Report[CD#*2]Card>

该XML文档中元素的嵌套就是不合理的,因为根元素Student和其子元素School[CD#*2]Report[CD#*2]Card 中标签出现了交错嵌套。

(3) XML文档必须包含一个容纳其他所有元素的根元素。例如在前面的Student.xml文档中,根元素是Student,他有惟一的一对标签<Student>和</Student>来定义,所有子元素都必须合理的嵌套在内部。

由于XML有着比较严格的语法要求,因此看起来整个文档更加的清晰、层次分明,一些基于XML文档的应用程序对他的处理相对来说也会更加的方便。

3 SAX处理XML方式及其改进

SAX(Simply API for XML)实际上是一个访问XML文档的Java接口,他是由XMLDEV邮件列表的成员开发维护的一个公共领域(Public Domain)软件,Java版本由DavidMegginson来维护。

3.1 SAX处理XML的方式

SAX采用的是一种基于事件驱动的XML处理方式,他将XML文档看成一系列的事件,对不同的事件采用不同的事件处理器来处理[2]。这种基于事件的处理模式主要是围绕着事件源以及事件处理器(或者叫监听器)工作。事件源是一个能产生事件的对象,同时能够注册事件处理器并且向他们发送事件对象,而事件处理器是可以针对事件产生响应的对象。事件源和事件处理器之间是通过在事件源中的事件处理器注册方法来连接的,这样当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就得到了处理[2]。

在SAX中,事件源是org.xml.sax包中的XMLReader,当XML文档输入到XMLReader中后,他通过parse()方法来开始解析XML文档并根据文档内容产生事件。而事件处理器则主要是org.xml.sax包中的ContentHandler这个接口,在这个接口中有处理不同事件的方法(几个主要方法见表1)。而事件源XMLReader和这4个事件处理器的连接是通过在XMLReader中的相应的事件处理器注册方法setContentHandler( )来完成[24]。这样,事件源XMLReader通过这个注册方法就跟事件处理器ContentHandler联系起来,如图2所示。

ケ1 ContentHandler接口中的几个主要方法

XML文档中び泄厥录ContentHandler中相应的方法

文档解析开始startDocument()

文档解析结束endDocument()

元素处理开始(元素开始标签)startElement(String namespaceURI,String localName,String qName,Attributes atts)

元素处理结束(元素结束标签)endElement(String namespaceURI,String localName,String qName)

元素字符数据处理characters(char[] ch,int start,int length)

图2 SAX的处理XML模式

以上可以看出,SAX处理XML文档过程其实是读入与解析几乎同步的过程,在读入XML文档的时候,SAX将XML看成一个数据流。当遇到某一特定的XML标签时相应地触发某一事件,然后调用相应的事件处理器,从而完成XML的处理。对于基于XML文档的应用程序,这种类似于流媒体的处理方式显得更加的灵活,应用程序不必解析整个XML文档,他可以在某个条件得到满足时候停止解析。同时由于是边读取边处理的方式,没必要将整个数据读入内存,这对于大型的XML文档的处理是一个大的优点。

3.2 SAX存在的不足

在SAX处理XML文档的方式中,事件处理器中每个事件处理方法都没有提供有关XML文档结构的信息,比如当前元素所在XML文档中的位置以及XML文档的嵌套情况等。但是,在许多的应用程序中,经常需要查询元素在XML文档中的位置以及元素的嵌套情况等与XML文档结构相关的信息,这时,应用SAX来处理显得十分吃力。

3.3 在SAX处理XML文档中应用XML文档语法特性

在2.2中知道XML文档的语法特性:完备的标签嵌套结构,每一个开始标签总会对应一个结束标签以及有且仅有一个根元素,也就是说XML文档有着良好的结构性。这样,可以考虑利用XML文档的这些特性,同时应用栈(stack)实现在DOM中才能实现的一些功能。

栈[5](stack)是一种只容许在同一端进行插入/删除操作的表结构,在容许插入/删除的一端称为栈顶(top),另一段称为栈底(bottom),他的特点是后进先出(last in first out)。对栈的操作主要有栈插入push(也称压栈)和栈删除pop(也称弹栈),而所有这些操作都在栈顶一端进行。利用栈来处理XML文档的算法思想是:

在解析XML文档时,当遇到元素处理开始事件后,在相应的事件处理器中采取push操作将该元素标签压入到栈中,而当遇到元素处理结束事件后采取pop操作将该元素标签弹出栈。对于一个结构良好的XML文档来说,很容易知道所有push和pop操作都是成对出现的。这样只需要分析栈的结构就可以确定当前标签在XML文档中的具置,而栈中最大条目数就是该XML文档的最大嵌套层数,栈底就是整个XML的根节点。现在以表1中ContentHandler事件处理器为例实现该算法思想:

ContentHandler事件处理器实际上是一个接口,现在来创建一个实现该接口的类,为了方便起见,在此只写表1了中所涉及到的几个主要的方法的实现。则用例2所示的Java来实现。要解析的是例1的Studenet.xml文档,假如现在想知道学生的年龄(age)以及该元素在文档中处理树结构中的位置,则用例2所示的Java程序实现。

[HTH]例2[HTSS] 算法思想的实现,代码为Mystudent XML java

public class MyStudentXML implements ContentHandler {

// 声明栈tags

Stack tags = new Stack();

//文档解析开始的处理方式

public void startDocument()

{

System.out.println("…Parse start…");

};

// 文档解析结束的处理方式

public void endDocument()

{

System.out.println("…Parse End…");

};

// 当遇到元素开始标签时,将开始标签名bq压入栈tags中

public void startElement(String ns,String bq,String q,Attributes a)

{

tags.push(bq);

};

// 当遇到元素结束标签的时候,对栈tags做弹栈操作

public void endElement(String ns,String bq,String q,Attributes a)

{

tags.pop();

};

/****/

这个方法是用来处理在XML文件中读到具体的数据字符串,他的参数是一个字符数组,以及读到的这个数据字符串在这个数组中的起始位置start和长度length。

public void characters(char datachar,int start,int length) {

// 获得当前栈的长度,也就当前节点元素在XML文档中的嵌套层数

int stackSize = tags.size();

// 获得当前栈顶信息,也就是当前元素的标签

String tag = (String)tags.peek();

//获得标签内所包括的数据data

String data = new String(datachar,start,length);

//打印学生的年龄以及该元素在文档中的位置

If(tag.equals("Age")){

System.out.println("元素Age的数据是:" + data + ",并且该元素处于整个XML文档的第" + stackSize);

}

};

//解析Student.xml文档

static public void main(String args) {

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser saxParser=null;

try{

saxParser = spf.newSAXParser();

}

catch(Exception ex) {

System.err.println(ex);

System.exit(1);

}

try{

saxParser.parse(new File("Student.xml"),new SAXReader());

}

catch(SAXException se) {

System.err.println(se.getMessage());

System.exit(1);

}

catch(IOException ioe) {

System.err.println(ioe);

System.exit(1);

}

}

}

该程序运行的结果是:

元素Age的数据是:20,处于整个XML文档的第2层

[LL]

从上面程序中可以看出:栈中保存的是在解析文档过程中的标签名称,他是一个动态的数据结构,随着解析的进展而变化,通过分析栈的结构可以得到一些关于XML文档结构和元素在文档中位置的信息。其中代码:

int stackSize = tags.size();

是用来获得当前栈内元素个数,也就是当前数据data所在XML文档树状层次结构中的层次。此外,如果需要得到从根元素将当前元素的一条路径,则只要将当前栈内元素从底往上按顺序取出即可。增加代码如下:

for (int top = 1,top

String datapath = tags.get(top);

}

总的来说,改进后的方法是通过分析栈的结构获得元素所在XML文档的位置以及当前元素的嵌套情况。代码中字符串数组变量datapath就是栈中元素从底向上的逐一排列,其实就是当前解析的元素在XML结构树中的一条从根元素到当前元素的惟一路径,同时也是当前元素在XML文档中的嵌套情况。

4 结 语

本文将XML文档的语法特性应用于SAX对XML的处理中,同时利用栈这个常见的数据结构,很好地克服了SAX在处理XML文档时所存在的一些不足。尽管去维护栈也要花费一些工夫,但是对于那些处理大型的XML文档并且用户只对文档中部分信息有兴趣的应用程序来说,这些维护工夫相对于使用DOM方式来说是很值得的。

参 考 文 献

[1]丁跃潮,叶文来,陈杰.XML实用教程[M].北京:机械工业出版社,2006.

[2]\[英\] Mark Birbeck.XML高级编程\[M\].2版.裴剑锋,译.北京:机械工业出版社,2002.

[3]Jeff Suttor,Norman Walsh,Kohsuke Kawaguchi.JSR 206 Java API for XML Processing (JAXP) 1.3[EB/OL]./webservices/jaxp 2007.6.3/2007.

[4]\[美\] Cay S.Horstmann,Gary Cornell.最新Java 2核心技术 卷Ⅱ:高级特性(v1.3)5E[M].王建华,董志敏,译.北京:机械工业出版社,2005.

[5]王庆瑞.数据结构教程(C语言版)[M].北京:希望电子出版社,2002.

作者简介

蔡七华 男,1977年出生,硕士研究生。研究方向为软件理论。

信件结束语第6篇

关键词:MATLAB;环卫环卫机械优化设计

1 前言

环卫环卫机械优化设计是以数学规划为理论基础,以计算机为工具,寻求最佳环卫机械设计方案的现代设计方法之一。是在给定的载荷或环境条件下,在对环卫环卫机械产品的性态、几何尺寸关系或其他因素的限制(约束) 范围内,选取设计变量,建立目标函数并使其获得最优值的一种新的设计方法。

目前,已有很多成熟的优化方法程序可供选择,但它们各有自己的特点和适用范围。实际应用时必须注意因为优化方法或初始参数选择而带来的收敛性问题及机时问题。而MATLAB语言的优化工具箱则选用最佳方法求解,初始参数输入简单,语法符合工程设计语言要求,编程工作量小,优越性明显。

2 环卫机械优化设计的数学模型

目标函数、约束条件、设计变量是优化设计数学模型的三个要素。把环卫机械设计描述成一个优化设计问题时,包含三部分内容。

a)目标函数 它是优化设计追求的目标,可以表示为设计变量的函数,它代表了设计中某项最重要的特征,如运动误差、动力特性,零部件的重量、体积、可靠性、寿命等;

b)设计约束 它是设计中设计变量必须满足的限制条件,如对某些尺寸、位置、强度、刚度、稳定性等的限制。

d)设计变量 它是在设计过程中可进行调整和优选的独立参数,如构件尺寸、运动参数、节点的位置坐标等。

由具体环卫机械设计问题确定的目标函数、设计约束和设计变量的整体就组成了优化设计的数学模型。

3 MATLAB语言及优化工具箱的约束规划应用

MATLAB是由美国Mathworks公司开发的集科学计算、数据可视化和程序设计为一体的工程应用软件,分总包和若干个工具箱,可以实现数值分析、优化、统计、偏微分方程数值解、自动控制、信号处理、图像处理等若干个领域的计算和图形显示功能,已被广泛应用于教学和科研中。其中优化工具箱的应用包括:线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便、快捷的途径。

环卫机械优化设计多数为非线性约束最小化问题,目前的求解方法虽多,但这些算法各具特点,应用场合各有不同。早期常见优化方法是通过构造惩罚函数将有约束的最优化问题转化为无约束最优化问题后,再利用Powell (鲍威尔) 等方法进行求解。而MATLAB 优化工具箱则采用序列二次规划算法SQP(Sequencial Quadratic Programming) 进行优化,其基本思想是在每个迭代点构造一个二次规划子问题,以该问题的解,作为迭代的搜索方向,并沿该方向进行一维搜索,逼近约束优化问题的解。在迭代过程中,SQP法不仅利用了目标函数和约束函数的函数值信息及一阶导数信息,还利用了目标函数和约束函数的二阶导数信息,故收敛速度快、效率高,被公认为最优秀的非线性约束优化算法之一。SQP 法实现主要分3个阶段:

a)拉格朗日函数Hessian 矩阵的更新;

b) 二次规划问题求解;

c) 一维收索和目标函数的计算。

非线性约束最小优化问题可描述如下:

minf (X)

s.tA (x) ≤b

(线性不等式约束)

Aeq = beq (线性等式约束)

C(x) ≤0 (非线性不等式约束)

Ceq (x) = 0 (非线性等式约束)

lb ≤x ≤ub (变量的上下限)

MATLAB 优化工具箱的fmincon 函数使用了SQP算法,故可直接调用该函数实现求解约束优化问题。

fmincon 函数的调用格式: [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2…)

4 应用实例

例如,承受静载荷的圆型螺旋压缩弹簧的设计问题。设计中可以调整的参数是弹簧总圈数n,弹簧中径D和弹簧丝直径d,对于弹簧优化设计问题,一组设计变量数值就代表着一种设计方案。设计变量可以取许多组不同的数值,也就是说,存在着许多种设计方案。如果优化设计的目标是弹簧的重量为最轻,则优化的目标函数数学表达式为:

minW =0.25π2ρvnDd2

综合考虑最大变形量、压缩高度、弹簧内径、静压强度条件等等约束条件,可以将数学模型进一步演变为标准形式:

综合考虑弹簧材料的选择,并确定切变模量、结构参数,可以对数学模型进行进一步的演变。如果考虑载荷p=700N,弹簧材料选用50CrVA,则度ρ=7.8×10-6kg/mm2,则切变模量G=8.1×104N/mm,许用剪切应力为:[τ]=444N/mm2;结构参数选为n2=1.75λ=0.5;并考虑所有设计变量必须取正值,D> 0,d>0,n>0 ,数学模型变为:

其中,x1=D,x2=d,x3=n

在MATLAB Editer界面中,首先编写目标函数M文件tanfun.m:

%spring function

function f=tanfun(x)

f=1.925*10^(-4)*x(1)*x(2)^2*x(3)

再编写非线性约束函数M文件tancon.m:

%spring function

function[c,ceq]=tancon(X)

c =[x(2)*(x(3)-0.5)-50;2853.503*x(1).^0.84*x(2).^(-2.84)-444];

Ceq =[0.6913*x(1).^3*(x(3)-1.75)/x(2).^4-10]

优化程序的调用可以直接在MATLAB命令行中调用,也可以编写一个程序调用文件,用于原始数据的输入、函数的调用和结果的输出。原始数据只在程序调用中输入,使目标函数文件和约束函数文件通用,增加了程序的通用性。

直接在Editor运行文件,得到结果如下:

x=20.7190, 4.7190, 9.8157 fval=0.8718

这就是说,最佳设计方案是弹簧总圈数n为9.8157 中径D为Φ 20.719mm,弹簧钢丝直径d为

Φ4.719mm。经过换算,这时弹簧重量W为0.089kg。

最后对结果进行处理及检验。弹簧丝直径d 需取标准值,由圆截面弹簧材料直径系列,取d=4.5mm;弹簧中径D圆整为D=20mm;弹簧总圈数取为n=10。现对弹簧的稳定性进行验算,压缩弹簧的高径比b=H0/D≈3.58

5 结语

利用MATLAB实现优化设计,初始参数输入简单,编程工作量小,是一种行之有效的优化设计方法。由于环卫机械零件的设计基础理论比较雄厚,机制探讨得比较透彻,一般都有明确的数学表达式,因而建立优化设计数学模型的工作比较容易实现。选用合适的优化方法及其计算机程序,可大大提高产品精度,稳定产品质量,提高生产效率。

参考文献:

[1] 韩晓明.机械优化设计及其MATLAB实现[N]. 焦作工学院学报,2004,23(6).

[2] 马天兵. 用MATLAB 软件对圆柱型弹簧的优化设计[J].煤矿机电,2005(2).

[3]卢玉明.机械零件可靠性设计[M] . 北京:高等教育出版社,1989.

[4]刘鹤松,姜晶. 基于MATLAB 算法的环卫机械优化设计[J].煤矿环卫机械,2004(11) :11 - 12.

[5]马兴义,杨立群,等.matlab 6.1x应用开发指南[M].北京:环卫机械工业出版社, 2002: 120-146

信件结束语第7篇

作为一名语文教师,一直在努力打造充满艺术味道的课堂,实践中发现:精彩的课堂结束语,能为整个课堂锦上添花!它犹如古刹钟声,余音绕梁;又如美人回眸一笑,摄魄,能激活学生新的兴奋点,能在最后再次给学生心灵的震撼,这是对课堂的升华与点睛!那么,课堂结束语具体该如何设计呢?通过对教学得失的总结,通过向名师学习,认为语文课堂结束语的设计要结合课文的特点与自身性格、语言特点,并可以从以下几个角度考虑设计:

一、巧设悬念,延伸拓展

利用悬念来启发学生的学习兴趣,使学生产生强烈的求知欲。就如章回体小说一样,看完了这一回,总想急于了解下一回的内容。这样,很容易将学生由课本、课堂延伸拓展到课外读本、课外,最终实现让学生喜欢读书,增加阅读量的目的。

二、启迪思维,升华情感

课堂结束语应与课堂内容相关联,并有一定的升华。教师可以巧妙利用生活,创设情境,让学生感悟生活,启迪思维,升华情感。这样也是学以致用,利用所学或思索或解决生活中的问题。

在教学《公输》一课时,事件正在全国引起了广泛关注。“是中国的”――国人坚决捍卫,爱国热情高涨。《公输》一课即将结束,就说:“同学们,面对不义战争,墨子用道义劝说与实力威慑的方法,迫使楚王放弃攻打宋国的念头。现在,也许就会因为日本的贪婪、不义,觊觎我国的而引发战争。相信你能从墨子身上受到启发,想想如何处理才更为理性呢?”学生们表示要学墨子尽力劝止,又问:“那道义劝说如何说呢?实力威慑,中国又有哪些实力呢?”

“一石激起千层浪”,学生思维激活,爱国之情汹涌。最后教师说:“战争,我们不要,但无可避免时,我们中国人必定是勇敢智慧的!”

教师饱满的感情,合理的结束语,能使学生思维得到有效的训练,思想感情也得到升华。

它符合新时期语文教学改革的趋势。

三、真情告白,诗意延伸

全国著名特级教师李镇西老师非常注意课堂教学结构的设计,置身于李老师的语文课堂,简直是徜徉在诗歌的海洋。语文的学习,就是品味真、爱、美,品位诗意的生活。这份诗意,一直延续到课堂的结束,一直延伸到更远的地方……

请欣赏李老师教学《给女儿的信》一课精彩的结束语―――

信件结束语第8篇

Petri网是异步并发系统,没有人为的控制流,直观地表示了非确定性;且可以图形化的方式描述复杂的系统,并可运用数学工具进行分析。因此,其在软件系统的建模与仿真中得到广泛应用。Petri网自身具备的可运行性方便了系统形式化描述级的模拟,可以用于表达不同抽象级上的系统概念并清楚地描述整个系统的运作过程。笔者发现Petri网的应用目前仅局限于软件系统的设计,例如网络协议、物流管理等,而在硬件系统中却很少涉足。硬件系统随着功能的日益增强,其功能描述也越来越复杂。基于硬件系统描述的VHDL语言以其强大的硬件描述能力,已被广大科研工作者所采用。VHDL语言也适用于描述异步并发系统,因此可与Petri网建立的模型联系起来。

本文采用自顶向下与层次分析相结合的设计方法?用Petri网的一个子类C/E系统(条件/事件系统)对视频输入卡的逻辑控制器建立模型。针对控制器C/E模型中关心和需要观察的变量,确定VHDL描述的实体和端口,由C/E系统网的拓扑结构确定条件和事件间的逻辑关系,构造VHDL语言中的结构体。采用EDA开发工具MAX+PLUS II进行代码设计,逻辑综合,并对设计进行仿真,最后下载到CPLD,验证了逻辑控制器设计的正确性。

图1 视频输入卡结构框图

1 应用背景及控制器功能要求

图1为某一视频输入卡结构框图。前端视频信号经过解码、缓冲后,将数据送入DSP处理。其中由逻辑控制器协调各部分之间的运作。从图1中可以看出,逻辑控制器与视频切换、视频解码、视频数据缓存以及DSP等部分存在联系,归纳起来需要完成五个基本功能:视频通道切换控制;插入行标志信息;FIFO的初始化操作;写FIFO;读FIFO。

要完成上述五个基本功能,必须保证每个功能与另一功能之间不存在冲突,但允许存在并发行为,同时它们之间的逻辑顺序应保持一致。因此需要一个主控模块协调各部分的操作。各功能部分之间的逻辑关系比较复杂,涉及到图像数据的行同步以及场同步等问题,一旦出错,则接收的就不是有效的图像数据,后续工作也不能正常进行。为此,首先建立Petri网模型,并运用数学工具进行分析,最后采用VHDL语言实现。

2 控制器Petri网模型

应用Petri网的一个子类C/E建立视频输入卡的逻辑控制器模型。控制器实现的五大功能,在满足各自条件的情况下,能够正确地完成相关操作。如果将每个功能展开进行Petri网模型设计,将会使整个C/E系统的节点过多。节点一多,则不易分析其性质和计算它的可达树、不变量等参数。Petri网特有的直观易懂、适于交流的图形表示也就失去了意义。采用层次分析的方法,首先在顶层根据各功能要求建立一个Petri网模型,然后在各个模块内部建立更详细的子模型。鉴于顶层和底层的分析方法类似,只将顶层模型展开讨论。网络的一些动态特性,如库所与变迁的含义如表1所示。

表1 库所和变迁的含义

库  所含  义变  迁含  义P1初始化FIFO有效T0系统开始(sysSTART)P2初始化FIFO结束T1通道切换P3插入行属性结束T2初始化FIFOP4读FIFO有效T3插入行属性标志P5通道切换有能T4写FIFOP6VREF=0T5读FIFO奇场数据P7插入行属性标志有效T6场开始P8写FIFO有效T7场同步P9RST0=0T8行开始P10HREF=0T9行同步P11VREF=1T0行有效P12HREF=1T11读取FIFO偶场数据P13RST0=1

P14偶场结束

逻辑控制器顶层Petri网模型如图2所示。该模型是一个基本网系统,其状态元素称为条件,变迁元素称为事件。事件的发生改变条件的状态(成真与否),引起信息在网上的流动?1?。由条件和事件组成的有向网通常表现为三元组(B,E;F),其中B为条件集,E为事件集。同时该模型还满足如下条件:

·(B,E;F)为简单网;

·B中每个条件都有机会成真,也有机会成假;

·E中每个事件都有机会发生;

·由初始情态ci导出的可达情态集是完全可到达关系R下的等价类。

因此,该模型还是一个C/E系统。在Petri网仿真软件Visual Object Net++中进行仿真测试,结果表明该模型能很好地描述控制器各部分之间的逻辑关系。

3 VHDL程序的基本单元设计

CPLD(复杂可编程逻辑器件)是处于并行工作方式的基本电路单元构成的高速、大规模集成器件,可作为一种并发系统模型与Petri网建立联系。VHDL作为一种硬件描述语言,支持行为描述、数据流描述和结构化描述等多种描述方法,可以用并行和顺序多种语句方式描述实际的系统,并可采用VHDL的并行语句描述C/E系统中条件/事件间的并发关系,用VHDL的顺序语句描述条件/事件间的顺序约束机制,为解决C/E系统中的有效冲突提供了可行的方法。

VHDL语言程序设计的基本单元称为一个基本设计实体,其主要由实体说明(entity declaration)和构造体(architecture body)两部分构成。实体说明部分规定了设计单元的输入输出接口信号或引脚。根据该控制器的C/E系统中关心和需观察的变量选择系统的输入和输出信号,以确定基本设计单元的实体及其端口。在控制器的C/E系统模型中,因为事件驱动条件是变化的,所以将发生的事件作为设计实体的输入信号,系统条件作为实体的输出信号。同时,为实体设计一个输入端口sysSTART,使系统上电复位。当sysSTART触发时赋予系统初始标识,系统资源(Token)流动使能。下面是具体的VHDL实体描述。

LIBRARY IEEE?

USE IEEE.STD_LOGIC_1164.ALL?

……?其它库?

ENTITY MainCtrl IS

PORT?sysSTART: IN 数据类型?

事件:IN数据类型?

条件:OUT数据类型??

END MainCtrl IS?

构造体部分定义了设计单元的具体构造和操作(行为)。C/E系统模型的拓扑结构直观地表达了条件和事件间的约束机制。这种约束机制映射为控制器内部各模块之间的逻辑关系。根据控制器C/E系统模型的特点,可采用多进程结构描述C/E系统。进程内部顺序执行,进程之间并发执行。多进程结构是并行执行进程的网络,多个进程并发执行。因此从C/E系统的拓扑结构,可将各进程映射为C/E系统的各库所状态,从而能够描述出各条件库所间的异步并发关系。各进程之间通过接口信号进行通信。接口信号是由新变化的参量引导进程产生的输出结果。设计进程的程序,使之产生的输出结果成为新的库所状态,从而影响变迁触发(fire)条件,以各进程的输出结果作为进程间的通信接口信号。具体描述如下:

ARCHITECTURE behav OF MainCtrl IS

BEGIN

进程Ri:PROCESS(事件集) i∈?1,14?

BEGIN

Pi<= 进程Ri的输出;

……

END PROCESS Ri?

......

END behav?

冲突是由系统资源的共享产生的,与并发是一对对偶的概念?1?。在实际的Petri网模型中可能存在冲突K=<Pi,?T1?T2?……?,M>,网系统自身并不提供解决冲突的方法。避免冲突的方法或措施有:

(1)由用户选择,有冲突的地方通常是需要作出选择和决策的地方。

(2)设置合适的触发规则:确定性产生规则,如优先级;不确定性产生规则,如发生概率。

(3)改变系统结构,即改写Petri网的关联矩阵,增加共享资源回收。

VHDL语言中的并行语句同样不能解决冲突问题。使用VHDL并行语句描述冲突时将导致资源的丢失。而使用VHDL语言中的顺序语句,如进程内部的语句,采用设定不同优先级的方法,可以解决Petri网中存在的冲突。本控制器C/E系统也存在冲突现象,如图3所示。

对每个库所Pi进程的变化(Token的有无),使用电平的高低来表征。事件发生与否,用脉冲出现与否表征。该C/E系统的结构体共有14个并行处理的进程。根据对控制器进行形式描述的思想,在进程内部采用下列结构:

进程Ri:PROCESS(事件参数表)? i∈?1,14?

……

IF?<条件表达式>? THEN

<行为表达式>?

END IF;

END PROCESS 进程Ri;

事件参数表(也称敏感量)中事件触发进程的执行过程是:在判断事件的<条件表达式>为真后,顺序执行其后的<行为表达式>,由新变化的参量引导进程产生输出结果;执行完进程语句后,返回进程的事件参数,等待事件集新的变化,引发进程的再一次进行,往复循环。

图4 顶层模块时序仿真

4 基于VHDL的仿真与CPLD实现

优秀范文