Verb is operation:
Noun is event target:
Identified by some criteria: ID and data type with hierarchy,
The data type hierarchy is the full stack of inheritance. For example, an MR session is:
You could say you want an xnat:mrSessionData or an xnat:experimentData and the MR session would match either one.
data types, etc.
Each event will have a payload. How are these defined?
Many "events" aren't discrete points in time, so events also require status: started, completed, failed, etc. Unlike workflows, these aren't persisted as a unique timeline. We may need some way to associate events across an entire operation, but we can revisit later.
Definition of the noun will depend on the particular operation and context and would be defined in the event itself.
Event responders would be the way to wire to a data event. The basic event responder interface would indicate whether an event should be accepted and something about the event payload. Different base implementations for, e.g., handling events by data type, by other attributes.
This really is IFTTT.
An API to get sample events.