XPDL (XML Process Definition Language)

XPDL

XPDL is an XML standard, miantined by WfMC (Workflow Management Coalition). The language is to be used for interchanging business process definitions between systems.

 TBD: As of 2008-05-29, apprently the current version is now 2.1. The following reference must be updated

As of 2007-03-27, the current version is 2.0 (WfMC-TC-1025, 2005-10-03) and it intends to sychronize with the BPMN. For this reason, many BPMN editors may have the visual aspect of the model handled by BPMN but may produce XPDL as an output. (BPMN may also output BPEL). On the other hand, there are XPDL editors, which may have a visual modeling which uses notations or graphical symbols independent of BPMN notations.

XPDL web site lists many implementors (see the implemetor list on the XPDL site) and supporters .

Free XPDL editor

Example by JaWE XPDL Editor (Java Open Source)

This is an example of a Process, which is being authored with JaWE (or Together Workflow Editor) 2.1.1.

Although the XPDL design is not complete yet, the XPDL looks like as below.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://www.wfmc.org/2002/XPDL1.0"
    xmlns:xpdl="http://www.wfmc.org/2002/XPDL1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="newpkg"
    Name="newpkg"
    xsi:schemaLocation="http://www.wfmc.org/2002/XPDL1.0 http://wfmc.org/standards/docs/TC-1025_schema_10_xpdl.xsd">
    <PackageHeader>
        <XPDLVersion>1.0</XPDLVersion>
        <Vendor>Together</Vendor>
        <Created>2007-03-28 15:12:06</Created>
    </PackageHeader>
    <WorkflowProcesses>
        <WorkflowProcess Id="newpkg_wp1" Name="newpkg_wp1">
            <ProcessHeader>
                <Created>2007-03-28 15:12:14</Created>
            </ProcessHeader>
            <Participants>
                <Participant Id="newpkg_wp1_par1">
                    <ParticipantType Type="ROLE" />
                </Participant>
                <Participant Id="newpkg_wp1_par2">
                    <ParticipantType Type="ROLE" />
                </Participant>
            </Participants>
            <Activities>
                <Activity Id="newpkg_wp1_act1">
                    <Implementation>
                        <No />
                    </Implementation>
                    <Performer>newpkg_wp1_par1</Performer>
                </Activity>
                <Activity Id="newpkg_wp1_act2">
                    <Implementation>
                        <No />
                    </Implementation>
                    <Performer>newpkg_wp1_par2</Performer>
                </Activity>
                <Activity Id="newpkg_wp1_act3">
                    <Route />
                    <TransitionRestrictions>
                        <TransitionRestriction>
                            <Join Type="AND" />
                            <Split Type="XOR">
                                <TransitionRefs>
                                    <TransitionRef Id="newpkg_wp1_tra4" />
                                    <TransitionRef Id="newpkg_wp1_tra3" />
                                    <TransitionRef Id="newpkg_wp1_tra5" />
                                    <TransitionRef Id="newpkg_wp1_tra6" />
                                </TransitionRefs>
                            </Split>
                        </TransitionRestriction>
                    </TransitionRestrictions>
                </Activity>
                <Activity Id="newpkg_wp1_act4">
                    <Implementation>
                        <No />
                    </Implementation>
                    <Performer>newpkg_wp1_par2</Performer>
                </Activity>
                <Activity Id="newpkg_wp1_act5">
                    <Implementation>
                        <No />
                    </Implementation>
                    <Performer>newpkg_wp1_par1</Performer>
                </Activity>
                <Activity Id="newpkg_wp1_act6">
                    <Implementation>
                        <No />
                    </Implementation>
                    <Performer>newpkg_wp1_par2</Performer>
                </Activity>
                <Activity Id="newpkg_wp1_act7">
                    <Implementation>
                        <No />
                    </Implementation>
                </Activity>
            </Activities>
            <Transitions>
                <Transition From="newpkg_wp1_act4" Id="newpkg_wp1_tra2"
                    To="newpkg_wp1_act3" />
                <Transition From="newpkg_wp1_act1" Id="newpkg_wp1_tra1"
                    To="newpkg_wp1_act3" />
                <Transition From="newpkg_wp1_act3" Id="newpkg_wp1_tra3"
                    To="newpkg_wp1_act2">
                    <Condition Type="CONDITION">A = true</Condition>
                </Transition>
                <Transition From="newpkg_wp1_act3" Id="newpkg_wp1_tra4"
                    To="newpkg_wp1_act5">
                    <Condition Type="DEFAULTEXCEPTION" />
                </Transition>
                <Transition From="newpkg_wp1_act3" Id="newpkg_wp1_tra5"
                    To="newpkg_wp1_act6">
                    <Condition Type="OTHERWISE" />
                </Transition>
                <Transition From="newpkg_wp1_act3" Id="newpkg_wp1_tra6"
                    To="newpkg_wp1_act7">
                    <Condition Type="EXCEPTION">C</Condition>
                </Transition>
            </Transitions>
        </WorkflowProcess>
    </WorkflowProcesses>
</Package>

XPDL data model

With JaWE, you can define multiple XPDL Packages. Within a Package, you can define multiple WorkflowProcesses (short for Processes).

Within Processes you can define Activity Set as below.

 
For Package and Processes, you can define Activity Set (Blocks), Data fields, Applications, Procedures and Formal parameters. Within Tool and Sub-flow Activities, you can define Actual parameters to call Application (or Procedure) and another WorkflowProcess, respectively.

You can define only Start and End terminators. Different from YAWL, you can define multiple Start and End terminators within a Process or Participants. Apparently this is JaWE specific implementation and XPDL itself does not define starts or ends. Also, you can cross-over Particpant boundaries with the arrows (called Transitions).

The nodes in a workflow are called Actvities. With JaWE, you can create 5 different types of Activities: They are, Activity without implementation, Tool Activity, Sub-flow Activity, Block Activity and Route Activity.

A Sub-flow Actviity calls another Process. A Block Activity is an Activity Set created within the Process itself. Blocks do not pass Actual Paramerters.

Tool Activity is with an <Implemetation> which is an Application or a Prcedure defined elsewhere.

There are And-split, And-join, Xor-split and Xor-join, which are expressed as options for Rute Activities. The routing conditions are options which can be set on the Transition Arrows. In XML format, these conditions appear with <Transition> elements.

There are different ways to express workflow in XML. XPDL chooses to define Activities with in one section without indicatiings the relationship between them and to show linkage of them with ID references in the <Transitions> section separately. <Transitions> is actually the representation of workflow control flow. There, however, are no elements representing or indicating Start or End. Start and End points have to be worked out by the system after reading all the <Transition> elements in the XML document.

TBD: XPDL data model and elements diagram

This Process shown above is a part of a Package, which produced the folllowing XPDL (process 2 is not shown in the above figure). You can see basic elements of XPDL and how they are used.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://www.wfmc.org/2002/XPDL1.0"
    xmlns:xpdl="http://www.wfmc.org/2002/XPDL1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="Package_1"
    Name="pkg_1"
    xsi:schemaLocation="http://www.wfmc.org/2002/XPDL1.0 http://wfmc.org/standards/docs/TC-1025_schema_10_xpdl.xsd">
    <PackageHeader>
        <XPDLVersion>1.0</XPDLVersion>
        <Vendor>Together</Vendor>
        <Created>2007-03-28 15:12:06</Created>
    </PackageHeader>
    <WorkflowProcesses>
        <WorkflowProcess Id="newpkg_wp1" Name="process_1">
            <ProcessHeader>
                <Created>2007-03-28 15:12:14</Created>
            </ProcessHeader>
            <FormalParameters>
                <FormalParameter Id="newpkg_wp1_fp1" Mode="IN">
                    <DataType>
                        <BasicType Type="STRING" />
                    </DataType>
                </FormalParameter>
            </FormalParameters>
            <DataFields>
                <DataField Id="newpkg_wp1_df1" IsArray="FALSE">
                    <DataType>
                        <BasicType Type="STRING" />
                    </DataType>
                </DataField>
            </DataFields>
            <Participants>
                <Participant Id="Pariticipant_Role_1">
                    <ParticipantType Type="ROLE" />
                </Participant>
            </Participants>
            <Applications>
                <Application Id="newpkg_wp1_app1">
                    <FormalParameters>
                        <FormalParameter Id="newpkg_wp1_fp1"
                            Mode="IN">
                            <DataType>
                                <BasicType Type="STRING" />
                            </DataType>
                        </FormalParameter>
                    </FormalParameters>
                </Application>
            </Applications>
            <ActivitySets>
                <ActivitySet Id="activitySet_1">
                    <Activities>
                        <Activity Id="newpkg_wp1_act2">
                            <Implementation>
                                <No />
                            </Implementation>
                        </Activity>
                    </Activities>
                </ActivitySet>
            </ActivitySets>
            <Activities>
                <Activity Id="Undefined_Activity">
                    <Implementation>
                        <No />
                    </Implementation>
                    <Performer>Pariticipant_Role_1</Performer>
                </Activity>
                <Activity Id="Route_Activity_Xor_Split">
                    <Route />
                    <TransitionRestrictions>
                        <TransitionRestriction>
                            <Split Type="XOR">
                                <TransitionRefs>
                                    <TransitionRef Id="newpkg_wp1_tra2" />
                                    <TransitionRef Id="newpkg_wp1_tra1" />
                                </TransitionRefs>
                            </Split>
                        </TransitionRestriction>
                    </TransitionRestrictions>
                </Activity>
                <Activity Id="Subflow_Activity">
                    <Implementation>
                        <SubFlow Execution="SYNCHR" Id="newpkg_wp2">
                            <ActualParameters>
                                <ActualParameter>
                                    newpkg_wp1_df1
                                </ActualParameter>
                            </ActualParameters>
                        </SubFlow>
                    </Implementation>
                </Activity>
                <Activity Id="Block_Activity">
                    <BlockActivity BlockId="activitySet_1" />
                </Activity>
                <Activity Id="Route_Activity_And_split">
                    <Route />
                    <TransitionRestrictions>
                        <TransitionRestriction>
                            <Join Type="XOR" />
                            <Split Type="AND">
                                <TransitionRefs>
                                    <TransitionRef Id="newpkg_wp1_tra3" />
                                    <TransitionRef Id="newpkg_wp1_tra4" />
                                </TransitionRefs>
                            </Split>
                        </TransitionRestriction>
                    </TransitionRestrictions>
                </Activity>
                <Activity Id="Tool_Activity">
                    <Implementation>
                        <Tool Id="newpkg_wp1_app1" Type="APPLICATION">
                            <ActualParameters>
                                <ActualParameter>
                                    newpkg_wp1_df1
                                </ActualParameter>
                            </ActualParameters>
                        </Tool>
                    </Implementation>
                    <Performer>Pariticipant_Role_1</Performer>
                </Activity>
            </Activities>
            <Transitions>
                <Transition From="Route_Activity_Xor_Split"
                    Id="newpkg_wp1_tra1" To="Undefined_Activity">
                    <Condition Type="CONDITION">A=B</Condition>
                </Transition>
                <Transition From="Route_Activity_And_split"
                    Id="newpkg_wp1_tra3" To="Subflow_Activity" />
                <Transition From="Route_Activity_And_split"
                    Id="newpkg_wp1_tra4" To="Block_Activity" />
                <Transition From="Route_Activity_Xor_Split"
                    Id="newpkg_wp1_tra2" To="Tool_Activity">
                    <Condition Type="OTHERWISE" />
                </Transition>
                <Transition From="Undefined_Activity"
                    Id="newpkg_wp1_tra5" To="Route_Activity_And_split" />
                <Transition From="Tool_Activity" Id="newpkg_wp1_tra6"
                    To="Route_Activity_And_split" />
            </Transitions>
        </WorkflowProcess>
        <WorkflowProcess Id="newpkg_wp2" Name="process_2">
            <ProcessHeader>
                <Created>2007-03-28 16:04:43</Created>
            </ProcessHeader>
            <FormalParameters>
                <FormalParameter Id="newpkg_wp2_fp1" Mode="IN">
                    <DataType>
                        <BasicType Type="STRING" />
                    </DataType>
                </FormalParameter>
            </FormalParameters>
            <Activities>
                <Activity Id="newpkg_wp2_act1">
                    <Implementation>
                        <No />
                    </Implementation>
                </Activity>
            </Activities>
        </WorkflowProcess>
    </WorkflowProcesses>
</Package>

XPDL syntax characteristics

TBD

XPDL and BPMN compatibility

TBD: Are they fully compatible? 

XPDL and human workflow 

TBD: Can it model it?

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.