Content Syndication

Web Architecture (INFO 290-03)

Erik Wilde, UC Berkeley School of Information
2007-10-30
Creative Commons License

This work is licensed under a CC
Attribution 3.0 Unported License

Abstract

For many information sources on the Web, it is useful to have some standardized way of subscribing to information updates. Syndication formats such as RSS and Atom can be used by these information sources to publish a feed of updated information items. While RSS and Atom are read-only formats, the Atom Publishing Protocol (AtomPub) build on top of Atom and provides a protocol for submitting new items to feeds.

Content Feeds

Outline (Syndication Formats)

  1. Syndication Formats [18]
    1. RSS [11]
    2. Atom [7]
  2. Syndication Aggregation [2]
  3. Atom Publishing Protocol [8]
  4. Conclusions [1]

Outline (RSS)

  1. Syndication Formats [18]
    1. RSS [11]
    2. Atom [7]
  2. Syndication Aggregation [2]
  3. Atom Publishing Protocol [8]
  4. Conclusions [1]

RSS History

RSS 0.9

RSS 0.91 Example

<rss version="0.91">
 <channel>
  <title>XML.com</title>
  <link>http://www.xml.com/</link>
  <description>XML.com features a rich mix of information and services for the XML community.</description>
  <language>en-us</language>
  <item>
   <title>Normalizing XML, Part 2</title>
   <link>http://www.xml.com/pub/a/2002/12/04/normalizing.html</link>
   <description>In this second and final look at applying relational normalization techniques to W3C XML Schema data modeling, Will Provost discusses when not to normalize, the scope of uniqueness and the fourth and fifth normal forms.</description>
  </item>

RSS 1.0

RSS 1.0 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/">
 <channel rdf:about="http://www.xml.com/cs/xml/query/q/19">
  <title>XML.com</title>
  <link>http://www.xml.com/</link>
  <description>XML.com features a rich mix of information and services for the XML community.</description>
  <language>en-us</language>
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/normalizing.html"/>
    <rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/som.html"/>
    <rdf:li rdf:resource="http://www.xml.com/pub/a/2002/12/04/svg.html"/>
   </rdf:Seq>
  </items>
 </channel>
 <item rdf:about="http://www.xml.com/pub/a/2002/12/04/normalizing.html">
  <title>Normalizing XML, Part 2</title>
  <link>http://www.xml.com/pub/a/2002/12/04/normalizing.html</link>
  <description>In this second and final look at applying relational normalization techniques to W3C XML Schema data modeling, Will Provost discusses when not to normalize, the scope of uniqueness and the fourth and fifth normal forms.</description>
  <dc:creator>Will Provost</dc:creator>
  <dc:date>2002-12-04</dc:date>
 </item>

RSS 2.0

RSS 2.0 Example

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
 <channel>
  <title>XML.com</title>
  <link>http://www.xml.com/</link>
  <description>XML.com features a rich mix of information and services for the XML community.</description>
  <language>en-us</language>
  <item>
   <title>Normalizing XML, Part 2</title>
   <link>http://www.xml.com/pub/a/2002/12/04/normalizing.html</link>
   <description>In this second and final look at applying relational normalization techniques to W3C XML Schema data modeling, Will Provost discusses when not to normalize, the scope of uniqueness and the fourth and fifth normal forms.</description>
   <dc:creator>Will Provost</dc:creator>
   <dc:date>2002-12-04</dc:date>
  </item>

The Case for Content Management

Consuming RSS

RSS Technical Problems

RSS Political Problems

Outline (Atom)

  1. Syndication Formats [18]
    1. RSS [11]
    2. Atom [7]
  2. Syndication Aggregation [2]
  3. Atom Publishing Protocol [8]
  4. Conclusions [1]

Atom History

atom-logo.png

Atom vs. RSS

Atom Example

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
 <title>ongoing</title>
 <id>http://www.tbray.org/ongoing/</id>
 <link rel='self' href="http://www.tbray.org/ongoing/ongoing.atom"/>
 <updated>2007-04-11T12:55:09-07:00</updated>
 <author>
  <name>Tim Bray</name>
 </author>
 <subtitle>ongoing fragmented essay by Tim Bray</subtitle>
 <entry xml:base="When/200x/2007/04/02/">
  <title>Atom Publishing Protocol Interop!</title>
  <id>http://www.tbray.org/ongoing/When/200x/2007/04/02/APP-Interop</id>
  <published>2007-04-02T13:00:00-07:00</published>
  <updated>2007-04-10T14:24:00-07:00</updated>
  <category scheme="http://www.tbray.org/ongoing/What/" term="Technology/Atom"/>
  <category scheme="http://www.tbray.org/ongoing/What/" term="Technology"/>
  <category scheme="http://www.tbray.org/ongoing/What/" term="Atom"/>
  <content type="xhtml">
   <div xmlns="http://www.w3.org/1999/xhtml">
    <p>Mark your calendar: <a href="http://www.intertwingly.net/wiki/pie/April2007Interop">April 16-17 at Google</a>. <em>Everybody</em> is invited, provided they bring along an APP implementation, client or server. This was just announced a couple of days ago, and as I write this there are already <s>six</s> twelve client and <s>seven</s> fourteen server implementations signed up to be there and try to <a href="http://www.intertwingly.net/wiki/pie/InteropGrid">fill in the grid</a>. Let’s drop some names, in alphabetical order: AOL, Flock, Google, IBM, Lotus, Microsoft, Oracle, O’Reilly, Six Apart, Sun, WordPress. Um, have I mentioned that the APP is going to be huge?</p>
   </div>
  </content>
 </entry>
</feed>

Atom Content

Atom Content Examples

<content type="xhtml">
  <div xmlns="http://www.w3.org/1999/xhtml">
    One <strong>bold</strong> foot forward
  </div>
</content>
<content>The "atom:content" element either contains or links to the content of the entry. The content of atom:content is Language-Sensitive.</content>
<content type="html">The &lt;code>atom:content&lt;/code> element either contains or links to the content of the entry. The content of &lt;code>atom:content&lt;/code> is &lt;a href="http://www.ietf.org/rfc/rfc3066.txt">Language-Sensitive&lt;/a>.</content>
<content type="image/png">
iVBORw0KGgoA … TAAAAAElFTkSuQmCC
</content>
<content src="image.png" type="image/png"/>

Atom Categories

Switching from RSS to Atom

Outline (Syndication Aggregation)

  1. Syndication Formats [18]
    1. RSS [11]
    2. Atom [7]
  2. Syndication Aggregation [2]
  3. Atom Publishing Protocol [8]
  4. Conclusions [1]

End-User Aggregation

feed-icon.png
<link rel="alternate" type="application/rdf+xml" title="…" href="…" />
<link rel="alternate" type="application/rss+xml" title="…" href="…" />
<link rel="alternate" type="application/atom+xml" title="…" href="…" />

Aggregation Intermediaries

Outline (Atom Publishing Protocol)

  1. Syndication Formats [18]
    1. RSS [11]
    2. Atom [7]
  2. Syndication Aggregation [2]
  3. Atom Publishing Protocol [8]
  4. Conclusions [1]

Syndication Format Protocols

RESTified Syndication

Collections, Members, Entries, Media

Protocol Summary

Resource HTTP Method Representation Description
Introspection GET Atom Service Document Enumerates a set of collections and lists their URIs and other information about the collections
Collection GET Atom Feed A list of member of the collection (this may be a subset of all entries in the collection)
Collection POST Atom Entry Create a new entry in the collection
Member GET Atom Entry Get the Atom Entry
Member PUT Atom Entry Update the Atom Entry
Member DELETE n/a Delete the Atom Entry from the collection

Service Documents

Service Documents represent server-defined groups of Collections, and are used to initialize the process of creating and editing resources.

Service Document Example

<service xmlns="http://purl.org/atom/app#" xmlns:atom="http://www.w3.org/2005/Atom">
 <workspace>
  <atom:title>Main Site</atom:title>
  <collection href="http://example.org/reilly/main">
   <atom:title>My Blog Entries</atom:title>
   <categories href="http://example.com/cats/forMain.cats"/>
  </collection>
  <collection href="http://example.org/reilly/pic">
   <atom:title>Pictures</atom:title>
   <accept>image/*</accept>
  </collection>
 </workspace>
 <workspace>
  <atom:title>Side Bar Blog</atom:title>
  <collection href="http://example.org/reilly/list">
   <atom:title>Remaindered Links</atom:title>
   <accept>entry</accept>
   <categories fixed="yes">
    <atom:category scheme="http://example.org/extra-cats/" term="joke"/>
    <atom:category scheme="http://example.org/extra-cats/" term="serious"/>
   </categories>
  </collection>
 </workspace>
</service>

Category Documents

Category Document Example

<app:categories xmlns:app="http://purl.org/atom/app#" xmlns="http://www.w3.org/2005/Atom" fixed="yes" scheme="http://example.com/cats/big3">
 <category term="animal"/>
 <category term="vegetable"/>
 <category term="mineral"/>
</app:categories>

Outline (Conclusions)

  1. Syndication Formats [18]
    1. RSS [11]
    2. Atom [7]
  2. Syndication Aggregation [2]
  3. Atom Publishing Protocol [8]
  4. Conclusions [1]

Semantic Web Light