<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Legal Disclaimer

The presentation, distribution or other dissemination of the information 
contained in this specification is not a license, either expressly or impliedly, 
to any intellectual property owned or controlled by IBM or Microsoft and\or any other 
third party.  IBM and Microsoft and\or any other third party may have patents, patent 
applications, trademarks, copyrights, or other intellectual property rights 
covering subject matter in this document.  The furnishing of this document 
does not give you any license to IBM's and Microsoft's or any other third party's patents, 
trademarks, copyrights, or other intellectual property.

This specification and the information contained herein is provided on an "AS IS"
 basis and to the maximum extent permitted by applicable law, IBM and Microsoft provides 
the document AS IS AND WITH ALL FAULTS, and hereby disclaims all other warranties 
and conditions, either express, implied or statutory, including, but not limited 
to, any (if any) implied warranties, duties or conditions of merchantability, of 
fitness for a particular purpose, of accuracy or completeness of responses, of 
results, of workmanlike effort, of lack of viruses, and of lack of negligence, 
all with regard to the document. ALSO, THERE IS NO WARRANTY OR CONDITION OF 
TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR 
NON-INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE DOCUMENT.

IN NO EVENT WILL IBM or MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING 
SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY 
INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER 
CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY 
OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE 
NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.

Copyright Notice

Copyright 2001, 2002 IBM Corporation and Microsoft Corporation. All rights reserved.
-->
<xsd:schema targetNamespace="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns="http://schemas.xmlsoap.org/ws/2002/07/utility" elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.1">
	<!-- // Fault Codes /////////////////////////////////////////// -->
	<xsd:simpleType name="tTimestampFault">
		<xsd:annotation>
			<xsd:documentation>
This type defines the fault code value for Timestamp message expiration.
          </xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:QName">
			<xsd:enumeration value="wsu:MessageExpired"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="tContextFault">
		<xsd:annotation>
			<xsd:documentation>
This type defines the fault code values for context-related faults.
          </xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:QName">
			<xsd:enumeration value="wsu:ContextEstablished"/>
			<xsd:enumeration value="wsu:ContextUnknown"/>
			<xsd:enumeration value="wsu:ContextNotSupported"/>
			<xsd:enumeration value="wsu:ContextRefused"/>
			<xsd:enumeration value="wsu:ContextExpired"/>
		</xsd:restriction>
	</xsd:simpleType>
	<!-- // Global attributes //////////////////////////////////// -->
	<xsd:attribute name="Id" type="xsd:ID">
		<xsd:annotation>
			<xsd:documentation>
This global attribute supports annotating arbitrary elements with an ID.
          </xsd:documentation>
		</xsd:annotation>
	</xsd:attribute>
	<xsd:attribute name="MustUnderstand" type="xsd:boolean">
		<xsd:annotation>
			<xsd:documentation>
This global attribute is used on extensions to distinguish mandatory vs. optional extensions.
          </xsd:documentation>
		</xsd:annotation>
	</xsd:attribute>
	<xsd:attributeGroup name="commonAtts">
		<xsd:annotation>
			<xsd:documentation>
Convenience attribute group used to simplify this schema.
          </xsd:documentation>
		</xsd:annotation>
		<xsd:attribute ref="wsu:Id" use="optional"/>
		<xsd:anyAttribute namespace="##other" processContents="lax"/>
	</xsd:attributeGroup>
	<!-- // Utility types //////////////////////////////////////// -->
	<xsd:complexType name="AttributedDateTime">
		<xsd:annotation>
			<xsd:documentation>
This type is for elements whose [children] is a psuedo-dateTime and can have arbitrary attributes. 
      </xsd:documentation>
		</xsd:annotation>
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="ValueType" type="xsd:QName">
					<xsd:annotation>
						<xsd:documentation>
This attribute indicates the actual schema type of the element [children]. 
If the ValueType attribute is present, conforming processors must process the string value of [children] as if it were affiliated with the type indicated by this attribute.
If the ValueType attribute is absent, the implied value of this attribute is xsd:dateTime.
            </xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attributeGroup ref="wsu:commonAtts"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="ReceivedType">
		<xsd:annotation>
			<xsd:documentation>
This type extends AnnotatedDateTime to add a Delay attribute. 
      </xsd:documentation>
		</xsd:annotation>
		<xsd:simpleContent>
			<xsd:extension base="wsu:AttributedDateTime">
				<xsd:attribute name="Delay" type="xsd:int" use="optional">
					<xsd:annotation>
						<xsd:documentation>
This attribute indicates the number of milliseconds that this actor processed this message.
            </xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="Actor" type="xsd:anyURI" use="required">
					<xsd:annotation>
						<xsd:documentation>
This attribute indicates the intermediary that processed this message.
            </xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="AttributedURI">
		<xsd:annotation>
			<xsd:documentation>
This type is for elements whose [children] is an anyURI and can have arbitrary attributes.
      </xsd:documentation>
		</xsd:annotation>
		<xsd:simpleContent>
			<xsd:extension base="xsd:anyURI">
				<xsd:attributeGroup ref="wsu:commonAtts"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<!-- // Timestamp header components /////////////////////////// -->
	<xsd:complexType name="TimestampType">
		<xsd:annotation>
			<xsd:documentation>
This complex type ties together the timestamp related elements into a composite type.
            </xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="wsu:Created" minOccurs="0"/>
			<xsd:element ref="wsu:Expires" minOccurs="0"/>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element ref="wsu:Received"/>
				<xsd:any namespace="##other" processContents="lax"/>
			</xsd:choice>
		</xsd:sequence>
		<xsd:attributeGroup ref="wsu:commonAtts"/>
	</xsd:complexType>
	<xsd:element name="Timestamp" type="wsu:TimestampType">
		<xsd:annotation>
			<xsd:documentation>
This element allows Timestamps to be applied anywhere element wildcards are present,
including as a SOAP header.
            </xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- global element decls to allow individual elements to appear anywhere -->
	<xsd:element name="Expires" type="wsu:AttributedDateTime">
		<xsd:annotation>
			<xsd:documentation>
This element allows an expiration time to be applied anywhere element wildcards are present.
            </xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="Created" type="wsu:AttributedDateTime">
		<xsd:annotation>
			<xsd:documentation>
This element allows a creation time to be applied anywhere element wildcards are present.
            </xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="Received" type="wsu:ReceivedType">
		<xsd:annotation>
			<xsd:documentation>
This element allows the ReceviedType to be applied anywhere element wildcards are present, including a Timestamp header.
            </xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="Identifier" type="wsu:AttributedURI" />
	<!-- // Context ///////////////////////////////////// -->
	<xsd:complexType name="ContextType" abstract="true">
		<xsd:annotation>
			<xsd:documentation>
This type is the generic base type for context headers.
            </xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="wsu:Expires" minOccurs="0"/>
			<xsd:element ref="wsu:Identifier" />
		</xsd:sequence>
		<xsd:attributeGroup ref="wsu:commonAtts"/>
	</xsd:complexType>
	<xsd:element name="Context">
		<xsd:annotation>
			<xsd:documentation>
This element allows Contexts to be applied anywhere element wildcards are present,
including as a SOAP header.
            </xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="wsu:ContextType">
					<xsd:sequence>
						<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<!-- // PortReference ////////////////////////////// -->
	<xsd:complexType name="PortReferenceType">
		<xsd:annotation>
			<xsd:documentation>
This complex type defines a lightweight type for transmitting ports.
            </xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="Address" type="wsu:AttributedURI"/>
			<xsd:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attributeGroup ref="wsu:commonAtts"/>
	</xsd:complexType>
	<xsd:element name="PortReference" type="wsu:PortReferenceType">
		<xsd:annotation>
			<xsd:documentation>
This element allows port references to be applied anywhere element wildcards are present.
            </xsd:documentation>
		</xsd:annotation>
	</xsd:element>
</xsd:schema>
