<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.w3.org/2004/04/ws-chor/cdl" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:cdl="http://www.w3.org/2004/04/ws-chor/cdl" elementFormDefault="qualified">
	<complexType name="tExtensibleElements">
		<annotation>
			<documentation>
        This type is extended by other CDL component types to allow 
          elements and attributes from other namespaces to be added. 
        This type also contains the optional description element that 
        is applied to all CDL constructs.
      </documentation>
		</annotation>
		<sequence>
			<element name="description" minOccurs="0">
				<complexType mixed="true">
					<sequence minOccurs="0" maxOccurs="unbounded">
						<any processContents="lax"/>
					</sequence>
				</complexType>
			</element>
			<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
		<anyAttribute namespace="##other" processContents="lax"/>
	</complexType>
	<element name="package" type="cdl:tPackage"/>
	<complexType name="tPackage">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="importDefinitions" type="cdl:tImportDefinitions" minOccurs="0" maxOccurs="unbounded"/>
					<element name="informationType" type="cdl:tInformationType" minOccurs="0" maxOccurs="unbounded"/>
					<element name="token" type="cdl:tToken" minOccurs="0" maxOccurs="unbounded"/>
					<element name="tokenLocator" type="cdl:tTokenLocator" minOccurs="0" maxOccurs="unbounded"/>
					<element name="role" type="cdl:tRole" minOccurs="0" maxOccurs="unbounded"/>
					<element name="relationship" type="cdl:tRelationship" minOccurs="0" maxOccurs="unbounded"/>
					<element name="participant" type="cdl:tParticipant" minOccurs="0" maxOccurs="unbounded"/>
					<element name="channelType" type="cdl:tChannelType" minOccurs="0" maxOccurs="unbounded"/>
					<element name="choreography" type="cdl:tChoreography" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="author" type="string" use="optional"/>
				<attribute name="version" type="string" use="required"/>
				<attribute name="targetNamespace" type="anyURI" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tImportDefinitions">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="import" type="cdl:tImport" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tImport">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="namespace" type="anyURI" use="required"/>
				<attribute name="location" type="anyURI" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tInformationType">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="type" type="QName" use="optional"/>
				<attribute name="element" type="QName" use="optional"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tToken">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="informationType" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tTokenLocator">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="tokenName" type="QName" use="required"/>
				<attribute name="informationType" type="QName" use="required"/>
				<attribute name="query" type="cdl:tXPath-expr" use="optional"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tRole">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="behavior" type="cdl:tBehavior" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tBehavior">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="interface" type="QName" use="optional"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tRelationship">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="role" type="cdl:tRoleRef" minOccurs="2" maxOccurs="2"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tRoleRef">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="type" type="QName" use="required"/>
				<attribute name="behavior" type="NCName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tParticipant">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="role" type="cdl:tRoleRef2" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tRoleRef2">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="type" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tChannelType">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="passing" type="cdl:tPassing" minOccurs="0" maxOccurs="unbounded"/>
					<element name="role" type="cdl:tRoleRef3"/>
					<element name="reference" type="cdl:tReference"/>
					<element name="identity" type="cdl:tIdentity" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="usage" type="cdl:tUsage" use="optional" default="unlimited"/>
				<attribute name="action" type="cdl:tAction" use="optional" default="request-respond"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tRoleRef3">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="type" type="QName" use="required"/>
				<attribute name="behavior" type="NCName" use="optional"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tPassing">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="channel" type="QName" use="required"/>
				<attribute name="action" type="cdl:tAction" use="optional" default="request-respond"/>
				<attribute name="new" type="boolean" use="optional" default="true"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tReference">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="token" type="cdl:tTokenReference" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tTokenReference">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="name" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tIdentity">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="token" type="cdl:tTokenReference" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tChoreography">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="relationship" type="cdl:tRelationshipRef" maxOccurs="unbounded"/>
					<element name="variableDefinitions" type="cdl:tVariableDefinitions" minOccurs="0"/>
					<element name="choreography" type="cdl:tChoreography" minOccurs="0" maxOccurs="unbounded"/>
					<group ref="cdl:activity"/>
					<element name="exception" type="cdl:tException" minOccurs="0"/>
					<element name="finalizer" type="cdl:tFinalizer" minOccurs="0"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="complete" type="cdl:tBoolean-expr" use="optional"/>
				<attribute name="isolation" type="cdl:tIsolation" use="optional" default="dirty-write"/>
				<attribute name="root" type="boolean" use="optional" default="false"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tRelationshipRef">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="type" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tVariableDefinitions">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="variable" type="cdl:tVariable" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tVariable">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="informationType" type="QName" use="optional"/>
				<attribute name="channelType" type="QName" use="optional"/>
				<attribute name="mutable" type="boolean" use="optional" default="true"/>
				<attribute name="free" type="boolean" use="optional" default="false"/>
				<attribute name="silent-action" type="boolean" use="optional" default="false"/>
				<attribute name="role" type="QName" use="optional"/>
			</extension>
		</complexContent>
	</complexType>
	<group name="activity">
		<choice>
			<element name="sequence" type="cdl:tSequence"/>
			<element name="parallel" type="cdl:tParallel"/>
			<element name="choice" type="cdl:tChoice"/>
			<element name="workunit" type="cdl:tWorkunit"/>
			<element name="interaction" type="cdl:tInteraction"/>
			<element name="perform" type="cdl:tPerform"/>
			<element name="assign" type="cdl:tAssign"/>
			<element name="noaction" type="cdl:tNoaction"/>
		</choice>
	</group>
	<complexType name="tSequence">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<group ref="cdl:activity" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tParallel">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<group ref="cdl:activity" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tChoice">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<group ref="cdl:activity" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tWorkunit">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<group ref="cdl:activity"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="guard" type="cdl:tBoolean-expr" use="optional"/>
				<attribute name="repeat" type="cdl:tBoolean-expr" use="optional"/>
				<attribute name="block" type="boolean" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tPerform">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="alias" type="cdl:tAlias" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="choreographyName" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tAlias">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="this" type="cdl:tAliasVariable"/>
					<element name="free" type="cdl:tAliasVariable"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tAliasVariable">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="variable" type="cdl:tXPath-expr" use="required"/>
				<attribute name="role" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tInteraction">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="participate" type="cdl:tParticipate"/>
					<element name="exchange" type="cdl:tExchange" minOccurs="0" maxOccurs="unbounded"/>
					<element name="record" type="cdl:tRecord" minOccurs="0" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
				<attribute name="channelVariable" type="QName" use="required"/>
				<attribute name="operation" type="NCName" use="required"/>
				<attribute name="time-to-complete" type="duration" use="optional"/>
				<attribute name="align" type="boolean" use="optional" default="false"/>
				<attribute name="initiateChoreography" type="boolean" use="optional" default="false"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tParticipate">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="relationship" type="QName" use="required"/>
				<attribute name="fromRole" type="QName" use="required"/>
				<attribute name="toRole" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tExchange">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="use" type="cdl:tVariableRef"/>
					<element name="populate" type="cdl:tVariableRef"/>
				</sequence>
				<attribute name="messageContentType" type="QName" use="required"/>
				<attribute name="action" type="cdl:tAction2" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tVariableRef">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<attribute name="variable" type="cdl:tXPath-expr" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tRecord">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="source" type="cdl:tVariableRef"/>
					<element name="target" type="cdl:tVariableRef"/>
				</sequence>
				<attribute name="name" type="string" use="required"/>
				<attribute name="role" type="QName" use="required"/>
				<attribute name="action" type="cdl:tAction2" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tAssign">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="copy" type="cdl:tCopy" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="role" type="QName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tCopy">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="source" type="cdl:tVariableRef"/>
					<element name="target" type="cdl:tVariableRef"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tNoaction">
		<complexContent>
			<extension base="cdl:tExtensibleElements"/>
		</complexContent>
	</complexType>
	<complexType name="tException">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="workunit" type="cdl:tWorkunit" maxOccurs="unbounded"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<complexType name="tFinalizer">
		<complexContent>
			<extension base="cdl:tExtensibleElements">
				<sequence>
					<element name="workunit" type="cdl:tWorkunit"/>
				</sequence>
				<attribute name="name" type="NCName" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<simpleType name="tAction">
		<restriction base="string">
			<enumeration value="request-respond"/>
			<enumeration value="request"/>
			<enumeration value="respond"/>
		</restriction>
	</simpleType>
	<simpleType name="tAction2">
		<restriction base="string">
			<enumeration value="request"/>
			<enumeration value="respond"/>
		</restriction>
	</simpleType>
	<simpleType name="tUsage">
		<restriction base="string">
			<enumeration value="once"/>
			<enumeration value="unlimited"/>
		</restriction>
	</simpleType>
	<simpleType name="tBoolean-expr">
		<restriction base="string"/>
	</simpleType>
	<simpleType name="tXPath-expr">
		<restriction base="string"/>
	</simpleType>
	<simpleType name="tIsolation">
		<restriction base="string">
			<enumeration value="dirty-write"/>
			<enumeration value="dirty-read"/>
			<enumeration value="serializable"/>
		</restriction>
	</simpleType>
</schema>

