<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema elementFormDefault="qualified"
			xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns="http://www.springactionscript.org/schema/task"
			targetNamespace="http://www.springactionscript.org/schema/task">

	<xs:annotation>
		<xs:documentation><![CDATA[
			Spring ActionScript Framework 1.0 Task Schema
			Schema Authors: Roland Zwaga
			]]>
		</xs:documentation>
	</xs:annotation>

	<xs:import namespace="http://www.springactionscript.org/schema/objects" />

	<xs:group name="taskElements">
		<xs:choice>
			<xs:element name="next" type="nextType" />
			<xs:element name="and" type="andType" />
			<xs:element name="if" type="ifType" />
			<xs:element name="for" type="forType" />
			<xs:element name="while" type="whileType" />
			<xs:element name="exit" type="xs:string" maxOccurs="1" />
			<xs:element name="reset" type="xs:string" maxOccurs="1" />
			<xs:element name="pause">
				<xs:complexType>
					<xs:attribute name="duration" type="xs:integer"/>
					<xs:element name="object" type="objectType" />
				</xs:complexType>
			</xs:element>
		</xs:choice>
	</xs:group>
	
	<xs:element name="task" type="taskType"/>

	<xs:complexType name="taskType" mixed="false">
		<xs:complexContent>
			<xs:extension base="objectType">
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:group ref="taskElements"/>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	
	<xs:complexType name="baseType" mixed="false">
		<xs:choice>
			<xs:element name="object" type="objectType" maxOccurs="1" minOccurs="0"/>
			<xs:element name="task" type="taskType" maxOccurs="1" minOccurs="0"/>
		</xs:choice>
		<xs:attribute name="command" type="xs:string" use="optional"/>
	</xs:complexType>

	<xs:complexType name="innerObjectType" mixed="false">
		<xs:choice>
			<xs:element name="object" type="objectType" maxOccurs="1" minOccurs="0"/>
			<xs:element name="ref" type="xs:string" maxOccurs="1" minOccurs="0"/>
		</xs:choice>
		<xs:attribute name="ref" type="xs:string" use="optional"/>
	</xs:complexType>
	
	<xs:complexType name="nextType">
		<xs:complexContent>
			<xs:extension base="baseType"/>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="andType">
		<xs:complexContent>
			<xs:extension base="baseType"/>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="ifType">
		<xs:sequence>
			<xs:element name="condition" type="innerObjectType" maxOccurs="1" minOccurs="0"/>
			<xs:group ref="taskElements"/>
			<xs:element name="else" type="xs:string" maxOccurs="1" />
			<xs:group ref="taskElements"/>
		</xs:sequence>
		<xs:attribute name="condition" type="xs:string" use="optional"/>
		<xs:attribute name="id" type="xs:string" use="optional"/>
	</xs:complexType>
	
	<xs:complexType name="forType">
		<xs:sequence>
			<xs:element name="count-provider" type="innerObjectType" maxOccurs="1" minOccurs="0"/>
			<xs:group ref="taskElements"/>
		</xs:sequence>
		<xs:attribute name="count" type="xs:int" use="optional"/>
		<xs:attribute name="count-provider" type="xs:string" use="optional"/>
		<xs:attribute name="id" type="xs:string" use="optional"/>
	</xs:complexType>

	<xs:complexType name="whileType">
		<xs:sequence>
			<xs:element name="condition" type="innerObjectType" maxOccurs="1" minOccurs="0"/>
			<xs:group ref="taskElements"/>
		</xs:sequence>
		<xs:attribute name="condition" type="xs:string" use="optional"/>
		<xs:attribute name="id" type="xs:string" use="optional"/>
	</xs:complexType>

</xs:schema>

