<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.w3.org/2002/03/xup" xmlns="http://www.w3.org/2002/03/xup" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://www.w3.org/2001/12/soap-envelope" elementFormDefault="unqualified" attributeFormDefault="unqualified">
	<xsd:import namespace="http://www.w3.org/2001/12/soap-envelope" schemaLocation="http://www.w3.org/2001/12/soap-envelope"/>


	<!--XUP request header content in SOAP Header-->
	<xsd:element name="userAgent">
		<xsd:complexType>
			<xsd:attribute name="name" type="xsd:string" use="required"/>
			<xsd:attribute name="version" type="xsd:string" use="required"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="uiModelNamespace">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:anyURI">
					<xsd:attribute ref="env:mustUnderstand" use="required" fixed="1"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="sessionID">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:string">
					<xsd:attribute ref="env:mustUnderstand" use="required" fixed="1"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>


	<!--XUP request body content in SOAP Body-->
	<xsd:element name="event">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="detail" minOccurs="0">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
						</xsd:sequence>
						<xsd:anyAttribute namespace="##other"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:choice minOccurs="0" maxOccurs="unbounded">
					<xsd:element name="uiElement" type="uiElement"/>
					<xsd:element name="uiAttr" type="uiAttr"/>
				</xsd:choice>
			</xsd:sequence>
			<xsd:attribute name="type" type="xsd:QName" use="required"/>
			<xsd:attributeGroup ref="eventAttrGrp"/>
		</xsd:complexType>
	</xsd:element>


	<!--XUP response header content in SOAP Header-->
	<xsd:element name="server">
		<xsd:complexType>
			<xsd:attribute name="name" type="xsd:string" use="required"/>
			<xsd:attribute name="version" type="xsd:string" use="required"/>
		</xsd:complexType>
	</xsd:element>

	<!--sessionID, which is already defined in XUP request header-->


	<!--XUP response body content in SOAP Body-->
	<xsd:element name="uiModel">
		<xsd:complexType>
			<xsd:choice maxOccurs="unbounded">
				<xsd:element name="addUIElement">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:any namespace="##other" processContents="lax"/>
						</xsd:sequence>
						<xsd:attribute name="parent" type="xsd:IDREF" use="optional"/>
						<xsd:attribute name="before" type="xsd:IDREF" use="optional"/>
						<xsd:attribute name="after" type="xsd:IDREF" use="optional"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="updateUIElement">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:any namespace="##other" processContents="lax"/>
						</xsd:sequence>
						<xsd:attribute name="element" type="xsd:IDREF" use="optional"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="updateUIAttr">
					<xsd:complexType>
						<xsd:simpleContent>
							<xsd:extension base="xsd:string">
								<xsd:attribute name="element" type="xsd:IDREF" use="required"/>
								<xsd:attribute name="attr" type="xsd:QName" use="required"/>
							</xsd:extension>
						</xsd:simpleContent>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="removeUIElement">
					<xsd:complexType>
						<xsd:attribute name="element" type="xsd:IDREF" use="required"/>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="updateListeners">
		<xsd:complexType>
			<xsd:choice maxOccurs="unbounded">
				<xsd:element name="add">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="listener">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="uiRef" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
									</xsd:sequence>
									<xsd:attribute name="id" type="xsd:ID" use="required"/>
									<xsd:attribute name="event" type="xsd:QName" use="required"/>
									<xsd:attributeGroup ref="eventAttrGrp"/>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="remove">
					<xsd:complexType>
						<xsd:attribute name="listener" type="xsd:IDREF" use="required"/>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="stopPropagation"/>


	<!--SOAP fault detail-->
	<xsd:element name="unsupportedEvent"/>

	<xsd:element name="eventHandlerNotFound"/>

	<xsd:element name="unknownRefs">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="elementRef" type="elementRef" minOccurs="0"/>
				<xsd:element name="listenerRef" type="listenerRef" minOccurs="0"/>
				<xsd:element name="attrRef" type="attrRef" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="unsupportedUI">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="elementRef" type="elementRef" minOccurs="0"/>
				<xsd:element name="attrRef" type="attrRef" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="illegalUIValues">
		<xsd:complexType>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="uiElement" type="uiElement"/>
				<xsd:element name="uiAttr" type="uiAttr"/>
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="illegalUIStructure">
		<xsd:complexType>
			<xsd:attribute name="elements" type="xsd:IDREFS" use="required"/>
		</xsd:complexType>
	</xsd:element>


	<!--common element types, attribute groups-->
	<xsd:complexType name="uiElement">
		<xsd:sequence>
			<xsd:any namespace="##other" processContents="lax"/>
		</xsd:sequence>
		<xsd:attribute name="element" type="xsd:IDREF" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="uiAttr">
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="element" type="xsd:IDREF" use="required"/>
				<xsd:attribute name="attr" type="xsd:QName" use="required"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>

	<xsd:complexType name="elementRef">
		<xsd:attribute name="elements" type="xsd:IDREFS" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="listenerRef">
		<xsd:attribute name="listeners" type="xsd:IDREFS" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="attrRef">
		<xsd:attribute name="element" type="xsd:IDREF" use="required"/>
		<xsd:attribute name="attr" type="xsd:QName" use="required"/>
	</xsd:complexType>

	<xsd:attributeGroup name="eventAttrGrp">
		<xsd:attribute name="element" type="xsd:IDREF" use="required"/>
		<xsd:attribute name="source" type="xsd:IDREF" use="optional"/>
		<xsd:attribute name="phase" use="optional" default="default">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="capture"/>
					<xsd:enumeration value="default"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:attributeGroup>
</xsd:schema>
