If you enjoyed this site, please consider donating $3. Any amount is appreciated. Thanks!

RSS Atom Example

Xah Lee, 2006-09

There is a web syndication format standard called Atom, which is a formalized and standardized version of RSS, and choosen by Google as the RSS format throughout their blogger and other services. In this page, i show a simple example of this format.

For some background and detailed info about Atom, see Atom.

Here's a Atom sample template:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://xahlee.org/Periodic_dosage_dir/">

 <title>Xah's Blog</title>
 <subtitle>Ethnology, Ethology, and Tech Geeking</subtitle>
 <link rel="self" href="http://xahlee.org/Periodic_dosage_dir/pd.xml"/>
 <link rel="alternate" href="http://xahlee.org/Periodic_dosage_dir/pd.html"/>
 <updated>2006-09-11T02:35:33-07:00</updated>

 <author>
   <name>Xah Lee</name>
   <uri>http://xahlee.org/</uri>
 </author>

 <id>http://xahlee.org/Periodic_dosage_dir/pd.html</id>
 <icon>http://xahlee.org/siteicon.png</icon>
 <rights>© 2006 Xah Lee</rights>

 <entry>
   <title>Batman thoughts</title>
   <id>tag:xahlee.org,2006-09-09:015218</id>
   <updated>2006-09-08T18:52:18-07:00</updated>
   <summary>Some notes after watching movie Batman.</summary>
   <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
      <p>I watched Batman today ...</p>
      <!-- more xhtml here -->
      </div>
   </content>
  <link rel="alternate" href="pd.html"/>
 </entry>

</feed>

You can use the above as a template. The file name should have a suffix of “.xml” or “.atom”. The MIME type should be “application/rss+xml xml”.

Few things of note:

The file's header contains standard info such as: blog title, author info, copyright info, blog url, (unique) id for this blog. Then, the main body is made of several “entry”. Each entry has a title, id, timestamp, summary, perm link url, and full content (optional).

The “link ref="self" ...” should point to the url of the file itself. The “link ref="alternate" ...” should be the html url for this feed.

Note the date format. It must strictly be of this form: “yyyy-mm-ddThh:mm:ss±hh:mm”. The T in the middle is literal. It is used as a separator of date and time. The last part “±hh:mm” is your local time offset to UTC.

Now, in the “entry” section, the “content” is optional. The “link ref="alternate"” should be the html path of the full article.

The “id” tag is very important. It needs to be unique and unchanging across ALL atom entries in the universe, and it must be in a uri format. What i've done here, and you can follow, is this format: “tag:xahlee.org,2006-09-09:015218”. Namely, “tag:”, then your domain name, a comma, then a date string yyyy-mm-dd, then a colon, then unix epoch seconds. If two entry might be made in the same second in a large organization, then you might also want to add author name.

For how to use emacs to generate Atom entries, see: Updating Atom/RSS with Elisp.

To validate your atom page, goto http://feedvalidator.org/.

For a full tutorial, goto http://www.atomenabled.org/developers/syndication/.

For the complete spec, goto http://tools.ietf.org/html/rfc4287.

For a sample valid atom file, see: http://xahlee.org/Periodic_dosage_dir/pd.xml.


2006-09-11

i just discovered bugs in rss aggregator in google.com, my.yahoo.com, my.msn.com .

For my.msn.com, it won't understand validated atom 1.

For google.com, it won't understand relative links unless you have xml:base in your atom.xml.

For yahoo.com, it won't understand relative links, period, regardless whether you have xml:base.

According to the Atom spec http://tools.ietf.org/html/rfc4287 on relative links which defers to http://tools.ietf.org/html/rfc3986#section-5.1.1, a atom doc without explicit xml:base should take the base as the path the doc is gotton. (just as with html files)

So, it seems to me google's behavior is wrong.

2006-09
© 2006 by Xah Lee.