Info Bite List Specification
Version 1.3 - 4/17/2004
© 2004 Antone Roundy
  1. Mission Statement
  2. General
    1. Design Philosophy
    2. Namespace
    3. Filename Extension
    4. MIME type
    5. Common Attributes
      1. type
      2. mode
      3. xml:lang
      4. xml:base
    6. Duplicate Elements
    7. Default Character Set
    8. Profiles
    9. Sample Documents
    10. Format of Element Explanations
  3. Global Elements
    1. generator
    2. interval
    3. link
    4. profile
    5. role
      1. email
      2. fax
      3. ibl
      4. name
      5. nick
      6. tel
      7. website
    6. skipday
    7. skiptime
    8. Defaults
      1. defif
      2. defifno
      3. defsetval
      4. defgetval
      5. defsetattr
      6. defgetattr
  4. Channel Elements
    1. channel
    2. category
    3. copyright
    4. date
    5. description
    6. media
      1. copyright
      2. description
      3. height
      4. link
      5. size
      6. width
    7. rating
    8. tagline
    9. textinput
      1. content
      2. label
      3. submit
    10. title
  5. Item Elements
    1. item
    2. category
    3. content
    4. copyright
    5. date
    6. link
    7. media
    8. role
    9. summary
    10. textinput
    11. title
  6. Revision History
I. Mission Statement:
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.

II. General:
Info Bite List is an XML-based content syndication format similar to RSS and Atom, and in fact, many concepts were adapted or borrowed directly from them. As the name suggests, it is geared toward the publishing of lists of bites of information. However, it could as easily be used to publish full content.

A. Design Philosophy
The guiding principles behind the development of the format are:

B. Namespace
The namespace name for Info Bite List 1.3 is "http://dtd.geckotribe.com/ibl/1.3/". Note that at present, there is no DTD at the address, and in fact, the subdomain doesn't even exist as of the writing of this document! By convention, the namespace prefix for an Info Bite List is "ibl", and the Info Bite List namespace is the default namespace. Thus, the opening tag for an Info Bite List file will usually be:

<ibl version="1.3" xmlns="http://dtd.geckotribe.com/ibl/1.3/">

C. Filename Extension
The standard filename extension for an Info Bite List is .ibl.

D. MIME type
The MIME type (not yet official) for an Info Bite List is application/xml+ibl.

E. Common Attributes
Any element with a value MAY specify type and mode attributes as follows. These apply only to the value of that element, and not to its other attributes or descendents. xml:lang and xml:base apply more broadly, as noted:

F. Duplicate Elements
In many cases where more than one of a particular element are allowed, the following restrictions and recommendations apply. All such elements link to this section. The following does not apply to any element whose description does not link to this section. G. Default Character Set
As specified in the XML standard, the default character set is UTF-8. If any other character set is to be used, it must be specified in the text declaration at the top of the document.

H. Profiles
Profiles are a method of standardizing subsets of a standard to describe standard usage and so that tools may be built which do not support the full standard, but do support a commonly used portion of it. They may also require elements not included in the standard, but these MUST have their own namespaces. For example, a profile may be created for Info Bite List which includes everything in the standard except for the defaults section. Such a profile might be called "nodefaults". Software that supports the nodefaults profile would then have a recognized name to refer to its level of support of the standard.

Standard profiles for Info Bite List will come in two varieties: base profiles and additive profiles. As profiles are created for Info Bite List, a list of recognized profiles with links to their full descriptions will be hosted on the Info Bite website.

Base profiles will specify a complete set of elements from the standard which are supported, and may place restrictions on how some of them are used. For example, a particular profile may specify that content may only be encoded in the xml mode (not escaped or base64). (Note that a profile MAY NOT change the default encoding (otherwise, the resulting feeds would be incompatible with the standard), so if, for example, all content had to use the xml mode, the mode would have to be specified for every element with content, or defaults would have to be used to set the mode to xml.)

Additive profiles will be used to add particular elements to other profiles, and optionally specify restrictions on the use of the elements they add. Additive profiles may also be used as subtractive profiles to remove elements from other profiles. The method for doing this is described below. Restrictions set in additive profiles override restrictions imposed by base profiles. Multiple additive and subtractive profiles may be combined with a base profile as long as there are no conflicts between the additive and subtractive profiles.

Profile naming: Profile names may include letters, digits, underscores and periods. Profile names MUST be added to the central list to reserve their names before they can be considered authoritative. In the event that a profile is poorly named, a name change may be required before it is added to the list. Each profile name (with the exception of the "full" profile, which indicates support for the full standard) will include a version number at its end, connected with a plus sign. An additive profile is changed to a subtractive profile by prepending its name with a minus sign.

Restrictions: All profiles MUST support the ibl, channel, channel title, item, and profile elements.

See the profile element for details regarding how profile names may be used within an Info Bite List.

I. Sample Documents

J. Format of Element Explanations
The explanations of the various elements that appear in an Info Bite List are formatted as follows:

element name Where and how many times the element may appear*
Notes about the element.
* Note: "File" means as a child of the outermost ibl element. Everything else is the name of an element which this element can be a child of.

value: An explanation of the value of the element (the data the appears between the opening and closing tags). We recommend specifying elements marked "value: none" as empty elements, ie., like <elementName attributes="" ... />
attributes:
required element Where and how many times the element may appear
Notes that required elements that are children of optional elements are only required if the parent element exists.

III. Global Elements:
A number of elements can exist as children of the ibl element. These are referred to as global elements. All of these elements may also appear as children of channel elements, and some as children of items, as specified. When an element appears at multiple levels, the latter may override the former.

All global elements MUST appear before the first channel element.

The global elements are as follows:
generator File, channel: <=1
value: A string representing the agent that created the channel.
attributes: none
interval File, channel: <=2
value: A number of minutes. Only one with each "rel" value is allowed.
attributes:
link Global, channel, item: >=0
A link to another resource.

value: [OPTIONAL] The value of this tag is the text of the link when rendering it as HTML. If omitted, the client may choose what to render as the text of the link. For example, it could use the title attribute, the channel or item title, or whatever seems most appropriate under the circumstances.
attributes:
profile Global, channel: <=1
This is an informational element to help people and perhaps software agents discover which portions of this specification and perhaps which extensions to it a particular file or feed uses. It will be useful for people looking at the raw feed to know whether their software will be able to handle the feed, and may be useful to software agents to put them in a particular processing mode based on how the feed claims to be structured. It is an error to specify a profile to which one does not conform.

value: A space-separated list of profiles to which this file or feed conforms. The list must include at least one base profile.
attributes: none
role File, channel, item: >=0
Role elements specify persons or other entities which played the specified role in the production of the file, channel or item. Outside of an item, rel MAY be omitted. In this case, the role does not apply at the file or channel level, but is specified simply to make it available for reference by an enclosed channel or item.

When a role defined elsewhere is referenced by id, if rel is specified, it overrides the rel specified where the role is defined.

A role MUST have at least one child element unless it is a reference to another role.

If more than one of a particular child exists for a single role (for example, more than one email address), they SHOULD be listed in decending order of importance. User agents MAY render less than all of the children of a particular type, but if they do, they MUST omit from the bottom up.

value: none
attributes:
email Role: >=0
value: an email address
attributes: none
fax Role: >=0
value: a facimilie number
attributes: none
ibl Role: >=0
value: the URL of an Info Bite List associated with the individual or organization
attributes: none
name Role: <=1
value: the real name of the individual or organization
attributes: none
nick Role: >=0
value: a nickname for the individual or organization
attributes: none
tel Role: >=0
value: a telephone number
attributes: none
website Role: >=0
value: a website URL
attributes: none
skipday File, channel: >=0
Days on which clients should not load the file or channel.

value: none
attributes: Skipday MAY have skiptime child elements specifying the time periods on the specified day during which the file or channel should not be loaded. If a timezone is specified, skiptimes are expressed in that timezone. If a skiptime period spans midnight, it may not all be part of the same day of the week. If no skiptimes are specified, the entire day should be skipped.
skiptime File, channel, skipday: >=0
Time periods during which clients should not load the file or channel.

value: none
attributes:
Defaults:
The remainder of the global elements are parts of a system for specifying default values for elements and their attributes. The use of defaults is optional, but can be useful in reducing the size of your data. Defaults are undoubtably the most complex part of the Info Bite List specification. You may wish to refer to the sample document to help you understand their usage.

Addressing Elements and Attributes:
A subset of XPath is used to address elements and their attributes in the "name" and "source" attibutes of some of the following. Only the following parts of XPath may be used:

When defaults elements appear outside of any channel, the initial "context node" is the enclosing ibl element, so "ibl" will not need to be part of any "name" or "source" attributes. When they appear inside a channel, the initial context node is the enclosing channel element, and thus "channel" will not need to be part of any "name" or "source" attributes.

If defaults defined outside of a channel conflict with defaults defined inside a channel, the defaults defined inside the channel override those set outside the channel. Only the conflicting setting is overridden, and the override ends at the end of the channel.

Defaults MUST NOT be used to set the value of xml:base or xml:lang attributes.

One quick example:

role[@rel='author']/name/node()

The above refers to the real name of the author.

defif File, channel, defif: >=0
Indicates an element to test for the existance of. If it exists, its child elements are processed.

value: none
attributes:
defifno File, channel, defif, defifno: >=0
Defifno is the opposite of defif: it tests for the non-existance of a particular element.

value: none
attributes:
defsetval defifno: <=1
Defsetval creates the element named by the name attribute of the parent defifno element. Defsetval cannot appear immediately inside defif, because the element will already exist--it does not override the value of an existing element.

value: The value to use for the element being created.
attributes: None.
defgetval defifno: >=0
Defgetval creates the element named by the name attribute of the parent defifno element, if the source is found. If the source is not found, the element is not created (in which case, another defgetval or defsetval could follow). It indicates an element or attribute whose value will be used as the value for element being created. Defgetval cannot be used immdiately inside defif, because the element will already exist.

value: none
attributes:
defsetattr defif, defifno: >=0
Defsetattr sets an attribute to the specified value in the element named by the name attribute of the parent defif or defifno element if it is not already set. If the attribute is already set, it is not modified. If the element does not exist (in the case of a defifno), the element is created.

value: none
attributes:
defgetattr defif, defifno: >=0
Defsetattr sets an attribute to a value which it gets from the location indicated, if it is not already set. If the source is not found, the attribute is not created (so another defgetattr or defsetattr for the same attribute could follow). If the attribute is already set, it is not modified. If the element does not exist (in the case of a defifno), the element is created.

value: none
attributes:
IV. Channel:

Any global element may appear as a child of a channel element. All item elements MUST appear after all other elements which are children of the channel.

channel File: >0
A channel defines an "Info Bite List".

value: none
attributes:
category Channel, item: >=0
value: An arbitrary category name or a value meaningful in the specified domain, if any.
attributes:
copyright Channel, item, media: <=1
value: Text describing copyrights to the channel or item.
attributes: none
date Channel, item: <=4
value: The value may either be a UNIX timestamp (in UTC time) or a W3C Date-Time string.
attributes:
description Channel: >=0
value: A description of the channel. Unlike RSS, brief taglines should go in the "tagline" element rather than here. This element is for longer descriptions.
attributes: none

See Duplicate Elements for requirements and recommendations for including multiple descriptions.
media Channel, item: >=0
Media points to an object intended to be rendered with the channel or item, for example, and image, video or sound file. It's child elements are listed below.

value: none
attributes:
copyright Channel, item, media: <=1
See channel copyright for details.
description Media: <=1
value: A description of or caption for the media object.
attributes: none
height Media: <=1
value: The height in pixels of the media object.
attributes: none
link Media: >=0
attributes: See link for details of the value and other attributes.
size Media: <=1
value: The size in bites of the media object. This value is advisory and should not be depended upon to be accurate.
attributes: none
width Media: <=1
value: The width in pixels of the media object.
attributes: none
rating Channel: <=1
value: A value meaningful in the specified domain.
attributes:
tagline Channel: >=0
value: A tagline introducing the channel.
attributes: none

See Duplicate Elements for requirements and recommendations for including multiple taglines.
textinput Channel, item: >=0
A form which clients may use to sumbit text for whatever purpose you desire. The child elements of textinput are described below.

value: none
attributes:
content Textinput: <=1
value: Any explanitory or other related text to display with the textinput. This is NOT default contents for the textinput.
attributes: none
label Textinput: <=1
value: A textual label to show with the textinput.
attributes: none
submit Textinput: >=0
A submit button. If omitted, the client should render a button saying something to the effect of "submit".

value: none
attributes:
title Channel: >=1
value: Text naming the channel.
attributes: none

See Duplicate Elements for requirements and recommendations for including multiple titles.
V. Item Elements:

item Channel: >=0
It may seem strange that item is optional, but there are cases where there will be no items. For example, queries using the Info Bite API may result in channels with no items, and if an Info Bite List only contains items posted within a particular timeframe, it may be empty.

value: none
attributes:
category Channel, item: >=0
See channel category for details.
content Item: >=0
value: The full content of the item. The format of the content element MAY differ from the format of the target of the "full" link (for example, plain text in content with a link pointing to an HTML page), but the content MUST be the same. If the item only summarizes what it links to, the summary element MUST be used instead. attributes: none

See Duplicate Elements for requirements and recommendations for including multiple content elements.
copyright Channel, item: <=1
See channel copyright for details.
date Channel, item: <=4
See channel date for details.
link Channel, item: >=0
See channel link for details.
media Channel, item: >=0
See channel media for details.
role File, channel, item: >=0
See global role for details.
summary Item: >=0
value: A summary of the full content of the item. An item with a summary MUST have a "full" link and/or contain full content in the content element.
attributes: none

See Duplicate Elements for requirements and recommendations for including multiple summaries.
textinput Channel, item: >=0
See channel textinput for details.
title Item: <=1
See channel title for details. Note that an item title is optional, while a channel title is required.
VI. Revision History:
Date Revision Notes
4/17/21004 1.3 • Use @ref to reference one role from another (rather than @id).
• Use @src to point to media items (rather than @href).
• Removed support for @type="multipart/alternative", instead allowing multiples of certain elements, with some restrictions.
• Added @method to textinput.
• Clarified the purpose of and added requirements for the summary and content elements.
3/31/2004 1.2 • Specified behavior when defaults conflict.
• Restricted defaults from setting xml:base and xml:lang.
• Specified the base URI to use when xml:base is not specified.
• Added "introspection" as a legal rel value for link elements.
• Moved link to the global section.
• Added the profile element.
3/20/2004 1.1 • Changed the default mode to escaped.
• Added xml:base support.
• Removed the rolespec element and replaced it with elements corresponding to the legal values for the rel attribute.
• Removed the guid element (use <link rel="self">).
3/18/2004 1.0.1 • Changed the name of the "type" attributes of the link and media elements to mediatype.
• For link, this was necessary to resolve a conflict between the common type attribute, which specifies the MIME type of the element's value, and the link type attribute which specifies the MIME type of the object linked to.
• For media, this change was made for consistency with link.
• Added clarifications of various points.
2/12/2004 1.0 • Modified defaults to use XPath syntax.
• Replaced language element with xml:lang attribute.
• Fixed error in allowed quantities of various elements.
• Added clarifications.
2/11/2004 0.9 • Original specification