sequenceRule 元素

<sequenceRule> 元素将根据序列模式来定义规则。序列规则是唯一允许多 个事件选择器的规则。 最少需要两个事件选择器。

属性

<sequenceRule> 具有以下属性:

表 1. <sequenceRule> 元素的属性
名称 描述 数据类型 必需?
name 标识规则。该标识在包含该规则的规则块中必须是唯一的。 不得包含句点。 xsd:NMTOKEN
processOnlyForwardedEvents 确定规则是接收所有事件还是仅接收从其他规则转发的事件。 缺省值为 false,表明规则将接收所有事件,包括从其他规则转发 的事件。 xsd:boolean
arrivalOrder 定义事件是否必须按为规则编写 <eventSelector> 元素代码的顺序到达。有效值为:
  • inOrder(缺省值)
  • randomOrder
xsd:string

如果 arrivalOrder 属性的值为 randomOrder,则编写 <eventSelector> 元素的顺序十分重要。 带有最为具体的事件选择条件的 <eventSelector> 元素应在带有不太具体的事件选择条件的 <eventSelector> 元素之前进行编写。否则,应检测到序列时检测不到序列。

例如,假定以下情况:
  • 定义了 3 个 <eventSelector> 元素。
  • 第 1 个 <eventSelector> 元素将检查事件 eventA
  • 第 2 个 <eventSelector> 元素将检查任一事件。
  • 第 3 个 <eventSelector> 元素将检查事件 eventB
  • 系统在指定的时间窗口中存在下列事件:eventAeventBeventC
规则行为如下,结果应检测到序列时检测不到序列:
  1. 第 1 个 <eventSelector> 元素接受第 1 个事件 eventA
  2. 第 2 个 <eventSelector> 元素接受第 2 个事件 eventB
  3. 忽略第 3 个事件 eventC
假定以下情况,其中已正确编写 <eventSelector> 元素代码,并且最具体的事件选择条件列在不太具体的事件选择条件之前:
  • 第 1 个 <eventSelector> 元素将检查事件 eventA
  • 第 2 个 <eventSelector> 元素将检查事件 eventB
  • 第 3 个 <eventSelector> 元素将检查任一事件。
规则行为如下,结果检测到序列:
  1. 第 1 个 <eventSelector> 元素接受第 1 个事件 eventA
  2. 第 2 个 <eventSelector> 元素接受第 2 个事件 eventB
  3. 第 3 个 <eventSelector> 元素接受第 3 个事件 eventC

包含于

<sequenceRule> 包含于以下元素中:

包含

<sequenceRule> 包含以下元素。

必须将这些元素按所显示的顺序进行编码。如果某个元素为可选元素,则可以不对其进行编码,但所有已编码的元素都必须按照正确的顺序。

表 2. <sequenceRule> 元素中包含的元素
元素 必需或可选?
<comment> 可选。允许出现 0 或 1 次。
<variable> 可选。允许出现 0 次或多次。
<activationInterval> 可选。允许出现 0 或 1 次。
<lifeCycleActions> 可选。允许出现 0 或 1 次。
<eventSelector> 对于序列规则,要求该元素出现 2 次。允许出现更多次。
<groupingKey> 可选。允许出现 0 或 1 次。
<timeWindow> 必需。仅允许出现 1 次。
<onDetection> 可选。允许出现 0 或 1 次。
<onTimeOut> 可选。允许出现 0 或 1 次。
相关概念
序列模式