blob: 718783cf69112b7069450b99c780961f514adac2 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns= "urn:jbpm.org:jpdl-3.1"
targetNamespace="urn:jbpm.org:jpdl-3.1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!-- PROCESS-DEFINITION -->
<!-- ################## -->
<xs:element name="process-definition">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="swimlane" />
<xs:element ref="start-state" />
<xs:group ref="node-elements"/>
<xs:group ref="action-elements" />
<xs:element ref="event" />
<xs:element ref="exception-handler" />
<xs:element ref="task" />
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<!-- SWIMLANE -->
<!-- ######## -->
<xs:element name="swimlane">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element ref="assignment"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<!-- NODES -->
<!-- ##### -->
<xs:element name="start-state">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="task"/>
<xs:element ref="transition"/>
<xs:element ref="event"/>
<xs:element ref="exception-handler"/>
</xs:choice>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="end-state">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="event"/>
<xs:element ref="exception-handler"/>
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="decision">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="handler" type="delegation" />
<xs:element ref="event"/>
<xs:element ref="exception-handler"/>
<xs:element name="transition">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="condition">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="expression" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:group ref="action-elements"/>
<xs:element ref="exception-handler"/>
</xs:choice>
<xs:attribute name="to" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="expression" type="xs:string" />
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="fork">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="script" />
<xs:group ref="node-content-elements" />
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="join">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="node-content-elements" />
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="node">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0">
<xs:group ref="action-elements" />
</xs:choice>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="node-content-elements" />
</xs:choice>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="process-state">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="sub-process">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="version" type="xs:integer" />
</xs:complexType>
</xs:element>
<xs:element ref="variable" />
<xs:group ref="node-content-elements" />
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="state">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="node-content-elements"/>
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="super-state">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="node-elements"/>
<xs:group ref="node-content-elements"/>
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<xs:element name="task-node">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="task" />
<xs:group ref="node-content-elements" />
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="create-tasks" type="booleanType" default="true" />
<xs:attribute name="end-tasks" type="booleanType" default="false" />
<xs:attribute name="signal" default="last">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="unsynchronized"/>
<xs:enumeration value="never"/>
<xs:enumeration value="first"/>
<xs:enumeration value="first-wait"/>
<xs:enumeration value="last"/>
<xs:enumeration value="last-wait"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="async" type="xs:string" default="false" />
</xs:complexType>
</xs:element>
<!-- TRANSITION -->
<!-- ########## -->
<xs:element name="transition">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="action-elements"/>
<xs:element ref="exception-handler" />
</xs:choice>
<xs:attribute name="to" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
<!-- ACTIONS -->
<!-- ####### -->
<xs:element name="action">
<xs:complexType mixed="true">
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="class" type="xs:string" />
<xs:attribute name="config-type" default="field">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="field"/>
<xs:enumeration value="bean"/>
<xs:enumeration value="constructor"/>
<xs:enumeration value="configuration-property"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="ref-name" type="xs:string" />
<xs:attribute name="accept-propagated-events" type="booleanType" default="true" />
<xs:attribute name="expression" type="xs:string" />
<xs:attribute name="async" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="cancel-timer">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="create-timer">
<xs:complexType>
<xs:choice>
<xs:element ref="action"/>
<xs:element ref="script"/>
</xs:choice>
<xs:attribute name="duedate" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="repeat" type="xs:string" />
<xs:attribute name="transition" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="script">
<xs:complexType mixed="true">
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="accept-propagated-events" type="booleanType" default="true" />
</xs:complexType>
</xs:element>
<!-- EVENT -->
<!-- ##### -->
<xs:element name="event">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="action-elements"/>
</xs:choice>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="node-enter"/>
<xs:enumeration value="node-leave"/>
<xs:enumeration value="process-start"/>
<xs:enumeration value="process-end"/>
<xs:enumeration value="task-create"/>
<xs:enumeration value="task-assign"/>
<xs:enumeration value="task-start"/>
<xs:enumeration value="task-end"/>
<xs:enumeration value="before-signal"/>
<xs:enumeration value="after-signal"/>
<xs:enumeration value="superstate-enter"/>
<xs:enumeration value="superstate-leave"/>
<xs:enumeration value="timer-create"/>
<xs:enumeration value="subprocess-created"/>
<xs:enumeration value="subprocess-end"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<!-- EXCEPTION-HANDLER -->
<!-- ################# -->
<xs:element name="exception-handler">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element ref="action"/>
<xs:element ref="script"/>
</xs:choice>
<xs:attribute name="exception-class" type="xs:string"/>
</xs:complexType>
</xs:element>
<!-- TASK -->
<!-- #### -->
<xs:element name="task">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="assignment"/>
<xs:element ref="controller"/>
<xs:element ref="event"/>
<xs:element ref="timer"/>
</xs:choice>
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="blocking" type="booleanType" default="false"/>
<xs:attribute name="signalling" type="booleanType" default="true"/>
<xs:attribute name="description" type="xs:string" />
<xs:attribute name="duedate" type="xs:string" />
<xs:attribute name="swimlane" type="xs:string" />
<xs:attribute name="priority" type="priorityType" default="normal" />
</xs:complexType>
</xs:element>
<xs:element name="controller" type="delegation" />
<xs:element name="assignment">
<xs:complexType>
<xs:complexContent>
<xs:extension base="delegation">
<xs:attribute name="expression" type="xs:string" />
<xs:attribute name="actor-id" type="xs:string" />
<xs:attribute name="pooled-actors" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<!-- TIMER -->
<!-- ##### -->
<xs:element name="timer">
<xs:complexType>
<xs:choice>
<xs:element ref="action"/>
<xs:element ref="script"/>
</xs:choice>
<xs:attribute name="duedate" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="repeat" type="xs:string" />
<xs:attribute name="transition" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="variable">
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="access" type="xs:string" default="read,write"/>
<xs:attribute name="mapped-name" type="xs:string" />
</xs:complexType>
</xs:element>
<!-- TYPES AND GROUPS -->
<!-- ################ -->
<xs:complexType name="delegation" mixed="true">
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="class" type="xs:string" />
<xs:attribute name="config-type" default="field">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="field"/>
<xs:enumeration value="bean"/>
<xs:enumeration value="constructor"/>
<xs:enumeration value="configuration-property"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:simpleType name="configType">
<xs:restriction base="xs:string">
<xs:enumeration value="field"/>
<xs:enumeration value="bean"/>
<xs:enumeration value="constructor"/>
<xs:enumeration value="configuration-property"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="booleanType">
<xs:restriction base="xs:string">
<xs:enumeration value="yes"/>
<xs:enumeration value="no"/>
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
<xs:enumeration value="on"/>
<xs:enumeration value="off"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="priorityType">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="highest"/>
<xs:enumeration value="high"/>
<xs:enumeration value="normal"/>
<xs:enumeration value="low"/>
<xs:enumeration value="lowest"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:int"/>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:group name="node-elements">
<xs:choice>
<xs:element ref="node"/>
<xs:element ref="state"/>
<xs:element ref="task-node"/>
<xs:element ref="super-state"/>
<xs:element ref="process-state"/>
<xs:element ref="fork"/>
<xs:element ref="join"/>
<xs:element ref="decision"/>
<xs:element ref="end-state"/>
</xs:choice>
</xs:group>
<xs:group name="action-elements">
<xs:choice>
<xs:element ref="action"/>
<xs:element ref="script"/>
<xs:element ref="create-timer"/>
<xs:element ref="cancel-timer"/>
</xs:choice>
</xs:group>
<xs:group name="node-content-elements">
<xs:choice>
<xs:element ref="event"/>
<xs:element ref="exception-handler"/>
<xs:element ref="timer"/>
<xs:element ref="transition"/>
</xs:choice>
</xs:group>
</xs:schema>