<xs:schema 
  targetNamespace='http://www.w3.org/2010/08/ws-evt' 
  xmlns:tns='http://www.w3.org/2010/08/ws-evt'
  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='DeliveryType' mixed='true'>
    <xs:sequence>
      <xs:element ref='tns:NotifyTo' minOccurs='0' maxOccurs='1' />
      <xs:any namespace='##other' processContents='lax' 
              minOccurs='0' maxOccurs='unbounded' />
    </xs:sequence>
    <xs:anyAttribute namespace='##other' processContents='lax' />
  </xs:complexType>
 
  <xs:complexType name='FormatType' mixed='true'>
    <xs:sequence>
      <xs:any namespace='##any' processContents='lax' 
              minOccurs='0' maxOccurs='unbounded' />
    </xs:sequence>
    <xs:attribute name='Name' type='xs:anyURI' use='optional' 
      default='http://www.w3.org/2010/08/ws-evt/DeliveryFormats/Unwrap' />
    <xs:anyAttribute namespace='##other' processContents='lax' />
  </xs:complexType>
 
  <xs:simpleType name='NonNegativeDurationType'>
    <xs:restriction base='xs:duration'>
      <xs:minInclusive value='P0Y0M0DT0H0M0S' />
    </xs:restriction>
  </xs:simpleType>
 
  <xs:simpleType name='DurationDateTime'>
      <xs:union memberTypes='xs:dateTime tns:NonNegativeDurationType' />
  </xs:simpleType>
 
  <xs:complexType name='MiniExpirationType'>
    <xs:simpleContent>
      <xs:extension base='tns:DurationDateTime'>
        <xs:anyAttribute namespace='##other' processContents='lax'/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name='ExpirationType'>
    <xs:simpleContent>
      <xs:extension base='tns:MiniExpirationType'>
        <xs:attribute name='BestEffort' type='xs:boolean' use='optional'/>
        <xs:anyAttribute namespace='##other' processContents='lax'/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <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/2010/08/ws-evt/Dialects/XPath10' />
    <xs:anyAttribute namespace='##other' processContents='lax' />
  </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>
 
  <xs:element name='NotifyTo' type='wsa:EndpointReferenceType' />

  <xs:complexType name='NotificationPolicy'>
    <xs:sequence>
      <xs:any namespace='##other' processContents='lax'
              maxOccurs='unbounded'/>
    </xs:sequence>
  </xs:complexType>
 
  <!-- Subscribe request -->
  <xs:element name='Subscribe'>
    <xs:complexType>
      <xs:sequence>
        <xs:element name='EndTo' type='wsa:EndpointReferenceType' 
                    minOccurs='0' />
        <xs:element name='Delivery' type='tns:DeliveryType' />
        <xs:element name='Format' type='tns:FormatType' 
                    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>
 
  <!-- Subscribe response -->
  <xs:element name='SubscribeResponse'>
    <xs:complexType>
      <xs:sequence>
        <xs:element name='SubscriptionManager' 
                    type='wsa:EndpointReferenceType' />
        <xs:element name='GrantedExpires' type='tns:MiniExpirationType' />
        <xs:any namespace='##other' processContents='lax' 
                minOccurs='0' maxOccurs='unbounded' />
      </xs:sequence>
      <xs:anyAttribute namespace='##other' processContents='lax' />
    </xs:complexType>
  </xs:element>
 
  <!-- Used in a fault if there's an unsupported dialect -->
  <xs:element name='SupportedDialect' type='xs:anyURI' />
 
  <!-- Used in a fault if there's an unsupported format name -->
  <xs:element name='SupportedDeliveryFormat' type='xs:anyURI' />
 
  <!-- Renew request -->
  <xs:element name='Renew'>
    <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>
 
  <!-- Renew response -->
  <xs:element name='RenewResponse'>
    <xs:complexType>
      <xs:sequence>
        <xs:element name='GrantedExpires' type='tns:MiniExpirationType' 
                    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: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='GrantedExpires' type='tns:MiniExpirationType' 
                    minOccurs='0' />
        <xs:any namespace='##other' processContents='lax' 
                minOccurs='0' maxOccurs='unbounded' />
      </xs:sequence>
      <xs:anyAttribute namespace='##other' processContents='lax' />
    </xs:complexType>
  </xs:element>
 
  <!-- Unsubscribe request -->
  <xs:element name='Unsubscribe'>
    <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>
 
  <!-- Unsubscribe response -->
  <xs:element name='UnsubscribeResponse'>
    <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>
 
  <!-- SubscriptionEnd message -->
  <xs:element name='SubscriptionEnd'>
    <xs:complexType>
      <xs:sequence>
        <xs:element name='Status'
                    type='tns:OpenSubscriptionEndCodeType' />
        <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='SubscriptionEndCodeType'>
    <xs:restriction base='xs:anyURI'>
      <xs:enumeration value=
  'http://www.w3.org/2010/08/ws-evt/DeliveryFailure' />
      <xs:enumeration value=
  'http://www.w3.org/2010/08/ws-evt/SourceShuttingDown' />
      <xs:enumeration value=
  'http://www.w3.org/2010/08/ws-evt/SourceCancelling' />
    </xs:restriction>
  </xs:simpleType>
 
  <xs:simpleType name='OpenSubscriptionEndCodeType'>
    <xs:union memberTypes='tns:SubscriptionEndCodeType xs:anyURI' />
  </xs:simpleType>

  <!-- RetryAfter Fault Detail Element -->
  <xs:element name='RetryAfter'  type='tns:RetryAfterType'/>
  <xs:complexType name='RetryAfterType'>
    <xs:simpleContent>
      <xs:extension base='xs:nonNegativeInteger'>
        <xs:anyAttribute namespace='##other' processContents='lax' />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
 
  <!-- Wrapped Events -->
  <xs:complexType name='EventType' mixed='true'>
    <xs:sequence>
      <xs:any namespace='##any' processContents='lax' minOccurs='0'
              maxOccurs='unbounded'/>
    </xs:sequence>
    <xs:attribute name='actionURI' type='xs:anyURI' use='optional' />
    <xs:anyAttribute namespace='##other' processContents='lax' />
  </xs:complexType>

  <xs:element name='Notify' type='tns:EventType' />

  <!-- Policy -->
  <xs:complexType name='Duration'>
    <xs:simpleContent>
      <xs:extension base='tns:NonNegativeDurationType'>
       <xs:anyAttribute namespace='##other' processContents='lax'/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name='URI'>
    <xs:simpleContent>
      <xs:extension base='xs:anyURI'>
        <xs:anyAttribute namespace='##other' processContents='lax'/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name='Empty'>
    <xs:sequence/>
    <xs:anyAttribute namespace='##other' processContents='lax'/>
  </xs:complexType>

  <xs:element name='EventSource'>
    <xs:complexType>
      <xs:sequence>
        <xs:element name='FilterDialect' minOccurs='0' maxOccurs='unbounded'>
          <xs:complexType>
            <xs:sequence>
              <xs:any namespace='##other' processContents='lax' minOccurs='0'
                                          maxOccurs='0'/>
            </xs:sequence>
            <xs:attribute name='URI' type='xs:anyURI' use='required' />
            <xs:anyAttribute namespace="##other" processContents='lax'/>
          </xs:complexType>
        </xs:element>
        <xs:element name='FormatName' minOccurs='0' maxOccurs='unbounded'>
          <xs:complexType>
            <xs:sequence>
              <xs:any namespace='##other' processContents='lax' minOccurs='0'
                                          maxOccurs='0'/>
            </xs:sequence>
            <xs:attribute name='URI' type='xs:anyURI' use='required' />
            <xs:anyAttribute namespace="##other" processContents='lax'/>
          </xs:complexType>
        </xs:element>
        <xs:element name='ExpiresSupported' type='tns:Empty' minOccurs='0'/>
        <xs:element name='DateTimeSupported' type='tns:Empty' minOccurs='0'/>
        <xs:element name='MaxExpires' type='tns:Duration' minOccurs='0'/>
        <xs:element name='EndToSupported' type='tns:Empty' minOccurs='0'/>
        <xs:element name='NotificationPolicy' type='tns:NotificationPolicy' 
                                              minOccurs='0'/>
        <xs:any namespace='##other' processContents='lax' minOccurs='0'
                                    maxOccurs='unbounded'/>
      </xs:sequence>
      <xs:anyAttribute namespace='##other' processContents='lax' />
    </xs:complexType>
  </xs:element>

  <xs:element name='SubscriptionManager'>
    <xs:complexType>
      <xs:sequence>
        <xs:element name='ExpiresSupported' type='tns:Empty' minOccurs='0'/>
        <xs:element name='DateTimeSupported' type='tns:Empty' minOccurs='0'/>
        <xs:element name='MaxExpires' type='tns:Duration' minOccurs='0'/>
        <xs:any namespace='##other' processContents='lax' minOccurs='0'
                                    maxOccurs='unbounded'/>
      </xs:sequence>
      <xs:anyAttribute namespace='##other' processContents='lax' />
    </xs:complexType>
  </xs:element>

</xs:schema>
