我正在阅读Composite event specification in active databases: Model and implementation。在其中,描述了一种指定复合事件的方法,它类似于正则表达式。我先解释一下基础知识:事件历史记录。这些是原始事件的集合,每个事件具有唯一的时间戳(因此可以将它们视为序列,但可以对它们使用集合操作)。还有事件表达式。这些是从历史到历史的功能。应用于E
(h
)的表达式E[h]
是h
的子集,其中E
得到满足。例如,原始表达式a
与a匹配:
a[a, b, a, c, b] = a, a
(隐含时间戳)。
有这个运算符relative(E, F)
,它是这样定义的:
让E_i[h]
成为E[h]
中的第i个事件。通过删除时间戳小于或等于h_i
的时间戳的所有事件发生,从h
获取E_i[h]
。然后是relative(E, F)[h] = union over all i:s F[h_i]
。不那么正式地,relative(E, F)
是h
中的事件发生,F
满足h
,假设历史在E
relative(a, b)[b, c, a, c, b] = b
中发生的事件后立即开始relative+(E)
发生了。例如。 relative_1(E) = E
(第二个b,因为之前有一个a)。
现在,有一个运算符relative_i(E) = relative(relative_i-1(E), E)
,我不明白这一点。定义如下:
relative+(E) = union over all positive i:s relative_i(E)
relative+(E)
E
relative(E, E)[h]
与E[h]
的区别如何?我理解它的方式,E[h]
始终是{{1}}的子集,因此它们的联合将等于{{1}}。
答案 0 :(得分:1)
我明白了。要查看E[h]
和relative+(E)[h]
的结果之间的差异,E
需要比仅匹配特定类型的所有事件的基本表达式更复杂。例如:假设我们有一个事件表达式first
,它始终与历史记录中的第一个事件匹配。那么first[h]
当然是h
的第一个元素,而relative+(first)[h]
本身就是h
,因为它是h
中的第一个,然后是第一个h
等等。