<?xml version="1.0" encoding="us-ascii"?>
<!-- 
   W3C XML Schema defined in the Web Services Description (WSDL)
    Version 2.0 specification
     http://www.w3.org/TR/wsdl20

   Copyright (c) 2003 World Wide Web Consortium,
  
   (Massachusetts Institute of Technology, European Research Consortium for
   Informatics and Mathematics, Keio University). All Rights Reserved. This
   work is distributed under the W3C(r) Software License [1] in the hope that
   it will be useful, but WITHOUT ANY WARRANTY; without even the implied
   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
   [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
-->

<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd">

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://www.w3.org/2003/11/wsdl" targetNamespace="http://www.w3.org/2003/11/wsdl" elementFormDefault="qualified" finalDefault="" blockDefault="" attributeFormDefault="unqualified">


  <xs:complexType name="DocumentationType" mixed="true">
    <xs:sequence>
      <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" namespace="##any"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DocumentedType" mixed="false">
    <xs:annotation>
      <xs:documentation>
      This type is extended by component types to allow them to be documented.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="documentation" type="wsdl:DocumentationType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ExtensibleDocumentedType" abstract="true" mixed="false">
    <xs:annotation>
      <xs:documentation>
      This type is extended by component types to allow 
      attributes from other namespaces to be added.
      </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="wsdl:DocumentedType">
	    <xs:anyAttribute namespace="##other" processContents="lax"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- definitions element decl and type def -->
  <xs:element name="definitions" type="wsdl:DefinitionsType">
    <xs:unique name="interface">
      <xs:selector xpath="wsdl:interface"/>
      <xs:field xpath="@name"/>
    </xs:unique>
    <xs:unique name="binding">
      <xs:selector xpath="wsdl:binding"/>
      <xs:field xpath="@name"/>
    </xs:unique>
    <xs:unique name="service">
      <xs:selector xpath="wsdl:service"/>
      <xs:field xpath="@name"/>
    </xs:unique>
  </xs:element>
  
  <xs:complexType name="DefinitionsType" mixed="false">
	<xs:complexContent>
	  <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:sequence>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="tns:import"/>
            <xs:element ref="tns:include"/>
            <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
          </xs:choice>
          <xs:element ref="tns:types" minOccurs="0"/>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>Any top-level, optional element is allowed to appear more than once.
              </xs:documentation>
            </xs:annotation>
			<xs:element ref="tns:interface">
			  <xs:unique name="operation">
			    <xs:selector xpath="wsdl:operation"/>
				<xs:field xpath="@name"/>
			  </xs:unique>
			</xs:element>
			<xs:element ref="tns:binding"/>
			<xs:element ref="tns:service">
		      <xs:unique name="endpoint">
			    <xs:selector xpath="wsdl:endpoint"/>
			    <xs:field xpath="@name"/>
		      </xs:unique>
			</xs:element>
            <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
		  </xs:choice>
        </xs:sequence>
		<xs:attribute name="targetNamespace" type="xs:anyURI" use="required"/>
	  </xs:extension>
	</xs:complexContent>
  </xs:complexType>

  <!-- types for import and include elements -->
  <xs:element name="import" type="tns:ImportType"/>
  <xs:complexType name="ImportType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:attribute name="namespace" type="xs:anyURI" use="required"/>
        <xs:attribute name="location" type="xs:anyURI" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:element name="include" type="tns:IncludeType"/>
  <xs:complexType name="IncludeType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:attribute name="location" type="xs:anyURI" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:element name="types" type="tns:TypesType"/>
  <xs:complexType name="TypesType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
	    <xs:sequence>
	      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="strict"/>
		</xs:sequence>
	  </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- parts related to wsdl:interface -->
  <xs:element name="interface" type="tns:InterfaceType"/>
  <xs:complexType name="InterfaceType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="operation" type="wsdl:InterfaceOperationType"/>
          <xs:element name="feature" type="wsdl:FeatureType"/>
          <xs:element name="property" type="wsdl:PropertyType"/>
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
        <xs:attribute name="extends" use="optional">
		  <xs:simpleType>
		    <xs:list itemType="xs:QName"/>
		  </xs:simpleType>
		</xs:attribute>
        <xs:attribute name="encodingStyleDefault" type="xs:anyURI" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="InterfaceOperationType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="input" type="wsdl:MessageRefType"/>
          <xs:element name="output" type="wsdl:MessageRefType"/>
          <xs:element name="infault" type="wsdl:MessageRefFaultType"/>
          <xs:element name="outfault" type="wsdl:MessageRefFaultType"/>
          <xs:element name="feature" type="wsdl:FeatureType"/>
          <xs:element name="property" type="wsdl:PropertyType"/>
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
        <xs:attribute name="pattern" type="xs:anyURI" use="required"/>
        <xs:attribute name="style" type="xs:anyURI" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="MessageRefType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="messageReference" type="xs:NCName" use="optional"/>
        <xs:attribute name="message" type="xs:QName" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="MessageRefFaultType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
        <xs:attribute name="messageReference" type="xs:NCName" use="optional"/>
        <xs:attribute name="message" type="xs:QName" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="FeatureType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="uri" type="xs:QName" use="required"/>
        <xs:attribute name="required" type="xs:boolean" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="PropertyType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:sequence>
          <xs:choice>
            <xs:element name="value" type="xs:anySimpleType"/>
            <xs:element name="constraint" type="xs:QName"/>
          </xs:choice>
          <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="uri" type="xs:QName" use="required"/>
        <xs:attribute name="required" type="xs:boolean" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- types related to wsdl:binding -->
  <xs:element name="binding" type="tns:BindingType"/>
  <xs:complexType name="BindingType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="operation" type="wsdl:BindingOperationType"/>
          <xs:element name="feature" type="wsdl:FeatureType"/>
          <xs:element name="property" type="wsdl:PropertyType"/>
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
        <xs:attribute name="interface" type="xs:QName" use="optional"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="BindingOperationType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="input" type="wsdl:BindingOperationMessageType"/>
          <xs:element name="output" type="wsdl:BindingOperationMessageType"/>
          <xs:element name="infault" type="wsdl:BindingOperationFaultType"/>
          <xs:element name="outfault" type="wsdl:BindingOperationFaultType"/>
          <xs:element name="feature" type="wsdl:FeatureType"/>
          <xs:element name="property" type="wsdl:PropertyType"/>
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="BindingOperationMessageType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="messageReference" type="xs:NCName" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="BindingOperationFaultType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
        <xs:attribute name="messageReference" type="xs:NCName" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- types related to service -->
  <xs:element name="service" type="tns:ServiceType"/>
  <xs:complexType name="ServiceType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="1" maxOccurs="unbounded">
          <xs:element name="endpoint" type="wsdl:EndpointType"/>
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
        <xs:attribute name="interface" type="xs:QName" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="EndpointType" mixed="false">
    <xs:complexContent>
      <xs:extension base="wsdl:ExtensibleDocumentedType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:any namespace="##other" processContents="lax" minOccurs="1" maxOccurs="1"/>
        </xs:choice>
        <xs:attribute name="name" type="xs:NCName" use="required"/>
        <xs:attribute name="binding" type="xs:QName" use="required"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:attribute name="required" type="xs:boolean"/>

  <xs:complexType name="ExtensibilityElement" abstract="true" mixed="false">
    <xs:annotation>
	  <xs:documentation>
	  This abstract type is intended to serve as the base type for
      extensibility elements. It includes the wsdl:required attribute
      which it is anticipated will be used by most extension elements
	  </xs:documentation>
	</xs:annotation>
    <xs:attribute ref="wsdl:required" use="optional"/>
  </xs:complexType>

</xs:schema>