<xs:schema
    targetNamespace="http://www.w3.org/2009/09/ws-enu"
    xmlns:tns="http://www.w3.org/2009/09/ws-enu"
    xmlns:wsa="http://www.w3.org/2005/08/addressing"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    blockDefault="#all">

  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2001/xml.xsd" />
  <xs:import
    namespace="http://www.w3.org/2005/08/addressing"
    schemaLocation="http://www.w3.org/2005/08/addressing/ws-addr.xsd" />

  <!-- Types and global elements -->
  <xs:complexType name="FilterType" mixed="true">
    <xs:sequence>
      <xs:any namespace="##other" processContents="lax"
              minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="Dialect" type="xs:anyURI" use="optional"
                  default="http://www.w3.org/2009/09/ws-enu/Dialects/XPath10"/>
    <xs:anyAttribute namespace="##other" processContents="lax" />
  </xs:complexType>

  <xs:simpleType name="PositiveDurationType">
    <xs:restriction base="xs:duration">
      <xs:minExclusive value="P0Y0M0DT0H0M0S" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NonNegativeDurationType">
    <xs:restriction base="xs:duration">
      <xs:minInclusive value="P0Y0M0DT0H0M0S" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="ExpirationType">
    <xs:union memberTypes="xs:dateTime tns:NonNegativeDurationType" />
  </xs:simpleType>

  <xs:complexType name="EnumerationContextType">
    <xs:complexContent mixed="true">
      <xs:restriction base="xs:anyType">
        <xs:sequence>
          <xs:any namespace="##other" processContents="lax"
                  minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:anyAttribute namespace="##other" processContents="lax" />
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="ItemListType">
    <xs:sequence maxOccurs="unbounded">
      <xs:any namespace="##other" processContents="lax"
              minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="LanguageSpecificStringType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute ref="xml:lang" />
        <xs:anyAttribute namespace="##other" processContents="lax" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- Enumerate request -->
  <xs:element name="Enumerate">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EndTo" type="wsa:EndpointReferenceType"
                    minOccurs="0" />
        <xs:element name="Expires" type="tns:ExpirationType" 
                    minOccurs="0" />
        <xs:element name="Filter" type="tns:FilterType" 
                    minOccurs="0" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- Used for a fault response -->
  <xs:element name="SupportedDialect" type="xs:anyURI" />

  <!-- Enumerate response -->
  <xs:element name="EnumerateResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Expires" type="tns:ExpirationType" 
                    minOccurs="0" />
        <xs:element name="EnumerationContext" 
                    type="tns:EnumerationContextType" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- Pull request -->
  <xs:element name="Pull">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EnumerationContext" 
                    type="tns:EnumerationContextType" />
        <xs:element name="MaxTime" type="tns:PositiveDurationType" 
                    minOccurs="0" />
        <xs:element name="MaxElements" type="xs:positiveInteger" 
                    minOccurs="0" />
        <xs:element name="MaxCharacters" type="xs:positiveInteger" 
                    minOccurs="0" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- Pull response -->
  <xs:element name="PullResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EnumerationContext" 
                    type="tns:EnumerationContextType" 
                    minOccurs="0" />
        <xs:element name="Items" type="tns:ItemListType" 
                    minOccurs="0" />
        <xs:element name="EndOfSequence" minOccurs="0" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- Renew request -->
  <xs:element name="Renew">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EnumerationContext" 
                    type="tns:EnumerationContextType" />
        <xs:element name="Expires" type="tns:ExpirationType" 
                    minOccurs="0" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- Renew response -->
  <xs:element name="RenewResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Expires" type="tns:ExpirationType" 
                    minOccurs="0" />
        <xs:element name="EnumerationContext" 
                    type="tns:EnumerationContextType" 
                    minOccurs="0" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- GetStatus request -->
  <xs:element name="GetStatus">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EnumerationContext" 
                    type="tns:EnumerationContextType" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- GetStatus response -->
  <xs:element name="GetStatusResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Expires" type="tns:ExpirationType"
                    minOccurs="0" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- Release request -->
  <xs:element name="Release">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EnumerationContext" 
                    type="tns:EnumerationContextType" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- Release response -->
  <xs:element name="ReleaseResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:any namespace="##other" processContents="lax"
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <!-- EnumerationEnd message -->
  <xs:element name="EnumerationEnd">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Code" type="tns:OpenEnumerationEndCodeType" />
        <xs:element name="Reason" type="tns:LanguageSpecificStringType" 
                    minOccurs="0" maxOccurs="unbounded" />
        <xs:any namespace="##other" processContents="lax" 
                minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax" />
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="EnumerationEndCodeType">
    <xs:restriction base="xs:anyURI">
    <xs:enumeration value=
      "http://www.w3.org/2009/09/ws-enu/SourceShuttingDown" />
    <xs:enumeration value=
      "http://www.w3.org/2009/09/ws-enu/SourceCancelling" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="OpenEnumerationEndCodeType">
    <xs:union memberTypes="tns:EnumerationEndCodeType xs:anyURI" />
  </xs:simpleType>
</xs:schema>

