| draft-ietf-atompub-format-05.txt | draft-ietf-atompub-format-06.txt | |||
|---|---|---|---|---|
| Network Working Group M. Nottingham, Ed. | Network Working Group M. Nottingham, Ed. | |||
| Internet-Draft | Internet-Draft | |||
| Expires: July 27, 2005 R. Sayre, Ed. | Expires: September 13, 2005 R. Sayre, Ed. | |||
| Boswijck Memex Consulting | Boswijck Memex Consulting | |||
| January 26, 2005 | March 12, 2005 | |||
| The Atom Syndication Format | The Atom Syndication Format | |||
| draft-ietf-atompub-format-05 | draft-ietf-atompub-format-06 | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, I certify that any applicable | This document is an Internet-Draft and is subject to all provisions | |||
| patent or other IPR claims of which I am aware have been disclosed, | of Section 3 of RFC 3667. By submitting this Internet-Draft, each | |||
| and any of which I become aware will be disclosed, in accordance with | author represents that any 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 become aware will be disclosed, in accordance with | ||||
| RFC 3668. | RFC 3668. | |||
| 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 | |||
| other groups may also distribute working documents as | other groups may also distribute working documents as | |||
| Internet-Drafts. | Internet-Drafts. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| 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 July 27, 2005. | This Internet-Draft will expire on September 13, 2005. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2005). All Rights Reserved. | Copyright (C) The Internet Society (2005). | |||
| Abstract | Abstract | |||
| This document specifies Atom, an XML-based Web content and metadata | This document specifies Atom, an XML-based Web content and metadata | |||
| syndication format. | syndication format. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.1 Editorial Notes . . . . . . . . . . . . . . . . . . . . . 4 | 1.1 Editorial Notes . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 1.3 Conformance . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.3 Notational Conventions . . . . . . . . . . . . . . . . . . 5 | |||
| 1.4 Notational Conventions . . . . . . . . . . . . . . . . . . 5 | ||||
| 2. Atom Documents . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Atom Documents . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. Common Atom Constructs . . . . . . . . . . . . . . . . . . . 9 | 3. Common Atom Constructs . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.1 Text Constructs . . . . . . . . . . . . . . . . . . . . . 9 | 3.1 Text Constructs . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.1.1 "type" Attribute . . . . . . . . . . . . . . . . . . . 9 | 3.1.1 "type" Attribute . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.2 Person Constructs . . . . . . . . . . . . . . . . . . . . 10 | 3.2 Person Constructs . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.2.1 The "atom:name" Element . . . . . . . . . . . . . . . 10 | 3.2.1 The "atom:name" Element . . . . . . . . . . . . . . . 11 | |||
| 3.2.2 The "atom:uri" Element . . . . . . . . . . . . . . . . 10 | 3.2.2 The "atom:uri" Element . . . . . . . . . . . . . . . . 11 | |||
| 3.2.3 The "atom:email" Element . . . . . . . . . . . . . . . 11 | 3.2.3 The "atom:email" Element . . . . . . . . . . . . . . . 11 | |||
| 3.3 Date Constructs . . . . . . . . . . . . . . . . . . . . . 11 | 3.3 Date Constructs . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.4 Service Constructs . . . . . . . . . . . . . . . . . . . . 11 | 4. Atom Element Definitions . . . . . . . . . . . . . . . . . . 13 | |||
| 3.4.1 The "href" Attribute . . . . . . . . . . . . . . . . . 11 | 4.1 Container Elements . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.5 Identity Constructs . . . . . . . . . . . . . . . . . . . 11 | 4.1.1 The "atom:feed" Element . . . . . . . . . . . . . . . 13 | |||
| 3.5.1 Dereferencing Identity Constructs . . . . . . . . . . 12 | 4.1.2 The "atom:entry" Element . . . . . . . . . . . . . . . 14 | |||
| 3.5.2 Comparing Identity Constructs . . . . . . . . . . . . 12 | 4.1.3 The "atom:content" Element . . . . . . . . . . . . . . 16 | |||
| 4. Element Definitions . . . . . . . . . . . . . . . . . . . . 14 | 4.2 Metadata Elements . . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.1 The "atom:feed" Element . . . . . . . . . . . . . . . . . 14 | 4.2.1 The "atom:author" Element . . . . . . . . . . . . . . 19 | |||
| 4.1.1 The "version" Attribute . . . . . . . . . . . . . . . 14 | 4.2.2 The "atom:category" Element . . . . . . . . . . . . . 20 | |||
| 4.2 The "atom:head" Element . . . . . . . . . . . . . . . . . 14 | 4.2.3 The "atom:contributor" Element . . . . . . . . . . . . 20 | |||
| 4.2.1 Usage of "atom:head" within "atom:entry" . . . . . . . 16 | 4.2.4 The "atom:copyright Element . . . . . . . . . . . . . 20 | |||
| 4.3 The "atom:entry" Element . . . . . . . . . . . . . . . . . 16 | 4.2.5 The "atom:generator" Element . . . . . . . . . . . . . 21 | |||
| 4.4 The "atom:title" Element . . . . . . . . . . . . . . . . . 18 | 4.2.6 The "atom:icon" Element . . . . . . . . . . . . . . . 21 | |||
| 4.5 The "atom:id" Element . . . . . . . . . . . . . . . . . . 18 | 4.2.7 The "atom:id" Element . . . . . . . . . . . . . . . . 21 | |||
| 4.6 The "atom:link" Element . . . . . . . . . . . . . . . . . 18 | 4.2.8 The "atom:image" Element . . . . . . . . . . . . . . . 23 | |||
| 4.6.1 The "href" Attribute . . . . . . . . . . . . . . . . . 19 | 4.2.9 The "atom:link" Element . . . . . . . . . . . . . . . 23 | |||
| 4.6.2 The "rel" Attribute . . . . . . . . . . . . . . . . . 19 | 4.2.10 The "atom:published" Element . . . . . . . . . . . . 26 | |||
| 4.6.3 The "type" Attribute . . . . . . . . . . . . . . . . . 20 | 4.2.11 The "atom:source-feed" Element . . . . . . . . . . . 26 | |||
| 4.6.4 The "hreflang" Attribute . . . . . . . . . . . . . . . 20 | 4.2.12 The "atom:subtitle" Element . . . . . . . . . . . . 26 | |||
| 4.6.5 The "title" Attribute . . . . . . . . . . . . . . . . 20 | 4.2.13 The "atom:summary" Element . . . . . . . . . . . . . 27 | |||
| 4.6.6 The "length" Attribute . . . . . . . . . . . . . . . . 20 | 4.2.14 The "atom:title" Element . . . . . . . . . . . . . . 27 | |||
| 4.7 The "atom:updated" Element . . . . . . . . . . . . . . . . 20 | 4.2.15 The "atom:updated" Element . . . . . . . . . . . . . 27 | |||
| 4.8 The "atom:published" Element . . . . . . . . . . . . . . . 21 | 5. Securing Atom Documents . . . . . . . . . . . . . . . . . . 28 | |||
| 4.9 The "atom:author" Element . . . . . . . . . . . . . . . . 21 | 5.1 Digital Signatures . . . . . . . . . . . . . . . . . . . . 28 | |||
| 4.10 The "atom:contributor" Element . . . . . . . . . . . . . 21 | 5.2 Encryption . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 4.11 The "atom:host" Element . . . . . . . . . . . . . . . . 21 | 6. Extending Atom . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 4.12 The "atom:copyright" Element . . . . . . . . . . . . . . 21 | 6.1 Extensions From Non-Atom Vocabularies . . . . . . . . . . 29 | |||
| 4.13 The "atom:category" Element . . . . . . . . . . . . . . 22 | 6.2 Extensions To the Atom Vocabulary . . . . . . . . . . . . 29 | |||
| 4.13.1 The "term" Attribute . . . . . . . . . . . . . . . . 22 | 6.3 Software Processing of Foreign Markup . . . . . . . . . . 29 | |||
| 4.13.2 The "scheme" Attribute . . . . . . . . . . . . . . . 22 | 6.4 Extension Elements . . . . . . . . . . . . . . . . . . . . 29 | |||
| 4.13.3 The "label" attribute . . . . . . . . . . . . . . . 22 | 6.4.1 Simple Extension Elements . . . . . . . . . . . . . . 30 | |||
| 4.14 The "atom:summary" Element . . . . . . . . . . . . . . . 22 | 6.4.2 Structured Extension Elements . . . . . . . . . . . . 30 | |||
| 4.15 The "atom:content" Element . . . . . . . . . . . . . . . 23 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . 31 | |||
| 4.15.1 The "type" attribute . . . . . . . . . . . . . . . . 23 | 7.1 Registry of Link Relations . . . . . . . . . . . . . . . . 31 | |||
| 4.15.2 The "src" attribute . . . . . . . . . . . . . . . . 23 | 8. Security Considerations . . . . . . . . . . . . . . . . . . 33 | |||
| 4.15.3 Processing Model . . . . . . . . . . . . . . . . . . 24 | 8.1 HTML and XHTML Content . . . . . . . . . . . . . . . . . . 33 | |||
| 4.16 The "atom:introspection" Element . . . . . . . . . . . . 25 | 8.2 URIs . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 4.17 The "atom:post" Element . . . . . . . . . . . . . . . . 25 | 8.3 IRIs . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 4.18 The "atom:edit" Element . . . . . . . . . . . . . . . . 25 | 8.4 Encryption and Signing . . . . . . . . . . . . . . . . . . 33 | |||
| 4.19 The "atom:tagline" Element . . . . . . . . . . . . . . . 25 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 4.20 The "atom:generator" Element . . . . . . . . . . . . . . 25 | 9.1 Normative References . . . . . . . . . . . . . . . . . . . 34 | |||
| 4.21 The "atom:info" Element . . . . . . . . . . . . . . . . 26 | 9.2 Informative References . . . . . . . . . . . . . . . . . . 35 | |||
| 5. Managing Feed State . . . . . . . . . . . . . . . . . . . . 27 | ||||
| 6. Securing Atom Documents . . . . . . . . . . . . . . . . . . 28 | ||||
| 6.1 Digital Signatures . . . . . . . . . . . . . . . . . . . . 28 | ||||
| 6.2 Encryption . . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
| 7. Embedding Atom in Other Formats . . . . . . . . . . . . . . 29 | ||||
| 8. Extending Atom . . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . 31 | ||||
| 9.1 Registry of Link Relations . . . . . . . . . . . . . . . . 31 | ||||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . 33 | ||||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 11.1 Normative References . . . . . . . . . . . . . . . . . . . 34 | ||||
| 11.2 Informative References . . . . . . . . . . . . . . . . . . 35 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 36 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 36 | |||
| A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 37 | A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| B. Collected RELAX NG Compact Schema . . . . . . . . . . . . . 38 | B. Collected RELAX NG Compact Schema . . . . . . . . . . . . . 38 | |||
| C. Revision History . . . . . . . . . . . . . . . . . . . . . . 45 | C. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
| Intellectual Property and Copyright Statements . . . . . . . 47 | Intellectual Property and Copyright Statements . . . . . . . 48 | |||
| 1. Introduction | 1. Introduction | |||
| Atom is an XML-based document format which describes lists of related | Atom is an XML-based document format that describes lists of related | |||
| information known as "feeds". Feeds are composed of a number of | information known as "feeds". Feeds are composed of a number of | |||
| items, known as "entries", each with an extensible set of attached | items, known as "entries", each with an extensible set of attached | |||
| metadata. For example, each entry has a title. | metadata. For example, each entry has a title. | |||
| The primary use case that Atom addresses is the syndication of Web | The primary use case that Atom addresses is the syndication of Web | |||
| content such as Weblogs and news headlines to Web sites as well as | content such as Weblogs and news headlines to Web sites as well as | |||
| directly to user agents. However, nothing precludes it from being | directly to user agents. However, nothing precludes it from being | |||
| used for other purposes and kinds of content. | used for other purposes and kinds of content. | |||
| Details of communication protocols between software agents using Atom | ||||
| can be found in the Atom Protocol specification [Atom-protocol]. | ||||
| [[ more motivation / design principles ]] | ||||
| 1.1 Editorial Notes | 1.1 Editorial Notes | |||
| The Atom format is a work-in-progress, and this draft is both | The Atom format is a work-in-progress, and this draft is both | |||
| incomplete and likely to change rapidly. As a result, THE FORMAT | incomplete and likely to change rapidly. As a result, THE FORMAT | |||
| DESCRIBED BY THIS DRAFT SHOULD NOT BE DEPLOYED, either in production | DESCRIBED BY THIS DRAFT SHOULD NOT BE DEPLOYED, either in production | |||
| systems or in any non-experimental fashion on the Internet. | systems or in any non-experimental fashion on the Internet. | |||
| Discussion of this draft happens in two fora; | Discussion of this draft happens in two fora; | |||
| The mailing list [1] | The mailing list <http://www.imc.org/atom-syntax/index.html> | |||
| The Atom Wiki Web site [2] | The Atom Wiki Web site | |||
| <http://www.intertwingly.net/wiki/pie/FrontPage> | ||||
| Active development takes place on the mailing list, while the Wiki is | Active development takes place on the mailing list, while the Wiki is | |||
| used for issue tracking and new proposals. | used for issue tracking and new proposals. | |||
| This document is an early draft and known to be incomplete. Topics | ||||
| marked [[like this]] indicate where additional text is likely to be | ||||
| added. | ||||
| 1.2 Example | 1.2 Example | |||
| A minimal, single-entry Atom Feed Document: | A minimal, single-entry Atom Feed Document: | |||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <feed version="draft-ietf-atompub-format-05:do not deploy" | <feed | |||
| xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-05"> | xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-06"> | |||
| <head> | ||||
| <title>Example Feed</title> | <title>Example Feed</title> | |||
| <link href="http://example.org/"/> | <link href="http://example.org/"/> | |||
| <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> | |||
| </head> | ||||
| <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>vemmi://example.org/2003/32397</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2003-12-13T18:30:02Z</updated> | <updated>2003-12-13T18:30:02Z</updated> | |||
| </entry> | </entry> | |||
| </feed> | </feed> | |||
| 1.3 Conformance | [[anchor4: Ask yourself: is the example atom:entry valid?]] | |||
| [[ talk about atom documents and atom consumers, and how requirements | 1.3 Notational Conventions | |||
| are placed on them ]] | ||||
| 1.4 Notational Conventions | This specification describes conformance in terms of two kinds of | |||
| artefacts; Atom Feed Documents and Atom Entry documents. | ||||
| Additionally, it places some requirements on Atom Processors. | ||||
| 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]. | document are to be interpreted as described in BCP 14, [RFC2119], as | |||
| 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 elements and attribute names. It uses the | to uniquely identify XML elements names. It uses the following | |||
| following namespace prefixes for the indicated namespace URIs; | namespace prefixes for the indicated namespace URIs; | |||
| "atom": http://purl.org/atom/ns#draft-ietf-atompub-format-05 | "atom": http://purl.org/atom/ns#draft-ietf-atompub-format-06 | |||
| Note that the choice of any namespace prefix is arbitrary and not | Note that the choice of any namespace prefix is arbitrary and not | |||
| semantically significant. | semantically significant. | |||
| Atom is specified using terms from the XML Infoset | Atom is specified using terms from the XML Infoset | |||
| [W3C.REC-xml-infoset-20011024]. However, this specification uses a | [W3C.REC-xml-infoset-20040204]. However, this specification uses a | |||
| shorthand for two common terms; the phrase "Information Item" is | shorthand for two common terms; the phrase "Information Item" is | |||
| omitted when naming Element Information Items and Attribute | omitted when naming Element Information Items and Attribute | |||
| Information Items. | Information Items. | |||
| Therefore, when this specification uses the term "element," it is | Therefore, when this specification uses the term "element," it is | |||
| referring to an Element Information Item in Infoset terms. Likewise, | referring to an Element Information Item in Infoset terms. Likewise, | |||
| when it uses the term "attribute," it is referring to an Attribute | when it uses the term "attribute," it is referring to an Attribute | |||
| Information Item. | Information Item. | |||
| Some sections of this specification are illustrated with fragments of | Some sections of this specification are illustrated with fragments of | |||
| skipping to change at page 7, line 12 | skipping to change at page 7, line 12 | |||
| text of this specification provides the definition of conformance. A | text of this specification provides the definition of conformance. A | |||
| collected schema appears in an informative appendix. | collected schema appears in an informative appendix. | |||
| 2. Atom Documents | 2. Atom Documents | |||
| This specification describes two kinds of Atom Documents; Atom Feed | This specification describes two kinds of Atom Documents; Atom Feed | |||
| Documents and Atom Entry Documents. | Documents and Atom Entry Documents. | |||
| An Atom Feed Document is a representation of an Atom feed, including | An Atom Feed Document is a representation of an Atom feed, including | |||
| metadata about the feed, and some or all of the entries associated | metadata about the feed, and some or all of the entries associated | |||
| with it. Its document element is atom:feed. | with it. Its root is the atom:feed element. | |||
| An Atom Entry Document represents exactly one Atom Entry, outside of | An Atom Entry Document represents exactly one Atom Entry, outside of | |||
| the context of an Atom Feed. Its document element is atom:entry. | the context of an Atom Feed. Its root is the atom:entry element. | |||
| namespace atom = | namespace | |||
| "http://purl.org/atom/ns#draft-ietf-atompub-format-05" | atom ="http://purl.org/atom/ns#draft-ietf-atompub-format-06" | |||
| start = atomFeed | atomEntry | start = atomFeed | atomEntry | |||
| Both kinds of Atom documents are specified in terms of the XML | Both kinds of Atom documents are specified in terms of the XML | |||
| Information Set, serialised as XML 1.0 [W3C.REC-xml-20040204] and | Information Set, serialised as XML 1.0 [W3C.REC-xml-20040204] and | |||
| identified with the "application/atom+xml" media type. Atom | identified with the "application/atom+xml" media type. Atom | |||
| Documents MUST be well-formed XML. | Documents MUST be well-formed XML. | |||
| Atom constrains the appearance and content of elements and | Atom constrains the appearance and content of elements and | |||
| attributes; unless otherwise stated, Atom Documents MAY contain other | attributes; unless otherwise stated, Atom Documents MAY contain other | |||
| Information Items as appropriate. In particular, Comment Information | Information Items as appropriate. In particular, Comment Information | |||
| Items and Processing Instruction Information Items SHOULD be ignored | Items and Processing Instruction Information Items SHOULD be ignored | |||
| in the normal processing of an Atom Document. | in the normal processing of an Atom Document. | |||
| Any element in an Atom Document MAY have an xml:base attribute. XML | Any element in an Atom Document MAY have an xml:base attribute. XML | |||
| Base [W3C.REC-xmlbase-20010627] processing MUST be applied to any | Base [W3C.REC-xmlbase-20010627] processing MUST be applied to any | |||
| relative reference [RFC3986] present in an Atom Document. This | relative reference [RFC3987] present in an Atom Document. This | |||
| includes such elements and attributes as specified by Atom itself, as | includes such elements and attributes as specified by Atom itself, as | |||
| well as those specified by extensions to Atom. | well as those specified by extensions to Atom. | |||
| Any element in an Atom Document MAY have an xml:lang attribute, whose | Any element in an Atom Document MAY have an xml:lang attribute, whose | |||
| content indicates the natural language of the element's content. | content indicates the natural language for the element and its | |||
| children. The language context is only significant for elements and | ||||
| attributes declared to be "language-sensitive" by this specification. | ||||
| Requirements regarding the content and interpretation of xml:lang are | Requirements regarding the content and interpretation of xml:lang are | |||
| specified in XML 1.0 [W3C.REC-xml-20040204] Section 2.12. | specified in XML 1.0 [W3C.REC-xml-20040204], Section 2.12. | |||
| atomCommonAttributes = | atomCommonAttributes = | |||
| attribute xml:base { atomUri }?, | attribute xml:base { atomUri }?, | |||
| attribute xml:lang { atomLanguageTag }? | attribute xml:lang { atomLanguageTag }? | |||
| [[ discussion of URI escaping and i18n, IRI ]] | Atom allows the use of IRIs [RFC3987], rather than only URIs | |||
| [RFC3986]. For resolution, IRIs can easily be converted to URIs. | ||||
| When comparing IRIs serving as Identity Constructs, they MUST NOT be | ||||
| converted to URIs. Please note that by definition, every URI is an | ||||
| IRI, so any URI can be used where an IRI is needed. | ||||
| [[ discussion of white space ]] | [[anchor7: discussion of white space]] | |||
| Atom is extensible. See the section titled 'Extending Atom' later in | Atom is an extensible format. See the section titled 'Extending | |||
| this document for a full description of how Atom Documents can be | Atom' later in this document for a full description of how Atom | |||
| extended. | Documents can be extended. | |||
| Atom Processors MAY keep state (e.g., metadata in atom:feed, entries) | ||||
| sourced from Atom Feed Documents and combine them with other Atom | ||||
| Feed Documents, in order to facilitate a contiguous view of the | ||||
| contents of a feed. The manner in which Atom Feed Documents are | ||||
| combined in order to reconstruct a feed (e.g., updating entries and | ||||
| metadata, dealing with missing entries) is out of the scope of this | ||||
| specification, but may be defined by an extension to Atom. | ||||
| 3. Common Atom Constructs | 3. Common Atom Constructs | |||
| Many of Atom's elements share a few common structures. This section | Many of Atom's elements share a few common structures. This section | |||
| defines a few such structures and their requirements for convenient | defines a few such structures and their requirements for convenient | |||
| reference by the appropriate element definitions. | reference by the appropriate element definitions. | |||
| When an element is identified as being a particular kind of | When an element is identified as being a particular kind of | |||
| construct, it inherits the corresponding requirements from that | construct, it inherits the corresponding requirements from that | |||
| construct's definition in this section. | construct's definition in this section. | |||
| 3.1 Text Constructs | 3.1 Text Constructs | |||
| A Text construct contains human readable text, usually in fairly | A Text construct contains human readable text, usually in small | |||
| small quantities. | quantities. Except for the "type" attribute, the content of Text | |||
| constructs is language-sensitive. | ||||
| atomPlainTextConstruct = | atomPlainTextConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "TEXT" | "HTML" }?, | attribute type { "text" | "html" }?, | |||
| text | text | |||
| atomXHTMLTextConstruct = | atomXHTMLTextConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "XHTML" }, | attribute type { "xhtml" }, | |||
| (text|anyElement)* | (text|anyElement)* | |||
| atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct | atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct | |||
| 3.1.1 "type" Attribute | 3.1.1 "type" Attribute | |||
| Text constructs MAY have a "type" attribute. When present, the value | Text constructs MAY have a "type" attribute. [[anchor11: Some feel | |||
| MUST be one of "TEXT", "HTML" or "XHTML". If the "type" attribute is | type attributes with different allowable values in different elements | |||
| not provided, software MUST behave as though it were present with a | is confusing.]]. When present, the value MUST be one of "text", | |||
| value of "TEXT". | "html" or "xhtml". If the "type" attribute is not provided, Atom | |||
| Processors MUST behave as though it were present with a value of | ||||
| "text". | ||||
| Note that MIME media types [RFC2045] are not acceptable values for | Note that MIME media types [RFC2045] are not acceptable values for | |||
| the "type" attribute. | the "type" attribute. | |||
| If the value is "TEXT", the content of the Text construct MUST NOT | If the value is "text", the content of the Text construct MUST NOT | |||
| contain child elements. Such text is intended to be presented to | contain child elements. Such text is intended to be presented to | |||
| humans in a readable fashion. Thus, software MAY display it using | humans in a readable fashion. Thus, Atom Processors MAY display it | |||
| normal text rendering techniques such as proportional fonts, | using normal text rendering techniques such as proportional fonts, | |||
| white-space collapsing, and justification. | white-space collapsing, and justification. | |||
| If the value of "type" is "HTML", the content of the Text construct | If the value of "type" is "html", the content of the Text construct | |||
| MUST NOT contain child elements, and SHOULD be suitable for handling | MUST NOT contain child elements, and SHOULD be suitable for handling | |||
| by software that knows HTML. The HTML markup must be escaped; for | as HTML [W3C.REC-html401-19991224]. Any markup within MUST be | |||
| example, "<br>" as "<br>". The HTML markup SHOULD be such that it | escaped; for example, "<br>" as "<br>". HTML markup within SHOULD | |||
| could validly appear directly within an HTML <DIV> element. | be such that it could validly appear directly within an HTML <DIV> | |||
| Receiving software which displays the content MAY use the markup to | element, after unescaping. Atom Processors that display such content | |||
| aid in displaying it. | MAY use markup to aid in its display. | |||
| [[example atom entry w/ escaped markup]] | [[anchor12: example atom entry w/ escaped markup]] | |||
| If the value of "type" is "XHTML", the content of the Text construct | If the value of "type" is "xhtml", the content of the Text construct | |||
| MAY contain child elements. The content SHOULD be XHTML text and | MUST be a single XHTML div element [W3C.REC-xhtml-basic-20001219]. | |||
| markup that could validly appear directly within an xhtml:div | The XHTML div MUST contain XHTML text and markup that could validly | |||
| element. Receiving software which displays the content MAY use the | appear within an XHTML div element. The XHTML div element itself | |||
| markup to aid in displaying it. Escaped markup is interpreted as a | MUST NOT be considered part of the content. Atom Processors which | |||
| text representation of markup, and MUST NOT be interpreted as markup | display the content MAY use the markup to aid in displaying it. | |||
| itself. | Escaped markup is interpreted as a text representation of markup, and | |||
| MUST NOT be interpreted as markup itself. | ||||
| Example: | ||||
| ... | ||||
| <summary type="xhtml"> | ||||
| <div xmlns="http://www.w3.org/1999/xhtml"> | ||||
| This is <b>XHTML</b> content. | ||||
| </div> | ||||
| </summary> | ||||
| ... | ||||
| <summary type="xhtml"> | ||||
| <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | ||||
| This is <xhtml:b>XHTML</xhtml:b> content. | ||||
| </xhtml:div> | ||||
| </summary> | ||||
| ... | ||||
| The following example assumes that the XHTML namespace has been bound | ||||
| to the "xh" prefix earlier in the document: | ||||
| ... | ||||
| <summary type="xhtml"> | ||||
| <xh:div> | ||||
| This is <xh:b>XHTML</xh:b> content. | ||||
| </xh:div> | ||||
| </summary> | ||||
| ... | ||||
| 3.2 Person Constructs | 3.2 Person Constructs | |||
| A Person construct is an element that describes a person, | A Person construct is an element that describes a person, | |||
| corporation, or similar entity. | corporation, or similar entity (hereafter, 'person'). | |||
| Person constructs MAY be extended by namespace-qualified element | Person constructs MAY be extended by namespace-qualified element | |||
| children. | children. | |||
| This specification assigns no significance to the order of appearance | This specification assigns no significance to the order of appearance | |||
| of the child elements in a Person construct. | of the child elements in a Person construct. | |||
| atomPersonConstruct = | atomPersonConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (element atom:name { text } | (element atom:name { text } & | |||
| & element atom:uri { atomUri }? | element atom:uri { atomUri }? & | |||
| & element atom:email { atomEmailAddress }?) | element atom:email { atomEmailAddress }?) | |||
| 3.2.1 The "atom:name" Element | 3.2.1 The "atom:name" Element | |||
| The "atom:name" element's content conveys a human-readable name for | The "atom:name" element's content conveys a human-readable name for | |||
| the person. Person constructs MUST contain exactly one "atom:name" | the person. The content of atom:name is language sensitive. Person | |||
| element. | constructs MUST contain exactly one "atom:name" element. | |||
| 3.2.2 The "atom:uri" Element | 3.2.2 The "atom:uri" Element | |||
| The "atom:uri" element's content conveys a URI associated with the | The "atom:uri" element's content conveys an IRI associated with the | |||
| person. Person constructs MAY contain an atom:uri element, but MUST | person. Person constructs MAY contain an atom:uri element, but MUST | |||
| NOT contain more than one. The content of atom:uri in a Person | NOT contain more than one. The content of atom:uri in a Person | |||
| construct MUST be a URI reference [RFC3986]. | construct MUST be an IRI reference [RFC3987]. | |||
| xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the | xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the | |||
| atom:uri element's content. | atom:uri element's content. | |||
| 3.2.3 The "atom:email" Element | 3.2.3 The "atom:email" Element | |||
| The "atom:email" element's content conveys an e-mail address | The "atom:email" element's content conveys an e-mail address | |||
| associated with the persons. Person constructs MAY contain an | associated with the person. Person constructs MAY contain an | |||
| atom:email element, but MUST NOT contain more than one. Its content | atom:email element, but MUST NOT contain more than one. Its content | |||
| MUST be an e-mail address [RFC2822]. | MUST conform to the addr-spec BNF rule in [RFC2822]. | |||
| 3.3 Date Constructs | 3.3 Date Constructs | |||
| A Date construct is an element whose content MUST conform to the | A Date construct is an element whose content MUST conform to the | |||
| date-time BNF rule in [RFC3339]. | date-time BNF rule in [RFC3339]. I.e., the content of this element | |||
| matches this regular expression: | ||||
| atomDateConstruct = | ||||
| atomCommonAttributes, | ||||
| xsd:dateTime | ||||
| 3.4 Service Constructs | ||||
| A Service construct is an empty element that conveys the URI of an | ||||
| Atom Publishing Protocol [Atom-protocol] service associated with an | ||||
| entry or feed. | ||||
| atomServiceConstruct = | ||||
| atomCommonAttributes, | ||||
| attribute href { atomUri } | ||||
| 3.4.1 The "href" Attribute | ||||
| The "href" attribute contains the a URI of the service. atom:service | ||||
| elements MUST have a "href" attribute, whose value MUST be a URI | ||||
| reference [RFC3986]. | ||||
| xml:base processing MUST be applied to the "href" attribute. | ||||
| 3.5 Identity Constructs | ||||
| An Identity construct is an element whose content conveys a | [0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+) | |||
| permanent, universally unique identifier for the construct's parent. | ?(Z|[\+\-][0-9]{2}:[0-9]{2}) | |||
| Its content MUST be a URI, as defined by [RFC3986]. Note that the | ||||
| definition of "URI" excludes relative references. | ||||
| When an Atom document is relocated, migrated, syndicated, | As a result, the date values conform to the following specifications: | |||
| republished, exported or imported, the content of its Identity | [RFC3339], [W3C.REC-xmlschema-2-20041028], | |||
| construct MUST NOT change. Put another way, an Identity construct | [W3C.NOTE-datetime-19980827], and [ISO.8601.1988]. | |||
| pertains to all instantiations of a particular Atom entry or feed; | ||||
| revisions retain the same content in their Identity constructs. | ||||
| atomIdentityConstruct = | atomDateConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (atomUri) | xsd:dateTime | |||
| 3.5.1 Dereferencing Identity Constructs | ||||
| The content of an Identity construct MAY be dereferencable (e.g. an | ||||
| HTTP URI). However, processors MUST NOT assume it to be | ||||
| dereferencable. | ||||
| The content of an Identity construct MUST be created in a way that | ||||
| assures uniqueness, and it is suggested that the Identity construct | ||||
| be stored along with the associated resource. | ||||
| Because of the risk of confusion between URIs that would be | ||||
| equivalent if dereferenced, the following normalization strategy is | ||||
| strongly encouraged when generating Identity constructs: | ||||
| o Provide the scheme in lowercase characters. | ||||
| o Provide the host, if any, in lowercase characters. | ||||
| o Only perform percent-encoding where it is essential. | ||||
| o Use uppercase A-through-F characters when percent-encoding. | ||||
| o Prevent dot-segments appearing in paths. | ||||
| o For schemes that define a default authority, use an empty | ||||
| authority if the default is desired. | ||||
| o For schemes that define an empty path to be equivalent to a path | ||||
| of "/", use "/". | ||||
| o For schemes that define a port, use an empty port if the default | ||||
| is desired. | ||||
| o Preserve empty fragment identifiers and queries. | ||||
| o Ensure that all portions of the URI are UTF-8 encoded NFC form | ||||
| Unicode strings. | ||||
| 3.5.2 Comparing Identity Constructs | ||||
| Instances of Identity constructs can be compared to determine whether | ||||
| an entry or feed is the same as one seen before. Processors MUST | ||||
| compare Identity constructs on a character-by-character basis in a | ||||
| case-sensitive fashion. | ||||
| As a result, two URIs that resolve to the same resource but are not | ||||
| character-for-character identical will be considered different for | ||||
| the purposes of Identifier comparison. | ||||
| For example, "http://www.example.org/thing", | 4. Atom Element Definitions | |||
| "http://www.example.org/Thing", "http://www.EXAMPLE.org/thing" and | ||||
| "HTTP://www.example.org/thing" will all be considered different | ||||
| identifiers, despite their differences in case. | ||||
| Likewise, "http://www.example.com/~bob", | 4.1 Container Elements | |||
| "http://www.example.com/%7ebob" and "http://www.example.com/%7Ebob" | ||||
| will all be considered different identifiers, because URI %-escaping | ||||
| is significant for the purposes of comparison. | ||||
| 4. Element Definitions | 4.1.1 The "atom:feed" Element | |||
| 4.1 The "atom:feed" Element | [[anchor21: Substantially changed from format-05, review carefully.]] | |||
| The "atom:feed" element is the document (i.e., top-level) element of | The "atom:feed" element is the document (i.e., top-level) element of | |||
| an Atom Feed Document, acting as a container for metadata and data | an Atom Feed Document, acting as a container for metadata and data | |||
| associated with the feed. Its first element child MUST be atom:head, | associated with the feed. Its element children consist of one or | |||
| which MAY be followed zero or more atom:entry child elements. | more metadata elements followed by zero or more atom:entry child | |||
| elements. | ||||
| This specification assigns no significance to the order of atom:entry | ||||
| elements within the feed. | ||||
| atomFeed = | atomFeed = | |||
| element atom:feed { | element atom:feed { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| atomVersionAttribute, | (atomAuthor? | |||
| (atomHead | & atomCategory* | |||
| & atomEntry* | ||||
| & anyElement*) | ||||
| } | ||||
| 4.1.1 The "version" Attribute | ||||
| atom:feed elements MUST have a "version" attribute whose content | ||||
| indicates the version of the Atom specification that the feed | ||||
| conforms to. The content of this attribute is unstructured text. | ||||
| The version identifier for this specification is | ||||
| "draft-ietf-atompub-format-05: do not deploy". | ||||
| atomVersionAttribute = | ||||
| attribute version {"draft-ietf-atompub-format-05 : do not deploy"} | ||||
| 4.2 The "atom:head" Element | ||||
| The atom:head element acts as a container for metadata about the feed | ||||
| itself. | ||||
| The atom:head element MAY contain any namespace-qualified | ||||
| [W3C.REC-xml-names-19990114] elements as children. This | ||||
| specification assigns no significance to the order of appearance of | ||||
| the child elements of atom:head. | ||||
| atomHead = | ||||
| element atom:head { | ||||
| atomCommonAttributes, | ||||
| (atomTitle | ||||
| & atomUpdated | ||||
| & atomLink+ | ||||
| & atomId? | ||||
| & atomAuthor? | ||||
| & atomContributor* | & atomContributor* | |||
| & atomTagline? | ||||
| & atomGenerator? | ||||
| & atomInfo? | ||||
| & atomCopyright? | & atomCopyright? | |||
| & atomCategory* | & atomGenerator? | |||
| & atomIntrospection? | & atomIcon? | |||
| & atomPost? | & atomId? | |||
| & anyElement*) | & atomImage? | |||
| & atomLink+ | ||||
| & atomSubtitle? | ||||
| & atomTitle | ||||
| & atomUpdated | ||||
| & anyElement* ), | ||||
| atomEntry* | ||||
| } | } | |||
| The following child elements are defined by this specification (note | The following child elements are defined by this specification (note | |||
| that the presence of some of these elements is required): | that the presence of some of these elements is required): | |||
| o atom:head elements MUST contain exactly one atom:title element. | o atom:feed elements MUST contain exactly one atom:author element, | |||
| o atom:head elements MUST contain at least one atom:link element | ||||
| with a rel attribute value of "alternate". | ||||
| o atom:head elements MUST NOT contain more than one atom:link | ||||
| element with a rel attribute value of "alternate" that has the | ||||
| same type attribute value. If a feed's atom:link element with | ||||
| type="alternate" resolves to an HTML document, then that document | ||||
| SHOULD have a autodiscovery link element [Atom-autodiscovery] that | ||||
| reflects back to the feed. atom:head elements MAY contain | ||||
| additional atom:link elements beyond those described above. | ||||
| o atom:head elements MUST contain exactly one atom:author element, | ||||
| UNLESS all of the atom:feed element's child atom:entry elements | UNLESS all of the atom:feed element's child atom:entry elements | |||
| contain an atom:author element. atom:head elements MUST NOT | contain an atom:author element. atom:feed elements MUST NOT | |||
| contain more than one atom:author element. [[inheritance]] | contain more than one atom:author element. [[anchor22: | |||
| o atom:head elements MUST NOT contain more than one an | inheritance]] | |||
| atom:contributor element. | o atom:feed elements MAY contain any number of atom:category | |||
| o atom:head elements MUST NOT contain more than one an | ||||
| atom:copyright element. | ||||
| o atom:head elements MUST NOT contain more than one an atom:id | ||||
| element. | ||||
| o atom:head elements MUST contain exactly one atom:updated element. | ||||
| o atom:head elements MAY contain any number of atom:category | ||||
| elements. | elements. | |||
| o atom:head elements MUST NOT contain more than one atom:post | ||||
| element. | ||||
| o atom:head elements MUST NOT contain more than one | o atom:feed elements MAY contain any number of atom:contributor | |||
| atom:introspection element. | elements. | |||
| o atom:head elements MUST NOT contain more than one atom:tagline | o atom:feed elements MUST NOT contain more than one atom:copyright | |||
| element. | element. | |||
| o atom:head elements MUST NOT contain more than one atom:generator | o atom:feed elements MUST NOT contain more than one atom:generator | |||
| element. | element. | |||
| o atom:head elements MUST NOT contain more than one atom:info | o atom:feed elements MUST NOT contain more than one atom:icon | |||
| element. | element. | |||
| o atom:feed elements MUST NOT contain more than one atom:image | ||||
| element. | ||||
| o atom:feed elements MUST NOT contain more than one atom:id element. | ||||
| o atom:feed elements MUST contain at least one atom:link element | ||||
| with a relation of "alternate". | ||||
| o atom:feed elements SHOULD contain one atom:link element with a rel | ||||
| attribute value of "self" and SHOULD contain a href attribute with | ||||
| an absolute URI as its value. This URI identifies the feed and a | ||||
| representation equivalent to the feed. | ||||
| o atom:feed elements MUST NOT contain more than one atom:link | ||||
| element with a rel attribute value of "alternate" that has the | ||||
| same type attribute value. If a feed's atom:link element with | ||||
| type="alternate" resolves to an HTML document, then that document | ||||
| SHOULD have a autodiscovery link element [Atom-autodiscovery] that | ||||
| reflects back to the feed. atom:feed elements MAY contain | ||||
| additional atom:link elements beyond those described above. | ||||
| o atom:feed elements MUST NOT contain more than one atom:subtitle | ||||
| element. | ||||
| o atom:feed elements MUST contain exactly one atom:title element. | ||||
| o atom:feed elements MUST contain exactly one atom:updated element. | ||||
| o atom:feed elements MUST NOT contain atom:entry elements with | ||||
| identical atom:id values. | ||||
| 4.2.1 Usage of "atom:head" within "atom:entry" | 4.1.2 The "atom:entry" Element | |||
| In this case, the atom:head element acts as a container for metadata | ||||
| about the feed within which the entry was created. | ||||
| If an atom:entry is copied into one feed from another feed, then the | ||||
| atom:head element of the source feed SHOULD be inserted into the | ||||
| atom:entry unless the entry, as copied, already contains an atom:head | ||||
| element. If the atom:entry already contains an atom:head, then that | ||||
| atom:head SHOULD be copied without modification. | ||||
| [[ ... example ... ]] | ||||
| 4.3 The "atom:entry" Element | ||||
| The "atom:entry" element represents an individual entry. This | The "atom:entry" element represents an individual entry, acting as a | |||
| container for metadata and data associated with the entry. This | ||||
| element can appear as a child of the atom:feed element, or it can | element can appear as a child of the atom:feed element, or it can | |||
| appear as the document (i.e., top-level) element of a standalone Atom | appear as the document (i.e., top-level) element of a standalone Atom | |||
| Entry Document. | Entry Document. | |||
| When appearing in an Atom Entry Document, atom:entry elements MUST | ||||
| have a "version" attribute whose content indicates the version of the | ||||
| Atom specification that the entry conforms to. | ||||
| The version identifier for this specification is | ||||
| "draft-ietf-atompub-format-05: do not deploy". | ||||
| The atom:entry element MAY contain any namespace-qualified | The atom:entry element MAY contain any namespace-qualified | |||
| [W3C.REC-xml-names-19990114] elements as children. This | [W3C.REC-xml-names-19990114] elements as children. This | |||
| specification assigns no significance to the order of appearance of | specification assigns no significance to the order of appearance of | |||
| the child elements of atom:entry. | the child elements of atom:entry. | |||
| atomEntry = | atomEntry = | |||
| element atom:entry { | element atom:entry { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| atomVersionAttribute?, | (atomAuthor? | |||
| (atomTitle | & atomCategory* | |||
| & atomContent? | ||||
| & atomContributor* | ||||
| & atomCopyright? | ||||
| & atomId | & atomId | |||
| & atomLink* | & atomLink* | |||
| & atomUpdated | ||||
| & atomPublished? | & atomPublished? | |||
| & atomAuthor? | & atomSourceFeed? | |||
| & atomContributor* | ||||
| & atomHost? | ||||
| & atomCopyright? | ||||
| & atomCategory* | ||||
| & atomEdit? | ||||
| & atomSummary? | & atomSummary? | |||
| & atomContent? | & atomTitle | |||
| & atomHead? | & atomUpdated & | |||
| & anyElement*) | anyElement*) | |||
| } | } | |||
| The following child elements are defined by this specification (note | The following child elements are defined by this specification (note | |||
| that it requires the presence of some of these elements): | that it requires the presence of some of these elements): | |||
| o atom:entry elements MUST have exactly one "atom:title" element. | o atom:entry elements MUST contain exactly one atom:author element, | |||
| unless, in an Atom Feed Document, the atom:feed element contains | ||||
| an atom:author element itself. atom:entry elements MUST NOT | ||||
| contain more than one atom:author element. [[anchor24: What if | ||||
| there's a source-feed element? This is busted. We should make | ||||
| author required for atom:feed and optional for atom:entry. No | ||||
| inheritance co-constraints required. --R. Sayre]] | ||||
| o atom:entry elements MAY contain any number of atom:category | ||||
| elements. | ||||
| o atom:entry elements MAY contain any number of atom:contributor | ||||
| elements. | ||||
| o atom:entry elements MUST NOT contain more than one atom:copyright | ||||
| element. | ||||
| o atom:entry elements MUST contain exactly one atom:id element. | o atom:entry elements MUST contain exactly one atom:id element. | |||
| o atom:entry elements that contain no child atom:content element | o atom:entry elements that contain no child atom:content element | |||
| MUST contain at least one atom:link element with a rel attribute | MUST contain at least one atom:link element with a rel attribute | |||
| value of "alternate". atom:entry elements MUST NOT contain more | value of "alternate". [[anchor25: "atom:entry elements MUST NOT | |||
| than one atom:link element with a rel attribute value of | contain more than one atom:link element with a rel attribute value | |||
| "alternate" that has the same type attribute value. atom:entry | of "alternate" that has the same type attribute value." This | |||
| requirement predates @hreflang. Keep it? --R. Sayre]] atom:entry | ||||
| elements MAY contain additional atom:link elements beyond those | elements MAY contain additional atom:link elements beyond those | |||
| described above. | described above. | |||
| o atom:entry elements MUST contain exactly one atom:updated element. | ||||
| o atom:entry elements MUST NOT contain more than one atom:published | o atom:entry elements MUST NOT contain more than one atom:published | |||
| element. | element. | |||
| o atom:entry elements MUST contain exactly one atom:author element, | ||||
| unless, in an Atom Feed Document, the atom:head element contains | ||||
| an atom:author element itself. atom:entry elements MUST NOT | ||||
| contain more than one atom:author element. | ||||
| o atom:entry elements MUST NOT contain more than one | o atom:entry elements MUST NOT contain more than one | |||
| atom:contributor element. | atom:source-feed element. | |||
| o atom:entry elements MUST NOT contain more than one atom:host | ||||
| element. | ||||
| o atom:entry elements MUST NOT contain more than one atom:copyright | ||||
| element. | ||||
| o atom:entry elements MAY contain any number of atom:category | ||||
| elements. | ||||
| o atom:entry elements MUST contain an atom:summary element in any of | o atom:entry elements MUST contain an atom:summary element in any of | |||
| the following cases: | the following cases: [[anchor26: Do these requirements reflect the | |||
| WG's decisions? --R. Sayre]] | ||||
| * the atom:entry element contains no atom:content element. | * the atom:entry element contains no atom:content element. | |||
| * the atom:entry contains an atom:content which has a "src" | [[anchor27: Net result: Atom entries MUST have an atom:summary | |||
| or an atom:content element.]] | ||||
| * the atom:entry contains an atom:content that has a "src" | ||||
| attribute (and is thus empty). | attribute (and is thus empty). | |||
| * the atom:entry contains content which is encoded in Base64; | * the atom:entry contains content that is encoded in Base64; i.e. | |||
| i.e. the "type" attribute of atom:content is a MIME media type | the "type" attribute of atom:content is a MIME media type | |||
| [RFC2045] and does not begin with "text/" nor end with "+xml". | [RFC2045] and does not begin with "text/" nor end with "+xml". | |||
| o atom:entry elements MUST NOT contain more than one atom:summary | o atom:entry elements MUST NOT contain more than one atom:summary | |||
| element. | element. | |||
| o atom:entry elements MUST NOT contain more than one atom:edit | o atom:entry elements MUST have exactly one "atom:title" element. | |||
| element. | o atom:entry elements MUST contain exactly one atom:updated element. | |||
| o atom:entry elements MUST NOT contain more than one atom:head | ||||
| element. | ||||
| 4.4 The "atom:title" Element | 4.1.3 The "atom:content" Element | |||
| The "atom:title" element is a Text construct that conveys a | The "atom:content" element either contains or links to the content of | |||
| human-readable title for an entry or feed. | the entry. Except for the "type" and "src" attributes, the content | |||
| of atom:content is language-sensitive. atom:entry elements MUST | ||||
| contain zero or one atom:content elements. | ||||
| atomTitle = element atom:title { atomTextConstruct } | atomInlineTextContent = | |||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { "text" | "html" | atomMediaType }?, | ||||
| (text)* | ||||
| } | ||||
| 4.5 The "atom:id" Element | atomInlineXHTMLContent = | |||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { | ||||
| "xhtml" | | ||||
| atomMediaType | ||||
| }?, | ||||
| (text|anyElement)* | ||||
| } | ||||
| The "atom:id" element is an Identity construct that conveys a | atomOutOfLineContent = | |||
| permanent, universally unique identifier for an entry or feed. | element atom:content { | |||
| atomCommonAttributes, | ||||
| attribute type { | ||||
| "text" | | ||||
| "html" | | ||||
| "xhtml" | | ||||
| atomMediaType }?, | ||||
| attribute src { atomUri }, | ||||
| empty | ||||
| } | ||||
| atomId = element atom:id { atomIdentityConstruct } | atomContent = | |||
| atomInlineTextContent | | ||||
| atomInlineXHTMLContent | | ||||
| atomOutOfLineContent | ||||
| 4.6 The "atom:link" Element | 4.1.3.1 The "type" attribute | |||
| The atom:link element is an empty element that defines a reference | atom:content MAY have a "type" attribute. When present, the value | |||
| from an Atom Document to a Web resource. | MAY be one of "text", "html", or "xhtml". Failing that, it MUST be a | |||
| MIME media type [RFC2045] with a discrete top-level type (see Section | ||||
| 5 of [RFC2045]). If the type attribute is not provided, Atom | ||||
| Processors MUST behave as though it were present with a value of | ||||
| "text". | ||||
| atomLink = element atom:link { | 4.1.3.2 The "src" attribute | |||
| atom:content MAY have a "src" attribute, whose value MUST be an IRI | ||||
| reference [RFC3987]. If the "src" attribute is present, Atom | ||||
| Processors MAY use the IRI to retrieve the content. If the "src" | ||||
| attribute is present, atom:content MUST be empty. That is to say, | ||||
| the content may be retrievable using "src=" IRI, or it may be | ||||
| contained within atom:content, but not both. | ||||
| If the "src" attribute is present, the "type" attribute SHOULD be | ||||
| provided and MUST be a MIME media type [RFC2045], rather than "text", | ||||
| "html", or "xhtml". The value is advisory; that is to say, upon | ||||
| dereferencing the IRI to retrieve the content, if the server | ||||
| providing that content also provides a media type, the | ||||
| server-provided media type is authoritative. | ||||
| If the value of type begins with "text/" or ends with "+xml", the | ||||
| content SHOULD be local; that is to say, no "src" attribute should be | ||||
| provided. [[anchor31: J. Reschke: I'm not sure I understand what | ||||
| this is for. It seems to discourage putting XML data out-of-band. | ||||
| Why? ... Explaining the issue instead of just trying to enforce it | ||||
| may lead to better results...]] | ||||
| 4.1.3.3 Processing Model | ||||
| Atom Documents MUST conform to the following rules. Atom Processors | ||||
| MUST interpret atom:content according to the first applicable rule. | ||||
| 1. If the value of "type" is "text", the content of atom:content | ||||
| MUST NOT contain child elements. Such text is intended to be | ||||
| presented to humans in a readable fashion. Thus, Atom Processors | ||||
| MAY display it using normal text rendering techniques such as | ||||
| proportional fonts, white-space collapsing, and justification. | ||||
| 2. If the value of "type" is "html", the content of atom:content | ||||
| MUST NOT contain child elements, and SHOULD be suitable for | ||||
| handling as HTML [W3C.REC-html401-19991224]. The HTML markup | ||||
| must be escaped; for example, "<br>" as "<br>". The HTML | ||||
| markup SHOULD be such that it could validly appear directly | ||||
| within an HTML <DIV> element. Atom Processors that display the | ||||
| content SHOULD use the markup to aid in displaying it. | ||||
| 3. If the value of "type" is "xhtml", the content of atom:content | ||||
| MUST be a single XHTML div element | ||||
| [W3C.REC-xhtml-basic-20001219]. The XHTML div MUST contain XHTML | ||||
| text and markup that could validly appear within an XHTML div | ||||
| element. The XHTML div element itself MUST NOT be considered | ||||
| part of the content. Atom Processors that display the content | ||||
| MAY use the markup to aid in displaying it. Escaped markup is | ||||
| interpreted as a text representation of markup, and MUST NOT be | ||||
| interpreted as markup itself. | ||||
| 4. If the value of "type" ends with "+xml" or "/xml" | ||||
| (case-insensitive), the content of atom:content may include child | ||||
| elements, and SHOULD be suitable for handling as the indicated | ||||
| media type. If the "src" attribute is not provided, this would | ||||
| normally mean that the "atom:content" element would contain a | ||||
| single child element which would serve as the root element of the | ||||
| XML document of the indicated type. | ||||
| 5. If the value of "type" begins with "text/" (case-insensitive), | ||||
| the content of atom:content MUST NOT contain child elements. | ||||
| 6. For all other values of "type", the content of atom:content MUST | ||||
| be a valid Base64 encoding [RFC3548], which when decoded SHOULD | ||||
| be suitable for handling as the indicated media type. In this | ||||
| case, the characters in the Base64 encoding may be preceded and | ||||
| followed in the atom:content element by whitespace, and lines are | ||||
| separated by a single newline (U+000A) character. | ||||
| 4.1.3.4 Examples | ||||
| XHTML inline: | ||||
| ... | ||||
| <content type="xhtml"> | ||||
| <div xmlns="http://www.w3.org/1999/xhtml"> | ||||
| This is <b>XHTML</b> content. | ||||
| </div> | ||||
| </content> | ||||
| ... | ||||
| <content type="xhtml"> | ||||
| <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | ||||
| This is <xhtml:b>XHTML</xhtml:b> content. | ||||
| </xhtml:div> | ||||
| </content> | ||||
| ... | ||||
| The following example assumes that the XHTML namespace has been bound | ||||
| to the "xh" prefix earlier in the document: | ||||
| ... | ||||
| <content type="xhtml"> | ||||
| <xh:div> | ||||
| This is <xh:b>XHTML</xh:b> content. | ||||
| </xh:div> | ||||
| </content> | ||||
| ... | ||||
| 4.2 Metadata Elements | ||||
| 4.2.1 The "atom:author" Element | ||||
| The "atom:author" element is a Person construct that indicates the | ||||
| author of the entry or feed. | ||||
| atomAuthor = element atom:author { atomPersonConstruct } | ||||
| 4.2.2 The "atom:category" Element | ||||
| The "atom:category" element conveys information about a category | ||||
| associated with an entry or feed. | ||||
| atomCategory = | ||||
| element atom:category { | ||||
| atomCommonAttributes, attribute term { text }, | ||||
| attribute scheme { atomUri }?, | ||||
| attribute label { text }?, | ||||
| empty | ||||
| } | ||||
| 4.2.2.1 The "term" Attribute | ||||
| The "term" attribute is a string that identifies the category to | ||||
| which the entry or feed belongs. Category elements MUST have a | ||||
| "term" attribute. | ||||
| 4.2.2.2 The "scheme" Attribute | ||||
| The "scheme" attribute is an IRI that identifies a categorization | ||||
| scheme. Category elements MAY have a "scheme" attribute. | ||||
| 4.2.2.3 The "label" attribute | ||||
| The "label" attribute provides a human-readable label for display in | ||||
| end-user applications. The content of the "label" attribute is | ||||
| language-sensitive. Category elements MAY have a "label" attribute. | ||||
| 4.2.3 The "atom:contributor" Element | ||||
| The "atom:contributor" element is a Person construct that indicates a | ||||
| person or other entity who contributed to the entry or feed. | ||||
| atomContributor = element atom:contributor { atomPersonConstruct } | ||||
| 4.2.4 The "atom:copyright Element | ||||
| The "atom:copyright" element is a Text construct that conveys a | ||||
| human-readable copyright statement for an entry or feed. | ||||
| atomCopyright = element atom:copyright { atomTextContstruct } | ||||
| The atom:copyright element SHOULD NOT be used to convey | ||||
| machine-readable licensing information. | ||||
| If an atom:entry element does not contain an atom:copyright element, | ||||
| then the atom:copyright element of the containing atom:feed element's | ||||
| atom:head element, if present, is considered to apply to the entry. | ||||
| 4.2.5 The "atom:generator" Element | ||||
| The "atom:generator" element's content identifies the agent used to | ||||
| generate a feed, for debugging and other purposes. | ||||
| atomGenerator = | ||||
| element atom:generator { | ||||
| atomCommonAttributes, | ||||
| attribute uri { atomUri }?, | ||||
| attribute version { text }?, | ||||
| text | ||||
| } | ||||
| The content of this element, when present, MUST be a string that is a | ||||
| human-readable name for the generating agent. | ||||
| The atom:generator element MAY have a "uri" attribute whose value | ||||
| MUST be an IRI reference [RFC3987]. When dereferenced, that IRI | ||||
| SHOULD produce a representation that is relevant to that agent. | ||||
| The atom:generator element MAY have a "version" attribute that | ||||
| indicates the version of the generating agent. When present, its | ||||
| value is unstructured text. | ||||
| 4.2.6 The "atom:icon" Element | ||||
| The "atom:icon" element's content is an IRI [RFC3987] which | ||||
| identifies an image which provides iconic visual identification for a | ||||
| feed. The image SHOULD have an aspect ratio of one (horizontal) to | ||||
| one (vertical), and should be suitable for presentation at a small | ||||
| size. | ||||
| atomIcon = element atom:icon { atomCommonAttributes, (atomUri) } | ||||
| 4.2.7 The "atom:id" Element | ||||
| [[anchor45: Substantially changed from format-05, review carefully]] | ||||
| The "atom:id" element conveys a permanent, universally unique | ||||
| identifier for an entry or feed. | ||||
| atomId = element atom:id { atomCommonAttributes, (atomUri) } | ||||
| Its content MUST be an IRI, as defined by [RFC3987]. Note that the | ||||
| definition of "IRI" excludes relative references. Though the IRI | ||||
| might use a dereferencable scheme, Atom Processors MUST NOT assume it | ||||
| can be dereferenced. | ||||
| When an Atom document is relocated, migrated, syndicated, | ||||
| republished, exported or imported, the content of its atom:id element | ||||
| MUST NOT change. Put another way, an atom:id element pertains to all | ||||
| instantiations of a particular Atom entry or feed; revisions retain | ||||
| the same content in their atom:id elements. | ||||
| The content of an atom:id element MUST be created in a way that | ||||
| assures uniqueness; it is suggested that the atom:id element be | ||||
| stored along with the associated resource. | ||||
| Because of the risk of confusion between IRIs that would be | ||||
| equivalent if dereferenced, the following normalization strategy is | ||||
| strongly encouraged when generating atom:id elements: | ||||
| o Provide the scheme in lowercase characters. | ||||
| o Provide the host, if any, in lowercase characters. | ||||
| o Only perform percent-encoding where it is essential. | ||||
| o Use uppercase A-through-F characters when percent-encoding. | ||||
| o Prevent dot-segments appearing in paths. | ||||
| o For schemes that define a default authority, use an empty | ||||
| authority if the default is desired. | ||||
| o For schemes that define an empty path to be equivalent to a path | ||||
| of "/", use "/". | ||||
| o For schemes that define a port, use an empty port if the default | ||||
| is desired. | ||||
| o Preserve empty fragment identifiers and queries. | ||||
| o Ensure that all components of the IRI are appropriately | ||||
| character-normalized, e.g. by using NFC or NFKC. | ||||
| 4.2.7.1 Comparing atom:id | ||||
| Instances of atom:id elements can be compared to determine whether an | ||||
| entry or feed is the same as one seen before. Processors MUST | ||||
| compare atom:id elements on a character-by-character basis (in a | ||||
| case-sensitive fashion). Comparison operations MUST be based solely | ||||
| on the IRI character strings, and MUST NOT rely on dereferencing the | ||||
| IRIs. | ||||
| As a result, two IRIs that resolve to the same resource but are not | ||||
| character-for-character identical will be considered different for | ||||
| the purposes of identifier comparison. | ||||
| For example: | ||||
| http://www.example.org/thing | ||||
| http://www.example.org/Thing | ||||
| http://www.EXAMPLE.org/thing | ||||
| HTTP://www.example.org/thing | ||||
| are four distinct identifiers, despite their differences in case. | ||||
| Likewise, | ||||
| http://www.example.com/~bob | ||||
| http://www.example.com/%7ebob | ||||
| http://www.example.com/%7Ebob | ||||
| are three distinct identifiers, because IRI %-escaping is significant | ||||
| for the purposes of comparison. | ||||
| 4.2.8 The "atom:image" Element | ||||
| The "atom:image" element's content is an IRI [RFC3987] which | ||||
| identifies an image which provides visual identification for a feed. | ||||
| The image SHOULD have an aspect ratio of 2 (horizontal) to 1 | ||||
| (vertical). | ||||
| atomImage = element atom:image { atomCommonAttributes, (atomUri) } | ||||
| 4.2.9 The "atom:link" Element | ||||
| The "atom:link" element is an empty element that defines a reference | ||||
| from an entry or feed to a Web resource. | ||||
| atomLink = | ||||
| element atom:link { | ||||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute href { atomUri }, | attribute href { atomUri }, | |||
| attribute rel { atomNCName | atomUri }?, | attribute rel { atomNCName | atomUri }?, | |||
| attribute type { atomMediaType }?, | attribute type { atomMediaType }?, | |||
| attribute hreflang { atomLanguageTag }?, | attribute hreflang { atomLanguageTag }?, | |||
| attribute title { text }?, | attribute title { text }?, | |||
| attribute length { text }?, | attribute length { text }?, | |||
| empty | empty | |||
| } | } | |||
| 4.6.1 The "href" Attribute | 4.2.9.1 The "href" Attribute | |||
| The "href" attribute contains the link's URI. Link constructs MUST | The "href" attribute contains the link's IRI. atom:link elements | |||
| have a href attribute, whose value MUST be a URI reference [RFC3986]. | MUST have a href attribute, whose value MUST be a IRI reference | |||
| [RFC3987]. | ||||
| xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the | xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the | |||
| href attribute's content. | href attribute's content. | |||
| 4.6.2 The "rel" Attribute | 4.2.9.2 The "rel" Attribute | |||
| Link elements MAY have an "rel" attribute that indicates the link | atom:link elements MAY have an "rel" attribute that indicates the | |||
| relation type. If the "rel" attribute is not present, the link | link relation type. If the "rel" attribute is not present, the link | |||
| element MUST be interpreted as if the link relation type is | element MUST be interpreted as if the link relation type is | |||
| "alternate". | "alternate". | |||
| rel_attribute = segment-nz-nc / URI | rel_attribute = segment-nz-nc / IRI | |||
| The value of "rel" MUST be either a name, which is non-empty and does | The value of "rel" MUST be either a name that is non-empty and does | |||
| not contain any colon (":") characters, or a URI [RFC3986]. Note | not contain any colon (":") characters, or a IRI [RFC3987]. Note | |||
| that use of a relative reference is not allowed. If a name is given, | that use of a relative reference is not allowed. If a name is given, | |||
| implementations MUST consider the link relation type to be equivalent | implementations MUST consider the link relation type to be equivalent | |||
| to the same name registered within the IANA Registry of Link | to the same name registered within the IANA Registry of Link | |||
| Relations Section 9, and thus the URI that would be obtained by | Relations Section 7, and thus the IRI that would be obtained by | |||
| appending the value of the rel attribute to the string | appending the value of the rel attribute to the string | |||
| "http://www.iana.org/assignments/relation/". The value of "rel" | "http://www.iana.org/assignments/relation/". The value of "rel" | |||
| describes the meaning of the link, but does not impose any behavioral | describes the meaning of the link, but does not impose any behavioral | |||
| requirements on implementations. | requirements on implementations. | |||
| This document defines two initial values for the Registry of Link | This document defines five initial values for the Registry of Link | |||
| Relations: | Relations: | |||
| The value "alternate" signifies that the URI in the value of the href | The value "alternate" signifies that the IRI in the value of the href | |||
| attribute identifies an alternate version of the resource described | attribute identifies an alternate version of the resource described | |||
| by the containing element. | by the containing element. | |||
| The value "related" signifies that the URI in the value of the href | The value "related" signifies that the IRI in the value of the href | |||
| attribute identifies a resource related to the resource described by | attribute identifies a resource related to the resource described by | |||
| the containing atom:feed or atom:entry element. For example, the | the containing element. For example, the feed for a site that | |||
| feed for a site which discusses the performance of the search engine | discusses the performance of the search engine at | |||
| at "http://search.example.com" might contain, as a child of | "http://search.example.com" might contain, as a child of atom:feed: | |||
| atom:head: | ||||
| <link rel="related" href="http://search.example.com/"> | <link rel="related" href="http://search.example.com/"> | |||
| An identical link might appear as a child of any atom:entry whose | An identical link might appear as a child of any atom:entry whose | |||
| content contains a discussion of that same search engine. | content contains a discussion of that same search engine. | |||
| 4.6.3 The "type" Attribute | The value "self" signifies that the IRI in the value of the href | |||
| attribute identifies a resource equivalent to the containing element. | ||||
| The value "enclosure" signifies that the IRI in the value of the href | ||||
| attribute identifies a related resource which is potentially large in | ||||
| size and may require special handling by consuming software. For | ||||
| Link constructs with rel="enclosure", the length attribute SHOULD be | ||||
| provided. | ||||
| The value "via" signifies that the IRI in the value of the href | ||||
| attribute identifies a resource that is the source of the information | ||||
| provided in the containing element. | ||||
| 4.2.9.3 The "type" Attribute | ||||
| Link elements MAY have a type attribute, whose value MUST conform to | Link elements MAY have a type attribute, whose value MUST conform to | |||
| the syntax of a MIME media type [RFC2045]. | the syntax of a MIME media type [RFC2045]. | |||
| The type attribute's value is an advisory media type; it is a hint | The type attribute's value is an advisory media type; it is a hint | |||
| about the type of the representation which is expected to be returned | about the type of the representation that is expected to be returned | |||
| when the value of the href attribute is dereferenced. Note that the | when the value of the href attribute is dereferenced. Note that the | |||
| type attribute does not override the actual media type returned with | type attribute does not override the actual media type returned with | |||
| the representation. | the representation. | |||
| 4.6.4 The "hreflang" Attribute | 4.2.9.4 The "hreflang" Attribute | |||
| The "hreflang" attribute's content describes the language of the | The "hreflang" attribute's content describes the language of the | |||
| resource pointed to by the href attribute. When used together with | resource pointed to by the href attribute. When used together with | |||
| the rel="alternate", it implies a translated version of the entry. | the rel="alternate", it implies a translated version of the entry. | |||
| Link elements MAY have an hreflang attribute, whose value MUST be a | Link elements MAY have an hreflang attribute, whose value MUST be a | |||
| language tag [RFC3066]. | language tag [RFC3066]. | |||
| 4.6.5 The "title" Attribute | 4.2.9.5 The "title" Attribute | |||
| The "title" attribute conveys human-readable information about the | The "title" attribute conveys human-readable information about the | |||
| link. Link elements MAY have a title attribute. | link. The content of the "title" attribute is language sensitive. | |||
| Link elements MAY have a title attribute. | ||||
| 4.6.6 The "length" Attribute | 4.2.9.6 The "length" Attribute | |||
| The "length" attribute indicates an advisory length of the linked | The "length" attribute indicates an advisory length of the linked | |||
| content in octets; it is a hint about the content length of the | content in octets; it is a hint about the content length of the | |||
| representation returned when the URI in the href attribute is | representation returned when the IRI in the href attribute is | |||
| dereferenced. Note that the length attribute does not override the | dereferenced. Note that the length attribute does not override the | |||
| actual content length of the representation as reported by the | actual content length of the representation as reported by the | |||
| underlying protocol. | underlying protocol. | |||
| Link elements MAY have a length attribute. | Link elements MAY have a length attribute. | |||
| 4.7 The "atom:updated" Element | 4.2.10 The "atom:published" Element | |||
| The "atom:updated" element is a Date construct indicating the most | ||||
| recent instant in time when an entry or feed was modified in a way | ||||
| the producer considers significant. Therefore, not all modifications | ||||
| necessarily result in a changed atom:updated value. | ||||
| Publishers MAY change the value of this element over time. | ||||
| Processors MAY present entries sorted using this value. Processors | ||||
| MAY choose not to present entries until the instant in time specified | ||||
| in the atom:updated element has passed. | ||||
| atomUpdated = element atom:updated { atomDateConstruct } | ||||
| 4.8 The "atom:published" Element | ||||
| The "atom:published" element is a Date construct indicating an | The "atom:published" element is a Date construct indicating an | |||
| instant in time associated with an event early in the life cycle of | instant in time associated with an event early in the life cycle of | |||
| the entry. Typically, atom:published will be associated with the | the entry. Typically, atom:published will be associated with the | |||
| initial creation or first availability of the resource. | initial creation or first availability of the resource. | |||
| Processors MAY present entries sorted using this value. Processors | atomPublished = element atom:published { atomDateConstruct } | |||
| MAY choose not to present entries until the instant in time specified | ||||
| in the atom:published element has passed. | ||||
| 4.9 The "atom:author" Element | ||||
| The "atom:author" element is a Person construct that indicates the | ||||
| default author of the an entry or feed | ||||
| atomAuthor = element atom:author { atomPersonConstruct } | ||||
| 4.10 The "atom:contributor" Element | ||||
| The "atom:contributor" element is a Person construct that indicates a | ||||
| person or other entity who contributes to the entry. | ||||
| atomContributor = element atom:contributor { atomPersonConstruct } | ||||
| 4.11 The "atom:host" Element | ||||
| The "atom:host" element's content conveys a domain name or network | ||||
| address associated with an entry's origin. Its content MUST be a | ||||
| domain name [RFC1035], a dotted-decimal IPv4 address [RFC0791], or a | ||||
| colon-delimited IPv6 address [RFC2460]. | ||||
| 4.12 The "atom:copyright" Element | ||||
| The "atom:copyright" element is a Text construct that conveys a | ||||
| human-readable copyright statement for an entry or feed. | ||||
| The atom:copyright element SHOULD NOT be used to convey | ||||
| machine-readable licensing information. | ||||
| If an atom:entry element does not contain an atom:copyright element, | ||||
| then the atom:copyright element of the containing atom:feed element's | ||||
| atom:head element, if present, should be considered to apply to the | ||||
| entry. | ||||
| 4.13 The "atom:category" Element | 4.2.11 The "atom:source-feed" Element | |||
| Category elements contain information about a category to which an | If an atom:entry is copied from one feed into another feed, then the | |||
| Atom feed or entry is associated. | source atom:feed's metadata (all child elements of atom:feed other | |||
| than the atom:entry elements) MAY be preserved within the copied | ||||
| entry by adding an atom:source-feed child element, if it is not | ||||
| already present in the entry, and including some or all of the source | ||||
| feed's metadata elements as the atom:source-feed element's children. | ||||
| Such metadata SHOULD be preserved if the source atom:feed contains | ||||
| any of the child elements atom:author, atom:contributor, | ||||
| atom:copyright, or atom:category and those child elements are not | ||||
| present in the source atom:entry. | ||||
| atomCategory = element atom:category { | atomSourceFeed = | |||
| element atom:source-feed { | ||||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute term { text }, | (atomAuthor? | |||
| attribute scheme { atomUri }?, | & atomCategory* | |||
| attribute label { text }?, | & atomContributor* | |||
| empty | & atomCopyright? | |||
| & atomGenerator? | ||||
| & atomIcon? | ||||
| & atomId? | ||||
| & atomImage? | ||||
| & atomLink+ | ||||
| & atomSubtitle? | ||||
| & atomTitle | ||||
| & atomUpdated | ||||
| & anyElement* ) | ||||
| } | } | |||
| 4.13.1 The "term" Attribute | 4.2.12 The "atom:subtitle" Element | |||
| The "term" attribute is a string which identifies the category to | ||||
| which the entry or feed belongs. Category elements MUST have a | ||||
| "term" attribute. | ||||
| 4.13.2 The "scheme" Attribute | ||||
| The "scheme" attribute is a URI that identifies a categorization | ||||
| scheme. Category elements MAY have a "scheme" attribute. | ||||
| 4.13.3 The "label" attribute | The "atom:subtitle" element is a Text construct that conveys a | |||
| human-readable description or subtitle for a feed. | ||||
| The "label" attribute provides a human-readable label that may be | atomSubtitle = element atom:subtitle { atomTextConstruct } | |||
| displayed in end-user applications. Category elements MAY have a | ||||
| "label" attribute. | ||||
| 4.14 The "atom:summary" Element | 4.2.13 The "atom:summary" Element | |||
| The "atom:summary" element is a Text construct that conveys a short | The "atom:summary" element is a Text construct that conveys a short | |||
| summary, abstract or excerpt of an entry. | summary, abstract or excerpt of an entry. | |||
| atomSummary = element atom:summary { atomTextConstruct } | atomSummary = element atom:summary { atomTextConstruct } | |||
| 4.15 The "atom:content" Element | 4.2.14 The "atom:title" Element | |||
| The "atom:content" element either contains or links to the content of | ||||
| the entry. atom:entry elements MUST contain zero or one atom:content | ||||
| elements. | ||||
| atomInlineTextContent = | ||||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { "TEXT" | "HTML" | atomMediaType }?, | ||||
| (text)* | ||||
| } | ||||
| atomInlineXHTMLContent = | ||||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { "XHTML" | atomMediaType }?, | ||||
| (text|anyElement)* | ||||
| } | ||||
| atomOutOfLineContent = | ||||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { "TEXT" | "HTML" | "XHTML" | atomMediaType }?, | ||||
| attribute src { atomUri }, | ||||
| empty | ||||
| } | ||||
| atomContent = atomInlineTextContent | ||||
| | atomInlineXHTMLContent | ||||
| | atomOutOfLineContent | ||||
| 4.15.1 The "type" attribute | ||||
| atom:content MAY have a "type" attribute, When present, the value MAY | ||||
| be one of "TEXT", "HTML", or "XHTML". Failing that, it MUST be a | ||||
| MIME media type [RFC2045] in which, to use the terminology of Section | ||||
| 5 of [RFC2045], the top level is a discrete type. If the type | ||||
| attribute is not provided, software MUST behave as though it were | ||||
| present with a value of "TEXT". | ||||
| 4.15.2 The "src" attribute | ||||
| atom:content MAY have a "src" attribute, whose value MUST be a URI | ||||
| reference [RFC3986]. If the "src" attribute is present, software MAY | ||||
| use the URI to retrieve the content. If the "src" attribute is | ||||
| present, atom:content MUST be empty. That is to say, the content may | ||||
| be retrievable using "src=" URI, or it may be contained within | ||||
| atom:content, but not both. | ||||
| If the "src" attribute is present, the "type" attribute SHOULD be | ||||
| provided and MUST be a MIME media type [RFC2045], rather than "TEXT", | ||||
| "HTML", or "XHTML". The value is advisory; that is to say, upon | ||||
| dereferencing the URI to retrieve the content, if the server | ||||
| providing that content also provides a media type, the | ||||
| server-provided media type is authoritative. | ||||
| If the value of type begins with "text/" or ends with "+xml", the | ||||
| content SHOULD be local; that is to say, no "src" attribute should be | ||||
| provided. | ||||
| 4.15.3 Processing Model | ||||
| Software MUST apply the following rules in the order below to | ||||
| ascertain the rules governing the content of "atom:content". | ||||
| 1. If the value is "TEXT", the content of atom:content MUST NOT | ||||
| contain child elements. Such text is intended to be presented to | ||||
| humans in a readable fashion. Thus, software MAY display it | ||||
| using normal text rendering techniques such as proportional | ||||
| fonts, white-space collapsing, and justification. | ||||
| 2. If the value of "type" is "HTML", the content of atom:content | ||||
| MUST NOT contain child elements, and SHOULD be suitable for | ||||
| handling by software that knows HTML. The HTML markup must be | ||||
| escaped; for example, "<br>" as "<br>". The HTML markup | ||||
| SHOULD be such that it could validly appear directly within an | ||||
| HTML <DIV> element. Receiving software which displays the | ||||
| content SHOULD use the markup to aid in displaying it. | ||||
| 3. If the value of "type" is "XHTML", the content of atom:content | ||||
| MAY contain child elements. The content SHOULD be XHTML text and | ||||
| markup that could validly appear directly within an xhtml:div | ||||
| element. Receiving software which displays the content SHOULD | ||||
| use the markup to aid in displaying it. Escaped markup is | ||||
| interpreted as a text representation of markup, and MUST NOT be | ||||
| interpreted as markup itself. | ||||
| 4. If the value of "type" ends with "+xml" or "/xml", the content of | ||||
| atom:content may include child elements, and SHOULD be suitable | ||||
| for handling by software that knows the indicated media type. If | ||||
| the "src" attribute is not provided, this would normally mean | ||||
| that the "atom:content" element would contain a single child | ||||
| element which would serve as the root element of the XML document | ||||
| of the indicated type. | ||||
| 5. If the value of "type" begins with "text/" the content of | ||||
| atom:content MUST NOT contain child elements. | ||||
| 6. For all other values of "type", the content of atom:content MUST | ||||
| be a valid Base64 encoding [RFC3548], which when decoded SHOULD | ||||
| be suitable for handling by software that knows the indicated | ||||
| media type. In this case, the characters in the Base64 encoding | ||||
| may be preceded and followed in the atom:content element by | ||||
| whitespace, and lines are separated by a single newline (U+000A) | ||||
| character. | ||||
| 4.16 The "atom:introspection" Element | ||||
| The "atom:introspection" element is a Service construct that conveys | ||||
| the URI of an introspection file associated with a feed. | ||||
| atomIntrospection = | The "atom:title" element is a Text construct that conveys a | |||
| element atom:introspection { atomServiceConstruct } | human-readable title for an entry or feed. | |||
| 4.17 The "atom:post" Element | atomTitle = element atom:title { atomTextConstruct } | |||
| The "atom:post" element is a Service construct that conveys the URI | 4.2.15 The "atom:updated" Element | |||
| used to add entries to a feed. | ||||
| atomPost = element atom:post { atomServiceConstruct } | The "atom:updated" element is a Date construct indicating the most | |||
| recent instant in time when an entry or feed was modified in a way | ||||
| the publisher considers significant. Therefore, not all | ||||
| modifications necessarily result in a changed atom:updated value. | ||||
| 4.18 The "atom:edit" Element | atomUpdated = element atom:updated { atomDateConstruct } | |||
| The "atom:edit" element is a Service construct that conveys the URI | Publishers MAY change the value of this element over time. | |||
| used to retrieve and edit the source representation of an entry. | ||||
| atomEdit = element atom:edit { atomServiceConstruct } | 5. Securing Atom Documents | |||
| 4.19 The "atom:tagline" Element | Because Atom is an XML-based format, existing XML security mechanisms | |||
| can be used to secure its content. | ||||
| The "atom:tagline" element is a Text construct that conveys a | 5.1 Digital Signatures | |||
| human-readable description or tagline for the feed. | ||||
| atomTagline = element atom:tagline { atomTextConstruct } | The root of an Atom document (i.e., atom:feed in an Atom Feed | |||
| Document, atom:entry in an Atom Entry Document) MAY have an Enveloped | ||||
| Signature, as described by XML-Signature and Syntax Processing | ||||
| [W3C.REC-xmldsig-core-20020212]. | ||||
| 4.20 The "atom:generator" Element | Processors MUST NOT reject an Atom Document containing such a | |||
| signature because they are not capable of verifying it; they MUST | ||||
| continue processing and MAY inform the user of their failure to | ||||
| validate the signature. | ||||
| The "atom:generator" element's content identifies the software agent | In other words, the presence of an element with the namespace IRI | |||
| used to generate a feed, for debugging and other purposes. | "http://www.w3.org/2000/09/xmldsig#" and a local name of "Signature" | |||
| as a child of the document element must not cause an Atom Processor | ||||
| to fail merely because of its presence. | ||||
| atomGenerator = element atom:generator { | Other elements in an Atom Document MUST NOT be signed unless their | |||
| atomCommonAttributes, | definitions explicitly specify such a capability. | |||
| attribute url { atomUri }?, | ||||
| attribute version { text }?, | ||||
| text | ||||
| } | ||||
| The content of this element, when present, MUST be a string that is a | 5.2 Encryption | |||
| human-readable name for the generating agent. | ||||
| The atom:generator element MAY have a "uri" attribute whose value | The root of an Atom Document (i.e., atom:feed in an Atom Feed | |||
| MUST be a URI reference [RFC3986]. When dereferenced, that URI | Document, atom:entry in an Atom Entry Document) MAY be encrypted, | |||
| SHOULD produce a representation that is relevant to that agent. | using the mechanisms described by XML Encryption Syntax and | |||
| Processing [W3C.REC-xmlenc-core-20021210]. | ||||
| The atom:generator element MAY have a "version" attribute that | 6. Extending Atom | |||
| indicates the version of the generating agent. When present, its | ||||
| value is unstructured text. | ||||
| 4.21 The "atom:info" Element | 6.1 Extensions From Non-Atom Vocabularies | |||
| The "atom:info" element is a Text construct that conveys a | This specification describes Atom's XML markup vocabulary. Markup | |||
| human-readable explanation of the feed format itself. The atom:info | from other vocabularies ("foreign markup") can be used in an Atom | |||
| element SHOULD NOT be considered meaningful by processors; it is a | document. Note that the atom:content element is designed to support | |||
| convenience to publishers. | the inclusion of arbitrary foreign markup. | |||
| atomInfo = element atom:info { atomTextConstruct } | 6.2 Extensions To the Atom Vocabulary | |||
| 5. Managing Feed State | Future versions of this specification may add new elements and | |||
| attributes to the Atom markup vocabulary. Software written to | ||||
| conform to this version of the specification will not be able to | ||||
| process such markup correctly and, in fact, will not be able to | ||||
| distinguish it from markup error. For the purposes of this | ||||
| discussion, unrecognized markup from the Atom vocabulary will be | ||||
| considered "foreign "markup". | ||||
| [[ talk about what it means to keep a view of a feed ]] | Unlike markup from other vocabularies, foreign markup from the Atom | |||
| vocabulary MAY appear at any location in an Atom document. | ||||
| 6. Securing Atom Documents | 6.3 Software Processing of Foreign Markup | |||
| Because Atom is an XML-based format, existing XML security mechanisms | Software processing an Atom Document which encounters foreign markup | |||
| can be used to secure its content. | in a location that is legal according to this specification MUST NOT | |||
| stop processing or signal an error. It may be the case that the | ||||
| software is able to process the foreign markup correctly and does so. | ||||
| Otherwise, such markup is termed "unknown foreign markup". | ||||
| 6.1 Digital Signatures | When unknown foreign markup is encountered as a child of atom:entry, | |||
| atom:feed, or a Person Construct, software MAY [[anchor67: Changed to | ||||
| MAY from SHOULD. Republishers might want to copy it. --R. Sayre]] | ||||
| bypass the markup and any textual content and MUST NOT change its | ||||
| behavior as a result of the markup's presence. | ||||
| The document element of an Atom document (i.e., atom:feed in an Atom | When unknown foreign markup is encountered in a Text Contruct or | |||
| Feed Document, atom:entry in an Atom Entry Document) MAY have an | atom:content element, software SHOULD ignore the markup and process | |||
| Enveloped Signature, as described by XML-Signature and Syntax | any text content of foreign elements as though the surrounding markup | |||
| Processing [W3C.REC-xmldsig-core-20020212]. | were not present. | |||
| Processors MUST NOT reject an Atom document containing such a | 6.4 Extension Elements | |||
| signature because they are not capable of verifying it; they MUST | ||||
| continue processing and MAY inform the user of their failure to | ||||
| validate the signature. | ||||
| In other words, the presence of an element with the namespace URI | Atom allows foreign markup anywhere in an Atom document. Child | |||
| "http://www.w3.org/2000/09/xmldsig#" and a local name of "Signature" | elements of atom:entry and atom:feed are considered "metadata" | |||
| as a child of the document element must not cause a processor to fail | elements, and are described below. Child elements of Person | |||
| merely because of its presence. | Constructs are considered to apply to the construct. The role of | |||
| other foreign markup is undefined by this specification. | ||||
| Other elements in an Atom document MUST NOT be signed unless their | 6.4.1 Simple Extension Elements | |||
| definitions explicitly specify such a capability. | ||||
| 6.2 Encryption | A Simple Extension element MUST NOT have any attributes or child | |||
| elements. The element MAY contain either character data, or be | ||||
| empty. | ||||
| The document element of an Atom document (i.e., atom:feed in an Atom | The element can be interpreted as a simple property (or name/value | |||
| Feed Document, atom:entry in an Atom Entry Document) MAY be | pair) of the parent element that encloses it. The pair consisting of | |||
| encrypted, using the mechanisms described by XML Encryption Syntax | the namespace-URI of the element and the local name of the element | |||
| and Processing [W3C.REC-xmlenc-core-20021210]. | can be interpreted as the name of the property. The character data | |||
| content of the element can be interpreted as the value of the | ||||
| property. If the element is empty, then the property value can be | ||||
| interpreted as an empty string. | ||||
| 7. Embedding Atom in Other Formats | 6.4.2 Structured Extension Elements | |||
| [[ ... ]] | The root element of a Structured Extension element MUST have at least | |||
| one attribute or child element. It MAY have attributes, it MAY | ||||
| contain well-formed XML content (including character data), or it MAY | ||||
| be empty. | ||||
| 8. Extending Atom | The structure of a Structured Extension element, including the order | |||
| of its child elements, could be significant. | ||||
| [[ ... ]] | This specification does not provide an interpretation of a Structured | |||
| Extension element. The syntax of the XML contained in the element, | ||||
| and an interpretation of how the element relates to its containing | ||||
| element is defined by the specification of the Atom extension. | ||||
| 9. IANA Considerations | 7. IANA Considerations | |||
| An Atom Document, when serialized as XML 1.0, can be identified with | An Atom Document, when serialized as XML 1.0, can be identified with | |||
| the following media type: | the following media type: | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: atom+xml | MIME subtype name: atom+xml | |||
| Mandatory parameters: None. | Mandatory parameters: None. | |||
| Optional parameters: | Optional parameters: | |||
| "charset": This parameter has identical semantics to the charset | "charset": This parameter has identical semantics to the charset | |||
| parameter of the "application/xml" media type as specified in | parameter of the "application/xml" media type as specified in | |||
| RFC 3023 [RFC3023]. [RFC3023]. | [RFC3023]. | |||
| Encoding considerations: Identical to those of "application/xml" as | Encoding considerations: Identical to those of "application/xml" as | |||
| described in RFC 3023 [RFC3023], section 3.2. | described in [RFC3023], section 3.2. | |||
| Security considerations: As defined in this specification. [[update | Security considerations: As defined in this specification. | |||
| upon publication]] | [[anchor71: update upon publication]] | |||
| In addition, as this media type uses the "+xml" convention, it | In addition, as this media type uses the "+xml" convention, it | |||
| shares the same security considerations as described in RFC 3023 | shares the same security considerations as described in [RFC3023], | |||
| [RFC3023], section 10. | section 10. | |||
| Interoperability considerations: There are no known interoperability | Interoperability considerations: There are no known interoperability | |||
| issues. | issues. | |||
| Published specification: This specification. [[update upon | Published specification: This specification. [[anchor72: update upon | |||
| publication]] | publication]] | |||
| Applications which use this media type: No known applications | Applications that use this media type: No known applications | |||
| currently use this media type. | currently use this media type. | |||
| Additional information: | Additional information: | |||
| Magic number(s): As specified for "application/xml" in RFC 3023 | Magic number(s): As specified for "application/xml" in [RFC3023], | |||
| [RFC3023], section 3.2. | section 3.2. | |||
| File extension: .atom | File extension: .atom | |||
| Fragment identifiers: As specified for "application/xml" in RFC 3023 | Fragment identifiers: As specified for "application/xml" in | |||
| [RFC3023], section 5. | [RFC3023], section 5. | |||
| Base URI: As specified in RFC 3023 [RFC3023], section 6. | Base URI: As specified in [RFC3023], section 6. | |||
| Macintosh File Type code: TEXT | Macintosh File Type code: TEXT | |||
| Person and email address to contact for further information: Mark | Person and email address to contact for further information: Mark | |||
| Nottingham <mnot@pobox.com> | Nottingham <mnot@pobox.com> | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Author/Change controller: This specification's author(s). [[update | Author/Change controller: This specification's author(s). | |||
| upon publication]] | [[anchor73: update upon publication]] | |||
| 9.1 Registry of Link Relations | 7.1 Registry of Link Relations | |||
| This registry is maintained by IANA and initially contains the two | This registry is maintained by IANA and initially contains five | |||
| values: "alternate" and "related". New assignments are subject to | values: "alternate", "related", "self", "enclosure", and "via". New | |||
| IESG Approval, as outlined in [RFC2434]. Requests should be made by | assignments are subject to IESG Approval, as outlined in [RFC2434]. | |||
| email to IANA, which will then forward the request to the IESG | Requests should be made by email to IANA, which will then forward the | |||
| requesting approval. The request should contain discussion of at | request to the IESG requesting approval. The request should contain | |||
| least the following five topics: | discussion of at least the following five topics: | |||
| o A value for the "rel" attribute that conforms to the syntax rule | o A value for the "rel" attribute that conforms to the syntax rule | |||
| given in Section 4.6.2 | given in Section 4.2.9.2 | |||
| o Common name for link type. | o Common name for link type. | |||
| o Description of link type semantics. | o Description of link type semantics. | |||
| o Expected display characteristics. | o Expected display characteristics. | |||
| o Security considerations. | o Security considerations. | |||
| 10. Security Considerations | 8. Security Considerations | |||
| 8.1 HTML and XHTML Content | ||||
| Text Constructs and atom:content allow the delivery of HTML and XHTML | ||||
| to receiving software, which may process it. Many elements in these | ||||
| languages are considered 'unsafe' in that they open clients to one or | ||||
| more types of attack. Implementers of software which processes Atom | ||||
| should carefully consider their handling of every type of element | ||||
| when processing incoming (X)HTML in Atom documents. See the security | ||||
| sections of RFC 2854 and HTML 4.01 for guidance. | ||||
| Atom Processors should pay particular attention to the security of | ||||
| the IMG, SCRIPT, EMBED, OBJECT, FRAME, FRAMESET, IFRAME, META, and | ||||
| LINK elements, but other elements may also have negative security | ||||
| properties. | ||||
| (X)HTML can either directly contain or indirectly reference | ||||
| executable content. | ||||
| 8.2 URIs | ||||
| Atom Processors handle URIs. See Section 7 of [RFC3986]. | ||||
| 8.3 IRIs | ||||
| Atom Processors handle IRIs. See Section 8 of [RFC3987]. | ||||
| 8.4 Encryption and Signing | ||||
| Atom document can be encrypted and signed using | Atom document can be encrypted and signed using | |||
| [W3C.REC-xmlenc-core-20021210] and [W3C.REC-xmldsig-core-20020212], | [W3C.REC-xmlenc-core-20021210] and [W3C.REC-xmldsig-core-20020212], | |||
| respectively, and is subject to the security considerations implied | respectively, and is subject to the security considerations implied | |||
| by their use. | by their use. | |||
| 11. References | 9. References | |||
| 11.1 Normative References | 9.1 Normative References | |||
| [Atom-autodiscovery] | [Atom-autodiscovery] | |||
| Pilgrim, M., "Atom Feed Autodiscovery", work-in-progress, | Pilgrim, M., "Atom Feed Autodiscovery", work-in-progress, | |||
| August 2004. | August 2004. | |||
| [Atom-protocol] | [ISO.8601.1988] | |||
| Gregorio, J. and R. Sayre, "The Atom Publishing Protocol", | International Organization for Standardization, "Data | |||
| work-in-progress, July 2004. | elements and interchange formats - Information interchange | |||
| - Representation of dates and times", ISO Standard 8601, | ||||
| [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, September | June 1988. | |||
| 1981. | ||||
| [RFC1035] Mockapetris, P., "Domain names - implementation and | ||||
| specification", STD 13, RFC 1035, November 1987. | ||||
| [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
| Extensions (MIME) Part One: Format of Internet Message | Extensions (MIME) Part One: Format of Internet Message | |||
| Bodies", RFC 2045, November 1996. | Bodies", RFC 2045, November 1996. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | ||||
| (IPv6) Specification", RFC 2460, December 1998. | ||||
| [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April | [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April | |||
| 2001. | 2001. | |||
| [RFC3023] Murata, M., St. Laurent, S. and D. Kohn, "XML Media | [RFC3023] Murata, M., St. Laurent, S. and D. Kohn, "XML Media | |||
| Types", RFC 3023, January 2001. | Types", RFC 3023, January 2001. | |||
| [RFC3066] Alvestrand, H., "Tags for the Identification of | [RFC3066] Alvestrand, H., "Tags for the Identification of | |||
| Languages", BCP 47, RFC 3066, January 2001. | Languages", BCP 47, RFC 3066, January 2001. | |||
| [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | |||
| Timestamps", RFC 3339, July 2002. | Timestamps", RFC 3339, July 2002. | |||
| [RFC3548] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC3548] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
| Encodings", RFC 3548, July 2003. | Encodings", RFC 3548, July 2003. | |||
| [RFC3986] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, RFC | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| 3986, January 2005. | RFC 3986, January 2005. | |||
| [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | ||||
| Identifiers (IRIs)", RFC 3987, January 2005. | ||||
| [W3C.NOTE-datetime-19980827] | [W3C.NOTE-datetime-19980827] | |||
| Wolf, M. and C. Wicksteed, "Date and Time Formats", W3C | Wolf, M. and C. Wicksteed, "Date and Time Formats", W3C | |||
| NOTE NOTE-datetime-19980827, August 1998. | NOTE NOTE-datetime-19980827, August 1998. | |||
| [W3C.REC-html401-19991224] | ||||
| Raggett, D., Hors, A. and I. Jacobs, "HTML 4.01 | ||||
| Specification", W3C REC REC-html401-19991224, December | ||||
| 1999. | ||||
| [W3C.REC-xhtml-basic-20001219] | ||||
| Baker, M., Ishikawa, M., Matsui, S., Stark, P., Wugofski, | ||||
| T. and T. Yamakami, "XHTML Basic", W3C | ||||
| REC REC-xhtml-basic-20001219, December 2000. | ||||
| [W3C.REC-xml-20040204] | [W3C.REC-xml-20040204] | |||
| Yergeau, F., Paoli, J., Sperberg-McQueen, C., Bray, T. and | Yergeau, F., Paoli, J., Sperberg-McQueen, C., Bray, T. and | |||
| E. Maler, "Extensible Markup Language (XML) 1.0 (Third | E. Maler, "Extensible Markup Language (XML) 1.0 (Third | |||
| Edition)", W3C REC REC-xml-20040204, February 2004. | Edition)", W3C REC REC-xml-20040204, February 2004. | |||
| [W3C.REC-xml-infoset-20011024] | [W3C.REC-xml-infoset-20040204] | |||
| Tobin, R. and J. Cowan, "XML Information Set", W3C | Cowan, J. and R. Tobin, "XML Information Set (Second | |||
| FirstEdition REC-xml-infoset-20011024, October 2001. | Edition)", W3C REC REC-xml-infoset-20040204, February | |||
| 2004. | ||||
| [W3C.REC-xml-names-19990114] | [W3C.REC-xml-names-19990114] | |||
| Hollander, D., Bray, T. and A. Layman, "Namespaces in | Hollander, D., Bray, T. and A. Layman, "Namespaces in | |||
| XML", W3C REC REC-xml-names-19990114, January 1999. | XML", W3C REC REC-xml-names-19990114, January 1999. | |||
| [W3C.REC-xmlbase-20010627] | [W3C.REC-xmlbase-20010627] | |||
| Marsh, J., "XML Base", W3C REC REC-xmlbase-20010627, June | Marsh, J., "XML Base", W3C REC REC-xmlbase-20010627, June | |||
| 2001. | 2001. | |||
| [W3C.REC-xmldsig-core-20020212] | [W3C.REC-xmldsig-core-20020212] | |||
| Solo, D., Reagle, J. and D. Eastlake, "XML-Signature | Solo, D., Reagle, J. and D. Eastlake, "XML-Signature | |||
| Syntax and Processing", W3C REC REC-xmldsig-core-20020212, | Syntax and Processing", W3C REC REC-xmldsig-core-20020212, | |||
| February 2002. | February 2002. | |||
| [W3C.REC-xmlenc-core-20021210] | [W3C.REC-xmlenc-core-20021210] | |||
| Reagle, J. and D. Eastlake, "XML Encryption Syntax and | Reagle, J. and D. Eastlake, "XML Encryption Syntax and | |||
| Processing", W3C REC REC-xmlenc-core-20021210, December | Processing", W3C REC REC-xmlenc-core-20021210, December | |||
| 2002. | 2002. | |||
| 11.2 Informative References | [W3C.REC-xmlschema-2-20041028] | |||
| Malhotra, A. and P. Biron, "XML Schema Part 2: Datatypes | ||||
| Second Edition", W3C REC REC-xmlschema-2-20041028, October | ||||
| 2004. | ||||
| 9.2 Informative References | ||||
| [RELAX-NG] | [RELAX-NG] | |||
| OASIS Technical Committee: RELAX NG, "RELAX NG | OASIS Technical Committee: RELAX NG, "RELAX NG | |||
| Specification", December 2001. | Specification", December 2001. | |||
| [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an | |||
| IANA Considerations Section in RFCs", BCP 26, RFC 2434, | IANA Considerations Section in RFCs", BCP 26, RFC 2434, | |||
| October 1998. | October 1998. | |||
| URIs | ||||
| [1] <http://www.imc.org/atom-syntax/index.html> | ||||
| [2] <http://www.intertwingly.net/wiki/pie/FrontPage> | ||||
| Authors' Addresses | Authors' Addresses | |||
| Mark Nottingham (editor) | Mark Nottingham (editor) | |||
| EMail: mnot@pobox.com | Email: mnot@pobox.com | |||
| URI: http://www.mnot.net/ | URI: http://www.mnot.net/ | |||
| Robert Sayre (editor) | Robert Sayre (editor) | |||
| Boswijck Memex Consulting | Boswijck Memex Consulting | |||
| EMail: rfsayre@boswijck.com | Email: rfsayre@boswijck.com | |||
| URI: http://boswijck.com | URI: http://boswijck.com | |||
| Appendix A. Contributors | Appendix A. Contributors | |||
| The following people contributed to preliminary drafts of this | The following people contributed to preliminary drafts of this | |||
| document: Tim Bray, Mark Pilgrim, and Sam Ruby. Norman Walsh | document: Tim Bray, Mark Pilgrim, and Sam Ruby. Norman Walsh | |||
| provided the Relax NG schema. The content and concepts within are a | provided the Relax NG schema. The content and concepts within are a | |||
| product of the Atom community and the Atom Publishing Format and | product of the Atom community and the Atom Publishing Format and | |||
| Protocol Working Group. | Protocol Working Group. | |||
| Appendix B. Collected RELAX NG Compact Schema | Appendix B. Collected RELAX NG Compact Schema | |||
| This appendix is informative. | This appendix is informative. | |||
| # -*- Relax NG -*- | # -*- Relax NG -*- | |||
| namespace local = "" | namespace local = "" | |||
| namespace atom = | ||||
| "http://purl.org/atom/ns#draft-ietf-atompub-format-04" | namespace | |||
| atom = "http://purl.org/atom/ns#draft-ietf-atompub-format-06" | ||||
| namespace s = "http://www.ascc.net/xml/schematron" | namespace s = "http://www.ascc.net/xml/schematron" | |||
| start = atomFeed | atomEntry | start = atomFeed | atomEntry | |||
| # Attribute definitions | ## Attribute definitions | |||
| atomCommonAttributes = | atomCommonAttributes = | |||
| attribute xml:base { atomUri }?, | attribute xml:base { atomUri }?, | |||
| attribute xml:lang { atomLanguageTag }? | attribute xml:lang { atomLanguageTag }? | |||
| atomVersionAttribute = | ## Common Atom Constructs | |||
| attribute version {"draft-ietf-atompub-format-05 : do not deploy"} | ||||
| # Common Atom Constructs | ||||
| atomPlainTextConstruct = | atomPlainTextConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "TEXT" | "HTML" }?, | attribute type { "TEXT" | "HTML" }?, | |||
| text | text | |||
| atomXHTMLTextConstruct = | atomXHTMLTextConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "XHTML" }, | attribute type { "XHTML" }, | |||
| (text|anyElement)* | (text|anyElement)* | |||
| atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct | atomTextConstruct = | |||
| atomPlainTextConstruct | atomXHTMLTextConstruct | ||||
| atomPersonConstruct = | atomPersonConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (element atom:name { text } | (element atom:name { text } | |||
| & element atom:uri { atomUri }? | & element atom:uri { atomUri }? | |||
| & element atom:email { atomEmailAddress }?) | & element atom:email { atomEmailAddress }?) | |||
| atomDateConstruct = | atomDateConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| xsd:dateTime | xsd:dateTime | |||
| ## Container elements | ||||
| atomServiceConstruct = | ||||
| atomCommonAttributes, | ||||
| attribute href { atomUri } | ||||
| atomIdentityConstruct = | ||||
| atomCommonAttributes, | ||||
| (atomUri) | ||||
| # atom:feed | # atom:feed | |||
| # TODO: Test for multiple atom:link/@rel='alternate' with | # TODO: Test for multiple atom:link/@rel='alternate' with | |||
| # the same @type The following tests are simple to do, | # the same @type The following tests are simple to do, | |||
| # but my validator is giving me trouble. | # but my validator is giving me trouble. | |||
| # TODO: Debug and add them back | # TODO: Debug and add them back | |||
| # Test for at least one atom:link/@rel='alternate' | # Test for at least one atom:link/@rel='alternate' | |||
| # Test for atom:author or all atom:entry have atom:author | # Test for atom:author or all atom:entry have atom:author | |||
| # atom:feed | # atom:feed | |||
| atomFeed = | atomFeed = | |||
| element atom:feed { | ||||
| atomCommonAttributes, | ||||
| atomVersionAttribute, | ||||
| (atomHead | ||||
| & atomEntry* | ||||
| & anyElement*) | ||||
| } | ||||
| # atom:head | ||||
| atomHead = | ||||
| [ | [ | |||
| s:rule [ | s:rule [ | |||
| context = "atom:head" | context = "atom:feed" | |||
| s:assert [ | s:assert [ | |||
| test = "atom:link[@rel='alternate']" | test = "atom:link[@rel='alternate']" | |||
| "An atom:feed must have at least one link element | "An atom:feed must have at least one link element | |||
| with a rel attribute of 'alternate'." | with a rel attribute of 'alternate'." | |||
| ] | ] | |||
| ] | ] | |||
| s:rule [ | s:rule [ | |||
| context = "atom:head" | context = "atom:feed" | |||
| s:assert [ | s:assert [ | |||
| test = "atom:author or not(../atom:entry[count(atom:author) = 0])" | test = "atom:author or not(../atom:entry[count(atom:author) = 0])" | |||
| "An atom:feed must have an atom:author unless all of | "An atom:feed must have an atom:author unless all of | |||
| its atom:entry children have an atom:author." | its atom:entry children have an atom:author." | |||
| ] | ] | |||
| ] | ] | |||
| ] | ] | |||
| element atom:head { | ||||
| element atom:feed { | ||||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (atomTitle | (atomAuthor? | |||
| & atomUpdated | & atomCategory* | |||
| & atomLink+ | ||||
| & atomId? | ||||
| & atomAuthor? | ||||
| & atomContributor* | & atomContributor* | |||
| & atomTagline? | ||||
| & atomGenerator? | ||||
| & atomInfo? | ||||
| & atomCopyright? | & atomCopyright? | |||
| & atomCategory* | & atomGenerator? | |||
| & atomIntrospection? | & atomIcon? | |||
| & atomPost? | & atomId? | |||
| & anyElement*) | & atomImage? | |||
| & atomLink+ | ||||
| & atomSubtitle? | ||||
| & atomTitle | ||||
| & atomUpdated | ||||
| & anyElement* ), | ||||
| atomEntry* | ||||
| } | } | |||
| # atom:entry | # atom:entry | |||
| # TODO: Test for multiple atom:link @rel='alternate' | # TODO: Test for multiple atom:link @rel='alternate' | |||
| # with the same @type | # with the same @type | |||
| # TODO: Test for required atom:summary | # TODO: Test for required atom:summary | |||
| atomEntry = | atomEntry = | |||
| [ | [ | |||
| s:rule [ | s:rule [ | |||
| context = "/atom:entry" | ||||
| s:assert [ | ||||
| test = "@version" | ||||
| "The version attribute is required on standalone | ||||
| atom:entry elements." | ||||
| ] | ||||
| ] | ||||
| s:rule [ | ||||
| context = "atom:entry" | context = "atom:entry" | |||
| s:assert [ | s:assert [ | |||
| test = "atom:link[@rel='alternate']" | test = "atom:link[@rel='alternate']" | |||
| "An atom:entry must have at least one link element | "An atom:entry must have at least one link element | |||
| with a rel attribute of 'alternate'." | with a rel attribute of 'alternate'." | |||
| ] | ] | |||
| ] | ] | |||
| s:rule [ | s:rule [ | |||
| context = "atom:entry" | context = "atom:entry" | |||
| s:assert [ | s:assert [ | |||
| skipping to change at page 41, line 4 | skipping to change at page 40, line 29 | |||
| ] | ] | |||
| ] | ] | |||
| s:rule [ | s:rule [ | |||
| context = "atom:entry" | context = "atom:entry" | |||
| s:assert [ | s:assert [ | |||
| test = "atom:author or ../atom:author" | test = "atom:author or ../atom:author" | |||
| "An atom:entry must have an atom:author | "An atom:entry must have an atom:author | |||
| if the parent atom:feed does not." | if the parent atom:feed does not." | |||
| ] | ] | |||
| ] | ] | |||
| ] | ] | |||
| element atom:entry { | element atom:entry { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| atomVersionAttribute?, | (atomAuthor? | |||
| (atomTitle | & atomCategory* | |||
| & atomContent? | ||||
| & atomContributor* | ||||
| & atomCopyright? | ||||
| & atomId | & atomId | |||
| & atomLink* | & atomLink* | |||
| & atomUpdated | ||||
| & atomPublished? | & atomPublished? | |||
| & atomAuthor? | & atomSourceFeed? | |||
| & atomContributor* | ||||
| & atomHost? | ||||
| & atomCopyright? | ||||
| & atomCategory* | ||||
| & atomEdit? | ||||
| & atomSummary? | & atomSummary? | |||
| & atomContent? | & atomTitle | |||
| & atomHead? | & atomUpdated & | |||
| & anyElement*) | anyElement*) | |||
| } | } | |||
| # atom:content | ||||
| # atom:title | atomInlineTextContent = | |||
| element atom:content { | ||||
| atomTitle = element atom:title { atomTextConstruct } | atomCommonAttributes, | |||
| attribute type { "text | "html" | atomMediaType }?, | ||||
| # atom:id | (text)* | |||
| } | ||||
| atomId = element atom:id { atomIdentityConstruct } | atomInlineXHTMLContent = | |||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { "xhtml" | atomMediaType }?, | ||||
| (text|anyElement)* | ||||
| } | ||||
| atomLink = element atom:link { | atomOutOfLineContent = | |||
| element atom:content { | ||||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute href { atomUri }, | attribute type { "text" | "html" | "xhtml" | atomMediaType }?, | |||
| attribute rel { atomNCName | atomUri }?, | attribute src { atomUri }, | |||
| attribute type { atomMediaType }?, | ||||
| attribute hreflang { atomLanguageTag }?, | ||||
| attribute title { text }?, | ||||
| attribute length { text }?, | ||||
| empty | empty | |||
| } | } | |||
| # atom:updated | atomContent = atomInlineTextContent | |||
| # TODO: Test for a timezone that SHOULD be UTC | | atomInlineXHTMLContent | |||
| | atomOutOfLineContent | ||||
| atomUpdated = element atom:updated { atomDateConstruct } | ||||
| # atom:published | ## Metadata Elements | |||
| atomPublished = element atom:published { atomDateConstruct } | ||||
| # atom:author | # atom:author | |||
| atomAuthor = element atom:author { atomPersonConstruct } | atomAuthor = element atom:author { atomPersonConstruct } | |||
| # atom:contributor | ||||
| atomContributor = element atom:contributor { atomPersonConstruct } | ||||
| # atom:host | ||||
| # TODO: tighten this up | ||||
| atomHost = element atom:host { text } | ||||
| # atom:copyright | ||||
| atomCopyright = element atom:copyright { atomTextConstruct } | ||||
| # atom:category | # atom:category | |||
| atomCategory = element atom:category { | atomCategory = element atom:category { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute term { text }, | attribute term { text }, | |||
| attribute scheme { atomUri }?, | attribute scheme { atomUri }?, | |||
| attribute label { text }?, | attribute label { text }?, | |||
| empty | empty | |||
| } | } | |||
| # atom:summary | # atom:contributor | |||
| atomContributor = element atom:contributor { atomPersonConstruct } | ||||
| atomSummary = element atom:summary { atomTextConstruct } | # atom:copyright | |||
| # atom:content | atomCopyright = element atom:copyright { atomTextConstruct } | |||
| atomInlineTextContent = | # atom:generator | |||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { "TEXT" | "HTML" | atomMediaType }?, | ||||
| (text)* | ||||
| } | ||||
| atomInlineXHTMLContent = | atomGenerator = element atom:generator { | |||
| element atom:content { | ||||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "XHTML" | atomMediaType }?, | attribute uri { atomUri }?, | |||
| (text|anyElement)* | attribute version { text }?, | |||
| text | ||||
| } | } | |||
| atomOutOfLineContent = | ||||
| element atom:content { | # atom:icon | |||
| atomIcon = element atom:icon { atomCommonAttributes, (atomUri) } | ||||
| # atom:id | ||||
| atomId = element atom:id { } | ||||
| # atom:image | ||||
| atomImage = element atom:image { atomCommonAttributes, (atomUri) } | ||||
| # atom:link | ||||
| atomLink = element atom:link { | ||||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "TEXT" | "HTML" | "XHTML" | atomMediaType }?, | attribute href { atomUri }, | |||
| attribute src { atomUri }, | attribute rel { atomNCName | atomUri }?, | |||
| attribute type { atomMediaType }?, | ||||
| attribute hreflang { atomLanguageTag }?, | ||||
| attribute title { text }?, | ||||
| attribute length { text }?, | ||||
| empty | empty | |||
| } | } | |||
| atomContent = atomInlineTextContent | # atom:published | |||
| | atomInlineXHTMLContent | ||||
| | atomOutOfLineContent | ||||
| # atom:introspection | atomPublished = element atom:published { atomDateConstruct } | |||
| atomIntrospection = | # atom:source-feed | |||
| element atom:introspection { atomServiceConstruct } | ||||
| # atom:post | atomSourceFeed = | |||
| element atom:source-feed { | ||||
| atomCommonAttributes, | ||||
| ( atomTitle | ||||
| & atomUpdated | ||||
| & atomLink+ | ||||
| & atomIcon | ||||
| & atomId? | ||||
| & atomImage? | ||||
| & atomSubtitle? | ||||
| & atomAuthor? | ||||
| & atomContributor* | ||||
| & atomCopyright? | ||||
| & atomCategory* | ||||
| & atomGenerator? | ||||
| & anyElement* ) | ||||
| } | ||||
| atomPost = element atom:post { atomServiceConstruct } | # atom:subtitle | |||
| # atom:edit | atomSubtitle = element atom:subtitle { atomTextConstruct } | |||
| atomEdit = element atom:edit { atomServiceConstruct } | # atom:summary | |||
| # atom:tagline | atomSummary = element atom:summary { atomTextConstruct } | |||
| atomTagline = element atom:tagline { atomTextConstruct } | # atom:title | |||
| # atom:generator | atomTitle = element atom:title { atomTextConstruct } | |||
| atomGenerator = element atom:generator { | # atom:updated | |||
| atomCommonAttributes, | # TODO: Test for a timezone that SHOULD be UTC | |||
| attribute url { atomUri }?, | ||||
| attribute version { text }?, | ||||
| text | ||||
| } | ||||
| # atom:info | atomUpdated = element atom:updated { atomDateConstruct } | |||
| atomInfo = element atom:info { atomTextConstruct } | ||||
| # Low-level simple types | # Low-level simple types | |||
| # TODO: can anything more specific be said about these types? | # TODO: can anything more specific be said about these types? | |||
| atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" } | atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" } | |||
| atomMediaType = text | atomMediaType = text | |||
| atomLanguageTag = text | atomLanguageTag = text | |||
| atomUri = text | atomUri = text | |||
| atomEmailAddress = text | atomEmailAddress = text | |||
| skipping to change at page 45, line 5 | skipping to change at page 45, line 5 | |||
| anyElement = | anyElement = | |||
| element * - atom:* | element * - atom:* | |||
| { | { | |||
| (attribute * { text } | (attribute * { text } | |||
| | text | | text | |||
| | anyElement)* | | anyElement)* | |||
| } | } | |||
| # EOF | # EOF | |||
| Appendix C. Revision History | Appendix C. Change Log | |||
| [[ this section should be removed before final publication. ]] | [[anchor85: This section should be removed before final | |||
| publication.]] | ||||
| -06: Move Identity Construct into atom:id (only place it's used) | ||||
| atom:id values must be unique within a feed. | ||||
| restore atom:copyright definition mistakenly dropped during | ||||
| alphabetizing. | ||||
| Remove atom:head, add atom:source-feed, and "Extension Construct" | ||||
| text in an effort to accurately reflect WG consensus on data model | ||||
| and extensibility, acknowledging two opinions in favor of | ||||
| atom:head. | ||||
| Note @hreflang issue. | ||||
| Add comment on atom:entry/atom:summary requirements. | ||||
| Rework atom:id text. The dereferencing section didn't talk about | ||||
| dereferencing. | ||||
| Remove protocol reference. | ||||
| Alphabetize where appropriate (PaceOrderSpecAlphabetically). | ||||
| Add mI language (PaceExtendingAtom). | ||||
| Add atom:icon and atom:image (PaceImageAndIcon). | ||||
| Change atom:tagline to atom:subtitle | ||||
| Add inline XHTML language (PaceXHTMLNamespaceDiv). | ||||
| Change "TEXT" etc, to lowercase | ||||
| Change example id IRI to urn:uuid:... | ||||
| Add rel="self" (PaceFeedLink). | ||||
| Add Feed State text (PaceNoFeedState). | ||||
| Move to IRIs (PaceIRI). | ||||
| Add rel="via" (PaceLinkRelVia). | ||||
| Add rel="enclosure" (PaceEnclosuresAndPix). | ||||
| Remove info and host (PaceRemoveInfoAndHost) | ||||
| Clarify order of entries (PaceEntryOrder). | ||||
| Remove version attribute (PaceRemoveVersionAttr). | ||||
| Date format roundup (PaceDatesXSD). | ||||
| Remove Service construct and elements. | ||||
| fix atom:contributor cardinality typo | ||||
| Removed motivation/design principles note; if we haven't come up | ||||
| with them by now... | ||||
| Put conformance text into notational conventions. | ||||
| Removed instances of 'software'; too specific. | ||||
| Added refs to HTML and XHTML. | ||||
| Updated ref to Infoset. | ||||
| Various editorial tweaks. | ||||
| Fix RFC 3023 refs in IANA section | ||||
| Adjust head/link requirement | ||||
| fix @version typos | ||||
| -05: Add RNC from N. Walsh. | -05: Add RNC from N. Walsh. | |||
| Re-organize element definitions. | Re-organize element definitions. | |||
| Lift the prohibition on other types of DSig and encryption. | Lift the prohibition on other types of DSig and encryption. | |||
| Remove text on "indiscriminate use" of DSig and XMLEnc. | Remove text on "indiscriminate use" of DSig and XMLEnc. | |||
| -04: Update URI terms for 2396bis. | -04: Update URI terms for 2396bis. | |||
| Add Category construct (PaceCategoryRevised). | Add Category construct (PaceCategoryRevised). | |||
| Insert paranoid XHTML interpretation guidelines. | Insert paranoid XHTML interpretation guidelines. | |||
| Adjust atom:copyright, per chairs' instruction. | Adjust atom:copyright, per chairs' instruction. | |||
| Add atom:host as child element of atom:entry, per chairs' | Add atom:host as child element of atom:entry, per chairs' | |||
| direction (PacePersonConstruct). | direction (PacePersonConstruct). | |||
| End of changes. | ||||
This html diff was produced by rfcdiff 1.12, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ | ||||