<?xml version="1.0" encoding="utf-8"?>
<!-- 
   Legal Disclaimer
	
   Copyright Notice
	
   (c) Copyright Akamai Technologies, 
       Computer Associates International, Inc., Fujitsu Limited, 
       Hewlett-Packard Development Company, 
       International Business Machines Corporation, SAP AG, 
       Sonic Software Corporation, Tibco Software Inc. and 
       The University of Chicago  2003, 2004  All rights reserved. 
             
-->
<wsdl:definitions name="WS-BaseNotification"
  xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing" 
  xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy" 
  xmlns:wsnt=
 "http://www.ibm.com/xmlns/stdwip/web-services/WS-BaseNotification" 
  xmlns:wsrp=
 "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties" 
  xmlns:wsrl=
 "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceLifetime" 
  targetNamespace=
 "http://www.ibm.com/xmlns/stdwip/web-services/WS-BaseNotification">
 
<!-- ========================== Imports =========================== --> 
   <wsdl:import 
       namespace=
  "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties" 
       location=
"http://www-106.ibm.com/developerworks/webservices/library/ws-resource/WS-ResourceProperties.wsdl" />
       
   <wsdl:import 
       namespace=
  "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceLifetime" 
       location=
"http://www-106.ibm.com/developerworks/webservices/library/ws-resource/WS-ResourceLifetime.wsdl" />
       
<!-- ===================== Types Definitions ====================== -->
   <wsdl:types>
      <xsd:schema 
        targetNamespace=
 "http://www.ibm.com/xmlns/stdwip/web-services/WS-BaseNotification" >
 
         <xsd:include schemaLocation=
 "http://www-106.ibm.com/developerworks/library/specification/ws-notification/WS-BaseN.xsd" />
         
         <xsd:import 
            namespace=
            "http://schemas.xmlsoap.org/ws/2003/03/addressing"
            schemaLocation=
            "http://schemas.xmlsoap.org/ws/2003/03/addressing" 
         />
         <xsd:import namespace=
  "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties" 
              schemaLocation= 
  "http://www-106.ibm.com/developerworks/webservices/library/ws-resource/WS-ResourceProperties.xsd" 
         />
         <xsd:import 
            namespace=
  "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceLifetime"
            schemaLocation= 
  "http://www-106.ibm.com/developerworks/webservices/library/ws-resource/WS-ResourceLifetime.xsd" 
         />
               
<!-- =============== Resource Property Related  =================== -->
<!-- ======== Resource Properties for NotificationProducer ======== -->
         <xsd:element name="NotificationProducerRP" >
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element ref="wsnt:Topic"        
                               minOccurs="1" maxOccurs="unbounded" />
                  <xsd:element ref="wsnt:FixedTopicSet"        
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsnt:TopicExpressionDialects"
                               minOccurs="1" maxOccurs="unbounded" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

<!-- ======== Resource Properties for SubscriptionManager ========= -->       
         <xsd:element name="SubscriptionManagerRP" >
            <xsd:complexType>
               <xsd:sequence>
         <!-- From WS-ResourceLifetime ScheduledResourceTermination -->
                  <xsd:element ref="wsrl:CurrentTime" 
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsrl:TerminationTime" 
                               minOccurs="1" maxOccurs="1" />
                               
         <!-- SubscriptionManager specific  -->
                  <xsd:element ref="wsnt:ConsumerReference"        
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsnt:TopicExpression"
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsnt:UseNotify"
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsnt:Precondition"
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element ref="wsnt:Selector"
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element ref="wsnt:SubscriptionPolicy" 
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element ref="wsnt:CreationTime" 
                               minOccurs="0" maxOccurs="1" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

<!-- ================== Message Helper Types  ===================== -->
         <xsd:complexType name="NotificationMessageHolderType" >
            <xsd:sequence>
               <xsd:element name="Topic" 
                            type="wsnt:TopicExpressionType" 
                            minOccurs="1" maxOccurs="1" />
               <xsd:element name="ProducerReference" 
                            type="wsa:EndpointReferenceType" 
                            minOccurs="1" maxOccurs="1" />
               <xsd:element name="Message" type="xsd:anyType" 
                            minOccurs="1" maxOccurs="1" />
            </xsd:sequence>
         </xsd:complexType>

<!-- ==== Common fault information to carry in all fault messages ==== -->       
       <xsd:complexType name="BaseFaultType">
          <xsd:sequence>
             <xsd:element name="Timestamp" type="xsd:dateTime" 
                      minOccurs="1" maxOccurs="1"/>
             <xsd:element name="Originator" 
                          type="wsa:EndpointReferenceType" 
                      minOccurs="0" maxOccurs="1"/>
             <xsd:element name="ErrorCode" 
                      minOccurs="0" maxOccurs="1">
                <xsd:complexType>
                   <xsd:complexContent mixed="true">
                      <xsd:extension base="xsd:anyType">
                         <xsd:attribute name="dialect" type="xsd:anyURI"
                                    use="required"/>
                      </xsd:extension>
                   </xsd:complexContent>
                </xsd:complexType>      
             </xsd:element>
             <xsd:element name="Description" type="xsd:string" 
                      minOccurs="0" maxOccurs="unbounded"/>
             <xsd:element name="FaultCause" type="wsnt:BaseFaultType" 
                      minOccurs="0" maxOccurs="unbounded"/> 
          </xsd:sequence>
       </xsd:complexType>

<!-- ========== Message Types for NotificationConsumer  =========== -->
         <xsd:element name="Notify" >
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="NotificationMessage"
                            type="wsnt:NotificationMessageHolderType"
                            minOccurs="1" maxOccurs="unbounded" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

<!-- ========== Message Types for NotificationProducer  =========== -->
         <xsd:element name="Subscribe" >
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="ConsumerReference" 
                               type="wsa:EndpointReferenceType"
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element name="TopicExpression" 
                               type="wsnt:TopicExpressionType" 
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element name="UseNotify" 
                               type="xsd:boolean" default="true" 
                               minOccurs="0" maxOccurs="1" />
                   <xsd:element name="Precondition" 
                               type="wsrp:QueryExpressionType"
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element name="Selector"
                               type="wsrp:QueryExpressionType"
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element name="SubscriptionPolicy" 
                               type="xsd:anyType" 
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element name="InitialTerminationTime" 
                               type="xsd:dateTime"
                               minOccurs="0" maxOccurs="1" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
        
         <xsd:element name="SubscribeResponse">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="SubscriptionReference" 
                               type="wsa:EndpointReferenceType"
                               minOccurs="0" maxOccurs="1" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
                  
         <xsd:element name="GetCurrentMessage">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="Topic" 
                           type="wsnt:TopicExpressionType" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

         <xsd:element name="GetCurrentMessageResponse">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:any />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

         <xsd:complexType name="ResourceUnknownFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="ResourceUnknownFault" 
                      type="wsnt:ResourceUnknownFaultType"/>

         <xsd:complexType name="SubscribeCreationFailedFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="SubscribeCreationFailedFault" 
                      type="wsnt:SubscribeCreationFailedFaultType"/>

         <xsd:complexType name="TopicPathDialectUnknownFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="TopicPathDialectUnknownFault" 
                      type="wsnt:TopicPathDialectUnknownFaultType"/>

         <xsd:complexType name="InvalidTopicExpressionFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="InvalidTopicExpressionFault" 
                      type="wsnt:InvalidTopicExpressionFaultType"/>

         <xsd:complexType name="TopicNotSupportedFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="TopicNotSupportedFault" 
                      type="wsnt:TopicNotSupportedFaultType"/>

         <xsd:complexType name="NoCurrentMessageOnTopicFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="NoCurrentMessageOnTopicFault" 
                      type="wsnt:NoCurrentMessageOnTopicFaultType"/>


<!-- ========== Message Types for SubscriptionManager  =========== -->

         <xsd:element name="PauseSubscription" />

         <xsd:element name="PauseSubscriptionResponse" />

         <xsd:element name="ResumeSubscription" />

         <xsd:element name="ResumeSubscriptionResponse" />

         <xsd:complexType name="PauseFailedFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="PauseFailedFault" 
                      type="wsnt:PauseFailedFaultType"/>

         <xsd:complexType name="ResumeFailedFaultType">
            <xsd:complexContent>
               <xsd:extension base="wsnt:BaseFaultType"/>
            </xsd:complexContent>
         </xsd:complexType>
         <xsd:element name="ResumeFailedFault" 
                      type="wsnt:ResumeFailedFaultType"/>


      </xsd:schema>
   </wsdl:types>       

<!-- ================ NotificationConsumer::Notify ================ 
  Notify(
    NotificationMessage
      (TopicExpression, ProducerReference, Message)*
  returns: n/a (one way)
-->
  <wsdl:message name="Notify">
    <wsdl:part name="Notify" element="wsnt:Notify"/>
  </wsdl:message>

<!-- ============== NotificationProducer::Subscribe =============== 
  Subscribe(
   (ConsumerEndpointReference, TopicExpression, [UseNotify],
   [Precondition], [Selector], [SubscriptionPolicy], 
   [InitialTerminationTime])   
  returns: WS-Resource qualified EPR to a Subscription
-->
   <wsdl:message name="SubscribeRequest" >
     <wsdl:part name="SubscribeRequest" 
                element="wsnt:Subscribe"/>
   </wsdl:message>

   <wsdl:message name="SubscribeResponse">
      <wsdl:part name="SubscribeResponse" 
                 element="wsnt:SubscribeResponse"/>
   </wsdl:message>

   <wsdl:message name="ResourceUnknownFault">
      <part name="ResourceUnknownFault"
            element="wsnt:ResourceUnknownFault" />
   </wsdl:message> 

   <wsdl:message name="SubscribeCreationFailedFault">
      <part name="SubscribeCreationFailedFault"
            element="wsnt:SubscribeCreationFailedFault" />
   </wsdl:message> 

   <wsdl:message name="TopicPathDialectUnknownFault">
      <part name="TopicPathDialectUnknownFault"
            element="wsnt:TopicPathDialectUnknownFault" />
   </wsdl:message> 

<!-- ========== NotificationProducer::GetCurrentMessage =========== 
  GetCurrentMessage(topicExpression)
  returns: a NotificationMessage (xsd:any)
-->
   <wsdl:message name="GetCurrentMessageRequest">
      <wsdl:part name="GetCurrentMessageRequest" 
            element="wsnt:GetCurrentMessage"/>
   </wsdl:message>

   <wsdl:message name="GetCurrentMessageResponse">
      <wsdl:part name="GetCurrentMessageResponse" 
            element="wsnt:GetCurrentMessageResponse"/>
   </wsdl:message>

   <wsdl:message name="InvalidTopicExpressionFault">
      <part name="InvalidTopicExpressionFault"
            element="wsnt:InvalidTopicExpressionFault" />
   </wsdl:message> 

   <wsdl:message name="TopicNotSupportedFault">
      <part name="TopicNotSupportedFault"
            element="wsnt:TopicNotSupportedFault" />
   </wsdl:message> 

   <wsdl:message name="NoCurrentMessageOnTopicFault">
      <part name="NoCurrentMessageOnTopicFault"
            element="wsnt:NoCurrentMessageOnTopicFault" />
   </wsdl:message> 

<!-- ========== SubscriptionManager::PauseSubscription ============
   PauseSubscription()
   returns: empty
-->
   <wsdl:message name="PauseSubscriptionRequest">
      <wsdl:part name="PauseSubscriptionRequest" 
                 element="wsnt:PauseSubscription"/>
    </wsdl:message>

   <wsdl:message name="PauseSubscriptionResponse">
      <wsdl:part name="PauseSubscriptionResponse" 
                 element="wsnt:PauseSubscriptionResponse"/>
   </wsdl:message>

   <wsdl:message name="PauseFailedFault">
      <part name="PauseFailedFault"
            element="wsnt:PauseFailedFault" />
   </wsdl:message> 

<!-- ========= SubscriptionManager::ResumeSubscription ============
   ResumeSubscription()
   returns: empty
-->
   <wsdl:message name="ResumeSubscriptionRequest">
      <wsdl:part name="ResumeSubscriptionRequest" 
                 element="wsnt:ResumeSubscription"/>
   </wsdl:message>

   <wsdl:message name="ResumeSubscriptionResponse">
      <wsdl:part name="ResumeSubscriptionResponse" 
                 element="wsnt:ResumeSubscriptionResponse"/>
   </wsdl:message>

   <wsdl:message name="ResumeFailedFault">
      <part name="ResumeFailedFault"
            element="wsnt:ResumeFailedFault" />
   </wsdl:message> 
      
<!-- =================== PortType Definitions ===================== -->
<!-- ========= NotificationConsumer PortType Definition =========== -->
  <wsdl:portType name="NotificationConsumer">
    <wsdl:operation name="Notify">
      <wsdl:input message="wsnt:Notify" />
    </wsdl:operation>
  </wsdl:portType>
  
<!-- ========= NotificationProducer PortType Definition =========== -->
  <wsdl:portType name="NotificationProducer"
      wsrp:ResourceProperties ="wsnt:NotificationProducerRP">

      <!-- ========== extends wsrp:ResourceProperties ============= -->
      <wsdl:operation name="GetResourceProperty">
         <wsdl:input  name="GetResourcePropertyRequest" 
                      message="wsrp:GetResourcePropertyRequest" />
         <wsdl:output name="GetResourcePropertyResponse" 
                      message="wsrp:GetResourcePropertyResponse" />
         <wsdl:fault  name="ResourceUnknownFault" 
                      message="wsrp:ResourceUnknownFault" />
         <wsdl:fault  name="InvalidResourcePropertyQNameFault" 
                      message="wsrp:InvalidResourcePropertyQNameFault" />     
      </wsdl:operation>

      <!-- =========== NotificationProducer Specific ============== -->
      <wsdl:operation name="Subscribe">
         <wsdl:input  message="wsnt:SubscribeRequest" />
         <wsdl:output message="wsnt:SubscribeResponse" />
         <wsdl:fault  name="ResourceUnknownFault" 
                      message="wsnt:ResourceUnknownFault" />
         <wsdl:fault  name="SubscribeCreationFailedFault" 
                      message="wsnt:SubscribeCreationFailedFault"/>
         <wsdl:fault  name="TopicPathDialectUnknownFault" 
                      message="wsnt:TopicPathDialectUnknownFault"/>
      </wsdl:operation>

      <wsdl:operation name="GetCurrentMessage">
         <wsdl:input  message="wsnt:GetCurrentMessageRequest"/>
         <wsdl:output message="wsnt:GetCurrentMessageResponse"/>
         <wsdl:fault  name="ResourceUnknownFault" 
                      message="wsnt:ResourceUnknownFault" />
         <wsdl:fault  name="InvalidTopicExpressionFault" 
                      message="wsnt:InvalidTopicExpressionFault" />
         <wsdl:fault  name="TopicNotSupportedFault" 
                      message="wsnt:TopicNotSupportedFault" />
         <wsdl:fault  name="NoCurrentMessageOnTopicFault" 
                      message="wsnt:NoCurrentMessageOnTopicFault" />
      </wsdl:operation>
   </wsdl:portType>

<!-- ========== SubscriptionManager PortType Definition =========== -->
   <wsdl:portType name="SubscriptionManager"
      wsrp:ResourceProperties ="wsnt:SubscriptionManagerRP">
      <!-- ========== extends wsrp:ResourceProperties ============= -->
      <wsdl:operation name="GetResourceProperty">
         <wsdl:input  name="GetResourcePropertyRequest" 
                      message="wsrp:GetResourcePropertyRequest" />
         <wsdl:output name="GetResourcePropertyResponse" 
                      message="wsrp:GetResourcePropertyResponse" />
         <wsdl:fault  name="ResourceUnknownFault" 
                      message="wsrp:ResourceUnknownFault" />
         <wsdl:fault  name="InvalidResourcePropertyQNameFault" 
                      message="wsrp:InvalidResourcePropertyQNameFault" />     
      </wsdl:operation>
      
      <!-- === extends wsrl:ImmediateResourceTermination ========== -->
      <wsdl:operation name="Destroy">
         <wsdl:input message="wsrl:DestroyRequest" />
         <wsdl:output message="wsrl:DestroyResponse" />
         <wsdl:fault name="ResourceUnknownFault" 
                     message="wsrl:ResourceUnknownFault" />
         <wsdl:fault name="ResourceNotDestroyedFault" 
                     message="wsrl:ResourceNotDestroyedFault" />
      </wsdl:operation>

      <!-- === extends wsrl:ScheduledResourceTermination ========== -->
      <wsdl:operation name="SetTerminationTime">
         <wsdl:input message="wsrl:SetTerminationTimeRequest" />
         <wsdl:output message="wsrl:SetTerminationTimeResponse" />
         <wsdl:fault name="ResourceUnknownFault" 
                     message="wsrl:ResourceUnknownFault" />
         <wsdl:fault name="UnableToSetTerminationTimeFault" 
                     message="wsrl:UnableToSetTerminationTimeFault" />
         <wsdl:fault name="TerminationTimeChangeRejectedFault" 
                     message="wsrl:TerminationTimeChangeRejectedFault" />
      </wsdl:operation>

      <!-- ========= SubscriptionManager specific operations ====== -->
      <wsdl:operation name="PauseSubcription">
         <wsdl:input  message="wsnt:PauseSubscriptionRequest"/>
         <wsdl:output message="wsnt:PauseSubscriptionResponse"/>
         <wsdl:fault  name="ResourceUnknownFault" 
                      message="wsnt:ResourceUnknownFault" />
         <wsdl:fault  name="PauseFailedFault"
                      message="wsnt:PauseFailedFault" />        

      </wsdl:operation>
      <wsdl:operation name="ResumeSubscription">
         <wsdl:input  message="wsnt:ResumeSubscriptionRequest"/>
         <wsdl:output message="wsnt:ResumeSubscriptionResponse"/>
         <wsdl:fault  name="ResourceUnknownFault" 
                      message="wsnt:ResourceUnknownFault" />
         <wsdl:fault  name="ResumeFailedFault"
                      message="wsnt:ResumeFailedFault" />        
      </wsdl:operation>        
   </wsdl:portType>

</wsdl:definitions>
