| draft-nottingham-atompub-feed-history-07.txt | | draft-nottingham-atompub-feed-history-08.txt | |
| | | | |
| Network Working Group M. Nottingham | | Network Working Group M. Nottingham | |
| | | | |
| Intended status: Standards Track | | Intended status: Standards Track | |
|
| Expires: March 16, 2007 | | Expires: May 26, 2007 | |
| | | | |
| Feed Paging and Archiving | | Feed Paging and Archiving | |
|
| draft-nottingham-atompub-feed-history-07 | | draft-nottingham-atompub-feed-history-08 | |
| | | | |
| Status of This Memo | | Status of This Memo | |
| | | | |
| By submitting this Internet-Draft, each author represents that any | | By submitting this Internet-Draft, each author represents that any | |
| applicable patent or other IPR claims of which he or she is aware | | applicable patent or other IPR claims of which he or she is aware | |
| have been or will be disclosed, and any of which he or she becomes | | have been or will be disclosed, and any of which he or she becomes | |
| aware will be disclosed, in accordance with Section 6 of BCP 79. | | aware will be disclosed, in accordance with Section 6 of BCP 79. | |
| | | | |
| Internet-Drafts are working documents of the Internet Engineering | | Internet-Drafts are working documents of the Internet Engineering | |
| Task Force (IETF), its areas, and its working groups. Note that | | Task Force (IETF), its areas, and its working groups. Note that | |
| | | | |
| skipping to change at page 1, line 34 | | skipping to change at page 1, line 34 | |
| and may be updated, replaced, or obsoleted by other documents at any | | and may be updated, replaced, or obsoleted by other documents at any | |
| time. It is inappropriate to use Internet-Drafts as reference | | time. It is inappropriate to use Internet-Drafts as reference | |
| material or to cite them other than as "work in progress." | | material or to cite them other than as "work in progress." | |
| | | | |
| The list of current Internet-Drafts can be accessed at | | The list of current Internet-Drafts can be accessed at | |
| http://www.ietf.org/ietf/1id-abstracts.txt. | | http://www.ietf.org/ietf/1id-abstracts.txt. | |
| | | | |
| The list of Internet-Draft Shadow Directories can be accessed at | | The list of Internet-Draft Shadow Directories can be accessed at | |
| http://www.ietf.org/shadow.html. | | http://www.ietf.org/shadow.html. | |
| | | | |
|
| This Internet-Draft will expire on March 16, 2007. | | This Internet-Draft will expire on May 26, 2007. | |
| | | | |
| Copyright Notice | | Copyright Notice | |
| | | | |
| Copyright (C) The Internet Society (2006). | | Copyright (C) The Internet Society (2006). | |
| | | | |
| Abstract | | Abstract | |
| | | | |
|
| This specification defines three types of syndicated feeds that | | This specification defines three types of syndicated Web feeds that | |
| enable publication of entries across one or more feed documents. | | enable publication of entries across one or more feed documents. | |
| | | | |
| Table of Contents | | Table of Contents | |
| | | | |
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |
| 1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 3 | | 1.1. Notational Conventions . . . . . . . . . . . . . . . . . . 3 | |
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | |
| 2. Complete Feeds . . . . . . . . . . . . . . . . . . . . . . . . 4 | | 2. Complete Feeds . . . . . . . . . . . . . . . . . . . . . . . . 4 | |
|
| 2.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 5 | | 3. Paged Feeds . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |
| 3. Paged Feeds . . . . . . . . . . . . . . . . . . . . . . . . . 6 | | 4. Archived Feeds . . . . . . . . . . . . . . . . . . . . . . . . 6 | |
| 3.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 7 | | 4.1. Publishing Archived Feeds . . . . . . . . . . . . . . . . 9 | |
| 4. Archived Feeds . . . . . . . . . . . . . . . . . . . . . . . . 8 | | 4.2. Consuming Archived Feeds . . . . . . . . . . . . . . . . . 9 | |
| 4.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 10 | | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |
| 7. Normative References . . . . . . . . . . . . . . . . . . . . . 14 | | 7.1. Normative References . . . . . . . . . . . . . . . . . . . 10 | |
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 15 | | 7.2. Informative References . . . . . . . . . . . . . . . . . . 11 | |
| Appendix B. Reconstructing Archived Feeds . . . . . . . . . . . . 15 | | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 11 | |
| | | Appendix B. Use in RSS 2.0 . . . . . . . . . . . . . . . . . . . 11 | |
| | | | |
| 1. Introduction | | 1. Introduction | |
| | | | |
|
| Syndicated Web feeds (using such formats as Atom [RFC4287] or RSS | | Syndicated Web feeds (using such formats as Atom [RFC4287]) are often | |
| 2.0) are often split up into multiple documents to save bandwidth, | | split up into multiple documents to save bandwidth, allow "sliding | |
| allow "sliding window" access, or for other purposes. | | window" access, or for other purposes. | |
| | | | |
| This specification formalizes two types of feeds that can span one or | | This specification formalizes two types of feeds that can span one or | |
| more feed documents; "paged" feeds and "archived" feeds. | | more feed documents; "paged" feeds and "archived" feeds. | |
| Additionally, it defines "complete" feeds to cover the case when a | | Additionally, it defines "complete" feeds to cover the case when a | |
| single feed document explicitly represents all of the feed's entries. | | single feed document explicitly represents all of the feed's entries. | |
| | | | |
|
| These types are complementary; each has different properties and | | Each has different properties and trade-offs: | |
| trade-offs: | | | |
| | | | |
| o Complete feeds contain the entire set of entries in one document, | | o Complete feeds contain the entire set of entries in one document, | |
| and can be useful when it isn't desirable to "remember" | | and can be useful when it isn't desirable to "remember" | |
| previously-seen entries. | | previously-seen entries. | |
| o Paged feeds split the logical feed's entries among multiple | | o Paged feeds split the logical feed's entries among multiple | |
| temporary documents. This can be useful when entries in the feed | | temporary documents. This can be useful when entries in the feed | |
| are not long-lived or stable, and the client needs to access an | | are not long-lived or stable, and the client needs to access an | |
| arbitrary portion of them, usually in close succession. | | arbitrary portion of them, usually in close succession. | |
| o Archived feeds split them among multiple permanent documents, and | | o Archived feeds split them among multiple permanent documents, and | |
| can be useful when entries are long-lived and it is important for | | can be useful when entries are long-lived and it is important for | |
| clients to see every one. | | clients to see every one. | |
| | | | |
|
| | | The semantics of a feed that combines these types is undefined by | |
| | | this specification. | |
| | | | |
| Although they refer to Atom normatively, the mechanisms described | | Although they refer to Atom normatively, the mechanisms described | |
|
| herein can be used with similar syndication formats, such as the | | herein can be used with similar syndication formats; see Appendix B | |
| various flavors of RSS. | | for one such use. | |
| | | | |
| 1.1. Notational Conventions | | 1.1. Notational Conventions | |
| | | | |
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |
|
| document are to be interpreted as described in BCP 14 [RFC2119], as | | document are to be interpreted as described in BCP 14 [RFC2119]. | |
| scoped to those conformance targets. | | | |
| | | | |
| This specification uses XML Namespaces [W3C.REC-xml-names-19990114] | | This specification uses XML Namespaces [W3C.REC-xml-names-19990114] | |
| to uniquely identify XML element names. It uses the following | | to uniquely identify XML element names. It uses the following | |
| namespace prefix for the indicated namespace URI; | | namespace prefix for the indicated namespace URI; | |
| | | | |
| "fh": "http://purl.org/syndication/history/1.0" | | "fh": "http://purl.org/syndication/history/1.0" | |
| | | | |
| 1.2. Terminology | | 1.2. Terminology | |
| | | | |
| In this specification, "feed document" refers to an Atom Feed | | In this specification, "feed document" refers to an Atom Feed | |
|
| Document, RSS document, or similar syndication instance document. It | | Document or similar syndication instance document. It may contain | |
| may contain any number of entries (in RSS, items), and may or may not | | any number of entries, and may or may not be a complete | |
| be a complete representation of the logical feed. | | representation of the logical feed. | |
| | | | |
| A "logical feed" is the set of entries associated with a particular | | A "logical feed" is the set of entries associated with a particular | |
| feed (as contrasted with a feed document, which may contain a subset | | feed (as contrasted with a feed document, which may contain a subset | |
| of them). | | of them). | |
| | | | |
|
| "Head section" refers to the children of a feed document's document- | | "Head section" refers to a document's feed-wide metadata container; | |
| wide metadata container; e.g., the child elements of the atom:feed | | e.g., the child elements of the atom:feed element in an Atom Feed | |
| element in an Atom Feed Document. | | Document. | |
| | | | |
| This specification uses terms from the XML Infoset | | This specification uses terms from the XML Infoset | |
| [W3C.REC-xml-infoset-20040204]. However, this specification uses a | | [W3C.REC-xml-infoset-20040204]. However, this specification uses a | |
| shorthand; the phrase "Information Item" is omitted when naming | | shorthand; the phrase "Information Item" is omitted when naming | |
| Element Information Items. Therefore, when this specification uses | | Element Information Items. Therefore, when this specification uses | |
| the term "element," it is referring to an Element Information Item in | | the term "element," it is referring to an Element Information Item in | |
| Infoset terms. | | Infoset terms. | |
| | | | |
| This specification also uses Atom link relations to identify | | This specification also uses Atom link relations to identify | |
| different types of links; see the Atom specification [RFC4287] for | | different types of links; see the Atom specification [RFC4287] for | |
| information about their syntax, and the IANA link relation registry | | information about their syntax, and the IANA link relation registry | |
| for more information about specific values. | | for more information about specific values. | |
| | | | |
|
| | | Note that URI references in link relation values may be relative, and | |
| | | when they are used they must be absolutised, as described in Section | |
| | | 5.1 of [RFC3986]. | |
| | | | |
| 2. Complete Feeds | | 2. Complete Feeds | |
| | | | |
| A complete feed is a feed document that contains all of the entries | | A complete feed is a feed document that contains all of the entries | |
| of a logical feed; any entry not actually in the feed document SHOULD | | of a logical feed; any entry not actually in the feed document SHOULD | |
| NOT be considered to be part of that feed. | | NOT be considered to be part of that feed. | |
| | | | |
|
| For example; a feed that represents a ranking that varies over time, | | For example, a feed that represents a ranking that varies over time | |
| such as "Top Twenty Records" or "Most Popular Items" should not have | | (such as "Top Twenty Records" or "Most Popular Items") should not | |
| newer entries displayed alongside older ones. By marking them as | | have newer entries displayed alongside older ones. By marking this | |
| complete feeds, old entries are discarded when the feed is refreshed. | | type feeds as complete, old entries are discarded when it is | |
| | | refreshed. | |
| | | | |
| The fh:complete element, when present in a feed's head section, | | The fh:complete element, when present in a feed's head section, | |
| indicates that the feed document it occurs in is a complete | | indicates that the feed document it occurs in is a complete | |
|
| representation of the logical feed's entries. | | representation of the logical feed's entries. It is an empty | |
| | | element; this specification does not define any content for it. | |
| For example, | | | |
| | | | |
| <fh:complete/> | | | |
| | | | |
| 2.1. Examples | | | |
| | | | |
|
| Atom-formatted Complete Feed | | Example: Atom-formatted Complete Feed | |
| | | | |
| <?xml version="1.0" encoding="utf-8"?> | | <?xml version="1.0" encoding="utf-8"?> | |
| <feed xmlns="http://www.w3.org/2005/Atom" | | <feed xmlns="http://www.w3.org/2005/Atom" | |
| xmlns:fh="http://purl.org/syndication/history/1.0"> | | xmlns:fh="http://purl.org/syndication/history/1.0"> | |
| <title>NetMovies Queue</title> | | <title>NetMovies Queue</title> | |
| <description>The DVDs you'll receive next.</description> | | <description>The DVDs you'll receive next.</description> | |
| <link href="http://example.org/"/> | | <link href="http://example.org/"/> | |
| <fh:complete/> | | <fh:complete/> | |
| <link rel="self" | | <link rel="self" | |
| href="http://netmovies.example.org/jdoe/queue/index.atom"/> | | href="http://netmovies.example.org/jdoe/queue/index.atom"/> | |
| | | | |
| skipping to change at page 6, line 4 | | skipping to change at page 5, line 29 | |
| </author> | | </author> | |
| <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | | <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | |
| <entry> | | <entry> | |
| <title>Casablanca</title> | | <title>Casablanca</title> | |
| <link href="http://netmovies.example.org/movies/Casablanca"/> | | <link href="http://netmovies.example.org/movies/Casablanca"/> | |
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |
| <updated>2003-12-13T18:30:02Z</updated> | | <updated>2003-12-13T18:30:02Z</updated> | |
| <summary>Here's looking at you, kid...</summary> | | <summary>Here's looking at you, kid...</summary> | |
| </entry> | | </entry> | |
| </feed> | | </feed> | |
|
| RSS 2.0-formatted Complete Feed | | | |
| | | | |
|
| <?xml version="1.0"?> | | This specification does not address duplicate entries in complete | |
| <rss version="2.0" | | feeds. | |
| xmlns:fh="http://purl.org/syndication/history/1.0"> | | | |
| <channel> | | | |
| <title>NetMovies Queue</title> | | | |
| <link>http://netmovies.example.org/</link> | | | |
| <description>The DVDs you'll receive next.</description> | | | |
| <language>en-us</language> | | | |
| <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate> | | | |
| <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate> | | | |
| <docs>http://blogs.law.harvard.edu/tech/rss</docs> | | | |
| <generator>Weblog Editor 2.0</generator> | | | |
| <managingEditor>editor@netmovies.example.org</managingEditor> | | | |
| <webMaster>webmaster@netmovies.example.org</webMaster> | | | |
| <fh:complete/> | | | |
| <item> | | | |
| <title>Casablanca</title> | | | |
| <link>http://netmovies.example.org/movies/Casablanca</link> | | | |
| <description>Here's looking at you, kid... | | | |
| </description> | | | |
| <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate> | | | |
| <guid>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</guid> | | | |
| </item> | | | |
| </channel> | | | |
| </rss> | | | |
| | | | |
| 3. Paged Feeds | | 3. Paged Feeds | |
| | | | |
| A paged feed is a set of linked feed documents that together contain | | A paged feed is a set of linked feed documents that together contain | |
| the entries of a logical feed, without any guarantees about the | | the entries of a logical feed, without any guarantees about the | |
| stability of the documents' contents. | | stability of the documents' contents. | |
| | | | |
| Paged feeds are lossy; that is, it is not possible to guarantee that | | Paged feeds are lossy; that is, it is not possible to guarantee that | |
| clients will be able to reconstruct the contents of the logical feed | | clients will be able to reconstruct the contents of the logical feed | |
|
| at a particular time. Some entries may be added or changed as the | | at a particular time. Entries may be added or changed as the pages | |
| pages of the feed are accessed, without the client becoming aware of | | of the feed are accessed, without the client becoming aware of them. | |
| them. | | | |
| | | Therefore, clients SHOULD NOT present paged feeds as coherent or | |
| | | complete, or make assumptions to that effect. | |
| | | | |
| Paged feeds can be useful when the number of entries is very large, | | Paged feeds can be useful when the number of entries is very large, | |
| infinite, or indeterminate. Clients can "page" through the feed, | | infinite, or indeterminate. Clients can "page" through the feed, | |
| only accessing a subset of the feed's entries as necessary. | | only accessing a subset of the feed's entries as necessary. | |
| | | | |
| For example, a search engine might make query results available as a | | For example, a search engine might make query results available as a | |
| paged feed, so that queries with very large result sets do not | | paged feed, so that queries with very large result sets do not | |
| overwhelm the server, the network, or the client. | | overwhelm the server, the network, or the client. | |
| | | | |
| The feed documents in a paged feed are tied together with the | | The feed documents in a paged feed are tied together with the | |
| | | | |
| skipping to change at page 7, line 18 | | skipping to change at page 6, line 19 | |
| o "first" - A URI that refers to the furthest preceding document in | | o "first" - A URI that refers to the furthest preceding document in | |
| a series of documents. | | a series of documents. | |
| o "last" - A URI that refers to the furthest following document in a | | o "last" - A URI that refers to the furthest following document in a | |
| series of documents. | | series of documents. | |
| o "previous" - A URI that refers to the immediately preceding | | o "previous" - A URI that refers to the immediately preceding | |
| document in a series of documents. | | document in a series of documents. | |
| o "next" - A URI that refers to the immediately following document | | o "next" - A URI that refers to the immediately following document | |
| in a series of documents. | | in a series of documents. | |
| | | | |
| Paged feed documents MUST have at least one of these link relations | | Paged feed documents MUST have at least one of these link relations | |
|
| present, and SHOULD contain as many as practical and applicable. | | present, and should contain as many as practical and applicable. | |
| | | | |
| Note that URI references in link relation values may be relative, and | | | |
| when they are used they must be absolutised, as described in Section | | | |
| 5.1 of [RFC3986]. | | | |
| | | | |
| 3.1. Examples | | | |
| | | | |
|
| Atom-formatted Paged Feed | | Example: Atom-formatted Paged Feed | |
| | | | |
| <?xml version="1.0" encoding="utf-8"?> | | <?xml version="1.0" encoding="utf-8"?> | |
| <feed xmlns="http://www.w3.org/2005/Atom"> | | <feed xmlns="http://www.w3.org/2005/Atom"> | |
| <title>Example Feed</title> | | <title>Example Feed</title> | |
| <link href="http://example.org/"/> | | <link href="http://example.org/"/> | |
| <link rel="self" href="http://example.org/index.atom"/> | | <link rel="self" href="http://example.org/index.atom"/> | |
| <link rel="next" href="http://example.org/index.atom?page=2"/> | | <link rel="next" href="http://example.org/index.atom?page=2"/> | |
| <updated>2003-12-13T18:30:02Z</updated> | | <updated>2003-12-13T18:30:02Z</updated> | |
| <author> | | <author> | |
| <name>John Doe</name> | | <name>John Doe</name> | |
| </author> | | </author> | |
| <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | | <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | |
| <entry> | | <entry> | |
| <title>Atom-Powered Robots Run Amok</title> | | <title>Atom-Powered Robots Run Amok</title> | |
| <link href="http://example.org/2003/12/13/atom03"/> | | <link href="http://example.org/2003/12/13/atom03"/> | |
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |
| <updated>2003-12-13T18:30:02Z</updated> | | <updated>2003-12-13T18:30:02Z</updated> | |
| <summary>Some text.</summary> | | <summary>Some text.</summary> | |
| </entry> | | </entry> | |
| </feed> | | </feed> | |
|
| RSS 2.0-formatted Paged Feed | | | |
| | | | |
|
| <?xml version="1.0"?> | | This specification does not address duplicate entries in paged feeds. | |
| <rss version="2.0" | | | |
| xmlns:atom="http://www.w3.org/2005/Atom"> | | | |
| <channel> | | | |
| <title>Liftoff News</title> | | | |
| <link>http://liftoff.nasa.gov/</link> | | | |
| <description>Liftoff to Space Exploration.</description> | | | |
| <language>en-us</language> | | | |
| <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate> | | | |
| <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate> | | | |
| <docs>http://blogs.law.harvard.edu/tech/rss</docs> | | | |
| <generator>Weblog Editor 2.0</generator> | | | |
| <managingEditor>editor@example.com</managingEditor> | | | |
| <webMaster>webmaster@example.com</webMaster> | | | |
| <atom:link rel="next" | | | |
| href="http://liftof.nasa.gov/index.rss?page=2"/> | | | |
| <item> | | | |
| <title>Star City</title> | | | |
| <link>http://liftoff.nasa.gov/2003/06/news-starcity</link> | | | |
| <description>How do Americans get ready to work with Russians | | | |
| aboard the International Space Station? They take a crash course | | | |
| in culture, language and protocol at Russia's <a | | | |
| href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm">Star | | | |
| City</a>.</description> | | | |
| <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate> | | | |
| <guid>http://liftoff.nasa.gov/2003/06/03.html#item573</guid> | | | |
| </item> | | | |
| </channel> | | | |
| </rss> | | | |
| | | | |
| 4. Archived Feeds | | 4. Archived Feeds | |
| | | | |
| An archived feed is a set of feed documents that can be combined to | | An archived feed is a set of feed documents that can be combined to | |
| accurately reconstruct the entries of a logical feed. | | accurately reconstruct the entries of a logical feed. | |
| | | | |
| Unlike paged feeds, archived feeds enable clients to do this without | | Unlike paged feeds, archived feeds enable clients to do this without | |
|
| losing any entries. This is achieved by publishing a single | | losing entries. This is achieved by publishing a single subscription | |
| subscription document and (potentially) many archive documents. | | document and (potentially) many archive documents. | |
| | | | |
| A subscription document is a feed document that always contains the | | A subscription document is a feed document that always contains the | |
|
| most recently added or changed entries available in the logical feed | | most recently added or changed entries available in the logical feed. | |
| (often, the feed document that should be subscribed to). | | | |
| | | | |
| Archive documents are feed documents that contain less recent entries | | Archive documents are feed documents that contain less recent entries | |
| in the feed. The set of entries contained in an archive document | | in the feed. The set of entries contained in an archive document | |
| published at a particular URI SHOULD NOT change over time. Likewise, | | published at a particular URI SHOULD NOT change over time. Likewise, | |
| the URI for a particular archive document SHOULD NOT change over | | the URI for a particular archive document SHOULD NOT change over | |
| time. | | time. | |
| | | | |
|
| These stability requirements allow clients to safely assume that if | | | |
| they have retrieved an archive document from a particular URI once, | | | |
| it will not meaningfully change in the future. As a result, if an | | | |
| archive document's contents are changed, clients may not become aware | | | |
| of it. | | | |
| | | | |
| Therefore, if a publisher requires a change to be visible to all | | | |
| users (e.g., correcting factual errors), they should consider | | | |
| publishing the revised entry in the subscription feed, in addition to | | | |
| (or instead of) the appropriate archive feed. Conversely, | | | |
| unimportant changes (e.g., spelling corrections) might be only | | | |
| effected in archive feeds. | | | |
| | | | |
| Typically, a subscription feed will link to a set of archive | | | |
| documents (also linked together) which contain progressively less | | | |
| recent entries. | | | |
| | | | |
| Clients can then "subscribe" to the feed, polling the subscription | | | |
| document for recent changes. If a client has missed some entries, | | | |
| the archives can be used to synchronise its state by fetching the | | | |
| archive documents it has not yet seen. | | | |
| | | | |
| The following link relations are used to tie subscription and | | The following link relations are used to tie subscription and | |
| archived feeds together: | | archived feeds together: | |
| | | | |
| o "prev-archive" - A URI that refers to the immediately preceding | | o "prev-archive" - A URI that refers to the immediately preceding | |
| archive document. | | archive document. | |
| o "next-archive" - A URI that refers to the immediately following | | o "next-archive" - A URI that refers to the immediately following | |
| archive document. | | archive document. | |
| o "current" - A URI that, when dereferenced, returns a feed document | | o "current" - A URI that, when dereferenced, returns a feed document | |
| containing the most recent entries in the feed. | | containing the most recent entries in the feed. | |
| | | | |
| Subscription documents and archive documents MUST have a "prev- | | Subscription documents and archive documents MUST have a "prev- | |
|
| archive" link relation, unless there are no archives available. | | archive" link relation, unless there are no preceding archives | |
| | | available. Additionally, archive documents SHOULD have "next- | |
| Archive documents SHOULD have "next-archive" and "current" link | | archive" and "current" link relations. | |
| relations. | | | |
| | | | |
| Note that URI references in link relation values may be relative, and | | | |
| when they are used they must be absolutised, as described in Section | | | |
| 5.1 of [RFC3986]. | | | |
| | | | |
| Archive document SHOULD also contain an fh:archive element in their | | Archive document SHOULD also contain an fh:archive element in their | |
|
| head sections, to indicate that they are archives. | | head sections to indicate that they are archives. fh:archive is an | |
| | | empty element; this specification does not define any content for it. | |
| For example, | | | |
| | | | |
| <fh:archive/> | | | |
| | | | |
| Publishers are not required to make all archive documents available; | | | |
| they may refuse to serve (e.g., with HTTP status code 403 or 410), or | | | |
| be unable to serve (e.g., with HTTP status code 404) an archive | | | |
| document. | | | |
| | | | |
| Clients SHOULD warn users when they are not able to reconstruct the | | | |
| complete, logical feed (e.g., by alerting the user that an archive | | | |
| document is unavailable, or displaying pseudo-entries that inform the | | | |
| user that some entries may be missing). | | | |
| | | | |
| 4.1. Examples | | | |
| | | | |
|
| Atom-formatted Subscription Document | | Example: Atom-formatted Subscription Document | |
| | | | |
| <?xml version="1.0" encoding="utf-8"?> | | <?xml version="1.0" encoding="utf-8"?> | |
| <feed xmlns="http://www.w3.org/2005/Atom"> | | <feed xmlns="http://www.w3.org/2005/Atom"> | |
| <title>Example Feed</title> | | <title>Example Feed</title> | |
| <link href="http://example.org/"/> | | <link href="http://example.org/"/> | |
| <link rel="self" href="http://example.org/index.atom"/> | | <link rel="self" href="http://example.org/index.atom"/> | |
| <link rel="prev-archive" | | <link rel="prev-archive" | |
| href="http://example.org/2003/11/index.atom"/> | | href="http://example.org/2003/11/index.atom"/> | |
| <updated>2003-12-13T18:30:02Z</updated> | | <updated>2003-12-13T18:30:02Z</updated> | |
| <author> | | <author> | |
| | | | |
| skipping to change at page 11, line 4 | | skipping to change at page 8, line 27 | |
| </author> | | </author> | |
| <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | | <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | |
| <entry> | | <entry> | |
| <title>Atom-Powered Robots Run Amok</title> | | <title>Atom-Powered Robots Run Amok</title> | |
| <link href="http://example.org/2003/12/13/atom03"/> | | <link href="http://example.org/2003/12/13/atom03"/> | |
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |
| <updated>2003-12-13T18:30:02Z</updated> | | <updated>2003-12-13T18:30:02Z</updated> | |
| <summary>Some text.</summary> | | <summary>Some text.</summary> | |
| </entry> | | </entry> | |
| </feed> | | </feed> | |
|
| Atom-formatted Archive Document | | | |
| | | Example: Atom-formatted Archive Document | |
| | | | |
| <?xml version="1.0" encoding="utf-8"?> | | <?xml version="1.0" encoding="utf-8"?> | |
| <feed xmlns="http://www.w3.org/2005/Atom" | | <feed xmlns="http://www.w3.org/2005/Atom" | |
| xmlns:fh="http://purl.org/syndication/history/1.0"> | | xmlns:fh="http://purl.org/syndication/history/1.0"> | |
| <title>Example Feed</title> | | <title>Example Feed</title> | |
| <link rel="current" href="http://example.org/index.atom"/> | | <link rel="current" href="http://example.org/index.atom"/> | |
| <link rel="self" href="http://example.org/2003/11/index.atom"/> | | <link rel="self" href="http://example.org/2003/11/index.atom"/> | |
| <fh:archive/> | | <fh:archive/> | |
| <link rel="prev-archive" | | <link rel="prev-archive" | |
| href="http://example.org/2003/10/index.atom"/> | | href="http://example.org/2003/10/index.atom"/> | |
| | | | |
| skipping to change at page 12, line 4 | | skipping to change at page 9, line 4 | |
| </author> | | </author> | |
| <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | | <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> | |
| <entry> | | <entry> | |
| <title>Atom-Powered Robots Scheduled To Run Amok</title> | | <title>Atom-Powered Robots Scheduled To Run Amok</title> | |
| <link href="http://example.org/2003/11/24/robots_coming"/> | | <link href="http://example.org/2003/11/24/robots_coming"/> | |
| <id>urn:uuid:cdef5c6d5-gff8-4ebb-assa-80dwe44efkjo</id> | | <id>urn:uuid:cdef5c6d5-gff8-4ebb-assa-80dwe44efkjo</id> | |
| <updated>2003-11-24T12:00:00Z</updated> | | <updated>2003-11-24T12:00:00Z</updated> | |
| <summary>Some text from an old, different entry.</summary> | | <summary>Some text from an old, different entry.</summary> | |
| </entry> | | </entry> | |
| </feed> | | </feed> | |
|
| | | | |
| | | 4.1. Publishing Archived Feeds | |
| | | | |
| | | The requirement that archive documents be stable allows clients to | |
| | | safely assume that if they have retrieved one in the past, it will | |
| | | not meaningfully change in the future. As a result, if an archive | |
| | | document's contents are changed, some clients may not become aware of | |
| | | it. | |
| | | | |
| | | Therefore, if a publisher requires a change to be visible to all | |
| | | users (e.g., correcting factual errors), they should consider | |
| | | publishing the revised entry in the subscription feed, in addition to | |
| | | (or instead of) the appropriate archive feed. Conversely, | |
| | | unimportant changes (e.g., spelling corrections) might be only | |
| | | effected in archive feeds. | |
| | | | |
| | | Publishers SHOULD construct their feed documents in such a way as to | |
| | | make duplicate removal unambiguous (see Section 4.2). | |
| | | | |
| | | Publishers are not required to make all archive documents available; | |
| | | they may refuse to serve (e.g., with HTTP status code 403 or 410), or | |
| | | be unable to serve (e.g., with HTTP status code 404) an archive | |
| | | document. | |
| | | | |
| | | 4.2. Consuming Archived Feeds | |
| | | | |
| | | Typically, clients will "subscribe" to an archived feed by polling | |
| | | the subscription document for recent changes. If URI contained in | |
| | | the prev-archive link relation has not been processed in the past, | |
| | | the client can "catch up" with any missed entries by dereferencing it | |
| | | and adding the contained entries to the logical feed. This process | |
| | | should be repeated recursively until the client encounters a prev- | |
| | | archive link relation that has been processed, the end of the archive | |
| | | is indicated by a missing prev-archive link relation, or an error is | |
| | | encountered. | |
| | | | |
| | | If duplicate entries are found, clients SHOULD consider only the most | |
| | | recently updated entry to be part of the logical feed. If duplicate | |
| | | entries have the same update time-stamp, or none is available, the | |
| | | entry sourced from the most recently updated feed document SHOULD | |
| | | replace all other duplicates of that entry. | |
| | | | |
| | | In Atom-formatted archived feeds, two entries are duplicates if they | |
| | | have the same atom:id element. The update time of an entry is | |
| | | determined by its atom:updated element, and likewise the update time | |
| | | of a feed document is determined by its feed-level atom:updated | |
| | | element. | |
| | | | |
| | | Clients SHOULD warn users when they are not able to reconstruct the | |
| | | entire logical feed (e.g., by alerting the user that an archive | |
| | | document is unavailable, or displaying pseudo-entries that inform the | |
| | | user that some entries may be missing). | |
| | | | |
| | | 5. IANA Considerations | |
| | | | |
| | | The "previous", "next" and "current" link relations have been | |
| | | previously registered, and no IANA action regarding them is required. | |
| | | | |
| | | This specification defines the following link relations: | |
| | | | |
| | | o Attribute Value: prev-archive | |
| | | o Description: A URI that refers to the immediately | |
| | | preceding archive document. | |
| | | o Expected display characteristics: none | |
| | | o Security considerations: See [ this document ] | |
| | | | |
| | | o Attribute Value: next-archive | |
| | | o Description: A URI that refers to the immediately | |
| | | following archive document. | |
| | | o Expected display characteristics: none | |
| | | o Security considerations: See [ this document ] | |
| | | | |
| | | 6. Security Considerations | |
| | | | |
| | | Feeds using these mechanisms could be crafted in such a way as to | |
| | | cause a client to initiate excessive (or even an unending sequence | |
| | | of) network requests, causing denial of service (either to the | |
| | | client, the target server, and/or intervening networks). Clients can | |
| | | mitigate this risk by requiring user intervention after a certain | |
| | | number of requests, or by limiting requests either according to a | |
| | | hard limit, or with heuristics. | |
| | | | |
| | | Clients should be mindful of resource limits when storing feed | |
| | | documents. To reiterate, they are not required to always store or | |
| | | reconstruct the feed when conforming to this specification; they only | |
| | | need inform the user when the reconstructed feed is not complete. | |
| | | | |
| | | 7. References | |
| | | | |
| | | 7.1. Normative References | |
| | | | |
| | | [RFC2119] Bradner, S., "Key words for use in | |
| | | RFCs to Indicate Requirement Levels", | |
| | | BCP 14, RFC 2119, March 1997. | |
| | | | |
| | | [RFC3986] Berners-Lee, T., Fielding, R., and L. | |
| | | Masinter, "Uniform Resource | |
| | | Identifier (URI): Generic Syntax", | |
| | | STD 66, RFC 3986, January 2005. | |
| | | | |
| | | [RFC4287] Nottingham, M. and R. Sayre, "The | |
| | | Atom Syndication Format", RFC 4287, | |
| | | December 2005. | |
| | | | |
| | | [W3C.REC-xml-infoset-20040204] Cowan, J. and R. Tobin, "XML | |
| | | Information Set (Second Edition)", | |
| | | W3C REC REC-xml-infoset-20040204, | |
| | | February 2004. | |
| | | | |
| | | [W3C.REC-xml-names-19990114] Bray, T., Hollander, D., and A. | |
| | | Layman, "Namespaces in XML", W3C | |
| | | REC REC-xml-names-19990114, | |
| | | January 1999. | |
| | | | |
| | | 7.2. Informative References | |
| | | | |
| | | [RSS2] Win |