<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v3.5 NT (http://www.xmlspy.com) by Stuart Williams (Hewlett-Packard Laboratories) -->
<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.1//EN"  "http://www.w3.org/XML/1998/06/xmlspec-v21.dtd" [
  <!-- Added contriblist to header content model -->
  <!ENTITY % header.mdl "title, subtitle?, version?, w3c-designation, w3c-doctype,
        pubdate, notice*, publoc, ((prevlocs, latestloc?) |
        (latestloc, prevlocs?))?, authlist, contriblist?, copyright?,
        ((status, abstract) | (abstract, status)), pubstmt?,
        sourcedesc?, langusage, revisiondesc">
  <!ENTITY copy "&#169;">
  <!-- copyright sign, U+00A9 ISOnum -->
  <!ENTITY egrave "&#232;">
  <!-- latin small letter e with grave,
                                    U+00E8 ISOlat1 -->
  <!ENTITY eacute "&#233;">
  <!-- latin small letter e with acute,
                                    U+00E9 ISOlat1 -->
  <!ENTITY ecirc "&#234;">
  <!-- latin small letter e with circumflex,
                                    U+00EA ISOlat1 -->
  <!ENTITY euml "&#235;">
  <!-- latin small letter e with diaeresis,
                                    U+00EB ISOlat1 -->
  <!-- Contriblist model on author list -->
  <!ELEMENT contriblist (author+)>
  <!--
  <!ATTLIST contriblist
  %common.att;>
  -->
]>
<?xml-stylesheet type="text/xsl" href="hh-style.xsl"?>
<spec w3c-doctype="wd" role="editors-copy">
  <header>
    <title>XML Protocol Abstract Model</title>
    <w3c-designation>WD-xmlp-am-2001mmdd</w3c-designation>
    <w3c-doctype>Editors' Copy</w3c-doctype>
    <pubdate>
      <day>13</day>
      <month>August</month>
      <year>2001</year>
    </pubdate>
    <publoc>
      @@@
<!--
      <loc href="http://www.w3.org/TR/2001/WD-xmlp-am-2001mmdd/">http://www.w3.org/TR/2001/WD-xmlp-am-2001mmdd/</loc>
-->
    </publoc>
<!--
    <latestloc>
      <loc href="http://www.w3.org/TR/xmlp-am/">http://www.w3.org/TR/xmlp-am/</loc>
    </latestloc>
    <prevlocs>
      <loc href="http://www.w3.org/TR/2001/WD-xmlp-am-20010709/">http://www.w3.org/TR/2001/WD-xmlp-am-20010709/</loc>
    </prevlocs>
-->
    <authlist>
      <author>
        <name>Stuart Williams</name>
        <affiliation>Hewlett-Packard Company</affiliation>
        <email href="mailto:skw@hplb.hpl.hp.com">skw@hplb.hpl.hp.com</email>
      </author>
      <author>
        <name>Mark Jones</name>
        <affiliation>AT&amp;T Labs</affiliation>
        <email href="jones@research.att.com">jones@research.att.com</email>
      </author>
    </authlist>
    <contriblist>
      <author>
        <name>Mark Baker</name>
        <affiliation>Sun Microsystems Inc.</affiliation>
        <email href="mailto:mark.baker@canada.sun.com">mark.baker@canada.sun.com</email>
      </author>
      <author>
        <name>Martin Gudgin</name>
        <affiliation>DevelopMentor</affiliation>
        <email href="mailto:marting@develop.com">marting@develop.com</email>
      </author>
      <author>
        <name>Oisin Hurley</name>
        <affiliation>Iona</affiliation>
        <email href="mailto:ohurley@iona.com">ohurley@iona.com</email>
      </author>
      <author>
        <name>Marc Hadley</name>
        <affiliation>Sun Microsystems Inc.</affiliation>
        <email href="mailto:marc.hadley@uk.sun.com">marc.hadley@uk.sun.com</email>
      </author>
      <author>
        <name>John Ibbotson</name>
        <affiliation>IBM Corporation</affiliation>
        <email href="mailto:john_ibbotson@uk.ibm.com">john_ibbotson@uk.ibm.com</email>
      </author>
      <author>
        <name>Scott Isaacson</name>
        <affiliation>Novell Inc.</affiliation>
        <email href="mailto:SISAACSON@novell.com">SISAACSON@novell.com</email>
      </author>
      <author>
        <name>Yves Lafon</name>
        <affiliation>W3C</affiliation>
        <email href="mailto:ylafon@w3.org">ylafon@w3.org</email>
      </author>
      <author>
        <name>Jean-Jacques Moreau</name>
        <affiliation>Canon</affiliation>
        <email href="mailto:moreau@crf.canon.fr">moreau@crf.canon.fr</email>
      </author>
      <author>
        <name>Henrik Frystk Nielsen</name>
        <affiliation>Microsoft Corporation</affiliation>
        <email href="mailto:frystyk@microsoft.com">frystyk@microsoft.com</email>
      </author>
      <author>
        <name>Krinshna Sankar</name>
        <affiliation>Cisco Systems</affiliation>
        <email href="mailto:ksankar@cisco.com">ksankar@cisco.com</email>
      </author>
      <author>
        <name>Nick Smilonich</name>
        <affiliation>Unisys</affiliation>
        <email href="mailto:nick.smilonich@unisys.com">nick.smilonich@unisys.com</email>
      </author>
      <author>
        <name>Lynne Thompson</name>
        <affiliation>Unisys</affiliation>
        <email href="mailto:Lynne.Thompson@unisys.com">Lynne.Thompson@unisys.com</email>
      </author>
    </contriblist>
    <abstract>
      <p>This document describes an Abstract Model of XML Protocol.</p>
      <p>The challenge of crafting a protocol specification is to create
a description of behaviour that is not tied to any particular
approach to implementation. There is a need to abstract away from
some of the messy implementation details of buffer management, data
representation and specific APIs. However, in order to describe the
behaviour of a protocol one has to establish a set of (useful)
concepts that can be used in that description. An abstract model is
one way to establish a consistent set of concepts. An abstract
model is a tool for the description of complex behaviour  &mdash; it
is not a template for an implementation... although it should not
stray so far away from reality that it is impossible to recognise
how the required behaviours would be implemented.</p>
    </abstract>
    <status>
<!--
      <p>
        <emph>This section describes the status of
this document at the time of its publication. Other documents may
supersede this document. The latest status of this document series
is maintained at the W3C.</emph>
      </p>
      <p>This is the first <loc href="http://www.w3.org/Consortium/Process-20010208/tr.html#RecsWD">W3C
Working Draft</loc> of the XML Protocol Abstract Model for review by W3C
members and other interested parties. It has been produced by the <loc href="http://www.w3.org/2000/xp/Group/">XML Protocol Working Group</loc>
(WG), which is part of the <loc href="http://www.w3.org/2000/xp/Activity">XML
Protocol Activity</loc>.</p>
      <p>The XML Protocol Working Group has developed the Abstract Model
in order to provide a useful framework for the evaluation of
candidate protocols and for reasoning about the development of the
protocol itself.</p>
      <p>At this time the XML Protocol Working Group has not decided
whether an Abstract Model such as this one will be eventually
published as a separate Note, a separate Recommendation or whether
material from the Abstract Model will be incorporated as
non-normative (informative) text within an eventual Recommendation
specifying an XML Protocol. The Working Group solicits feedback on
the question of whether or not to include a model such as this in
an eventual Recommendation.</p>
      <p>This document currently uses the term "XML Protocol", or the
short form "XMLP", to refer to the protocol being modelled.</p>
      <p>The XML Protocol Working Group maintains an issues list <bibref ref="Issues"/>
         that contains descriptions of concerns
raised against the Abstract Model. As part of its continuing work,
the XML Protocol Working Group will resolve outstanding issues that
concern the reconciliation of differences between the Abstract Model
and the <loc href="http://www.w3.org/TR/soap12/">SOAP version 1.2
specification</loc>.</p>
      <p>Comments on this document should be sent to the W3C mailing list
<loc href="mailto:xmlp-comments@w3.org">xmlp-comments@w3.org</loc> (<loc href="http://lists.w3.org/Archives/Public/xmlp-comments/">public
archives</loc>).</p>
-->
      <p>Discussion of this document takes place on
the public &lt;<loc href="mailto:xml-dist-app@w3.org">xml-dist-app@w3.org</loc>&gt; mailing
list (<loc href="http://lists.w3.org/Archives/Public/xml-dist-app/">Archives</loc>)
per the <loc href="/2000/09/XML-Protocol-Charter#email">email
communication rules</loc> in the XML Protocol Working Group
Charter.</p>
<!--
      <p>This is a public W3C Working Draft for
review by W3C members and other interested parties. It is a draft
document and may be updated, replaced, or obsoleted by other
documents at any time. It is inappropriate to use W3C Working
Drafts as reference material or to cite them as other than "work in
progress". A <loc href="http://www.w3.org/TR/">list of all W3C
technical reports</loc> can be found at
http://www.w3.org/TR/.</p>
-->
    </status>
    <langusage>
      <language id="en">English</language>
    </langusage>
    <revisiondesc>
      <p/>
    </revisiondesc>
  </header>
  <body>
    <div1 id="Sec1">
      <head>Introduction</head>
      <p>An abstract model is a useful means to develop a description of
a system. It abstracts away from practical details such as specific
API definitions, data representation, and buffer management. It
provides a way to give a precise description of the externally
visible behaviour without being prescriptive of implementation
architecture.</p>
      <p>This document is intended to serve as an overview and
introduction to the XML Protocol and its framework.</p>
      <p>
        <specref ref="Sec2"/> presents an overview of the abstract model</p>
      <p>
        <specref ref="Sec3"/> presents a model for the services provided by the XML
protocol layer to XML protocol applications.</p>
      <p>
        <specref ref="Sec4"/> presents a model for the extensible processing of XML
protocol messages.&nbsp;</p>
      <p>
        <specref ref="Sec5"/> presents a model for the binding of XML protocol to
underlying protocol layers.</p>
      <div2 id="Sec1.1">
        <head>Definition of Terms</head>
        <p>This document makes use of terms defined in the <bibref ref="XMLPReqs"/>. Additional terms introduced in
this document are defined locally in this section, however, in the
long term we anticipate that they will be incorporated into a
single glossary for all documents produced by the WG.</p>
        <glist>
          <gitem>
            <label id="XMLPApp">XMLP Application</label>
            <def>
              <p>A client or user of the services
provided by the <loc href="#XMLPLayer">XML Protocol Layer</loc>. An XML
Protocol Application may act in the initiating or responding role
with respect to two-way request response operations and in the
sending or receiving roles with respect to one-way operations. XML
Protocol Applications may also act in an intermediary role with
respect to both two-way and one-way operations.</p>
              <p>
                <loc href="http://www.w3.org/TR/2001/WD-xmlp-reqs-20010319/#g410">XML
Protocol Handlers</loc> are encapsulated within XML Protocol
Applications.</p>
            </def>
          </gitem>
          <gitem>
            <label id="XMLPLayer">XMLP Layer</label>
            <def>
              <p>The XML Protocol Layer is an
abstraction that provides services or operations that transfers
packages of <loc href="http://www.w3.org/TR/2001/WD-xmlp-reqs-20010319/#g400">XML
Protocol Blocks</loc> between peer <loc href="#XMLPApp">XML Protocol
Applications</loc> via zero or more <loc href="http://www.w3.org/TR/2001/WD-xmlp-reqs-20010319/#g140">XML
Protocol Intermediaries</loc>.</p>
            </def>
          </gitem>
          <gitem>
            <label id="XMLPOperation">XMLP Operation</label>
            <def>
              <p>A primitive capability or service
offered by the <loc href="#XMLPLayer">XML Protocol Layer.</loc> The XML
Protocol Layer supports 3 operations described in detail in <specref ref="Sec3"/>. XMLP Operations are modelled as
sequences of events crossing the layer boundary between <loc href="http://www.w3.org/TR/2001/WD-xmlp-reqs-20010319/#g300">XML
Protocol Processors</loc> and <loc href="#XMLPApp">XML Protocol
Applications</loc>.</p>
            </def>
          </gitem>
        </glist>
      </div2>
    </div1>
    <div1 id="Sec2">
      <head>XML Protocol Abstract Model Overview</head>
      <p>
        <loc href="#Fig2.1">Figure 2.1</loc> below presents a simple case of
the XML Protocol abstract model.&nbsp; Hosts I and V each contain
XML protocol application components, which <emph>use</emph> the services
of the XML protocol layer, and&nbsp; XML protocol layer components
which <emph>provide</emph> the services of the XML protocol layer. The
services of the XML protocol layer are abstracted at the upper
layer boundary as a single operation, XMLP_UNITDATA&nbsp; which is
described in detail in <specref ref="Sec3"/>.</p>
      <graphic id="Fig2.1" source="Figure2-1.gif" alt="Figure 2.1 Model of Simple Case without Intermediaries."/>
      <p role="caption">Figure 2.1 Model of Simple Case without Intermediaries.</p>
      <p>
        <loc href="#Fig2.2">Figure 2.2</loc> below shows 5 hosts in a more
complex case of the XML Protocol abstract model.&nbsp; Hosts I, III
and V each contain XML protocol application components.&nbsp; Hosts
II and IV are intermediaries that operate within underlying
protocol layers such as HTTP proxies and SMTP message routers.</p>
      <graphic id="Fig2.2" source="Figure2-2.gif" alt="Figure 2.2 XML Protocol Model Overview"/>
      <p role="caption">Figure 2.2 XML Protocol Model Overview</p>
      <p>
        <loc href="#Fig2.2">Figure 2.2</loc> can be used to
discuss a number of message exchange scenarios. For example, the
XML protocol Processor at Host III is bound to two, possibly
different, underlying protocols. It could serve merely as a
'helper' to transition an XML protocol message from one underlying
protocol to another in circumstances where the initiating processor
is bound to a different underlying protocol infrastructure than the
receiving or responding node, say Host V in <loc href="#Fig2.2">
figure 2.2</loc>. A similar scenario arises if Host III is part of an
XML Protocol Firewall that controls the ingress and egress of
messages from a given organisation. In both these circumstances the
XML Protocol&nbsp;Handler(s) within the XML protocol application at
Host III need not be present.</p>
      <p>If we turn our attention to the operation of the
XML protocol applications above the XML protocol layer boundary, we
have a scenario in which the application at Host I has some XML
protocol blocks to deliver to Host V. In addition the application
at Host I needs to trigger Intermediary functionality at Host III
by the inclusion of several XML Protocol Blocks. "XML Protocol
Block 1" is intended for "XML protocol handler (e) " within the
application on Host V. Block 2 is intended for handler (h)
and&nbsp; handler (c)&nbsp; which replaces Block 2 with Block 3.
Also, the XML protocol application at Host III inserts Block 4 into
the message forwarded from Host III to Host V.&nbsp; Blocks 3 and 4
are intended for&nbsp; handlers (f) and (g).</p>
    </div1>
    <div1 id="Sec3">
      <head>XML Protocol Layer Service Definition</head>
      <p>This section focuses on the definition of an
abstract interface between the XML protocol applications and the
XML protocol layer. It needs to be remembered that the layer
interface described in this section is abstract - its purpose is to
enable description, not to constrain implementation.</p>
      <p>The services provided by the XML protocol layer are
modeled a single operation. XMLP_UNITDATA provides services to
sending, intermediary and receiving XML protocol applications.</p>
      <div2 id="Sec3.1">
        <head>XMLP_UnitData Operation</head>
        <p>XMLP_UnitData is a best effort one-way message transfer
operation with message correlation.&nbsp;Multiple message transfer
operations can be correlated in various ways to form message
exchange patterns like request/response, and long-lived
dialogs.</p>
        <p>The XMLP_UnitData operation is modeled by four primitives
(events). Each primitive models a transmission, reception or status
event at interface between an&nbsp; XML protocol application and an
XML protocol processor:</p>
        <p role="code">
          <code>XMLP_UnitData.send( To, [ImmediateDestination], Message, [Correlation], [BindingContext]);</code>
        </p>
        <p role="code">
          <code>XMLP_UnitData.receive( [To], [From], Message, [Correlation], [BindingContext]);</code>
        </p>
        <p role="code">
          <code>XMLP_UnitData.status( [From], Status, [BindingContext]);</code>
        </p>
        <p role="code">
          <code>XMLP_UnitData.forward( [ImmediateDestination], Message, [BindingContext]);</code>
        </p>
        <p role="code"/>
        <p role="code">
          <code>All parameters are detailed in </code>
          <specref ref="Sec3.2"/>.</p>
        <p>Conceptually the XMLP_UnitData operation encapsulates the
transmission of an XML protocol message from a sending XML protocol
application to a receiving XML protocol application. The principal
conceptual difference between sending and forwarding an&nbsp; XML
protocol message is that, from a message correlation point of view,
sending generates a new message whereas forwarding passes on an
existing message. Conceptually the forwarded message is the same
message as previously received although the action of intermediary
processing may have changed the value of the message.</p>
        <p>
          <loc href="#Fig3.1">Figure 3.1</loc> below illustrates the normal
use of these primitive at the sending and receiving XML protocol
applications.</p>
        <graphic id="Fig3.1" source="Figure3-1.gif" alt="Figure 3.1 XMLP_UNITDATA Operation"/>
        <p role="caption">Figure 3.1 XMLP_UNITDATA Operation</p>
        <p>The operation is best effort which means that it can fail
silently with the loss of the message in transit. A lost&nbsp;
message may have been partially processed at an intermediary XML
protocol application. The success or failure of the operation is
reported via the XMLP_UnitData.status primitive. In some
circumstances it may only be possible to report that a message has
been sent. In other circumstances it may be possible to report that
a message has or has not been delivered to its ultimate
recipient.</p>
        <p>
          <termdef id="XMLP_UnitData.send" term="XMLP_UnitData.send">
            <term>XMLP_UnitData.send</term> is invoked by the sending XML protocol
application and directed at the local sending XML protocol
processor to start a one-way transfer operation.</termdef>
        </p>
        <p>Upon receipt of this primitive by the sending XML protocol
processor an XML protocol message is transferred from the sending
XML protocol processor toward the receiving XML protocol processor
(possibly via intermediary XML protocol processors).</p>
        <p> This primitive differs from the .<loc href="#XMLP_UnitData.forward">forward</loc> 
primitive in that it is used by the initial sender of an XML protocol message to send a new
message.</p>
        <p>
          <termdef id="XMLP_UnitData.receive" term="XMLP_UnitData.receive">
            <term>XMLP_UnitData.receive</term> is invoked by the receiving XML
protocol processor and directed at&nbsp; a local receiving&nbsp;
XML protocol application to deliver a received XML protocol
message.&nbsp;</termdef>
        </p>
        <p> This primitive is invoked as a result of the arrival of an XML
protocol message from the sending XML protocol processor (via the
underlying protocol layers).</p>
        <p>
          <termdef id="XMLP_UnitData.status" term="XMLP_UnitData.status">
            <term>XMLP_UnitData.status</term> is used to report on the delivery status
of the operation to the sending XML protocol application.</termdef> This
primitive may be used to report to the sending XML protocol
application on the success or failure to send and deliver a message
to the receiving XML protocol application. In general, it is not
possible to assert that a message has been delivered to the
receiving XML protocol application without engaging in further
interactions. With care it is possible to assert definite failure
to deliver provided that circumstances are such that there is no
possibility of subsequent delivery. From the point-of-view of the
initiating XML application the operation has completed once this
primitive has been invoked.</p>
        <p>
          <termdef id="XMLP_UnitData.forward" term="XMLP_UnitData.forward">
            <term>XMLP_UnitData.forward</term> is invoked by an intermediary XML
protocol application once it has completed intermediary processing
of a message in transit and directed at the local intermediary XML
protocol processor.</termdef>
        </p>
        <p> In the event of success the message is forwarded to its next
destination, as designated by the ImmediateDestination parameter if
given. Alternatively an implementation or configuration dependent
method may be used to select the next recipient of the message
along a path.</p>
        <p> In the event of failure, the message in transit is discarded. A
correlated fault message may be generated by the intermediary XML
protocol application and sent toward the originator of the failed
message.</p>
        <p>This primitive differs from the <loc href="#XMLP_UnitData.send">
.send</loc> primitive in that it is used by an intermediary XML
protocol application to forward an existing XML protocol message
received by the intermediary XML protocol application.</p>
        <p>An XML protocol application may engage in multiple concurrent
operations with the same or different intermediary and/or receiving
XML protocol applications. These concurrent operations are
independent and the order in which they are processed by the
receiving and intermediary applications may be different from the
order in which they are invoked or complete at the sending XML
protocol application.&nbsp;</p>
        <div3 id="Sec3.1.1">
          <head>Correlation at Sending and Receiving XML Protocol Applications</head>
          <p>The <loc href="#Correlation">Correlation</loc> parameter provides a
general mechanism by which richer message exchange patterns such as
request-response and request/multi-response can be derived on top
of the one-way message exchange pattern of the XMLP_UnitData
operation.&nbsp; The mechanism by which correlation is determined
is <emph>not</emph> specified in this abstract model.</p>
          <p>Message correlation may be determined through:</p>
          <ulist>
            <item>
              <p>the exploitation of features in the underlying protocol eg. the
request/response nature of HTTP;</p>
            </item>
            <item>
              <p>mechanism introduced either by the XMLP processor to operate
across multiple possible underlying protocols.</p>
            </item>
            <item>
              <p>mechanism introduced by a binding to a particular underlying
protocol within the domain of the underlying protocols own header
extension mechanism.</p>
            </item>
          </ulist>
          <p>When included in an <loc href="#XMLP_UnitData.send">
XMLP_UnitData.send</loc> primitive <loc href="#Correlation.MessageRef">
Correlation.MessageRe</loc>f indicates that the XML protocol message
being sent is a direct consequence of the processing of an XML
protocol message previously received by the sending XML protocol
application and referenced locally by <loc href="#Correlation.MessageRef">Correlation.MessageRef</loc>.</p>
          <p>Likewise, when included in an <loc href="#XMLP_UnitData.receive">
XMLP_UnitData.receive</loc> primitive <loc href="#Correlation.MessageRef">Correlation.MessageRef</loc> indicates
that the message being received is a direct consequence of the
processing of a XML protocol message previously sent by the
receiving XML protocol application and referenced locally by <loc href="#Correlation.MessageRef">Correlation.MessageRef</loc>.</p>
          <p>Failures that arise during message processing at the recipient
or at intermediary XML protocol applications may result in the
generation of fault messages directed toward the originator of the
message whose processing gave rise to the fault. Such fault
messages are a direct consequence of the faulted message and this
should be indicated through the use of the <loc href="#Correlation">
Correlation</loc> parameter.</p>
        </div3>
        <div3 id="Sec3.1.2">
          <head>XMLP_UnitData Operation through Intermediaries</head>
          <p>Conceptually an XML protocol intermediary does not generate a
new XML protocol message, it operates on an XML protocol message in
transit. Thus the received message and the forwarded message are
regarded as the same message although the intermediary may change
the value of the message.&nbsp;</p>
          <p>
            <loc href="#Fig3.2">Figure 3.2</loc> shows the normal behaviour of
an XML_UnitData operation through an intermediary in the absence of
fatal failures. The three vertical lines represent the local XML
protocol layer boundaries and the small arrows above denote the
up/down orientation of the boundary.&nbsp; <loc href="#Fig3.3">Figure
3.3</loc> below shows an alternate representation of the same
scenario.</p>
          <p>The scenario depicted in figures <loc href="#Fig3.2">3.2</loc>and <loc href="#Fig3.3">3.3</loc>. show just a single intermediary interposed
in the operation however the principle extends to an arbitrary
number of intermediaries.</p>
          <graphic id="Fig3.2" source="Figure3-2.gif" alt="Figure 3.2 Normal XMLP_UnitData operation through an Intermediary"/>
          <p role="caption">Figure 3.2 Normal XMLP_UnitData operation through an Intermediary</p>
          <graphic id="Fig3.3" source="Figure3-3.gif" alt="Figure 3.3 Normal XMLP_UnitData operation through and Intermediary (alternate treatment)"/>
          <p role="caption">Figure 3.3 Normal XMLP_UnitData operation through and Intermediary (alternate treatment)</p>
          <p>It is worth noting that the <loc href="#XMLP_UnitData.status">
XMLP_UnitData.status</loc> is generated from within the XML protocol
layer. It may indicate anything from the mere fact that the message
has been sent or forwarded by the sending node; that its has been
received and/or sent from the intermediary node; or that it has
indeed been delivered to the ultimate recipient node. What it means
in a given circumstance will depend upon the capabilities of the
underlying communications protocols used to construct the message
path. The strongest thing that it can indicate is the failure to
deliver an XML protocol message to its ultimate recipient.</p>
        </div3>
        <div3 id="Sec3.1.3">
          <head>Message Correlation at Intermediary XML Protocol Applications</head>
          <p>The <loc href="#Correlation.MessageRef">Correlation.MessageRef</loc>
sub-field of&nbsp; the optional <loc href="#Correlation">
Correlation</loc> parameter on a <loc href="#XMLP_UnitData.receive">
XMLP_UnitData.receive</loc> primitive carries a local abstract
reference to an XML protocol message that was previously forwarded
by this intermediary XML protocol application. The current message
is a direct consequence of the processing of that earlier forwarded
message.</p>
          <p>Typically this will arise when an application level response
travels along a path that passes through one or more of the same
intermediary XML protocol applications that the corresponding
request passed through earlier.</p>
        </div3>
      </div2>
      <div2 id="Sec3.2">
        <head>Operation Parameters</head>
        <p>This section describes the operation parameters used in the
operation primitives described above.</p>
        <glist>
          <gitem>
            <label id="To">To</label>
            <def>
              <p>An abstract reference that denotes the XML protocol application
that a message was originally sent to by the initiating or sending
XML protocol application.</p>
            </def>
          </gitem>
          <gitem>
            <label id="From">From</label>
            <def>
              <p>An abstract reference denotes the sending XML protocol application in 
<loc href="#XMLP_UnitData.receive">.receive</loc> primitives.</p>
              <p>	In&nbsp; <emph>.receive</emph> primitives this parameter makes the
identity of the sending/initiating XML protocol application
available to the receiving/responding XML protocol
application.</p>
              <ednote>
                <edtext>[Intermediaries may obscure this or we may require that they don't... discuss!]</edtext>
              </ednote>
              <p>In the <emph>XMLP_UnitData.status</emph> primitive, this parameter conveys the identity of the XML protocol application to which an XML protocol message was sent after any redirections imposed by underlying protocols. NB. Further redirections may occur that cannot be reported.</p>
              <ednote>
                <edtext>[Again possibly obscured by intermediaries...]</edtext>
              </ednote>
            </def>
          </gitem>
          <gitem>
            <label id="ImmediateDestination">ImmediateDestination</label>
            <def>
              <p>An identifier that denotes the
immediate destination of an XML protocol message. If this parameter
is unspecified, the default value is implementation and
configuration dependent.</p>
              <p>This parameter enables sending and intermediary XML
protocol applications to address the message to the next
intermediary on route.</p>
            </def>
          </gitem>
          <gitem>
            <label id="Message">Message</label>
            <def>
              <p>An abstraction of an XML protocol
message exchanged between sending and receiving XML protocol
applications. An XML protocol message has the following
sub-fields:&nbsp; Message.Faults; Message.Blocks; and
Message.Attachments. </p>
            </def>
          </gitem>
          <gitem>
            <label id="Message.Faults">Message.Faults</label>
            <def>
              <p>An abstraction of a collection of XML
protocol faults carried in an XML protocol message that is
correlated with the XML protocol message whose processing gave rise
to one or more faults. Such a message may arise at an intermediary
or at the ultimate recipient.</p>
            </def>
          </gitem>
          <gitem>
            <label id="Message.Blocks">Message.Blocks</label>
            <def>
              <p>An abstraction of the XML
protocol&nbsp; blocks within an XML protocol message which are
intended to be processed by intermediaries or the ultimate
recipient.</p>
            </def>
          </gitem>
          <gitem>
            <label id="Message.Attachments">Message.Attachments</label>
            <def>
              <p>An abstraction of the a collection of
arbitrary attachments being transferred as part of an XML protocol
message. These attachments are opaque bytes as far as XML protocol
processing elements are concerned.</p>
              <p>From the point-of-view of abstract service definition the actual
mechanism used to transfer attachments is immaterial, however
particular bindings may employ more efficient mechanisms than
others.</p>
              <ednote>
                <edtext>[NB. This places an obligation on XML protocol
binding specifications to specify how attachments are to be
carried.]</edtext>
              </ednote>
            </def>
          </gitem>
          <gitem>
            <label id="Correlation">Correlation</label>
            <def>
              <p>An optional parameter used to express
local relationships between XML protocol messages.</p>
              <p>At present only a single subfield, Correlation.MessageRef is
defined, however it is conceivable that other subfields may be
defined in future, eg. Correlation.MsgSequence to distinguish
between and potentially order n multiple messages that arise from
the same source as a direct consequence of&nbsp; the current
message.</p>
            </def>
          </gitem>
          <gitem>
            <label id="Correlation.MessageRef">Correlation.MessageRef
</label>
            <def>
              <p>An abstraction of a local reference to
the local abstraction of an XML protocol message the processing of
which the current XML protocol message is a direct consequence. </p>
              <p>In <loc href="#XMLP_UnitData.send">XMLP_UnitData.send</loc>
primitives, the value of this parameter references an XML protocol
message previously received by the sending XML protocol
application.</p>
              <p>In <loc href="#XMLP_UnitData.receive">XMLP_UnitData.receive</loc>
primitives, the value of this parameter references an XML protocol
message previously sent or forwarded by the receiving
application.</p>
            </def>
          </gitem>
          <gitem>
            <label id="BindingContext">BindingContext
</label>
            <def>
              <p>This parameter references an abstract structure that carries
information pertinent to the underlying protocol binding(s). For
example it may carry certificates, ids and passwords to be used by
the sending/initiating XML protocol application to authenticate
itself and/or to establish a secure channel. At the responding XML
protocol application it may carry the authenticated id of the
principal on whose behalf the operation is being conducted.</p>
              <p>If the information present in the BindingContext is inadequate
for the execution of a given service primitive the invocation of
that primitive will fail with a result that indicates why progress
was not possible.</p>
              <p>BindingContext is optional and if not supplied the local default
binding will be used. In the case of multiple bindings being
available, inbound BindingContext indicates how an inbound message
was received and outbound BindingContext constrains the choice of
binding used for a given operation.</p>
              <p>BindingContext is discussed further in <specref ref="Sec5.2"/>.</p>
              <ednote>
                <edtext>[NB This concept places another obligation on
XML protocol binding specifications in that they must enumerate
what binding specific information they require in an outbound
BindingContext and what binding specific information they provide
in inbound BindingContexts.]</edtext>
              </ednote>
            </def>
          </gitem>
          <gitem>
            <label id="Status.Parameter">Status</label>
            <def>
              <p>In <loc href="#XMLP_UnitData.status">
.status</loc> primitives this parameter indicates the disposition of
the request operation which may be: <emph>MessageSent,
MessageDelivered, Unknown</emph> and <emph>
FailedAtIntermediary</emph>. The interpretation of a status value may
be augmented by information carried in the <emph>BindingContext</emph>. </p>
            </def>
          </gitem>
        </glist>
      </div2>
    </div1>
    <div1 id="Sec4">
      <head>XML Protocol Applications and Modules</head>
      <ednote>
        <edtext>There is a significant debate over terms and
concepts around Modules, Handlers, Targeting and Message routing.
At the time of this draft the discussion is still open and this
section will be updated to reflect any consensus arising from that
discussion.</edtext>
      </ednote>
      <p>An XML protocol application is the logic at an XML processor
that makes use of the core messaging services of the XML protocol.
XML protocol applications may initiate, respond or act as
intermediaries in XML protocol operations. Logically, an XML
protocol application contains a number of XML protocol handlers
that are responsible for applying the processing rules associated
with XML protocol modules. The unit of exchange between XML
protocol handlers are XML protocol blocks.</p>
      <p>XML protocol blocks are aggregated into XML protocol messages
and may be targeted at particular XML processors (see <specref ref="Sec4.2"/>). XML protocol blocks are delivered
together with the rest of the XML protocol message which
encapsulates them&nbsp; (and its attachments if any) to the
targeted XML processor. The XML protocol application is then
responsible for identifying and dispatching the appropriate XML
protocol handlers.&nbsp; Generally, the dispatch to a handler will
be determined by the presence of an associated block or blocks, but
not necessarily.&nbsp; Handler d in <loc href="#Fig2.2">Figure
2.2</loc> illustrates such a case.</p>
      <graphic id="Fig4.1" source="Figure4-1.gif" alt="Figure 4.1 XML Protocol Application"/>
      <p role="caption">Figure 4.1 XML Protocol Application</p>
      <p>Each handler may succeed or fail fatally. It is the
responsibility of the XML protocol application to determine the
overall result of the actions of any XML protocol handlers it
invokes and to augment any Faults structure carried in the ongoing
message. In cases where there are multiple influences on the
ImmediateDestination, it is also the responsibility of the XML
protocol application to resolve any conflicts.</p>
      <div2 id="Sec4.1">
        <head>XML Protocol Message Routing and Targeting (aka Naming and Addressing :-))</head>
        <ednote>
          <edtext>Needs to use some terms here that arise from the
intermediaries thread Martin started</edtext>
        </ednote>
        <p>An XML protocol message path can be viewed as the sequence of
handlers that an XML protocol message passes through between
initiating/sending XML protocol application and receiving
responding XML protocol application. With reference to <loc href="#Fig2.2">figure 2.2,</loc> the diagram in&nbsp; <loc href="#Fig4.2">figure 4.2</loc> depicts the message path of the
corresponding XML protocol message under the XML_UnitData
operation.</p>
        <graphic id="Fig4.2" source="Figure4-2.gif" alt="Figure 4.2 XML Protocol Message Path"/>
        <p role="caption">Figure 4.2 XML Protocol Message Path</p>
        <p>The path in <loc href="#Fig4.2">figure 4.2</loc> shows sequential
handler processing at the sending node, Node I, while the handler
processing at Nodes III and V is concurrent (at least logically).
Combinations of handlers that can be invoked concurrently from
within an XML protocol application are said to be mutually
orthogonal.</p>
      </div2>
      <div2 id="Sec4.2">
        <head>XML Protocol Modules and Message Processing</head>
        <p>XML protocol modules are the unit of extension within the XML
protocol.&nbsp; An XML protocol module encapsulates the syntactic
constructs of an extension, known as XML protocol blocks, and the
behavioural rules associated with the generation and processing of
an XML protocol block.&nbsp; The abstraction for the processing
and/or logic defined by an XML protocol module is called an XML
protocol handler.</p>
        <p>The SOAP 1.1 specification (section 2) states:&nbsp; "Processing
a message or a part of a message requires that the SOAP processor
understands, among other things, the exchange pattern being used
(one way, request-response, multicast, etc.), the role of the
recipient in that pattern, the employment (if any) of RPC
mechanisms such as the one documented in section 7, the
representation or encoding of data, as well as other semantics
necessary for correct processing."&nbsp; An XML protocol module is
the locus for understanding blocks associated with that
module.&nbsp; A given message may employ the services of many
modules, both generic (e.g., security, caching, compression,
transactions, etc.) and application-specific.</p>
        <p>The following list provides an initial set of concepts which
capture and slightly refine the SOAP message processing
model.&nbsp; A comparison of each concept with SOAP is also
provided for reference.</p>
        <olist>
          <item>
            <p>An XML Protocol message consists of
a set of zero or more blocks.</p>
            <ednote>
              <edtext>SOAP: Similar. Blocks correspond to header or body entries. SOAP groups header entries into an optional Header element and body entries into an obligatory Body element.</edtext>
            </ednote>
          </item>
          <item>
            <p>Each block has the following
sub-fields: <emph>Block.Id</emph>, <emph>Block.Actor</emph>, and <emph>
Block.MustUnderstand</emph>. Block.Id is an optional identifier
that identifies the block for the purposes of reference by other
blocks. Block.Actor identifies the XMLP processor that is
intended to process the block. Block.MustUnderstand specifies
whether the intended semantics of the block must be carried
out.</p>
            <ednote>
              <edtext>SOAP: SOAP does
not specify whether an actor URI is to be interpreted extensionally
(naming a particular node) or intensionally (describing a node or
group of nodes that satisfy some property). Special reserved
URI's describe nodes which are encountered next or last.&nbsp;
Beyond the reserved URI's, there is no particular semantics
associated with an actor URI.&nbsp; Semantically, the URI's can
signify a processor that supports a given application, module or
capability, or it can describe a destination, node or
location.&nbsp; This flexibility is preserved in XMLP.</edtext>
            </ednote>
          </item>
          <item>
            <p>The fully qualified name of the top
element of a block identifies the block.</p>
            <ednote>
              <edtext>SOAP: SOAP identifies
blocks by the fully qualified element name.&nbsp; The block can
(but need not) be mapped to some appropriate handler.&nbsp; Other
schemes have also been suggested.&nbsp; For example, an attribute
could name a module which would take responsibility for selecting
the handler to invoke.</edtext>
            </ednote>
          </item>
          <item>
            <p>The following values for Block.Actor
have special significance: <code>Next</code>, <code>Final</code>, and <code>
None</code>.; Next matches the next processor. Final
matches the final processor. None is for untargeted blocks
which may be referenced by other blocks.</p>
            <!--<br/>-->
            <p>An empty actor defaults to Final.&nbsp;&nbsp; An untargeted block
marked with <code>None</code> is useful for
declarative information that is referenced by another block or
blocks. It is guaranteed not to be removed and can even be
referenced by blocks which are targeted at different
processors.</p>
            <ednote>
              <edtext>SOAP: An
empty SOAP actor in a header "indicates that the recipient is the
ultimate destination of the SOAP message," and a "body entry is
semantically equivalent to a header entry intended for the default
actor." This is what <code>Final </code> designates. The intended (final) processor must
recognize itself as such. <code>Next </code> has the same interpretation as
the SOAP URI, <code>http://schemas.xmlsoap.org/soap/actor/next</code> SOAP
forces the actor for body entries to be the final processor.
SOAP permits the inclusion of blocks for which there do not turn
out to be any actors that match along the message path; and even if
an actor URI matches a given processor, the processor may determine
that no behaviour is associated with the block. The value
None, on the other hand, is a stronger statement on the part of the
sender that signifies that no processor will qualify as a matching
actor.</edtext>
            </ednote>
          </item>
          <item>
            <p>When a block is selected for
processing at an intermediary, the block is removed from the
envelope.&nbsp; A handler may add zero or more blocks. Blocks
which are merely referenced are not removed.</p>
            <ednote>
              <edtext>SOAP: SOAP
doesn't allow body entries to be processed at intermediaries and
hence they are never removed at an intermediary.</edtext>
            </ednote>
          </item>
          <item>
            <p>The XML Protocol blocks are ordered
within the envelope.  This order is followed by each processor
as it selects and processes blocks, yielding a limited facility for
specifying sequential constraints. Two alternatives are
available for more complex orderings and constraints.&nbsp;&nbsp;
Hierarchical constraints can be achieved by syntactically scoping
blocks inside one another. Finally, blocks can be
incorporated by reference using the "<code>id</code>" and "<code>href</code>" attribute mechanism.; Using these techniques, more elaborate "manifest" blocks which direct the
processing of other blocks can be designed. From the processor's point of view, only the outermost element of the block is seen.</p>
            <ednote>
              <edtext>SOAP: Header
entries can be referenced via links from other headers. If
they have no actor (targeted at the final destination), they will
not be removed by any intermediaries. Using that mechanism,
headers can be effectively shared among modules, even at different
nodes. The actor-less headers are interpreted as relevant to
the final processor, even though they may not be. The body
can only be targeted at the final procesor.</edtext>
            </ednote>
          </item>
          <item>
            <p>The processing of a block by a
handler may result in a fault or a successful evaluation.&nbsp; A
fault terminates processing of the block and message and causes a
return message containing the fault to be generated if a return
path is available.&nbsp; Rather than fatally faulting, it is also
possible for a handler to insert a block targeted to another
destination e.g., the final destination).&nbsp; This block can
contain status information, non-fatal errors, or other results that
can be further processed, incorporated into a return value,
etc.</p>
            <ednote>
              <edtext>SOAP:&nbsp; Similar.
</edtext>
            </ednote>
          </item>
        </olist>
      </div2>
    </div1>
    <div1 id="Sec5">
      <head> Underlying Protocol Bindings</head>
      <p>It is the intent that the XML protocol be capable of being bound
to a variety of underlying communication protocols. The XML
protocol working group will define a binding to HTTP. It is
anticipated that others will create bindings to SMTP, TCP, SSL,
BEEP and others.</p>
      <div2 id="Sec5.1">
        <head>Binding Service Model</head>
        <ednote>
          <edtext>This entire subsection is new and has not be
subject of significant debate. It should be regarded as a work in
progress</edtext>
        </ednote>
        <div3 id="Sec5.1.1">
          <head>Introduction</head>
          <p>This section presents an abstract service model that XML
protocol bindings will supply to the upper XML protocol layer. The
intent is to describe the interactions between the XML protocol
processor and underlying protocol bindings and to demonstrate how
these interactions are choreographed to enable multiple message
exchange patterns. This model is intended to provide a framework in
which the development of concrete binding specifications can be
discussed. This is not intended as an API specification.</p>
          <p>The diagram below shows a logical layered view of the binding
model with the XML protocol processor being bound to four
underlying transports.</p>
          <graphic id="Fig5.1" source="Figure5-1.gif" alt="Figure 5.1 Binding Model"/>
          <p role="caption">Figure 5.1 Binding Model</p>
          <p>This document concerns itself with the interactions at the solid
black line between the XML protocol processor and a given
binding.</p>
          <p>Note that, as shown, some bindings may be nested. e.g. a MIME
binding might be nested within a HTTP binding to allow additional
binary data to be sent along with (but outside) the XMLP
envelope.</p>
        </div3>
        <div3 id="Sec5.1.2">
          <head> Service Primitives</head>
          <div4 id="Sec5.1.2.1">
            <head>Message Exchange</head>
            <p>There are two primitives associated with message exchange: <code role="primitive">MSG.req</code> and <code role="primitive">
MSG.ind</code>. A <code role="primitive">MSG.req</code> primitive
is sent from the XML protocol processor to the binding in order to
cause the binding to send a message. A <code role="primitive">
MSG.ind</code> primitive is sent from the binding to the XML
protocol processor to indicate arrival of a message.</p>
          </div4>
          <div4 id="Sec5.1.2.2">
            <head>Message Correlation</head>
            <p>In order to support message exchange patterns that are more
complex than the simplest one-way exchange, some form of message
correlation is required. For example, in a request-response message
exchange there must be some means of correlating the request with
the response. In this document a single instance of a message
exchange pattern is referred to as an XML protocol processor
operation or just operation for short.</p>
            <p>There are four pairs of primitives associated with operation
delineation and hence message correlation:</p>
            <olist>
              <item>
                <p>
                  <code role="primitive">OP.start-req</code> and <code role="primitive">OP.start-conf</code>
                  A <code role="primitive">OP.start-req</code> primitive is sent
from the XML protocol processor to the binding to request
initialisation of a new correlated message exchange. The binding
responds with a <code role="primitive">OP.start-conf</code>
primitive.</p>
              </item>
              <item>
                <p>
                  <code role="primitive">OP.start-ind</code> and <code role="primitive">OP.start-resp</code>
                  A <code role="primitive">OP.start-ind</code> primitive is sent
from the binding to the XMPL layer to indicate that a new
correlated message exchange is being requested. The XML protocol
processor responds with a <code role="primitive">
OP.start-resp</code> primitive.</p>
              </item>
              <item>
                <p>
                  <code role="primitive">OP.end-req</code> and <code role="primitive">OP.end-conf</code>
                  An <code role="primitive">OP.end-req</code> primitive is sent
from the XML protocol processor to the binding to terminate a
correlated message exchange. The binding responds with an <code role="primitive">OP.end-conf</code>primitive. Whilst the <code role="primitive">OP.end-conf</code> is outstanding, the XML
protocol processor must be prepared to continue to receive <code role="primitive">MSG.ind</code>s</p>
              </item>
              <item>
                <p>
                  <code role="primitive">OP.end-ind</code> and <code role="primitive">OP.end-resp</code>
                  An <code role="primitive">OP.end-ind</code> primitive is sent
from the binding to the XML protocol processor to indicate that a
correlated message exchange is to be terminated. No further <code role="primitive">MSG.ind</code> will be delivered as part of the
corresponding operation, however the XML protocol processor
receiving the <code role="primitive">OP.end-ind</code> primitive
may continue to issue <code role="primitive">MSG.req</code>
primitives to complete operation in progress. Once all <code role="primitive">MSG.req</code> primitives associate with the
operation have been issued the XML protocol processor concludes the
operation by with the invocation of an <code role="primitive">
OP.end-resp</code> primitive."</p>
              </item>
            </olist>
            <p>The actual correlation mechanism is underlying protocol and
implementation specific. e.g. A <code role="primitive">
OP.start-conf</code> may carry some unique identifier that must be
provided with any subsequent <code role="primitive">
MSG.req</code>(s) and is included with any subsequent <code role="primitive">MSG.ind</code>(s).</p>
            <p>There is no retained state within the binding between operations
although there may be during operations.</p>
          </div4>
          <div4 id="Sec5.1.2.3">
            <head>Errors</head>
            <p>The final primitive <code role="primitive">ERR.ind</code> is
sent from the binding to the XML protocol processor when an error
occurs, e.g. if a <code role="primitive">MSG.req</code> cannot be
honoured then an <code role="primitive">ERR.ind</code> is
generated. Errors are correlated to a particular message exchange
using the mechanism described above.</p>
          </div4>
        </div3>
        <div3 id="Sec5.1.3">
          <head>Message Exchange Patterns</head>
          <p>The following sections illustrate the choreography of XML
protocol binding primitives for a number of different message
exchange patterns. These are intended to be illustrative rather
than proscriptive. In particular, in many cases either sender or
receiver might initiate the OP.end-req.</p>
          <div4 id="Sec5.1.3.1">
            <head>One Way Message</head>
            <p role="particpant">Sender</p>
            <p>
              <code role="primitive">OP.start-req</code>, <code role="primitive">OP.start-conf</code>, <code role="primitive">
MSG.req</code>, <code role="primitive">OP.end-req</code>, <code role="primitive">OP.end-conf</code>.</p>
            <p role="participant">Receiver</p>
            <p>
              <code role="primitive">OP.start-ind</code>, <code role="primitive">OP.start-resp</code>, <code role="primitive">
MSG.ind</code>, <code role="primitive">OP.end-ind</code>, <code role="primitive">OP.end-resp</code>.</p>
            <p role="participant">Comments</p>
            <p>Note that depending on the underlying protocol the primitives at
sender and receiver may not operate in lock-step. In particular,
the <code role="primitive">OP.start-ind</code> may not be
delivered to the receiving XML protocol processor until the sending
XML protocol processor has issued the <code role="primitive">
MSG.req</code> or even the <code role="primitive">
OP.end-req</code>. An alternative way of saying this is that a
binding may choose to delay making an underlying protocol
connection until a message needs to be sent.</p>
          </div4>
          <div4 id="Sec5.1.3.2">
            <head>Request Response</head>
            <p role="participant">Sender</p>
            <p>
              <code role="primitive">OP.start-req</code>, <code role="primitive">OP.start-conf</code>, <code role="primitive">
MSG.req</code>, <code role="primitive">MSG.ind</code>, <code role="primitive">OP.end-req</code>, <code role="primitive">
OP.end-conf</code>.</p>
            <p role="participant">Receiver</p>
            <p>
              <code role="primitive">OP.start-ind</code>, <code role="primitive">OP.start-resp</code>, <code role="primitive">
MSG.ind</code>, <code role="primitive">MSG.req</code>, <code role="primitive">OP.end-ind</code>, <code role="primitive">
OP.end-resp</code>.</p>
          </div4>
          <div4 id="Sec5.1.3.3">
            <head>Request and <emph>n</emph> Responses</head>
            <p role="participant">Sender</p>
            <p>
              <code role="primitive">OP.start-req</code>, <code role="primitive">OP.start-conf</code>, <code role="primitive">
MSG.req</code>, <code role="primitive">MSG.ind</code>, <code role="primitive">MSG.ind</code>, ..., <code role="primitive">
OP.end-ind</code>, <code role="primitive">OP.end-resp</code>.</p>
            <p role="participant">Receiver</p>
            <p>
              <code role="primitive">OP.start-ind</code>, <code role="primitive">OP.start-resp</code>, <code role="primitive">
MSG.ind</code>, <code role="primitive">MSG.req</code>, <code role="primitive">MSG.req</code>, ..., <code role="primitive">
OP.end-req, OP.end-conf</code>.</p>
          </div4>
        </div3>
        <div3 id="sec5.1.4">
          <head>Sample Mappings</head>
          <div4 id="Sec5.1.4.1">
            <head>HTTP</head>
            <p>The following tables show how the binding primitives might map
onto the HTTP protocol actions on the initiator and responder for a
request-response message exchange, time increases moving down the
tables.</p>
            <table border="1">
              <caption>
                Initiator
              </caption>
              <thead>
                <tr>
                  <td>
                    Binding Primitive
                  </td>
                  <td>
                    Binding Action
                  </td>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>OP.start-req</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.start-conf</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>MSG.req</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>Send POST request</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>Receive POST results</td>
                </tr>
                <tr>
                  <td>MSG.ind</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.end-req</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.end-conf</td>
                  <td>&nbsp;</td>
                </tr>
              </tbody>
            </table>
            <table border="1">
              <caption>
                Responder
              </caption>
              <thead>
                <tr>
                  <td>
                    Binding Primitive
                  </td>
                  <td>
                    Binding Action
                  </td>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>&nbsp;</td>
                  <td>Receive POST request</td>
                </tr>
                <tr>
                  <td>OP.start-ind</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.start-resp</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>MSG.ind</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>MSG.req</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>Send POST results</td>
                </tr>
                <tr>
                  <td>OP.end-ind</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.end-resp</td>
                  <td>&nbsp;</td>
                </tr>
              </tbody>
            </table>
            <p>The above assumes use of HTTP persistent connections.</p>
          </div4>
          <div4 id="Sec5.1.4.2">
            <head>SMTP</head>
            <p>The following tables show how the binding primitives might map
onto the SMTP protocol actions on the initiator and receiver for a
simple one-way message exchange, time increases moving down the
tables.</p>
            <table border="1">
              <caption>
                Initiator
              </caption>
              <thead>
                <tr>
                  <td>
                    Binding Primitive
                  </td>
                  <td>
                    Binding Action
                  </td>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>OP.start-req</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>Open SMTP session</td>
                </tr>
                <tr>
                  <td>OP.start-conf</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>MSG.req</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>Send mail message</td>
                </tr>
                <tr>
                  <td>OP.end-req</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>Close SMTP session</td>
                </tr>
                <tr>
                  <td>OP.end-conf</td>
                  <td>&nbsp;</td>
                </tr>
              </tbody>
            </table>
            <table border="1">
              <caption>
               Responder
              </caption>
              <thead>
                <tr>
                  <td>
                    Binding Primitive
                  </td>
                  <td>
                    Binding Action
                  </td>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>&nbsp;</td>
                  <td>Begin SMTP transaction</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>Receive mail message</td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>End SMTP transaction</td>
                </tr>
                <tr>
                  <td>OP.start-ind</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.start-resp</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>MSG.ind</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.end-ind</td>
                  <td>&nbsp;</td>
                </tr>
                <tr>
                  <td>OP.end-resp</td>
                  <td>&nbsp;</td>
                </tr>
              </tbody>
            </table>
          </div4>
        </div3>
        <div3 id="Sec5.1.5">
          <head>Binding Considerations</head>
          <p>Underlying protocols may provide various levels of functionality
to the binding. It is the responsibility of the binding to
implement a mapping between XML protocol service primitives and
underlying protocol primitives. The mapping should make the best
use of the facilities of the underlying protocol and maximise
efficiency where possible, e.g. connection setup is generally an
expensive operation - bindings for connection oriented protocols
should attempt to minimise the number of connections made for a
given message exchange pattern. In particular, when defining a
mapping the following need to be specified:</p>
          <glist>
            <gitem>
              <label>Protocol</label>
              <def>
                <p>The binding should identify the exact protocol to which XML
protocol is being bound including a version. Examples might be
HTTP/1.1 or SMTP[RFC821]</p>
              </def>
            </gitem>
            <gitem>
              <label>Addressing</label>
              <def>
                <p>The binding needs to show how to specify an XML protocol
processor's address with an URL.</p>
              </def>
            </gitem>
            <gitem>
              <label>Message Passing</label>
              <def>
                <p>The binding needs to specify unambiguously how to use the
underlying protocol to pass a whole XML Protocol message to a node
specified by a given address. Depending on the underlying protocol
capabilities, the specification may need to detail the
following:</p>
                <olist>
                  <item>
                    <p>Use of underlying protocol primitives for sending and receiving
messages.</p>
                  </item>
                  <item>
                    <p>Use of underlying protocol headings.</p>
                  </item>
                  <item>
                    <p>Underlying protocol connection management including roles of
initiator and responder, how to handle abnormal terminations, can
responder terminate connection, etc.</p>
                  </item>
                </olist>
              </def>
            </gitem>
            <gitem>
              <label>Message Exchange Pattern(s)</label>
              <def>
                <p>The binding needs to specify how underlying protocol sessions
are used in common message exchange patterns including one-way and
request-response.</p>
                <ednote>
                  <edtext>[Question: what other
message exchange patterns should we specify here ?]</edtext>
                </ednote>
                <p>Here, protocol session means a unit of communication in the
underlying protocol, in HTTP this maps to a single
request/response, in SMTP a session only covers a single act of
sending a message or a single act of receiving a message. In BEEP
the session would possibly map to a channel that would be capable
of many different message exchange patterns.</p>
              </def>
            </gitem>
            <gitem>
              <label>Message Ordering Characteristics</label>
              <def>
                <p>The binding needs to specify what message ordering
characteristics the underlying protocol supports. e.g. If two
messages are sent in the same direction in the same session is
their order of arrival guaranteed to be the same as the order in
which they were sent.</p>
              </def>
            </gitem>
            <gitem>
              <label>Error Handling</label>
              <def>
                <p>The binding needs to specify how errors in the underlying
protocol will be handled. A non-exhaustive list of things to
consider here is: connection errors, addressing errors, message
transmission errors, abnormal termination.</p>
              </def>
            </gitem>
          </glist>
          <ednote>
            <edtext>[Question: what other types of error do we
need to consider ?]</edtext>
          </ednote>
        </div3>
      </div2>
      <div2 id="Sec5.2">
        <head>BindingContext</head>
        <p>Each of these underlying protocols supports different features
and capabilities and it is not plausible or desirable to provide a
detailed abstraction that captures the full range of diversity. The
core of XML protocol in respect of the exchange of XML protocol
messages takes a lowest common denominator approach by regarding
the underlying channel as potential lossy and capable of
mis-ordering and duplication. Underlying protocols may offer better
assurances of delivery probability, delivery ordering and at-most
once delivery behaviour.</p>
        <p>In the service abstraction provided above, an abstract parameter
known as BindingContext is introduced. The primary purpose of
BindingContext is to act as a collecting 'bucket' for parameters
that control the functionality of the particular set of underlying
protocols available at any given node.</p>
        <p>It is expected that the authors of XML Protocol binding
specifications will add structure beneath BindingContext to cover
the features and capabilities of the underlying protocol being
bound. This may also include a descriptor of the ordering, loss and
duplication properties of the underlying protocol, although this
should be treated with caution in multi-hop scenarios.</p>
        <p>Some BindingContext extensions may be of more general
applicability than just a single binding. For example, the
references to user ids, private keys and public certificates
necessary for SSL and HTTPS could be shared between both bindings
(were they to exist).</p>
        <p>One would therefore expect the structure under BindingContext to
grow along the lines of:</p>
        <p role="code">
          <code>BindingContext.Shared&nbsp;&nbsp;&nbsp; //A substructure for information shared by several bindings</code>
        </p>
        <p role="code">
          <code>BindingContext.HTTP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //A substructure for information related to HTTP</code>
        </p>
        <p role="code">
          <code>BindingContext.SMTP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//....</code>
        </p>
        <p role="code">
          <code>&nbsp;</code>
        </p>
        <p role="code">
          <code>....and so on.</code>
        </p>
        <p>The manipulation of fields within the BindingContext may be
driven from within, for example, an intermediary XML protocol
application on the basis of constructs carried as XML protocol
message blocks within the message being carried.</p>
        <ednote>
          <edtext>Hopefully this captures the general idea behind
BindingContext... the details will evolve over time... indeed they
will evolve as bindings get described.</edtext>
        </ednote>
      </div2>
      <div2 id="Sec5.3">
        <head>Attachment of Arbitrary Content</head>
        <ednote>
          <edtext>This topic is subject to active discussion and
the view presented here is *very* preliminary. There is likely be
considerable diversity of viewpoints that are not captured let
alone resolved here.</edtext>
        </ednote>
        <p>Another role of an XML protocol binding is to invoke the
services of underlying protocols and to introduce any mechanism
required to map between the semantics of the underlying protocol
and those of the XML protocol core message delivery
operations&nbsp; XMLP_UnitData. The attachment of arbitrary content
to an XML protocol message is one facet of this mapping.</p>
        <p>The core XML protocol messaging services intrinsically handle
arbitrary attachments through the use of the Attachments parameter.
The expectation is that the design of XML protocol WILL specify a
means for encoding arbitrary content and carrying it within an XML
protocol envelope. This mechanism will leverage any pre-existing
work within XML Schema, and will also provide mechanisms for
embedding complete, arbitrary, XML documents within the outer XML
protocol message envelope (itself an XML construct).</p>
        <p>Some underlying protocols will support more efficient ways of
carrying arbitrary content and or multiple XML documents. The
normative bindings to an underlying protocol MUST define the
mechanism used by that binding to carry attachments containing
arbitrary content. In the absence of any statement to the contrary
in the definition of a particular protocol binding, the default XML
based encoding for arbitrary content attachments will be taken as
having been specified. Any other scheme specified for a particular
binding must have functional capabilities at least as capable as
the default XML based encoding scheme, in particular it must be
possible to reference the individual attachments from within the
XML protocol message envelope.</p>
      </div2>
    </div1>
    <div1 id="Sec6">
      <head>References</head>
      <blist>
        <bibl id="XMLPReqs" href="http://www.w3.org/TR/2001/WD-xmlp-reqs-20010319/#N2082">"XMLProtocol (XMLP) Requirements" </bibl>
        <bibl id="SOAP11" href="http://www.w3.org/TR/SOAP/">SOAP 1.1 Specification</bibl>
        <bibl id="Issues" href="http://www.w3.org/2000/xp/Group/xmlp-issues.html">XML Protocol WG Issues List</bibl>
      </blist>
    </div1>
    <div1 id="Acknowledgements">
      <head>Acknowledgements</head>
      <p>This document is the work of the W3C XML Protocol Working Group.</p>
      <p>Members of the Working Group are (at the time of writing, and by
alphabetical order): Yasser al Safadi (Philips Research), Vidur
Apparao (Netscape), Don Box (DevelopMentor), David Burdett
(Commerce One), Charles Campbell (Informix Software), Alex Ceponkus
(Bowstreet), Michael Champion (Software AG), David Clay (Oracle),
Ugo Corda (Xerox), Paul Cotton (Microsoft Corporation), Ron Daniel
(Interwoven), Glen Daniels (Allaire), Doug Davis (IBM), Ray
Denenberg (Library of Congress), Paul Denning (MITRE Corporation),
Frank DeRose (TIBCO Software, Inc.), Brian Eisenberg (Data
Channel), David Ezell (Hewlett-Packard), James Falek (TIBCO
Software, Inc.), David Fallside (IBM), Chris Ferris (Sun
Microsystems), Daniela Florescu (Propel), Dan Frantz (BEA Systems),
Dietmar Gaertner (Software AG), Scott Golubock (Epicentric), Rich
Greenfield (Library of Congress), Martin Gudgin (Develop Mentor),
Hugo Haas (W3C), Marc Hadley (Sun Microsystems), Mark Hale
(Interwoven), Randy Hall (Intel), Gerd Hoelzing (SAP AG), Oisin
Hurley (IONA Technologies), Yin-Leng Husband (Compaq), John
Ibbotson (IBM), Ryuji Inoue (Matsushita Electric Industrial Co.,
Ltd.), Scott Isaacson (Novell, Inc.), Kazunori Iwasa (Fujitsu
Software Corporation), Murali Janakiraman (Rogue Wave), Mario
Jeckle (Daimler-Chrysler Research and Technology), Eric Jenkins
(Engenia Software), Mark Jones (AT&amp;T), Jay Kasi (Commerce One),
Jeffrey Kay (Engenia Software), Richard Koo (Vitria Technology
Inc.), Jacek Kopecky (IDOOX s.r.o.), Alan Kropp (Epicentric), Yves
Lafon (W3C), Tony Lee (Vitria Technology Inc.), Michah Lerner
(AT&amp;T), Richard Martin (Active Data Exchange), Noah Mendelsohn
(Lotus Development), Nilo Mitra (Ericsson Research Canada),
Jean-Jacques Moreau (Canon), Masahiko Narita (Fujitsu Software
Corporation), Mark Needleman (Data Research Associates), Eric
Newcomer (IONA Technologies), Henrik Frystyk Nielsen (Microsoft
Corporation), Mark Nottingham (Akamai Technologies), David Orchard
(JamCracker), Kevin Perkins (Compaq), Jags Ramnaryan (BEA Systems),
Andreas Riegg (Daimler-Chrysler Research and Technology),
Herv&eacute; Ruellan (Canon), Marwan Sabbouh (MITRE Corporation),
Shane Sesta (Active Data Exchange), Miroslav Simek (IDOOX s.r.o.),
Simeon Simeonov (Allaire), Nick Smilonich (Unisys), Soumitro Tagore
(Informix Software), James Tauber (Bowstreet), Lynne Thompson
(Unisys), Patrick Thompson (Rogue Wave), Randy Waldrop
(WebMethods), Ray Whitmer (Netscape), Volker Wiechers (SAP AG),
Stuart Williams (Hewlett-Packard), Amr Yassin (Philips Research)
and Dick Brooks (Group 8760).</p>
      <p role="prev"> Previous Members were: Eric Fedok (Active Data Exchange) Susan
Yee (Active Data Exchange) Alex Milowski (Lexica), Bill Anderson
(Xerox), Ed Mooney (Sun Microsystems), Mary Holstege (Calico
Commerce), Rekha Nagarajan (Calico Commerce), John Evdemon (XML
Solutions), Kevin Mitchell (XML Solutions), Yan Xu (DataChannel)
Mike Dierken (DataChannel) Julian Kumar (Epicentric) Miles Chaston
(Epicentric) Bjoern Heckel (Epicentric) Dean Moses (Epicentric)
Michael Freeman (Engenia Software) Jim Hughes (Fujitsu Software
Corporation) Francisco Cubera (IBM), Murray Maloney (Commerce One),
Krishna Sankar (Cisco), Steve Hole (MessagingDirect Ltd.) John-Paul
Sicotte (MessagingDirect Ltd.) Vilhelm Rosenqvist (NCR) Lew Shannon
(NCR) Henry Lowe (OMG) Jim Trezzo (Oracle) Peter Lecuyer (Progress
Software) Andrew Eisenberg (Progress Software) David Cleary
(Progress Software) George Scott (Tradia Inc.) Erin Hoffman (Tradia
Inc.) Conleth O'Connell (Vignette) Waqar Sadiq (Vitria Technology
Inc.) Tom Breuel (Xerox) David Webber (XMLGlobal Technologies)
Matthew MacKenzie (XMLGlobal Technologies) and Mark Baker (Sun
Microsystems).
      </p>
      <p>We also wish to thank all the people who have contributed to
discussions on <loc href="mailto:xml-dist-app@w3.org">
xml-dist-app@w3.org</loc>.</p>
      <!--    <hr/> -->
    </div1>
    <div1 id="ChangeLog">
      <head>Change Log</head>
      <ulist>
        <item>
          <p role="change">Changes from Draft of&nbsp; <loc href="http://www.w3.org/2000/xp/Group/1/02/16-abstract-model/XMLProtocolAMG.html">
16th February 2001</loc></p>
            <olist>
              <item>
                <p role="change">Added Mark Jones to list of contributors</p>
              </item>
              <item>
                <p role="change">Removed Section 7 (Security)</p>
              </item>
              <item>
                <p role="change">Renumbered Sections 5 and 6 as 4 and 5 respectively</p>
              </item>
              <item>
                <p role="change">
                  <specref ref="Sec1.1"/>: Removed definitions covered
by requirements document glossary and added reference to same.</p>
              </item>
              <item>
                <p role="change">Updated Fig 2.1 (later renumbered <loc href="#Fig2.2">Fig
2.2</loc>) with derivative of diagram in [<bibref ref="XMLPReqs"/>
                  <loc href="#XMLPReqs">XMLPReqs</loc>] (added service primitive annotations
back in).</p>
              </item>
              <item>
                <p role="change">Editorial on text section 2 to bring in line with revised Fig
2.1 (later renumbered <loc href="#Fig2.2">Fig 2.2</loc>)</p>
              </item>
              <item>
                <p role="change">Updated <loc href="#Fig3.1">Figure 3.1</loc> (was Figure 3.2) in
response to Jacek's comment at F2F on how to indicate indeterminate
ordering.</p>
              </item>
              <item>
                <p role="change">Updated <loc href="#Fig4.2">Figure 4.2</loc> (was 5.2) to reflect
changes in Figure 2.1 (later renumbered <loc href="#Fig2.2">Figure
2.2</loc>; addition of handler h).</p>
              </item>
              <item>
                <p role="change">Added Marc Hadley Binding Model as <specref ref="Sec5.1"/> (and subsections) minor edits ("this document"-&gt;"this
section")</p>
              </item>
              <item>
                <p role="change">Added Mark Jones Module Processing Model as&nbsp; <specref ref="Sec4.1"/>.</p>
              </item>
              <item role="change">
                <p>Forced case consistency on "XML protocol" application,
processor and layer throughout (ish).</p>
              </item>
            </olist>
        </item>
        <item>
          <p role="change">Changes from Draft of&nbsp; <loc href="http://www.w3.org/2000/xp/Group/1/03/21/XMLProtocolAbstractModel.html">
21st March 2001</loc></p>
            <olist>
              <item>
                <p role="change">Updated <loc href="#Fig4.1">section 4.1</loc> from Mark Jones
(promoted section 4.1.1 into 4.1)</p>
              </item>
              <item>
                <p role="change">Corrected Numbering in References section 5-&gt; section 6
(thanks Jacek!)</p>
              </item>
              <item>
                <p role="change">Updated <loc href="#Fig3.3">Figure 3.3</loc> (was Figure 3.7) in
response to another F2F comment from Jacek</p>
              </item>
            </olist>
        </item>
        <item>
          <p role="change">Changes from Draft of <loc href="http://www.w3.org/2000/xp/Group/1/03/26/XMLProtocolAbstractModel.html">
26th March 2001</loc></p>
            <olist>
              <item>
                <p role="change">Replaced <specref ref="Sec3"/> with alternate version
posted in <loc href="http://lists.w3.org/Archives/Public/xml-dist-app/2001Mar/0229.html">
http://lists.w3.org/Archives/Public/xml-dist-app/2001Mar/0229.html</loc>
                </p>
              </item>
              <item>
                <p role="change">Replaced <specref ref="Sec5.1"/> with new text from
Marc Hadley addressing Hugo's comments in:&nbsp; <loc href="http://lists.w3.org/Archives/Public/xml-dist-app/2001Mar/0221.html">
http://lists.w3.org/Archives/Public/xml-dist-app/2001Mar/0221.html</loc>
                </p>
              </item>
              <item>
                <p role="change">Pruned ToDo's list above.</p>
              </item>
              <item>
                <p role="change">Pruned Issue's list.</p>
              </item>
            </olist>
        </item>
        <item>
          <p role="change">Changes from Draft of <loc href="http://www.w3.org/2000/xp/Group/1/03/27/XMLProtocolAbstractModel.html">
27th March 2001</loc></p>
            <olist>
              <item>
                <p role="change">Restructured issues list and removed resolved issues.</p>
              </item>
              <item>
                <p role="change">Incorporated <!-- <a
      href="http://lists.w3.org/Archives/Member/w3c-archive/2001Mar/0308.html">-->
Henrik's feedback [HFN1]-[HFN29] 
<!--</loc> <loc href="http://cgi.w3.org/MemberAccess/">(member only)</loc>-->
                </p>
              </item>
              <item>
                <p role="change">Added Figure 2.2 (later renumbered <loc href="#Fig2.1">Figure
2.1</loc>) in response to Issue 5 on previous draft</p>
              </item>
              <item>
                <p role="change">Replaced <specref ref="Sec4.2"/> with new text from Mark Jones</p>
              </item>
              <item>
                <p role="change">Replaced <specref ref="Sec5.1"/> with new text from Marc Hadley</p>
              </item>
              <item>
                <p role="change">Merged XMLP_UnitData and XMLP_Intermediary into a single
operation.</p>
              </item>
            </olist>
        </item>
        <item>
          <p role="change">Changes from Draft of <loc href="http://www.w3.org/2000/xp/Group/1/03/30/XMLProtocolAbstractModel.html">
30th March 2001</loc></p>
            <olist>
              <item>
                <p role="change">Removed issue 4 from frontpiece. resolved by inclusion of Fig
2.2 (later renumbered <loc href="#Fig2.1">Fig 2.1</loc>)</p>
              </item>
              <item>
                <p role="change">Removed references to XMLP_INTERMEDIARY operation. Was
previously merged with XMLP_UNITDATA</p>
              </item>
              <item>
                <p role="change">Fixed various typo's reported by Jean-Jacques Moreau<!--  (<a
      href="http://lists.w3.org/Archives/Member/w3c-archive/2001Apr/0005.html">
      http://lists.w3.org/Archives/Member/w3c-archive/2001Apr/0005.html</loc> <loc href="http://cgi.w3.org/MemberAccess/">(member only)</loc>)-->
                </p>
              </item>
              <item>
                <p role="change">Handed over editing to <loc href="mailto:jones@research.att.com">
Mark Jones</loc>.</p>
              </item>
              <item>
                <p role="change">Revised <specref ref="Sec4"/> to reflect terminology agreement from April
4, 2001 telcon on with respect to handler and module.</p>
              </item>
              <item>
                <p role="change">Revised <specref ref="Sec4.2"/> to make block properties more
abstract.</p>
              </item>
              <item>
                <p role="change">Added Editors at beginning of document.</p>
              </item>
              <item>
                <p role="change">Revised <specref ref="Sec2"/> to introduce the simpler figure (now <loc href="#Fig2.1">Fig 2.1</loc>) first and then then more complex figure
(now <loc href="#Fig2.2">Fig 2.2</loc>).</p>
              </item>
            </olist>
        </item>
        <item>
          <p role="change">Changes from Draft of <loc href="http://www.w3.org/2000/xp/Group/1/04/17/XMLProtocolAbstractModel.html">
17th April 2001</loc></p>
            <olist>
              <item>
                <p role="change">Removed Issues list.</p>
              </item>
              <item>
                <p role="change">Fixed various typo's.</p>
              </item>
              <item>
                <p role="change">Changed wording at end of <specref ref="Sec5.1.4.1"/>  to "HTTP persistent
connections".</p>
              </item>
              <item>
                <p role="change">Changed boilerplate to reflect linkage to XMLP/SOAP spec.</p>
              </item>
            </olist>
        </item>
        <item>
          <p role="change">Changes from Draft of <loc href="http://www.w3.org/2000/xp/Group/1/04/23/XMLProtocolAbstractModel.html">
23rd April 2001</loc></p>
            <olist>
              <item>
                <p role="change">Fixed Typographic errors reported by 
<!-- <loc href="http://lists.w3.org/Archives/Member/w3c-xml-protocol-wg/2001Apr/0204.html"> -->
Gerd Hoelzing 
<!-- </loc> <loc href="http://cgi.w3.org/MemberAccess/">(member only)</loc> -->
                </p>
              </item>
              <item>
                <p role="change">Updated Document Status.</p>
              </item>
              <item>
                <p role="change">Added <specref ref="Acknowledgements"/> ahead of
<specref ref="ChangeLog"/>
                </p>
              </item>
            </olist>
        </item>
      </ulist>
    </div1>
  </body>
</spec>
