The introduction of XML ushered in a new era of sharing information. Previously, data sharing was difficult at best. Companies often had their own proprietary transmission protocols and data formats, and neither was available to the public. The idea of transmitting information on a web site using anything other than HTML was a strange, if unheard of, idea. But this changed in 1998 when Microsoft introduced Internet Explorer 4.0 with a new feature called Active Channels. Built upon the Microsoft-developed Channel Definition Format (CDF), Active Channels allowed web site content to be transmitted (or syndicated) to users' desktops using the bundled Active Desktop. The problem with Active Channels, however, was its poor support for the everyday user. Anyone could make a channel, but the industry lacked tools to create and manage CDF files easily. The primary users of Active Channels, big media companies, pushed users away with excessive ads that increased the amount of bandwidth the channel used. Additionally, there was little demand or perceived value in using Active Channels. The whole concept of syndication seemed to have died with Active Channels and the failure of CDF to reach recommendation status from the World Wide Web Consortium. And then came RSS.
In March of 1999, Netscape launched the My Netscape portal, a single place for users to visit for all their news. The idea was simple: to pull information from any number of news sources and display them on My Netscape. To facilitate this idea, Dan Libby of Netscape Communications developed RDF Site Summary (RSS), an XML data format based on the Resource Description Framework (RDF). It would later become known as RSS 0.9.
Shortly after the introduction of RSS 0.9, Dave Winer of Userland Software contacted Libby regarding the RSS 0.9 format. Winer had developed an XML format to use with his site, ScriptingNews, and believed that it and RSS 0.9 could be combined and simplified to make a better, more usable, format. In July of 1999, Libby released a prototype of the new Rich Site Summary (also RSS), which became RSS 0.91. My Netscape then began using RSS 0.91 and continued to do so until 2001, when support for external RSS feeds was dropped. Netscape soon lost interest in RSS and left it without an owner. What would follow splintered the RSS format into two different versions.
A mailing list of developers and other interested parties formed in order to continue the development of RSS. This group, called RSS-DEV (http://groups.yahoo.com/group/rss-dev/), produced a specification called RSS 1.0, in December 2000. RSS 1.0 was based on the original RDF Site Summary (RSS 0.9) and sought to extend it by modularizing the original 0.9 version. These modules are namespaces that can be created by anyone, allowing new functionality to be added without changing the specification. It's important to note that RSS 1.0 is a descendant of RSS 0.9 but not related to RSS 0.91.
At the same time, Winer declared himself the owner of RSS and continued to develop his own version, releasing what he deemed RSS 2.0 (Really Simple Syndication). This new RSS format was based on RSS 0.91, the version that Winer and Libby developed together. The emphasis for RSS 2.0 was the simplicity of the format. When Winer ended up working at Harvard, he assigned ownership of RSS 2.0 to Harvard's Berkman Center for the Internet & Society, which now manages and publishes the specification at http://blogs.law.harvard.edu/tech/rss. RSS 2.0 is the most widely used RSS format today.
Today, the term RSS encompasses three different versions of the RSS format: RSS 0.91, RSS 1.0, and RSS 2.0.
RSS 0.91 is based upon Document Type Declarations (DTDs) and was possibly the most popular RSS version until the release of RSS 2.0. Some statistics show RSS 0.91 capturing 52 percent of the syndication market in 2001, with a steady increase until the introduction of 2.0. It owes its popularity to its dropdead simplicity. Only a handful of 0.91 feeds are in use today, but RSS 2.0 owes much of its current success to RSS 0.91.
RSS 0.91's DTD lists 24 elements (14 more than RSS 0.9); it is easily read by humans and machines alike.
Take a peek at this 0.91 example:
<?xml version="1.0" encoding=" UTF-8" ?> <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> <rss version="0.91"> <channel> <title>My Revenge</title> <link>http://sithboys.com</link> <description>Dedicated to having our revenge</description> <item> <title>At last!</title> <link>http://sithboys.com/atlast.htm</link> <description> At last we will reveal ourselves to the Jedi. At last we will have our revenge. </description> </item> </channel> </rss>
A defining feature of RSS 0.91 (and 2.0, for that matter) is the inclusion of all data inside the <channel/> element. All defining site information, as well as the <item/> elements, are contained by <channel/>. This is in stark contrast to the next RSS version: RSS 1.0.
RSS 1.0 is a departure from the then 0.91 standard and follows the RDF format of 0.9. RSS 1.0 is far more verbose than previous versions, and its extensibility makes it an attractive format, especially for developers of RDF-based applications.
RSS 1.0, although it maintains some resemblance to RSS 0.91, is structurally different and is akin to RSS 0.9.
<?xml version="1.0"?> <rdf:RDF xmlns:rdf=" http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns=" http://purl.org/rss/1.0/"> <channel rdf:about=" http://sithboys.com/about.htm"> <title>My Revenge</title> <link> http://sithboys.com</link> <description> Dedicated to having our revenge </description> <image rdf:resource="http://sithboys.com/logo.jpg" /> <items> <rdf:Seq> <rdf:li resource="http://sithboys.com/atlast.htm" /> </rdf:Seq> </items> <textinput rdf:resource="http://sithboys.com/search/" /> </channel> <image rdf:about="http://sithboys.com/logo.jpg"> <title>The Logo of the Sith</title> <link>http://sithboys.com/</link> <url>http://sithboys.com/logo.jpg</url> </image> <item rdf:about="http://sithboys.com/atlast.htm"> <title>At last!</title> <link>http://sithboys.com/atlast.htm</link> <description> At last we will reveal ourselves to the Jedi. At last we will have our revenge. </description> </item> </rdf:RDF>
Notice that the <item/> elements are outside the <channel/> element. The <items/> element inside of the <channel/> element contains a list of values, the <rdf:Seq/> element, of the included items outside of <channel/>. As you can see, it is far more complex than RSS 0.91, and although RSS 1.0 has gained a following, it does not compare to the popularity the other formats enjoy.
RSS 1.0 is not DTD-based like version 0.91, so it is not necessary to have one in the document.
RSS 2.0 almost exactly mirrors RSS 0.91. Version 2.0 brings many new elements to the table, like the <author/> element in the following example, while allowing modularized extensions like RSS 1.0. Because of the simplicity inherited from RSS 0.91, and the extensibility similar to RSS 1.0, it is no wonder that RSS 2.0 is the most used RSS format today.
The following is an example of a basic RSS 2.0 document:
<?xml version="1.0" encoding=" UTF-8" ?> <rss version="2.0"> <channel> <title>My Revenge</title> <description>Dedicated to having our revenge</description> <link>http://sithboys.com</link> <item> <title>At last!</title> <link>http://sithboys.com/atlast.htm</link> <author>DarthMaul@sithboys.com</author> <description> At last we will reveal ourselves to the Jedi. At last we will have our revenge. </description> </item> </channel> </rss>
RSS 2.0's popularity makes it a sought-after format to support. The application that this chapter covers supports one RSS format, and it is RSS 2.0.