<?xml version="1.0"?>

<xsd:schema targetNamespace="http://www.oasis-open.org/asap/0.9/asap.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:as="http://www.oasis-open.org/asap/0.9/asap.xsd" elementFormDefault="qualified">

	<xsd:annotation>

		<xsd:documentation xml:lang="en">

   

       	Asynchronous Service Access Protocol

       	

      	Jeffrey Ricker

		DRAFT 

		Original 2002.02.18

		Revised 2003.11.04



	Revised 2004.02.26, John Fuller

                Edited to match up with wd-asap-spec-01d.doc

                Should Priority be an instance property?



        Revised 2004.04.14, Sameer Pradhan

                Edited to allow optional elements to be absent.



   </xsd:documentation>

	</xsd:annotation>

	<!-- simple property elements ============ -->

	<xsd:complexType name="schemaType">

		<xsd:sequence>

			<xsd:any namespace="##other"/>

		</xsd:sequence>

		<xsd:attribute name="href" type="xsd:anyURI"/>

	</xsd:complexType>

	<xsd:simpleType name="stateType">

		<xsd:restriction base="xsd:string">

			<xsd:enumeration value="open.notrunning"/>

			<xsd:enumeration value="open.notrunning.suspended"/>

			<xsd:enumeration value="open.running"/>

			<xsd:enumeration value="closed.completed"/>

			<xsd:enumeration value="closed.abnormalCompleted"/>

			<xsd:enumeration value="closed.abnormalCompleted.terminated"/>

			<xsd:enumeration value="closed.abnormalCompleted.aborted"/>

		</xsd:restriction>

	</xsd:simpleType>

	<xsd:element name= "Event">
	<xsd:complexType>
		<xsd:sequence>
			<xsd:element name="Time" type="xsd:dateTime"/>
			<xsd:element name="EventType">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="InstanceCreated"/>
						<xsd:enumeration value="PropertiesSet"/>
						<xsd:enumeration value="StateChanged"/>
						<xsd:enumeration value="Subscribed"/>
						<xsd:enumeration value="Unsubscribed"/>
						<xsd:enumeration value="Error"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="SourceKey" type="xsd:anyURI"/>
			<xsd:element name="Details" type="xsd:anyType"/>
			<xsd:element name="OldState" type="as:stateType"/>
			<xsd:element name="NewState" type="as:stateType"/>
		</xsd:sequence>
	</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="historyType">
		<xsd:sequence>
			<xsd:element ref="as:Event" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="YesNoIfError">

		<xsd:restriction base="xsd:string">

			<xsd:enumeration value="Yes"/>

			<xsd:enumeration value="No"/>

			<xsd:enumeration value="IfError"/>

		</xsd:restriction>

	</xsd:simpleType>

	<!-- headers ============ -->

	<xsd:element name="Request">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="SenderKey" type="xsd:anyURI" minOccurs="0"/>

				<xsd:element name="ReceiverKey" type="xsd:anyURI"/>

				<xsd:element name="ResponseRequired" type="as:YesNoIfError" minOccurs="0"/>

				<xsd:element name="RequestID" type="xsd:anyURI" minOccurs="0"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="Response">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="SenderKey" type="xsd:anyURI"/>

				<xsd:element name="ReceiverKey" type="xsd:anyURI" minOccurs="0"/>

				<xsd:element name="RequestID" type="xsd:anyURI" minOccurs="0"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<!-- properties ============= -->

	<xsd:group name="instancePropertiesGroup">

		<xsd:sequence>

			<xsd:element name="Key" type="xsd:anyURI"/>

			<xsd:element name="State" type="as:stateType"/>

			<xsd:element name="Name" type="xsd:string"/>

			<xsd:element name="Subject" type="xsd:string"/>

			<xsd:element name="Description" type="xsd:string"/>

			<xsd:element name="FactoryKey" type="xsd:anyURI"/>

			<xsd:element name="Observers">

				<xsd:complexType>

					<xsd:sequence>

						<xsd:element name="ObserverKey" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded"/>

					</xsd:sequence>

				</xsd:complexType>

			</xsd:element>

			<xsd:element name="ContextData">

				<xsd:complexType>

					<xsd:sequence>

						<xsd:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

					</xsd:sequence>

				</xsd:complexType>

			</xsd:element>

			<xsd:element name="ResultData">

				<xsd:complexType>

					<xsd:sequence>

						<xsd:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

					</xsd:sequence>

				</xsd:complexType>

			</xsd:element>

			<xsd:element name="History" type="as:historyType"/>

		</xsd:sequence>

	</xsd:group>

	<xsd:group name="factoryPropertiesGroup">

		<xsd:sequence>

			<xsd:element name="Key" type="xsd:anyURI"/>

			<xsd:element name="Name" type="xsd:string"/>

			<xsd:element name="Subject" type="xsd:string"/>

			<xsd:element name="Description" type="xsd:string"/>

			<xsd:element name="ContextDataSchema" type="as:schemaType"/>

			<xsd:element name="ResultDataSchema" type="as:schemaType"/>

			<xsd:element name="Expiration" type="xsd:duration"/>

		</xsd:sequence>

	</xsd:group>

	<xsd:group name="observerPropertiesGroup">

		<xsd:sequence>

			<xsd:element name="Key" type="xsd:anyURI"/>

		</xsd:sequence>

	</xsd:group>

	<!-- messages =================== -->

	<xsd:element name="GetPropertiesRq"/>

	<xsd:element name="GetPropertiesRs">

		<xsd:complexType>

			<xsd:choice>

				<xsd:group ref="as:instancePropertiesGroup"/>

				<xsd:group ref="as:factoryPropertiesGroup"/>

				<xsd:group ref="as:observerPropertiesGroup"/>

			</xsd:choice>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="SetPropertiesRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="Subject" type="xsd:string"/>

				<xsd:element name="Description" type="xsd:string"/>

				<xsd:element name="Priority" type="xsd:int"/>

				<xsd:element name="Data" type="xsd:anyType"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="SetPropertiesRs">

		<xsd:complexType>

			<xsd:choice>

				<xsd:group ref="as:instancePropertiesGroup"/>

				<xsd:group ref="as:factoryPropertiesGroup"/>

				<xsd:group ref="as:observerPropertiesGroup"/>

			</xsd:choice>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="SubscribeRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="ObserverKey" type="xsd:anyURI"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="SubscribeRs"/>

	<xsd:element name="UnsubscribeRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="ObserverKey" type="xsd:anyURI"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="UnsubscribeRs"/>

	<xsd:element name="CreateInstanceRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="StartImmediately" type="xsd:boolean"/>

				<xsd:element name="ObserverKey" type="xsd:anyURI" minOccurs="0"/>

				<xsd:element name="Name" type="xsd:string" minOccurs="0"/>

				<xsd:element name="Subject" type="xsd:string" minOccurs="0"/>

				<xsd:element name="Description" type="xsd:string" minOccurs="0"/>

				<xsd:element name="ContextData">

					<xsd:complexType>

						<xsd:sequence>

							<xsd:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

						</xsd:sequence>

					</xsd:complexType>

				</xsd:element>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="CreateInstanceRs">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="InstanceKey" type="xsd:anyURI"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:complexType name="FilterType">

		<xsd:simpleContent>

			<xsd:extension base="xsd:string">

				<xsd:attribute name="filterType" type="xsd:NMTOKEN"/>

			</xsd:extension>

		</xsd:simpleContent>

	</xsd:complexType>

	<xsd:element name="ListInstancesRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="Filter" type="as:FilterType"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="Instance">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="InstanceKey" type="xsd:anyURI"/>

				<xsd:element name="Name" type="xsd:string" minOccurs="0"/>

				<xsd:element name="Subject" type="xsd:string" minOccurs="0"/>

				<xsd:element name="Priority" type="xsd:int" minOccurs="0"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="ListInstancesRs">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element ref="as:Instance" minOccurs="0" maxOccurs="unbounded"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="CompletedRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="InstanceKey" type="xsd:anyURI"/>

				<xsd:element name="ResultData">

					<xsd:complexType>

						<xsd:sequence>

							<xsd:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

						</xsd:sequence>

					</xsd:complexType>

				</xsd:element>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="CompletedRs"/>

	<xsd:element name="ChangeStateRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="State" type="as:stateType"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="ChangeStateRs">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="State" type="as:stateType"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="StateChangedRq">

		<xsd:complexType>

			<xsd:sequence>

				<xsd:element name="State" type="as:stateType"/>

				<xsd:element name="PreviousState" type="as:stateType"/>

			</xsd:sequence>

		</xsd:complexType>

	</xsd:element>

	<xsd:element name="StateChangedRs"/>

</xsd:schema>



