The Evolution of RSS | 6
The Evolution of RSS
RDF Site Summary (RSS) 1.0 was released on December 6, 2000 by the RSS-Dev working group. RSS 1.0 is a modularized version of the original RSS 0.90 format designed to balance extensibility with simplicity. Modules can extend the core RSS 1.0 spec for use in various applications without requiring new RSS versions. Extending RSS 1.0 using namespaces should avoid much of the chaos we witnessed with the ad hoc evolution of HTML.
From the RSS 1.0 Spec:
As RSS continues to be re-purposed, aggregated, and categorized, the need for an enhanced metadata framework grows. Channel- and item-level title and description elements are being overloaded with metadata and HTML. Some producers are even resorting to inserting unofficial ad hoc elements (e.g., <category>, <date>, <author>) in an attempt to augment the sparse metadata facilities of RSS.
One proposed solution is the addition of more simple elements to the RSS core. This direction, while possibly being the simplest in the short run, sacrifices scalability and requires iterative modifications to the core format, adding requested and removing unused functionality....
A second solution, and the one adopted here, is the compartmentalization of specific functionality into the pluggable RSS modules. This is one of the approaches used in this specification: modularization is achieved by using XML Namespaces for partitioning vocabularies. Adding and removing RSS functionality is then just a matter of the inclusion of a particular set of modules best suited to the task at hand. No reworking of the RSS core is necessary.
Advanced applications of RSS are demanding richer respresentation of relationships between intra- and inter-channel elements (e.g. threaded discussions). RDF (Resource Description Framework) provides a framework for just such rich metadata modeling. RSS 0.9 provided a basic (albeit limited) RDF base upon which to layer further structure.
Example RSS 1.0 File
Here's a snippet of the equivalent content in an RSS 1.0 file from WebReference.com:
You can see the file is expanding here. Note the use of Dublin Core (dc:) and the explicit item sequence. Items can add an optional date stamp, and creator and subject (not used above). The date stamp can be useful for aggregators when sorting stories chronologically.
One of the main goals of the RSS 1.0 specification was extensibility. RSS 1.0 has a feature called RSS modules that allows anyone to extend RSS 1.0 to add new fields for their own purposes. Modules are just a new URI or namespace that can be added to an RSS document. Modules allow people to add new functionality to RSS without changing the old spec. All they need is a URI. Then anyone can use this URI to refer to their namespace. The modularization is described in the RSS 1.0 module specification.
RSS 1.0 modules use an XML feature called namespaces to create separate and non-conflicting namespaces for modules, so it is possible to "pull" any RSS 1.0 module into an RSS 1.0 document. The parser will be able to recognize which namespace an element belongs to and can thus ignore unknown elements. Example:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns# xmlns="http://purl.org/rss/1.0/ xmlns:dc="http://purl.org/dc/elements/1.1/ xmlns:syn="http://purl.org/rss/1.0/modules/syndication/>
In this example we pull in two additional modules for use in the above file, the Dublin Core, and the syndication module.
RSS 1.0 Modules
There are three standard modules that ship with RSS 1.0:
- The Dublin Core module defines 15 elements to describe basic data of a Web resource such as creator, title, creation time, publisher, etc.
- The syndication module defines three elements to give hints for content syndication.
- The content module, allows sending the actual text of an item.
As the number of modules grows the most popular ones will be rolled into the standard RSS 1.* distribution. "Modules are classified as Proposed until accepted as Standard by members of the RSS-DEV working group or a sub-membership thereof focused on the area addressed by the module."
Created: May 03, 2001
Revised: May 10, 2001