RSS Core Profile DRAFT 2

Based on feedback collected from the comments on Sam's weblog I've updated the draft of the core profile. Changes are documented at the bottom of this post. Please continue to direct any feedback on this draft to the comments area Sam is so graciously hosting.

RSS Core Profile

DRAFT 2

ABSTRACT

The RSS Core profile defines a restricted subset of RSS 2.0 that balances ease of use and authoring with ease of consumption by applications while maintaining the richness necessary to extended and adapt to various problem domains. It is designed for authors wishing to provide a well-formed "feed" of information to consumers. It is designed to provide a foundation for other more focused profiles to be based on.

The RSS Core profile is designed around a simple core of elements that may be easily extended through namespaces and modules. It is also designed to maximize backward compatibility with the RSS 0.91 format and its descendents. This allows the profile and derivatives to leverage the existing install base of 0.91 feeds and prior bodies of work such as Dublin Core meta data and RSS 1.0 modules.

The goal of the RSS profile is to serve as guidelines to best practices in a balanced and simplified approach to authoring and consuming of resources with RSS.

COMMON CORE TAGS

<rss>
Description: The root tag for the syndicated resources collection.
Sub-Elements: channel (required)
Attributes: version - a string identifying the version including profile and document type.
Notes: Only one channel is permitted.

<channel>
Description: Container tag for a specific channel
Sub-Elements: title (required), description (required), link (required), item (required)
Attributes: none.
Notes: Only one each of title, description and link is permitted. Language is deprecated.

<item>
Description: Container tag whose contents represents one resource in the channel. At least one item must be present in a channel.
Sub-Elements: title (required), link (required), description (optional, but highly recommended)
Attributes: none.
Notes: none.

<link>
Description: A unique URI using a IANA-registered scheme that specifies the location of the channel or item (resource). Applications are required only to support one of any of these IANA URI schemes however http:// is highly recommended. A required sub-element of channel and item.
Sub-Elements: none.
Attributes: none.

<description>
Description: A plain text excerpt of the channel or item (resource). A required sub-element of channel. Optional, though highly recommended, sub-element of item.
Sub-Elements: none.
Attributes: none.
Notes: The RSS Core profile supports plain text and does not permit encoded markup such as HTML to be included in the description. Recommended not to exceed 500 characters. Those wishing to embed markup language or larger pieces of content in the description tag should use the mod_content module.

<title>
Description: A plain text descriptive title of the channel or item (resource).
Sub-Elements: none.
Attributes: none.
Notes: Is the equivalent of the HTML title and only supports plain text. Encoded markup such as HTML is not permitted to be included in the title. Recommended to be no more then 100 characters.

DEPRECATED TAGS

Tags not defined herein that have appeared in documentation for RSS 0.91 and its descendents are considered deprecated from the core in the RSS core profile. This data can be furnished though various modules such as Dublin Core, mod_content and mod_admin. All deprecated tags in the RSS core profile where previously considered optional except language which was required by the 0.91 specification, but made optional in later specifications.

TAG MAPPING

As it exists today, most tags that would be considered deprecated by this profile, have a modular equivalent.

For brevity the following prefixes are assumed to be mapped to the list namespace URI. The prefixes used are based on the most common in use today. The namespace URIs have been linked to their documentation.

The following is an initial less then perfect mapping of tags for those who opt to comply with this profile.

  • language: dc:language (see footnote in outstanding issues.)
  • copyright: dc:rights
  • lastBuildDate: dcterms:modified matching HTTP 1.1 Last Modified.
  • managingEditor: dc:publisher
  • pubDate: dc:date
  • guid: link (links should be unique URI.)
  • webMaster: admin:errorReportsTo
  • category: dc:subject
  • expirationDate: dcterms:valid
  • generator: admin:generatorAgent
  • cloud: cp:server
  • rating: rss091:rating
  • source: dc:source or ag:source & ag:sourceURL
  • skipDays & skipHours: rss091:skipDays or rss091:skipHours or use mod_syndication for more advanced functionality.
  • enclosure: mod_image, mod_audio or mod_streaming depending.
  • ttl: similar functionality is in mod_syndication
  • docs: annotate:reference (Or should this be the namespace URI?)
  • comments: annotate:reference
  • image: see mod_image (Though mod_image is designed to work with and supplement the existing image tags from RSS0.91 from what I can tell. The conversation trailed off and never completed. Jon Hanna has proposed another specification that I thought wasn't as appropriate as Kevin Burton's module. http://www.benhammersley.com/archives/003096.html.)
  • textinput: (Needs to be addressed. RSS 1.0 allows it so no module has been designed to date. annotate:reference helps provide a link, however its an empty tag that you couldn't insert a dc:title or other tags.)

EXTENSIBILITY

Without detailed information to extending RSS 2.0 with modules and XML namespaces, the RSS Core Profile will follow the guidelines set forth in the RSS 1.0 format module documentation. Modules should make every attempt to keep module syntax streamlined and simple by minimizing the use of RDF/XML constructs.

EXAMPLES

OUTSTANDING ISSUES

  • How to identify the profile/document type? Place in version? or use XML document type? Both?
  • link tag language sufficient? http:// is highly recommended or should it be required?
  • Need to better address non-English language feeds. Morten Frederiksen suggests inclusion of a clause like "if the language is not English, please include the dc:language element according to XXX." Should non-English feeds be forced to use Extensible or Transitional? Is there a better way?
  • RSS 2.0 can never use a default namespace? Currently being tested out and considered to be optionally permissable.
  • content:encoded, xhtml:body or both

CHANGE LOG

DRAFT 2, Jun 04 2003

  • Switched depreciated to deprecated. (Lance at Brainpolis)
  • Change language under channel as per this post (Lance at Brainpolis)
  • Dropped the 15 items per channel note under item. A limit may (or may not) be set in profiles that inherit from the Core profile based on context.
  • Added prefix to namespace URI mappings with links to their documentation (Dare Obasanjo)
  • Added "less then perfect" clarification on tag mappings.
  • Changed "existing RSS formats" to "RSS 2.0" in the abstract for clarity.
  • Added content:encoded, xhtml:body or both to outstanding issues.
  • Added a note that a default namespace is being tested.
  • Various spelling and grammar fixes.

DRAFT 1, Jun 03 2003

About this Entry

This page contains a single entry by Timothy Appnel published on June 4, 2003 12:14 PM.

RSS Core Profile DRAFT 1 was the previous entry in this blog.

Tim Bray: Searching for the RSS Soundbite. is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.