I sat down this morning and composed version 1 of the mission statement for Info Bite List (the Info Bite file format):

"Info Bite List enables the publication and flexible use of collections and lists of data of many kinds while minimizing bandwidth requirements and promoting interoperability and flexibility through an extendable, XML-based format."

Perhaps some of that could use a little explanation:

* "Info Bite List": as opposed to the Info Bite API (which I've thought about, but haven't started working on yet).

* "flexible use": Like other syndication formats, the data is broken down into semantically tagged units--the various elements--which the client may present as desired, rather than imposing a particular presentation as is done with a web page.

* "collections and lists": An item is a collection of closely related data, potentially of different types. A channel is a list of items.

* "minimizing bandwidth requirements": By specifying defaults for many items, making many elements and attributes optional, and specifying a mechanism for defining default values, Info Bite List aims to enable the smallest possible representation of the data (in an uncompressed, reasonably readable, XML format).

* "promoting interoperability and flexibility through an extendable, XML-based format": Info Bite List is a namespaced format which may be extended as needed with additional modules. The Info Bite API will be one such module.

I've been working on the spec for a few days, and am almost ready to release it. I figured out the defaults mechanism. It is the most complex part of the spec, but I think I came up with a pretty good way to make it as simple as possible without compromising it's power. Here's a quick example, which specifies that by default, all item content (like "description" in RSS) is formatted as escaped HTML:

<defif name="ibl channel item content">
<defsetattr attr="type" value="text/html" />
<defsetattr attr="mode" value="escaped" />
</defif>

The first line means "if we find a content element in an item in a channel in an ibl (info bite list), apply the following defaults to it". The second and third lines indicate statically-defined default values for attributes (defgetattr would have gotten the value of the attribute from another element and used it as the default, and likewise, defsetval and defgetval would have indicated default element values, either statically or from another element respectively). The above code indicates that the default value of the "type" attribute is to be "text/html", and the default value of the "mode" attribute is to be "escaped". For now, see the Atom spec for more information about those.

I can't wait to build Atom, RSS 2.0 and IBL versions of a few sample feeds and compare sizes! Fun!