YAWL: Yet Another Workflow Language
YAWL is a workflow language built upon two main concepts: workflow patterns and
Petri net. It was developed by taking Petri nets as a starting point and adding mechanisms to allow for a more direct and intuitive support of the workflow patterns identified. YAWL supports the control-flow perspective and the data perspective. For YAWL to be more applicable in the area of web services and Enterprise Application Integration, it is also desirable that support for communication patterns is built-in.
Some claims about YAWL:
- OR, AND, and XOR splits/joins
- single tasks are atomic ones or subworkflows
- Web Services may be used as atomic tasks of a workflow
- explicit parallelism (multiple instances of an atomic task)
- cancellation of a part of a workflow by a particular task
Resources
Related
Examples
Example of a YAWL.xml file and its graph:

<?xml version="1.0" encoding="UTF-8"?>
<specificationSet xmlns="http://www.citi.qut.edu.au/yawl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="Beta 4" xsi:schemaLocation="http://www.citi.qut.edu.au/yawl d:/yawl/schema/YAWL_SchemaBeta4.xsd">
<specification uri="test.ywl">
<metaData />
<schema xmlns="http://www.w3.org/2001/XMLSchema" />
<decomposition id="YAWL_test_net" isRootNet="true" xsi:type="NetFactsType">
<processControlElements>
<inputCondition id="0_InputCondition">
<flowsInto>
<nextElementRef id="2_Anton" />
</flowsInto>
</inputCondition>
<task id="2_Anton">
<flowsInto>
<nextElementRef id="3_Anton2" />
</flowsInto>
<flowsInto>
<nextElementRef id="5_Berta" />
</flowsInto>
<join code="xor" />
<split code="and" />
<decomposesTo id="Anton" />
</task>
<task id="5_Berta">
<flowsInto>
<nextElementRef id="4_Cesar" />
</flowsInto>
<join code="xor" />
<split code="and" />
<decomposesTo id="Berta" />
</task>
<task id="3_Anton2">
<flowsInto>
<nextElementRef id="4_Cesar" />
</flowsInto>
<join code="xor" />
<split code="and" />
<decomposesTo id="Anton2" />
</task>
<task id="4_Cesar">
<flowsInto>
<nextElementRef id="1_OutputCondition" />
</flowsInto>
<join code="and" />
<split code="and" />
<decomposesTo id="Cesar" />
</task>
<outputCondition id="1_OutputCondition" />
</processControlElements>
</decomposition>
<decomposition id="Berta" xsi:type="WebServiceGatewayFactsType" />
<decomposition id="Anton" xsi:type="WebServiceGatewayFactsType" />
<decomposition id="Anton2" xsi:type="WebServiceGatewayFactsType" />
<decomposition id="Cesar" xsi:type="WebServiceGatewayFactsType" />
</specification>
</specificationSet>
State Transitions
State transitions of a YAWL task (from [van der Aalst and Hofstede, 2002])