The version documented in this section is based on the Userland document of April 2000 (currently found at http://backend.userland.com/rss091). Its author, Dave Winer, did not invent any new practices with this specification, but he did codify RSS in a far more precise way than the Netscape original (at http://my.netscape. com/publish/formats/rss-spec-0.91.html), based on common practice at the time. Primarily, the new codification imposed limits on the number of characters allowed within each element.
The only major difference between the Userland spec and the original Netscape write-up is that the Userland version lacks a document type definition (DTD) declaration. In fact, Netscape RSS 0.91 is the only RSS version with an official DTD, so most RSS parsers are used to dealing without one. Including the declaration is therefore a matter of personal preference (though it must be noted that useful character entities such as ™ cannot be used without it). Example 4-1 provides a DTD declaration for those who wish to use one.
Example 4-1. The top of an RSS 0.91 document, with a DTD declaration
<?xml version="1.0"?> <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> <rss version="0.91">
4.1.1 The Basic Structure
The top level of an RSS 0.91 document is the <rss version="0.91"> element. This is followed by a single channel element. The channel element contains the entire feed contents and all associated metadata.
4.1.2 Required channel Subelements
There are five required subelements of channel within RSS 0.91:
4.1.3 Optional channel Subelements
There are ten optional channel subelements of RSS 0.91. Technically speaking, you can leave these out altogether. However, you are encouraged to add them. Much of this stuff is static the content of the element never changes. Placing it into your RSS template, or adding another line to a script, is little work for the additional value of your feed's metadata. This is especially true for the first three subelements listed here:
4.1.4 item Elements
RSS 0.91 can take up to 15 item elements. The item element is at the heart of RSS, containing the primary content of the feed. Technically, item elements are optional, but a syndication feed with no item s is just a glorified link. Not having any item s does not mean the feed is invalid; it just means that the feed may be extremely boring.
item takes two mandatory subelements and one optional subelement:
4.1.5 Special Notes for RSS 0.91
Also not permitted inside any element within RSS 0.91 is any form of HTML. Even entity-encoded HTML is forbidden.
Example 4-2 shows the complete Userland RSS 0.91 specification in action.
Example 4-2. The complete Userland RSS 0.91 specification in action
<?xml version="1.0" encoding="ISO-8859-1" ?> <rss version="0.91"> <channel> <title>RSS0.91 Example</title> <link>http://www.oreilly.com/example/index.html</link> <description>This is an example RSS0.91 feed</description> <language>en-gb</language> <copyright>Copyright 2002, Oreilly and Associates.</copyright> <managingEditor>firstname.lastname@example.org</managingEditor> <webMaster>email@example.com</webMaster> <rating> <!-- See the text --> </rating> <pubDate>03 Apr 02 1500 GMT</pubDate> <lastBuildDate>03 Apr 02 1500 GMT</lastBuildDate> <docs>http://backend.userland.com/rss091</docs> <skipDays> <day>Monday</day> </skipDays> <skipHours> <hour>20</hour> </skipHours> <image> <title>RSS0.91 Example</title> <url>http://www.oreilly.com/example/images/logo.gif</url> <link>http://www.oreilly.com/example/index.html</link> <width>88</width> <height>31</height> <description>The World's Leading Technical Publisher</description> </image> <textInput> <title>Search</title> <description>Search the Archives</description> <name>query</name> <link>http://www.oreilly.com/example/search.cgi</link> </textInput> <item> <title>The First Item</title> <link>http://www.oreilly.com/example/001.html</link> <description>This is the first item.</description> </item> <item> <title>The Second Item</title> <link>http://www.oreilly.com/example/002.html</link> <description>This is the second item.</description> </item> <item> <title>The Third Item</title> <link>http://www.oreilly.com/example/003.html</link> <description>This is the third item.</description> </item> </channel> </rss>