Some tests for different kind of extensibility
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/BPMN20.xsd b/org.eclipse.bpmn2.tests/res/extensibility/BPMN20.xsd
new file mode 100644
index 0000000..463ef6e
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/BPMN20.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
+ xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
+ targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL">
+
+ <xsd:import namespace="http://www.omg.org/spec/BPMN/20100524/DI" schemaLocation="BPMNDI.xsd"/>
+ <xsd:include schemaLocation="Semantic.xsd"/>
+
+ <xsd:element name="definitions" type="tDefinitions"/>
+ <xsd:complexType name="tDefinitions">
+ <xsd:sequence>
+ <xsd:element ref="import" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="rootElement" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="bpmndi:BPMNDiagram" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="relationship" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID" use="optional"/>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="targetNamespace" type="xsd:anyURI" use="required"/>
+ <xsd:attribute name="expressionLanguage" type="xsd:anyURI" use="optional" default="http://www.w3.org/1999/XPath"/>
+ <xsd:attribute name="typeLanguage" type="xsd:anyURI" use="optional" default="http://www.w3.org/2001/XMLSchema"/>
+ <xsd:attribute name="exporter" type="xsd:string"/>
+ <xsd:attribute name="exporterVersion" type="xsd:string"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+
+ <xsd:element name="import" type="tImport"/>
+ <xsd:complexType name="tImport">
+ <xsd:attribute name="namespace" type="xsd:anyURI" use="required"/>
+ <xsd:attribute name="location" type="xsd:string" use="required"/>
+ <xsd:attribute name="importType" type="xsd:anyURI" use="required"/>
+ </xsd:complexType>
+
+</xsd:schema>
\ No newline at end of file
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/BPMNDI.xsd b/org.eclipse.bpmn2.tests/res/extensibility/BPMNDI.xsd
new file mode 100644
index 0000000..615740f
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/BPMNDI.xsd
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" targetNamespace="http://www.omg.org/spec/BPMN/20100524/DI" elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+ <xsd:import namespace="http://www.omg.org/spec/DD/20100524/DC" schemaLocation="DC.xsd" />
+ <xsd:import namespace="http://www.omg.org/spec/DD/20100524/DI" schemaLocation="DI.xsd" />
+
+ <xsd:element name="BPMNDiagram" type="bpmndi:BPMNDiagram" />
+ <xsd:element name="BPMNPlane" type="bpmndi:BPMNPlane" />
+ <xsd:element name="BPMNLabelStyle" type="bpmndi:BPMNLabelStyle" />
+ <xsd:element name="BPMNShape" type="bpmndi:BPMNShape" substitutionGroup="di:DiagramElement" />
+ <xsd:element name="BPMNLabel" type="bpmndi:BPMNLabel" />
+ <xsd:element name="BPMNEdge" type="bpmndi:BPMNEdge" substitutionGroup="di:DiagramElement" />
+
+ <xsd:complexType name="BPMNDiagram">
+ <xsd:complexContent>
+ <xsd:extension base="di:Diagram">
+ <xsd:sequence>
+ <xsd:element ref="bpmndi:BPMNPlane" />
+ <xsd:element ref="bpmndi:BPMNLabelStyle" maxOccurs="unbounded" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="BPMNPlane">
+ <xsd:complexContent>
+ <xsd:extension base="di:Plane">
+ <xsd:attribute name="bpmnElement" type="xsd:QName" />
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="BPMNEdge">
+ <xsd:complexContent>
+ <xsd:extension base="di:LabeledEdge">
+ <xsd:sequence>
+ <xsd:element ref="bpmndi:BPMNLabel" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="bpmnElement" type="xsd:QName" />
+ <xsd:attribute name="sourceElement" type="xsd:QName" />
+ <xsd:attribute name="targetElement" type="xsd:QName" />
+ <xsd:attribute name="messageVisibleKind" type="bpmndi:MessageVisibleKind" />
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="BPMNShape">
+ <xsd:complexContent>
+ <xsd:extension base="di:LabeledShape">
+ <xsd:sequence>
+ <xsd:element ref="bpmndi:BPMNLabel" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="bpmnElement" type="xsd:QName" />
+ <xsd:attribute name="isHorizontal" type="xsd:boolean" />
+ <xsd:attribute name="isExpanded" type="xsd:boolean" />
+ <xsd:attribute name="isMarkerVisible" type="xsd:boolean" />
+ <xsd:attribute name="isMessageVisible" type="xsd:boolean" />
+ <xsd:attribute name="participantBandKind" type="bpmndi:ParticipantBandKind" />
+ <xsd:attribute name="choreographyActivityShape" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="BPMNLabel">
+ <xsd:complexContent>
+ <xsd:extension base="di:Label">
+ <xsd:attribute name="labelStyle" type="xsd:QName" />
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType name="BPMNLabelStyle">
+ <xsd:complexContent>
+ <xsd:extension base="di:Style">
+ <xsd:sequence>
+ <xsd:element ref="dc:Font" />
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="ParticipantBandKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="top_initiating" />
+ <xsd:enumeration value="middle_initiating" />
+ <xsd:enumeration value="bottom_initiating" />
+ <xsd:enumeration value="top_non_initiating" />
+ <xsd:enumeration value="middle_non_initiating" />
+ <xsd:enumeration value="bottom_non_initiating" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="MessageVisibleKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="initiating" />
+ <xsd:enumeration value="non_initiating" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+</xsd:schema>
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/DC.xsd b/org.eclipse.bpmn2.tests/res/extensibility/DC.xsd
new file mode 100644
index 0000000..80e9fa8
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/DC.xsd
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" targetNamespace="http://www.omg.org/spec/DD/20100524/DC" elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+ <xsd:element name="Font" type="dc:Font" />
+ <xsd:element name="Point" type="dc:Point" />
+ <xsd:element name="Bounds" type="dc:Bounds" />
+
+ <xsd:complexType name="Font">
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="size" type="xsd:double" />
+ <xsd:attribute name="isBold" type="xsd:boolean" />
+ <xsd:attribute name="isItalic" type="xsd:boolean" />
+ <xsd:attribute name="isUnderline" type="xsd:boolean" />
+ <xsd:attribute name="isStrikeThrough" type="xsd:boolean" />
+ </xsd:complexType>
+
+ <xsd:complexType name="Point">
+ <xsd:attribute name="x" type="xsd:double" use="required" />
+ <xsd:attribute name="y" type="xsd:double" use="required" />
+ </xsd:complexType>
+
+ <xsd:complexType name="Bounds">
+ <xsd:attribute name="x" type="xsd:double" use="required" />
+ <xsd:attribute name="y" type="xsd:double" use="required" />
+ <xsd:attribute name="width" type="xsd:double" use="required" />
+ <xsd:attribute name="height" type="xsd:double" use="required" />
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/DI.xsd b/org.eclipse.bpmn2.tests/res/extensibility/DI.xsd
new file mode 100644
index 0000000..4023d28
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/DI.xsd
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" targetNamespace="http://www.omg.org/spec/DD/20100524/DI" elementFormDefault="qualified" attributeFormDefault="unqualified">
+
+ <xsd:import namespace="http://www.omg.org/spec/DD/20100524/DC" schemaLocation="DC.xsd" />
+
+ <xsd:element name="DiagramElement" type="di:DiagramElement" />
+ <xsd:element name="Diagram" type="di:Diagram" />
+ <xsd:element name="Style" type="di:Style" />
+ <xsd:element name="Node" type="di:Node" />
+ <xsd:element name="Edge" type="di:Edge" />
+ <xsd:element name="Shape" type="di:Shape" />
+ <xsd:element name="Plane" type="di:Plane" />
+ <xsd:element name="LabeledEdge" type="di:LabeledEdge" />
+ <xsd:element name="Label" type="di:Label" />
+ <xsd:element name="LabeledShape" type="di:LabeledShape" />
+
+ <xsd:complexType abstract="true" name="DiagramElement">
+ <xsd:sequence>
+ <xsd:element name="extension" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID" />
+ <xsd:anyAttribute namespace="##other" processContents="lax" />
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="Diagram">
+ <xsd:attribute name="name" type="xsd:string" />
+ <xsd:attribute name="documentation" type="xsd:string" />
+ <xsd:attribute name="resolution" type="xsd:double" />
+ <xsd:attribute name="id" type="xsd:ID" />
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="Node">
+ <xsd:complexContent>
+ <xsd:extension base="di:DiagramElement" />
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="Edge">
+ <xsd:complexContent>
+ <xsd:extension base="di:DiagramElement">
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" minOccurs="2" name="waypoint" type="dc:Point" />
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="LabeledEdge">
+ <xsd:complexContent>
+ <xsd:extension base="di:Edge" />
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="Shape">
+ <xsd:complexContent>
+ <xsd:extension base="di:Node">
+ <xsd:sequence>
+ <xsd:element ref="dc:Bounds" />
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="LabeledShape">
+ <xsd:complexContent>
+ <xsd:extension base="di:Shape" />
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="Label">
+ <xsd:complexContent>
+ <xsd:extension base="di:Node">
+ <xsd:sequence>
+ <xsd:element ref="dc:Bounds" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="Plane">
+ <xsd:complexContent>
+ <xsd:extension base="di:Node">
+ <xsd:sequence>
+ <xsd:element ref="di:DiagramElement" maxOccurs="unbounded" minOccurs="0" />
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:complexType abstract="true" name="Style">
+ <xsd:attribute name="id" type="xsd:ID" />
+ </xsd:complexType>
+
+</xsd:schema>
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/Example-Extension.xsd b/org.eclipse.bpmn2.tests/res/extensibility/Example-Extension.xsd
new file mode 100644
index 0000000..522eeaa
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/Example-Extension.xsd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
+ xmlns="http://www.acme.com/bpmn-ext"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:bpmn20="http://www.omg.org/spec/BPMN/20100524/MODEL"
+ targetNamespace="http://www.acme.com/bpmn-ext">
+
+ <xsd:import namespace="http://www.omg.org/spec/BPMN/20100524/MODEL" schemaLocation="BPMN20.xsd" />
+
+ <xsd:element name="newRootElement" type="tSubclassExample1" substitutionGroup="bpmn20:rootElement"/>
+ <xsd:complexType name="tSubclassExample1">
+ <xsd:complexContent>
+ <xsd:extension base="bpmn20:tRootElement">
+ <xsd:sequence>
+ <xsd:element name="customSimpleElement" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+ <xsd:element ref="customGlobalElement" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="customAttribute1" type="xsd:string"/>
+ <xsd:attribute name="customAttribute2" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="customGlobalElement" type="tAComplexType"/>
+ <xsd:complexType name="tAComplexType">
+ <xsd:complexContent>
+ <xsd:extension base="bpmn20:tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="customElement" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="customAttribute" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="customArtifact" type="tSubclassExample2" substitutionGroup="bpmn20:artifact"/>
+ <xsd:complexType name="tSubclassExample2">
+ <xsd:complexContent>
+ <xsd:extension base="bpmn20:tArtifact">
+ <xsd:sequence>
+ <xsd:element name="customElement" type="xsd:string" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="customAttribute" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:attribute name="customGlobalAttribute" type="xsd:string"/>
+
+</xsd:schema>
\ No newline at end of file
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/Semantic.xsd b/org.eclipse.bpmn2.tests/res/extensibility/Semantic.xsd
new file mode 100644
index 0000000..1c611da
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/Semantic.xsd
@@ -0,0 +1,1562 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
+ xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL">
+
+ <xsd:element name="activity" type="tActivity"/>
+ <xsd:complexType name="tActivity" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowNode">
+ <xsd:sequence>
+ <xsd:element ref="ioSpecification" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="dataInputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="dataOutputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="resourceRole" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="loopCharacteristics" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="isForCompensation" type="xsd:boolean" default="false"/>
+ <xsd:attribute name="startQuantity" type="xsd:integer" default="1"/>
+ <xsd:attribute name="completionQuantity" type="xsd:integer" default="1"/>
+ <xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="adHocSubProcess" type="tAdHocSubProcess" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tAdHocSubProcess">
+ <xsd:complexContent>
+ <xsd:extension base="tSubProcess">
+ <xsd:sequence>
+ <xsd:element name="completionCondition" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="cancelRemainingInstances" type="xsd:boolean" default="true"/>
+ <xsd:attribute name="ordering" type="tAdHocOrdering"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tAdHocOrdering">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Parallel"/>
+ <xsd:enumeration value="Sequential"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="artifact" type="tArtifact"/>
+ <xsd:complexType name="tArtifact" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="assignment" type="tAssignment" />
+ <xsd:complexType name="tAssignment">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="from" type="tExpression" minOccurs="1" maxOccurs="1"/>
+ <xsd:element name="to" type="tExpression" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="association" type="tAssociation" substitutionGroup="artifact"/>
+ <xsd:complexType name="tAssociation">
+ <xsd:complexContent>
+ <xsd:extension base="tArtifact">
+ <xsd:attribute name="sourceRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="targetRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="associationDirection" type="tAssociationDirection" default="None"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tAssociationDirection">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="None"/>
+ <xsd:enumeration value="One"/>
+ <xsd:enumeration value="Both"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="auditing" type="tAuditing"/>
+ <xsd:complexType name="tAuditing">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="baseElement" type="tBaseElement"/>
+ <xsd:complexType name="tBaseElement" abstract="true">
+ <xsd:sequence>
+ <xsd:element ref="documentation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="extensionElements" minOccurs="0" maxOccurs="1" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID" use="optional"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+
+ <xsd:element name="baseElementWithMixedContent" type="tBaseElementWithMixedContent"/>
+ <xsd:complexType name="tBaseElementWithMixedContent" abstract="true" mixed="true">
+ <xsd:sequence>
+ <xsd:element ref="documentation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="extensionElements" minOccurs="0" maxOccurs="1" />
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID" use="optional"/>
+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
+ </xsd:complexType>
+
+ <xsd:element name="boundaryEvent" type="tBoundaryEvent" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tBoundaryEvent">
+ <xsd:complexContent>
+ <xsd:extension base="tCatchEvent">
+ <xsd:attribute name="cancelActivity" type="xsd:boolean" default="true"/>
+ <xsd:attribute name="attachedToRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="businessRuleTask" type="tBusinessRuleTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tBusinessRuleTask">
+ <xsd:complexContent>
+ <xsd:extension base="tTask">
+ <xsd:attribute name="implementation" type="tImplementation" default="##unspecified"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="callableElement" type="tCallableElement"/>
+ <xsd:complexType name="tCallableElement">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element name="supportedInterfaceRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="ioSpecification" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="ioBinding" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="callActivity" type="tCallActivity" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tCallActivity">
+ <xsd:complexContent>
+ <xsd:extension base="tActivity">
+ <xsd:attribute name="calledElement" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="callChoreography" type="tCallChoreography" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tCallChoreography">
+ <xsd:complexContent>
+ <xsd:extension base="tChoreographyActivity">
+ <xsd:sequence>
+ <xsd:element ref="participantAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="calledChoreographyRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="callConversation" type="tCallConversation" substitutionGroup="conversationNode"/>
+ <xsd:complexType name="tCallConversation">
+ <xsd:complexContent>
+ <xsd:extension base="tConversationNode">
+ <xsd:sequence>
+ <xsd:element ref="participantAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="calledCollaborationRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="cancelEventDefinition" type="tCancelEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tCancelEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="catchEvent" type="tCatchEvent"/>
+ <xsd:complexType name="tCatchEvent" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tEvent">
+ <xsd:sequence>
+ <xsd:element ref="dataOutput" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="dataOutputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="outputSet" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="eventDefinition" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="eventDefinitionRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="parallelMultiple" type="xsd:boolean" default="false"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="category" type="tCategory" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tCategory">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element ref="categoryValue" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="categoryValue" type="tCategoryValue"/>
+ <xsd:complexType name="tCategoryValue">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="value" type="xsd:string" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="choreography" type="tChoreography" substitutionGroup="collaboration"/>
+ <xsd:complexType name="tChoreography">
+ <xsd:complexContent>
+ <xsd:extension base="tCollaboration">
+ <xsd:sequence>
+ <xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="choreographyActivity" type="tChoreographyActivity"/>
+ <xsd:complexType name="tChoreographyActivity" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowNode">
+ <xsd:sequence>
+ <xsd:element name="participantRef" type="xsd:QName" minOccurs="2" maxOccurs="unbounded"/>
+ <xsd:element ref="correlationKey" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="initiatingParticipantRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="loopType" type="tChoreographyLoopType" default="None"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tChoreographyLoopType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="None"/>
+ <xsd:enumeration value="Standard"/>
+ <xsd:enumeration value="MultiInstanceSequential"/>
+ <xsd:enumeration value="MultiInstanceParallel"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="choreographyTask" type="tChoreographyTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tChoreographyTask">
+ <xsd:complexContent>
+ <xsd:extension base="tChoreographyActivity">
+ <xsd:sequence>
+ <xsd:element name="messageFlowRef" type="xsd:QName" minOccurs="1" maxOccurs="2"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="collaboration" type="tCollaboration" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tCollaboration">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element ref="participant" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="messageFlow" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="conversationNode" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="conversationAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="participantAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="messageFlowAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="correlationKey" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="choreographyRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="conversationLink" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="isClosed" type="xsd:boolean" default="false"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="compensateEventDefinition" type="tCompensateEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tCompensateEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:attribute name="waitForCompletion" type="xsd:boolean"/>
+ <xsd:attribute name="activityRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="complexBehaviorDefinition" type="tComplexBehaviorDefinition"/>
+ <xsd:complexType name="tComplexBehaviorDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="condition" type="tFormalExpression" minOccurs="1" maxOccurs="1"/>
+ <xsd:element name="event" type="tImplicitThrowEvent" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="complexGateway" type="tComplexGateway" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tComplexGateway">
+ <xsd:complexContent>
+ <xsd:extension base="tGateway">
+ <xsd:sequence>
+ <xsd:element name="activationCondition" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="default" type="xsd:IDREF"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="conditionalEventDefinition" type="tConditionalEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tConditionalEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:sequence>
+ <xsd:element name="condition" type="tExpression"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="conversation" type="tConversation" substitutionGroup="conversationNode"/>
+ <xsd:complexType name="tConversation">
+ <xsd:complexContent>
+ <xsd:extension base="tConversationNode"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="conversationAssociation" type="tConversationAssociation"/>
+ <xsd:complexType name="tConversationAssociation">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="innerConversationNodeRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="outerConversationNodeRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="conversationLink" type="tConversationLink"/>
+ <xsd:complexType name="tConversationLink">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="sourceRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="targetRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="conversationNode" type="tConversationNode"/>
+ <xsd:complexType name="tConversationNode" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="participantRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="messageFlowRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="correlationKey" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="correlationKey" type="tCorrelationKey"/>
+ <xsd:complexType name="tCorrelationKey">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="correlationPropertyRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="correlationProperty" type="tCorrelationProperty" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tCorrelationProperty">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element ref="correlationPropertyRetrievalExpression" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="type" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="correlationPropertyBinding" type="tCorrelationPropertyBinding"/>
+ <xsd:complexType name="tCorrelationPropertyBinding">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="dataPath" type="tFormalExpression" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="correlationPropertyRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="correlationPropertyRetrievalExpression" type="tCorrelationPropertyRetrievalExpression"/>
+ <xsd:complexType name="tCorrelationPropertyRetrievalExpression">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="messagePath" type="tFormalExpression" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="messageRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="correlationSubscription" type="tCorrelationSubscription"/>
+ <xsd:complexType name="tCorrelationSubscription">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="correlationPropertyBinding" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="correlationKeyRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataAssociation" type="tDataAssociation" />
+ <xsd:complexType name="tDataAssociation">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="sourceRef" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="targetRef" type="xsd:IDREF" minOccurs="1" maxOccurs="1"/>
+ <xsd:element name="transformation" type="tFormalExpression" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="assignment" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataInput" type="tDataInput" />
+ <xsd:complexType name="tDataInput">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="itemSubjectRef" type="xsd:QName" />
+ <xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataInputAssociation" type="tDataInputAssociation" />
+ <xsd:complexType name="tDataInputAssociation">
+ <xsd:complexContent>
+ <xsd:extension base="tDataAssociation"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataObject" type="tDataObject" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tDataObject">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowElement">
+ <xsd:sequence>
+ <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+ <xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataObjectReference" type="tDataObjectReference" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tDataObjectReference">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowElement">
+ <xsd:sequence>
+ <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+ <xsd:attribute name="dataObjectRef" type="xsd:IDREF"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataOutput" type="tDataOutput" />
+ <xsd:complexType name="tDataOutput">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="optional" />
+ <xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+ <xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataOutputAssociation" type="tDataOutputAssociation" />
+ <xsd:complexType name="tDataOutputAssociation">
+ <xsd:complexContent>
+ <xsd:extension base="tDataAssociation"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataState" type="tDataState" />
+ <xsd:complexType name="tDataState">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataStore" type="tDataStore" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tDataStore">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="capacity" type="xsd:integer"/>
+ <xsd:attribute name="isUnlimited" type="xsd:boolean" default="true"/>
+ <xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="dataStoreReference" type="tDataStoreReference" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tDataStoreReference">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowElement">
+ <xsd:sequence>
+ <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+ <xsd:attribute name="dataStoreRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="documentation" type="tDocumentation"/>
+ <xsd:complexType name="tDocumentation" mixed="true">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="lax" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="id" type="xsd:ID" use="optional"/>
+ <xsd:attribute name="textFormat" type="xsd:string" default="text/plain"/>
+ </xsd:complexType>
+
+ <xsd:element name="endEvent" type="tEndEvent" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tEndEvent">
+ <xsd:complexContent>
+ <xsd:extension base="tThrowEvent"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="endPoint" type="tEndPoint" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tEndPoint">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="error" type="tError" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tError">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="errorCode" type="xsd:string"/>
+ <xsd:attribute name="structureRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="errorEventDefinition" type="tErrorEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tErrorEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:attribute name="errorRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="escalation" type="tEscalation" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tEscalation">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="escalationCode" type="xsd:string"/>
+ <xsd:attribute name="structureRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="escalationEventDefinition" type="tEscalationEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tEscalationEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:attribute name="escalationRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="event" type="tEvent" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tEvent" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowNode">
+ <xsd:sequence>
+ <xsd:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="eventBasedGateway" type="tEventBasedGateway" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tEventBasedGateway">
+ <xsd:complexContent>
+ <xsd:extension base="tGateway">
+ <xsd:attribute name="instantiate" type="xsd:boolean" default="false"/>
+ <xsd:attribute name="eventGatewayType" type="tEventBasedGatewayType" default="Exclusive"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tEventBasedGatewayType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Exclusive"/>
+ <xsd:enumeration value="Parallel"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="eventDefinition" type="tEventDefinition" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tEventDefinition" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="exclusiveGateway" type="tExclusiveGateway" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tExclusiveGateway">
+ <xsd:complexContent>
+ <xsd:extension base="tGateway">
+ <xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="expression" type="tExpression"/>
+ <xsd:complexType name="tExpression">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElementWithMixedContent"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="extension" type="tExtension"/>
+ <xsd:complexType name="tExtension">
+ <xsd:sequence>
+ <xsd:element ref="documentation" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="definition" type="xsd:QName"/>
+ <xsd:attribute name="mustUnderstand" type="xsd:boolean" use="optional" default="false"/>
+ </xsd:complexType>
+
+ <xsd:element name="extensionElements" type="tExtensionElements" />
+ <xsd:complexType name="tExtensionElements">
+ <xsd:sequence>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="flowElement" type="tFlowElement"/>
+ <xsd:complexType name="tFlowElement" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="auditing" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="monitoring" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="categoryValueRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="flowNode" type="tFlowNode"/>
+ <xsd:complexType name="tFlowNode" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowElement">
+ <xsd:sequence>
+ <xsd:element name="incoming" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="outgoing" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="formalExpression" type="tFormalExpression" substitutionGroup="expression"/>
+ <xsd:complexType name="tFormalExpression">
+ <xsd:complexContent>
+ <xsd:extension base="tExpression">
+ <xsd:attribute name="language" type="xsd:anyURI" use="optional"/>
+ <xsd:attribute name="evaluatesToTypeRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="gateway" type="tGateway" abstract="true"/>
+ <xsd:complexType name="tGateway">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowNode">
+ <xsd:attribute name="gatewayDirection" type="tGatewayDirection" default="Unspecified"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tGatewayDirection">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Unspecified"/>
+ <xsd:enumeration value="Converging"/>
+ <xsd:enumeration value="Diverging"/>
+ <xsd:enumeration value="Mixed"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="globalBusinessRuleTask" type="tGlobalBusinessRuleTask" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tGlobalBusinessRuleTask">
+ <xsd:complexContent>
+ <xsd:extension base="tGlobalTask">
+ <xsd:attribute name="implementation" type="tImplementation" default="##unspecified"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="globalChoreographyTask" type="tGlobalChoreographyTask" substitutionGroup="choreography"/>
+ <xsd:complexType name="tGlobalChoreographyTask">
+ <xsd:complexContent>
+ <xsd:extension base="tChoreography">
+ <xsd:attribute name="initiatingParticipantRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:element name="globalConversation" type="tGlobalConversation" substitutionGroup="collaboration"/>
+ <xsd:complexType name="tGlobalConversation">
+ <xsd:complexContent>
+ <xsd:extension base="tCollaboration"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="globalManualTask" type="tGlobalManualTask" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tGlobalManualTask">
+ <xsd:complexContent>
+ <xsd:extension base="tGlobalTask"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="globalScriptTask" type="tGlobalScriptTask" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tGlobalScriptTask">
+ <xsd:complexContent>
+ <xsd:extension base="tGlobalTask">
+ <xsd:sequence>
+ <xsd:element ref="script" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="scriptLanguage" type="xsd:anyURI"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="globalTask" type="tGlobalTask" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tGlobalTask">
+ <xsd:complexContent>
+ <xsd:extension base="tCallableElement">
+ <xsd:sequence>
+ <xsd:element ref="resourceRole" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="globalUserTask" type="tGlobalUserTask" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tGlobalUserTask">
+ <xsd:complexContent>
+ <xsd:extension base="tGlobalTask">
+ <xsd:sequence>
+ <xsd:element ref="rendering" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="implementation" type="tImplementation" default="##unspecified"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="group" type="tGroup" substitutionGroup="artifact"/>
+ <xsd:complexType name="tGroup">
+ <xsd:complexContent>
+ <xsd:extension base="tArtifact">
+ <xsd:attribute name="categoryValueRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="humanPerformer" type="tHumanPerformer" substitutionGroup="performer"/>
+ <xsd:complexType name="tHumanPerformer">
+ <xsd:complexContent>
+ <xsd:extension base="tPerformer"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tImplementation">
+ <xsd:union memberTypes="xsd:anyURI">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:token">
+ <xsd:enumeration value="##unspecified" />
+ <xsd:enumeration value="##WebService" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:union>
+ </xsd:simpleType>
+
+ <xsd:element name="implicitThrowEvent" type="tImplicitThrowEvent" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tImplicitThrowEvent">
+ <xsd:complexContent>
+ <xsd:extension base="tThrowEvent"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="inclusiveGateway" type="tInclusiveGateway" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tInclusiveGateway">
+ <xsd:complexContent>
+ <xsd:extension base="tGateway">
+ <xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="inputSet" type="tInputSet" />
+ <xsd:complexType name="tInputSet">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="dataInputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="optionalInputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="whileExecutingInputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="outputSetRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="interface" type="tInterface" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tInterface">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element ref="operation" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+ <xsd:attribute name="implementationRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="intermediateCatchEvent" type="tIntermediateCatchEvent" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tIntermediateCatchEvent">
+ <xsd:complexContent>
+ <xsd:extension base="tCatchEvent"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="intermediateThrowEvent" type="tIntermediateThrowEvent" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tIntermediateThrowEvent">
+ <xsd:complexContent>
+ <xsd:extension base="tThrowEvent"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="ioBinding" type="tInputOutputBinding" />
+ <xsd:complexType name="tInputOutputBinding">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="operationRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="inputDataRef" type="xsd:IDREF" use="required"/>
+ <xsd:attribute name="outputDataRef" type="xsd:IDREF" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="ioSpecification" type="tInputOutputSpecification" />
+ <xsd:complexType name="tInputOutputSpecification">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="dataInput" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="dataOutput" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="inputSet" minOccurs="1" maxOccurs="unbounded"/>
+ <xsd:element ref="outputSet" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="itemDefinition" type="tItemDefinition" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tItemDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:attribute name="structureRef" type="xsd:QName"/>
+ <xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+ <xsd:attribute name="itemKind" type="tItemKind" default="Information"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tItemKind">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Information"/>
+ <xsd:enumeration value="Physical"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="lane" type="tLane"/>
+ <xsd:complexType name="tLane">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="partitionElement" type="tBaseElement" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="flowNodeRef" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="childLaneSet" type="tLaneSet" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="partitionElementRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="laneSet" type="tLaneSet"/>
+ <xsd:complexType name="tLaneSet">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="lane" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="linkEventDefinition" type="tLinkEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tLinkEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:sequence>
+ <xsd:element name="source" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="target" type="xsd:QName" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="loopCharacteristics" type="tLoopCharacteristics"/>
+ <xsd:complexType name="tLoopCharacteristics" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="manualTask" type="tManualTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tManualTask">
+ <xsd:complexContent>
+ <xsd:extension base="tTask"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="message" type="tMessage" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tMessage">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="itemRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="messageEventDefinition" type="tMessageEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tMessageEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:sequence>
+ <xsd:element name="operationRef" type="xsd:QName" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="messageRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="messageFlow" type="tMessageFlow"/>
+ <xsd:complexType name="tMessageFlow">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="name" type="xsd:string" use="optional"/>
+ <xsd:attribute name="sourceRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="targetRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="messageRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="messageFlowAssociation" type="tMessageFlowAssociation"/>
+ <xsd:complexType name="tMessageFlowAssociation">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="innerMessageFlowRef" type="xsd:QName" use="required"/>
+ <xsd:attribute name="outerMessageFlowRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="monitoring" type="tMonitoring"/>
+ <xsd:complexType name="tMonitoring">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="multiInstanceLoopCharacteristics" type="tMultiInstanceLoopCharacteristics" substitutionGroup="loopCharacteristics"/>
+ <xsd:complexType name="tMultiInstanceLoopCharacteristics">
+ <xsd:complexContent>
+ <xsd:extension base="tLoopCharacteristics">
+ <xsd:sequence>
+ <xsd:element name="loopCardinality" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="loopDataInputRef" type="xsd:QName" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="loopDataOutputRef" type="xsd:QName" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="inputDataItem" type="tDataInput" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="outputDataItem" type="tDataOutput" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="complexBehaviorDefinition" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="completionCondition" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="isSequential" type="xsd:boolean" default="false"/>
+ <xsd:attribute name="behavior" type="tMultiInstanceFlowCondition" default="All"/>
+ <xsd:attribute name="oneBehaviorEventRef" type="xsd:QName" use="optional"/>
+ <xsd:attribute name="noneBehaviorEventRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tMultiInstanceFlowCondition">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="None"/>
+ <xsd:enumeration value="One"/>
+ <xsd:enumeration value="All"/>
+ <xsd:enumeration value="Complex"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="operation" type="tOperation"/>
+ <xsd:complexType name="tOperation">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="inMessageRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+ <xsd:element name="outMessageRef" type="xsd:QName" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="errorRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+ <xsd:attribute name="implementationRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="outputSet" type="tOutputSet" />
+ <xsd:complexType name="tOutputSet">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="dataOutputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="optionalOutputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="whileExecutingOutputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="inputSetRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="parallelGateway" type="tParallelGateway" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tParallelGateway">
+ <xsd:complexContent>
+ <xsd:extension base="tGateway"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="participant" type="tParticipant"/>
+ <xsd:complexType name="tParticipant">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="interfaceRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="endPointRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="participantMultiplicity" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="processRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="participantAssociation" type="tParticipantAssociation"/>
+ <xsd:complexType name="tParticipantAssociation">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="innerParticipantRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+ <xsd:element name="outerParticipantRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="participantMultiplicity" type="tParticipantMultiplicity"/>
+ <xsd:complexType name="tParticipantMultiplicity">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="minimum" type="xsd:int" default="0"/>
+ <xsd:attribute name="maximum" type="xsd:int" default="1"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="partnerEntity" type="tPartnerEntity" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tPartnerEntity">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element name="participantRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="partnerRole" type="tPartnerRole" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tPartnerRole">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element name="participantRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="performer" type="tPerformer" substitutionGroup="resourceRole"/>
+ <xsd:complexType name="tPerformer">
+ <xsd:complexContent>
+ <xsd:extension base="tResourceRole"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="potentialOwner" type="tPotentialOwner" substitutionGroup="performer"/>
+ <xsd:complexType name="tPotentialOwner">
+ <xsd:complexContent>
+ <xsd:extension base="tHumanPerformer"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="process" type="tProcess" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tProcess">
+ <xsd:complexContent>
+ <xsd:extension base="tCallableElement">
+ <xsd:sequence>
+ <xsd:element ref="auditing" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="monitoring" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="laneSet" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="resourceRole" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="correlationSubscription" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="supports" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="processType" type="tProcessType" default="None"/>
+ <xsd:attribute name="isClosed" type="xsd:boolean" default="false"/>
+ <xsd:attribute name="isExecutable" type="xsd:boolean"/>
+ <xsd:attribute name="definitionalCollaborationRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tProcessType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="None"/>
+ <xsd:enumeration value="Public"/>
+ <xsd:enumeration value="Private"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="property" type="tProperty" />
+ <xsd:complexType name="tProperty">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="receiveTask" type="tReceiveTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tReceiveTask">
+ <xsd:complexContent>
+ <xsd:extension base="tTask">
+ <xsd:attribute name="implementation" type="tImplementation" default="##WebService"/>
+ <xsd:attribute name="instantiate" type="xsd:boolean" default="false"/>
+ <xsd:attribute name="messageRef" type="xsd:QName" use="optional"/>
+ <xsd:attribute name="operationRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="relationship" type="tRelationship"/>
+ <xsd:complexType name="tRelationship">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element name="source" type="xsd:QName" minOccurs="1" maxOccurs="unbounded"/>
+ <xsd:element name="target" type="xsd:QName" minOccurs="1" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="type" type="xsd:string" use="required"/>
+ <xsd:attribute name="direction" type="tRelationshipDirection"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tRelationshipDirection">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="None"/>
+ <xsd:enumeration value="Forward"/>
+ <xsd:enumeration value="Backward"/>
+ <xsd:enumeration value="Both"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="rendering" type="tRendering"/>
+ <xsd:complexType name="tRendering">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="resource" type="tResource" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tResource">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:sequence>
+ <xsd:element ref="resourceParameter" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="resourceAssignmentExpression" type="tResourceAssignmentExpression"/>
+ <xsd:complexType name="tResourceAssignmentExpression">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="expression" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="resourceParameter" type="tResourceParameter"/>
+ <xsd:complexType name="tResourceParameter">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="type" type="xsd:QName"/>
+ <xsd:attribute name="isRequired" type="xsd:boolean"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="resourceParameterBinding" type="tResourceParameterBinding"/>
+ <xsd:complexType name="tResourceParameterBinding">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:sequence>
+ <xsd:element ref="expression" minOccurs="1" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="parameterRef" type="xsd:QName" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="resourceRole" type="tResourceRole"/>
+ <xsd:complexType name="tResourceRole">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement">
+ <xsd:choice>
+ <xsd:sequence>
+ <xsd:element name="resourceRef" type="xsd:QName"/>
+ <xsd:element ref="resourceParameterBinding" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:element ref="resourceAssignmentExpression" minOccurs="0" maxOccurs="1"/>
+ </xsd:choice>
+ <xsd:attribute name="name" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="rootElement" type="tRootElement"/>
+ <xsd:complexType name="tRootElement" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tBaseElement"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="scriptTask" type="tScriptTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tScriptTask">
+ <xsd:complexContent>
+ <xsd:extension base="tTask">
+ <xsd:sequence>
+ <xsd:element ref="script" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="scriptFormat" type="xsd:string"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="script" type="tScript"/>
+ <xsd:complexType name="tScript" mixed="true">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="lax" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="sendTask" type="tSendTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tSendTask">
+ <xsd:complexContent>
+ <xsd:extension base="tTask">
+ <xsd:attribute name="implementation" type="tImplementation" default="##WebService"/>
+ <xsd:attribute name="messageRef" type="xsd:QName" use="optional"/>
+ <xsd:attribute name="operationRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="sequenceFlow" type="tSequenceFlow" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tSequenceFlow">
+ <xsd:complexContent>
+ <xsd:extension base="tFlowElement">
+ <xsd:sequence>
+ <xsd:element name="conditionExpression" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="sourceRef" type="xsd:IDREF" use="required"/>
+ <xsd:attribute name="targetRef" type="xsd:IDREF" use="required"/>
+ <xsd:attribute name="isImmediate" type="xsd:boolean" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="serviceTask" type="tServiceTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tServiceTask">
+ <xsd:complexContent>
+ <xsd:extension base="tTask">
+ <xsd:attribute name="implementation" type="tImplementation" default="##WebService"/>
+ <xsd:attribute name="operationRef" type="xsd:QName" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="signal" type="tSignal" substitutionGroup="rootElement"/>
+ <xsd:complexType name="tSignal">
+ <xsd:complexContent>
+ <xsd:extension base="tRootElement">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="structureRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="signalEventDefinition" type="tSignalEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tSignalEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:attribute name="signalRef" type="xsd:QName"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="standardLoopCharacteristics" type="tStandardLoopCharacteristics" substitutionGroup="loopCharacteristics"/>
+ <xsd:complexType name="tStandardLoopCharacteristics">
+ <xsd:complexContent>
+ <xsd:extension base="tLoopCharacteristics">
+ <xsd:sequence>
+ <xsd:element name="loopCondition" type="tExpression" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="testBefore" type="xsd:boolean" default="false"/>
+ <xsd:attribute name="loopMaximum" type="xsd:integer" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="startEvent" type="tStartEvent" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tStartEvent">
+ <xsd:complexContent>
+ <xsd:extension base="tCatchEvent">
+ <xsd:attribute name="isInterrupting" type="xsd:boolean" default="true"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="subChoreography" type="tSubChoreography" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tSubChoreography">
+ <xsd:complexContent>
+ <xsd:extension base="tChoreographyActivity">
+ <xsd:sequence>
+ <xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="subConversation" type="tSubConversation" substitutionGroup="conversationNode"/>
+ <xsd:complexType name="tSubConversation">
+ <xsd:complexContent>
+ <xsd:extension base="tConversationNode">
+ <xsd:sequence>
+ <xsd:element ref="conversationNode" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="subProcess" type="tSubProcess" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tSubProcess">
+ <xsd:complexContent>
+ <xsd:extension base="tActivity">
+ <xsd:sequence>
+ <xsd:element ref="laneSet" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="triggeredByEvent" type="xsd:boolean" default="false"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="task" type="tTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tTask">
+ <xsd:complexContent>
+ <xsd:extension base="tActivity"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="terminateEventDefinition" type="tTerminateEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tTerminateEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="textAnnotation" type="tTextAnnotation" substitutionGroup="artifact"/>
+ <xsd:complexType name="tTextAnnotation">
+ <xsd:complexContent>
+ <xsd:extension base="tArtifact">
+ <xsd:sequence>
+ <xsd:element ref="text" minOccurs="0" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="textFormat" type="xsd:string" default="text/plain"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="text" type="tText"/>
+ <xsd:complexType name="tText" mixed="true">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="lax" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="throwEvent" type="tThrowEvent"/>
+ <xsd:complexType name="tThrowEvent" abstract="true">
+ <xsd:complexContent>
+ <xsd:extension base="tEvent">
+ <xsd:sequence>
+ <xsd:element ref="dataInput" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="dataInputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element ref="inputSet" minOccurs="0" maxOccurs="1"/>
+ <xsd:element ref="eventDefinition" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="eventDefinitionRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="timerEventDefinition" type="tTimerEventDefinition" substitutionGroup="eventDefinition"/>
+ <xsd:complexType name="tTimerEventDefinition">
+ <xsd:complexContent>
+ <xsd:extension base="tEventDefinition">
+ <xsd:choice>
+ <xsd:element name="timeDate" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="timeDuration" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ <xsd:element name="timeCycle" type="tExpression" minOccurs="0" maxOccurs="1"/>
+ </xsd:choice>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:element name="transaction" type="tTransaction" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tTransaction">
+ <xsd:complexContent>
+ <xsd:extension base="tSubProcess">
+ <xsd:attribute name="method" type="tTransactionMethod" default="##Compensate"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <xsd:simpleType name="tTransactionMethod">
+ <xsd:union memberTypes="xsd:anyURI">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:token">
+ <xsd:enumeration value="##Compensate" />
+ <xsd:enumeration value="##Image" />
+ <xsd:enumeration value="##Store" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:union>
+ </xsd:simpleType>
+
+ <xsd:element name="userTask" type="tUserTask" substitutionGroup="flowElement"/>
+ <xsd:complexType name="tUserTask">
+ <xsd:complexContent>
+ <xsd:extension base="tTask">
+ <xsd:sequence>
+ <xsd:element ref="rendering" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="implementation" type="tImplementation" default="##unspecified"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+</xsd:schema>
\ No newline at end of file
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/SimpleExtensions.bpmn2 b/org.eclipse.bpmn2.tests/res/extensibility/SimpleExtensions.bpmn2
new file mode 100644
index 0000000..3a454d7
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/SimpleExtensions.bpmn2
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:signavio="http://www.signavio.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="Signavio Process Editor, http://www.signavio.com" exporterVersion="4.3.1" expressionLanguage="http://www.w3.org/1999/XPath" id="sid-80c21a0e-b187-4913-8f1c-cd275fd88902" targetNamespace="http://www.omg.org/bpmn20" typeLanguage="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
+ <process id="sid-fd0d836c-78c6-496d-b927-566b1b432219" isClosed="false" isExecutable="false" processType="None">
+ <laneSet id="sid-9c3ae1ff-ab7d-4973-8fc8-502bf9a76071">
+ <lane id="sid-C400BBFB-71BB-43BD-B826-DF671E131A39" name="Requestor ">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
+ </extensionElements>
+ <flowNodeRef>sid-6AEEAB26-5615-4CA9-BE0C-0393ED700279</flowNodeRef>
+ <flowNodeRef>sid-ECAD7086-5B57-4A2B-B1D2-DAC242B9CA08</flowNodeRef>
+ </lane>
+ <lane id="sid-02B2505A-D034-41E7-ADC5-14AD9C21D33C" name="Approver ">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
+ </extensionElements>
+ <childLaneSet id="sid-ae7d57f5-550e-4c1b-848e-9ed37b615196">
+ <lane id="sid-BF9BD13C-5EAE-4FAB-8EA5-D629B9A6A757">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
+ </extensionElements>
+ <flowNodeRef>sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09</flowNodeRef>
+ <flowNodeRef>sid-D4278C35-13F9-422F-8191-A0FE0C8A2127</flowNodeRef>
+ <flowNodeRef>sid-26B345B1-D737-4F3F-9141-FA614757F551</flowNodeRef>
+ </lane>
+ </childLaneSet>
+ </lane>
+ <lane id="sid-1CB21F55-B24B-4E6B-B4D9-E840BAA89C75" name="ERP system">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
+ </extensionElements>
+ <flowNodeRef>sid-05A86C3D-668B-40F5-AE5B-438C6FCDD391</flowNodeRef>
+ <flowNodeRef>sid-723B5F8D-B626-4D7C-B917-D6AE3E920329</flowNodeRef>
+ </lane>
+ </laneSet>
+ <startEvent id="sid-6AEEAB26-5615-4CA9-BE0C-0393ED700279" name="Start">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
+ </extensionElements>
+ <outgoing>sid-DA2D6E82-6F99-4390-882D-7557CB100BF5</outgoing>
+ </startEvent>
+ <task completionQuantity="1" id="sid-ECAD7086-5B57-4A2B-B1D2-DAC242B9CA08" isForCompensation="false" name="Rework " startQuantity="1">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
+ <signavio:signavioMetaData metaKey="risklevel" metaValue=""/>
+ <signavio:signavioMetaData metaKey="externaldocuments" metaValue="[]"/>
+ </extensionElements>
+ <incoming>sid-6C50EC6A-262F-4B88-A77F-549672453489</incoming>
+ <outgoing>sid-9E5014DC-207F-4541-812F-3F1C01C0D1C0</outgoing>
+ </task>
+ <exclusiveGateway gatewayDirection="Mixed" id="sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09" name="Approval Required? ">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
+ </extensionElements>
+ <incoming>sid-DA2D6E82-6F99-4390-882D-7557CB100BF5</incoming>
+ <incoming>sid-9E5014DC-207F-4541-812F-3F1C01C0D1C0</incoming>
+ <outgoing>sid-292C273B-3FF3-46FB-B5DF-DBA90D219CED</outgoing>
+ <outgoing>sid-5DA32473-2450-4853-98C4-6821B450FC1D</outgoing>
+ </exclusiveGateway>
+ <task completionQuantity="1" id="sid-D4278C35-13F9-422F-8191-A0FE0C8A2127" isForCompensation="false" name="Accept / Reject " startQuantity="1">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
+ <signavio:signavioMetaData metaKey="risklevel" metaValue=""/>
+ <signavio:signavioMetaData metaKey="externaldocuments" metaValue="[]"/>
+ </extensionElements>
+ <incoming>sid-292C273B-3FF3-46FB-B5DF-DBA90D219CED</incoming>
+ <outgoing>sid-01767E49-615A-4277-98C3-AB183CBE3746</outgoing>
+ </task>
+ <exclusiveGateway gatewayDirection="Diverging" id="sid-26B345B1-D737-4F3F-9141-FA614757F551" name="">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
+ </extensionElements>
+ <incoming>sid-01767E49-615A-4277-98C3-AB183CBE3746</incoming>
+ <outgoing>sid-FED86589-5380-4E9A-BEF2-F6263690DA30</outgoing>
+ <outgoing>sid-6C50EC6A-262F-4B88-A77F-549672453489</outgoing>
+ </exclusiveGateway>
+ <task completionQuantity="1" id="sid-05A86C3D-668B-40F5-AE5B-438C6FCDD391" isForCompensation="false" name="Create purchase requisition" startQuantity="1">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
+ <signavio:signavioMetaData metaKey="risklevel" metaValue=""/>
+ <signavio:signavioMetaData metaKey="externaldocuments" metaValue="[]"/>
+ </extensionElements>
+ <incoming>sid-FED86589-5380-4E9A-BEF2-F6263690DA30</incoming>
+ <incoming>sid-5DA32473-2450-4853-98C4-6821B450FC1D</incoming>
+ <outgoing>sid-E0F69902-6F68-49E9-A5BA-5A5BA62FC07C</outgoing>
+ </task>
+ <endEvent id="sid-723B5F8D-B626-4D7C-B917-D6AE3E920329" name="End ">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
+ </extensionElements>
+ <incoming>sid-E0F69902-6F68-49E9-A5BA-5A5BA62FC07C</incoming>
+ </endEvent>
+ <sequenceFlow id="sid-DA2D6E82-6F99-4390-882D-7557CB100BF5" name="" sourceRef="sid-6AEEAB26-5615-4CA9-BE0C-0393ED700279" targetRef="sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09"/>
+ <sequenceFlow id="sid-292C273B-3FF3-46FB-B5DF-DBA90D219CED" name="Yes " sourceRef="sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09" targetRef="sid-D4278C35-13F9-422F-8191-A0FE0C8A2127">
+ <conditionExpression id="sid-5b48f5db-9e2e-4db0-a174-fc38cd5439cb" xsi:type="tFormalExpression">Yes
+</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow id="sid-5DA32473-2450-4853-98C4-6821B450FC1D" name="No " sourceRef="sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09" targetRef="sid-05A86C3D-668B-40F5-AE5B-438C6FCDD391">
+ <conditionExpression id="sid-b2425030-a832-4ed9-8729-9b6102fb7675" xsi:type="tFormalExpression">No
+</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow id="sid-01767E49-615A-4277-98C3-AB183CBE3746" name="" sourceRef="sid-D4278C35-13F9-422F-8191-A0FE0C8A2127" targetRef="sid-26B345B1-D737-4F3F-9141-FA614757F551"/>
+ <sequenceFlow id="sid-6C50EC6A-262F-4B88-A77F-549672453489" name="" sourceRef="sid-26B345B1-D737-4F3F-9141-FA614757F551" targetRef="sid-ECAD7086-5B57-4A2B-B1D2-DAC242B9CA08"/>
+ <sequenceFlow id="sid-9E5014DC-207F-4541-812F-3F1C01C0D1C0" name="" sourceRef="sid-ECAD7086-5B57-4A2B-B1D2-DAC242B9CA08" targetRef="sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09"/>
+ <sequenceFlow id="sid-E0F69902-6F68-49E9-A5BA-5A5BA62FC07C" name="" sourceRef="sid-05A86C3D-668B-40F5-AE5B-438C6FCDD391" targetRef="sid-723B5F8D-B626-4D7C-B917-D6AE3E920329"/>
+ <sequenceFlow id="sid-FED86589-5380-4E9A-BEF2-F6263690DA30" name="Accepted" sourceRef="sid-26B345B1-D737-4F3F-9141-FA614757F551" targetRef="sid-05A86C3D-668B-40F5-AE5B-438C6FCDD391">
+ <conditionExpression id="sid-fd3a9bc9-fe40-42ba-b979-d7677f1aeaac" xsi:type="tFormalExpression">Accepted</conditionExpression>
+ </sequenceFlow>
+ </process>
+ <collaboration id="sid-fea1ebbb-0e76-4cf7-b68b-8e1662323cdd">
+ <participant id="sid-FFFC1F77-2AD9-4B87-B71F-81A9911992E6" name="Purchase Requisition " processRef="sid-fd0d836c-78c6-496d-b927-566b1b432219">
+ <extensionElements>
+ <signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
+ </extensionElements>
+ </participant>
+ </collaboration>
+ <bpmndi:BPMNDiagram id="sid-474ee2a7-d39a-4ac9-8ec7-c4954c0e1f4e">
+ <bpmndi:BPMNPlane bpmnElement="sid-fea1ebbb-0e76-4cf7-b68b-8e1662323cdd" id="sid-81ad207f-76cd-42a5-b7cd-eb953ce42354">
+ <bpmndi:BPMNShape bpmnElement="sid-C400BBFB-71BB-43BD-B826-DF671E131A39" id="sid-C400BBFB-71BB-43BD-B826-DF671E131A39_gui" isHorizontal="true">
+ <omgdc:Bounds height="280.5" width="1104.0" x="180.0" y="210.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-02B2505A-D034-41E7-ADC5-14AD9C21D33C" id="sid-02B2505A-D034-41E7-ADC5-14AD9C21D33C_gui" isHorizontal="true">
+ <omgdc:Bounds height="280.5" width="1104.0" x="180.0" y="490.5"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-BF9BD13C-5EAE-4FAB-8EA5-D629B9A6A757" id="sid-BF9BD13C-5EAE-4FAB-8EA5-D629B9A6A757_gui" isHorizontal="true">
+ <omgdc:Bounds height="280.5" width="1074.0" x="210.0" y="490.5"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-1CB21F55-B24B-4E6B-B4D9-E840BAA89C75" id="sid-1CB21F55-B24B-4E6B-B4D9-E840BAA89C75_gui" isHorizontal="true">
+ <omgdc:Bounds height="250.0" width="1104.0" x="180.0" y="771.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-6AEEAB26-5615-4CA9-BE0C-0393ED700279" id="sid-6AEEAB26-5615-4CA9-BE0C-0393ED700279_gui">
+ <omgdc:Bounds height="30.0" width="30.0" x="225.0" y="335.25"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-ECAD7086-5B57-4A2B-B1D2-DAC242B9CA08" id="sid-ECAD7086-5B57-4A2B-B1D2-DAC242B9CA08_gui">
+ <omgdc:Bounds height="80.0" width="100.0" x="550.0" y="360.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09" id="sid-F73D428A-2BF7-4CE2-B50F-6576EF152B09_gui" isMarkerVisible="true">
+ <omgdc:Bounds height="40.0" width="40.0" x="255.0" y="549.04"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-D4278C35-13F9-422F-8191-A0FE0C8A2127" id="sid-D4278C35-13F9-422F-8191-A0FE0C8A2127_gui">
+ <omgdc:Bounds height="80.0" width="100.0" x="435.0" y="529.04"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-26B345B1-D737-4F3F-9141-FA614757F551" id="sid-26B345B1-D737-4F3F-9141-FA614757F551_gui" isMarkerVisible="true">
+ <omgdc:Bounds height="40.0" width="40.0" x="580.0" y="549.04"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-05A86C3D-668B-40F5-AE5B-438C6FCDD391" id="sid-05A86C3D-668B-40F5-AE5B-438C6FCDD391_gui">
+ <omgdc:Bounds height="80.0" width="100.0" x="315.0" y="825.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-723B5F8D-B626-4D7C-B917-D6AE3E920329" id="sid-723B5F8D-B626-4D7C-B917-D6AE3E920329_gui">
+ <omgdc:Bounds height="28.0" width="28.0" x="351.0" y="960.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape bpmnElement="sid-FFFC1F77-2AD9-4B87-B71F-81A9911992E6" id="sid-FFFC1F77-2AD9-4B87-B71F-81A9911992E6_gui" isHorizontal="false">
+ <omgdc:Bounds height="811.0" width="1134.0" x="150.0" y="210.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge bpmnElement="sid-FED86589-5380-4E9A-BEF2-F6263690DA30" id="sid-FED86589-5380-4E9A-BEF2-F6263690DA30_gui">
+ <omgdi:waypoint x="600.0" y="589.0"/>
+ <omgdi:waypoint x="600.5" y="865.0"/>
+ <omgdi:waypoint x="415.0" y="865.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="sid-E0F69902-6F68-49E9-A5BA-5A5BA62FC07C" id="sid-E0F69902-6F68-49E9-A5BA-5A5BA62FC07C_gui">
+ <omgdi:waypoint x="365.0" y="905.0"/>
+ <omgdi:waypoint x="365.0" y="960.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="sid-9E5014DC-207F-4541-812F-3F1C01C0D1C0" id="sid-9E5014DC-207F-4541-812F-3F1C01C0D1C0_gui">
+ <omgdi:waypoint x="550.0" y="400.0"/>
+ <omgdi:waypoint x="275.0" y="400.0"/>
+ <omgdi:waypoint x="275.0" y="549.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="sid-5DA32473-2450-4853-98C4-6821B450FC1D" id="sid-5DA32473-2450-4853-98C4-6821B450FC1D_gui">
+ <omgdi:waypoint x="275.0" y="589.0"/>
+ <omgdi:waypoint x="275.5" y="865.0"/>
+ <omgdi:waypoint x="315.0" y="865.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="sid-292C273B-3FF3-46FB-B5DF-DBA90D219CED" id="sid-292C273B-3FF3-46FB-B5DF-DBA90D219CED_gui">
+ <omgdi:waypoint x="295.0" y="569.0"/>
+ <omgdi:waypoint x="435.0" y="569.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="sid-6C50EC6A-262F-4B88-A77F-549672453489" id="sid-6C50EC6A-262F-4B88-A77F-549672453489_gui">
+ <omgdi:waypoint x="600.0" y="549.0"/>
+ <omgdi:waypoint x="600.0" y="440.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="sid-01767E49-615A-4277-98C3-AB183CBE3746" id="sid-01767E49-615A-4277-98C3-AB183CBE3746_gui">
+ <omgdi:waypoint x="535.0" y="569.0"/>
+ <omgdi:waypoint x="580.0" y="569.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge bpmnElement="sid-DA2D6E82-6F99-4390-882D-7557CB100BF5" id="sid-DA2D6E82-6F99-4390-882D-7557CB100BF5_gui">
+ <omgdi:waypoint x="255.0" y="350.0"/>
+ <omgdi:waypoint x="275.5" y="350.25"/>
+ <omgdi:waypoint x="275.0" y="549.0"/>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</definitions>
diff --git a/org.eclipse.bpmn2.tests/res/extensibility/TypedExtension.bpmn2 b/org.eclipse.bpmn2.tests/res/extensibility/TypedExtension.bpmn2
new file mode 100644
index 0000000..6dde8f8
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/res/extensibility/TypedExtension.bpmn2
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn20:definitions targetNamespace="http://www.abc.com"
+ xsi:schemaLocation="http://www.acme.com/bpmn-ext Example-Extension.xsd"
+ xmlns:bpmn20="http://www.omg.org/spec/BPMN/20100524/MODEL"
+ xmlns:bpmn-ext="http://www.acme.com/bpmn-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <bpmn20:extension mustUnderstand="true"
+ definition="bpmn-ext:newRootElement" />
+ <bpmn20:extension mustUnderstand="true"
+ definition="bpmn-ext:customArtifact" />
+
+ <!-- Extending through subclassing. Example 1 -->
+ <bpmn-ext:newRootElement id="ID_1">
+ <bpmn-ext:customSimpleElement>Text</bpmn-ext:customSimpleElement>
+ <bpmn-ext:customGlobalElement id="ID_2"
+ customAttribute="someAttributeValue">
+ <bpmn-ext:customElement></bpmn-ext:customElement>
+ </bpmn-ext:customGlobalElement>
+ </bpmn-ext:newRootElement>
+
+ <!-- Extending by attaching a custom attribute to an existing type -->
+ <bpmn20:process id="ID_3" name="Some Process"
+ bpmn-ext:customGlobalAttribute="A pluggable attribute">
+
+
+ <!-- Extending by attaching a custom element to an existing type -->
+ <!-- Unfortunate XSD behavior. Inherited attributes must appear before
+ subclass attributes. So has to be at top -->
+ <bpmn20:extensionElements>
+ <bpmn-ext:customGlobalElement>
+ <bpmn-ext:customElement />
+ </bpmn-ext:customGlobalElement>
+ </bpmn20:extensionElements>
+
+ <bpmn20:task />
+
+ <!-- Extending by subclassing. Example 2 -->
+ <bpmn-ext:customArtifact>
+ <bpmn-ext:customElement>Some element</bpmn-ext:customElement>
+ </bpmn-ext:customArtifact>
+
+ </bpmn20:process>
+
+</bpmn20:definitions>
diff --git a/org.eclipse.bpmn2.tests/src/org/eclipse/bpmn2/tests/ExtensibilityTests.java b/org.eclipse.bpmn2.tests/src/org/eclipse/bpmn2/tests/ExtensibilityTests.java
new file mode 100644
index 0000000..1096504
--- /dev/null
+++ b/org.eclipse.bpmn2.tests/src/org/eclipse/bpmn2/tests/ExtensibilityTests.java
@@ -0,0 +1,148 @@
+/**
+ *
+ */
+package org.eclipse.bpmn2.tests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.bpmn2.Bpmn2Factory;
+import org.eclipse.bpmn2.Definitions;
+import org.eclipse.bpmn2.ExtensionAttributeValue;
+import org.eclipse.bpmn2.Lane;
+import org.eclipse.bpmn2.Process;
+import org.eclipse.bpmn2.ProcessType;
+import org.eclipse.bpmn2.RootElement;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.impl.EAttributeImpl;
+import org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.ExtendedMetaData;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMap.Entry;
+import org.eclipse.emf.ecore.xml.type.AnyType;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @author Reiner Hille
+ *
+ */
+public class ExtensibilityTests extends Bpmn2SerializationTest {
+
+ protected Definitions model;
+
+ /**
+ * Prepares a test run by initializing all fields.
+ *
+ * A basic BPMN2 model is created in {@link #model}, thereby initializing the BPMN2 package.
+ */
+ @Before
+ public void setUpModel() {
+ model = TestHelper.initBasicModel("urn:tns1");
+ }
+
+ /**
+ * The extension for all files that are created.
+ * @return File extension, i.e. {@code "bpmn2"}.
+ */
+ @Override
+ protected String getFileExtension() {
+ return EXTENSION_BPMN2_XML;
+ }
+
+ @Test
+ public void testAttributeExtension() throws IOException {
+ Process p = Bpmn2Factory.eINSTANCE.createProcess();
+ p.setProcessType(ProcessType.NONE);
+ p.setIsExecutable(false);
+ ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
+ EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature(
+ "http://example.org", "packageName", false, false);
+ SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute,
+ "myPackage");
+ p.getAnyAttribute().add(extensionEntry);
+ model.getRootElements().add(p);
+ // Checks
+ Resource res = saveAndLoadModel("extensionAttributeTest", model);
+ Definitions d = TestHelper.getRootDefinitionElement(res);
+ assertEquals(d.getRootElements().size(), 1);
+ assertTrue(d.getRootElements().get(0) instanceof Process);
+ Process p2 = (Process) d.getRootElements().get(0);
+ assertEquals(p2.getAnyAttribute().size(), 1);
+ FeatureMap.Entry extAttribute2 = p2.getAnyAttribute().get(0);
+ assertEquals(extAttribute2.getEStructuralFeature().getName(), "packageName");
+ assertEquals(extAttribute2.getValue(), "myPackage");
+ }
+
+ @Test
+ public void testElementExtension() throws IOException {
+ Process p = Bpmn2Factory.eINSTANCE.createProcess();
+ p.setProcessType(ProcessType.NONE);
+ p.setIsExecutable(false);
+ ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
+ EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature(
+ "http://example.org", "foo", true, false);
+ SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, "bar");
+ ExtensionAttributeValue extension = Bpmn2Factory.eINSTANCE.createExtensionAttributeValue();
+ extension.getValue().add(extensionEntry);
+
+ p.getExtensionValues().add(extension);
+ // It looks odd that you need to add an extensionAttributeValue that contains a list of
+ // extension to a list here.
+ // However, the XSD allows only 0..1 element here, while CMOF allows multiple.
+
+ model.getRootElements().add(p);
+ // Checks
+ Resource res = saveAndLoadModel("extensionElementTest", model);
+ Definitions d = TestHelper.getRootDefinitionElement(res);
+ assertEquals(d.getRootElements().size(), 1);
+ assertTrue(d.getRootElements().get(0) instanceof Process);
+ Process p2 = (Process) d.getRootElements().get(0);
+ assertEquals(p2.getExtensionValues().size(), 1);
+ ExtensionAttributeValue ext2 = p2.getExtensionValues().get(0);
+ assertEquals(ext2.getValue().size(), 1);
+ FeatureMap.Entry extAttribute2 = ext2.getValue().get(0);
+ assertEquals(extAttribute2.getEStructuralFeature().getName(), "foo");
+ assertTrue(extAttribute2.getValue() instanceof AnyType);
+ AnyType any = (AnyType) extAttribute2.getValue();
+ assertEquals(any.getMixed().getValue(0), "bar"); // Simple content
+ }
+
+ @Test
+ public void testExternalElementExtension() {
+ // Tests an external file if the extension attributes can be read correctly.
+ Resource res = TestHelper.getResource(URI
+ .createFileURI("res/extensibility/SimpleExtensions.bpmn2"));
+ EObject sample = res.getEObject("sid-C400BBFB-71BB-43BD-B826-DF671E131A39");
+ assertTrue(sample instanceof Lane);
+ Lane lane = (Lane) sample;
+ assertEquals(lane.getExtensionValues().size(), 1);
+ ExtensionAttributeValue ext = lane.getExtensionValues().get(0);
+ assertEquals(ext.getValue().size(), 1);
+ FeatureMap.Entry entry = ext.getValue().get(0);
+ assertTrue(entry.getValue() instanceof AnyType);
+ assertEquals(entry.getEStructuralFeature().getName(), "signavioMetaData");
+ AnyType anyType = (AnyType) entry.getValue();
+ assertEquals(anyType.getAnyAttribute().size(), 2);
+ Entry colorAttribute = anyType.getAnyAttribute().get(0);
+ assertEquals(colorAttribute.getEStructuralFeature().getName(), "metaKey");
+ assertEquals(colorAttribute.getValue(), "bgcolor");
+ }
+
+ @Test
+ public void testExternalTypedExtension() {
+ // Tests an external file if the extension attributes can be read correctly.
+ Resource res = TestHelper.getResource(URI.createFileURI(new File(
+ "res/extensibility/TypedExtension.bpmn2").getAbsolutePath()));
+ // TOFIX: Extension Schema loading currently only work with absolute URIs.
+ // Else the Schema location is considered relative to current working directory and not relative to BPMN file.
+ EObject sample = res.getEObject("ID_1");
+ assertTrue(sample instanceof RootElement);
+ assertEquals(sample.eClass().getName(), "TSubclassExample1");
+ }
+}