| draft-ietf-atompub-format-06.txt | draft-ietf-atompub-format-07.txt | |||
|---|---|---|---|---|
| Network Working Group M. Nottingham, Ed. | Network Working Group M. Nottingham, Ed. | |||
| Internet-Draft | Internet-Draft R. Sayre, Ed. | |||
| Expires: September 13, 2005 R. Sayre, Ed. | Expires: October 2, 2005 March 31, 2005 | |||
| Boswijck Memex Consulting | ||||
| March 12, 2005 | ||||
| The Atom Syndication Format | The Atom Syndication Format | |||
| draft-ietf-atompub-format-06 | draft-ietf-atompub-format-07 | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is subject to all provisions | This document is an Internet-Draft and is subject to all provisions | |||
| of Section 3 of RFC 3667. By submitting this Internet-Draft, each | of Section 3 of RFC 3667. By submitting this Internet-Draft, each | |||
| author represents that any applicable patent or other IPR claims of | 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 is aware have been or will be disclosed, and any of | |||
| which he or she become aware will be disclosed, in accordance with | which he or she become aware will be disclosed, in accordance with | |||
| RFC 3668. | RFC 3668. | |||
| skipping to change at page 1, line 37 | skipping to change at page 1, line 35 | |||
| 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 September 13, 2005. | This Internet-Draft will expire on October 2, 2005. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2005). | 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1 Editorial Notes . . . . . . . . . . . . . . . . . . . . . 4 | 1.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2 Notational Conventions . . . . . . . . . . . . . . . . . . 5 | |||
| 1.3 Notational Conventions . . . . . . . . . . . . . . . . . . 5 | 2. Atom Documents . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2. Atom Documents . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. Common Atom Constructs . . . . . . . . . . . . . . . . . . . 8 | |||
| 3. Common Atom Constructs . . . . . . . . . . . . . . . . . . . 9 | 3.1 Text Constructs . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.1 Text Constructs . . . . . . . . . . . . . . . . . . . . . 9 | 3.1.1 The "type" Attribute . . . . . . . . . . . . . . . . . 8 | |||
| 3.1.1 "type" Attribute . . . . . . . . . . . . . . . . . . . 9 | ||||
| 3.2 Person Constructs . . . . . . . . . . . . . . . . . . . . 11 | 3.2 Person Constructs . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.2.1 The "atom:name" Element . . . . . . . . . . . . . . . 11 | 3.2.1 The "atom:name" Element . . . . . . . . . . . . . . . 11 | |||
| 3.2.2 The "atom:uri" Element . . . . . . . . . . . . . . . . 11 | 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 . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4. Atom Element Definitions . . . . . . . . . . . . . . . . . . 13 | 4. Atom Element Definitions . . . . . . . . . . . . . . . . . . 13 | |||
| 4.1 Container Elements . . . . . . . . . . . . . . . . . . . . 13 | 4.1 Container Elements . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.1.1 The "atom:feed" Element . . . . . . . . . . . . . . . 13 | 4.1.1 The "atom:feed" Element . . . . . . . . . . . . . . . 13 | |||
| 4.1.2 The "atom:entry" Element . . . . . . . . . . . . . . . 14 | 4.1.2 The "atom:entry" Element . . . . . . . . . . . . . . . 15 | |||
| 4.1.3 The "atom:content" Element . . . . . . . . . . . . . . 16 | 4.1.3 The "atom:content" Element . . . . . . . . . . . . . . 17 | |||
| 4.2 Metadata Elements . . . . . . . . . . . . . . . . . . . . 19 | 4.2 Metadata Elements . . . . . . . . . . . . . . . . . . . . 20 | |||
| 4.2.1 The "atom:author" Element . . . . . . . . . . . . . . 19 | 4.2.1 The "atom:author" Element . . . . . . . . . . . . . . 20 | |||
| 4.2.2 The "atom:category" Element . . . . . . . . . . . . . 20 | 4.2.2 The "atom:category" Element . . . . . . . . . . . . . 20 | |||
| 4.2.3 The "atom:contributor" Element . . . . . . . . . . . . 20 | 4.2.3 The "atom:contributor" Element . . . . . . . . . . . . 20 | |||
| 4.2.4 The "atom:copyright Element . . . . . . . . . . . . . 20 | 4.2.4 The "atom:copyright" Element . . . . . . . . . . . . . 21 | |||
| 4.2.5 The "atom:generator" Element . . . . . . . . . . . . . 21 | 4.2.5 The "atom:generator" Element . . . . . . . . . . . . . 21 | |||
| 4.2.6 The "atom:icon" Element . . . . . . . . . . . . . . . 21 | 4.2.6 The "atom:icon" Element . . . . . . . . . . . . . . . 21 | |||
| 4.2.7 The "atom:id" Element . . . . . . . . . . . . . . . . 21 | 4.2.7 The "atom:id" Element . . . . . . . . . . . . . . . . 22 | |||
| 4.2.8 The "atom:image" Element . . . . . . . . . . . . . . . 23 | 4.2.8 The "atom:image" Element . . . . . . . . . . . . . . . 23 | |||
| 4.2.9 The "atom:link" Element . . . . . . . . . . . . . . . 23 | 4.2.9 The "atom:link" Element . . . . . . . . . . . . . . . 24 | |||
| 4.2.10 The "atom:published" Element . . . . . . . . . . . . 26 | 4.2.10 The "atom:published" Element . . . . . . . . . . . . 26 | |||
| 4.2.11 The "atom:source-feed" Element . . . . . . . . . . . 26 | 4.2.11 The "atom:source" Element . . . . . . . . . . . . . 26 | |||
| 4.2.12 The "atom:subtitle" Element . . . . . . . . . . . . 26 | 4.2.12 The "atom:subtitle" Element . . . . . . . . . . . . 27 | |||
| 4.2.13 The "atom:summary" Element . . . . . . . . . . . . . 27 | 4.2.13 The "atom:summary" Element . . . . . . . . . . . . . 27 | |||
| 4.2.14 The "atom:title" Element . . . . . . . . . . . . . . 27 | 4.2.14 The "atom:title" Element . . . . . . . . . . . . . . 27 | |||
| 4.2.15 The "atom:updated" Element . . . . . . . . . . . . . 27 | 4.2.15 The "atom:updated" Element . . . . . . . . . . . . . 27 | |||
| 5. Securing Atom Documents . . . . . . . . . . . . . . . . . . 28 | 5. Securing Atom Documents . . . . . . . . . . . . . . . . . . 29 | |||
| 5.1 Digital Signatures . . . . . . . . . . . . . . . . . . . . 28 | 6. Extending Atom . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 5.2 Encryption . . . . . . . . . . . . . . . . . . . . . . . . 28 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . 32 | |||
| 6. Extending Atom . . . . . . . . . . . . . . . . . . . . . . . 29 | 8. Security Considerations . . . . . . . . . . . . . . . . . . 34 | |||
| 6.1 Extensions From Non-Atom Vocabularies . . . . . . . . . . 29 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 | |||
| 6.2 Extensions To the Atom Vocabulary . . . . . . . . . . . . 29 | 9.1 Normative References . . . . . . . . . . . . . . . . . . . 35 | |||
| 6.3 Software Processing of Foreign Markup . . . . . . . . . . 29 | 9.2 Informative References . . . . . . . . . . . . . . . . . . 36 | |||
| 6.4 Extension Elements . . . . . . . . . . . . . . . . . . . . 29 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 6.4.1 Simple Extension Elements . . . . . . . . . . . . . . 30 | A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 6.4.2 Structured Extension Elements . . . . . . . . . . . . 30 | B. Collected RELAX NG Compact Schema . . . . . . . . . . . . . 39 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . 31 | C. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 7.1 Registry of Link Relations . . . . . . . . . . . . . . . . 31 | Intellectual Property and Copyright Statements . . . . . . . 50 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . 33 | ||||
| 8.1 HTML and XHTML Content . . . . . . . . . . . . . . . . . . 33 | ||||
| 8.2 URIs . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
| 8.3 IRIs . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
| 8.4 Encryption and Signing . . . . . . . . . . . . . . . . . . 33 | ||||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | ||||
| 9.1 Normative References . . . . . . . . . . . . . . . . . . . 34 | ||||
| 9.2 Informative References . . . . . . . . . . . . . . . . . . 35 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 36 | ||||
| A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 37 | ||||
| B. Collected RELAX NG Compact Schema . . . . . . . . . . . . . 38 | ||||
| C. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 45 | ||||
| Intellectual Property and Copyright Statements . . . . . . . 48 | ||||
| 1. Introduction | 1. Introduction | |||
| Atom is an XML-based document format that 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. | |||
| 1.1 Editorial Notes | 1.1 Examples | |||
| The Atom format is a work-in-progress, and this draft is both | ||||
| incomplete and likely to change rapidly. As a result, THE FORMAT | ||||
| DESCRIBED BY THIS DRAFT SHOULD NOT BE DEPLOYED, either in production | ||||
| systems or in any non-experimental fashion on the Internet. | ||||
| Discussion of this draft happens in two fora; | ||||
| The mailing list <http://www.imc.org/atom-syntax/index.html> | ||||
| The Atom Wiki Web site | ||||
| <http://www.intertwingly.net/wiki/pie/FrontPage> | ||||
| Active development takes place on the mailing list, while the Wiki is | ||||
| used for issue tracking and new proposals. | ||||
| 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 | <feed xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-07"> | |||
| xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-06"> | ||||
| <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> | |||
| <entry> | <entry> | |||
| <title>Atom-Powered Robots Run Amok</title> | <title>Atom-Powered Robots Run Amok</title> | |||
| <link href="http://example.org/2003/12/13/atom03"/> | <link href="http://example.org/2003/12/13/atom03"/> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2003-12-13T18:30:02Z</updated> | <updated>2003-12-13T18:30:02Z</updated> | |||
| <content>Some text.</content> | ||||
| </entry> | </entry> | |||
| </feed> | ||||
| [[anchor4: Ask yourself: is the example atom:entry valid?]] | </feed> | |||
| A more extensive, single-entry Atom Feed Document: | ||||
| 1.3 Notational Conventions | <?xml version="1.0" encoding="utf-8"?> | |||
| <feed xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-07"> | ||||
| <title type="text">dive into mark</title> | ||||
| <subtitle type="html"> | ||||
| A <em>lot</em> of effort | ||||
| went into making this effortless | ||||
| </subtitle> | ||||
| <updated>2005-04-02T12:29:29Z</updated> | ||||
| <id>tag:example.org,2003:3</id> | ||||
| <link rel="alternate" type="text/html" | ||||
| hreflang="en" href="http://example.org/"/> | ||||
| <copyright>Copyright (c) 2003, Mark Pilgrim</copyright> | ||||
| <generator uri="http://www.example.com/" version="1.0"> | ||||
| Example Toolkit | ||||
| </generator> | ||||
| <entry> | ||||
| <title>Atom draft-07 snapshot</title> | ||||
| <link rel="alternate" type="text/html" | ||||
| href="http://example.org/2005/04/02/atom"/> | ||||
| <link rel="enclosure" type="audio/mpeg" length="1337" | ||||
| href="http://example.org/audio/ph34r_my_podcast.mp3"/> | ||||
| <id>tag:example.org,2003:3.2397</id> | ||||
| <updated>2005-04-02T12:29:29Z</updated> | ||||
| <published>2003-12-13T08:29:29-04:00</published> | ||||
| <author> | ||||
| <name>Mark Pilgrim</name> | ||||
| <uri>http://example.org/</uri> | ||||
| <email>f8dy@example.com</email> | ||||
| </author> | ||||
| <contributor> | ||||
| <name>Sam Ruby</name> | ||||
| <uri>http://intertwingly.net/blog/</uri> | ||||
| </contributor> | ||||
| <contributor> | ||||
| <name>Joe Gregorio</name> | ||||
| <uri>http://bitworking.org/</uri> | ||||
| </contributor> | ||||
| <content type="xhtml" xml:lang="en" | ||||
| xml:base="http://diveintomark.org/"> | ||||
| <div xmlns="http://www.w3.org/1999/xhtml"> | ||||
| <p><i>[Update: The Atom draft-07 snapshot is out.]</i></p> | ||||
| </div> | ||||
| </content> | ||||
| </entry> | ||||
| </feed> | ||||
| This specification describes conformance in terms of two kinds of | 1.2 Notational Conventions | |||
| 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", | This specification describes conformance in terms of two artifacts; | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | Atom Feed Documents and Atom Entry documents. Additionally, it | |||
| document are to be interpreted as described in BCP 14, [RFC2119], as | places some requirements on Atom Processors. | |||
| 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 names. It uses the following | to uniquely identify XML element names. It uses the following | |||
| namespace prefixes for the indicated namespace URIs; | namespace prefix for the indicated namespace URI; | |||
| "atom": http://purl.org/atom/ns#draft-ietf-atompub-format-06 | "atom": http://purl.org/atom/ns#draft-ietf-atompub-format-07 | |||
| 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-20040204]. 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 | |||
| a non-normative RELAX NG Compact schema [RELAX-NG]. However, the | a non-normative RELAX NG Compact schema [RELAX-NG]. However, the | |||
| 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 Appendix B. | |||
| Some sections of this specification are illustrated with Augmented | ||||
| Backus-Naur Form (ABNF), a format used to represent permissible | ||||
| strings in a protocol or language, as defined in [RFC2234]. | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
| document are to be interpreted as described in BCP 14, [RFC2119], as | ||||
| scoped to those conformance targets. | ||||
| 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 root is the atom:feed element. | 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 root is the atom:entry element. | the context of an Atom feed. Its root is the atom:entry element. | |||
| namespace | ||||
| atom ="http://purl.org/atom/ns#draft-ietf-atompub-format-06" | ||||
| namespace atom = | ||||
| "http://purl.org/atom/ns#draft-ietf-atompub-format-07" | ||||
| 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. | |||
| Items and Processing Instruction Information Items SHOULD be ignored | ||||
| in the normal processing of an Atom Document. | ||||
| Any element in an Atom Document MAY have an xml:base attribute. XML | Any element defined by this specification MAY have an xml:base | |||
| Base [W3C.REC-xmlbase-20010627] processing MUST be applied to any | attribute. XML Base [W3C.REC-xmlbase-20010627] processing MUST be | |||
| relative reference [RFC3987] present in an Atom Document. This | applied to any relative reference [RFC3987] present in an Atom | |||
| includes such elements and attributes as specified by Atom itself, as | Document. This includes such elements and attributes as specified by | |||
| well as those specified by extensions to Atom. | Atom itself, as well as those specified by extensions to Atom. | |||
| Any element in an Atom Document MAY have an xml:lang attribute, whose | Any element defined by this specification MAY have an xml:lang | |||
| content indicates the natural language for the element and its | attribute, whose content indicates the natural language for the | |||
| children. The language context is only significant for elements and | element and its children. The language context is only significant | |||
| attributes declared to be "language-sensitive" by this specification. | for elements and attributes declared to be "language-sensitive" by | |||
| Requirements regarding the content and interpretation of xml:lang are | this specification. Requirements regarding the content and | |||
| specified in XML 1.0 [W3C.REC-xml-20040204], Section 2.12. | interpretation of xml:lang are 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 }? | |||
| Atom allows the use of IRIs [RFC3987], rather than only URIs | Atom allows the use of IRIs [RFC3987], as well as URIs [RFC3986]. | |||
| [RFC3986]. For resolution, IRIs can easily be converted to URIs. | For resolution, IRIs can easily be converted to URIs. When comparing | |||
| When comparing IRIs serving as Identity Constructs, they MUST NOT be | IRIs serving as atom:id values, they MUST NOT be converted to URIs. | |||
| converted to URIs. Please note that by definition, every URI is an | By definition, every URI is an IRI, so any URI can be used where an | |||
| IRI, so any URI can be used where an IRI is needed. | IRI is needed. | |||
| [[anchor7: discussion of white space]] | ||||
| Atom is an extensible format. See the section titled 'Extending | Atom is an extensible format. See the section titled 'Extending | |||
| Atom' later in this document for a full description of how Atom | Atom' later in this document for a full description of how Atom | |||
| Documents can be extended. | Documents can be extended. | |||
| Atom Processors MAY keep state (e.g., metadata in atom:feed, entries) | Atom Processors MAY keep state (e.g., metadata in atom:feed, entries) | |||
| sourced from Atom Feed Documents and combine them with other Atom | sourced from Atom Feed Documents and combine them with other Atom | |||
| Feed Documents, in order to facilitate a contiguous view of the | Feed Documents, in order to facilitate a contiguous view of the | |||
| contents of a feed. The manner in which Atom Feed Documents are | contents of a feed. The manner in which Atom Feed Documents are | |||
| combined in order to reconstruct a feed (e.g., updating entries and | combined in order to reconstruct a feed (e.g., updating entries and | |||
| metadata, dealing with missing entries) is out of the scope of this | metadata, dealing with missing entries) is out of the scope of this | |||
| specification, but may be defined by an extension to Atom. | 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 those 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 small | A Text construct contains human-readable text, usually in small | |||
| quantities. Except for the "type" attribute, the content of Text | quantities. The content of Text constructs is language-sensitive. | |||
| 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)* | xhtmlDiv | |||
| atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct | atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct | |||
| 3.1.1 "type" Attribute | 3.1.1 The "type" Attribute | |||
| Text constructs MAY have a "type" attribute. [[anchor11: Some feel | Text constructs MAY have a "type" attribute. When present, the value | |||
| type attributes with different allowable values in different elements | MUST be one of "text", "html" or "xhtml". If the "type" attribute is | |||
| is confusing.]]. When present, the value MUST be one of "text", | not provided, Atom Processors MUST behave as though it were present | |||
| "html" or "xhtml". If the "type" attribute is not provided, Atom | with a value of "text". | |||
| 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. | |||
| 3.1.1.1 Text | ||||
| Example atom:title with text content: | ||||
| ... | ||||
| <title type="text"> | ||||
| Less: < | ||||
| </title> | ||||
| ... | ||||
| 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, Atom Processors MAY display it | humans in a readable fashion. Thus, Atom Processors MAY display it | |||
| using 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. | |||
| 3.1.1.2 HTML | ||||
| Example atom:title with HTML content: | ||||
| ... | ||||
| <title type="html"> | ||||
| Less: <em> &lt; </em> | ||||
| </title> | ||||
| ... | ||||
| 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 | |||
| as HTML [W3C.REC-html401-19991224]. Any markup within MUST be | as HTML [W3C.REC-html401-19991224]. Any markup within MUST be | |||
| escaped; for example, "<br>" as "<br>". HTML markup within SHOULD | escaped; for example, "<br>" as "<br>". HTML markup within SHOULD | |||
| be such that it could validly appear directly within an HTML <DIV> | be such that it could validly appear directly within an HTML <DIV> | |||
| element, after unescaping. Atom Processors that display such content | element, after unescaping. Atom Processors that display such content | |||
| MAY use markup to aid in its display. | MAY use that markup to aid in its display. | |||
| [[anchor12: example atom entry w/ escaped markup]] | 3.1.1.3 XHTML | |||
| Example atom:title with XHTML content: | ||||
| ... | ||||
| <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> | ||||
| <xhtml:div> | ||||
| Less: <xhtml:em> < </xhtml:em> | ||||
| </xhtml:div> | ||||
| </title> | ||||
| ... | ||||
| 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 | |||
| MUST be a single XHTML div element [W3C.REC-xhtml-basic-20001219]. | MUST be a single XHTML div element [W3C.REC-xhtml-basic-20001219]. | |||
| The XHTML div MUST contain XHTML text and markup that could validly | The XHTML div MUST contain XHTML text and markup that could validly | |||
| appear within an XHTML div element. The XHTML div element itself | appear within an XHTML div element. The XHTML div element itself | |||
| MUST NOT be considered part of the content. Atom Processors which | MUST NOT be considered part of the content. Atom Processors which | |||
| display the content MAY use the markup to aid in displaying it. | display the content MAY use the markup to aid in displaying it. | |||
| Escaped markup is interpreted as a text representation of markup, and | Escaped characters, such as "&" and ">", represent those characters, | |||
| MUST NOT be interpreted as markup itself. | not markup. | |||
| Example: | Examples of valid XHTML content: | |||
| ... | ... | |||
| <summary type="xhtml"> | <summary type="xhtml"> | |||
| <div xmlns="http://www.w3.org/1999/xhtml"> | <div xmlns="http://www.w3.org/1999/xhtml"> | |||
| This is <b>XHTML</b> content. | This is <b>XHTML</b> content. | |||
| </div> | </div> | |||
| </summary> | </summary> | |||
| ... | ... | |||
| <summary type="xhtml"> | <summary type="xhtml"> | |||
| <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | |||
| skipping to change at page 11, line 10 | skipping to change at page 11, line 10 | |||
| This is <xh:b>XHTML</xh:b> content. | This is <xh:b>XHTML</xh:b> content. | |||
| </xh:div> | </xh:div> | |||
| </summary> | </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 (hereafter, 'person'). | corporation, or similar entity (hereafter, 'person'). | |||
| Person constructs MAY be extended by namespace-qualified element | ||||
| children. | ||||
| This specification assigns no significance to the order of appearance | ||||
| 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 }? | |||
| & extensionElement*) | ||||
| This specification assigns no significance to the order of appearance | ||||
| of the child elements in a Person construct. Person constructs allow | ||||
| extension Metadata Elements (see Section 6.4). | ||||
| 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. The content of atom:name is language sensitive. Person | the person. The content of atom:name is language-sensitive. Person | |||
| constructs MUST contain exactly one "atom:name" 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 an IRI 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 an IRI reference [RFC3987]. | construct MUST be an IRI reference [RFC3987]. | |||
| xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the | ||||
| 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 person. 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 conform to the addr-spec BNF rule in [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]. I.e., the content of this element | extended date-time form ABNF rule in [RFC3339]. In addition, an | |||
| matches this regular expression: | uppercase "T" character MUST be used to separate date and time, and | |||
| an uppercase "Z" character MUST be present in the absence of a | ||||
| [0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+) | numeric time zone offset. | |||
| ?(Z|[\+\-][0-9]{2}:[0-9]{2}) | ||||
| As a result, the date values conform to the following specifications: | ||||
| [RFC3339], [W3C.REC-xmlschema-2-20041028], | ||||
| [W3C.NOTE-datetime-19980827], and [ISO.8601.1988]. | ||||
| atomDateConstruct = | atomDateConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| xsd:dateTime | xsd:dateTime | |||
| Such date values happen to be compatible with the following | ||||
| specifications: [ISO.8601.1988], [W3C.NOTE-datetime-19980827], and | ||||
| [W3C.REC-xmlschema-2-20041028]. | ||||
| Date values SHOULD be as accurate as possible. For example, it would | ||||
| be generally inappropriate for a publishing system to apply the same | ||||
| timestamp to several entries which were published during the course | ||||
| of a single day. | ||||
| 4. Atom Element Definitions | 4. Atom Element Definitions | |||
| 4.1 Container Elements | 4.1 Container Elements | |||
| 4.1.1 The "atom:feed" Element | 4.1.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 element children consist of one or | associated with the feed. Its element children consist of metadata | |||
| more metadata elements followed by zero or more atom:entry child | elements followed by zero or more atom:entry child elements. | |||
| 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, | |||
| (atomAuthor? | (atomAuthor? | |||
| & atomCategory* | & atomCategory* | |||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomGenerator? | & atomGenerator? | |||
| & atomIcon? | & atomIcon? | |||
| & atomId? | & atomId? | |||
| & atomImage? | & atomImage? | |||
| & atomLink+ | & atomLink+ | |||
| & atomSubtitle? | & atomSubtitle? | |||
| & atomTitle | & atomTitle | |||
| & atomUpdated | & atomUpdated | |||
| & anyElement* ), | & extensionElement*), | |||
| atomEntry* | atomEntry* | |||
| } | } | |||
| This specification assigns no significance to the order of atom:entry | ||||
| elements within the feed. | ||||
| 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:feed elements MUST contain exactly one atom:author element, | o atom:feed 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:feed elements MUST NOT | contain an atom:author element. atom:feed elements MUST NOT | |||
| contain more than one atom:author element. [[anchor22: | contain more than one atom:author element. | |||
| inheritance]] | ||||
| o atom:feed elements MAY contain any number of atom:category | o atom:feed elements MAY contain any number of atom:category | |||
| elements. | elements. | |||
| o atom:feed elements MAY contain any number of atom:contributor | o atom:feed elements MAY contain any number of atom:contributor | |||
| elements. | elements. | |||
| o atom:feed elements MUST NOT contain more than one atom:copyright | o atom:feed elements MUST NOT contain more than one atom:copyright | |||
| element. | element. | |||
| o atom:feed 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:feed elements MUST NOT contain more than one atom:icon | 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 | o atom:feed elements MUST NOT contain more than one atom:image | |||
| element. | element. | |||
| skipping to change at page 14, line 19 | skipping to change at page 14, line 28 | |||
| o atom:feed 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:feed elements MUST NOT contain more than one atom:icon | 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 | o atom:feed elements MUST NOT contain more than one atom:image | |||
| element. | element. | |||
| o atom:feed elements MUST NOT contain more than one atom:id 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 | o atom:feed elements MUST contain at least one atom:link element | |||
| with a relation of "alternate". | with a relation of "alternate". | |||
| o atom:feed elements SHOULD contain one atom:link element with a rel | o atom:feed elements SHOULD contain one atom:link element with a rel | |||
| attribute value of "self" and SHOULD contain a href attribute with | attribute value of "self". This URI identifies the feed and a | |||
| an absolute URI as its value. This URI identifies the feed and a | ||||
| representation equivalent to the feed. | representation equivalent to the feed. | |||
| o atom:feed elements MUST NOT contain more than one atom:link | o atom:feed elements MUST NOT contain more than one atom:link | |||
| element with a rel attribute value of "alternate" that has the | element with a rel attribute value of "alternate" that has the | |||
| same type attribute value. If a feed's atom:link element with | same type attribute value. If a feed's atom:link element with | |||
| type="alternate" resolves to an HTML document, then that document | type="alternate" resolves to an HTML document, then that document | |||
| SHOULD have a autodiscovery link element [Atom-autodiscovery] that | SHOULD have a autodiscovery link element [Atom-autodiscovery] that | |||
| reflects back to the feed. atom:feed elements MAY contain | reflects back to the feed. atom:feed elements MAY contain | |||
| additional atom:link elements beyond those described above. | additional atom:link elements beyond those described above. | |||
| o atom:feed elements MUST NOT contain more than one atom:subtitle | o atom:feed elements MUST NOT contain more than one atom:subtitle | |||
| element. | element. | |||
| skipping to change at page 14, line 44 | skipping to change at page 15, line 13 | |||
| identical atom:id values. | identical atom:id values. | |||
| 4.1.2 The "atom:entry" Element | 4.1.2 The "atom:entry" Element | |||
| The "atom:entry" element represents an individual entry, acting as a | The "atom:entry" element represents an individual entry, acting as a | |||
| container for metadata and data associated with the entry. This | 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. | |||
| The atom:entry 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:entry. | ||||
| atomEntry = | atomEntry = | |||
| element atom:entry { | element atom:entry { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (atomAuthor? | (atomAuthor? | |||
| & atomCategory* | & atomCategory* | |||
| & atomContent? | & atomContent? | |||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomId | & atomId | |||
| & atomLink* | & atomLink* | |||
| & atomPublished? | & atomPublished? | |||
| & atomSourceFeed? | & atomSource? | |||
| & atomSummary? | & atomSummary? | |||
| & atomTitle | & atomTitle | |||
| & atomUpdated & | & atomUpdated | |||
| anyElement*) | & extensionElement*) | |||
| } | } | |||
| This specification assigns no significance to the order of appearance | ||||
| of the child elements of atom:entry. | ||||
| 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 contain exactly one atom:author element, | o atom:entry elements MUST contain exactly one atom:author element, | |||
| unless, in an Atom Feed Document, the atom:feed element contains | unless the atom:entry contains an atom:source element which | |||
| an atom:author element itself. atom:entry elements MUST NOT | contains an atom:author element, or, in an Atom Feed Document, the | |||
| contain more than one atom:author element. [[anchor24: What if | atom:feed element contains an atom:author element itself. | |||
| there's a source-feed element? This is busted. We should make | atom:entry elements MUST NOT contain more than one atom:author | |||
| author required for atom:feed and optional for atom:entry. No | element. | |||
| inheritance co-constraints required. --R. Sayre]] | ||||
| o atom:entry elements MAY contain any number of atom:category | o atom:entry elements MAY contain any number of atom:category | |||
| elements. | elements. | |||
| o atom:entry elements MUST NOT contain more than one atom:content | ||||
| element. | ||||
| o atom:entry elements MAY contain any number of atom:contributor | o atom:entry elements MAY contain any number of atom:contributor | |||
| elements. | elements. | |||
| o atom:entry elements MUST NOT contain more than one atom:copyright | o atom:entry elements MUST NOT contain more than one atom:copyright | |||
| element. | 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". [[anchor25: "atom:entry elements MUST NOT | value of "alternate". atom:entry elements MUST NOT contain more | |||
| contain more than one atom:link element with a rel attribute value | than one atom:link element with a rel attribute value of | |||
| of "alternate" that has the same type attribute value." This | "alternate" that has the same combination of type and hreflang | |||
| requirement predates @hreflang. Keep it? --R. Sayre]] atom:entry | attribute values. atom:entry elements MAY contain additional | |||
| elements MAY contain additional atom:link elements beyond those | atom:link elements beyond those described above. | |||
| described above. | ||||
| 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 NOT contain more than one | o atom:entry elements MUST NOT contain more than one atom:source | |||
| atom:source-feed element. | element. | |||
| 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: [[anchor26: Do these requirements reflect the | the following cases: | |||
| WG's decisions? --R. Sayre]] | ||||
| * the atom:entry element contains no atom:content element. | * the atom:entry element contains no atom:content element. | |||
| [[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" | * 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 that is encoded in Base64; i.e. | * the atom:entry contains content that is encoded in Base64; 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 have exactly one "atom:title" element. | o atom:entry elements MUST have exactly one "atom:title" element. | |||
| o atom:entry elements MUST contain exactly one atom:updated element. | o atom:entry elements MUST contain exactly one atom:updated element. | |||
| 4.1.3 The "atom:content" Element | 4.1.3 The "atom:content" Element | |||
| The "atom:content" element either contains or links to the content of | The "atom:content" element either contains or links to the content of | |||
| the entry. Except for the "type" and "src" attributes, the content | the entry. The content of atom:content is language-sensitive. | |||
| of atom:content is language-sensitive. atom:entry elements MUST | ||||
| contain zero or one atom:content elements. | ||||
| atomInlineTextContent = | atomInlineTextContent = | |||
| element atom:content { | element atom:content { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "text" | "html" | atomMediaType }?, | attribute type { "text" | "html" }?, | |||
| (text)* | (text)* | |||
| } | } | |||
| atomInlineXHTMLContent = | atomInlineXHTMLContent = | |||
| element atom:content { | element atom:content { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { | attribute type { "xhtml" }, | |||
| "xhtml" | | xhtmlDiv | |||
| atomMediaType | } | |||
| }?, | ||||
| atomInlineOtherContent = | ||||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { atomMediaType }?, | ||||
| (text|anyElement)* | (text|anyElement)* | |||
| } | } | |||
| atomOutOfLineContent = | atomOutOfLineContent = | |||
| element atom:content { | element atom:content { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { | attribute type { atomMediaType }?, | |||
| "text" | | ||||
| "html" | | ||||
| "xhtml" | | ||||
| atomMediaType }?, | ||||
| attribute src { atomUri }, | attribute src { atomUri }, | |||
| empty | empty | |||
| } | } | |||
| atomContent = | atomContent = atomInlineTextContent | |||
| atomInlineTextContent | | | atomInlineXHTMLContent | |||
| atomInlineXHTMLContent | | | atomInlineOtherContent | |||
| atomOutOfLineContent | | atomOutOfLineContent | |||
| 4.1.3.1 The "type" attribute | 4.1.3.1 The "type" attribute | |||
| atom:content MAY have a "type" attribute. When present, the value | 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 | 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 | MIME media type [RFC2045] with a discrete top-level type (see Section | |||
| 5 of [RFC2045]). If the type attribute is not provided, Atom | 5 of [RFC2045]). If the type attribute is not provided, Atom | |||
| Processors MUST behave as though it were present with a value of | Processors MUST behave as though it were present with a value of | |||
| "text". | "text". | |||
| skipping to change at page 18, line 17 | skipping to change at page 18, line 23 | |||
| If the "src" attribute is present, the "type" attribute SHOULD be | If the "src" attribute is present, the "type" attribute SHOULD be | |||
| provided and MUST be a MIME media type [RFC2045], rather than "text", | provided and MUST be a MIME media type [RFC2045], rather than "text", | |||
| "html", or "xhtml". The value is advisory; that is to say, upon | "html", or "xhtml". The value is advisory; that is to say, upon | |||
| dereferencing the IRI to retrieve the content, if the server | dereferencing the IRI to retrieve the content, if the server | |||
| providing that content also provides a media type, the | providing that content also provides a media type, the | |||
| server-provided media type is authoritative. | server-provided media type is authoritative. | |||
| If the value of type begins with "text/" or ends with "+xml", the | 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 | content SHOULD be local; that is to say, no "src" attribute should be | |||
| provided. [[anchor31: J. Reschke: I'm not sure I understand what | provided. | |||
| 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 | 4.1.3.3 Processing Model | |||
| Atom Documents MUST conform to the following rules. Atom Processors | Atom Documents MUST conform to the following rules. Atom Processors | |||
| MUST interpret atom:content according to the first applicable rule. | MUST interpret atom:content according to the first applicable rule. | |||
| 1. If the value of "type" is "text", the content of atom:content | 1. If the value of "type" is "text", the content of atom:content | |||
| MUST NOT contain child elements. Such text is intended to be | MUST NOT contain child elements. Such text is intended to be | |||
| presented to humans in a readable fashion. Thus, Atom Processors | presented to humans in a readable fashion. Thus, Atom Processors | |||
| MAY display it using normal text rendering techniques such as | MAY display it using normal text rendering techniques such as | |||
| skipping to change at page 20, line 14 | skipping to change at page 20, line 21 | |||
| atomAuthor = element atom:author { atomPersonConstruct } | atomAuthor = element atom:author { atomPersonConstruct } | |||
| 4.2.2 The "atom:category" Element | 4.2.2 The "atom:category" Element | |||
| The "atom:category" element conveys information about a category | The "atom:category" element conveys information about a category | |||
| associated with an entry or feed. | associated with an entry or feed. | |||
| atomCategory = | atomCategory = | |||
| element atom:category { | element atom:category { | |||
| atomCommonAttributes, attribute term { text }, | atomCommonAttributes, | |||
| attribute term { text }, | ||||
| attribute scheme { atomUri }?, | attribute scheme { atomUri }?, | |||
| attribute label { text }?, | attribute label { text }?, | |||
| empty | empty | |||
| } | } | |||
| 4.2.2.1 The "term" Attribute | 4.2.2.1 The "term" Attribute | |||
| The "term" attribute is a string that identifies the category to | The "term" attribute is a string that identifies the category to | |||
| which the entry or feed belongs. Category elements MUST have a | which the entry or feed belongs. Category elements MUST have a | |||
| "term" attribute. | "term" attribute. | |||
| skipping to change at page 20, line 44 | skipping to change at page 21, line 5 | |||
| end-user applications. The content of the "label" attribute is | end-user applications. The content of the "label" attribute is | |||
| language-sensitive. Category elements MAY have a "label" attribute. | language-sensitive. Category elements MAY have a "label" attribute. | |||
| 4.2.3 The "atom:contributor" Element | 4.2.3 The "atom:contributor" Element | |||
| The "atom:contributor" element is a Person construct that indicates a | The "atom:contributor" element is a Person construct that indicates a | |||
| person or other entity who contributed to the entry or feed. | person or other entity who contributed to the entry or feed. | |||
| atomContributor = element atom:contributor { atomPersonConstruct } | atomContributor = element atom:contributor { atomPersonConstruct } | |||
| 4.2.4 The "atom:copyright Element | 4.2.4 The "atom:copyright" Element | |||
| The "atom:copyright" element is a Text construct that conveys a | The "atom:copyright" element is a Text construct that conveys a | |||
| human-readable copyright statement for an entry or feed. | human-readable copyright statement for an entry or feed. | |||
| atomCopyright = element atom:copyright { atomTextContstruct } | atomCopyright = element atom:copyright { atomTextConstruct } | |||
| The atom:copyright element SHOULD NOT be used to convey | The atom:copyright element SHOULD NOT be used to convey | |||
| machine-readable licensing information. | machine-readable licensing information. | |||
| If an atom:entry element does not contain an atom:copyright element, | If an atom:entry element does not contain an atom:copyright element, | |||
| then the atom:copyright element of the containing atom:feed element's | then the atom:copyright element of the containing atom:feed element's | |||
| atom:head element, if present, is considered to apply to the entry. | atom:head element, if present, is considered to apply to the entry. | |||
| 4.2.5 The "atom:generator" Element | 4.2.5 The "atom:generator" Element | |||
| The "atom:generator" element's content identifies the agent used to | The "atom:generator" element's content identifies the agent used to | |||
| generate a feed, for debugging and other purposes. | generate a feed, for debugging and other purposes. | |||
| atomGenerator = | atomGenerator = element atom:generator { | |||
| element atom:generator { | ||||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute uri { atomUri }?, | attribute uri { atomUri }?, | |||
| attribute version { text }?, | attribute version { text }?, | |||
| text | text | |||
| } | } | |||
| The content of this element, when present, MUST be a string that is a | The content of this element, when present, MUST be a string that is a | |||
| human-readable name for the generating agent. | human-readable name for the generating agent. | |||
| The atom:generator element MAY have a "uri" attribute whose value | The atom:generator element MAY have a "uri" attribute whose value | |||
| MUST be an IRI reference [RFC3987]. When dereferenced, that IRI | MUST be an IRI reference [RFC3987]. When dereferenced, that IRI | |||
| SHOULD produce a representation that is relevant to that agent. | SHOULD produce a representation that is relevant to that agent. | |||
| The atom:generator element MAY have a "version" attribute that | The atom:generator element MAY have a "version" attribute that | |||
| indicates the version of the generating agent. When present, its | indicates the version of the generating agent. When present, its | |||
| value is unstructured text. | value is unstructured text. | |||
| 4.2.6 The "atom:icon" Element | 4.2.6 The "atom:icon" Element | |||
| The "atom:icon" element's content is an IRI [RFC3987] which | The "atom:icon" element's content is an IRI reference [RFC3987] which | |||
| identifies an image which provides iconic visual identification for a | identifies an image which provides iconic visual identification for a | |||
| feed. The image SHOULD have an aspect ratio of one (horizontal) to | feed. | |||
| one (vertical), and should be suitable for presentation at a small | ||||
| size. | ||||
| atomIcon = element atom:icon { atomCommonAttributes, (atomUri) } | atomIcon = element atom:icon { | |||
| atomCommonAttributes, | ||||
| (atomUri) | ||||
| } | ||||
| The image SHOULD have an aspect ratio of one (horizontal) to one | ||||
| (vertical), and should be suitable for presentation at a small size. | ||||
| 4.2.7 The "atom:id" Element | 4.2.7 The "atom:id" Element | |||
| [[anchor45: Substantially changed from format-05, review carefully]] | ||||
| The "atom:id" element conveys a permanent, universally unique | The "atom:id" element conveys a permanent, universally unique | |||
| identifier for an entry or feed. | identifier for an entry or feed. | |||
| atomId = element atom:id { atomCommonAttributes, (atomUri) } | atomId = element atom:id { | |||
| atomCommonAttributes, | ||||
| (atomUri) | ||||
| } | ||||
| Its content MUST be an IRI, as defined by [RFC3987]. Note that the | Its content MUST be an IRI, as defined by [RFC3987]. Note that the | |||
| definition of "IRI" excludes relative references. Though the IRI | definition of "IRI" excludes relative references. Though the IRI | |||
| might use a dereferencable scheme, Atom Processors MUST NOT assume it | might use a dereferencable scheme, Atom Processors MUST NOT assume it | |||
| can be dereferenced. | can be dereferenced. | |||
| When an Atom document is relocated, migrated, syndicated, | When an Atom document is relocated, migrated, syndicated, | |||
| republished, exported or imported, the content of its atom:id element | republished, exported or imported, the content of its atom:id element | |||
| MUST NOT change. Put another way, an atom:id element pertains to all | MUST NOT change. Put another way, an atom:id element pertains to all | |||
| instantiations of a particular Atom entry or feed; revisions retain | instantiations of a particular Atom entry or feed; revisions retain | |||
| the same content in their atom:id elements. | the same content in their atom:id elements. It is suggested that the | |||
| atom:id element be stored along with the associated resource. | ||||
| The content of an atom:id element MUST be created in a way that | 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 | assures uniqueness. | |||
| stored along with the associated resource. | ||||
| Because of the risk of confusion between IRIs that would be | Because of the risk of confusion between IRIs that would be | |||
| equivalent if dereferenced, the following normalization strategy is | equivalent if dereferenced, the following normalization strategy is | |||
| strongly encouraged when generating atom:id elements: | strongly encouraged when generating atom:id elements: | |||
| o Provide the scheme in lowercase characters. | o Provide the scheme in lowercase characters. | |||
| o Provide the host, if any, in lowercase characters. | o Provide the host, if any, in lowercase characters. | |||
| o Only perform percent-encoding where it is essential. | o Only perform percent-encoding where it is essential. | |||
| o Use uppercase A-through-F characters when percent-encoding. | o Use uppercase A-through-F characters when percent-encoding. | |||
| o Prevent dot-segments appearing in paths. | o Prevent dot-segments appearing in paths. | |||
| skipping to change at page 23, line 29 | skipping to change at page 23, line 38 | |||
| http://www.example.com/~bob | http://www.example.com/~bob | |||
| http://www.example.com/%7ebob | http://www.example.com/%7ebob | |||
| http://www.example.com/%7Ebob | http://www.example.com/%7Ebob | |||
| are three distinct identifiers, because IRI %-escaping is significant | are three distinct identifiers, because IRI %-escaping is significant | |||
| for the purposes of comparison. | for the purposes of comparison. | |||
| 4.2.8 The "atom:image" Element | 4.2.8 The "atom:image" Element | |||
| The "atom:image" element's content is an IRI [RFC3987] which | The "atom:image" element's content is an IRI reference [RFC3987] | |||
| identifies an image which provides visual identification for a feed. | which identifies an image which provides visual identification for a | |||
| feed. | ||||
| atomImage = element atom:image { | ||||
| atomCommonAttributes, | ||||
| (atomUri) | ||||
| } | ||||
| The image SHOULD have an aspect ratio of 2 (horizontal) to 1 | The image SHOULD have an aspect ratio of 2 (horizontal) to 1 | |||
| (vertical). | (vertical). | |||
| atomImage = element atom:image { atomCommonAttributes, (atomUri) } | ||||
| 4.2.9 The "atom:link" Element | 4.2.9 The "atom:link" Element | |||
| The "atom:link" element is an empty element that defines a reference | The "atom:link" element is an empty element that defines a reference | |||
| from an entry or feed to a Web resource. | from an entry or feed to a Web resource. | |||
| atomLink = | atomLink = | |||
| element atom:link { | element atom:link { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute href { atomUri }, | attribute href { atomUri }, | |||
| attribute rel { atomNCName | atomUri }?, | attribute rel { atomNCName | atomUri }?, | |||
| skipping to change at page 24, line 12 | skipping to change at page 24, line 28 | |||
| attribute length { text }?, | attribute length { text }?, | |||
| empty | empty | |||
| } | } | |||
| 4.2.9.1 The "href" Attribute | 4.2.9.1 The "href" Attribute | |||
| The "href" attribute contains the link's IRI. atom:link elements | The "href" attribute contains the link's IRI. atom:link elements | |||
| MUST have a href attribute, whose value MUST be a IRI reference | MUST have a href attribute, whose value MUST be a IRI reference | |||
| [RFC3987]. | [RFC3987]. | |||
| xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the | ||||
| href attribute's content. | ||||
| 4.2.9.2 The "rel" Attribute | 4.2.9.2 The "rel" Attribute | |||
| atom:link elements MAY have an "rel" attribute that indicates the | atom:link elements MAY have a "rel" attribute that indicates the link | |||
| link relation type. If the "rel" attribute is not present, the 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 / IRI | ABNF for the "rel" attribute: | |||
| The value of "rel" MUST be either a name that is non-empty and does | rel_attribute = isegment-nz-nc / IRI | |||
| not contain any colon (":") characters, or a IRI [RFC3987]. Note | ||||
| that use of a relative reference is not allowed. If a name is given, | The value of "rel" MUST be string that is non-empty, does not contain | |||
| implementations MUST consider the link relation type to be equivalent | any colon (":") characters, and matches the "isegment-nz-nc" or "IRI" | |||
| to the same name registered within the IANA Registry of Link | ABNF forms in [RFC3987]. Note that use of a relative reference is | |||
| Relations Section 7, and thus the IRI that would be obtained by | not allowed. If a name is given, implementations MUST consider the | |||
| appending the value of the rel attribute to the string | link relation type to be equivalent to the same name registered | |||
| "http://www.iana.org/assignments/relation/". The value of "rel" | within the IANA Registry of Link Relations Section 7, and thus the | |||
| describes the meaning of the link, but does not impose any behavioral | IRI that would be obtained by appending the value of the rel | |||
| requirements on implementations. | attribute to the string "http://www.iana.org/assignments/relation/". | |||
| The value of "rel" describes the meaning of the link, but does not | ||||
| impose any behavioral requirements on implementations. | ||||
| This document defines five 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 IRI in the value of the href | 1. The value "alternate" signifies that the IRI in the value of the | |||
| attribute identifies an alternate version of the resource described | href attribute identifies an alternate version of the resource | |||
| by the containing element. | described by the containing element. | |||
| The value "related" signifies that the IRI in the value of the href | 2. The value "related" signifies that the IRI in the value of the | |||
| attribute identifies a resource related to the resource described by | href attribute identifies a resource related to the resource | |||
| the containing element. For example, the feed for a site that | described by the containing element. For example, the feed for a | |||
| discusses the performance of the search engine at | site that discusses the performance of the search engine at | |||
| "http://search.example.com" might contain, as a child of atom:feed: | "http://search.example.com" might contain, as a child of | |||
| atom:feed: | ||||
| <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. | |||
| The value "self" signifies that the IRI in the value of the href | 3. The value "self" signifies that the IRI in the value of the href | |||
| attribute identifies a resource equivalent to the containing element. | attribute identifies a resource equivalent to the containing | |||
| element. | ||||
| The value "enclosure" signifies that the IRI in the value of the href | 4. The value "enclosure" signifies that the IRI in the value of the | |||
| attribute identifies a related resource which is potentially large in | href attribute identifies a related resource which is potentially | |||
| size and may require special handling by consuming software. For | large in size and may require special handling by consuming | |||
| Link constructs with rel="enclosure", the length attribute SHOULD be | software. For Link elements with rel="enclosure", the length | |||
| provided. | attribute SHOULD be provided. | |||
| The value "via" signifies that the IRI in the value of the href | 5. The value "via" signifies that the IRI in the value of the href | |||
| attribute identifies a resource that is the source of the information | attribute identifies a resource that is the source of the | |||
| provided in the containing element. | information provided in the containing element. | |||
| 4.2.9.3 The "type" Attribute | 4.2.9.3 The "type" Attribute | |||
| Link elements MAY have a type attribute, whose value MUST conform to | The "type" attribute's value is an advisory media type; it is a hint | |||
| the syntax of a MIME media type [RFC2045]. | ||||
| The type attribute's value is an advisory media type; it is a hint | ||||
| about the type of the representation that 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. Link elements MAY have a type attribute, whose | |||
| value MUST conform to the syntax of a MIME media type [RFC2045]. | ||||
| 4.2.9.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.2.9.5 The "title" Attribute | 4.2.9.5 The "title" Attribute | |||
| skipping to change at page 25, line 51 | skipping to change at page 26, line 18 | |||
| link. The content of the "title" attribute is language sensitive. | link. The content of the "title" attribute is language sensitive. | |||
| Link elements MAY have a title attribute. | Link elements MAY have a title attribute. | |||
| 4.2.9.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 IRI 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.2.10 The "atom:published" Element | 4.2.10 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. | |||
| initial creation or first availability of the resource. | ||||
| atomPublished = element atom:published { atomDateConstruct } | atomPublished = element atom:published { atomDateConstruct } | |||
| 4.2.11 The "atom:source-feed" Element | Typically, atom:published will be associated with the initial | |||
| creation or first availability of the resource. | ||||
| 4.2.11 The "atom:source" Element | ||||
| If an atom:entry is copied from one feed into another feed, then the | If an atom:entry is copied from one feed into another feed, then the | |||
| source atom:feed's metadata (all child elements of atom:feed other | source atom:feed's metadata (all child elements of atom:feed other | |||
| than the atom:entry elements) MAY be preserved within the copied | than the atom:entry elements) MAY be preserved within the copied | |||
| entry by adding an atom:source-feed child element, if it is not | entry by adding an atom:source child element, if it is not already | |||
| already present in the entry, and including some or all of the source | present in the entry, and including some or all of the source feed's | |||
| feed's metadata elements as the atom:source-feed element's children. | metadata elements as the atom:source element's children. Such | |||
| Such metadata SHOULD be preserved if the source atom:feed contains | metadata SHOULD be preserved if the source atom:feed contains any of | |||
| any of the child elements atom:author, atom:contributor, | the child elements atom:author, atom:contributor, atom:copyright, or | |||
| atom:copyright, or atom:category and those child elements are not | atom:category and those child elements are not present in the source | |||
| present in the source atom:entry. | atom:entry. | |||
| atomSourceFeed = | atomSource = | |||
| element atom:source-feed { | element atom:source { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (atomAuthor? | (atomAuthor? | |||
| & atomCategory* | & atomCategory* | |||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomGenerator? | & atomGenerator? | |||
| & atomIcon? | & atomIcon? | |||
| & atomId? | & atomId? | |||
| & atomImage? | & atomImage? | |||
| & atomLink+ | & atomLink+ | |||
| & atomSubtitle? | & atomSubtitle? | |||
| & atomTitle | & atomTitle | |||
| & atomUpdated | & atomUpdated | |||
| & anyElement* ) | & extensionElement*) | |||
| } | } | |||
| 4.2.12 The "atom:subtitle" Element | 4.2.12 The "atom:subtitle" Element | |||
| The "atom:subtitle" element is a Text construct that conveys a | The "atom:subtitle" element is a Text construct that conveys a | |||
| human-readable description or subtitle for a feed. | human-readable description or subtitle for a feed. | |||
| atomSubtitle = element atom:subtitle { atomTextConstruct } | atomSubtitle = element atom:subtitle { atomTextConstruct } | |||
| 4.2.13 The "atom:summary" Element | 4.2.13 The "atom:summary" Element | |||
| skipping to change at page 28, line 22 | skipping to change at page 29, line 22 | |||
| The root of an Atom document (i.e., atom:feed in an Atom Feed | 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 | Document, atom:entry in an Atom Entry Document) MAY have an Enveloped | |||
| Signature, as described by XML-Signature and Syntax Processing | Signature, as described by XML-Signature and Syntax Processing | |||
| [W3C.REC-xmldsig-core-20020212]. | [W3C.REC-xmldsig-core-20020212]. | |||
| Processors MUST NOT reject an Atom Document containing such a | Processors MUST NOT reject an Atom Document containing such a | |||
| signature because they are not capable of verifying it; they MUST | signature because they are not capable of verifying it; they MUST | |||
| continue processing and MAY inform the user of their failure to | continue processing and MAY inform the user of their failure to | |||
| validate the signature. | validate the signature. | |||
| In other words, the presence of an element with the namespace IRI | In other words, the presence of an element with the namespace URI | |||
| "http://www.w3.org/2000/09/xmldsig#" and a local name of "Signature" | "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 | as a child of the document element must not cause an Atom Processor | |||
| to fail merely because of its presence. | to fail merely because of its presence. | |||
| Other elements in an Atom Document MUST NOT be signed unless their | Other elements in an Atom Document MUST NOT be signed unless their | |||
| definitions explicitly specify such a capability. | definitions explicitly specify such a capability. | |||
| 5.2 Encryption | 5.2 Encryption | |||
| The root of an Atom Document (i.e., atom:feed in an Atom Feed | The root of an Atom Document (i.e., atom:feed in an Atom Feed | |||
| skipping to change at page 29, line 22 | skipping to change at page 30, line 22 | |||
| the inclusion of arbitrary foreign markup. | the inclusion of arbitrary foreign markup. | |||
| 6.2 Extensions To the Atom Vocabulary | 6.2 Extensions To the Atom Vocabulary | |||
| Future versions of this specification may add new elements and | Future versions of this specification may add new elements and | |||
| attributes to the Atom markup vocabulary. Software written to | attributes to the Atom markup vocabulary. Software written to | |||
| conform to this version of the specification will not be able 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 | process such markup correctly and, in fact, will not be able to | |||
| distinguish it from markup error. For the purposes of this | distinguish it from markup error. For the purposes of this | |||
| discussion, unrecognized markup from the Atom vocabulary will be | discussion, unrecognized markup from the Atom vocabulary will be | |||
| considered "foreign "markup". | considered "foreign markup". | |||
| Unlike markup from other vocabularies, foreign markup from the Atom | ||||
| vocabulary MAY appear at any location in an Atom document. | ||||
| 6.3 Software Processing of Foreign Markup | 6.3 Software Processing of Foreign Markup | |||
| Software processing an Atom Document which encounters foreign markup | Software processing an Atom Document which encounters foreign markup | |||
| in a location that is legal according to this specification MUST NOT | 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 | 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. | software is able to process the foreign markup correctly and does so. | |||
| Otherwise, such markup is termed "unknown foreign markup". | Otherwise, such markup is termed "unknown foreign markup". | |||
| When unknown foreign markup is encountered as a child of atom:entry, | When unknown foreign markup is encountered as a child of atom:entry, | |||
| atom:feed, or a Person Construct, software MAY [[anchor67: Changed to | atom:feed, or a Person construct, software MAY bypass the markup and | |||
| MAY from SHOULD. Republishers might want to copy it. --R. Sayre]] | any textual content and MUST NOT change its behavior as a result of | |||
| bypass the markup and any textual content and MUST NOT change its | the markup's presence. | |||
| behavior as a result of the markup's presence. | ||||
| When unknown foreign markup is encountered in a Text Contruct or | When unknown foreign markup is encountered in a Text Contruct or | |||
| atom:content element, software SHOULD ignore the markup and process | atom:content element, software SHOULD ignore the markup and process | |||
| any text content of foreign elements as though the surrounding markup | any text content of foreign elements as though the surrounding markup | |||
| were not present. | were not present. | |||
| 6.4 Extension Elements | 6.4 Extension Elements | |||
| Atom allows foreign markup anywhere in an Atom document. Child | Atom allows foreign markup anywhere in an Atom document. Child | |||
| elements of atom:entry and atom:feed are considered "metadata" | elements of atom:entry, atom:feed, and Person constructs are | |||
| elements, and are described below. Child elements of Person | considered Metadata Elements, and are described below. Child | |||
| Constructs are considered to apply to the construct. The role of | elements of Person constructs are considered to apply to the | |||
| other foreign markup is undefined by this specification. | construct. The role of other foreign markup is undefined by this | |||
| specification. | ||||
| 6.4.1 Simple Extension Elements | 6.4.1 Simple Extension Elements | |||
| A Simple Extension element MUST NOT have any attributes or child | A Simple Extension element MUST NOT have any attributes or child | |||
| elements. The element MAY contain either character data, or be | elements. The element MAY contain character data, or be empty. | |||
| empty. | Simple Extension elements are not language-sensitive. | |||
| The element can be interpreted as a simple property (or name/value | The element can be interpreted as a simple property (or name/value | |||
| pair) of the parent element that encloses it. The pair consisting of | pair) of the parent element that encloses it. The pair consisting of | |||
| the namespace-URI of the element and the local name of the element | the namespace-URI of the element and the local name of the element | |||
| can be interpreted as the name of the property. The character data | can be interpreted as the name of the property. The character data | |||
| content of the element can be interpreted as the value of the | content of the element can be interpreted as the value of the | |||
| property. If the element is empty, then the property value can be | property. If the element is empty, then the property value can be | |||
| interpreted as an empty string. | interpreted as an empty string. | |||
| 6.4.2 Structured Extension Elements | 6.4.2 Structured Extension Elements | |||
| The root element of a Structured Extension element MUST have at least | The root element of a Structured Extension element MUST have at least | |||
| one attribute or child element. It MAY have attributes, it MAY | one attribute or child element. It MAY have attributes, it MAY | |||
| contain well-formed XML content (including character data), or it MAY | contain well-formed XML content (including character data), or it MAY | |||
| be empty. | be empty. Structured Extension elements are language-sensitive. | |||
| The structure of a Structured Extension element, including the order | The structure of a Structured Extension element, including the order | |||
| of its child elements, could be significant. | of its child elements, could be significant. | |||
| This specification does not provide an interpretation of a Structured | This specification does not provide an interpretation of a Structured | |||
| Extension element. The syntax of the XML contained in the element, | Extension element. The syntax of the XML contained in the element, | |||
| and an interpretation of how the element relates to its containing | and an interpretation of how the element relates to its containing | |||
| element is defined by the specification of the Atom extension. | element is defined by the specification of the Atom extension. | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| skipping to change at page 31, line 20 | skipping to change at page 32, line 20 | |||
| 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 | |||
| [RFC3023]. | [RFC3023]. | |||
| Encoding considerations: Identical to those of "application/xml" as | Encoding considerations: Identical to those of "application/xml" as | |||
| described in [RFC3023], section 3.2. | described in [RFC3023], section 3.2. | |||
| Security considerations: As defined in this specification. | Security considerations: As defined in this specification. | |||
| [[anchor71: update upon publication]] | [[anchor59: 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 [RFC3023], | shares the same security considerations as described in [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. [[anchor72: update upon | Published specification: This specification. [[anchor60: update upon | |||
| publication]] | publication]] | |||
| Applications that 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 [RFC3023], | Magic number(s): As specified for "application/xml" in [RFC3023], | |||
| section 3.2. | section 3.2. | |||
| File extension: .atom | File extension: .atom | |||
| Fragment identifiers: As specified for "application/xml" in | Fragment identifiers: As specified for "application/xml" in | |||
| [RFC3023], section 5. | [RFC3023], section 5. | |||
| Base URI: As specified in [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). | Author/Change controller: This specification's author(s). | |||
| [[anchor73: update upon publication]] | [[anchor61: update upon publication]] | |||
| 7.1 Registry of Link Relations | 7.1 Registry of Link Relations | |||
| This registry is maintained by IANA and initially contains five | This registry is maintained by IANA and initially contains five | |||
| values: "alternate", "related", "self", "enclosure", and "via". New | values: "alternate", "related", "self", "enclosure", and "via". New | |||
| assignments are subject to IESG Approval, as outlined in [RFC2434]. | assignments are subject to IESG Approval, as outlined in [RFC2434]. | |||
| Requests should be made by email to IANA, which will then forward the | Requests should be made by email to IANA, which will then forward the | |||
| request to the IESG requesting approval. The request should contain | request to the IESG requesting approval. The request should contain | |||
| discussion of at least the following five topics: | discussion of at least the following five topics: | |||
| skipping to change at page 33, line 9 | skipping to change at page 34, line 9 | |||
| given in Section 4.2.9.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. | |||
| 8. Security Considerations | 8. Security Considerations | |||
| 8.1 HTML and XHTML Content | 8.1 HTML and XHTML Content | |||
| Text Constructs and atom:content allow the delivery of HTML and XHTML | Text constructs and atom:content allow the delivery of HTML and XHTML | |||
| to receiving software, which may process it. Many elements in these | to receiving software, which may process it. Many elements in these | |||
| languages are considered 'unsafe' in that they open clients to one or | languages are considered 'unsafe' in that they open clients to one or | |||
| more types of attack. Implementers of software which processes Atom | more types of attack. Implementers of software which processes Atom | |||
| should carefully consider their handling of every type of element | should carefully consider their handling of every type of element | |||
| when processing incoming (X)HTML in Atom documents. See the security | when processing incoming (X)HTML in Atom documents. See the security | |||
| sections of RFC 2854 and HTML 4.01 for guidance. | sections of [RFC2854] and [W3C.REC-html401-19991224] for guidance. | |||
| Atom Processors should pay particular attention to the security of | Atom Processors should pay particular attention to the security of | |||
| the IMG, SCRIPT, EMBED, OBJECT, FRAME, FRAMESET, IFRAME, META, and | the IMG, SCRIPT, EMBED, OBJECT, FRAME, FRAMESET, IFRAME, META, and | |||
| LINK elements, but other elements may also have negative security | LINK elements, but other elements may also have negative security | |||
| properties. | properties. | |||
| (X)HTML can either directly contain or indirectly reference | (X)HTML can either directly contain or indirectly reference | |||
| executable content. | executable content. | |||
| 8.2 URIs | 8.2 URIs | |||
| Atom Processors handle URIs. See Section 7 of [RFC3986]. | Atom Processors handle URIs. See Section 7 of [RFC3986]. | |||
| 8.3 IRIs | 8.3 IRIs | |||
| Atom Processors handle IRIs. See Section 8 of [RFC3987]. | Atom Processors handle IRIs. See Section 8 of [RFC3987]. | |||
| 8.4 Encryption and Signing | 8.4 Encryption and Signing | |||
| Atom document can be encrypted and signed using | Atom documents 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 are subject to the security considerations implied | |||
| by their use. | by their use. | |||
| 9. References | 9. References | |||
| 9.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. | |||
| [ISO.8601.1988] | ||||
| International Organization for Standardization, "Data | ||||
| elements and interchange formats - Information interchange | ||||
| - Representation of dates and times", ISO Standard 8601, | ||||
| June 1988. | ||||
| [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. | |||
| [RFC2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | ||||
| Specifications: ABNF", RFC 2234, November 1997. | ||||
| [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April | [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April | |||
| 2001. | 2001. | |||
| [RFC2854] Connolly, D. and L. Masinter, "The 'text/html' Media | ||||
| Type", RFC 2854, June 2000. | ||||
| [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, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, January 2005. | RFC 3986, January 2005. | |||
| [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | |||
| Identifiers (IRIs)", RFC 3987, January 2005. | Identifiers (IRIs)", RFC 3987, January 2005. | |||
| [W3C.NOTE-datetime-19980827] | ||||
| Wolf, M. and C. Wicksteed, "Date and Time Formats", W3C | ||||
| NOTE NOTE-datetime-19980827, August 1998. | ||||
| [W3C.REC-html401-19991224] | [W3C.REC-html401-19991224] | |||
| Raggett, D., Hors, A. and I. Jacobs, "HTML 4.01 | Raggett, D., Hors, A. and I. Jacobs, "HTML 4.01 | |||
| Specification", W3C REC REC-html401-19991224, December | Specification", W3C REC REC-html401-19991224, December | |||
| 1999. | 1999. | |||
| [W3C.REC-xhtml-basic-20001219] | [W3C.REC-xhtml-basic-20001219] | |||
| Baker, M., Ishikawa, M., Matsui, S., Stark, P., Wugofski, | Baker, M., Ishikawa, M., Matsui, S., Stark, P., Wugofski, | |||
| T. and T. Yamakami, "XHTML Basic", W3C | T. and T. Yamakami, "XHTML Basic", W3C | |||
| REC REC-xhtml-basic-20001219, December 2000. | REC REC-xhtml-basic-20001219, December 2000. | |||
| skipping to change at page 35, line 41 | skipping to change at page 36, line 38 | |||
| [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. | |||
| [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 | 9.2 Informative References | |||
| [ISO.8601.1988] | ||||
| International Organization for Standardization, "Data | ||||
| elements and interchange formats - Information interchange | ||||
| - Representation of dates and times", ISO Standard 8601, | ||||
| June 1988. | ||||
| [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. | |||
| [W3C.NOTE-datetime-19980827] | ||||
| Wolf, M. and C. Wicksteed, "Date and Time Formats", W3C | ||||
| NOTE NOTE-datetime-19980827, August 1998. | ||||
| [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. | ||||
| 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 | ||||
| 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 -*- | # -*- rnc -*- | |||
| # RELAX NG Compact Syntax Grammar for the | ||||
| namespace local = "" | # Atom Format Specification Version 07 | |||
| namespace | ||||
| atom = "http://purl.org/atom/ns#draft-ietf-atompub-format-06" | ||||
| namespace atom = | ||||
| "http://purl.org/atom/ns#draft-ietf-atompub-format-07" | ||||
| namespace xhtml = "http://www.w3.org/1999/xhtml" | ||||
| namespace s = "http://www.ascc.net/xml/schematron" | namespace s = "http://www.ascc.net/xml/schematron" | |||
| start = atomFeed | atomEntry | start = atomFeed | atomEntry | |||
| ## Attribute definitions | # Common attributes | |||
| atomCommonAttributes = | atomCommonAttributes = | |||
| attribute xml:base { atomUri }?, | attribute xml:base { atomUri }?, | |||
| attribute xml:lang { atomLanguageTag }? | attribute xml:lang { atomLanguageTag }? | |||
| ## Common Atom Constructs | # Text 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)* | xhtmlDiv | |||
| atomTextConstruct = | atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct | |||
| atomPlainTextConstruct | atomXHTMLTextConstruct | ||||
| # 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 }? | |||
| & extensionElement*) | ||||
| # Date Construct | ||||
| atomDateConstruct = | atomDateConstruct = | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| xsd:dateTime | xsd:dateTime | |||
| ## Container elements | ||||
| # atom:feed | ||||
| # TODO: Test for multiple atom:link/@rel='alternate' with | ||||
| # the same @type The following tests are simple to do, | ||||
| # but my validator is giving me trouble. | ||||
| # TODO: Debug and add them back | ||||
| # Test for at least one atom:link/@rel='alternate' | ||||
| # Test for atom:author or all atom:entry have atom:author | ||||
| # atom:feed | # atom:feed | |||
| atomFeed = | atomFeed = | |||
| [ | [ | |||
| s:rule [ | s:rule [ | |||
| context = "atom:feed" | 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:feed" | 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[not(atom:author)])" | |||
| "An atom:feed must have an atom:author unless all of | "An atom:feed must have an atom:author unless all " | |||
| its atom:entry children have an atom:author." | ~ "of its atom:entry children have an atom:author." | |||
| ] | ] | |||
| ] | ] | |||
| ] | ] | |||
| element atom:feed { | element atom:feed { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (atomAuthor? | (atomAuthor? | |||
| & atomCategory* | & atomCategory* | |||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomGenerator? | & atomGenerator? | |||
| & atomIcon? | & atomIcon? | |||
| & atomId? | & atomId? | |||
| & atomImage? | & atomImage? | |||
| skipping to change at page 39, line 50 | skipping to change at page 40, line 41 | |||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomGenerator? | & atomGenerator? | |||
| & atomIcon? | & atomIcon? | |||
| & atomId? | & atomId? | |||
| & atomImage? | & atomImage? | |||
| & atomLink+ | & atomLink+ | |||
| & atomSubtitle? | & atomSubtitle? | |||
| & atomTitle | & atomTitle | |||
| & atomUpdated | & atomUpdated | |||
| & anyElement* ), | & extensionElement*), | |||
| atomEntry* | atomEntry* | |||
| } | } | |||
| # atom:entry | # atom:entry | |||
| # TODO: Test for multiple atom:link @rel='alternate' | ||||
| # with the same @type | ||||
| # TODO: Test for required atom:summary | ||||
| atomEntry = | atomEntry = | |||
| [ | [ | |||
| s:rule [ | s:rule [ | |||
| context = "atom:entry" | context = "atom:entry" | |||
| s:assert [ | s:assert [ | |||
| test = "atom:link[@rel='alternate']" | test = "atom:link[@rel='alternate'] or atom:content" | |||
| "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' or content." | |||
| ] | ] | |||
| ] | ] | |||
| s:rule [ | s:rule [ | |||
| context = "atom:entry" | context = "atom:entry" | |||
| s:assert [ | s:assert [ | |||
| test = "atom:author or ../atom:author" | test = "atom:author or " | |||
| "An atom:entry must have an atom:author | ~ "../atom:author or atom:source/atom:author" | |||
| if the parent atom:feed does not." | "An atom:entry must have an atom:author " | |||
| ~ "if its feed does not." | ||||
| ] | ] | |||
| ] | ] | |||
| # N.B. This rule doesn't test | ||||
| # for content with a non-binary type. | ||||
| s:rule [ | ||||
| context = "atom:entry" | ||||
| s:assert [ | ||||
| test = "atom:summary or atom:content[not(@src)]" | ||||
| "An atom:entry must have an atom:summary " | ||||
| ~ "if the atom:content element is empty." | ||||
| ] | ||||
| ] | ||||
| ] | ] | |||
| element atom:entry { | element atom:entry { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (atomAuthor? | (atomAuthor? | |||
| & atomCategory* | & atomCategory* | |||
| & atomContent? | & atomContent? | |||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomId | & atomId | |||
| & atomLink* | & atomLink* | |||
| & atomPublished? | & atomPublished? | |||
| skipping to change at page 40, line 42 | skipping to change at page 41, line 40 | |||
| element atom:entry { | element atom:entry { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| (atomAuthor? | (atomAuthor? | |||
| & atomCategory* | & atomCategory* | |||
| & atomContent? | & atomContent? | |||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomId | & atomId | |||
| & atomLink* | & atomLink* | |||
| & atomPublished? | & atomPublished? | |||
| & atomSourceFeed? | & atomSource? | |||
| & atomSummary? | & atomSummary? | |||
| & atomTitle | & atomTitle | |||
| & atomUpdated & | & atomUpdated | |||
| anyElement*) | & extensionElement*) | |||
| } | } | |||
| # atom:content | # atom:content | |||
| atomInlineTextContent = | atomInlineTextContent = | |||
| element atom:content { | element atom:content { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "text | "html" | atomMediaType }?, | attribute type { "text" | "html" }?, | |||
| (text)* | (text)* | |||
| } | } | |||
| atomInlineXHTMLContent = | atomInlineXHTMLContent = | |||
| element atom:content { | element atom:content { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "xhtml" | atomMediaType }?, | attribute type { "xhtml" }, | |||
| xhtmlDiv | ||||
| } | ||||
| atomInlineOtherContent = | ||||
| element atom:content { | ||||
| atomCommonAttributes, | ||||
| attribute type { atomMediaType }?, | ||||
| (text|anyElement)* | (text|anyElement)* | |||
| } | } | |||
| atomOutOfLineContent = | atomOutOfLineContent = | |||
| element atom:content { | element atom:content { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute type { "text" | "html" | "xhtml" | atomMediaType }?, | attribute type { atomMediaType }?, | |||
| attribute src { atomUri }, | attribute src { atomUri }, | |||
| empty | empty | |||
| } | } | |||
| atomContent = atomInlineTextContent | atomContent = atomInlineTextContent | |||
| | atomInlineXHTMLContent | | atomInlineXHTMLContent | |||
| | atomInlineOtherContent | ||||
| | atomOutOfLineContent | | atomOutOfLineContent | |||
| ## Metadata Elements | ||||
| # atom:author | # atom:author | |||
| atomAuthor = element atom:author { atomPersonConstruct } | atomAuthor = element atom:author { atomPersonConstruct } | |||
| # 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:contributor | # atom:contributor | |||
| atomContributor = element atom:contributor { atomPersonConstruct } | atomContributor = element atom:contributor { atomPersonConstruct } | |||
| skipping to change at page 42, line 21 | skipping to change at page 43, line 21 | |||
| atomGenerator = element atom:generator { | atomGenerator = element atom:generator { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute uri { atomUri }?, | attribute uri { atomUri }?, | |||
| attribute version { text }?, | attribute version { text }?, | |||
| text | text | |||
| } | } | |||
| # atom:icon | # atom:icon | |||
| atomIcon = element atom:icon { atomCommonAttributes, (atomUri) } | atomIcon = element atom:icon { | |||
| atomCommonAttributes, | ||||
| (atomUri) | ||||
| } | ||||
| # atom:id | # atom:id | |||
| atomId = element atom:id { } | atomId = element atom:id { | |||
| atomCommonAttributes, | ||||
| (atomUri) | ||||
| } | ||||
| # atom:image | # atom:image | |||
| atomImage = element atom:image { atomCommonAttributes, (atomUri) } | atomImage = element atom:image { | |||
| atomCommonAttributes, | ||||
| (atomUri) | ||||
| } | ||||
| # atom:link | # atom:link | |||
| atomLink = element atom:link { | 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 | |||
| } | } | |||
| # atom:published | # atom:published | |||
| atomPublished = element atom:published { atomDateConstruct } | atomPublished = element atom:published { atomDateConstruct } | |||
| # atom:source-feed | # atom:source | |||
| atomSourceFeed = | atomSource = | |||
| element atom:source-feed { | element atom:source { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| ( atomTitle | (atomAuthor? | |||
| & atomUpdated | & atomCategory* | |||
| & atomLink+ | ||||
| & atomIcon | ||||
| & atomId? | ||||
| & atomImage? | ||||
| & atomSubtitle? | ||||
| & atomAuthor? | ||||
| & atomContributor* | & atomContributor* | |||
| & atomCopyright? | & atomCopyright? | |||
| & atomCategory* | ||||
| & atomGenerator? | & atomGenerator? | |||
| & anyElement* ) | & atomIcon? | |||
| & atomId? | ||||
| & atomImage? | ||||
| & atomLink+ | ||||
| & atomSubtitle? | ||||
| & atomTitle | ||||
| & atomUpdated | ||||
| & extensionElement*) | ||||
| } | } | |||
| # atom:subtitle | # atom:subtitle | |||
| atomSubtitle = element atom:subtitle { atomTextConstruct } | atomSubtitle = element atom:subtitle { atomTextConstruct } | |||
| # atom:summary | # atom:summary | |||
| atomSummary = element atom:summary { atomTextConstruct } | atomSummary = element atom:summary { atomTextConstruct } | |||
| # atom:title | # atom:title | |||
| atomTitle = element atom:title { atomTextConstruct } | atomTitle = element atom:title { atomTextConstruct } | |||
| # atom:updated | # atom:updated | |||
| # TODO: Test for a timezone that SHOULD be UTC | ||||
| atomUpdated = element atom:updated { atomDateConstruct } | atomUpdated = element atom:updated { atomDateConstruct } | |||
| # Low-level simple types | # Low-level simple 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 | ||||
| atomLanguageTag = text | # Whatever a media type is, it contains at least one slash | |||
| atomMediaType = xsd:string { pattern = ".+/.+" } | ||||
| # As defined in RFC 3066 | ||||
| atomLanguageTag = xsd:string { | ||||
| pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*" | ||||
| } | ||||
| # Unconstrained; it's not entirely clear how IRI fit into | ||||
| # xsd:anyURI so let's not try to constrain it here | ||||
| atomUri = text | atomUri = text | |||
| atomEmailAddress = text | ||||
| # Whatever an email address is, it contains at least one @ | ||||
| atomEmailAddress = xsd:string { pattern = ".+@.+" } | ||||
| # Extensibility | # Extensibility | |||
| anyForeignElement = | simpleExtensionElement = | |||
| element * - (atom:* | local:*) | element * - atom:* { | |||
| { | text | |||
| (attribute * { text } | ||||
| | text | ||||
| | anyForeignElement)* | ||||
| } | } | |||
| anyForeignAttribute = | structuredExtensionElement = | |||
| attribute * - (atom:* | local:* | xml:*) { text } | element * - atom:* { | |||
| (attribute * { text }+, | ||||
| (text|anyElement)*) | ||||
| | (attribute * { text }*, | ||||
| (text?, anyElement+, (text|anyElement)*)) | ||||
| } | ||||
| extensionElement = | ||||
| simpleExtensionElement | structuredExtensionElement | ||||
| anyElement = | anyElement = | |||
| element * - atom:* | element * - atom:* { | |||
| { | ||||
| (attribute * { text } | (attribute * { text } | |||
| | text | | text | |||
| | anyElement)* | | anyElement)* | |||
| } | } | |||
| # XHTML | ||||
| anyXHTML = element xhtml:* { | ||||
| (attribute * { text } | ||||
| | text | ||||
| | anyXHTML)* | ||||
| } | ||||
| xhtmlDiv = element xhtml:div { | ||||
| (attribute * { text } | ||||
| | text | ||||
| | anyXHTML)* | ||||
| } | ||||
| # EOF | # EOF | |||
| Appendix C. Change Log | Appendix C. Change Log | |||
| [[anchor85: This section should be removed before final | [[anchor72: This section should be removed before final | |||
| publication.]] | publication.]] | |||
| -07: Change atom:source-feed to atom:source. | ||||
| Add ABNF reference | ||||
| Many editorial tweaks | ||||
| Rework extensibility | ||||
| Adjust page breaks in txt version | ||||
| -06: Move Identity Construct into atom:id (only place it's used) | -06: Move Identity Construct into atom:id (only place it's used) | |||
| atom:id values must be unique within a feed. | atom:id values must be unique within a feed. | |||
| restore atom:copyright definition mistakenly dropped during | restore atom:copyright definition mistakenly dropped during | |||
| alphabetizing. | alphabetizing. | |||
| Remove atom:head, add atom:source-feed, and "Extension Construct" | Remove atom:head, add atom:source-feed, and "Extension Construct" | |||
| text in an effort to accurately reflect WG consensus on data model | text in an effort to accurately reflect WG consensus on data model | |||
| and extensibility, acknowledging two opinions in favor of | and extensibility, acknowledging two opinions in favor of | |||
| atom:head. | atom:head. | |||
| Note @hreflang issue. | Note @hreflang issue. | |||
| Add comment on atom:entry/atom:summary requirements. | Add comment on atom:entry/atom:summary requirements. | |||
| End of changes. | ||||
This html diff was produced by rfcdiff 1.12, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ | ||||