Copyright © 2003 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use, and software licensing rules apply.
This document describes an abstract feature and a concrete implementation of it for optimizing the transmission and/or wire format of SOAP messages.
This document is an editors' copy that has no official standing.
This document is a working draft.
1. Introduction
2. Abstract Optimization Feature
3. HTTP Optimization Feature
A. History
1. Introduction
2. Abstract Optimization Feature
2.1 Introduction
2.2 Abstract Optimization Feature Name
2.3 Abstract Optimization Feature Properties
2.4 Abstract Optimization Feature Processing
2.4.1 Sending a message
2.4.2 Receiving a message
2.4.3 Transmitting a message
3. HTTP Optimization Feature
3.1 Introduction
3.2 HTTP Optimization Feature Name
3.3 Implementation
3.3.1 Include element
3.3.2 href attribute
3.3.3 Sending a SOAP message
3.3.4 Receiving a SOAP message
A. History
A.1 18 May 2003
The first part of this document (2. Abstract Optimization Feature) describes an abstract feature for optimizing the transmission and/or wire format of a SOAP message by selectively re-encoding portions of the message, while still presenting an XML Infoset to the SOAP application.
This abstract feature is intended to be implemented by SOAP bindings, however nothing precludes from implementing it as a SOAP module. In a second part (3. HTTP Optimization Feature), this document describes such an implementation for an HTTP binding.
Editorial note: HR | |
Is the new name better? |
The Abstract Optimization Feature enables SOAP bindings to optimize the transmission and/or wire format of a SOAP message by selectively re-encoding portions of the message, whilst still presenting an XML Infoset to the SOAP application.
The Abstract Optimization Feature also enables SOAP applications to provide hints about what part of a SOAP message could be re-encoded in an efficient way. However, it is up to the implementation to decide if and how it will optimize the transmission of a given SOAP message.
This Abstract Optimization Feature is identified by the URI:
"http://www.w3.org/2003/06/soap/features/abstract-optimization".
The Abstract Optimization Feature defines a set of properties described in Table 1.
Property Name | Property Description |
---|---|
aof:OptimizationCandidates |
A List containing zero or more (pointers to) element information items within the SOAP envelope candidate for being transmitted in an optimized way. The manner in which such identification is represented in the node is at the discretion of the implementation. |
Note: Among the possible choices for identifying element
information items in the
aof:OptimizationCandidates
are XPaths relative to the
Envelope element, or pointers to the internal implementation of the
elements in question. Indeed the list may be implicit in the content
of the envelope itself. For example, any information item with
contents that happen to be the canonical form of some base64 binary
value can be implicitly included in the list if desired.
Editorial note: HR | |
Does "enabling" an Abstract Feature make sense for a SOAP node? If this is not the case, another property should be created for reflecting the fact that the Abstract Optimization Feature is enabled or not. |
Editorial note: HR per Noah's remark | |
Do we allow the optimization of only base64 binary content or do we
allow to generalize the aof:OptimizationCandidates
as a list of (type, elementID) pairs? This would allow for binary
transmission of integers, floats, and so on.
|
To send a SOAP message using the Abstract Optimization Feature, an
application MUST enable the Abstract Optimization Feature. In addition
it SHOULD define the value of the
aof:OptimizationCandidates
property.
When sending a SOAP message with the Abstract Optimization Feature
enabled, a SOAP node using a binding implementing the Abstract
Optimization Feature SHOULD optimize the transmission of all the SOAP
message element information items listed in the value of the
aof:OptimizationCandidates
property.
In addition, the SOAP node binding MAY optimize the transmission of
other SOAP message element information items not listed in the value of the
aof:OptimizationCandidates
property. In
particular, if the aof:OptimizationCandidates
property is not defined or if it has an empty value, the SOAP node
binding MAY optimize the transmission of any SOAP message element information item.
Editorial note: HR | |
Do we allow the optimization of the Envelope, Header, Body element information items, or of a full Header Block? |
Editorial note: HR | |
If the binding used does not implement the Abstract Optimization Feature there are several options which can be followed: fault; send the message ignoring the request for using the Abstract Optimization Feature; send the message including the request for using the Abstract Optimization Feature (allows an intermediary implementing it to use its implementation). |
When receiving a SOAP message using an implementation of the Abstract Optimization Feature, a SOAP node MUST fault if it does not support the implementation used or the Abstract Optimization Feature.
When receiving a SOAP message using an implementation of the Abstract Optimization Feature, a SOAP node binding MUST be capable of reconstructing the original SOAP message infoset. However, implementations are free to reconstruct only those portions actually needed for processing, or to present information from the message in a form convenient for efficient processing. For example, a value sent in an optimized form (e.g. binary) MAY be made available in that form as well as in the character form mandated by the Infoset.
When receiving a SOAP message using an implementation of the
Abstract Optimization Feature, a SOAP node binding MUST enable the
Abstract Optimization Feature. In addition, the SOAP node binding
SHOULD/MAY set the value of the
aof:OptimizationCandidates
property to reflect the
SOAP message parts whose transmission was optimized in the
incoming message.
Editorial note: HR | |
We should decide on a SHOULD or on a MAY. In addition, the
aof:OptimizationCandidates property is not very
meaningful on the receiver side. We may create another property
for reflecting element information items whose transmission was effectively optimized
(an efficient implementation will provide this property to allow
efficient retrieval of the optimized element information items).
|
The usage of the Abstract Optimization Feature is a hop by hop contract between a SOAP node and the next SOAP node in the SOAP message path. Therefore, no specific rules exist for a SOAP intermediary implementing the Abstract Optimization Feature.
However a SOAP intermediary implementing the Abstract Optimization Feature MUST still follow the rules related to the usage of an implementation of the Abstract Optimization Feature when receiving the message (see 2.4.2 Receiving a message) and those related to the usage of an implementation of the Abstract Optimization Feature when sending the message (see 2.4.1 Sending a message). In addition, it MUST follow the rules for relaying SOAP messages (see [W3C.soap-part1] Relaying SOAP Messages).
The HTTP Optimization Feature is a binding level feature, implementing the Abstract Optimization Feature in an HTTP binding.
This HTTP Optimization Feature builds upon the current HTTP binding (see [W3C.soap-part2] /SOAP HTTP Binding), enhancing it with the support of the Abstract Optimization Feature. In all aspects not described in this section, the rules of the HTTP binding are not modified.
This HTTP Optimization Feature is identified by the URI:
"http://www.w3.org/2003/06/soap/features/http-optimization".
The Include
element information item
is used by the HTTP Optimization Feature for replacing optimized
element information items while still preserving the
logical link between the SOAP message infoset and the optimized
data. To reconstruct the original infoset, an Include
element information item should be logically replaced
by the base64 encoded value of the data referred to in its
href
attribute information item.
The Include
element information item has:
A [local name] of Include
.
A [namespace name] of "http://www.w3.org/2003/06/soap/features/http-optimization".
Zero element information item in its [children] property.
One or more attribute information items in its [attributes] property. Among these MUST be the following:
href
attribute information item (see 3.3.2 href attribute).
The href
attribute information item is used
to refer the optimized form of the data replaced by the
Include
element information item containing
it.
The href
attribute information item has the
following XML infoset properties:
A [local name] of href
.
A [namespace name] which has no value.
A [specified] property with a value of "true".
The type of the href
attribute information
item is xs:anyURI. The value of the
href
attribute information item is a URI
that refers to an optimized form of the element information
item replaced by the Include
element
information item containing it.
When sending a SOAP message for which the Abstract Optimization Feature is enabled, the HTTP Optimization Feature optimizes the transmission of the message by transmitting in a compact form parts of the SOAP message. The SOAP message is serialized into a MIME multipart (ref) packaging, one body part, the root object, being an XML representation of the SOAP envelope, while other body parts contains the parts of the SOAP message transmitted in a compact form.
The HTTP Optimization Feature affects the serialization of the SOAP message infoset into the HTTP body. Unless otherwise stated, serializing a SOAP message infoset into the HTTP body MUST be semantically equivalent to performing the following steps separately, and in the order given.
Create a MIME multipart packaging to be serialized into the HTTP body.
Create a list of the element information items
whose transmission is to be optimized. This list SHOULD
contain all the element information items of the
SOAP message pointed to in the
aof:OptimizationCandidates
property. This list
MAY contain other element information items of the
SOAP message.
Editorial note: HR | |
Do we handle overlapping element information items? |
Add a serialization of each element information item in the list in a body part of the MIME multipart packaging.
Editorial note: HR | |
How do we set the Content-type? |
Modify the SOAP message infoset by replacing each element
information item in the list by an
httpo:Include
element information item
referring to the body part of the MIME multipart packaging
containing its serialization.
Serialize the resulting SOAP message infoset, using XML 1.0, in the root object of the MIME multipart packaging.
Editorial note: HR | |
Do we allow only an XML 1.0 serialization? |
Serialize the MIME multipart packaging into the HTTP body.
When receiving a SOAP message using the HTTP Optimization Feature, the HTTP binding MUST, at least logically, provide an access to the reconstructed SOAP message infoset.
The reconstruction of the SOAP message infoset from the data contained in the HTTP Body MUST be semantically equivalent to performing the following steps separately, and in the order given.
Extract the MIME multipart packaging from the HTTP body.
Extract the SOAP message from the root object of the MIME multipart packaging and deserialize it to an infoset representation.
Extract and deserialize each other body part of the MIME multipart packaging.
Find every httpo:Include
element information
item in the SOAP message infoset.
For each httpo:Include
element information
item, find the body part of the MIME multipart
packaging which is referred to by the href
attribute information item of the
httpo:Include
element information item.
Replace the httpo:Include
element information
item by the base64 encoded value of the referred to
body part.
When reconstructing a SOAP message infoset, the HTTP binding:
SHOULD generate an "env:Sender" SOAP fault with a subcode of
httpo:MissingHRef
if an httpo:Include
element information item does not contain a
href
attribute information item.
SHOULD generate an "env:Sender" SOAP fault with a subcode of
httpo:NotFoundHRef
if not body part of the MIME
multipart packaging matches the href
attribute
information item of an httpo:Include
element information item.
Editorial note: HR | |
No more DoInclude header. The functionality should be transferred to the SOAP Extensible HTTP Binding. |
Changed document's name from "Inclusion Mechanism" to "Optimization Mechanism", and changed abstract feature name and HTTP feature name.
Corrected typos and other editorial errors.
Added a publication date.
Added an abstract.
Improved general introduction (1. Introduction).
Changed the presentation of the processing rules in 2.4.1 Sending a message, 2.4.2 Receiving a message.
Shortened 2.4.3 Transmitting a message.
Improved HTTP implementation introduction (3.1 Introduction).
Added a description of the Include
element
information item and of the href
attribute information item.
Changed the presentation for sending a SOAP message through the HTTP binding.
Improved the presentation for receiving a SOAP message through the HTTP binding.