NOTE-ice-20000322

The Information and Content Exchange (ICE) Protocol
AC Review Version 1.1
Draft Revision (XML Europe)


 
Editors:
Jay Brodsky, Tribune Media Services
Bruce Hunt, Adobe Systems, Inc.
Sami Khoury, What U Want, Inc.
Laird Popkin, Sotheby's Holdings
 
ICE Authoring Group:
Michael Branch, Vignette Corporation
Jay Brodsky, Tribune Media Services
Phil Gibson, National Semiconductor Corporation
Jack Gudenkauf, Microsoft Corporation
Martin Hardee, Sun Microsystems, Inc.
Bruce Hunt, Vice-Chairman, ICE-AG, Adobe Systems, Inc.
Brad Husick, (Invited Expert)Vignette Corporation
Kimberly Jones, CNET: The Computer Network
Dianne Kennedy, (Invited Expert), XMLXperts & IDEAlliance
Sami Khoury, What U Want, Inc.
Daniel Koger, BEST Consulting
Erik Leckner, Seagate Technology, Inc.
Richard Martin, Active Data Exchange, Inc.
Laird Popkin, Chairman ICE-AG, Sotheby's Holdings
Nathan Pride, Wavo Corporation
Adam Souzis, Kinecta Corporation

Status of this Document

This document is a draft prepared for XML Europe by the ICE Authoring Group

ICE 1.1 is an ICE 1.0 compatible update to the ICE 1.0 specification.  This update is made in response to the implementation experience that has been gained over the past year.  It differs from the ICE 1.0 specification in that it corrects several minor deficiencies in the original specification.  It corrects several typographic errors.  It continues the clarification of the specification  to assist  developers in achieving inter-operable implementations.  Finally, ICE 1.1 specifies several of the most asked for implementation features.   ICE 1.1 is fully upwards compatible with ICE 1.0 in that an ICE 1.0 implementation can inter-operate with an ICE 1.1 implementation using any function of ICE 1.0.  ICE 1.1 implementations add capabilities ( most notably extensibility ) that are only accessible to other ICE 1.1 implementations.

The ICE authoring group and IDEAlliance recommend that implementations be updated to conform to the ICE 1.1 specification. The minor changes and added function greatly enhance the usability of the protocol in a very wide range of syndication applications and can provide a substantial foundation for delivering syndication solutions.

Abstract

This document describes the Information and Content Exchange protocol for use by content Syndicators and their subscribers. The ICE protocol defines the roles and responsibilities of Syndicators and subscribers, defines the format and method of content exchange, and provides support for management and control of syndication relationships. We expect ICE to be useful in automating content exchange and reuse, both in traditional publishing contexts and in business-to-business relationships.

Table of Contents

  1. Introduction
    1. ICE Design Goals
    2. How ICE relates to other standards
      1. XML
      2. CDF
      3. OSD
      4. P3P
      5. WebDAV
      6. HTTP DRP
      7. SMIL
    3. Definitions
      1. Requirement Wording Note
      2. ICE Semantic Definitions
    4. Technical Decisions
      1. ICE Constraints and XML-Schema
      2. Defining ICE using a DTD and XML-Data
      3. Use of HTTP POST transport mechanism
      4. Security
    5. Internationalization Issues
    6. Structure of this Document
  2. ICE Overview
    1. Simple ICE Scenarios
      1. Headline Scenario
      2. Parts Scenario
    2. Protocol Overview
      1. Payloads, Requests, and Responses
      2. Request/Response model
      3. Subscriber/Syndicator, Requester/Responder, Sender/Receiver
      4. Minimal Subscriber Implementation and Unsolicited Message
    3. Binding of ICE to HTTP
      1. Use of HTTP POST
      2. Mapping the ICE Request/Response Model to HTTP POST/Response
      3. Multiple Requests in a Single Payload
      4. Content Type in HTTP Header
  3. Protocol Infrastructure
    1. Syntax and Format
      1. XML Syntax
      2. Generic Rules for Attribute Formats
    2. Identifiers
      1. Subscriber and Syndicator Identifiers
      2. Other Identifiers
    3. Dates and Times
      1. ICE Date Format
      2. ICE Time Format
      3. Sub second Resolution
      4. Time Zones
      5. ICE Date and Time Format
      6. ICE Duration Format
    4. Status and Error code formats
      1. No HTTP Relationship
      2. Status Code Format
      3. Body
      4. Defined Status Codes
      5. Redirection
    5. ICE Payload Detail
      1. Payload XML Declarations
      2. Payload Element Definition
    6. Payload Header Fields
      1. ice-sender
      2. ice-receiver
      3. ice-user-agent
    7. ICE Requests and ICE Responses
      1. ice-request
      2. ice-response
      3. Responses containing errors and additional data
    8. Surprise ice-code Messages, and Package Confirmation
      1. Format of ice-code message
      2. Semantics of Package Confirmation
      3. Specific Confirmation Codes
    9. Example NOP Message
      1. A Single NOP
      2. Multiple NOPs
    10. Unsolicited Message Operation
      1. General Unsolicited Model
      2. Format of unsolicited-now
      3. Format of unsolicited-request
      4. Format of unsolicited-response
      5. Asymmetry and Implementation Requirements
      6. Policy decisions
      7. Example exchanges
  4. Catalogs and Subscription Establishment
    1. Subscription Establishment Overview
    2. Delivery Policies
      1. ice-delivery-policy
      2. ice-delivery-rule
      3. Negotiation information
    3. Catalogs
      1. Catalog Format
      2. Offer Group and Offer Formats
      3. Business Terms
      4. Protocol Operation: Get Catalog
    4. Subscribing and Negotiation Model
      1. Negotiation Model
      2. Basic Negotiation Flow: Offer / Sorry / OK
      3. Protocol operation
      4. Trivial Negotiation Implementation
      5. Non-trivial Negotiation Implementation
      6. Negotiation Process
        1. Overview
        2. Single Parameter Resolution
        3. Multiple Parameter Resolution
        4. Convergence
    5. Parameter Negotiation Elements
      1. Ice-negotiable Content
      2. Ice-range
      3. Ice-span
      4. Ice-enum
      5. Subscription Operating Parameters
        1. Month Day
        2. Week Day
        3. Start Date
        4. Stop Date
        5. Start Time
        6. Duration
        7. Minimum Update Interval
        8. Maximum Update Interval
        9. Minimum Number of Updates
        10. Maximum Number of Updates
        11. Push or Pull mode
      6. Negotiation Examples
        1. Multiple Video Stream Syndication
        2. ICE Delivery Rule Negotiation
    6. Status Operations
      1. ice-cancel
      2. ice-change-subscription
      3. ice-get-status
  5. Packages and Delivery
    1. Sequenced Package Model
      1. Discrete Package Model
      2. Strictly Ordered Package Model
      3. Package Sequence Identifier
      4. Packages and Package Sequence Identifiers
      5. Sequenced Package Example
      6. Example Pseudo protocol Exchange
    2. Package containment model
      1. Package format
      2. Add operations
        1. ice-item
        2. ice-item-ref
        3. ice-item-group
      3. Remove operation
      4. Extensibility
    3. Package Pull Operations
    4. Package Push Operations
    5. Miscellaneous Package Operations
      1. Awaiting Confirmations
      2. Obtaining Package Sequence Information
      3. Individual Asset Repair
  6. Event Logs
    1. ICE defines generic transport for multiple log file formats
    2. Event log operations
    3. ICE event log format
    4. Issues and Discussion
  7. Miscellaneous Protocol Operations
    1. No Operation
    2. Notify: Text Messages
  8. Extending ICE
    1. Introduction
    2. Content Model Extensions
      1. Elements permitting extension
      2. Required extension Semantics
      3. Alternative Log Format
      4. Extending ice-items content
      5. Domain specific package content
    3. Subscription Extensions
    4. Protocol Extensions
      1. Example Protocol Extension - Down-time Messages
  1. Appendix: Complete ICE DTD
  2. Appendix: ICE Revisions
  3. Appendix: Change Log

1. Introduction

Reusing and redistributing information and content from one Web site to another is an ad hoc and expensive process. The expense derives from two different types of problem: Successful content syndication requires solving both halves of this puzzle. Fortunately, industry specific efforts already exist for solving the vocabulary problems. For example, Ontology.org (http://www.ontology.org) is an organization devoted to fostering development of industry specific XML DTDs. Other examples of this type of effort include HL7 for the health care industry, or recent W3C XML efforts for mathematics. Although many industries have yet to establish efforts in this area, more will do so as XML and the Web continue to create opportunities for economic gain via on-line applications.

ICE completes the picture by providing the solution for the other half of the puzzle. Specifically, ICE manages and automates establishment of syndication relationships, data transfer, and results analysis. When combined with an industry specific vocabulary, ICE provides a complete solution for syndicating any type of information between information providers and their subscribers.

1.1 ICE Design Goals

The authoring group defined a number of design goals for ICE based on requirements analysis and much thought and discussion. Some of the most important design goals for ICE are included here for reference: Note: These goals are non normative. They are included here for historical purposes only.
  1. ICE shall be straightforwardly usable over the Internet.
  2. ICE shall support a wide variety of applications and not constrain data formats.
  3. ICE shall conform to a specific XML syntax.
  4. The ICE requirements shall constrain the ICE process to practical and implementable mechanisms.
  5. ICE shall be open for future, unknown uses.
  6. Compactness of representation in ICE is of minimal importance. Note: this is a statement about low level encoding methodology, e.g., the use of XML in general and the particular choice of tag and attribute names in particular.
  7. ICE shall keep protocol and packaging overhead to a minimum. Note: this is a statement about protocol overhead in the sense of round trips, complexity, and other high level performance effects. It is not a contradiction of the previous point. The design of ICE achieves its performance objectives by optimizing the high level design of the protocol flow and state management, not by micro optimizing the spelling of individual packets.

1.2 How ICE relates to other standards

Many other standards describe how to transmit data of one form or another between systems. This section briefly discusses some of these protocols and describes their relationship to ICE.

1.2.1 XML

ICE is an application of the Extensible Mark-up Language (XML). Basic concepts in ICE are represented using the element/attribute mark-up model of XML. Note, however, that ICE is a protocol, not just a DTD, and so in that way differs fundamentally from other pure document applications of XML such as MathML (mathematical formula mark-up language), PGML (Precision Graphics Mark-up Language), etc.

1.2.2 CDF

Channel Definition Format (CDF) specifies the operation of push channels. Like ICE, it defines a mechanism for scheduling delivery of encapsulated content. ICE builds on some of the concepts of CDF, such as delivery schedules. Note that ICE goes well beyond what CDF can do; CDF has no notion of explicit subscription relationship management, asset management, reliable sequenced package delivery, asset repair operations, constraints, etc.

We expect ICE will be useful for server to server syndication to distribute and/or aggregate content to/from various push servers, whereas CDF is useful for server to browser applications.

1.2.3 OSD

The Open Software Description (OSD) Format automates distribution of software packages. OSD focuses on concepts such as package dependencies, OS requirements, environmental requirements (such as: how much disk space does a software package require), etc. ICE has very little overlap or relationship to OSD.

We expect ICE to be useful for server to server syndication to distribute and/or aggregate content to/from one OSD server to another, whereas OSD continues to be useful for its intended domain of distributing and installing software directly to target desktop and work group server machines.

1.2.4 P3P

Quoting from [P3P-arch]: The Platform for Privacy Preferences (P3P) protocol addresses the twin goals of meeting the data privacy expectations of consumers on the Web while assuring that the medium remains available and productive for electronic commerce. When ICE is being used to share user profile information from one business to another, it is the responsibility of the applications on both sides of such a relationship to enforce the appropriate privacy policies in accord with the principles described in P3P, as well as in accord with any governing laws. ICE is merely the transport mechanism for those profiles and is not involved in the enforcement of user profile privacy principles.

1.2.5 WebDAV

Quoting from [WebDAV]: WebDAV (Distributed Authoring and Versioning) specifies a set of methods, headers, and content types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, name space manipulation, and resource locking (collision avoidance).

WebDAV addresses a collaborative authoring environment and has very little overlap with ICE.

1.2.6 HTTP DRP

Quoting from [NOTE-DRP]: The HTTP Distribution and Replication protocol was designed to efficiently replicate a hierarchical set of files to a large number of clients. No assumption is made about the content or type of the files; they are simply files in some hierarchical organization.

DRP focuses on the differential update of information organized as a hierarchy of files. As such, it could be used to solve a portion of the data transfer problems addressed by ICE, but only for those content syndication situations that are file centric. ICE solves a more general problem of asset exchange, where assets may not necessarily be files in a hierarchy. ICE also addresses explicit subscription relationship management, asset management, reliable sequenced package delivery, asset repair operations, constraints, etc. whereas DRP addresses none of those.

1.2.7 SMIL

Quoting from [NOTE-SMIL]: SMIL allows integrating a set of independent multimedia objects into a synchronized multimedia presentation. Using SMIL, an author can
   1. describe the temporal behavior of the presentation
   2. describe the layout of the presentation on a screen
   3. associate hyper-links with media objects

SMIL (the Synchronized Multimedia Interchange Language) is an appropriate container format to be carried in an ICE package.  SMIL defines the temporal, layout and linking relationship between media components of a presentation and therefore has the potential to be an important content manager format for syndicated media.  ICE optimally carries content described by XML documents. SMIL is a standardized means for managing dynamic content based on an XML document.  There is a natural complementary affinity between ICE and SMIL.

1.3 Definitions

1.3.1  Requirement Wording Note

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

In the HTML version of this specification, those key words are CAPITALIZED BOLD. Capitalization is significant; uncapitalized uses of the key words are intended to be interpreted in their normal, informal, English language way. Bold face is not significant, and is used to aid comprehension, but the bold font is non normative and the absence of a bold font MUST NOT be given any semantic interpretation.

1.3.2 ICE Semantic Definitions

These definitions are used throughout this document. Readers will most likely not fully understand these definitions without also reading through the specification.
catalog
A set of subscription offers. A Subscriber obtains a catalog from a Syndicator, and uses the offers within the catalog to initiate the ICE subscription protocol.
collection
The result of a Subscriber processing all package deliveries in a single subscription, that is, the current content of a subscription. This is equivalent to the set of all items that a Syndicator would deliver in a full update of a subscription. This is not necessarily every item a Syndicator would transmit over time in a given subscription, because of incremental update.
ICE
Information and Content Exchange.
item
A single delivery instance of an arbitrary data type. For example, if a database record were being distributed, each field might be encapsulated as an item. Or, if a prospectus consisting of an HTML file and two GIF image files is being distributed, each of the files would be an item.
ICE/HTTP
The specific binding of the ICE protocol to the HTTP protocol.
message
The abstract concept of an atomic unit of communication. In this specification, the term message does not denote any specific protocol structure; rather, it is used to denote an abstract communication concept.
Minimal Subscriber
A Subscriber ICE implementation that has no persistent server component and therefore cannot receive syndicator initiated request messages.
negotiation
The Subscriber and Syndicator may negotiate to arrive at mutually agreeable delivery methods and schedules.
For example, both sides may have a preferred set of delivery times.  The ICE negotiation model is not an attempt to automate the arcane and baroque nature of human to human business deal negotiation.
package
A single delivery instance of a group of items. For example, a single issue of a parts manual or a single set of headlines. A package is the atomic unit of information distribution in ICE.
package sequence
An ordered series of packages delivered over time.
payload
A protocol structure encapsulating a set of logical ICE operations delivered at discrete intervals. A payload is a single instance of an XML document formatted according to the protocol definitions contained in this specification.
Receiver
Generic term referring to the target of an ICE payload. The term Receiver is used when it is possible for either the Subscriber or the Syndicator to be the party receiving the payload.
Request
A message asking for the performance of an operation. Requests in ICE are messages carried by payloads.
Requester
Generic term referring to the initiator of an ICE payload request.
Responder
Generic term referring to the recipient of an ICE payload request.
Response
A message containing the results of an operation. Responses in ICE are messages carried by payloads.
Sender
Generic term referring to the originator of an ICE payload. The term Sender is used when it is possible for either the Subscriber or the Syndicator to be the party sending the payload.
Subscriber
One of the two parties in an ICE relationship (the other one being the Syndicator). The Subscriber uses ICE to obtain information and content from the Syndicator.
subscription
An agreement to deliver a package sequence from a Syndicator to a Subscriber. There may be many independent subscriptions between a Syndicator and a Subscriber.
subscription element
A persistent identifier of all versions of an item or item group in a subscription. The subscription element may have many versions over time, and thus may have been represented by different items. For example, a company logo is a single subscription element, that can be updated over time. Every subscription element has a unique subscription element ID assigned by the syndicator.
subscription offer
A proposed set of parameters for a particular subscription. Within ICE, the term subscription offer has a precise meaning directly related to the corresponding protocol data structure; do not confuse the usage of the term "offer" in this specification with the more generic and abstract concept of offers in the business world sense.
Syndicator
One of the two parties in an ICE relationship (the other one being the Subscriber). The Syndicator uses ICE to send information and content to the Subscriber.
unsolicited message
A protocol mechanism used in ICE to provide a way for a Syndicator to initiate communication to a Minimal Subscriber.

1.4 Technical Decisions

The Authoring Group went through several major topics of discussion while designing ICE, and some of the decisions reached are of sufficient interest to warrant recording the thought processes that led to them.

1.4.1 ICE Constraints and XML-Schema

The ICE Authoring Group searched for an existing schema and constraint definition language that would meet the ICE requirements. As an example of these requirements, consider banner ads. A desirable constraint mechanism could represent the rule "banner ads are GIFs and are no larger than X pixels by Y pixels." None of the existing or planned schema and constraint languages can express the "ad banner" constraint.

The ICE Authoring Group felt strongly that:

Therefore, ICE defines a constraint reference and transport mechanism, and does not define an actual constraint language. Specifically, this means: This approach allows constraints to be specified and managed by ICE, without regard to a specific constraint implementation. Indeed, the Authoring Group concluded that having the constraint mechanism defined separately from the transport protocol had additional value in that it provided a natural and flexible way to accommodate a variety of constraint languages, which might develop to address industry specific requirements.

The Authoring Group intends to go one step further and define an interim constraint language, tentatively named ICE Constraints. The ICE Constraints language will suffice to meet the basic requirements of content Syndicators and their subscribers, while allowing time for general and more complete solutions to develop. We expect the ICE Constraints language will also be a useful source of requirements for future general purpose constraint language designers.

Note that a conforming ICE implementation need not implement any constraint processing at all; like DTD validation and a number of other ICE features, constraint processing is entirely a quality of implementation issue. Its presence or absence has no effect whatsoever on the interoperability of two ICE implementations, because nothing in the protocol state machine flow depends on constraint processing.

1.4.2 Defining ICE using a DTD and XML-Schema

This specification uses DTD syntax to define the format of the ICE protocol. The question of why this was done occasionally comes up, given that XML allows for DTDs but does not require them, and given that there are a number of other mechanisms (XML-Data, XSchema, DCD etc.) for defining XML document structure.

Inherently, because ICE is built using well formed XML documents, many different methods could have been used to specify syntax. For example, BNF can be used to define the protocol format as a grammar, complete with '<' and '/>' as literal elements in the productions. The authors of CDF in fact did this (albeit probably for historical reasons).

The use of a DTD mechanism implies very little about interoperability among implementations and about the ability to use other mechanisms in the future. The important question to ask is: what is the format of the pattern of bits exchanged over the wire. Whether specified using a DTD, XML-Data, BNF, a lex/yacc grammar, or lisp program, the "instance" (pattern of bits in the ICE document) is the same. This is the important point.

There are two places where a DTD is implied. One is in the following requirements:

Note, however, that "validation" could in principle be implemented in a variety of ways. A Receiver MAY use any alternate representation of ICE syntax, and perform some alternate form of validation against that representation, as long as the results are AS-IF the governing ICE DTD had been used.

The second place where a DTD is implied is in the DOCTYPE declaration of an ICE packet. A Receiver MAY simply ignore this declaration if the Receiver is not using a DTD. A Sender MUST supply this declaration, but this presents no particular burden to Sender implementations that function without DTDs; they can simply point to a publicly available known ICE DTD for the purposes of meeting this requirement.

1.4.3 Use of HTTP POST transport mechanism

One of the requirements identified early in the design process for ICE was to design a protocol that was transport independent, so that the concepts and development work done for ICE can be leveraged in a variety of situations. Therefore, the ICE protocol has been designed based on the concept of XML document exchange: each protocol message consists of a valid XML document, and the protocol involves sending such documents back and forth between syndicator and subscriber.

This specification explicitly discusses the binding of the generic ICE protocol to the HTTP transport mechanism. This specification uses the term ICE/HTTP where necessary to specifically refer to the concept of ICE bound to an HTTP transport mechanism.

To preserve the goal of being transport independent, and also to enable ICE to operate within existing network infrastructures, ICE/HTTP transmits payloads using the HTTP POST/Response mechanism. ICE/HTTP does not define any new HTTP headers or modify the HTTP protocol in any way; rather, the entire ICE request/response exchange is contained in the body of the HTTP POST and its associated HTTP Response.

1.4.4 Security

The ICE protocol itself deliberately does not address security, because the required levels of security can be achieved via existing and emerging Internet/Web security mechanisms.

In the specific case of digital signatures, non repudiation, and similar concepts, two things have happened that have steered the Authoring Group away from the notion of having digital signatures inside ICE itself:

Independent of any future XML digital signing standards, ICE implementations can achieve necessary security using a variety of methods, including: Also, for interoperability, syndicators and subscribers need to agree on how they will negotiate the security parameters for a given relationship. This may be done inside of ICE by using subscription extension or by using protocol extension. Or it may be done outside of ICE by, for example, an agreement to use SSL at a certain level of encryption, or by some other external means.

1.5 Internationalization Issues

Few internationalization issues occur at the protocol level at which ICE operates, but four specific issues are worthy of note:
  1. Support for International Character Sets. ICE itself defines no specific mechanisms for encoding or identifying character sets. Instead, ICE relies on capabilities in XML for encoding and supporting international character sets.
  2. Protocol Error Message Text. The error messages in an ice-code (see 3.4) include both a numeric error code and a short phrase, such as "OK" or "Not found". As is described in detail in 3.4.4, the phrase is intended for informational purposes only; it is the numeric error code itself that defines the semantics of the error message. Internationalized implementations of ICE are expected to convert the numeric ICE error code into an appropriate presentation string in the local language. Thus, there is no requirement for ICE to support multi-lingual versions of the error code phrase, such as "Mahalo" instead of "OK" in the 200 code.
  3. Other Protocol Text Strings. The ICE protocol sometimes uses string values as semantic identifiers. For example, an ice-sender (see 3.6.1) encodes the senders role as either "subscriber" or "syndicator". These textual strings are intended as arbitrary tokens representing a specific concept; they are not intended for presentation and thus have no impact on internationalization issues.
  4. Language identifier for textual data. Some ICE elements and attributes are specifically designed for the transport of textual data intended for use by humans. For example, the ice-business-term element (see 4.3.1). ICE provides a xml:lang attribute in all places where human readable text is being transported and might require an identification of its specific language encoding. When used, the xml:lang attribute MUST be filled in according to standards RFC-1766 (Tags for the Identification of Languages) and ISO-639 (Code for the representation of names of languages) as is required by the XML Specification.

1.6 Structure of this Document

The remainder of this document is organized as follows:

2. ICE Overview

Two entities are involved in forming a business relationship where ICE is used. The Syndicator produces content that is consumed by Subscribers. The Syndicator produces a subscription offer from input from various departments in an organization. Decisions are made about how to make these goods available to prospects. The subscription offer includes terms such as delivery policy, usage reporting, presentation constraints, etc. An organization's sales team engages prospects and reaches a business agreement typically involving legal or contract departments. Once the legal and contractual discussions are concluded, the technical team is provided with the subscription offer details and information regarding the Subscriber. The subscription offer is expressed in terms that a Web application can manage (this could be database records, an XML file, a plain text file, and so on). In addition, the technical team may have to set up an account for the subscriber entity, so that the Web site can identify who it is accessing the syndication application.

The Subscriber receives the information regarding their account (their subscriber identification and location to request their catalog) and how to obtain a catalog of subscription offers. At this point actual ICE operation can begin. The important point to understand is that ICE starts after the two parties have already agreed to have a relationship, and have already worked out the contractual, monetary, and business implications of that relationship.

The ICE protocol covers four general types of operations:

From the ICE perspective, a relationship between a Syndicator and a Subscriber starts off with some form of Subscription Establishment. In ICE, the subscriber typically begins by obtaining a catalog of possible subscriptions (really, subscription offers) from the Syndicator. The Subscriber then subscribes to particular subscriptions, possibly engaging in protocol parameter negotiation to arrive at mutually agreeable delivery methods and schedules.

The relationship then moves on to the steady state, where the primary message exchanges center on data delivery. ICE uses a package concept as a container mechanism for generic data items. ICE defines a sequenced package model allowing syndicators to support both incremental and full update models. ICE also defines push and pull data transfer models.

Managing exceptional conditions and being able to diagnose problems is an important part of syndication management; accordingly, ICE defines a mechanism by which event logs can be automatically exchanged between (consenting) Subscribers and Syndicators.

Finally, ICE provides a number of mechanisms for supporting miscellaneous operations, such as the ability to renegotiate protocol parameters in an established relationship, the ability to send unsolicited ad-hoc notifications (i.e., textual messages) between systems (presumably ultimately targeted at administrators), the ability to query and ascertain the state of the relationship, etc.

2.1 Simple ICE Scenarios

Two simple scenarios are used throughout this specification as the source for examples: syndication of news headlines from an online publisher to other online services, and syndication of a parts catalog from a manufacturer to its distributors.

2.1.1 Headline Scenario

An online content provider, Headlines.com, allows other online sites to subscribe to their headline service. Headlines.com updates headlines three times a day during weekdays, and once each on Saturday and Sunday. A headline consists of four fields: the headline text, a small thumbnail GIF image, a date, and a URL link that points back to the main story on Headlines.com.

Subscribers who sign up for the headline service can collect these headlines and use them on their own site. They display the headlines on their own site, with the URL links pointing back to Headlines.com. For an extra fee, subscribers may harvest the actual story bodies from Headlines.com and thus keep the traffic on their own site instead of linking back to Headlines.com.

2.1.2 Parts Scenario

A jet powered pencil sharpener manufacturer, JetSharp.com, wants to keep its distributors up to date with the latest parts and optional accessories catalog at all times. It is very important to JetSharp that its distributors always have easy access to the latest service bulletins, and also that they have the latest information about optional accessories and the corresponding price lists.

Each item in the JetSharp parts catalog consists of some structured data, such as price, shipping weight, and size, and also contains unstructured data consisting of a set of HTML files and GIF images describing the product.

The JetSharp catalog is huge, but, fortunately, changes fairly slowly over time.

2.2 Protocol Overview

The ICE protocol is a request/reply protocol that allows for fully symmetric implementations, where both the Syndicator and Subscriber can initiate requests.  The ICE protocol also allows for a Minimal Subscriber implementation where only the Subscriber can initiate requests (i.e., no agent that would be considered a "server" resides on the Subscriber machine).

There are several key concepts that form the foundation of the ICE protocol. They are introduced here, without regard to their spelling (i.e., how they appear in the protocol). The next chapter (3.0 Protocol Infrastructure) revisits these concepts, and more, with a complete description of the protocol format. But first it is important to understand the basic concepts.

2.2.1 Payloads, Requests, and Responses

ICE uses payload exchange as its fundamental protocol model, where a payload is defined for the purposes of this specification to be a single instance of an XML document formatted according to the ICE protocol definition (See Appendix A). The word payload was chosen simply because it is unusual and does not occur in ordinary casual writing; therefore, it can be carefully and unambiguously used throughout a specification.

Payloads can contain requests, responses or unsolicited messages. The unsolicited messages are used to support Minimal Subscriber implementations and will be explained in that context, later (see 2.2.4). A request is a message asking for the performance of an operation, and a payload is used to transmit the request. For example, when a Subscriber wishes to initiate a relationship by obtaining a catalog from a Syndicator, the Subscriber sends the Syndicator a payload containing a "get catalog" request. Similarly, a response is a message containing the results of an operation and a payload is also used to transmit responses.

2.2.2 Request/Response model

Every logical operation in ICE is described by a request/response pair. All operations are forced to fit this model; thus, a valid ICE protocol session always comprises an even number of messages when it is in the idle state (i.e., there is a matching response for every request).

There are a few operations in ICE that have no logical requirement for a response. Nevertheless, to preserve the nature of the request/response protocol, responses are returned anyway.

2.2.3 Subscriber/Syndicator, Requester/Responder, Sender/Receiver

The Subscriber and Syndicator assume several different roles during ICE protocol operations: Subscriber versus Syndicator, Requester versus Responder, and Sender versus Receiver.

The definition of Subscriber and Syndicator is based on the business relationships: the Syndicator distributes content to the Subscriber. These terms are capitalized throughout this specification wherever they refer specifically to the roles of the parties in an ICE relationship, as opposed to the general concepts of subscribing and syndicating.

The definition of Requester/Responder is based on who initiates the ICE operation. The initiator is the Requester, and the other party, who performs the operation, is the Responder. It is possible for a Syndicator to be either a Requester or a Responder, depending on the particular operation. The same is true for a Subscriber. For example, when a Subscriber initiates a "get catalog" request to a Syndicator, the Subscriber is the Requester. When a Syndicator initiates a "push package update" request to a Subscriber, the Syndicator is the Requester.

Finally, the concept of Sender and Receiver are used in this specification to describe the relationship with respect to the transmission of a single payload. A payload travels from Sender to Receiver (and this thus forms the definition of Sender and Receiver).

Note that an ICE operation inherently consists of a Request/Response pair. Thus, the Requester starts out being a Sender, sending a payload, containing a request, to the Receiver. The Receiver of this first payload is the Responder. When the Responder has performed the operation and wishes to return the results, the Responder becomes the Sender of a payload containing the response, and the initial Requester is now the Receiver.

2.2.4 Minimal Subscriber Implementation and Unsolicited Message

Due to the nature of the content syndication business, it is important for ICE to support Subscriber implementations of varying levels of sophistication. In the most general case, a Subscriber is a sophisticated server implementation capable of not only sending ICE requests, but also receiving communications initiated by the Syndicator at any time, such as the "push" of new content. That is, a "full" Subscriber has an ICE server running at all times. ICE also supports the concept of a Minimal Subscriber implementation. This is a Subscriber that can initiate communicates (e.g. polling for updates) but does not have a persistent server available to receive requests. A Minimal Subscriber is expected to be run on demand, either by a user or by an automated script.

Thus, in a Minimal Subscriber implementation, the Subscriber always initiates any communication, and therefore the Syndicator cannot initiate any communication to the Subscriber. In that case the Subscriber is always the Requester, and never the Responder. However, sometimes a Syndicator needs to initiate a message to a Subscriber. For example, the Syndicator might wish to send a "notify" message containing warning that the system will be down next week.

To support Minimal Subscribers and yet still allow Syndicators to initiate requests, ICE defines a mechanism called the Unsolicited Message mechanism. This mechanism supports sending ICE requests from a Syndicator to the Subscriber in a protocol communication initiated by the Subscriber.

As will be seen later when unsolicited messages are explained in detail, the unsolicited message mechanism is largely orthogonal to the primary ICE request/response protocol mechanism. It is defined as an additional set of message types that can be carried by payloads, and as such can be understood separately. See section 3.10, Unsolicited Message Operation for more details. For explanatory purposes, most of this specification ignores the implication of the unsolicited message mechanism when explaining how ICE works; section 3.10 then describes in detail how the unsolicited message mechanism interacts with the rest of ICE. It is important to note, however, that support for unsolicited messages is not optional; all ICE Subscribers and Syndicators MUST implement the unsolicited message mechanism as described in this specification.

2.3 Binding of ICE to HTTP

ICE uses XML document exchange as its fundamental protocol model. ICE messages are valid XML documents, with a single ice-payload root element (defined in detail later) and a structured hierarchy of tags describing the ICE operations and data.

This section describes the specifics of how ICE payload exchange is performed using HTTP.

2.3.1 Use of HTTP POST

To send an ICE/HTTP payload, the Sender performs an HTTP POST to a URL provided by the Receiver. ICE does not define the mechanism by which the Sender first obtains this URL; typically it will be communicated during a phone call, e-mail, or contract exchange when the two parties are establishing their initial relationship. It is expected that conventions for this URL will develop over time, in much the same way the convention of "http://www.domain-name" has developed for Web sites.

2.3.2 Mapping the ICE Request/Response Model to HTTP POST/Response

Every ICE logical operation begins with a Sender sending a request; typically this is the Subscriber initiating an operation to the Syndicator. In some cases, such as push delivery of packages, the Syndicator initiates the operation and is the Sender.

As will be shown in detail later, ICE requests are specified using an ice-request XML element, and ICE responses are specified using an ice-response element. For ICE/HTTP, the ice-request MUST be sent in an HTTP POST, and the ice-response to that request MUST be sent in the HTTP Response to that POST. Thus, a single ICE request/response pair always maps directly to a single HTTP POST/Response pair.

Operations involving package transmission can ask for an additional confirmation, i.e., a third message (request/response/confirmation). In that case the confirmation message is actually a separate request with its own response, so the physical realization of (request/response/confirmation) is actually (request/response/request/response). This will be explained in more detail in the confirmation section, for now it suffices to understand that a confirmation message is simply POSTed as another ice-request.

An example will help illustrate this. Consider package update: the Subscriber makes a "get package" request to the Syndicator, the Syndicator sends a "package" response, and if the Syndicator asks for confirmation then the Subscriber sends a second "confirmation" request.. In a pseudo-code representation of the protocol, the exchanges look like the following. Note, this is pseudo-code, it does not represent the actual protocol format. (The symbol, "==>", can be read as, "sends the following message to the" and the symbol, "<==",  can be read as "receives the following message from the"):

Package Update Example
(1) SUBSCRIBER ==> SYNDICATOR:
    HTTP POST:
      <ice-payload>
         <ice-request> 
           Get Package
         </ice-request>
      </ice-payload>


(2) SUBSCRIBER <== SYNDICATOR:
    HTTP Response to the POST:
      <ice-payload>
         <ice-response> 
            Package: X
            Confirmation Required
         </ice-response>
      </ice-payload>

This exchange of an ice-request and an ice-response occurs entirely within a single HTTP POST/Response transport level transaction.

Package Update Example
(3) SUBSCRIBER ==> SYNDICATOR:
    HTTP POST:
      <ice-payload>
         <ice-request> 
            Confirmation of Package X
         </ice-request>
      </ice-payload>


(4) SUBSCRIBER <== SYNDICATOR:
    HTTP Response to the POST:
      <ice-payload>
         <ice-response> 
         </ice-response>
      </ice-payload>

A confirmation message is a request that (logically) needs no response, other than the "acknowledge" necessary to maintain the request/response nature of the ICE protocol.

2.3.3 Multiple Requests in a Single Payload

ICE allows multiple requests or responses to be sent in a single ice-payload. This allows round trips to be minimized whenever possible. For example, a Subscriber with ten subscriptions to a single Syndicator can send all ten "get package" requests and receive all ten updates in a single HTTP POST/Response communication.

Four key restrictions about the multiple request/response model must be clearly understood:

  1. Placing multiple ice-request elements in a single ice-payload does not imply any ordering or transactional semantics. A Sender MUST assume the Receiver processes the requests in an arbitrary order, AS-IF each request had been sent separately in its own payload.
  2. A Sender MUST NOT mix ice-request elements and ice-response elements within a single ice-payload.
  3. The number of ice-response elements in a response payload MUST be the same as the number of ice-request elements in the initiating payload, with the sole exception to this rule being errors and conditions related to the entire payload, as explained in the discussion of 3xx Payload Level Status Codes in section 3.4.4 (Defined Status Codes).
  4. Each ice-response element in a response payload MUST be a response to an ice-request element in the initiating payload.
Package update responses can potentially be quite large; the above rules provide no relief from the possibility that asking for ten package updates would result in a response that is 900 megabytes in length (or longer). This problem can be called the Huge Response problem. ICE provides Syndicators with two mechanisms by which they can avoid causing the Huge Response problem: the use of external XML entities and/or the use of an ice-item-ref mechanism for transmitting package content external to the actual response. Whether or not a Syndicator chooses to use these mechanisms (and thus avoid causing the Huge Response problem) is a quality of implementation issue.
 
  Informational Note
  for historical reference
  As already noted, a single ice-payload always contains only one type of element: a number of ice-request elements (but no other types), a number of ice-response elements (but no other types), etc. This restriction simplifies ICE implementations, at the possible expense of lost opportunities to optimize protocol traffic. 

A more general model would allow arbitrary packing and a mixture of requests and responses into the HTTP POST/Response stream. This design was explicitly rejected because it imposes complexity on ICE implementations and makes it impossible to implement simple programs that create ICE/HTTP connections and perform simple operations. To see why this is so, consider an "ICE Ping" utility: 

  • Open a TCP connection 
  • POST an ICE nop message 
  • Read the HTTP Response, print it, and exit 
If arbitrary mixtures were permitted, the Ping utility might get a 900 megabyte package pushed at it when all it was expecting was a simple reply. The implication of the arbitrary mixture model on implementations is profound: all communication would have to be mediated through a message queue multiplexor/demultiplexer agent that can appropriately dispatch any mixed messages. In such an environment it becomes impossible to simply write a Perl script (for example) that creates a direct HTTP connection, sends a preformatted packet, and simply prints the response. 

The restrictions on requests and responses in single payloads in ICE were chosen to avoid this complexity. The ability to create simple implementations was considered more compelling than the ability to further optimize HTTP communication via arbitrary request/response mixing.

2.3.4 Content Type in HTTP Header

When ICE payloads are transmitted via HTTP, the Content Type MUST be application/x-ice.

3. Protocol Infrastructure

This section describes aspects of the ICE protocol that are common across all types of operations, whereas later sections of the document describe the specific operations themselves.

3.1 Syntax and Format

3.1.1 XML Syntax

ICE uses XML as the format for its payloads, and all ICE payloads MUST be formatted in accordance with the XML 1.0 specification [W3C-WD-xml]. Furthermore, ICE payloads MUST be well formed and MUST be valid according to the ICE DTD.

This document does not repeat the general rules for proper XML encoding; readers are expected to refer to the XML specification.

3.1.2 Generic Rules for Attribute Formats

ICE makes extensive use of XML attributes for representing values. The following requirements apply to the interpretation of attribute values:

3.2 Identifiers

ICE defines a number of identifiers.

3.2.1 Subscriber and Syndicator Identifiers

ICE uses globally unique identifiers for identifying Subscribers and Syndicators. The globally unique identifier for the Subscriber and Syndicator MUST conform to the Universal Unique Identifier defined by the Open Group [OG-UUID]. Note that if a given installation sometimes functions as a Subscriber and sometimes functions as a Syndicator then it MAY use the same UUID as its identification in both roles.

The UUID format as specified consists of 32 hexadecimal digits, with optional embedded hyphen characters. Per the requirements in the Universal Unique Identifier specification, ICE implementations MUST ignore all hyphens when comparing UUID values for equality, regardless of where the hyphens occur. Also, note that comparisons MUST be case insensitive.

3.2.2 Other Identifiers

As distinct from the Subscriber UUID and the Syndicator UUID, ICE does not define the format of other identifiers it specifies except for uniqueness constraints.  All other identifiers function as being unique only within a certain scope. For example, a subscription identifier is generated by a Syndicator when the relationship between a Subscriber and a Syndicator is first established. The identification string used for the subscription ID need only be unique within the domain of all subscription identifiers generated by that Syndicator for the Subscriber.

The table below describes each identifier in ICE, its scope, a description of where in an ICE payload the ID value is assigned, the role of the party that assigns the ID value, where this ID value is referenced, and finally, the section in the specification where the identifier is discussed.
 
 
Identifier Scope Where assigned By Whom Assigned ID Referenced By Section described in
Syndicator's UUID  Unique identifier of  a Syndicator  When ICE syndicator created   Entity wishing to use ICE to Syndicate Content. See 3.2.1 above  sender-id attribute on ice-sender element or receiver-id attribute on ice-receiver element (depending on role)  3.6.1, 3.6.2, 6.3
Subscribers UUID  Unique identifier of  a Subscriber  When ICE subscriber created  Entity wishing to use ICE to Subscribe to Content.  See 3.2.1 above.  sender-id attribute on ice-sender element or receiver-id attribute on ice-receiver element (depending on role)  3.6.1, 3.6.2, 6.3
payload ID  Unique across all payloads from a sender to a receiver  payload-id attribute on ice-payload element  Sender assigns.  See 3.5.2 payload-id attribute on ice-code element  3.4.2, 3.5.2
package ID  Unique across all packages within a subscription  package-id attribute on ice-package element  Syndicator assigns.  See 5.2.1 package-id attribute on ice-code, ice-package-state elements  3.4.2, 5.2.1, 5.5.2
request ID  Unique across all payloads from a sender to a receiver  request-id attribute on ice-request, ice-unsolicited-now elements  Sender assigns.  See 3.7.1 message-id attribute on ice-code element; request-id attribute on ice-event-msg element  3.7.1, 3.10.2, 6.3
response ID  Unique across all payloads from a  sender to a receiver  response-id attribute on ice-response element  Sender assigns.  See 3.7.2 response-id attribute on ice-event-msg element  3.7.2, 6.3
unsolicited request ID  Unique across payloads from a  sender to a receiver  unsolicited-request-id attribute on ice-unsolicited-request element  Syndicator assigns.  See 3.10.3 message-id attribute on ice-code element; request-id attribute on ice-event-msg  3.10.3, 6.3
unsolicited response ID  Unique across payloads from a sender to a receiver  unsolicited-response-id attribute on ice-unsolicited-response element  Subscriber assigns.  See 3.10.4 response-id attribute on ice-event-msg  3.10.4, 6.3
subscription ID  Unique across subscriptions from a Syndicator to a Subscriber  subscription-id attribute on ice-subscription element  Syndicator assigns.  See 4.3.1 and 4.6.3 subscription-id attribute on ice-cancel, ice-change-subscription, 
ice-get-events, ice-get-package, ice-get-sequence, ice-get-status, ice-repair-item, ice-send-confirmation, ice-cancellation, ice-events, ice-sequence, ice-subscription, ice-offer, ice-package, ice-event-msg elements 
4.3.1, 4.6.1, 4.6.2, 4.6.3. 5.2.1. 5.3, 5.5.1, 5.5.2, 5.5.3, 6.2, 6.3
cancellation ID (see note in 4.6.1 Unique across all cancellations  cancellation-id attribute on ice-cancellation element  Responder assigns.  See 4.6.1 Not referenced deprecated 4.6.1
package sequence ID  Unique across all packages of a subscription, or "ICE-INITIAL" or "ICE-ANY"  new-state attribute on ice-package element  Syndicator assigns.  See 5.1.3 current-state attribute on ice-get-package, ice-get-sequence, ice-repair-item, ice-subscription, elements; old-state attribute on ice-package element  5.1.3
item ID  Unique across items in a package  item-id attribute on  ice-item, ice-item-ref elements  Syndicator assigns. See 5.2.2.1 Not referenced  5.2.2.1
subscription element ID  Unique within a subscription  subscription-element attribute on ice-item, ice-item-ref, ice-item-group elements  Syndicator assigns. 
See 5.2.2.1
subscription-element attribute on ice-repair-item, ice-item-remove elements  5.2.2.1, 5.2.2.2, 5.2.2.3, 5.2.3
item group ID  Unique across all group-items in a package  item-group-id attribute on ice-item-group element  Syndicator assigns. 
See 5.2.2.3
Not referenced  5.2.2.3
extension UUID Universally Unique Extension identifier UUID attribute on ice-extension element  Syndicator or Subscriber assigns. See 4.5.5 (ice-extension) ICE application processor uses UUID to obtain an extension. 4.5.5 8.4.1
offer ID Unique within the catalog of offers made by a Syndicator to a Subscriber. offer-id attribute on ice-offer element  Syndicator assigns. ICE processor MAY use it to verify received offers. 4.3.2
ID Payload-wide (XML document) unique identifier id attribute on ice-access, ice-negotiable, ice-range, ice-range-define, ice-span, ice-span-max, ice-span-min, ice-span-point, ice-default-value, ice-enum, ice-enum-item, ice-limit and ice-extension elements  Syndicator or Subscriber assigns. See 4.5  ref attribute on ice-access, ice-span, ice-default-value, ice-span-max, ice-span-min, ice-span-point, ice-enum, ice-enum-item, and ice-limit 5.2.2.2
4.5.2
4.5.3
4.5.4

Many attributes in ICE contain as values the identifiers described above and use them to track and signal specific states in the syndication relationship.  The table below describes the attributes that contain the identifiers described in the table above.
 
Attribute containing an
Identifier
Identifier Contained Spec. Reference
sender-id Syndicator's UUID or Subscribers UUID  3.5.1
receiver-id Syndicator's UUID or Subscribers UUID  3.5.2
message-id request-id or response-id  3.3.2
old-state package-sequence-id  5.1.4
new-state package-sequence-id  5.1.4
current-state package-sequence-id  5.3
sequence-id package-sequence-id  5.5.2
other-id Syndicator's UUID or Subscribers UUID  6.3
ref element identifier to access and use previously defined elements such as ice-span, ice-span-max, ice-span-min, ice-span-point, ice-default-value, ice-enum, ice-enum-item or ice-limit 4.5.2
4.5.3
4.5.4

3.3 Dates and Times

This section describes the date and time format used by ICE in all contexts where a parse-able date is required. The format shown here is a selected profile of options from ISO8601:1988 (with Technical Corrigendum 1 applied), hereinafter referred to as [ISO8601].

3.3.1 ICE Date Format

The format for a date string in ICE Date Format is:
   CCYY-MM-DD
where CCYY is the four digit year (century and year, as described in [ISO8601]), MM is a two digit month number, DD is the two digit ordinal number of the day within the calendar month, and the separator character is a "-" (hyphen). This format is the Extended Format described in [ISO8601] section 5.2.1.1, with the separator as described in [ISO8601] section 4.4, and ICE implementations MUST use this format for all date strings specified as being in ICE Date Format.

Note that specifying a Date without a time rarely makes sense because of time zones (without a time attached to a Date it is hard to know exactly what the Date really means); see 3.3.5 for how to specify both in an ICE DateTime format. No fields defined by ICE have been defined to be "naked" dates; ICE always uses the DateTime format.

3.3.2 ICE Time Format

The format for a time string in ICE Time Format is:
    hh:mm:ss
where hh is the two digit hour in 24 hour notation ranging from 00 to 24 (this is not a typo), mm is the two digit minute ranging from 00 to 59, ss is the two digit seconds ranging from 00 to 59, and the separator character is a ":" (colon). Note that ISO8601 and UTC support  leap seconds, therefore implementations are required to support 60, 61 and 62 seconds.  This format is the Extended Format described in [ISO8601] section 5.3.1.1, with the separator as described in [ISO8601] section 4.4, and ICE implementations MUST use this format for all time strings specified as being in ICE Time Format.

Midnight has two Representations
  00:00:00 (midnight behind or current)
  24:00:00 (midnight ahead -- i.e. 00:00:00 tomorrow )  

Note alternatively, that 00:00:00 on one day is the same time as 24:00:00 on the previous day. This is deliberate, and in accordance with [ISO8601] section 5.3.2.

3.3.3 Sub-second Resolution

ICE Time Format for representing sub-second granularity follows [ISO8601] section 5.3.1.3, and thus uses a "," (comma) separator and an arbitrary number of digits representing the fraction down to whatever level of precision is appropriate. Thus, the format for time with sub second resolution is:
    hh:mm:ss,s
where the "," (comma) is a literal character ([ISO8601] separator) and s after the comma is "to the right of the decimal mark" and symbolizes the sub second value. The number of digits in the sub second value, and the precision of the sub second value, and the ability of a given implementation to honor that precision, are quality of implementation issues and are not specified by ICE. Implementations MUST properly parse sub second values up to at least 9 digits. Note that this does not imply the ability to actually resolve time down to the nanosecond; it merely implies the ability to read such a time stamp and then process it as best as the implementation can. Implementations SHOULD properly parse fractions with an arbitrary number of digits in the sub second value.

3.3.4 Time Zones

All times specified within ICE MUST be specified using Coordinated Universal Time (UTC). Implementations are expected to translate these times into the appropriate local time presentation format before interacting with users.

3.3.5 ICE Date and Time Format

When a Date and Time need to be specified in a single string, the ICE Date and Time format is:
    CCYY-MM-DDThh:mm:ss,s
where "T" (upper case letter T) is a literal character ([ISO8601] designator). This format is the Extended Format of calendar date and time of day as described in [ISO8601] section 5.4.1 clause (a).

Senders MUST NOT specify invalid combinations of fields, such as February 31. Receivers SHOULD reject invalid combinations of fields, rather than trying to interpret them.

3.3.6 ICE Duration Format

When a period of time needs to be specified, the ICE Duration format is:
    PnS
where the "P" (upper case letter P) is a literal character ([ISO8601] designator), "n" is an arbitrarily large integer value, and "S" (upper case letter S) is a literal character. This format denotes a number of seconds. It is a specific profile of the choices available in [ISO8601] section 5.5.3.2; note that the alternative format restrictions (5.5.3.2.1) are not used by ICE. Implementations are expected to translate this representation into a more appropriate form before interacting with users.

To describe a period of time with sub second granularity, the format is:

     Pn,nS
i.e., using the same sub second granularity syntax as described in 3.2.3 above.

All periods of time described as being in ICE Duration Format in ICE MUST be specified in either the PnS or Pn,nS format.

Note that long periods of time are represented by large quantities of seconds in the above formats. For example, a period of one day is P86400S. It is expected that implementations will translate these time periods into a more familiar form as part of their user interfaces.

3.4 Status and Error code formats

ICE uses the familiar Internet protocol paradigm of three digit status values in responses to protocol operations. This paradigm was chosen because it is well understood and is suited to both machine to machine communication and human interpretation.

3.4.1 No HTTP Relationship

There is no relationship between the status codes in ICE and the status codes at the HTTP transport level. As already described above, HTTP is merely the transport mechanism for ICE payloads, and any ICE implementation MUST appropriately handle HTTP status or error conditions at the transport level. For example, if a Subscriber encounters an HTTP level redirect (3XX code), the Subscriber MUST honor it. The semantics of completing the HTTP transport operation do not affect the semantics of the ICE operations, as defined by the exchange of payloads, in any way.

Throughout the rest of this discussion, an HTTP status of "200 OK" is implicit for the transport of the ICE payloads.

3.4.2 Status Code Format

The format of status codes is described by the following DTD fragment:
 
ice-code format
<!ELEMENT ice-code  (#PCDATA)      > 
<!ATTLIST ice-code 
          numeric     CDATA #REQUIRED 
          phrase      CDATA #REQUIRED 
          payload-id  CDATA #IMPLIED 
          message-id  CDATA #IMPLIED 
          package-id  CDATA #IMPLIED 
          xml:lang    CDATA #IMPLIED 
>

An example would be:

Ice-code example.
  <ice-code 
        numeric="402" 
        phrase="Not well formed XML"
        message-id="1998-07-01T11:34:10@nr3.com-1"
  >
  Your XML contained overlapping elements.
  Here is the offending fragment: 
       &lt;a&gt;&lt;b&gt;cdefg&lt;/a&gt;&lt;/b&gt;
  </ice-code>

The attributes are:

3.4.3 Body

The body of the ice-code element is free-form text (#PCDATA) and can be used by implementations to report human readable descriptions. It has no semantics in ICE.

Implementation note: it is very important to properly escape any fragments reported in the body of the ice-code. See, for example, the example shown in 3.4.2. Note in particular that XML and HTML (and, more generally, any text containing angle brackets and other syntactically significant characters) must be properly escaped.

3.4.4 Defined Status Codes

The defined status codes are shown below. Each bullet item contains the three digit numeric value, the corresponding phrase, and a description in italics. Note that the description in italics is part of the explanation and not part of the status message.

When generating codes:

When receiving codes:

The status values defined by ICE are:

2xx: Success

3xx: Payload level Status Codes

These indicate something about the ice-payload itself, as opposed to the individual requests and responses within the payload. These codes have one very explicit and important semantic: they are used when the payload could not be properly interpreted, meaning that even if there were multiple requests in the payload, there will be only one ice-code in the response. For example, if the payload had been corrupted, it might be so corrupted that it isn't even possible to determine how many requests it contains, let alone respond to them individually.

The specific codes are:

4xx: Request level Status Codes

These indicate errors caused by an inability to carry out an individual request. Note that in some cases there are similar errors between the 3xx and 4xx class; the difference is whether or not the error is supplied as a single, payload level error code (3xx) or whether it is supplied as a prerequisite code.