<?xml version="1.0" encoding="utf-8"?>
<!-- 
   Legal Disclaimer
	
   Copyright Notice
	
   (c)Copyright International Business Machines Corporation, Sonic Software Corporation, 
      SAP AG, Hewlett-Packard Development Company, Akamai Technologies Inc. 
      and Tibco Software Inc.  2003, 2004  All rights reserved.
      
   (c)Copyright The University of Chicago 1999, 2004. All rights reserved.
-->
<wsdl:definitions name="WS-Notification"
  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-Notification" 
  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-Notification">
 
<!-- ========================== 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-Notification">

          <xsd:include schemaLocation=
 "http://www-106.ibm.com/developerworks/webservices/library/ws-resource/WS-Notification.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:Topics"        
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsnt:FixedTopicSet"        
                               minOccurs="1" maxOccurs="1" />
               </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:TopicPathExpression"
                               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="1" maxOccurs="1" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

<!-- ======== Resource Properties for NotificationBroker ========== -->
         <xsd:element name="NotificationBrokerRP" >
            <xsd:complexType>
               <xsd:sequence>
         <!-- From NotificationProducer -->
                  <xsd:element ref="wsnt:Topics"        
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsnt:FixedTopicSet"        
                               minOccurs="1" maxOccurs="1" />
         <!-- SubscriptionManager specific  -->
                  <xsd:element ref="wsnt:RequiresRegistration"        
                               minOccurs="1" maxOccurs="1" />        
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>
 
<!-- ====== Resource Properties for PublisherRegistration ========= -->
         <xsd:element name="PublisherRegistrationRP" >
            <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" />
                               
         <!-- PublisherRegistration specific  -->
                  <xsd:element ref="wsnt:PublisherReference"        
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element ref="wsnt:TopicPathExpression"        
                               minOccurs="1" maxOccurs="unbounded" />
                  <xsd:element ref="wsnt:Demand"        
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element ref="wsnt:CreationTime"        
                               minOccurs="1" maxOccurs="1" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

<!-- ================== Message Helper Types  ===================== -->
         <xsd:complexType name="NotificationMessageHolderType" >
            <xsd:sequence>
               <xsd:element name="Topic" 
                            type="wsnt:ConcreteTopicPathExpression" 
                            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>

<!-- ================= Message Specific Types  ==================== -->      
      <xsd:element name="ErrorMessage" type="xsd:string" />

<!-- ========== 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="SubscribeRequest" >
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="ConsumerReference" 
                               type="wsa:EndpointReferenceType"
                               minOccurs="1" maxOccurs="1" />
                  <xsd:element name="TopicPathExpression" 
                               type="wsnt:TopicPathExpression" 
                               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="wsp:PolicyExpression" 
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element ref="wsrl:InitialTerminationTime" 
                               minOccurs="0"/>
               </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="GetCurrentMessageRequest">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="Topic" 
                           type="wsnt:ConcreteTopicPathExpression" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

         <xsd:element name="GetCurrentMessageResponse">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:any />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

         <xsd:element name="PauseRequest">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="Topic" 
                               type="wsnt:TopicPathExpression" 
                               minOccurs="0" maxOccurs="1" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

         <xsd:element name="ResumeRequest">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="Topic" 
                               type="wsnt:TopicPathExpression"
                               minOccurs="0" maxOccurs="1" />
              </xsd:sequence>
           </xsd:complexType>
         </xsd:element>

<!-- ========== Message Types for SubscriptionManager  =========== -->

<!-- ========== Message Types for NotificationBroker  ============ -->
         <xsd:element name="RegisterPublisherRequest">
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="PublisherReference" 
                               type="wsa:EndpointReferenceType" 
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element name="Topic" 
                               type="wsnt:TopicPathExpression"
                               minOccurs="0" maxOccurs="unbounded" />
                  <xsd:element name="Demand" 
                               type="xsd:boolean" default="false" 
                               minOccurs="0" maxOccurs="1" />
                  <xsd:element ref="wsrl:InitialTerminationTime" 
                               minOccurs="0"/>
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

         <xsd:element name="ResgisterPublisherResponse"> 
            <xsd:complexType>
               <xsd:sequence>
                  <xsd:element name="PublisherRegistrationReference" 
                               type="wsa:EndpointReferenceType"
                               minOccurs="0" maxOccurs="1" />
               </xsd:sequence>
            </xsd:complexType>
         </xsd:element>

      </xsd:schema>
   </wsdl:types>       

<!-- ==================== Message Definitions ===================== -->
   <wsdl:message name="ErrorMessage">
      <wsdl:part name="ErrorMessage" element="wsnt:ErrorMessage"/>
   </wsdl:message>

<!-- ================ NotificationConsumer::Notify ================ 
  Notify(
    NotificationMessage
      (TopicPathExpression, ProducerReference, Message)*
  returns: n/a (one way)
-->
  <wsdl:message name="Notify">
    <wsdl:part name="Notify" element="wsnt:Notify"/>
  </wsdl:message>

<!-- ============== NotificationProducer::Subscribe =============== 
  Subscribe(
   (ConsumerEndpointReference, TopicPathExpression, [UseNotify],
   [Precondition], [Selector], [SubscriptionPolicy], 
   [InitialTerminationTime])   
  returns: WS-Resource qualified EPR to a Subscription
-->
   <wsdl:message name="SubscribeRequest" >
     <wsdl:part name="SubscribeRequest" 
                element="wsnt:SubscribeRequest"/>
   </wsdl:message>
   <wsdl:message name="SubscribeResponse">
      <wsdl:part name="SubscribeResponse" 
                 element="wsnt:SubscribeResponse"/>
   </wsdl:message>

<!-- ========== NotificationProducer::GetCurrentMessage =========== 
  GetCurrentMessage(topic)
 returns: a NotificationMessage (xsd:any)
     -->
   <wsdl:message name="GetCurrentMessageRequest">
      <wsdl:part name="GetCurrentMessageRequest" 
            element="wsnt:GetCurrentMessageRequest"/>
   </wsdl:message>
   <wsdl:message name="GetCurrentMessageResponse">
      <wsdl:part name="GetCurrentMessageResponse" 
            element="wsnt:GetCurrentMessageResponse"/>
   </wsdl:message>

<!-- ================ NotificationProducer::Pause =================
   Pause([topicPathExpression])
   returns: empty
-->
   <wsdl:message name="PauseRequest">
      <wsdl:part name="PauseRequest" 
                 element="wsnt:PauseRequest"/>
   </wsdl:message>

   <wsdl:message name="PauseResponse">
   </wsdl:message>

<!-- =============== NotificationProducer::Resume =================
   Resume([topicPathExpression])
   returns: empty
-->
   <wsdl:message name="ResumeRequest">
      <wsdl:part name="ResumeRequest" 
                 element="wsnt:ResumeRequest"/>
   </wsdl:message>

   <wsdl:message name="ResumeResponse">
    </wsdl:message>

<!-- ========== SubscriptionManager::PauseSubscription ============
   PauseSubscription()
   returns: empty
-->
   <wsdl:message name="PauseSubscriptionRequest" />
   <wsdl:message name="PauseSubscriptionResponse"/>

<!-- ========= SubscriptionManager::ResumeSubscription ============
   ResumeSubscription()
   returns: empty
-->
   <wsdl:message name="ResumeSubscriptionRequest"/>
   <wsdl:message name="ResumeSubscriptionResponse"/>

<!-- ========== NotificationBroker::RegisterPublisher =============
   RegisterPublisher(PublisherReference, TopicPathExpression* ,
                     [Demand], [InitialTerminationTime])
   returns: WS-Resource qualified EPR to a PublisherRegistration 
 ***********************************
     -->
   <wsdl:message name="RegisterPublisherRequest">
      <wsdl:part name="RegisterPublisherRequest" 
                 element="wsnt:RegisterPublisherRequest"/>
   </wsdl:message>
   <wsdl:message name="RegisterPublisherResponse">
      <wsdl:part name="RegisterPublisherResponse" 
                 element="wsnt:ResgisterPublisherResponse"/>
   </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 message="wsrp:GetResourcePropertyRequest" />
        <wsdl:output message="wsrp:GetResourcePropertyResponse" />
        <wsdl:fault name="UnknownResource" 
                    message="wsrp:ErrorMessage" />
        <wsdl:fault name="InvalidResourceProperty" 
                    message="wsrp:ErrorMessage" />        
      </wsdl:operation>    
      
      <!-- =========== NotificationProducer Specific ============== -->
      <wsdl:operation name="Subscribe">
         <wsdl:input message="wsnt:SubscribeRequest" />
         <wsdl:output message="wsnt:SubscribeResponse" />
         <wsdl:fault name="SubscribeCreationFailed" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
      <wsdl:operation name="GetCurrentMessage">
         <wsdl:input message="wsnt:GetCurrentMessageRequest"/>
         <wsdl:output message="wsnt:GetCurrentMessageResponse"/>
         <wsdl:fault name="InvalidTopicPathExpression" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="TopicNotSupported" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="NoCurrentMessageOnTopic" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
      <wsdl:operation name="Pause">
         <wsdl:input message="wsnt:PauseRequest"/>
         <wsdl:output message="wsnt:PauseResponse"/>
         <wsdl:fault name="InvalidTopicPathExpression" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="TopicNotSupported" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="PauseFailed" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
      <wsdl:operation name="Resume">
         <wsdl:input message="wsnt:ResumeRequest"/>
         <wsdl:output message="wsnt:ResumeResponse"/>
         <wsdl:fault name="InvalidTopicPathExpression" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="TopicNotSupported" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="ResumeFailed" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
   </wsdl:portType>

<!-- ========== SubscriptionManager PortType Definition =========== -->
   <wsdl:portType name="SubscriptionManager"
      wsrp:ResourceProperties ="wsnt:SubscriptionManagerRP">
      <!-- ========== extends wsrp:ResourceProperties ============= -->
      <wsdl:operation name="GetResourceProperty">
        <wsdl:input message="wsrp:GetResourcePropertyRequest" />
        <wsdl:output message="wsrp:GetResourcePropertyResponse" />
        <wsdl:fault name="UnknownResource" 
                    message="wsrp:ErrorMessage" />
        <wsdl:fault name="InvalidResourceProperty" 
                    message="wsrp:ErrorMessage" />        
      </wsdl:operation>  
      
      <!-- === extends wsrl:ImmediateResourceTermination ========== -->
      <wsdl:operation name="Destroy">
        <wsdl:input message="wsrl:DestroyRequest" />
        <wsdl:output message="wsrl:DestroyResponse" />
        <wsdl:fault name="UnknownResource" 
                    message="wsrl:ErrorMessage" />
        <wsdl:fault name="UnableToDestroyResource" 
                    message="wsrl:ErrorMessage" />
      </wsdl:operation>

      <!-- === extends wsrl:ScheduledResourceTermination ========== -->
      <wsdl:operation name="SetTerminationTime">
        <wsdl:input message="wsrl:SetTerminationTimeRequest" />
        <wsdl:output message="wsrl:SetTerminationTimeResponse" />
        <wsdl:fault name="UnknownResource" 
                    message="wsrl:ErrorMessage" />
        <wsdl:fault name="TerminationTimeChangeRejected" 
                    message="wsrl:ErrorMessage" />
        <wsdl:fault name="UnableToSetTerminationTime" 
                    message="wsrl:ErrorMessage" />
      </wsdl:operation>

      <!-- ========= SubscriptionManager specific operations ====== -->
      <wsdl:operation name="PauseSubcription">
         <wsdl:input message="wsnt:PauseSubscriptionRequest"/>
         <wsdl:output message="wsnt:PauseSubscriptionResponse"/>
         <wsdl:fault name="PauseFailed"
                     message="wsnt:ErrorMessage" />        

      </wsdl:operation>
      <wsdl:operation name="ResumeSubscription">
         <wsdl:input message="wsnt:ResumeSubscriptionRequest"/>
         <wsdl:output message="wsnt:ResumeSubscriptionResponse"/>
         <wsdl:fault name="ResumeFailed"
                     message="wsnt:ErrorMessage" />        
      </wsdl:operation>        
   </wsdl:portType>

<!-- ========== NotificationBroker PortType Definition ============ -->
   <wsdl:portType name="NotificationBroker" 
      wsrp:ResourceProperties ="wsnt:NotificationBrokerRP">
      <!-- ============= extends NotificationConsumer ============= -->
      <wsdl:operation name="Notify">
         <wsdl:input message="wsnt:Notify" />
      </wsdl:operation>

      <!-- ============= extends NotificationProducer ============= -->
      <!-- ========== extends wsrp:ResourceProperties ============= -->
      <wsdl:operation name="GetResourceProperty">
        <wsdl:input message="wsrp:GetResourcePropertyRequest" />
        <wsdl:output message="wsrp:GetResourcePropertyResponse" />
        <wsdl:fault name="UnknownResource" 
                    message="wsrp:ErrorMessage" />
        <wsdl:fault name="InvalidResourceProperty" 
                    message="wsrp:ErrorMessage" />        
      </wsdl:operation>    
      
      <!-- =========== NotificationProducer Specific ============== -->
      <wsdl:operation name="Subscribe">
         <wsdl:input message="wsnt:SubscribeRequest" />
         <wsdl:output message="wsnt:SubscribeResponse" />
         <wsdl:fault name="SubscribeCreationFailed" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
      <wsdl:operation name="GetCurrentMessage">
         <wsdl:input message="wsnt:GetCurrentMessageRequest"/>
         <wsdl:output message="wsnt:GetCurrentMessageResponse"/>
         <wsdl:fault name="InvalidTopicPathExpression" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="TopicNotSupported" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="NoCurrentMessageOnTopic" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
      <wsdl:operation name="Pause">
         <wsdl:input message="wsnt:PauseRequest"/>
         <wsdl:output message="wsnt:PauseResponse"/>
         <wsdl:fault name="InvalidTopicPathExpression" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="TopicNotSupported" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="PauseFailed" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
      <wsdl:operation name="Resume">
         <wsdl:input message="wsnt:ResumeRequest"/>
         <wsdl:output message="wsnt:ResumeResponse"/>
         <wsdl:fault name="InvalidTopicPathExpression" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="TopicNotSupported" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="ResumeFailed" 
                     message="wsnt:ErrorMessage"/>
      </wsdl:operation>
      
      <!-- ========= NotificationBroker specific operations ======= -->      
      <wsdl:operation name="RegisterPublisher">
         <wsdl:input message="wsnt:RegisterPublisherRequest"/>
         <wsdl:output message="wsnt:RegisterPublisherResponse"/>
         <wsdl:fault name="InvalidTopicPathExpression" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="TopicNotSupported" 
                     message="wsnt:ErrorMessage"/>
         <wsdl:fault name="PublisherRegistrationFailed" 
                     message="wsnt:ErrorMessage"/>
       </wsdl:operation>
   </wsdl:portType>

<!-- ===== PublisherRegistrationManager PortType Definition ====== -->
   <wsdl:portType name="PublisherRegistrationManager" 
      wsrp:ResourceProperties ="wsnt:PublisherRegistrationManagerRP">

   </wsdl:portType>

</wsdl:definitions>
