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&#10;">

+            <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&#10;">

+            <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?&#10;&#10;">

+         <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&#10;" 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&#10;">

+         <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&#10;" 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&#10;" 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&#10;" 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");

+    }

+}