Click on the Rule Name to see a detailed description of each rule!
For each rule a short description, the affected BPMN element and attribute and a quoted statement from a source document (mainly the specification, v.2.0) is provided.
All constraints have been published in a Technical Report:
Geiger, M.: BPMN 2.0 Process Model Serialization Constraints
Bamberger Beiträge zur Wirtschaftsinformatik und Angewandten Informatik Nr. 92, Bamberg University, May 2013. ISSN 0937-3349.
Download Full-Text, BibTeX
Further Material:
implicit
implicit
"The id is REQUIRED if this element is referenced or intended to be referenced by something else.
"It MUST follow the mime-type format. The default is 'text/plain."'
"A modeler or modeling tool MAY extend a BPMN diagram and add new types of Artifacts to a Diagram. Any new Artifact MUST follow the Sequence Flow and Message Flow connection rules [...] Associations can be used to link Artifacts to Flow Objects"
"An Artifact MUST NOT be a target for a Sequence Flow."
"An Artifact MUST NOT be a source for a Sequence Flow."
"An Artifact MUST NOT be a target for a Message Flow."
"An Artifact MUST NOT be a source for a Message Flow."
"It MUST follow the mimetype format. The default is 'text/plain."'
"For an End Event: If the Result is an Escalation, then the escalationCode MUST be supplied [...] For an Intermediate Event within normal flow: If the trigger is an Escalation, then the escalationCode MUST be entered [...] For an Intermediate Event attached to the boundary of an Activity: If the trigger is an Escalation, then the escalationCode MAY be entered."
"The Expression class is used to specify an Expression using natural-language text. These Expressions are not executable."
-
"The language MUST be specified in a URI format."
"LaneSets are not used for Choreographies or Sub-Choreographies."
<Gateway>
gatewayDirection
"Unspecified: There are no constraints. The Gateway MAY have any number of incoming and outgoing Sequence Flows." (Table 8.46)
<Gateway>
gatewayDirection
"Converging: This Gateway MAY have multiple incoming Sequence Flows but MUST have no more than one (1) outgoing Sequence Flow." (Table 8.46)
<Gateway>
gatewayDirection
"Diverging: This Gateway MAY have multiple outgoing Sequence Flows but MUST have no more than one (1) incoming Sequence Flow." (Table 8.46)
<Gateway>
gatewayDirection
"Mixed: This Gateway contains multiple outgoing and multiple incoming Sequence Flows." (Table 8.46)
"In cases where the data structure represents a collection, the multiplicity can be projected into the attribute isCollection."
"For a Process: Of the types of FlowNode, only Activities, Gateways, and Events can be the source. For a Choreography: Of the types of FlowNode, only Choreography Activities, Gateways, and Events can be the source." (Table 8.51)
"For a Process: Of the types of FlowNode, only Activities, Gateways, and Events can be the target. For a Choreography: Of the types of FlowNode, only Choreography Activities, Gateways, and Events can be the target." (Table 8.51)
implicit
<SequenceFlow>
isImmediate
false
for
executable processes."An optional boolean value specifying whether Activities or Choreography Activities not in the model - For an executable Processes no value has the same semantics as if the value were true. - For executable Processes, the attribute MUST NOT be false." (Table 8.51)
"If a conditional Sequence Flow is used from a source Activity, then there MUST be at least one other outgoing Sequence Flow from that Activity."
<SequenceFlow>
(sourceRef)
default
flow - the referenced sequence flow must reference the activity/the gateway as a sourceRef
.implicit
<Collaboration>
choreographyRef
"Note that this attribute is not applicable for Choreography or GlobalConversation"
<SequenceFlow>
sourceRef/targetRef
"The Sequence Flows can cross the boundaries between Lanes of a Pool [...], but cannot cross the boundaries of a Pool.
<ParticipantMultiplicity>
minimum
implicit
<ParticipantMultiplicity>
maximum
"The value of maximum MUST be one or greater, AND MUST be equal or greater than the minimum value."
"A Message Flow MUST connect two separate Pools. They connect either to the Pool boundary or to Flow Objects within the Pool boundary.
"A GlobalConversation is a restricted type of Collaboration, it is an 'empty Collaboration'. A GlobalConversation MUST NOT contain any ConversationNodes.
<Collaboration>
isClosed
"If a Collaboration contains a Choreography, then the value of the isClosed attribute MUST be the same in both."
"When a Lane (in a Process) represents a Conversation, the Flow Elements in the Lane (or elements nested or called in them)
"For public Processes, no value has the same semantics as if the value were false. The value MAY not be true for public Processes."
"Choreography Activities MUST NOT be included as a flowElement for a Process."
"The default value is 1. The value MUST NOT be less than 1."
<Activity>
completionQuantity
"The default value is 1. The value MUST NOT be less than 1."
<ResourceRole>
resourceRef / resourceAssignmentExpression
"resourceRef: Should not be specified when resourceAssignmentExpression is provided. [...] resourceAssignmentExpression: Should not be specified when a resourceRef is provided."\\
<ResourceRole>
resourceParameterBinding
"Is only applicable if a resourceRef is specified."
"BPMN specifies three types of markers for Task: a Loop marker or a Multi-Instance marker and a Compensation marker. The loop Marker MAY be used in combination with the compensation marker. [...] The multi-instance marker MAY be used in combination with the compensation marker. [...] The Compensation Marker MAY be used in combination with the loop marker or the multi-instance marker."
"The Service Task has exactly one inputSet [...]"
"The Service Task has [...] at most one outputSet."
"It has a single Data Input with an ItemDefinition equivalent to the one defined by
"If the Operation defines output Messages, the Service Task
"[...] constraints apply when the Send Task references a Message: The Send Task has at most one inputSet and one Data Input." (p.160)
"[...] constraints apply when the Send Task references a Message: The Send Task has at most one inputSet and one Data Input."
"If the Data Input is present, it MUST have an ItemDefinition equivalent to the one defined by the associated Message."
"This attribute MAY be set to true if the Task is the first Activity (i.e., there are no incoming Sequence Flows)." (p.162)
"The Receive Task has at most one outputSet"
"The Receive Task has [...] at most one Data output."
"If the Data output is present, it MUST have an ItemDefinition equivalent to the one defined by the associated Message."
<ScriptTask>
scriptFormat
"[...] And it MUST be specified if a script is provided."
"A collapsed Sub-Process MAY have one to three of these other markers, in all combinations except that loop and multi-instance cannot be shown at the same time."
"A collapsed Sub-Process MAY have one to three of these other markers, in all combinations except that loop and multi-instance cannot be shown at the same time."
<SubProcess>
flowElement
"Choreography Activities MUST NOT be included as a flowElement for a Process."
"An Event Sub-Process MUST NOT have any incoming or outgoing Sequence Flows."
"An Event Sub-Process MUST have one and only one Start Event."
<SubProcess>
EventDefinition
"The Start Event of an Event Sub-Process MUST have a defined trigger. \textbf{problematic:parallel multiple also allowed on pg. 260} \\
"For executable Processes, it SHOULD be set to a technology specific URI"
"The list of BPMN elements that MUST be used in an Ad-Hoc Sub-Process: Activity."
"The list of BPMN elements that MUST NOT be used in an Ad-Hoc Sub-Process:
<CallActivity>
InputOutputSpecification
"A Call Activity MUST fulfill the data requirements, as well as return the data
"When a CallableElement is exposed as a Service, it has to define one or more InputOutputBinding elements."
<CallableElement>
ioBinding
"An InputOutputBinding element binds one Input and one Output of the InputOutputSpecification to an Operation of a Service Interface."
"Only GlobalUserTask,GlobalManualTask, GlobalScriptTask, and GlobalBusinessRuleTask are defined in BPMN.
<MultiInstanceLoopCharacteristics>
"In order to initialize a valid multi-instance, either the loopCardinality Expression or the loopDataInput MUST be specified."
<MultiInstanceLoopCharacteristics>
loopDataInputRef
"For Tasks it is a reference to a Data Input which is part of the Activity's InputOutputSpecification."
<MultiInstanceLoopCharacteristics>
inputDataItem
"The type of this Data Input MUST the scalar of the type defined for the loopDataInput."
<MultiInstanceLoopCharacteristics>
outputDataItem
"The type of this Data Output MUST the scalar of the type defined for the loopDataOutput."
<MultiInstanceLoopCharacteristics>
CompletionCondition
"This attribute defines a boolean Expression [...]"
<ComplexBehaviorDefinition>
condition
"This attribute defines a boolean Expression [...]"
"Data Object elements MUST be contained within Process or Sub-Process elements."
"Data Objects cannot specify states."
<DataObjectReference>
itemSubjectRef
"Data Object Reference cannot specify item definitions"
"The names of Data Object References are derived by concatenating the name of the referenced Data Data Object the state of the Data Object Reference in square brackets as follows: <Data Object Name> [ <Data Object Reference State> ]."
<DataObject>
isCollection
"If an itemDefinition is referenced, then this attribute MUST have the same value as the isCollection attribute of the referenced itemDefinition."
"Certain flow elements MAY contain properties, in particular only Processes, Activities, and Events MAY contain Properties. [...] Property elements MUST be contained within a FlowElement."\\
<InputOutputSpecification>
"Certain Activities and CallableElements contain a InputOutputSpecification element to describe their data requirements.
"Data Inputs MAY have incoming Data Associations:
"If an itemDefinition is referenced, then this attribute MUST have the same value as the isCollection attribute of the referenced itemDefinition."
"Data Outputs MAY have outgoing DataAssociations.
"If an itemDefinition is referenced, then this attribute MUST have the same value as the isCollection attribute of the referenced itemDefinition."
"A single DataInput MAY be associated with multiple InputSet elements, but it MUST always be referenced by at least one InputSet."
<InputSet>
optionalInputRefs
"This association MUST NOT reference a DataInput that is not listed in the dataInputRefs."
<InputSet>
whileExecutingInputRefs
"This association MUST NOT reference a DataInput that is not listed in the dataInputRefs."
<InputSet/OutputSet>
outputSetRefs/inputSetRefs
"Specifies an Input/Output rule that defines which OutputSet is expected to be created by the Activity when this InputSet became valid.
"A single DataOutput MAY be associated with multiple OutputSet elements, but it MUST always be referenced by at least one OutputSet."
<OutputSet>
optionalOutputRefs
"This association MUST NOT reference a DataOutput that is not listed in the dataOutputRefs."
<OutputSet>
whileExecutingOutputRefs
"This association MUST NOT reference a DataOutput that is not listed in the dataOutputRefs."
"The ItemDefinition from the souceRef and targetRef MUST have the same ItemDefinition or the DataAssociation MUST have a
<DataAssociation>
sourceRef
"If there is no transformation defined or referenced, then only one source MUST be defined [...]"
"If the Event is associated with multiple EventDefinitions, there MUST be one Data Input (in the case of throw Events)
"For each EventDefinition and Data Input/Output pair, if the Data Input/Output is present, it MUST have an ItemDefinition
"These EventDefinitions are only valid inside the current Event."
"[...] the Start Event [...] will not have any incoming Sequence Flows"
"If there is an End Event, then there MUST be at least one Start Event."
"There are seven (7) types of Start Events for top-level Processes in BPMN (see Table 10.84): None, Message, Timer,
<CallActivity>
calledElement
"A top-level Process that has at least one None Start Event MAY be called by a Call Activity in another Process.
"There is only one type of Start Event for Sub-Processes in BPMN (see Figure 10.82): None."
"A Start Event MUST be a source for a Sequence Flow."
"A Start Event MUST NOT be a source for a Message Flow; it MUST NOT have outgoing Message Flows."
<StartEvent>
messageEventDefinition
implicit
"[...] the End Event [...] will not have any outgoing Sequence Flows" (p.246) & \newline
"If there is a Start Event, then there MUST be at least one End Event."
<EndEvent>
cancelEventDefinition
"This type of End is used within a Transaction Sub-Process."
"An End Event MUST be a target for a Sequence Flow. An End Event MAY have multiple incoming Sequence Flows."
"An End Event MUST NOT be the target of a Message Flow; it can have no incoming Message Flows."
<EndEvent>
messageEventDefinition
"The Result attribute of the End Event MUST be set to Message or Multiple if there are any outgoing Message Flows.
<BoundaryEvent>
cancelActivity
Table 10.92
<BoundaryEvent>
"An Intermediate Event with a Cancel trigger MAY be attached to a Sub-Process boundary only if the Transaction attribute of the Sub-Process is set to true."
"If the Intermediate Event is attached to the boundary of an Activity:
<BoundaryEvent>
outgoing
"[If the Intermediate Event is attached to the boundary of an Activity:] An exception to this: an Intermediate Event with a Compensation trigger MUST NOT have an outgoing Sequence Flow (it MAY have an outgoing Association)."\\
<BoundaryEvent>
outgoing
"[If the Intermediate Event is attached to the boundary of an Activity:] The Intermediate Event MUST be a source for a Sequence Flow. [...] An exception to this: an Intermediate Event with a Compensation trigger MUST NOT have an outgoing Sequence Flow (it MAY have an outgoing Association)."\\
<IntermediateEvent>
incoming
"If the Intermediate Event is used within normal flow: Intermediate Events MUST be a target of a Sequence Flow. [...]
<IntermediateEvent>
outgoing
"An Intermediate Event MUST be a source for a Sequence Flow. Multiple Sequence Flows MAY originate from an Intermediate Event.
<IntermediateEvent>
incoming/outgoing
"A Link Intermediate Event MUST NOT be both a target and a source of a Sequence Flow." \newline
"If there is a source Link, there MUST be a matching target Link (they have the same name).
<IntermediateEvent>
"- A Message Intermediate Event MAY be the target for a Message Flow; it can have one incoming Message Flow. - A Message Intermediate Event MAY be a source for a Message Flow; it can have one outgoing Message Flow. - A Message Intermediate Event MAY have an incoming Message Flow or an outgoing Message Flow, but not both."
<BoundaryEvent>
attachedToRef
"The catch Cancel Intermediate Event MUST only be attached to the boundary of a Transaction Sub-Process and, thus, MAY NOT be used in normal flow."
"The Compensation Start Event MAY NOT be used for a top-level Process. The Compensation Start Event MAY be used for an Event Sub-Process."
<BoundaryEvent>
attachedToRef
"The catch Compensation Intermediate Event MUST only be attached to the boundary of an Activity and, thus, MAY NOT be used in normal flow. The throw Compensation Intermediate Event MAY be used in normal flow."\\
<conditionalEventDefinition>
condition
"For executable Processes (isExecutable = true), if the trigger is Conditional, then a FormalExpression MUST be entered."
<LinkEventDefinition>
source
http://www.omg.org/issues/bpmn2-rtf.open.html\#Issue15739)
<LinkEventDefinition>
target
http://www.omg.org/issues/bpmn2-rtf.open.html\#Issue15739)
<LinkEventDefinition>
source/target
"The use of Link Events is limited to a single Process level (i.e., they cannot link a parent Process with a Sub-Process)."
<MessageEventDefinition>
messageRef
"The Message MUST be supplied (if the isExecutable attribute of the Process is set to true)."
<MessageEventDefinition>
operationRef
"It MUST be specified for executable Processes."
"The None Start Event MAY NOT be used for an Event Sub-Process."
"The catch None Intermediate Event MUST only be used in normal flow and, thus, MAY NOT be attached to the boundary of an Activity."
<TimerEventDefinition>
"Timer attributes are mutually exclusive [...] (if the isExecutable attribute of the Process is set to true)"
"The return type of the attribute timeDate MUST conform to the ISO-8601 format for date and time representations."
"The return type of the attribute timeCycle MUST conform to the ISO-8601 format for date and time representations."
<TimerEventDefinition>
timeDuration
"The return type of the attribute timeDuration MUST conform to the ISO-8601 format for date and time representations."
<Gateway>
incoming/outgoing
"A Gateway MUST have either multiple incoming Sequence Flows or multiple outgoing Sequence Flows (i.e., it MUST merge or split the flow)."
<EventBasedGateway>
outgoing
"An Event Gateway MUST have two or more outgoing Sequence Flows."
<EventBasedGateway>
outgoing
"The outgoing Sequence Flows of the Event Gateway MUST NOT have a conditionExpression."
<EventBasedGateway>
outgoing
"Event-Based Gateways are configured by having outgoing Sequence Flows target an Intermediate Event or a Receive Task in any combination
<EventBasedGateway>
"If Message Intermediate Events are used in the configuration, then Receive Tasks MUST NOT be used in that configuration and vice versa."
<EventBasedGateway>
"Receive Tasks used in an Event Gateway configuration MUST NOT have any attached Intermediate Events."
<EventBasedGateway>
"Target elements in an Event Gateway configuration MUST NOT have any additional incoming Sequence Flows (other than that from the Event Gateway)."
<EventBasedGateway>
incoming
"In order for an Event Gateway to instantiate a Process, it MUST not have any incoming Sequence Flows."
"This compensation is modeled with a specialized Compensation Activity, which is connected to the boundary Event through an Association"
<BoundaryEvent>
"The Compensation Activity, which can be either a Task or a Sub-Process, has a marker to show that it is used for compensation only and is
"This attribute value MUST be specified with a mime-type format."
"There are nine types of End Events in BPMN: None, Message, Escalation, Error, Cancel, Compensation, Signal, Terminate, and Multiple." & Table 10.88
(Table 10.90)
<IntermediateEvent>
(Table 10.89)
<IntermediateEvent>
(Table 10.89)
"A Start Event is OPTIONAL: a Process level [...] MAY (is NOT REQUIRED to) have a Start Event."(p.238) "All Flow Objects that do not have an incoming Sequence Flow (i.e., are not a target of a Sequence Flow) SHALL be instantiated when the Process is instantiated. Exceptions to this are Activities that are defined as being Compensation Activities [...] catching Link Intermediate Event[s] [...] Event Sub-Process[es]" (p.239)
"An End Event is OPTIONAL: a given Process level [...] MAY (is NOT REQUIRED to) have this shape [...] If the End Event is not used, then all Flow Objects that do not have any outgoing Sequence Flow (i.e., are not a source of a Sequence Flow) mark the end of a path in the Process. However, the Process MUST NOT end until all parallel paths have completed."
Silver2011