<?xml version="1.0" encoding="UTF-8"?>

<!--
<!DOCTYPE process-definition PUBLIC
    "-//jBpm/jBpm Mapping DTD 2.0//EN"
    "http://jbpm.org/dtd/processdefinition-2.0.dtd">
    
the documentation of this dtd can be found at http://jbpm.org/2/jpdl.html
-->

<!ELEMENT process-definition (  description?, 
                                swimlane*,
                                type*,
                                start-state, 
                                ( state | 
                                  milestone |
                                  process-state |
                                  decision |
                                  fork |
                                  join
                                )*,
                                end-state, 
                                action* ) >
<!ATTLIST process-definition name CDATA #REQUIRED >

<!-- DESCRIPTION -->
<!ELEMENT description ( #PCDATA ) >

<!-- SWIMLANE -->
<!ELEMENT swimlane ( description?, delegation? ) >
<!ATTLIST swimlane name CDATA  #REQUIRED>

<!-- TYPE -->
<!ELEMENT type ( description?, (delegation|transient), variable* ) >
<!ATTLIST type java-type CDATA #IMPLIED >
<!ELEMENT transient EMPTY>

<!-- VARIABLE -->
<!ELEMENT variable EMPTY >
<!ATTLIST variable name CDATA #REQUIRED >

<!-- NODES -->
<!ELEMENT start-state ( description?, transition+ ) >
<!ATTLIST start-state name     CDATA #REQUIRED 
                      swimlane CDATA #IMPLIED >

<!ELEMENT state ( description?, assignment?, action*, transition+ ) >
<!ATTLIST state name CDATA #REQUIRED>

<!ELEMENT milestone ( description?, action*, transition ) >
<!ATTLIST milestone name CDATA #REQUIRED>

<!ELEMENT process-state ( description?, delegation, action*, transition+ ) >
<!ATTLIST process-state name CDATA #REQUIRED>

<!ELEMENT decision ( description?, delegation, action*, transition+ ) >
<!ATTLIST decision name CDATA #REQUIRED>

<!ELEMENT fork ( description?, delegation?, action*, transition+ ) >
<!ATTLIST fork name               CDATA #REQUIRED
               corresponding-join CDATA #IMPLIED>

<!ELEMENT join ( description?, delegation?, action*, transition ) >
<!ATTLIST join name               CDATA #REQUIRED
               corresponding-fork CDATA #IMPLIED>

<!ELEMENT end-state EMPTY >
<!ATTLIST end-state name CDATA #REQUIRED>

<!-- ASSIGNMENT -->
<!ELEMENT assignment EMPTY >
<!ATTLIST assignment swimlane CDATA #IMPLIED
                     assignment (optional|required) #IMPLIED
                     authentication (optional|required|verify) #IMPLIED>
            
<!-- TRANSITION -->
<!ELEMENT transition ( action* )>
<!ATTLIST transition name CDATA #IMPLIED 
                     to   CDATA #REQUIRED>

<!-- ACTION -->
<!ELEMENT action ( delegation ) >
<!ATTLIST action event-type (process-start|process-end|state-enter|state-leave|state-after-assignment|milestone-enter|milestone-leave|decision-enter|decision-leave|process-state-enter|process-state-leave|fork-enter|fork-every-leave|join-every-enter|join-leave|transition) #IMPLIED>

<!-- DELEGATIONS -->
<!ELEMENT delegation ( #PCDATA ) >
<!ATTLIST delegation class CDATA #REQUIRED>
