<?xml version="1.0" encoding="UTF-8" ?>
<!-- 
(c) 2004 BEA Systems Inc., International Business Machines Corporation, Microsoft Corporation, Inc, Sun Microsystems, Inc, and TIBCO Software Inc. All rights reserved.

BEA Systems Inc., International Business Machines Corporation, Microsoft Corporation, Inc, Sun Microsystems, Inc, and TIBCO Software Inc (collectively, the "Authors") hereby grant you permission to copy and display the WS-Eventing Specification (the "Specification", which includes WSDL and schema documents), in any medium without fee or royalty, provided that you include the following on ALL copies of the Specification, that you make:

1.	A link or URL to the WS-Eventing Specification at one of the Authors' websites 
2.	The copyright notice as shown in the WS-Eventing Specification. 

BEA, IBM, Microsoft, Sun, and TIBCO (collectively, the "Authors") each agree to grant you a license, under royalty-free and otherwise reasonable, non-discriminatory terms and conditions, to their respective essential patent claims that they deem necessary to implement the Specification. 

THE SPECIFICATION IS PROVIDED "AS IS," AND THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE SPECIFICATION ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. 

THE AUTHORS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THE SPECIFICATION. 

The name and trademarks of the Authors may NOT be used in any manner, including advertising or publicity pertaining to the Specification or its contents without specific, written prior permission. Title to copyright in the Specification will at all times remain with the Authors. 

No other rights are granted by implication, estoppel or otherwise.
-->
<xs:schema
  targetNamespace="http://schemas.xmlsoap.org/ws/2004/08/eventing" 
  xmlns:tns="http://schemas.xmlsoap.org/ws/2004/08/eventing"
  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
  xmlns:wseex='http://ws.apache.org/ws/2007/05/eventing-extended'
  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://schemas.xmlsoap.org/ws/2004/08/addressing" 
	schemaLocation="addressing.xsd" />
  <xs:import namespace="http://ws.apache.org/ws/2007/05/eventing-extended" 
	schemaLocation="eventing-extended.xsd" />
  <!-- Types and global elements -->
  <xs:complexType name="DeliveryType" mixed="true">
  	
    <xs:sequence>
      <xs:element name="NotifyTo" type="wsa:EndpointReferenceType" />
      <xs:any namespace="##any" processContents="lax" 
        minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="Mode" type="xs:anyURI" use="optional" />
    <xs:anyAttribute namespace="##other" processContents="lax" />
  </xs:complexType>

  <xs:element name="NotifyTo" type="wsa:EndpointReferenceType" />

  <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="FilterType" mixed="true">
 	<xs:simpleContent>
      <xs:extension base="xs:string">
	    <xs:attribute name="Dialect" type="xs:anyURI" use="optional" />
	    <xs:anyAttribute namespace="##other" processContents="lax" />
      </xs:extension>
    </xs:simpleContent>    
  </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>

  <!-- 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="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>

  <xs:element name="Identifier" type="xs:anyURI" />
 
  <!-- Subscribe response -->
  <xs:element name="SubscribeResponse">
    <xs:complexType>
      <xs:sequence>
	  <xs:element name="SubscriptionManager" 
                    type="wsa:EndpointReferenceType" />
        <xs:element name="Expires" type="tns:ExpirationType" />
        <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 delivery mode -->
  <xs:element name="SupportedDeliveryMode" 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="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>

  <!-- GetStatus request -->
  <xs:element name="GetStatus">
    <xs:complexType>
      <xs:sequence>
      	<xs:element name="subscriptionDetails" type="wseex:SubscriptionDetails"> </xs:element>
        <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>

  <!-- 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>
  
   <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>

  <!-- count(/s:Envelope/s:Body/*) = 0 for Unsubscribe response -->

  <!-- SubscriptionEnd message -->
  <xs:element name="SubscriptionEnd">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="SubscriptionManager" 
                    type="wsa:EndpointReferenceType" />
        <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://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryFailure" />
      <xs:enumeration value="http://schemas.xmlsoap.org/ws/2004/08/eventing/SourceShuttingDown" />
      <xs:enumeration value="http://schemas.xmlsoap.org/ws/2004/08/eventing/SourceCancelling" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="OpenSubscriptionEndCodeType">
    <xs:union memberTypes="tns:SubscriptionEndCodeType xs:anyURI" />
  </xs:simpleType>

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

</xs:schema>
