Headers Proposal V1.2

Another cut of Header proposal.

 

This removes the text from Part 2 and inserts into Part 1 and Part 3,
whilst retaining f&p underneath.

 

= New Part 1 section (2.16?) Header Extension =

 

This extension is a feature is identified with the URI

http://www.w3.org/@@@@/@@/features/Header

 

== Operation ==

 

This feature exists in order to enable the description of
application-defined additional data declarations outside of the normal
data channel (e.g. the SOAP body). The senders take the value of the
property http://www.w3.org/@@@@/@@/features/Header/data
<http://www.w3.org/@@@@/@@/features/AD/data> , which is defined below,
and passes it to the receiver in a manner to be defined by the
particular bindings/modules implementing this specification.

 

= Header data Property =

 

This property is identified with the URI
http://www.w3.org/@@@@/@@/features/Header/data
<http://www.w3.org/@@@@/@@/features/AD/data> .

 

== Description ==

 

The data property consists of a sequence of elements, each of which
represents an individual piece of application data.  Implementations of
this feature must ensure that the runtime value of this property is
correctly transferred from the sender to the receiver.

 

Here is an example of using the data property in a WSDL and the Message
Reference shorthand.

 

<types>

 <schema targetNamespace="http://foo"

         xmlns:xs="http://www.w3.org/2001/XMLSchema"

         xmlns="http://www.w3.org/2001/XMLSchema">

  <import namespace="http://www.w3.org/2003/05/soap-envelope"/>

  <!-- Define the data type we'll use later -->

  <complexType name="myDataType">

   <sequence>

 

    <!-- These elements are our data -->

    <element name="isGoldClubMember">

     <complexType>

      <simpleContent>

       <extension base="xs:boolean"/>

       <attribute xmlns:soap="http://www.w3.org/2003/05/soap-envelope"

                  ref="soap:mustUnderstand"

                  fixed="true"/>

      </simpleContent>

     </complexType>

    </element>

 

    <element name="promotionalCode"

             type="xs:string"

             minOccurs="0"/>

 

   </sequence>

  </complexType>

 </schema>

</types>

<interface name="customerService">

 <operation name="reserveCar">

  <input element="myNS:reserveCarRequest"
headerWrapperType="foo:myDataType"/>

</operation>

</interface>

 

This example defines two pieces of application data, and associates them
with the input message of the "reserveCar" operation.  Notice that the
"promotionalCode" element is optional (minOccurs="0"), and that the
"isGoldClubMember" element has fixed the value of the SOAP 1.2
"mustUnderstand" element to "true".

 

= Addition to 2.5.1 =

 

{header content model} OPTIONAL. A wsdls:token with one of the values
#any, #none, or #element. A value of #any indicates that the header
content is any single element. A value of #none indicates there is no
header content. A value of #element indicates that the header consists
of a elements contained within the content model referenced by the
{headerWrapperType} property.

{headerWrapperType} OPTIONAL. A reference to an XML element declaration
in the {element declarations} property of 2.1.1 The Definitions
Component
<http://www.w3.org/TR/2004/WD-wsdl20-20040803/#Definitions_details#Defin
itions_details> . The content of this element represents headers of the
message. When the {message content model} property has the value #any or
#none the {element} property MUST be empty

 

= Addition to 2.5.2 = 

 

headerWrapperType="union of xs:QName, xs:Token"?

 

o        An OPTIONAL headerWrapperType attribute information item as
described below in 2.5.2.2 headerWrapperType attribute information item
with input, or output [owner]
<http://www.w3.org/TR/2004/WD-wsdl20-20040803/#MessageReference_element_
attribute#MessageReference_element_attribute> .

2.5.2.3 headerWrapperType attribute information item with input , or
output [owner]

The headerWrapperType attribute information item has the following
Infoset properties:

*	A [local name] of headerWrapperType . 
*	A [namespace name] which has no value. 

The type of the headerWrapperType attribute information item is a union
of xs:QName and xs:Token where the allowed token values are #any or
#none.

 

 

=== Addition to Part 3 part 2 === 

 

The SOAP binding implements the Header SOAP Module:
http://www.w3.org/@@@@/@@/modules/Header
<http://www.w3.org/@@@@/@@/modules/AD> .  By default, the Header module
is enabled.  The Header module is turned off by setting the
"disableHeaderModule" to true.

 

In the example

<binding name="xs:NCName" interface="xs:QName"?

           type=http://www.w3.org/2004/08/wsdl/soap12
<http://www.w3.org/2004/08/wsdl/soap12> 

           disableHeaderModule="xs:boolean"?

 

 

= New 2.9 Header SOAP Module =

 

This module is identified with the URI

http://www.w3.org/@@@@/@@/modules/Header
<http://www.w3.org/@@@@/@@/modules/AD> 

 

== Features Implemented ==

 

This module implements the feature

http://www.w3.org/@@@@/@@/features/Header
<http://www.w3.org/@@@@/@@/features/AD> .

 

== Operation ==

 

This module specifies how to transmit "out of band" application data, as
defined in the Application Data feature, as SOAP headers.  As a SOAP
sender, if the property http://www.w3.org/@@@@/@@/features/Header/data
<http://www.w3.org/@@@@/@@/features/AD/data>  has a value then each of
the top-level child element information items in the value SHOULD [ed:
MUST?] be turned into a SOAP header.  The elements are serialized
according to their schemas, which might include the SOAP
"mustUnderstand" attribute, which will have the usual meaning in the
resultant headers. 

 

It is the responsibility of the receiving node to determine which, if
any, SOAP headers will populate the
http://www.w3.org/@@@@/@@/features/Header/data
<http://www.w3.org/@@@@/@@/features/AD/data>  property.  Typically this
will be accomplished via using some metadata, such as an understanding
of the headerWrapperType specified in WSDL, or out-of-band agreements.
If any SOAP header blocks (described above) have an
"isApplicationHeader" is present, then that header block is application
data.  The contents of each SOAP header identified as application data
will be placed in a child element of the data property [ed: should we
define a particular "wrapper" element here as the top level one?].

 


2.5 Disabling the Default SOAP Header Module


2.5.1 Description


This binding specification allows the user to disable the Header SOAP
Module http://www.w3.org/@@@@/@@/modules/Header
<http://www.w3.org/@@@@/@@/modules/AD> ..


2.5.2 Relationship to WSDL Component Model


The disableHeaderModule is a syntactic convenience and does not affect
the underlying component model.


2.5.3 XML Representation


<definitions >

  <binding  name="xs:NCName" interface="xs:QName"? type="xs:anyURI"

            wsoap:protocol="xs:anyURI"

            wsoap:disableHeaderModule="xs:boolean"?/>    ...

  </binding>

</definitions>

The XML representation for the disable Header Module is an OPTIONAL
attribute information item with the following Infoset properties:

*         A [local name] of disableHeaderModule

*         A [namespace name] of "http://www.w3.org/2004/08/wsdl/soap12"

 

 

 

 

== Add to Section 3 ==

 

The HTTP binding implements the feature
http://www.w3.org/@@@@/@@/features/Header
<http://www.w3.org/@@@@/@@/features/AD> .

 

= New content for section 3.3 = 

 

- Header Construction: When formulating the HTTP message to be
transmitted, the contents of the headers (i.e. the contents of the HTTP
headers) MUST at least be what is defined by the corresponding Header
Feature.  if the value of the {header content model}
<http://www.w3.org/TR/2004/WD-wsdl20-20040803#MessageReference_details>
property is #any then the header MAY be any one XML element. If the
value is #none then there is no impact on the headers. Finally if the
value is #element then the headers will be the elements in the content
model of element information item identified by the {wrapperHeaderType}
<http://www.w3.org/TR/2004/WD-wsdl20-20040803#MessageReference_details>
property.

 

= New Section 3.12 HTTP use of Header feature

As an HTTP sender, if the property
http://www.w3.org/@@@@/@@/features/Header/data
<http://www.w3.org/@@@@/@@/features/AD/data>  has a value then each of
the top-level child element information items indicates a possible
element information item that SHOULD [ed: MUST?] be turned into an HTTP
header.  The http header name is serialized from the element information
item local name.  The http header content is serialized from the element
information item value.

 

The data elements should only be "xs:string" type, including xs:anyURI.

Any attributes on data elements are ignored.

Any complex data types are ignored.  Where the element information item
contains content that cannot be directly encoded per the HTTP
specification, it MUST be escaped.

 

It is the responsibility of the receiving node to determine which, if
any, HTTP headers will populate the
http://www.w3.org/@@@@/@@/features/Header/data
<http://www.w3.org/@@@@/@@/features/AD/data>  property.  Typically this
will be accomplished via using some metadata, such as an understanding
of the headerWrapperType specified in WSDL, or out-of-band agreements.
The contents of each such HTTP header will be placed in a child element
of the data property [should we define a particular "wrapper" element
here as the top level one?].  Each child element information item is
generated by using the http header name as the element information item
local name [ed: should we define a particular namespace?] and the http
header value as the element information item value.  Where the HTTP
header contains content that cannot be directly encoded in the element
information item, it MUST be escaped.

 

 


3.6 Disabling the Header Header feature


3.6.1 Description


This binding specification allows the user to disable the Header Feature
http://www.w3.org/@@@@/@@/features/Header
<http://www.w3.org/@@@@/@@/features/AD> .


3.6.2 Relationship to WSDL Component Model


The disableHeaderFeature is a syntactic convenience and does not affect
the underlying component model.


3.6.3 XML Representation


<definitions >

  <binding  name="xs:NCName" interface="xs:QName"? type="xs:anyURI"

            whttp:disableHeaderFeature="xs:boolean"?/>    ...

  </binding>

</definitions>

The XML representation for the disable Header Feature is an OPTIONAL
attribute information item with the following Infoset properties:

*         A [local name] of disableHeaderFeature

*         A [namespace name] of "http://www.w3.org/2004/08/wsdl/http"

 

Cheers,

Dave (and Glenn?)

 

Received on Friday, 21 January 2005 05:24:19 UTC