RSS 0.91 Specification
Archivist's Note: This is the RSS 0.91 specification published by UserLand Software on June 9, 2000. The current version of the RSS 2.0 specification is available at this link and other revisions have been archived.
6/9/00: Minor changes and clarifications in response to feedback.
For a political introduction to this specification, see Scripting News for 6/7/00.
A brief history of RSS with pointers.
In December 1997, UserLand began offering Scripting News syndicated in XML, as a public Web resource. Other sites adopted the format, known as <scriptingNews> format.
In March 1999, Netscape opened My.Netscape.Com, based on an XML syndication format known as RSS 0.9.
In April 1999, My.UserLand.Com opened, an aggregator that processed RSS 0.9 content.
In May 1999, My.UserLand.Com supported <scriptingNews> 2.0b1 format.
In July 1999, Netscape introduced RSS 0.91, incorporating most of the features of <scriptingNews> 2.0b1. At the same time My.UserLand.Com supported RSS 0.91.
In December 1999, UserLand shipped the Manila content management system with built-in support for <scriptingNews> 2.0b1.
In March 2000, O'Reilly's aggregation engine, Meerkat, opened, reading all the above formats.
In April 2000, UserLand added built-in RSS 0.91 support to all Manila-authored sites.
In June 2000, after a year of active deployment, we've learned a lot about RSS, there are lots of ideas in the community for its evolution, and the ideas are maturing. Editorial tools have improved a lot in the last year, further innovations are possible in the near future.
But we lack a firm foundation to build on, the only specification we have for RSS is on the Netscape website, and it's not being maintained, as far as we know.
Therefore, this document is explains RSS as it's currently practiced.
Will RSS remain as-is, to be superceded by new formats? Or will RSS evolve, and if so, how will that happen? We now have at least three 24-by-7 aggregation engines, and a thousand RSS sources. Because RSS is a simple format, and because the community is relatively tight-knit, it seems possible that we could make improvements without disrupting the flow.
It may be helpful to refer to the My.UserLand rendering of its RSS file to see how the XML can be turned into something browsable.
There is no consensus on what RSS stands for, so it's not an acronym, it's a name. Later versions of this spec may say it's an acronym, and hopefully this won't break too many applications.
RSS is dialect of XML. All RSS files must conform to the XML 1.0 specification, as published on the World Wide Web Consortium (W3C) website.
At the top level, a RSS document is a <rss> element, with a mandatory attribute called version, that specifies the version of RSS that the document conforms to.
Subordinate to the <rss> element is a single <channel> element, which contains information about the channel (metadata) and its contents.
Following are the required elements of a <channel>.
<title> -- The name of the channel. It's how people refer to your service. If you have an HTML website that contains the same information as your RSS file, the title of your channel should be the same as the title of your website. Maximum length is 100 characters.
<link> -- A URL pointing to the website named in the <title>. Maximum length is 500 characters.
<description> -- A phrase that describes your channel, your channel's positioning statement. Maximum length is 500 characters.
<language> -- Indicates the language your channel is written in. This allows aggregators to group all Italian language sites, for example, on a single page. A list of allowable values for this element is here.
<image> -- An XML element that contains several sub-elements, explained here.
<copyright> -- Copyright notice for content in the channel. Maximum length is 100.
<managingEditor> -- The email address of the managing editor of the channel, the person to contact for editorial inquiries. Maximum length is 100. The suggested format for email addresses in RSS elements is email@example.com (Bull Mancuso).
<webMaster> -- The email address of the webmaster for the channel, the person to contact if there are technical problems. Maximum length is 100.
<rating> -- The PICS rating for the channel. Maximum length is 500.
<pubDate> -- The publication date for the content in the channel. For example, the New York Times publishes on a daily basis, the publication date flips once every 24 hours. That's when the pubDate of the channel changes. All date-times in RSS conform to the Date and Time Specification of RFC 822.
<lastBuildDate> -- The date-time the last time the content of the channel changed.
<docs> -- A URL, points to the documentation for the format used in the RSS file. It's probably a pointer to this page. It's for people who might stumble across an RSS file on a Web server 25 years from now and wonder what it is. Maximum length is 500.
<textInput> -- An XML element that contains several sub-elements, explained here.
<skipDays> -- An XML element that contains up to seven <day> sub-elements whose value is Monday, Tuesday, Wednesday, Thursday, Friday, Saturday or Sunday. Aggregators may not read the channel during hours listed in the skipDays element. (Most aggregators seem to ignore this element.)
<skipHours> -- An XML element that contains up to 24 <hour> sub-elements whose value is a number between 1 and 24, representing a time in GMT, when aggregators, if they support the feature, may not read the channel on days listed in the skipHours element. (Most aggregators seem to ignore this element.)
<url> is the URL of a GIF, JPEG or PNG image that represents the channel. Maximum length is 500.
<title> describes the image, it's used in the ALT attribute of the HTML <img> tag when the channel is rendered in HTML. Maximum length is 100.
<link> is the URL of the site, when the channel is rendered, the image is a link to the site. (Note, in practice the image <title> and <link> should have the same value as the channel's <title> and <link>. Maximum length is 500.
Optional elements include <width> and <height>, numbers, indicating the width and height of the image in pixels. <description> contains text that is included in the TITLE attribute of the link formed around the image in the HTML rendering.
Maximum value for width is 144, default value is 88.
Maximum value for height is 400, default value is 31.
A channel may contain any number of <item>s, each of which links to a story, with an optional description.
<title> is the title of the story. Maximum length is 100.
<link> is the URL of the story. Maximum length is 500.
<description> is the story synopsis. Maximum length is 500.
<title> -- The label of the Submit button in the text input area. Maximum length is 100.
<description> -- Explains the text input area. Maximum length is 500.
<name> -- The name of the text object in the text input area. Maximum length is 20.
<link> -- The URL of the CGI script that processes text input requests. Maximum length is 500.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and these paragraphs are included on all such copies and derivative works.
This document may not be modified in any way, such as by removing the copyright notice or references to UserLand or other organizations. Further, while these copyright restrictions apply to the written RSS specification, no claim of ownership is made by UserLand to the format it describes. Any party may, for commercial or non-commercial purposes, implement this protocol without royalty or license fee to UserLand. The limited permissions granted herein are perpetual and will not be revoked by UserLand or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and USERLAND DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.