Events have structure. They have a type and attributes that have values. Events also include a domain that can be used to group events together--forming a two-tier hierarchy. We want to write patterns that can match the components of this structure using primitive event expressions to recognize the occurrence of individual events.