<!ENTITY % ComplexType "EnumerationType">
<!ENTITY % Type "EnumerationType 
	| BasicType 
	| PlainType 
	| DeclaredType">
<!ENTITY % XpressionType "NaryXpression
	| DataFieldRef
	| Literal">
<!ELEMENT Package (PackageHeader,(ConformanceClass)?,(ExternalPackages)?,(TypeDeclarations)?,(Participants)?,(Applications)?,(DataFields)?,(WorkflowProcesses)?,(ExtendedAttributes)?)>
<!ATTLIST Package xmlns:xpdl CDATA #FIXED "http://www.wfmc.org/standards/docs/xpdl">
<!ATTLIST Package Id NMTOKEN #REQUIRED >
<!ATTLIST Package Name CDATA #IMPLIED >
<!ELEMENT PackageHeader (XPDLVersion,Vendor,Created,(Description)?)>
<!ELEMENT ExternalPackages (ExternalPackage)*>
<!ELEMENT TypeDeclarations (TypeDeclaration)*>
<!ELEMENT Participants (Participant)*>
<!ELEMENT Applications (Application)*>
<!ELEMENT DataFields (DataField)*>
<!ELEMENT WorkflowProcesses (WorkflowProcess)*>
<!ELEMENT ExtendedAttributes (ExtendedAttribute)*>
<!ELEMENT FormalParameters (FormalParameter)*>
<!ELEMENT Activities (Activity)*>
<!ELEMENT Transitions (Transition)*>
<!ELEMENT TransitionRestrictions (TransitionRestriction)*>
<!ELEMENT ActualParameters (ActualParameter)*>
<!ELEMENT TransitionRefs (TransitionRef)*>
<!ELEMENT Participant (ParticipantType,(Description)?,(ExtendedAttributes)?)>
<!ATTLIST Participant Id NMTOKEN #REQUIRED >
<!ATTLIST Participant Name CDATA #IMPLIED >
<!ELEMENT ParticipantType EMPTY>
<!ATTLIST ParticipantType Type (ROLE) #REQUIRED >
<!ELEMENT XPDLVersion (#PCDATA)>
<!ELEMENT Vendor (#PCDATA)>
<!ELEMENT Created (#PCDATA)>
<!ELEMENT Description (#PCDATA)>
<!ELEMENT ExtendedAttribute ANY>
<!ATTLIST ExtendedAttribute Name NMTOKEN #REQUIRED >
<!ATTLIST ExtendedAttribute Value CDATA #IMPLIED >
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Version (#PCDATA)>
<!ELEMENT Codepage (#PCDATA)>
<!ELEMENT Countrykey (#PCDATA)>
<!ELEMENT ConformanceClass EMPTY>
<!ATTLIST ConformanceClass GraphConformance (FULL_BLOCKED|LOOP_BLOCKED|NON_BLOCKED) #IMPLIED >
<!ELEMENT ExternalPackage (ExtendedAttributes)?>
<!ATTLIST ExternalPackage href CDATA #IMPLIED >
<!ELEMENT TypeDeclaration ((EnumerationType|BasicType|PlainType|DeclaredType),(Description)?,(ExtendedAttributes)?)>
<!ATTLIST TypeDeclaration Id NMTOKEN #REQUIRED >
<!ATTLIST TypeDeclaration Name CDATA #IMPLIED >
<!ELEMENT PlainType EMPTY>
<!ATTLIST PlainType Type (BOOLEAN) #REQUIRED >
<!ELEMENT BasicType EMPTY>
<!ATTLIST BasicType Type (STRING|FLOAT|INTEGER|REFERENCE|DATETIME) #REQUIRED >
<!ELEMENT EnumerationType (EnumerationValue)+>
<!ELEMENT EnumerationValue EMPTY>
<!ATTLIST EnumerationValue Name NMTOKEN #REQUIRED >
<!ELEMENT DeclaredType EMPTY>
<!ATTLIST DeclaredType Id NMTOKEN #REQUIRED >
<!ELEMENT WorkflowProcess (ProcessHeader,(FormalParameters)?,(DataFields)?,(Participants)?,(Applications)?,(Activities)?,(Transitions)?,(ExtendedAttributes)?)>
<!ATTLIST WorkflowProcess Id NMTOKEN #REQUIRED >
<!ATTLIST WorkflowProcess Name CDATA #IMPLIED >
<!ELEMENT ProcessHeader ((Created)?,(Description)?,(ValidFrom)?,(ValidTo)?)>
<!ELEMENT ValidFrom (#PCDATA)>
<!ELEMENT ValidTo (#PCDATA)>
<!ELEMENT DataField (DataType,(InitialValue)?,(Length)?,(Description)?,(ExtendedAttributes)?)>
<!ATTLIST DataField Id NMTOKEN #REQUIRED >
<!ATTLIST DataField Name CDATA #IMPLIED >
<!ELEMENT DataType (EnumerationType|BasicType|PlainType|DeclaredType)>
<!ELEMENT InitialValue (#PCDATA)>
<!ELEMENT Length (#PCDATA)>
<!ELEMENT Application ((Description)?,(FormalParameters)?,(ExtendedAttributes)?)>
<!ATTLIST Application Id NMTOKEN #REQUIRED >
<!ATTLIST Application Name CDATA #IMPLIED >
<!ELEMENT Activity ((Description)?,(Route|Implementation),(Performer)?,(SimulationInformation)?,(Icon)?,(TransitionRestrictions)?,(ExtendedAttributes)?)>
<!ATTLIST Activity Id NMTOKEN #REQUIRED >
<!ATTLIST Activity Name CDATA #IMPLIED >
<!ELEMENT Route EMPTY>
<!ELEMENT Implementation (No|Tool|SubFlow|Loop)>
<!ELEMENT No EMPTY>
<!ELEMENT Tool ((ActualParameters)?,(Description)?,(ExtendedAttributes)?)>
<!ATTLIST Tool Id NMTOKEN #REQUIRED >
<!ATTLIST Tool Type (APPLICATION|PROCEDURE) #IMPLIED >
<!ELEMENT SubFlow (ActualParameters)?>
<!ATTLIST SubFlow Id CDATA #REQUIRED >
<!ATTLIST SubFlow Execution (ASYNCHR|SYNCHR) #IMPLIED >
<!ELEMENT Loop (Condition)?>
<!ATTLIST Loop Kind (WHILE|REPEAT_UNTIL) #IMPLIED >
<!ELEMENT ActualParameter (#PCDATA)>
<!ELEMENT Performer (#PCDATA)>
<!ELEMENT Icon (#PCDATA)>
<!ELEMENT TransitionRestriction ((Join)?,(Split)?)>
<!ELEMENT Join EMPTY>
<!ATTLIST Join Type (AND|XOR) #IMPLIED >
<!ELEMENT Split (TransitionRefs)?>
<!ATTLIST Split Type (AND|XOR) #IMPLIED >
<!ELEMENT TransitionRef EMPTY>
<!ATTLIST TransitionRef Id NMTOKEN #REQUIRED >
<!ELEMENT SimulationInformation (Cost)>
<!ELEMENT Cost (#PCDATA)>
<!ELEMENT Transition ((Condition)?,(Description)?,(ExtendedAttributes)?)>
<!ATTLIST Transition Id NMTOKEN #REQUIRED >
<!ATTLIST Transition From NMTOKEN #REQUIRED >
<!ATTLIST Transition To NMTOKEN #REQUIRED >
<!ATTLIST Transition Loop (NOLOOP|FROMLOOP|TOLOOP) #IMPLIED >
<!ATTLIST Transition Name CDATA #IMPLIED >
<!ELEMENT Condition (Xpression)*>
<!ATTLIST Condition Type (CONDITION|OTHERWISE) #IMPLIED >
<!ELEMENT Xpression ANY>
<!ELEMENT ConditionXpression (NaryXpression|DataFieldRef|Literal)>
<!ELEMENT NaryXpression (NaryXpression|DataFieldRef|Literal)*>
<!ATTLIST NaryXpression Operator (EXITCODE) #REQUIRED >
<!ELEMENT DataFieldRef EMPTY>
<!ATTLIST DataFieldRef Name NMTOKEN #REQUIRED >
<!ELEMENT Literal (#PCDATA)>
<!ELEMENT FormalParameter (DataType,(Description)?)>
<!ATTLIST FormalParameter Id NMTOKEN #REQUIRED >
<!ATTLIST FormalParameter Index NMTOKEN #IMPLIED >
<!ATTLIST FormalParameter Mode (IN|OUT|INOUT) "IN">
