External data transfer does not apply to any local variable or any variable of a composite task. This is because the local variables cannot be observed externally, and the variables of composite tasks serve as intermediate variables for passing data from the higher level to the lower level of a process and vice versa (e.g. between a net and the tasks in its subnets). When data are required from the external environment at run time, either a web form will be generated requesting the data from the user or a web service will be invoked that can provide the required data. Valid and Invalid Data Transfers To ensure correct data transfer, YAWL defines a set of transfer rules for variables of different data usage. Each input variable, except those associated with the top- level net (root net), must have data supply from the corresponding net variables (which could be a single net variable or an aggregation of any number of net variables), via input parameter definition. An input variable of the top-level net is either assigned an initial value at design time (data assignment), or gets data supply from the environment (e.g. a user input) once an execution of the net is started. Each output variable, except those associated with composite tasks, requests data supply from the environment once the corresponding net or task is executed. An output variable associated with a composite task gets data supply from the net data in its subnet, via output parameter definition. Otherwise, output variables are used to supply data (in internal data transfers). Input and output variables are a combination of the above two variables, and local variables are neither input nor output variables. No (internal) data transfers are allowed between local variables of nets and their subnets and no (external) data transfers are allowed between local variables and the external environment.