<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:simpleType name="stringType">
      <xs:restriction base="xs:string">
         <xs:maxLength value="255" />
      </xs:restriction>
   </xs:simpleType>

   <xs:simpleType name="stepType">
      <xs:restriction base="xs:NMTOKEN">
         <xs:enumeration value="transition" />

         <xs:enumeration value="system" />

         <xs:enumeration value="edit" />

         <xs:enumeration value="auto" />
      </xs:restriction>
   </xs:simpleType>

   <xs:simpleType name="moveType">
      <xs:restriction base="xs:NMTOKEN">
         <xs:enumeration value="forward" />

         <xs:enumeration value="backward" />
      </xs:restriction>
   </xs:simpleType>

   <xs:simpleType name="boolean">
      <xs:restriction base="xs:NMTOKEN">
         <xs:enumeration value="true" />

         <xs:enumeration value="false" />
      </xs:restriction>
   </xs:simpleType>

   <xs:attributeGroup name="standardAttributes">
      <xs:attribute name="identifier" type="stringType" use="required" />
      <xs:attribute name="label" type="stringType" use="required" />
   </xs:attributeGroup>

   <xs:element name="system-workflow-definition">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="triggers" />

            <xs:element ref="steps" />

            <xs:element ref="non-ordered-steps" />
         </xs:sequence>

         <xs:attribute name="initial-step" type="stringType" />

         <xs:attribute name="name" type="stringType" />
      </xs:complexType>
   </xs:element>

   <xs:element name="triggers">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="trigger" minOccurs="0" maxOccurs="unbounded">
               <xs:complexType>
                  <xs:attribute name="class" type="stringType" use="required" />

                  <xs:attribute name="name" type="stringType" use="required" />
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:element name="trigger">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
         </xs:sequence>

         <xs:attribute name="name" type="stringType" use="required" />
      </xs:complexType>
   </xs:element>

   <xs:element name="parameter">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="name" type="stringType" />

            <xs:element name="value" type="stringType" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:element name="steps">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="step" minOccurs="0" maxOccurs="unbounded" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:element name="non-ordered-steps">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="step" minOccurs="0" maxOccurs="unbounded" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:element name="step">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="actions" />
         </xs:sequence>
         <xs:attributeGroup ref="standardAttributes"/>
         <xs:attribute name="type" type="stepType" use="required" />
         <xs:attribute name="default-user" type="xs:string" />
         <xs:attribute name="default-group" type="xs:string" />
         <xs:attribute name="restrict-to-type" type="xs:string" />
         <xs:attribute name="restrict-to-value" type="xs:string" />
         <xs:attribute name="allow-user-group-change" type="boolean" />
         <xs:attribute name="escalation-hours" type="xs:string" />
         <xs:attribute name="escalate-to" type="stringType" />
      </xs:complexType>
   </xs:element>

   <xs:element name="actions">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="action" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:element name="action">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="trigger" />
         </xs:sequence>

         <xs:attributeGroup ref="standardAttributes"/>	

         <xs:attribute name="type" type="stepType" use="required" />

         <xs:attribute name="next-id" type="xs:string" />

         <xs:attribute name="move" type="moveType" />
      </xs:complexType>
   </xs:element>
</xs:schema>

