首页> 中国专利> 一种基于动态系统实现复合断言计算的方法

一种基于动态系统实现复合断言计算的方法

摘要

本发明是一种基于动态系统实现复合断言计算的方法。本发明所述的方法将有效地支持将任意复合断言转换为动态系统,并进一步实现其计算求值。这些断言包括单个简单断言、多个简单断言的顺序多个复合断言的顺序组合、多个简单断言的并行组合、多个复合断言的并行组合、以及上述多个断言的顺序和并行混合组合。本发明与现有的复合断言实现方法相比,具有表达方式更通用、高效率并行化求值、以及使用更简单更简洁的特点。

著录项

  • 公开/公告号CN102902519A

    专利类型发明专利

  • 公开/公告日2013-01-30

    原文格式PDF

  • 申请/专利权人 夏寿民;

    申请/专利号CN201210297875.3

  • 发明设计人 夏寿民;

    申请日2008-09-10

  • 分类号

  • 代理机构北京清亦华知识产权代理事务所(普通合伙);

  • 代理人黄德海

  • 地址 美国加利福尼亚州

  • 入库时间 2024-02-19 17:18:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-03-16

    授权

    授权

  • 2013-03-13

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20080910

    实质审查的生效

  • 2013-01-30

    公开

    公开

说明书

本专利申请为2008年9月10日提交的发明名称为“复合断言和动态的系统定义和 GUI”的中国专利申请No.200880002646.6的分案申请。

中国专利申请No.200880002646.6要求2007年9月11日提交的发明名称为“System  and GUI for specifying composite predicates AND DYNAMIC SYSTEMS”美国临时专利申 请No.60/993,258的优先权,在此以引证的方式并入其全部内容。

【技术领域】

本发明是有关于图形表达法或者图形语言的设计,用来描述断言、布尔表达式、条 件表达式、流程控制、活动、业务流程、系统行为以及如何借助软件工具来进行系统行 为的实施。

【背景技术】

由于基于文本的电脑语言具有连贯顺序的特性,而对一个有很多并行活动的复杂行 为,比如业务流程,用文本型语言就不太容易来描述。半个世纪以来,流程图已被用于 克服文本型语言的这个弱点。但是,流程图有它自己的局限性。近年来,许多新的电脑 图形语言被设计出来用以克服其中的一些限制,比如Business Process Modeling  Notation(BPMN)、United Modeling Language(UML)活动图(Activity Diagram)和动态系统 图(Dynamic Systems Chart,DSC)。

虽然相对于流程图有很多改进,但这些新的图形语言仍有一个和流程图同样的弱 点,就是在描述复杂判断或者条件时,仍然是使用了基于文本型的表达式。

在流程图中,决策点(decision point)一般是用菱形来表示的。在菱形的内部,布尔表 达式则是用文本描述的。一个决策点可以有两个或者更多向外的箭头,而每个箭头则指 向下一个步骤。例如,一个菱形有两个箭头。菱形里面的布尔表达式可以定义为“X和 Y”,一个箭头可能被标注为“真”,另一个箭头可能被标注为“假”。这个决策点所描述的 是,如果X和Y都为真,为“真”的箭头将会继续。否则,为“假”的箭头将会继续。

在BPMN中,有多种形式的“Gateway”用来描述一个决策点。一个 “ConditionExpression"属性可以用来定义一个Gateway或者其向外的箭头(在BPMN中叫 做“sequence flow”)。而这个ConditionExpression属性通常是用XML Path Language  (XPath)的基于文本的表达式来定义的。

在UML活动图(Activity Diagram)中,一个决策节点(node)可以有多个向外的 直线(edge),其中每条直线有一个guard条件定义了什么情况下该直线将被选择。UML 活动图中的join节点也可以有一个join条件的定义,该join条件的定义描述了在什么情 况下会沿着其单一的输出直线继续。在这两种情况下,这些条件都是由基于文本的布尔 表达式来定义的。

DSC是一种以动态系统(Dynamic System,DS)为单元来描述行为的图形语言。在DSC 中,有两个地方需要制订决策。一个是在和迁移箭头相关联的迁移条件中,另一个是在 和结束点相关联的结束条件中。迁移条件和结束条件都可以定义为布尔表达式。

当描述一个简单条件时,基于文本的布尔表达式就可以做的很好,比如“X和Y”。 但是,当描述一个需要使用“和”或“或”的逻辑操作符来连接多个简单表达式的复杂条件 时,由于下面一些原因,一个基于文本的布尔表达式就不是很理想了。

首先,基于文本的行为描述、复杂布尔表达式可能是违反直觉的,因为运算的顺序 依赖于一些隐含的优先法则。比如:“A||B&&C||D&&E”是一个C/C++/Java表达 式,其中,||代表“或”的逻辑符,而&&代表“和”的逻辑符。在这些编程语言中,有一些 隐含的优先法则,比如&&比||有更高的优先级。因此,“A||B&&C||D&&E”实际上意 味着“A||(B&&C)||(D&&E)”,而不是一些人可能期望的“((A||B)&&C||D)&& E”。

第二,基于文本的布尔表达式在同一时间只能有两个操作数,所以不能同时操作多 个操作数。如果许多操作数需要被同时检验,就需要重复定义一些逻辑操作符,比如 AND和OR。例如:如果我们想要描述一个条件“A,B,C,D,和E全都为真”,那么表达式 必须定义为“A&&B&&C&&D&&E”。而理想情况下,应当不需要重复地定义这些 逻辑操作符。另外,因为同一时间只有两个操作数被运算,重复应用这些操作符无意中 可能产生一些不必要的副作用。

第三,当有多个操作数时,基于文本的布尔表达式通常不能描述:若这些操作数中 有任何两个为真,该条件即满足。它也不能描述:若这些操作数中至少或者至多有两个 为真,该条件即满足。如果一个决策是基于有多少个为真的操作数,那么又如何来定义 呢?一个布尔表达式是没有一个机制来简单地处理这些情况的。但是,这些都是可能需 要在电脑系统中被描述的现实世界的条件。

第四,一个布尔表达式通常只被运算为两个不同的结果,叫做是(真)或者否(伪)。 但用来定义需要同时选择多个选项的一个决策,这就不合适了。为了要定义一个决策的 多个选项,这些多个选项中的每个都要定义一个布尔表达式,使得当相关联的布尔表达 式被测试为真时,这些选项中的一个就会被选择。在BPMN中,可以通过为一个 Gateway的每个向外的sequence flow定义一个布尔表达式来做到这点。如果该条件比较简 单,这个方法是可行的。但是,对于比较复杂的条件,写多个长的布尔表达式会显得冗 长。比如,下面是可能需要定义布尔表达式的部分列表:1)如果年龄小于5岁,宗教信 仰为X,国籍为A;2)如果年龄小于5岁,宗教信仰为Y,国籍为A;3)如果年龄大于 20岁,宗教信仰为X,国籍为B;4)如果年龄大于20岁,宗教信仰为X,国籍为C等 等。最坏的情况下,需要定义N*M*O个布尔表达式,其中N是年龄范围,M是宗教 种类数目,O是国家种类数目。更坏的情况下,为了找到一个为真的条件,年龄、宗 教、国籍可能会被重复测试N*M*O次。因此,有必要对复杂条件有更加结构化的描 述。

第五,复杂的决策逻辑和条件不能像其他行为的定义一样用图形来显示。因为决策 逻辑是任何复杂行为的基础部分,如果仍然保持复杂决策逻辑为文本的形式,则不能达 到将一个计算机系统行为彻底地图形化。

需要解决的问题是如何将复杂的决策和条件也能以图形语言来描述,并克服了上面 谈到的所有基于文本的布尔表达式的不足。本发明就提供了这样一个解决方案。

【发明内容】

本发明描述了:如何使用复合断言和图形用户界面(GUI)来定义作为计算机系统行为 的一部分的复杂决策或者条件。此外,可以对复合断言的GUI广义化,使得计算机系统 的整个行为都可以用一致的方式图形化地加以描述。

本发明的一个目的是在应用系统中通过图形表现来定义复杂决策和复杂条件,从而 能够更加方便地理解系统中的决策是如何做出来的。

另一个目标是改进如何对可能有多个参数和多个结果的复杂决策或者条件进行定 义。

为了达到这些目标,本发明中提供了如何定义复合断言的系统和如何图形化地展示 这些复合断言。

本发明使用复合断言来描述复杂决策或者条件。复合断言有如下组件:1)子断言; 2)迁移;3)终点;4)结束点。并且描述了处理或者执行一个复合断言的过程。

本发明也描述了如何使用一种图形语言将复合断言用图形展现出来,包括动态系统 图(DSC),BPMN和UML活动图。

为了描述计算机系统更多的常见行为,复合断言的复合结构被广义化为复合动态系 统(以下简称为复合DS)。一个复合DS有如下组件:1)子动态系统(子DS);2)迁移; 3)起点;4)终点;5)结束点。并描述了一个复合DS如何用图形来显示。另外,本发明 提供了一些方法来扩展已有的图形语言,来描述和支持复合DS的构造,比如BPMN和 UML活动图。

最后,提供了一些典型的例子来展示如何将本发明应用在各个方面。

参考了本说明的其余部分,包括图片和权利要求,可实现本发明的其他特性和优 点。下文用附图及参考资料中的类似功能来对本发明的特性和优点以及其结构和各种例 子的操作做了更详细的描述。

【附图说明】

图1是一个简化的框图(block diagram),显示了一个分布式计算机环境的例子;

图2是一个简化的框图,阐明了可用于实施本发明的计算机系统;

图3显示了一个复合DS;

图4显示了复合断言的通用形式;

图5显示了一个复合断言的特例;

图5A显示了在序列中如何定义一个并行子断言。

图5B显示了一个复合断言的具体例子。

图6显示了一个带有隐含终点的复合断言;

图7显示了一个带有一个∨结束条件的复合断言;

图8显示了一个带有“等于N”的复合断言;

图9显示了一个带有∧结束条件的复合断言;

图10显示了一个带有“小于等于N”结束条件的复合断言;

图11显示了一个嵌套的复合断言;

图12显示了一个简化的复合断言,该断言省略了终点;

图13显示了一个简化的复合断言,该断言省略了“Yes”迁移条件;

图14显示了一个简化的复合断言,该断言省略了迁移条件;

图15显示了一个复合断言的例子,该断言以“Yes”作为指向一个终点的迁移箭头的 迁移条件;

图16显示了一个简化的复合断言,该断言以“Yes”为迁移条件并且省略了终点;

图17显示了一个简化的复合断言,该断言省略了默认的结束点;

图18是一个有多个简单断言的例子;

图19是一个流程图,显示了如何运算一个复合断言;

图20显示了如何用一个复合断言来描述一个复杂决策;

图21显示了使用复合断言描述复杂决策的另一种方法;

图22显示了在UML中如何在决策节点中使用复合断言;

图23显示了在UML中如何将复合断言用作活动节点;

图24是一个BPMN图例,其复杂Gateway定义为一个复合断言;

图25显示了在BPMN中如何将复合断言用作一个活动;

图26为空图;

图27显示了在BPMN的扩展版本中如何模拟图4中的复合断言;

图28是一个复合断言的例子,该断言只有并行的子断言;

图29显示了和图28同样的复合断言,该断言有一个“Yes”结束点;

图30显示了在BPMN的扩展版本中如何模拟图29中的复合断言;

图31是一个有2个序列的复合断言;

图32显示了在BPMN的扩展版本中如何模拟图31中的复合断言;

图33显示了在BPMN的扩展版本中一个模拟复合断言如何用作Gateway;

图34显示了在BPMN的扩展版本中一个模拟复合断言如何当作Activity来用;

图35显示了在UML活动图的扩展版本中如何模拟图4中的复合断言;

图36显示了在UML活动图的扩展版本中如何模拟图29中的复合断言;

图37显示了在UML活动图的扩展版本中如何模拟图31中复合断言;

图38A显示了在UML活动图的扩展版本中模拟复合断言如何当作decision节点来 用。

图38B显示了在UML活动图的扩展版本中模拟复合断言如何当作Activity节点来 用。

图39显示了在一般的图形语言中如何模拟一个复合断言;

图40显示了在BPMN的扩展版本中如何模拟图3中一个复合DS;

图41显示了在UML活动图的扩展版本中如何模拟图3中的一个复合DS;

图42是一个嵌套复合DS的例子。

图43显示了在BPMN的扩展版本中,如何模拟图42中的一个嵌套复合DS;

图44显示了在UML的扩展版本中如何模拟图42中的嵌套复合DS;

图45显示了复合断言的一个例子,该复合断言带有一个子简单断言和一个间接结束 点;

图46显示了复合断言的一个例子,该复合断言带有一个子复合断言和一个间接结束 点;

图47显示了复合断言的一个例子,该复合断言带有一个子简单断言、一个迁移和一 个间接结束点;

图48显示了复合断言的一个例子,该复合断言带有两个子简单断言和一个间接结束 点;

图49显示了复合断言的一个例子,该复合断言带有一个子简单断言、一个子复合断 言和一个间接结束点;

图50显示了复合断言的一个例子,该复合断言带有一个子简单断言、一个迁移和一 个直接结束点;

图51显示了复合断言的一个例子,该复合断言带有两个子简单断言、一个迁移和一 个直接结束点;

图52显示了复合断言的一个例子,该复合断言带有一个子复合断言、一个迁移和一 个直接结束点。

【具体实施方式】

现在将以一个或者多个例子的形式对本发明进行描述。在下面的描述中,将列出 诸多细节,以对本发明进行更全面的描述。对于本领域的技术人员它是显而易见的,即 使缺了这些细节,也是可以应用本发明的。为了避免不必要的混乱,对于一些众所周之 的特性,就不作详细描述了。

许多计算机系统都有复杂的行为。本发明使用动态系统(Dynamic-System,DS)来 描述计算机系统的内部行为。为了向人类用户显示计算机系统的内部行为,本发明提供 了一些图形语言作为人机交互接口,以方便理解所描述的复杂行为。一个设计工具可以 使用其中的一种图形语言,来让用户定义计算机系统的行为。另一个设计工具也可以使 用其中的一种图形语言,在图形化的屏幕上展示计算机系统运行时的行为。

为了执行一些有用的功能,一个计算机系统可能需要做出复杂的决策。本发明用 断言构造来定义决策的内部行为。用户可以使用本发明中提供的一种图形语言,将断言 的行为用图形来显示。

本发明中所描述的复杂行为,包含了复杂决策,可以广泛地应用在实时或者分布 式环境中的软件或者硬件系统中,如图1所示。

一个分布式环境通常由多个硬件系统构成,这些硬件系统由网络连接起来。每个 硬件系统有一个或者多个中央处理器(CPU)、内存(ROM,RAM,磁盘)、输入和输出设 备,如图2所示。在这样的硬件系统上运行的计算机系统的行为可以显示在输出设备上, 而以图形化显示来操作系统行为的用户输入则可以用输入设备来采集。

硬件系统通常是一台计算机,也可能是个人数据助理(Personal Data Assistant)、多 功能电话、膝上计算机、桌上计算机、工作站(workstation)、大型计算机、实时控制设 备、网络设备或者其它任何一种提供计算和输入/输出性能的设备。

下面的部分将描述DS、断言并用图形来表现出其技术特性。

用DSC来定义一个复杂行为:

DSC是一个用DS来描述复杂行为的图形语言。基本上,每个计算机系统的行为都 可以用一个DS描述。一个DS有一个“结果”属性来记录其执行的结果状况。一个DS既可 以是简单的也可以是复合的。一个复合DS可以在更低的层次分解为多个子DS,而一个 简单DS则不可以被进一步分解。一个复合DS内部有以下组件:1)一个或者更多的子 DS;2)零个或者更多的起点;3)零个或者更多的终点;4)零个或者更多的迁移;5) 零个或者更多的结束点。图3显示了一个复合DS,为一个包含了上述组件的复合框 310。复合DS的名字显示在一个小的标签框300中,该标签框在复合框的上沿。“DS0” 复合DS有6个子DS:“sub-DS1”301,“sub-DS2”302,“sub-DS3”303, “sub-DS4”304,“subDS5”305和“sub-DS6”306。

复合DS的一个子DS既可以是顺序的,也可以是并行的。一个并行子DS与其它的 子DS相互独立,而一个顺序子DS则至少有1个迁移连接到另一个顺序型的子DS。每个 迁移有一个迁移箭头和一个迁移条件。迁移箭头显示为一个从源头子DS指向目标子DS 的箭头,而相应的迁移条件则显示为箭头旁边的一个标签。源头子DS完成其执行后,检 测其每一个往外的迁移箭头所关联的迁移条件。如果任何一个为真,就选择与其迁移箭 头相关联的目标子DS来作为下一步将要执行的子DS。例如,如图3所示,“sub-DS3” 303有2个迁移箭头,其中一个指向终点307(显示为一个小实心方块),另外一个指向 “sub-DS5”305。与指向终点307的迁移箭头相联系的迁移条件为“cond5”,与指向 “sub-DS5”的迁移箭头相联系的迁移条件是“cond6”。

所有被一个或者多个迁移箭头连接在一起的顺序型子DS组成了复合DS中的一个 序列。例如:图3中的“sub-DS1”301和“sub-DS2”组成第一个序列,而“sub-DS3” 303,“sub-DS4”304和“sub-DS5”305组成“DS0”300中的第二个序列。为了区分一 个复合DS中的不同的序列,复合DS中的每个序列都有一个唯一的内部标识“序列-ID” 以便区分。

一个序列中除了有顺序型子DS,也可以有多个起点和终点。每个起点可以有多个 往外的迁移。一个起点可以在包含它的复合DS内部显示为一个空的正方形。例如:图3 中的起点309有两个迁移。其中一个迁移条件是“cond3”,另一个迁移条件是“cond4”。

序列中的每个终点可以有一个名字或者一个标识符,并且显示为一个实心正方 形。例如,如图3所示,“DS0”300的第二个序列中,“EP2”307是一个终点,“EP3” 308是另一个终点。

当复合DS开始执行的时候,其所有的序列可以同时开始执行。但在一个序列中, 在任何时候只能执行其中一个顺序型子DS。一个序列是从它的一个起始子DS开始执 行,这个起始子DS既可以是没有被任何迁移箭头所指向的子DS,也可以是源自起点的 一个迁移箭头所指向的目标子DS。如果一个序列中有不止1个起始子DS,只有其向内的 迁移条件为真的子DS才会被选中。例如:当图3中的“DS0”300开始,作为第一个序列 中唯一的起始子DS,“sub-DS1”301开始执行。另外,当“DS0”开始,第二个序列也 开始。如果“cond3”为真,“sub-DS3”303开始执行,而如果“cond4”为真,则 “sub-DS4”304会开始。

在序列中,顺序型子DS会一个接一个地执行,直到抵达了终点。抵达终点时,包 含该终点的序列即终止,而该终点的内部终止值会被记录下来。稍后,包含它的复合DS 的结束条件可能需要检查这个终止值。

不像一个顺序型的子DS,一个复合DS中的并行子DS没有连接到任何迁移。当一 个复合DS开始执行,其所有并行子DS可以随着所有其他序列同时开始。例如,图3 中,“sub-DS6”306是一个并行子DS,当“DS0”300开始时,“sub-DS6”306也开始。

从另一个方面来看,一个并行子DS可以视为是一个只有一个子DS的序列,该子 DS只有一个迁移条件为“Yes”的迁移,直接指向一个名为“Yes”的终点。因此,如果一 个并行子DS以一个正值结束,它可以被视为与其相对应的序列以一个正的终止值而终 止。所以本文档之后的部分,并行子DS也可以视为这种特殊的序列。

一个复合DS可能有多个结束点,每个结束点内部都有一个相应的结束值。

一个结束点可能是直接的,也可能是间接的。除了相联系的结束值,直接结束点 还可以有一个名字。当到达一个直接结束点时,复合DS即结束,其“结果”属性设为刚到 达的结束点的结束值。直接结束点可以显示为直接由一个迁移箭头指向的一个实心三角 形,而其名字则显示在实心三角形的旁边。例如:图3中的“DS0”300有2个直接结束 点,叫做“Result0”311和“Result3”314。和“cond2”迁移条件相应的迁移箭头指向 “Result0”结束点;和“cond9”迁移条件相应的迁移箭头则指向“Result3”结束点。 “sub-DS2”302结束时,如果“cond2”为真,则抵达“Result0”311结束点。当抵达 “Result0”结束点时,“DS0”复合DS就结束了,其“结果”设为与“Result0”结束点相联系 的结束值。

一个间接结束点显示为一个和任何子DS都不相连的实心三角形。除了结束值外, 一个间接结束点还可以有一个名字和一个结束条件。结束条件描述了在什么情况下该复 合DS就会结束,并且将其“结果”设为与该间接结束点相联系的结束值。一个用户定义的 间接结束点显示为一个实心三角形,并在旁边显示其结束条件。例如,图3中的“DS0” 300有2个用户定义的间接结束点“Result1”312和“Yes”313。

当一个序列结束时,复合DS中的每个结束条件都会被检验。如果任何结束条件的 结果运算为正,该复合DS则结束,其“结果”设为相应结束点的结束值。例如,如图3所 示,当抵达”EP2”或者“EP3”时,或者“sub-DS6”306结束时,“ExitCond1”和 “ExitCond2”都要被检验。如果“ExitCond1”的结果被检验为正,则“DS0”300结束,其 “结果”设为“Result1”312的结束值。另一方面,如果“ExitCond2”的结果运算为正, “DS0”300结束,其“结果”设为“Yes”313的结束值。如果所有的结束条件都不为真,复 合DS会继续执行直到所有的序列都结束为止。

除用户定义的结束点之外,每个复合DS有一个系统预定义的间接的隐含结束点。 这个隐含结束点的名字是“No”,结束条件是“Else”。当所有的序列都结束后,并且所 有用户定义的结束条件都没有正的结果,复合DS即在这个隐含的结束点处结束,将其 “结果”设为“No”结束点的结束值。

为了把“No”结束点和其他用户定义的结束点相区分开来,用户定义的每个结束点 都有一个正值,而“No”结束点的结束值则有一个非正值。

在扩展版的DSC中来定义一个复杂断言:

在基本的DSC中,一个断言只能以基于文本的表达式来定义,比如图3中的 “cond1”或者“ExitCond1”。本发明扩展了基本的DSC,一个断言也能用一种图形符号 来定义。下一节描述了带有断言的DSC扩展版,该断言是用与DSC有同样风格的图形来 定义的。

基本上,在本发明中,断言的目的是为了做决策时来检验一个条件集。例如,一 个迁移条件是用来决定是否要沿着与其相联系的迁移箭头走下去。一个断言通常检验一 些反映了当前状况的数据,并且该断言检验出一个结果,其值可能是正值也可能是非正 值。结果可以存储在内存中,比如高速缓存(cache)或者数据寄存器(register),用来决定下 面将执行哪个操作。如果一个断言检验为正值,就意味着满足了一个条件。另一方面, 如果一个断言检验为一个非正值,它意味着不满足任何所需要的条件。

传统的布尔型断言通常运算为2个可能的结果,即真或假。但是,本发明中的断言 被扩展为支持多个正的结果值,而只有1个非正的结果值。换句话说,本发明中的断言运 算为一个非正的结果值,或是多个正的结果值的其中之一。

支持多个正的结果值的原因是由于在现实世界的很多应用中,一个决策既可以继 续也可以不继续处理或者执行某些应用数据。如果一个决策要继续,则可以有多种不同 的方式来处理。如果一个断言只支持一个正的结果值和一个非正的结果值,从2种以上的 继续处理方式中作选择,则需要定义一系列的断言。反之,一个带有多个正的结果值的 断言可以决定是否继续处理,如果决定要继续,通过使用不同的正值可以决定从多种不 同方式中选哪一种来处理。通常,一个支持多个正的结果值的断言比只支持一个正的结 果值和一个非正的结果值的断言会更加有效和灵活。

本发明中,断言既可以是简单的,也可以是复合的。一个简单断言不能被进一步 分解,而一个复合断言可以被分解成若干组件。一个复合断言和一个复合DS有相似的组 成结构,除了“结果”属性之外,还有如下组件:1)一个或多个子断言;2)零个或多个终 点;3)零个或多个迁移;4)零个或多个结束点。唯一少了的组件是起点,在复合断言中 是不需要起点的。图4将一个复合断言显示为用带圆角的复合框414来包含其组件。其名 称为“Pred0”,显示为复合框上沿的一个小标签盒400中。复合断言“Pred0”有6个子断 言,它们是“Sub-pred1”401,“Sub-pred2”402,“Sub-pred3”403,“Sub-pred4”404, “Sub-pred5”405,和“Sub-pred6”406。

复合断言中的这些子断言是在下一层的断言,它们既可以是顺序的,也可以是并 行的。一个顺序子断言有至少一个迁移连接到另一个顺序子断言。一个迁移有一个迁移 箭头和一个迁移条件。一个迁移箭头可以显示为一个箭头,其迁移条件可以显示在箭头 的旁边。例如:图4中的“Sub-pred1”401,“Sub-pred2”402,“Sub-pred3”403,和 “Sub-pred4”404是顺序型子断言,因为它们中的每个都至少有一个连接到其它顺序型子 断言的迁移箭头。“Sub-pred1”401有一个迁移,其迁移条件为“TransCond1”,而 “Sub-pred3”403有2个迁移,其迁移条件为“TransCond3”和“TransCond4”。

所有这些由1个或者多个迁移箭头连接在一起的顺序型子断言组成了一个序列。例 如,图4中的“Sub-pred1”401和“Sub-pred2”402组成第一个序列,而“Sub-pred3”403 和“Sub-pred4”404组成第二个序列。为了区分不同的序列,复合断言中的每个序列都可 以配有一个叫做Sequence-ID的唯一标识。

除了顺序型子断言之外,一个序列还可以有多个用户定义的终点。每个用户定义 的终点可以有一个名字,终点显示为一个实心方框。例如,图4中的第二个序列中, “EP2”408和“EP3”409是用户定义的终点。

当开始执行复合断言的检验的时候,其所有的序列可以同时开始。但在一个序列 中,在同一时间内只能对一个子断言执行检验。序列的检验起于初始子断言,一个初始 子断言是没有被任何迁移箭头指向的一个顺序型子断言。例如,图4中的“Sub-pred1”是 第一个序列中的初始子断言,“Sub-pred3”是第二个序列中的初始子断言。每个子断言被 检验之后,从其多个可能的迁移箭头中选择下一个要检验的子断言。下面描述了如何选 择下一个子断言。

每个迁移箭头都是从一个源头子断言指向一个目标子断言,并且它有一个相关的 迁移条件。迁移条件描述了源头子断言的某个结果值。源头子断言执行完以后,如果其 “结果”和该迁移条件中描述的一样,那么下一步即执行该迁移箭头的目标。例如,图4中 所示,执行完“Sub-pred3”403之后,如果“TransCond4”为真,下一步即执行 “Sub-pred4”404,如果“TransCond3”为真,下一步即执行“EP2”终点408。后面将会描 述一个终点是如何被执行的。

一个用户定义的迁移条件可以为:1)“No”,2)“Yes”,3)源头子断言中的任何用户 定义的结束点名称,或者4)“Else”。下面将详述这四种定义:

1)迁移条件为“No”所表示的是:如果源头子断言运算检验的结果为一个非正值, 下面将执行与该迁移箭头相关联的目标。例如,图5所示,“R”子断言执行完以后,如 果其“结果”值是非正的,下一步将运行“S”子断言。

2)迁移条件为“Yes”所表示的是:如果源头子断言运算为任何一个正值,下面将 执行与该迁移箭头相关联的目标。例如,图5所示,“R”子断言执行完之后,如果其“结 果”值为正,下一步将运行“EP2”终点508。

3)迁移条件中带有一个结束点名称所表示的是:如果源头子断言运算为该结束点 的结束值,下面将执行与该迁移箭头相关联的目标。例如,图5所示,“S”子断言运行完 之后,如果其“结果”为“S”子断言的与“yes1”相关联的结束值,下一步将运行“EP2”终 点509。

4)迁移条件为“Else”所表示的是:如果源头子断言的所有其他迁移条件都不被满 足,下面将执行与该迁移箭头相应的目标。例如,图5所示,执行“S”子断言之后,如果 “yes1”迁移条件不被满足,那么下一步将运行“EP3”终点“510。

一个序列中的各个顺序型子断言依次执行,直至一个终点为止。一旦到达一个终 点,该序列停止,并记录下与刚到达的终点相关的内部终止值,以备结束条件在后面检 验复合断言中每个序列的终止状态。一个终点名字既可以是“Yes”(图5中的507), “No”,也可以是一个用户定义的名字。如果这些终点中的任何一个终点需要和其他终点 区分开来,那么每个终点应当有唯一的名字,比如图5中的“EP2”508或者“EP3” 510。但是,如果这些终点中的某些终点不需要彼此区分,它们可以和别的终点共用同一 个名字,既可以是“Yes”,“No”,也可以是用户定义的名字。例如,图5中的两个终点 508和509有同样的名字“EP2”。终点507名字也为“Yes”,因为它不需要与其它可能的 同名终点相区分。

一个顺序型子断言执行完之后,如果其用户定义的迁移条件都不为真,就会到达 一个预先定义的隐含终点(implicit End-point)。该行为是为了覆盖到所有可能的情况,因 为有些情况可能未被用户定义的迁移条件所覆盖到。隐含终点的行为可被视为:对于每 个源头子断言都加上一个预先定义的迁移箭头,该迁移箭头有一个定义为“Else”的迁移 条件,并指向一个预先定义的“No”终点。例如,图6显示了图5中叫做“P”和“Q”的子 断言加上这些隐含终点后的图形。“P”子断言601被执行后,如果“结果”值不为正,下面 将执行隐含“No”终点604,这表明当前序列已到达了终点,该序列的其余部分将不再执 行。和在普通终点终止一样,和隐含终点相关联的内部终止值会被记录下来,以备后面 由复合断言的结束条件来检验。这些预先定义的“Else”迁移条件和“No”终点虽然一直 都存在,但它们通常并不显示在图中。

为了把用户定义的终点和隐含终点区分开来,和“Yes”终点相关联的终止值或者 和任何用户定义的终点相关联的终止值可有一个正值,而和隐含终点相关联的终止值则 可有一个非正值。复合断言中的结束条件可以通过检验每个被执行的序列的终止值来决 定该复合断言是否终止。

并行子断言和顺序型子断言有所不同,它是没有任何迁移箭头的。例如,图5中 的“T”和“U”是并行的子断言。执行一个复合断言时,其所有并行子断言可以同时被执 行(和每个序列中的初始顺序型子断言一起执行)。例如,当图5中的“A”复合断言500 开始时,“T”子断言和“U”子断言都开始执行。

从另一个角度来看,一个并行子断言也可视为一个序列,该序列只有一个带有一 个往外的迁移的子断言,其迁移条件定义为“Yes”,指向一个“Yes”终点。因此,如果 一个并行子断言以一个正值结束,它可以被视为与其相应的序列以一个正值终止。图 5.A显示了图5中的“T”和“U”并行子断言是如何定义为序列的。因此,在下文中,并 行子断言也可视为序列的一种特例。

一个复合断言可以有多个结束点,其中每个结束点有一个相关联的结束值。

结束点可以是直接的,也可以是间接的。除了一个相关联的“结束值”,一个直接结 束点还可以有一个“名称”。当到达一个直接结束点,复合断言就结束,其结果设为与刚 到达的直接结束点相关联的结束值。一个直接结束点可以显示为由一个迁移箭头直接指 向的实心三角形,其名称显示在实心三角形旁边。一个结束点的名称可用于识别该结束 点本身。因为一个结束点的结束值只是用在结束点的内部实现上,所以不需要显示在图 形中。例如,图4中的“Pred0”400有2个直接结束点:“Result0”410和 “Result3”413。迁移条件为“TransCond2”的迁移箭头指向“Result0”结束点;迁移条件 为“TransCond6”的迁移箭头指向“Result3”结束点。当“sub-pred2”402结束时,如果 “TransCond2”运算为真,“Pred0”复合断言结束,其结果设为与“Result0”结束点相关联 的结束值。

间接结束点没有任何迁移箭头,除了一个相关联的结束值以外,一个间接结束点 还可以有一个名字和一个结束条件。这个结束条件描述了一种情况,当复合断言在该情 况下结束时,其结果将设为与该间接结束点相关联的结束值。一个用户定义的间接结束 点也是用实心三角形来表示,其结束条件显示在该三角形的底边,其名字显示在该三角 形的上面或下面。例如,图4中的“Pred0”400有2个用户定义的间接结束点:“Result1” 411和“Yes”412。“Result1”结束点411的结束条件是“ExitCond1”,而“Yes”结束点 412的结束条件是“ExitCond2”。

每个结束点都有一个与之相关联的内部结束值,当一个复合断言在某个结束点处 结束时,这个结束值会被记录在“结果”属性中。结束点的名字和结束值有一一对应的关 系。因此,如果从某些结束点处结束都会导致在下一步时将执行同一个后续的顺序型子 断言,那么这些结束点都应当有同样的名字。如图5所示,“A”复合断言500中,结束条 件511的名字是“yes3”,它和结束点512的名称一样。这种情况下,在其中任何一处结 束都会为“A”复合断言设置同样的结果值,下一步都会执行同样的顺序型子断言“B” 501。注意:虽然“Yes”是一个系统预定义名称,它也可作为一个用户定义结束点的名 称。例如,图5中结束点513的名称为“Yes”。

每当一个序列终止时,在包含它的复合断言中,每个间接结束点的结束条件都要 被检验一次。例如,图5所示,当抵达“Yes”507,“EP2”508,“EP3”509,或者 “EP3”510中的任何一个,或者“T”结束,或者“U”结束时,都要检查“endedAt (Yes)”结束条件511,“endedAt(EP2)”结束条件512和“≥2”结束条件513。若有任何一 个结束条件为真,复合断言就会结束,将其结果设为与该结束点相关联的结束值。如图5 所示,如果第一个序列到达“Yes”终点507,“yes3”结束点511的“endedAt (Yes)”结束 条件为真,复合断言“A”500在“yes3”结束点511处结束,将其结果设为与“yes3” 结束点511相关联的结束值。

一个用户定义的结束点的结束条件可以定义为以下形式之一:1)“endedAt (anEndPt)”,其中,“anEndPt”是一个终点的名字;2)把运算为正终止值的序列数量和 一个数字相比较。下面将详述这两种情况:

1)一个结束条件可以定义成“endedAt(anEndPt)”,其中,“anEndPt”是一个终点 的名称。如果任何一个序列到达该终点,复合断言即结束,其结果设为与相应的该结束 点相关联的结束值。如图5所示,如果抵达“EP2”终点508或者509,整个“A”复合断言 500就结束了,其结果设为与“yes3”结束点512相关联的结束值。

2)结束条件可以定义为:要有多少个序列(包括了那些和并行子断言相对应的序列) 必须被运算为正的终止值时,该复合断言才会结束。例如,一个结束条件可以为“>2”, 这表示:如果运算为正的终止值的序列数量大于2,那么复合断言结束,并且其“结果”设 为相关联的结束值。以下是一些特例:

一个结束条件可以定义为“大于等于N”,其中,N是一个正数。如果以正的终止 值终止的序列总数大于或者等于N,整个复合断言就终止,其结果设为与该结束点相应 的结束值。注意:当一个序列到达任何用户定义的终点时,序列被运算为正的终止值, 而抵达隐含终点的一个序列被运算为一个非正的终止值。例如,图5中,结束点513有一 个定义为“≥2”的结束条件,其意为“至少为2”。如果“S”子断言结束,其结果不为与 “S”定义的“yes1”结束点相关联的结果值,而到达了“EP3”终点510,并且“A”500中 的第二个序列运算为一个正的终止值。因为结束条件都不为真,仍然需要运算其他的子 断言。如果随后“T”子断言运算为正的结果,那么至少有2个正的终止值,整个的“A” 复合断言500就在“Yes”结束点513处结束,其结果则设为与“Yes”结束点513相关联的 结束值。

“大于等与N”的一个特例是“大于等于1”,它意味着要使复合断言在该结束点处 结束的话,复合断言中的这些序列中至少有一个序列要有正的终止值。换句话说,如果 这些序列中的任何一个运算为正的终止值,那么复合断言就结束。所以从概念上,这个 特例可以视为将逻辑“OR”操作应用于复合断言中的这些序列上。“≥1”或逻辑标识“∨” 皆可用于表达“OR”结束条件。图7中显示了“B”复合断言700有“∨”结束条件701。

一个结束条件可以定义为“等于N”,N是一个正数。如果以正终止值结束的序列 总数正好是N,整个复合断言就结束,其结果设为与该结束点相应的结束值。如图8所 示,结束点801有一个定义为“=1”的结束条件,它表示“等于1”。因此,如果一个序列 有一个正的终止值,而其他序列都有非正的终止值,“C”复合断言800以与“yes5”结束 点相关联的结束值结束。注意:为了决定终止值为正的总数是否正好是所定义的数量, 复合断言中的所有序列都必须执行完毕。

一种“等于N”的特殊情况是N恰为复合断言中这些序列的总数。这种情况下,“等 于N”意味着:为了使复合断言在该结束点结束,并且结果设为相应的结束值,复合断 言中的每个序列需要有正的终止值。换句话说,如果所有序列都运算为正的终止值,则 复合断言在该结束点处结束。因此从概念上,这种特例可以看成把逻辑“AND”操作应用 到复合断言中的这些序列上。“=N”或者逻辑标识“∧”可以用于表达“AND”条件。图9 中显示了复合断言“D”900,其有一个“∧”结束条件901。

结束条件可以定义为“小于等于N”,其中N是一个正数。如果以正的终止值结束 的序列总数小于或者等于N,整个复合断言就结束,其结果设为与该结束点相应的结束 值。如图10所示,结束点1001有一个定义为“≤2”的结束条件,这代表“至多有2个”。 因此,如果1个或者2个序列有正的终止值,而其他的序列有非正的终止值,“E”复合断 言1000就结束,其结果设为与“yes5”结束点相关联的结束值。

除了用户定义的结束点,一个复合断言总是有一个预定义的间接的隐含结束点。 该隐含结束点的名字是“No”,结束条件是“Else”。当所有的序列都结束并且用户定义 的结束条件没有一个有正的结果值,复合断言就会在这个隐含的结束点处结束,其结果 则设为与“No”结束点相关联的结束值。例如,如果图10所示的“E”复合断言1000的所 有序列中,有正的终止值的序列多于3个,那么唯一的由用户定义的结束点1001的结束 条件“≤2”不为真。因此,“E”复合断言结束,其结果设为“No”结束点的结束值。每个 用户定义的结束点都有一个正的结束值,而隐含的“No”结束点则有一个非正的结束值。 另外,和其他用户定义的结束点不同的是,该隐含结束点是不显示在复合断言框中的。

如前所述,一个复合断言可以包含多个子断言。因为每个子断言既可以是简单的 也可以是复合的,故一个复合断言可以是嵌套的。图11显示了一个嵌套断言的例子, “Pred1”1100包含了3个子断言,“Sub-pred1”1101、“Sub-pred2”和“Sub-pred3”。 “Sub-pred1”1101是一个复合断言,包含了2个子断言“Sub-pred4”和“Sub-pred5”。 “Sub-pred4”和“Sub-pred5”中的每一个又可能是复合断言,这样就构成一个嵌套子断 言的层次。

我们也可以将复合断言的图形化语言按照以下方式来简化:1)如果一个间接结束 点的结束条件中定义了某个终点的名字,该间接结束点可以转变成一个直接结束点,这 就从图中消除了终点和结束条件。如图11所示,结束点1104的结束条件定义了:当一个 序列到达“EP1”终点时,复合断言就结束。为了将之转化为一个直接结束点,迁移箭头 1102可以一直扩展到“Yes”结束点。如图12所示,迁移箭头1202连接了源头子断言 “Sub-pred2”,指向“Yes”结束点1203。

2)“Yes”通常是一个默认的选择,所以在图中可以省略掉。换句话说,在可以定 义“Yes”却没有定义任何名字的地方,就相当于在这里定义了“Yes”。例如,图13中显 示了图12中显示的同样的“Pred1”的简化版。图13中,省略了1203结束点的名字“Yes” 和“Yes”迁移条件1202。

3)如果一个结束点在源头子断言中是显示出来的,从该结束点指向下一个子断言的 迁移箭头的迁移条件就可以省略。例如,图14中,结束点1402是显示出来的,因此迁移 箭头1401的迁移条件是可以省略的。

4)如果一个迁移箭头的迁移条件为“Yes”并指向一个终点,这个迁移箭头、其迁移 条件和该终点都可以一起省略掉。如图15所示,“Pred2”复合断言有1个子断言 “Sub-pred2”,它有一个以“Yes”为迁移条件的,并且指向终点1502的迁移箭头1501。 则其迁移箭头、迁移条件和终点都可以被省略掉,如图16所示。从另外一方面来看,如 果一个顺序型的子断言,比如“Sub-pred2”1603,没有任何用户定义的往外的迁移箭 头,那么就假定其有一个往外的迁移箭头,该迁移箭头以“Yes”为迁移条件,并指向一 个“Yes”终点。

5)如果一个复合断言只有一个用户定义的结束点,并且以逻辑“AND”作为其结束 条件,则该结束点可以省略。例如,图17显示了省略了2个结束点的“Pred2”复合断 言,如图16所示,1601、1602都有“∧”结束条件。从另外一方面来看,如果一个复合断 言没有任何用户定义的结束点,则可以假定该结束点有一个“∧”结束条件和一个“Yes” 名字,比如“Pred2”1700。

至此为止,我们介绍了复合断言的定义。但是,如前所述,当断言用于定义一个 应用系统的行为时,断言既可以是复合的也可以是简单的。为了对断言有个全面的描 述,在这里也描述下简单断言的特性。

和复合断言不同,简单断言不能再进一步分解为更小的组件。因此,简单断言显 示为一个带名字的框或者框中的简单断言表达式,比如“i>3”。如图18中,“P”, “Q”,“i>3”,“S”,“T”和“U”都是简单断言。

作为一种断言,简单断言和复合断言有一些同样的特性。和复合断言类似,一个 简单断言也可能有多个正的结果和一个非正的结果。其中每个可能的值可以视作是与该 简单断言中的多个抽象结束点相关联。而这些抽象结束点的名字则可以用作从该简单断 言指向一个目标子断言的迁移条件。例如,图18所示,简单断言“P”执行之后,如果其 结果是与“yes1”抽象结束点所相关联的值,下一步要执行“Q”断言。如果其结果是与 “yes2”抽象结束点所相关联的值,下一步要执行“i>3”断言。如果“P”的结果是非正 的,下一步将执行“S”断言。

图19中,用一个DSC图来图形化地显示了针对一个名为“pred”的断言的运算过程 “evalPred”。因为复合断言中的每个直接结束点可以转换为间接结束点,为方便起见, 该运算过程假定所有的直接结束点都已转换成间接结束点了。因此,该运算过程只须处 理间接结束点即可。另外,因为每个并行子断言可以视为一个序列,所以该过程只需要 运算序列即可。

该过程启动时,从起点1901开始。如果“pred”是一个简单断言,“pred”被直接执 行,然后设置“结果”属性并结束;如果“pred”是一个复合断言,检查当前序列1902。如 果没有序列需要执行,序列执行过程就在1903处结束。否则,从起点1904开始执行该序 列。并对该序列中的当前子断言递归地调用同样的执行过程“evalPred”1900。

序列中的当前子断言执行后,从起点1905开始,将第一个迁移设为当前迁移箭 头,然后检验每个迁移条件。这有三种可能:1)如果迁移条件为假,则将下一个迁移设 为当前迁移箭头,然后重复执行。2)如果迁移条件为真,将该迁移箭头的目标设置为当 前子断言。如果新的当前子断言不是一个终点,该过程在1906处结束,并且重复执行新 的当前子断言。否则(如果新的当前子断言是一个终点),它记录下终点的终止值,并且在 1907处结束来检验每个结束条件。3)如果没有更多的迁移条件需要被检验,该过程则记 录下隐含终点的终止值,并且在1907处结束。

执行完每个序列之后(在1907处结束),该过程会检验每个结束条件。如果有任 何结束条件为真,将其“结果”设为与该结束点相关联的结束值,并且整个运算在1913处 结束。否则,在1908处结束,继续检查下一个序列1902。

执行完所有的序列之后,如果不满足任何结束条件,将“pred”断言的“结果”设置 为与“No”结束点相关联的结束值,并且整个运算在1910处结束。

在用各种抽象例子描述了复合断言的功能后,为了进一步澄清如何在软件中应用 复合断言,让我们看一个具体的例子。假定一个慈善组织需要决定:一项补助金申请是 否被批准;如果一个申请被批准,应当批准多少补助金。该慈善组织可以使用复合断言 “审查”520来检验每个申请,如图5B所示。如果申请者是女性并且处于怀孕状态,“审 查”运算为与直接结束点“$400”相关联的结束值。(图5B中在525处结束。)如果申请 者的年龄低于12岁,“审查”运算为与间接结束点“$400”相关联的结束值。(图5B中在 522处终止,然后在526处结束。)如果申请者的年龄不低于12岁但处于贫穷状态,“审 查”运算为与间接结束点“$400”相关联的结束值。(图5B中在523处终止,然后在526 处结束。)如果申请者的年龄不低于12岁并且不处于贫穷状态,但是为肯尼亚公民或者 刚果公民,“审查”运算为与间接结束点“$100”相关联的结束值。(图5B中在524处终 止,然后在527处结束。)如果申请者不属于上面的任何情况,“审查”运算为与隐含的 “No”结束点相关联的结束值。

为了进一步澄清本发明,图5B520中的“审查”的行为可以用如下伪代码来表示:

审查(){

if(性别==女&&状态==怀孕)return批准400;

if(年龄<12)return批准400;

if(年龄≥12&&状态==贫穷)return批准400;

if(年龄≥12&&状态!=贫穷){

if(公民==肯尼亚||刚果))return批准100;

}

return no;

}

本发明中描述的复合断言可通过以下方式应用在一个扩充的DSC图中:1)复合断 言可用于定义一个决策点,来从多个后续的子DS中选择下一个该执行的子DS。如图20 所示,复合断言“D1”2000有一个由两个顺序型子断言构成的序列。这些子断言是 “more?”和“true?”。“D1”复合断言首先运算“more?”子断言。如果“more?”结果非 正,“D1”在“noMore”结束点处结束。否则,下一步将执行“true?”子断言。如果 “true?”结果是非正的,“D1”在“false”结束点处结束。否则它在“true”结束点处结束。

如图20,定义了“D1”复合断言2000,“B”2002执行后,名为“D1”的复合断言 可用作一个决策点2001。决策点“D1”2001有3个往外的箭头,叫做“false”、“true”, 和“noMore”。如果“D1”运算的结果值为“false”,下一步将执行“A”2003。如果 “D1”运算的结果值为“true”,下一步将执行“C”2004。如果“D1”运算的结果值为 “noMore”,下一步将执行“E”2005。

2)复合断言的细节也可以在决策点处定义。例如,图21显示了决策点被定义为一 个带有3个往外的箭头的复合断言“D1”2101,其中每个往外的箭头从复合断言的一个结 束点指向下一个子DS。

复合断言在其他图形语言中的用法

除了将图形化的断言扩展到DSC之外,本发明中的复合断言也可以用于取代一个 流程图中的一个文本的布尔型表达式,比如UML活动图(UML Activity Diagram)或者 BPMN。后文中,当描述BPMN组件时将采用BPMN的原文术语;而当描述UML组件时 将采用UML的原文术语。

在UML活动图中,图20中所描述的同样的行为可以依照图22中所示在UML活动 图的一个扩展版中来定义。图22的右图定义了一个名为“D1”的复合断言2200,决策节 点2201显示为名字为“D1”的复合断言。注意:因为UML活动图用圆角矩形表示 Activity,为了和一般Activity区分开来,断言2200可以用尖角矩形表示。

UML活动图中使用复合断言的另一种方式是将复合断言看做一个常规的Activity  node。图23显示了“D1”复合断言2300可以作为“B”Activity的ActivityEdge所指向的 一个目标Activity2301。一个往外的ActivityEdge将“D1”Activity连接到一个decision  node,然后该decision node基于“D1”Activity2301的结果制定决策,从其三个往外的 ActivityEdge中选择一个来执行。

在BPMN中,图20中描述的同样的行为可以依照图24所示在BPMN图的一个扩 展版本中来定义。“D1”复合断言2400可用于定义BPMN中Complex Gateway2401中的 OutgoingCondition属性。Complex Gateway有多个往外的sequence flow,复合断言的每个 特定结果值可以定义在这些sequence flow的ConditionExpression属性中。例如,图24 中,“false”,“true”和“noMore”是Complex Gateway“D1”2401的往外的sequence  flow。注意:因为BPMN用圆角矩形表示Activity,为了和一般Activity区分开来,复合 断言可以用尖角矩形表示,比如“D1”2400。

本发明中,在BPMN中使用复合断言的另一种方式是将之看作一个一般Activity。 如图25所示,“D1”复合断言2500作为“B”Activity的往外的sequence flow的目标活动 2501。“D1”2501有3个往外的conditional sequence flow,叫做2502,2503和2504。 conditional sequence flow的ConditionExpression属性定义了:如果“D1”复合断言运算结 果为某个值,相关联的的sequence flow将会被执行。例如,“false”ConditionExpression 属性定义了:“D1”的结果有一个与“D1”的“false”结束点相关联的结束值。如果该表达 式为真,则下一步将执行“A”Activity。

一个流程图经过如前所述的扩展后,虽然可以成为支持复合断言的图形语言,比 如UML活动图和BPMN,但有些设计者可能不喜欢这种方式,因为上面描述的图形语言 使用了和该流程图本身不同的风格。如果设计者需要先用该流程图的风格来定义一个应 用行为,然后再转用上面描述的DSC风格来定义一个复合断言,设计者可能会感到困 惑。一个更好的方法是在已有的流程图中以一种更一致的方式来支持复合断言。

在扩展的BPMN中模拟复合断言:

这部分描述了如何扩展BPMN,以一种比DSC方式更类似于BPMN的方式来模拟 一个复合断言。为了模拟复合断言,下面的新组件可以加入到BPMN中:1)用来模拟复 合断言的“复合断言活动”,2)用来模拟序列的“序列框”,3)用来模拟复合断言中简单子 断言的“简单断言活动”。另外,需要一种模拟“结果”属性、终点和结束点功能的方法。 为了简化起见,复合断言活动和简单断言活动也被叫做断言活动。

复合断言活动是用于模拟一个复合断言的。一个复合断言活动是加入到BPMN中 的一个特殊的sub-process。它可以有一个“结果”属性来模拟复合断言中的“结果”属性,来 存储它结束后的结果值。另外,一个复合断言活动可以包含多个序列框,多个断言活 动,一个结束-Gateway和多个Final Event,其中每一个断言活动模拟了一个并行子断 言。例如,图4中所示的“Pred0”复合断言400可以由图27所示的BPMN的复合断言活 动2700来模拟。

对于复合断言中的每个序列,复合断言活动都有一个序列框来模拟该序列。该序 列框和BPMN中一般的Activity相似,但有一点除外:抵达序列框里面的一个End Event 时,不仅会终止序列框,还会终止包含它的模拟复合断言的复合断言活动。为了与一般 的Activity相区分,序列框可以显示为一个虚线框2701,如图27所示。复合断言中的每 个序列都由这样一个序列框来模拟,该序列框带有一个sequence flow来指向一个用来接 合的Gateway。例如,序列框2701模拟了图4中“Pred0”复合断言的第一个序列,而另一 个序列框2702模拟了图4中的“Pred0”复合断言的第二个序列。这些序列框都有一个 sequence flow来指向用来接合的Gateway2707。

复合断言的整个序列可以在BPMN中由序列框内部的一系列断言活动来模拟,其 中每个断言活动模拟了序列中的一个顺序型子断言。如果顺序型子断言是简单断言,它 就由简单断言活动来模拟。否则就由复合断言活动来模拟。序列框里面的这些断言活动 由conditional sequence flow连接起来。如图27所示,断言活动“Sub-pred3”2703和 “Sub-pred4”2704模拟了图4中同名的子断言。图4中的“TransCond4”迁移是由图27中 的名为“TransCond4”的conditional sequence flow模拟的,该conditional sequence flow由 源头断言活动“Sub-pred3”2703指向目标断言活动“Sub-pred4”2704。和每个conditional  sequence flow相关联的ConditionExpression属性则描述了和复合断言中的迁移相关联的 迁移条件。

为了模拟序列中的终点,可以把一个新的Event类型——终点事件加到BPMN 中。一个终点事件和被模拟的终点有同样的名字。当到达序列框中的一个终点事件时, 序列框终止,记录下刚到达的终点事件的名字或其内部的代号,使得后来的结束条件可 以检验复合断言中每个序列的终止状态。为了和BPMN中的其他Event相区分,终点事件 可以显示为复合断言中,指向终点的迁移箭头由指向这样一个终点事件的conditional  sequence flow来模拟。例如,图27中名为“EP2”的终点事件2705模拟了图4中的“EP2” 终点。

虽然BPMN要求把所有的sequence flow都显式地定义出来,但为了简化图形,序 列框支持复合断言的隐含终点行为,而不在扩展BPMN图中显示出隐含终点。换句话 说,一个在其ConditionExpression属性中定义了“else”的conditional sequence flow会被自 动添加到每个源头断言活动中,并且该conditional sequence flow指向一个名字为“No”的 隐含的终点事件。当一个源头断言活动结束之后,如果其用户定义的迁移条件都不为 真,序列框会在隐含的“No”终点处终止,并且将这个隐含终点事件的名字或其内部的代 号记录下来,以备稍候使用。如图27所示,“Sub-pred3”2703有2个迁移条件,叫做 “TransCond3”和“TransCond4”。虽然没有显示出来,“Sub-pred3”也有一个隐含的 conditional sequence flow指向一个名为“No”的隐含终点事件。因此,“Sub-pred3”2703 结束之后,如果“TransCond3”和“TransCond4”都不为真,序列框2702在隐含的终点 事件处终止。

如果复合断言中的并行子断言是一个简单断言,它就由一个简单断言活动来模 拟。否则就由一个复合断言活动来模拟。这两者都有一个指到一个用来接合的Gateway 的往外的sequence flow。例如,图4中的并行子断言“Sub-pred5”由图27中的 “Sub-predicate5”2706模拟,它既可以是一个简单断言活动,也可以是一个复合断言活 动,这取决于被模拟的并行子断言是简单的还是复合的。它还有一个从它指向用来接合 的Gateway2707的sequence flow。

把所有序列框和模拟并行子断言的断言活动接合起来的Gateway叫做结束 -Gateway,这是一个加入BPMN的新的Gateway类型。为了和BPMN中的其他Gateway 相区分,结束-Gateway可以显示为一个菱形,菱形内部为“?”。一个结束-Gateway有 多个往内的和多个往外的sequence flow。每个往内的sequence flow从一个序列框或者一 个模拟并行子断言的断言活动连接过来。每个往外的sequence flow则指向一个End  Event,该End Event模拟了复合断言中的一个间接结束点。每个往外的sequence flow有 一个ConditionExpression属性,该属性定义了与结束点相关联的结束条件,而该结束点由 sequence flow所指向的End Event来模拟。例如,图4中的“Result1”结束点由图27中的 “Result1”End Event来模拟,“ExitCond1”结束条件由ConditionExpression属性 “ExitCond1”来模拟,并且被关联到图27中的往外的sequence flow2708。

结束-Gateway的行为会一直等待,直到从各个序列框和模拟并行子断言的断言活 动中都收到一个token后,然后再从其往外的sequence flow中选出下一个。如果有任何 ConditionExpression属性为真,则选择其sequence flow,并开始执行该sequence flow所 指向的End Event。End Event开始时,包含它的复合断言活动就结束了,其“结果”属性设 为与被模拟的结束点相关联的结束值。

结束点的名字是在模拟结束点的End Event的Name属性中定义的。例如,图27中 的End Event,“Result1”和“Yes”,各自对应于图4中同名的各个结束点。

为了模拟一个复合断言完整的功能,每个往外的sequence flow的 ConditionExpression属性可以定义为运算为正值的序列的数量。如前所述,它包括:等 于N,大于等与N,小于等于N。而ConditionExpression属性的句法需要遵从在BPMN中 业务流程图属性的ExpressionLanguage中所定义的语言。

在BPMN中,复合断言的直接结束点可以由End Event来模拟,并且这个End Event 被一个来自模拟其源头顺序型子断言的断言活动的conditional sequence flow所指向。该 End Event可以显示在包含了模拟源头顺序型子断言的断言活动的序列框里面。如图27所 示,“Sub-pred2”2709有一个conditional sequence flow2710直接指向“Result0”End Event 2711,它模拟了图4中的直接结束点“Result0”410。“Sub-pred2”2709执行完之后,如 果“TransCond2”2710为真,则到达“Result0”2711。“Result0”End Event2711会终止包 含它的复合断言活动,并且其结果设为与图4中“Result0”结束点相关联的结束值。

如前所述,如果在复合断言中没有用户定义的结束点,就假定一个将结束条件定 义为“∧”、而将其名字定义为“Yes”的结束点。该结束点是由一个 conditional-sequence-flow来模拟的,该conditional-sequence-flow从结束-gateway指向一 个End Event,其名字属性定义为“Yes”。这个conditional-sequence-flow的 ConditionExpression属性用表达式语言的句法被定义为:“如果所有模拟并行子断言的断 言活动和序列框的运算结果都为正。”如图28所示,在DSC语言中,一个复合断言“D2” 2800有3个子断言“P”,“Q”和“R”,而没有用户定义的结束点。图29显示了DSC中 带有“Yes”结束点的同样的复合断言“D2”2900,将“∧”作为其结束条件明确地显示出 来。图30显示了复合断言“D2”2900在BPMN中如何被模拟为复合断言活动3000。特别 是,“Yes”结束点被一个conditional sequence flow所模拟,该conditional sequence flow来 自结束-Gateway 3001,指向名字属性定义为“Yes”的End Event3002。这个 conditional-sequence-flow的ConditionExpression属性是“全为正”,它定义了以下的条件 ——“如果所有的序列框和模拟并行子断言的断言活动的执行结果都为正”,该条件是依 照BPMN业务流程图中指定的ExpressionLanguage的句法来定义的。

如果一个复合断言只有直接结束点,在BPMN中模拟这种复合断言时,不必使用 结束-Gateway。另外,每个代表序列框的虚线框也可以省略。如图31所示,用DSC描 述的复合断言“Pred5”3100有2个序列和4个直接结束点,这4个直接结束点叫做 “Result0”,“Result1”,“Result2”和“Result3”。图31中的“Pred5”3100可以由图32 所示的BPMN中的“Pred5”复合断言活动3200模拟,而不需要结束-Gateway。图32 中的“Sub-pred1”,“Sub-pred2”,“Sub-pred3”,和“Sub-pred4”都是复合活动,这些复 合活动模拟了图31中“Pred5”复合断言3100的子断言。

BPMN中可以用一个“简单断言活动”来模拟一个“简单断言”。简单断言活动是 BPMN中一种特殊的Task类型。和复合断言活动一样,一个简单断言活动可以有一个“结 果”属性。一个简单断言活动完成之后,其“结果”属性可以设为一个正值或一个非正值。

复合断言活动在扩展版的BPMN中的应用方式类似于复合断言在图24中的用法。 在BPMN中,一个复合断言活动可用于定义一个Complex Gateway的OutgoingCondition 属性,并且该Complex Gateway可以用作一个决策Gateway。例如,图33中的Complex  Gateway3300的OutgoingCondition属性被定义为图27中的“Pred0”复合断言活动2700。 根据其“结果”属性的值,从“A”,“C”和“E”中选择一个作为下一步要执行的Activity。

图34显示了使用复合断言活动进行决策的另一种方式。类似于图25中所示的如何 将一个复合断言当作一般Activity的使用方法,图27中定义的“Pred0”复合断言活动 2700在图34中作为从“B”Activity指向外的sequence flow的目标Activity3400。“Pred0” 复合断言活动有3个指向外的conditional sequence flow。每个conditional sequence flow的 ConditionExpression属性定义了:如果“Pred0”的“结果”属性有与某个结束点相关联的结 束值,那么执行相应的sequence flow。

在UML活动图的扩展版中模拟一个复合断言:

本部分描述了:如何扩展UML活动图来模拟一个复合断言,使其风格相比较于 DSC风格更能一致于UML风格。为了模拟复合断言,以下新的组件可以作为扩展添加到 UML中:1)模拟一个复合断言的复合断言节点;2)模拟一个序列的序列框;3)模拟一 个简单子断言的简单断言节点。另外,需要一种方法来模拟结果属性、终点和结束点的 功能。为了简化起见,复合断言节点和简单断言节点都被叫做断言节点。

一个复合断言节点是用于模拟一个复合断言的。一个复合断言节点是添加到UML 中的一种特殊Activity。它可以有一个“结果”属性来模拟复合断言的“结果”属性以存储它 终止后的结果。另外,一个复合断言节点包含了多个序列节点,多个模拟并行子断言的 断言节点,每个断言节点既可以是一个简单断言节点,也可以是一个复合断言节点、一 个join node、一个decision node和多个ActivityFinalNodes。例如,图35中用UML表示 的复合断言节点3500模拟了图4中的“Pred0”复合断言400。

复合断言节点包含一个模拟复合断言中每个序列的序列框。该序列框类似于UML 中其他的普通Activity,唯一不同的是:当抵达里面的一个ActivityFinalNode时,不只是 序列框终止,包含它的复合断言节点也将终止。为了和其他普通的Activity相区分,该序 列框可以显示为一个虚线框,如图35中3501所示。复合断言中的每个序列由这样一个序 列框模拟,该序列框有一个指向一个join node的往外的ActivityEdge。例如,图35中的 序列框3501模拟了图4中的“Pred0”复合断言中的第一个序列,序列框3502模拟了第二 个序列。每个序列框有一个指向join node3503的往外的ActivityEdge。

在UML中,复合断言中的整个序列可以由序列框中一系列的断言节点来模拟,而 每个断言节点模拟序列中的一个顺序型子断言。例如,图35中的“Sub-pred3”3503和 “Sub-pred4”3504模拟图4中的“Pred0”复合断言400的第二个序列的这些同名子断言。 如果图4中的”Sub-pred3”是一个简单断言,图35中的“Sub-pred3”3503是一个简单断言 节点。否则,“Sub-pred3”3503是一个复合断言节点。

在一个序列内部,从一个源头指向一个目标的一个迁移箭头在UML中被一个从模 拟源头的断言节点指向一个决策节点的ActivityEdge及其往外的ActivityEdge所模拟。另 外,和迁移箭头相联系的迁移条件在UML中由模拟迁移箭头的往外的ActivityEdge的 guard所模拟。例如,图4中的迁移条件“TransCond3”和“TransCond4”的迁移箭头由 一个指向一个decision node3505的ActivityEdge来模拟,后面一个将带有[TransCond3]的 往外的ActivityEdge作为其guard,另一个将带有[TransCond4]的往外的ActivityEdge作 为其guard,如图35所示。

序列中的终点可以由UML中的FlowFinalNode模拟。例如,图4中的“EP2”终点 被图35中有同样的名字的FlowFinalNode3506所模拟。当到达FlowFinalNode时,序列框 终止,一个token被送往join node,并记录下被模拟的终点名字或其内部的代号。稍后, 结束条件将会用到这些信息。

序列中隐含终点的行为在UML中可以通过以下方式来模拟:若模拟一个源头子断 言的迁移条件的每个往外的ActivityEdge的所有guard都不满足,则终止该序列框,并且 记录下隐含终点名字或其内部代号,稍后结束条件检验时会用到。如图35所示, “Sub-pred3”3503完成之后,检查每个往外的ActivityEdge的guard,比如[TrasnsCond3] 和[TransCond4]。如果都不为真,终止序列框3502,并记录其隐含的终点名称或其内部 的代号。

直接结束点可由序列框里面的ActivityFinalNode来模拟。当ActivityFinalNode执行 时,终止包含它的复合断言节点,并且将复合断言节点的“结果”属性设为与 ActivityFinalNode所模拟的结束点相关联的结束值。例如,图4中的直接结束点 “Result0”410是由从decision node3509指向的“Result0”ActivityFinalNode3501所模拟 的。该decision node有一个带有[TransCond2]guard的往外的ActivityEdge。如果 [TransCond2]为真,“Result0”ActivityFinalNode开始执行。当它开始的时候, “Result0”ActivityFinalNode终止了“Pred0”复合断言节点,并且设其“结果”属性为与 “Result0”ActivityFinalNode所模拟的结束点相关联的结束值。

在UML中,由断言节点来模拟复合断言中的并行子断言,该断言节点既可以是简 单断言节点,也可以是复合断言节点,这取决于被模拟的子断言是简单的还是复合的。 一个模拟并行子断言的断言节点有一个和被模拟的子断言有同样的名字以及一个指向join  node的往外的ActivityEdge。例如,图4中的并行子断言“Sub-pred5”由图35中的 “Sub-pred5”节点3507模拟。如果图4中的“Sub-pred5”子断言是一个简单断言,则图 35中的”Sub-pred5”是一个简单断言节点。否则,图35中的”Sub-pred5”是一个复合断言 节点。

将所有序列框和模拟并行子断言的断言节点都合并在一起的join node有一个默认 为“and”的JoinSpec,使得当来自每个序列框或者模拟并行子断言的复合节点的token都 抵达时,join node就完成了。例如,图35中的join节点3503有默认的JoinSpec。

在UML中,一个复合断言的间接结束点的模拟方式如下:一个ActivityEdge从join node指向一个decision node,再从该decision node用ActivityEdge指向ActivityFinalNode。 每个间接结束点是由一个往外的ActivityEdge从decision node指向一个ActivityFinalNode 来模拟的。每个结束点的结束条件则由指向一个模拟结束点的ActivityFinalNode的 ActivityEdge的guard来模拟。当一个ActivityFinalNode执行时,包含它的复合断言节点 就终止,并且设其“结果”属性为与该ActivityFinalNode所模拟的结束点相关联的结束值。 如图35所示,join node3503有一个往外的ActivityEdge指向了一个decision node3508。 decision node3508有一个带有[ExitCond1]guard的往外的ActivityEdge指向了名为 “Result1”的ActivityFinalNode。它模拟了图4中“Pred0”复合断言400中的“Result1” 结束点411。decision节点3508有另一个带有“ExitCond2”guard的往外的ActivityEdge 指向了另一个名为“Yes”的ActivityFinalNode。它模拟了图4中的“Yes”结束点412。

复合断言的隐含结束点的行为在UML中可以用如下方式来模拟:如果decision  node的所有往外的ActivityEdge的guard都不为真,包含它的复合断言节点被终止,其 “结果”属性设为与隐含结束点相联系的结束值。如图35所示,如果[ExitCond 1]和 [ExitCond2]都不为真,“Pred0”复合断言节点3500终止,其“结果”属性被设为与隐含结 束点相关联的结束值。

基于同样的方法,图29中的“D2”复合断言可以由图36中的“D2”复合断言节点 3600来模拟。更明确地来说,“Yes”结束点是如下来模拟的:从decision node3601有一 个往外的指向“Yes”ActivityFinalNode3602的ActivityEdge,并且这个往外的ActivityEdge 的guard是[全为正],这意为:“如果所有的序列框和模拟并行子断言的断言节点都运算为 正的结果。”

如果一个复合断言所有的结束点都是直接结束点,那么在UML中模拟这个复合断 言时不必有joinnode和decisionnode。另外,每个代表序列框的虚线框也可以省略掉。例 如,图31中的“Pred5”复合断言可以由以UML图37中的“Pred5”3700复合断言节点来 模拟。图37中的“Sub-pred1”,“Sub-pred2”,“Sub-pred3”,和“Sub-pred4”模拟了图 31中“Pred5”复合断言3100中的同名子断言。图37中的每个ActivityFinalNode,比如 “Result0”、“Result1”和“Result3”则模拟了图31中“Pred5”复合断言3100的同名结束 点。

在UML中,可用简单断言节点来模拟复合断言中的简单子断言。简单断言节点是 UML中一种特殊的Action类型,它有一个“结果”属性。当简单断言节点执行完成之后, 其结果可以设为一个正值或者一个非正值。

复合断言节点在扩展后的UML中的使用方式和图23中所示的使用复合断言的方式 一样。图38A显示了:图35中的“Pred0”复合断言节点3500是如何被用作一个decision  node3800,来从“A”,“C”和“E”中选择下一步要执行的Activity。该“Pred0”复合断言 节点模拟了图4中的“Pred0”复合断言400。

图38B显示了使用复合断言节点来制定决策的另一种方式。和图25所示的将复合 断言作为一个Activity的用法类似,图35中的“Pred0”复合断言节点3500在图38B中被 用作“B”Activity的往外的sequence flow的目标节点3801。“Pred0”复合断言节点3801 有一个往外的edge指向了decision node3802,并且该decision node有3个往外的 ActivityEdge。每个ActivityEdge的guard定义了:如果“Pred0”3801的“结果”属性运算为 与某个结束点相关联的结束值,将会执行相关联的ActivityEdge。

在一种图形语言中来模拟复合断言:

上述在BPMN和UML中模拟复合断言的方式可以推广应用到其他类似的图形建模 语言中。

为了模拟复合断言,下面的新组件可以扩展到一种图形语言中:1)模拟复合断言 的复合断言节点;2)模拟一个序列的序列框;3)模拟终点的终止节点;4)模拟结束点 的结束节点;5)一个联结了复合断言节点中所有序列框和断言节点的合并分叉节点;6) 模拟一个简单断言的简单断言节点。为了简化起见,复合断言节点和简单断言节点也被 称作断言节点。

在一个图形语言中,一个复合断言节点可以模拟一个复合断言。一个复合断言节 点可以有一个“结果”属性来存储它终止后的结果,它模拟了复合断言的“结果”属性。一 个复合断言节点可以显示为一个框,它包含了序列框和模拟并行子断言的断言节点。这 些模拟并行子断言的断言节点和序列框都由一个合并分叉节点结合起来,该合并分叉节 点后面跟着指向多个结束节点的有条件的箭头。例如,用一种一般的图形语言,图4中的 复合断言“Pred0”400可以由复合断言节点“Pred0”3900来模拟,如图39所示。序列框 3901、序列框3902、模拟并行子断言的断言节点“Sub-pred5”和“Sub-pred6”由合并分叉 节点3907结合起来,其后跟着指向结束节点“Result1”和“Yes”的有条件的箭头。注 意:一种图形语言通常用节点(node)来表示要做的一些活动(activity),而用箭头来将一个 节点连接到另一个节点。因为BPMN与一般图形语言的形式较类似,这里用BPMN的图 形语言为例来说明在一般的图形语言中如何模拟复合断言。

一个序列框可以包含多种类型的节点,包括模拟顺序型子断言的断言节点、终止 节点和结束节点,并且每个节点由有条件箭头连接到其它节点。如图39所示,序列框 3902包含了模拟顺序型子断言的断言节点“Sub-pred3”和“Sub-pred4”、终止节点 “EP2”和“EP3”以及结束节点“Result3”。

因为模拟断言节点的每个子断言也可以是一个复合断言节点,所以一个复合断言 节点可以是嵌套的。如图39所示,“Sub-pred3”可以是一个复合断言节点。

复合断言中的简单子断言可以由简单断言节点来模拟,简单断言节点是在图形语 言中用来代表单一执行步骤的一个组件,比如BPMN中的Task和UML中的Action。和 复合断言节点一样,简单断言节点有一个“结果”属性。执行完之后,其“结果”属性被设 为一个正值或者一个非正值。

虽然在上面的描述中,复合断言节点中的各个组件是以某种语言来显示的,但在 本发明的具体实现中,每个组件可以用另一种不同的图形语言来显示而不影响其功能。 例如,图39中的终止节点显示为但在另一个实施例中,终止节点可以显示为实心方 框。而在另一个实施例中,终止节点可以显示为空心方框。只要每种组件类型都有一个 独特的图形显示方法使得它们能彼此区分开来,本发明的功能就不会削弱。

在一种图形语言中来模拟复合DS:

上文描述了如何在其他图形语言中来模拟复合断言。同样的方法也可以用在其他 图形语言中来模拟一个复合DS,因为复合DS和复合断言有几乎同样的复合结构。

复合DS去掉了对复合断言的某些限制,所以可以看成是对复合断言的一种推广。 复合断言中的每个序列中可能只有一个初始子断言,而复合DS中的每个序列中则可能有 多个初始子DS。复合断言中的迁移条件和结束条件有更多限制,而复合DS中,除了在 复合断言中可以定义的内容之外,其迁移条件和结束条件还可以用任何复合断言或者简 单断言来定义。

由于其组成结构的相似性,可以把图19所示的对复合断言“pred”的执行过程 “evalPred(pred)”1900修改成描述一个名为“DS”的复合DS的执行过程evalDS(DS),只 要把过程1900中的每个“pred”或“Pred”都改成“DS”即可。换句话说,一个复合DS的 执行类似于一个复合断言的执行。唯一的不同是:evalPred(pred)过程是针对一个复合断 言和其所有的子断言来执行,而evalDS(DS)过程则是针对一个复合DS和其所有的子DS 来执行。

因此,上述在其他图形语言中模拟复合断言的方式可以推广应用到复合DS中。一 个图形语言通常使用节点(node)表示要做的活动,并且通过箭头把一个节点连接到另一个 节点。因为BPMN类似于此类图形语言的一般形式,这里使用BPMN图形语言作为一个 例子来示范如何在此类图形语言中模拟复合DS。

为了模拟一个复合DS,下面一些新的组件可以扩展到一个图形语言中:1)模拟复 合DS的复合DS节点,2)模拟复合DS中序列的序列框,3)模拟序列中起点的起始节 点,4)模拟序列中终点的终止节点,5)模拟结束点的结束节点,6)用来结合所有在复 合DS中的序列框和模拟并行子DS的DS节点的合并分叉节点,7)模拟一个简单DS的 简单DS节点。为了简化起见,复合DS节点和简单DS节点也叫做DS节点。

复合DS节点是用来模拟一个复合DS的。一个复合DS节点可以有一个“结果”属性 来模拟复合DS的”结果“属性,它用来存储一个复合DS节点终止后的执行结果。另外, 一个复合DS节点可以包括:1)多个序列框,2)复合DS中多个模拟并行子DS的DS节 点,3)一个合并分叉节点,4)多个间接结束节点。例如,图3中“DS0”复合DS 300可 以由图40所示的“DS0”复合DS节点4000来模拟。

复合DS的每个序列都是由复合DS节点中的一个序列框来了模拟的。该序列框可 以有:1)多个用来模拟序列中顺序型子DS的DS节点,2)将一个序列框中的DS节点 连接起来的箭头,3)多个起始节点,4)多个终止节点,5)多个直接结束节点。一个序 列框可以显示为虚线框,并且由一个往外的箭头连接到合并分叉节点。例如,图40中的 序列框4001模拟了图3中“DS0”复合DS300中的第一个序列,而序列框4002则模拟了 第二个序列。图40中,每个序列框都有1个往外的箭头指到合并分叉节点4007上。

一个序列框中,每个DS节点都模拟了序列中的一个顺序型子DS。例如,在序列框 4002中,图40中的“Sub-DS3”,“Sub-DS4”和“Sub-DS5”模拟了图3中“DS0”复合 DS300的第二个序列中的各个同名的子DS。如果一个子DS是简单DS,则由一个简单 DS节点来模拟。否则,由序列框中的一个复合DS节点来模拟。

序列中的起点可以由起始节点来模拟。例如,图3中的起点309由图40中的起始 节点4009来模拟。

一个序列中从一个源头指向多个目标的每个迁移箭头都是由一个从模拟源头的节 点指向一个模拟目标的节点的箭头来模拟的。另外,和每个迁移箭头相联系的迁移条件 则用一个与箭头相关联的条件属性来模拟。这个条件属性可以显示在箭头附近。例如, 图3中的“cond3”迁移在图40中是由从起始节点4009指向“Sub-DS3”的箭头来模拟的, 其条件属性“cond3”则显示在箭头附近;图3中的“cond4”迁移在图40中是由从起始节 点4009指向“Sub-DS4”的箭头来模拟的,其条件属性“cond4”则显示在箭头附近。另一 个例子中,图3中的迁移“TransCond3”和“TransCond4”是由指向“EP2”4003和指向 “Sub-DS5”的箭头来模拟的,如图40所示。

序列中的终点可以由终止节点来模拟。为了将终止节点和起始节点及结束节点区 分开来,终止节点可以显示为例如,图3中的“EP2”终点307在图40中由同名的 4003终止节点来模拟。当到达终止节点时,模拟一个终点的终止节点需要记录它所模拟 的终点的名字或其内部代号。该信息后面将被每个结束条件使用,来检验复合DS是否应 当在其对应的结束点处结束。

一个序列中,隐含终点的行为是这样来模拟的:源头执行完之后,如果源头的每 个往外的箭头的条件属性都不满足,模拟该序列的序列框就终止了,并且记录下其隐含 终点的名字或其内部的代号,以备后面被结束条件检查。如图40所示,“Sub-DS3”完成 之后,检验每个往外的箭头的条件属性,比如“cond5”和“cond6”。如果它们都不为 真,序列框4002就终止,并且记录下其隐含的终点名称或其内部的的代号。

直接结束点是由一个序列框内部的结束节点来模拟的。当这个结束节点执行时, 包含它的复合DS节点就终止了,将其“结果”属性设为被与该结束节点所模拟的结束点相 关联的结束值。例如,图3中的直接结束点“Result0”311在图40中是用“Result0”结束 节点4011来模拟的。如果“cond2”4010为真,“Result0”结束节点4011开始执行,它终 止了“DS0”复合DS节点4000,并且将其“结果”属性设为与被“Result0”结束节点所模拟 的结束点相关联的结束值。

复合DS中每个并行子DS既可以由一个简单DS节点来模拟,也可以由一个复合 DS节点来模拟,这取决于该并行子DS是简单的还是复合的,并且模拟子DS的这个DS 节点只有一个指向合并分叉节点的往外的箭头。例如,图3中,并行子DS“Sub-DS6” 在图40中是用“Sub-DS6”4006来模拟的,它既可以是复合DS节点,也可以是简单DS 节点,这取决于图3中的“Sub-DS6”是简单的还是复合的。

用来结合复合DS中所有序列框和模拟并行子DS的DS节点的合并分叉节点有如下 行为:当每个序列框或者模拟并行子DS的DS节点终止时,所有合并分叉节点的往外的 箭头的条件属性都会被检查。如果这些条件属性中有任何一个为真,包含它的复合DS就 结束,并且其“结果”属性被设为与由带有“真”条件属性的结束节点模拟的结束点相关联 的结束值。否则,合并分叉节点会继续等待。在本图形语言的实施例中,合并分叉节点 显示为里面为“?”的菱形。例如,图40中,合并分叉节点4007合并了序列框4001和 4002,以及“Sub-DS6”DS节点4006。

复合DS的一个间接结束点可以由一个结束节点来模拟,该结束节点有一个来自合 并分叉节点并指向它的箭头。每个结束点的结束条件由一个条件属性来模拟,这个条件 属性和指向相对应的结束节点的箭头是相关联的。当执行到一个结束节点时,包含它的 复合DS节点就终止了,并且包含它的复合DS节点的“结果”属性被设为与被模拟的结束 点相关联的结束值。如图40所示,合并分叉节点4007有一个条件属性为“ExitCond 1”的 箭头4008指向“Result1”结束节点。它模拟了图3中“DS0”复合DS 300的“Result1”结束 点312。为了模拟一个复合DS的完整的功能,每个箭头的条件属性可以定义为以下之 一:1)一个简单断言节点;2)一个复合断言节点;3)运算为正的终止值的序列数目,包 括“等于N”、“大于等与N”、“小于等于N”。

复合DS的隐含结束点可以用如下方式来模拟:如果这些指向结束节点的箭头所相 关联的条件属性都不为真,包含它的复合DS节点就终止,并且其“结果”属性被设为与隐 含结束点相关联的结束值。如图40所示,如果“ExitCond 1”和“ExitCond 2”都不为真, “DS0”复合DS节点4000就结束,并且其“结果”属性设为与隐含结束点相关联的结束 值。

如果复合DS中的子DS是个简单DS,它由简单DS节点来模拟。和复合DS节点 一样,简单DS节点有一个“结果”属性。其操作完成之后,“结果”属性可以设为反映其执 行状态的一个值。

为了在BPMN中模拟一个复合DS,这些添加到一般图形语言中的新组件可以进一 步映射到如下所添加到BPMN中的新组件:1)简单DS节点被映射到简单DS活动,2) 复合DS节点被映射到复合DS活动,3)起始节点被映射到BPMN的Start Event,4)终 止节点被映射到终点事件,5)箭头既可以被映射到BPMN的一个sequence flow,也可以 被映射到BPMN的一个conditional sequence flow,6)每个箭头的条件属性被映射到与每 个conditional sequence flow相关联的BPMN的ConditionExpression属性,7)结束节点被 映射到BPMN的一个End Event,8)合并分叉节点被映射到一个结束-Gateway。为了 简化起见,复合DS活动和简单DS活动也被叫做DS活动。下面提供了详细阐述。

在BPMN中,简单DS活动是一种特殊的Task类型,它有一个“结果”属性。完成之 后,其“结果”属性可以设为一个反映其执行状态的值。

在BPMN中,复合DS活动是一种特殊的sub-process。它可以有一个“结果”属性来 模拟复合DS的“结果”属性,来存储与被模拟的复合DS终止处的结束点相关联的结束 值。另外,复合DS活动还包含了复合DS中的多个序列框,多个模拟并行子DS的DS活 动,一个结束-Gateway和多个End Event。

序列框也是BPMN中一种特殊的sub-process。它和BPMN中一般的sub-process类 似,唯一不同的是:到达一个内部End Event不仅会终止该序列框,还会结束包含该序列 框的模拟复合DS的复合DS活动。每个序列框都是由sequence flow连接到结束-Gateway 上的。

从一个源头指向多个目标的迁移箭头在BPMN中由从源头指向其目标的conditional  sequence flow来模拟。这里的一个源头可能是一个起始节点、一个简单DS活动或者一个 复合DS活动,而每个目标可能是一个终止节点,一个简单DS活动或者一个复合DS活 动。另外,与每个迁移箭头相关联的迁移条件在BPMN中由和模拟迁移箭头的每个 conditional sequence flow相关联的ConditionExpression属性来模拟。

模拟一个终点的终点事件是增加到BPMN中的一种新的Event类型。它有一个名字 属性,设为与被模拟的终点一样的名字。到达一个序列框中的终点事件时,该序列框就 终止。并记录下刚到达的终点事件的名字或其内部的代号以备稍后的检验。为了和 BPMN中的其它Event相区分,一个终点事件可以显示为

在BPMN中,模拟结束点的是一种特殊的End Event。其名称属性被设为和被模拟 的结束点同名。一个间接结束点的结束条件可以定义在ConditionExpression属性中,该 属性是关联到一个从结束-Gateway指向它的往外的sequence flow。这种特殊的End  Event有如下行为:到达End Event时,包含它的复合DS活动就结束了,并且该复合DS 活动的“结果”属性设为与被模拟的结束点相关联的结束值。

BPMN中,复合DS中每个并行子DS可以由一个简单DS活动或者一个复合DS活 动来模拟,该简单DS活动或复合DS活动有1个往外的sequence flow指向结束- Gateway。

结束-Gateway是一个添加到BPMN中的新的Gateway类型。它支持前面所述的合 并分叉节点的行为。为了和BPMN中其它的Gateway区分开来,结束-Gateway显示为里 面带有“?”的菱形。

通过这种模拟方法,图3中的“DS0”复合DS300在BPMN的扩展版中可以由图40 所示的“DS0”复合DS活动4000来模拟。

为了在UML活动图中模拟复合DS,这些添加到一般图形语言中的新组件可以进一 步映射到以下所添加到UML中的新组件中:1)起始节点被映射为InitialNode;2)终止 节点被映射为FlowFinalNode;3)决策节点后面的箭头被映射为ActivityEdge;4)每个箭 头的条件属性被映射为和每个ActivityEdge相联系的guard;5)结束节点被映射为 ActivityFinalNode;6)合并分叉节点被映射为一个join node,后面跟着一个往外的 ActivityEdge指向一个decision node。为了简化起见,复合DS节点和简单DS节点也被叫 做DS节点。下面提供了详细阐述。

UML中,简单DS节点是一种特殊类型的Action,它有一个“结果”属性。完成之 后,其“结果”属性设为反映其执行状态的一个值。

复合DS节点是新加到UML中的一种特殊Activity。它有一个“结果”属性来模拟一 个复合DS的结果属性,用来存储终止后的结果。另外,一个复合DS节点包含了多个序 列框,模拟复合DS中的并行子DS的多个DS节点,一个join node,一个decision node 和多个ActivityFinalNode。

序列框是一种新加到UML中的特殊Activity。它和ULM中其他一般的Activity类 似,唯一不同的是:当内部的ActivityFinalNode执行时,不只是序列框会终止,包含它的 复合DS节点也会终止。每个序列框都有一个指向一个join node的往外的ActivityEdge。

在UML中,从一个源头指向多个目标的迁移箭头是由从模拟源头的节点指向一个 decision node的ActivityEdge来模拟的,它有一个模拟每个源头子DS的迁移箭头的往外 的ActivityEdge。另外,在UML中,和每个迁移箭头相关联的迁移条件是由模拟迁移箭 头的ActivityEdge的guard来模拟的。

在UML中,模拟终点的FlowFinalNode类似于UML中一般的FlowFinalNode,不 同的是当抵达FlowFinalNode时,模拟一种终点的FlowFinalNode需要记录下被模拟的终 点名称或其内部ID。

UML中模拟一个结束点的ActivityFinalNode类似于UML中的普通 ActivityFinalNode,不同的是当抵达ActivityFinalNode时,包含它的复合DS节点终止, 并设复合DS节点的“结果”属性为与被模拟的结束点相关联的结束值。

在复合DS中,模拟并行子DS的简单DS节点或者复合DS节点有一个从它指向join  node的往外的ActivityEdge。

由合并分叉节点所映射的join node有一个默认为“and”的JoinSpec,使得当一个来 自模拟一个序列或者一个并行子DS的每个节点的token到达后,该join node也就完成。

在UML中,一个复合DS的间接结束点可以由一个从join node指向一个decision  node的ActivityEdge及其后面一个指向ActivityFinalNode的ActivityEdge所模拟。每个间 接结束点由一个从decision node指向一个ActivityFinalNode的往外的ActivityEdge来模 拟。每个结束点的结束条件则由这个指向相对应的ActivityFinalNode的往外的 ActivityEdge的guard来模拟。

用这种模拟方法,在UML扩展版中,图3中的“DS0”复合DS300可以由图41 所示的“DS0”复合DS节点4100模拟。

用这种方法,一个嵌套的复合DS也可以由一种图形语言的复合DS节点来模拟, 比如BPMN或者UML。例如,图42中显示了一个嵌套DS“DS1”。它的一个子 DS“Sub-DS1”4201包含了2个子DS——“Sub-DS4”和“Sub-DS5”。图43显示了在 BPMN扩展版或者类似的图形语言中如何由“DS1”复合DS节点4300来模拟图42中的 “DS1”4200。图44显示了在UML扩展版中如何由“DS1”复合DS节点4400来模拟图 42中的“DS1”4200。

结论

本发明中描述的图形语言是灵活的、而且是组件化的。它适用于对复杂行为的结 构化和组件化的设计。因此,在计算机系统生命周期的多个阶段都可以用到本发明。在 本发明的一个实施例中,用户可以在一个设计工具中编辑和展示上述用图形语言及其扩 展描述的计算机系统行为定义。在本发明的另一个实施例中,用户可在监控工具中监控 上述用图形语言及其扩展描述的被监控的计算机系统在运行时的操作。但在另一个实施 例中,计算机系统自身也可在图形显示器中用上述图形语言及其扩展来显示其在运行时 的执行。

这些工具内部,可以由多种可能的内部表现方法之一来实施上面描述的DS和断 言。一种内部表现方法可以是一种编程语言的数据结构形式,比如C或者Java。另一种 内部表现方法是以数据描述语言(data description language)的形式,比如XML。DS组 件或者断言组件一旦以一种可以被计算机程序读取的形式被内部地表示出来,比如Java 程序,那么即使没有用这些图形语言来显示其行为,本发明也可以有所裨益。

类似地,本发明的另一个实施例可以直接在计算机程序代码中嵌入本发明所描述 的DS和断言的部分结构。例如,计算机程序为了将一个结束值关联到某个结束点,可以 为每个隐含结束点在计算机代码中直接设为零,而不用以数据结构来存储其值。

从另一方面来看,不是所有的DS和断言都需要由软件来自动化或者由硬件来执 行。一个实施例可以使用这些结构以DS和断言组件来定义人类的活动、业务流程或者行 动计划。这些DS和断言组件中有一些可以由软件或者硬件来实施,而另一些则可由人以 手工来实施。

虽然上面的描述包含了许多详细说明,但这些详细说明仅仅是为了提供对本发明 描述的实施例作一些阐述,而不应当视为对本发明的范围做了任何限制。基于这里提供 和阐述的内容,本技术领域里的一般人可以在本发明的范围内扩展到其他的各种实现及 应用上。

例如,与结束点或者终点相关联的结束值可以通过下面的一种方式来实施:比如 一个无符号整数、一个整数或者一个字符串。在本发明的另一个实施例中,可以用零或 者一些负数来表示一个非正结果,而用正数来表示正的结果。在本发明的另一个实施例 中,大于或者等于某个边界值的数可以用于表示一个正值的结果;而小于或者等于某个 边界值的数则可以用于表示一个非正值的结果。在本发明的另一个实施例中,一个非零 数可用于表示一个正的结果,零则可用于表示一个非正的结果。在另一个实施例中,也 可使用一个字符串来表示一个负结果,比如“No”或者“false”,而用其他不同的字符 串来表示正的结果。在本发明的一个实施例中,也可将结束值和结束点的名字联合在一 起。例如,某个名字可用于表示一个非正结果,比如“No”,而用户定义的任何其他名字 可用于表示一个正的结果。

本发明的一个实施例中,为方便起见,某个结束点的结束值或者某个终点的终止 值可以由编辑工具自动分配,而在另一个实施例中,为灵活起见,设计者可以定义这些 值。但在另一个实施例中,结束点的名字串本身即可能用作为结束点的结束值,反之亦 然。

当序列到达一个终点,一个实施例可以记录下刚刚到达的终点名称,使得结束条 件稍后可以检验它。但是,另一个实施例可以通过记录和每个终点相关联的唯一的内部 标识符来更有效率地达到同样的目的。

本发明中的一些名字可以用其它名字来代替。例如,隐含结束点“No”也可以用 “False”或者“negative”来代替。

本发明中描述的许多组件有一个可视化的表现。虽然本发明中用到了某种可视化 的形式,但是也可以用其他可视化的形式来表现。例如,结束-Gateway不仅可以显示为 里面有一个问号的菱形,也可以显示为六边形或其他形状。举另一个例子,在本发明 中,结束点的名字和条件以两个独立的文本显示在结束点附近。在本发明的一个实施例 中也可以将它们显示在同一个文本中,比如“name:condition”。

虽然本发明中描述了许多组件,但在应用中不是所有的组件都会被用到。例如, 图20中的“D1”复合断言2000没有并行子断言。另一个例子图28中,“D2”复合断言 2800既没有任何序列也没有结束点。

为了进一步澄清这点,这里提供了更多的例子。图45显示了带有一个子简单断 言”simp-pred0”和一个间接结束点”ExitCond1”的复合断言例子。图46显示了带有一个 子复合断言”pred1”和一个间接结束点”ExitCond1”的复合断言例子。图47显示了带有 一个子简单断言、一个迁移和一个间接结束点”ExitCond1”的复合断言例子。图48显示 了带有两个子简单断言”simp-pred1”、”simp-pred2”和一个间接结束点”ExitCond1”的 复合断言例子。图49显示了带有一个子简单断言”simp-pred0”、一个子复合断 言”pred1”和一个间接结束点的复合断言例子。图50显示了带有一个子简单断 言”simp-pred0”、一个迁移和一个直接结束点的复合断言例子。图51显示了带有两个子 简单断言”simp-pred0”、”simp-pred1”、一个迁移和一个直接结束点的复合断言例子。 图52显示了带有一个子复合断言”pred2”、一个迁移和一个直接结束点的复合断言例 子。

本应用中所描述的任何软件组件或者功能都可以用程序代码来实施,而被一个或 者多个处理器来执行,这些程序代码可以使用任何合适的计算机语言,例如,Java,C++ 或者Perl,而开发的方法则可用传统的或者面向对象的技术。程序代码可以作为一系列的 指令或者命令存储在计算机中的可读介质上以便于存储和/或传输,合适的介质包括了随 机访问内存(RAM),只读存储器(ROM),磁性介质,比如硬盘或者软盘,或者光学介质,比 如光盘(CD)或者DVD(数字多功能磁盘),闪存,诸如此类。计算机可读介质可以是这些 存储或者传输设备中的任何形式的结合。

这种程序代码也可以通过遵守各种协议,包括因特网协议,的有线的、光学的、 和/或无线的网络来使用适合传输的载波信号进行编码和传输。同样地,根据本发明的一 个实施例,一个计算机可读介质可以使用一个用这种程序代码编码的数据信号来创建。 这种用程序代码编码的计算机可读介质也可以由一个兼容的设备来包装,或者由其他设 备单独提供(例如,通过网络下载)。任何这种计算机可读介质可以保存在一个单独的计 算机程序产品中(比如,硬盘驱动器或者整个计算机系统),也可以放在一个系统或者网 络中不同的计算机程序产品中。一个计算机系统可能包括一个显示器、打印机或者其他 合适的显示设备来给用户提供这里谈到的任何结果。当程序代码被加载到实质的计算机 设备上或者在机器上执行时,该机器即实施了本发明。

由此可见,依据本发明,所描述的DS、断言和与相关的GUI组件的表示和过程, 当用在定义许多计算机系统的复杂行为时,是一个很强大的技术。特别是,本发明在以 下的一些主要领域里扩展和改进了之前的一些技术,比如BPMN,XPDL,WS-CDL或者 UML。

第一,即使复杂决策也可以被图形化地用复合断言来显示。以至于更多的行为都 可以用图形来表现,而不须依赖代码和数据。如须依赖代码或者数据,在设计和维护上 都会造成困难。第二,复合断言中直接支持顺序型子断言和并行子断言。这种灵活性让 我们可以用组件化的和简洁的方式在更广泛的范围中来定义复杂的决策行为。第三,支 持多个正的结束值,使得多个布尔型决策可以合并成一个复合断言,以提高性能。第 四,自动提供了隐含结束点和隐含终点的行为,使得设计被大大地简化了。第五,通过 提供强大并且灵活的组合结构,可以消除掉设计上的一些复杂性。例如,在BPMN中复 合DS和复合断言的模拟只用了一种结束-Gateway,就可以取代了BPMN中所有的四种 Gateway类型和其各种的组合方式。

为了说明和阐述本发明,上面的描述中给出了许多本发明的实施例。但提供这些实施例 的并非用这些固定形式来限制本发明,根据上文的描述,对本发明还应该可以做出多种 修改和变化。之所以选择了以上所描述各种实施例和各种形式,其目的是为了更好的解 释本发明的原则及其应用,以便于本领域的技术人员能更好地使用本发明。以上所引用 的出版物,专利或专利申请,在此以引证的方式并入其全部内容。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号