| draft-ietf-atompub-protocol-14.txt | draft-ietf-atompub-protocol-15.txt | |||
|---|---|---|---|---|
| Network Working Group J. Gregorio, Ed. | Network Working Group J. Gregorio, Ed. | |||
| Internet-Draft IBM | Internet-Draft IBM | |||
| Intended status: Standards Track B. de hOra, Ed. | Intended status: Standards Track B. de hOra, Ed. | |||
| Expires: September 5, 2007 Propylon Ltd. | Expires: November 23, 2007 Propylon Ltd. | |||
| March 4, 2007 | May 22, 2007 | |||
| The Atom Publishing Protocol | The Atom Publishing Protocol | |||
| draft-ietf-atompub-protocol-14.txt | draft-ietf-atompub-protocol-15.txt | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
| applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
| have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
| aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| skipping to change at page 1, line 35 | 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 5, 2007. | This Internet-Draft will expire on November 23, 2007. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2007). | |||
| Abstract | Abstract | |||
| The Atom Publishing Protocol (APP) is an application-level protocol | The Atom Publishing Protocol (APP) is an application-level protocol | |||
| for publishing and editing Web resources. The protocol is based on | for publishing and editing Web resources. The protocol is based on | |||
| HTTP transfer of Atom-formatted representations. The Atom format is | HTTP transfer of Atom-formatted representations. The Atom format is | |||
| documented in the Atom Syndication Format [RFC4287]. | documented in the Atom Syndication Format. | |||
| Editorial Note | Editorial Note | |||
| [[anchor1: Remove this section upon publication]] | ||||
| To provide feedback on this Internet-Draft, join the atom-protocol | To provide feedback on this Internet-Draft, join the atom-protocol | |||
| mailing list (http://www.imc.org/atom-protocol/index.html) [1]. | mailing list (http://www.imc.org/atom-protocol/index.html) [1]. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2. Notational Conventions . . . . . . . . . . . . . . . . . . . . 6 | 2. Notational Conventions . . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1. XML-related Conventions . . . . . . . . . . . . . . . . . 6 | 2.1. XML-related Conventions . . . . . . . . . . . . . . . . . 7 | |||
| 2.1.1. Referring to Information Items . . . . . . . . . . . . 6 | 2.1.1. Referring to Information Items . . . . . . . . . . . . 7 | |||
| 2.1.2. RELAX NG Schema . . . . . . . . . . . . . . . . . . . 6 | 2.1.2. RELAX NG Schema . . . . . . . . . . . . . . . . . . . 7 | |||
| 2.1.3. Use of xml:base and xml:lang . . . . . . . . . . . . . 6 | 2.1.3. Use of xml:base and xml:lang . . . . . . . . . . . . . 7 | |||
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . . 8 | 4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.1. Client Implementation Considerations . . . . . . . . . . . 9 | 4.1. Identity and Naming . . . . . . . . . . . . . . . . . . . 10 | |||
| 5. Protocol Operations . . . . . . . . . . . . . . . . . . . . . 11 | 4.2. Documents and Resource classification . . . . . . . . . . 10 | |||
| 5.1. Retrieving a Service Document . . . . . . . . . . . . . . 11 | 4.3. Control and Publishing . . . . . . . . . . . . . . . . . . 12 | |||
| 5.2. Listing Collection Members . . . . . . . . . . . . . . . . 11 | 4.4. Client Implementation Considerations . . . . . . . . . . . 12 | |||
| 5.3. Creating a Resource . . . . . . . . . . . . . . . . . . . 12 | 5. Protocol Operations . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.4. Editing a Resource . . . . . . . . . . . . . . . . . . . . 12 | 5.1. Retrieving a Service Document . . . . . . . . . . . . . . 14 | |||
| 5.4.1. Retrieving a Resource . . . . . . . . . . . . . . . . 12 | 5.2. Listing Collection Members . . . . . . . . . . . . . . . . 14 | |||
| 5.4.2. Updating a Resource . . . . . . . . . . . . . . . . . 13 | 5.3. Creating a Resource . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.4.3. Deleting a Resource . . . . . . . . . . . . . . . . . 13 | 5.4. Editing a Resource . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.5. Use of HTTP Response codes . . . . . . . . . . . . . . . . 13 | 5.4.1. Retrieving a Resource . . . . . . . . . . . . . . . . 15 | |||
| 6. Atom Publishing Protocol Documents . . . . . . . . . . . . . . 14 | 5.4.2. Editing a Resource . . . . . . . . . . . . . . . . . . 16 | |||
| 6.1. Document Types . . . . . . . . . . . . . . . . . . . . . . 14 | 5.4.3. Deleting a Resource . . . . . . . . . . . . . . . . . 16 | |||
| 6.2. Document Extensibility . . . . . . . . . . . . . . . . . . 14 | 5.5. Use of HTTP Response codes . . . . . . . . . . . . . . . . 16 | |||
| 7. Category Documents . . . . . . . . . . . . . . . . . . . . . . 16 | 6. Protocol Documents . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 7.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 6.1. Document Types . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 7.2. Element Definitions . . . . . . . . . . . . . . . . . . . 16 | 6.2. Document Extensibility . . . . . . . . . . . . . . . . . . 18 | |||
| 7.2.1. The "app:categories" element . . . . . . . . . . . . . 16 | 7. Category Documents . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 8. Service Documents . . . . . . . . . . . . . . . . . . . . . . 18 | 7.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 8.1. Workspaces . . . . . . . . . . . . . . . . . . . . . . . . 18 | 7.2. Element Definitions . . . . . . . . . . . . . . . . . . . 20 | |||
| 8.2. Example . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 7.2.1. The "app:categories" element . . . . . . . . . . . . . 20 | |||
| 8.3. Element Definitions . . . . . . . . . . . . . . . . . . . 20 | 8. Service Documents . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 8.3.1. The "app:service" Element . . . . . . . . . . . . . . 20 | 8.1. Workspaces . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 8.3.2. The "app:workspace" Element . . . . . . . . . . . . . 20 | 8.2. Example . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8.3.3. The "app:collection" Element . . . . . . . . . . . . . 21 | 8.3. Element Definitions . . . . . . . . . . . . . . . . . . . 24 | |||
| 8.3.4. The "app:accept" Element . . . . . . . . . . . . . . . 21 | 8.3.1. The "app:service" Element . . . . . . . . . . . . . . 24 | |||
| 8.3.5. The "app:categories" Element . . . . . . . . . . . . . 22 | 8.3.2. The "app:workspace" Element . . . . . . . . . . . . . 24 | |||
| 9. Creating and Editing Resources . . . . . . . . . . . . . . . . 24 | 8.3.3. The "app:collection" Element . . . . . . . . . . . . . 25 | |||
| 9.1. Member URIs . . . . . . . . . . . . . . . . . . . . . . . 24 | 8.3.4. The "app:accept" Element . . . . . . . . . . . . . . . 26 | |||
| 9.2. Creating resources with POST . . . . . . . . . . . . . . . 24 | 8.3.5. Usage in Atom Feed Documents . . . . . . . . . . . . . 26 | |||
| 9.2.1. Example . . . . . . . . . . . . . . . . . . . . . . . 25 | 8.3.6. The "app:categories" Element . . . . . . . . . . . . . 26 | |||
| 9.3. Updating Resources with PUT . . . . . . . . . . . . . . . 26 | 9. Creating and Editing Resources . . . . . . . . . . . . . . . . 28 | |||
| 9.4. Deleting Resources with DELETE . . . . . . . . . . . . . . 26 | 9.1. Member URIs . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 9.5. Caching and entity tags . . . . . . . . . . . . . . . . . 26 | 9.2. Creating Resources with POST . . . . . . . . . . . . . . . 28 | |||
| 9.5.1. Example . . . . . . . . . . . . . . . . . . . . . . . 26 | 9.2.1. Example . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 9.6. Media Resources and Media Link Entries . . . . . . . . . . 28 | 9.3. Editing Resources with PUT . . . . . . . . . . . . . . . . 30 | |||
| 9.6.1. Examples . . . . . . . . . . . . . . . . . . . . . . . 29 | 9.4. Deleting Resources with DELETE . . . . . . . . . . . . . . 30 | |||
| 9.7. The Slug: Header . . . . . . . . . . . . . . . . . . . . . 35 | 9.5. Caching and entity tags . . . . . . . . . . . . . . . . . 30 | |||
| 9.7.1. Slug: Header syntax . . . . . . . . . . . . . . . . . 36 | 9.5.1. Example . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 9.7.2. Example . . . . . . . . . . . . . . . . . . . . . . . 36 | 9.6. Media Resources and Media Link Entries . . . . . . . . . . 32 | |||
| 10. Listing Collections . . . . . . . . . . . . . . . . . . . . . 37 | 9.6.1. Examples . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 10.1. Collection partial lists . . . . . . . . . . . . . . . . . 37 | 9.7. The Slug: Header . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 10.2. The "app:edited" Element . . . . . . . . . . . . . . . . . 38 | 9.7.1. Slug: Header syntax . . . . . . . . . . . . . . . . . 40 | |||
| 11. Atom Format Link Relation Extensions . . . . . . . . . . . . . 40 | 9.7.2. Example . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 11.1. The "edit" Link Relation . . . . . . . . . . . . . . . . . 40 | 10. Listing Collections . . . . . . . . . . . . . . . . . . . . . 41 | |||
| 11.2. The "edit-media" Link Relation . . . . . . . . . . . . . . 40 | 10.1. Collection partial lists . . . . . . . . . . . . . . . . . 41 | |||
| 12. The Atom Format Type Parameter . . . . . . . . . . . . . . . . 41 | 10.2. The "app:edited" Element . . . . . . . . . . . . . . . . . 42 | |||
| 12.1. The 'type' parameter . . . . . . . . . . . . . . . . . . . 41 | 11. Atom Format Link Relation Extensions . . . . . . . . . . . . . 43 | |||
| 12.1.1. Conformance . . . . . . . . . . . . . . . . . . . . . 41 | 11.1. The "edit" Link Relation . . . . . . . . . . . . . . . . . 43 | |||
| 13. Atom Publishing Controls . . . . . . . . . . . . . . . . . . . 42 | 11.2. The "edit-media" Link Relation . . . . . . . . . . . . . . 43 | |||
| 13.1. The "app:control" Element . . . . . . . . . . . . . . . . 42 | 12. The Atom Format Type Parameter . . . . . . . . . . . . . . . . 44 | |||
| 13.1.1. The "app:draft" Element . . . . . . . . . . . . . . . 42 | 12.1. The 'type' parameter . . . . . . . . . . . . . . . . . . . 44 | |||
| 14. Securing the Atom Publishing Protocol . . . . . . . . . . . . 43 | 12.1.1. Conformance . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 15. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | 13. Atom Publishing Controls . . . . . . . . . . . . . . . . . . . 45 | |||
| 15.1. Denial of Service . . . . . . . . . . . . . . . . . . . . 44 | 13.1. The "app:control" Element . . . . . . . . . . . . . . . . 45 | |||
| 15.2. Replay Attacks . . . . . . . . . . . . . . . . . . . . . . 44 | 13.1.1. The "app:draft" Element . . . . . . . . . . . . . . . 45 | |||
| 15.3. Spoofing Attacks . . . . . . . . . . . . . . . . . . . . . 44 | 14. Securing the Atom Publishing Protocol . . . . . . . . . . . . 46 | |||
| 15.4. Linked Resources . . . . . . . . . . . . . . . . . . . . . 44 | 15. Security Considerations . . . . . . . . . . . . . . . . . . . 47 | |||
| 15.5. Digital Signatures and Encryption . . . . . . . . . . . . 44 | 15.1. Denial of Service . . . . . . . . . . . . . . . . . . . . 47 | |||
| 15.6. URIs and IRIs . . . . . . . . . . . . . . . . . . . . . . 44 | 15.2. Replay Attacks . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 45 | 15.3. Spoofing Attacks . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 16.1. Content-type registration for | 15.4. Linked Resources . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 'application/atomserv+xml' . . . . . . . . . . . . . . . . 45 | 15.5. Digital Signatures and Encryption . . . . . . . . . . . . 47 | |||
| 16.2. Content-type registration for 'application/atomcat+xml' . 46 | 15.6. URIs and IRIs . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 16.3. Header field registration for 'SLUG' . . . . . . . . . . . 47 | 15.7. Code Injection and Cross Site Scripting . . . . . . . . . 48 | |||
| 16.4. The Link Relation registration "edit" . . . . . . . . . . 48 | 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 16.5. The Link Relation registration "edit-media" . . . . . . . 48 | 16.1. Content-type registration for 'application/atomcat+xml' . 49 | |||
| 16.6. The Atom Format Media Type Parameter . . . . . . . . . . . 48 | 16.2. Content-type registration for 'application/atomsvc+xml' . 50 | |||
| 17. References . . . . . . . . . . . . . . . . . . . . . . . . . . 49 | 16.3. Header field registration for 'SLUG' . . . . . . . . . . . 51 | |||
| 17.1. Normative References . . . . . . . . . . . . . . . . . . . 49 | 16.4. The Link Relation registration "edit" . . . . . . . . . . 52 | |||
| 17.2. Informative References . . . . . . . . . . . . . . . . . . 50 | 16.5. The Link Relation registration "edit-media" . . . . . . . 52 | |||
| Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 52 | 16.6. The Atom Format Media Type Parameter . . . . . . . . . . . 52 | |||
| Appendix B. RELAX NG Compact Schema . . . . . . . . . . . . . . . 53 | 17. References . . . . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
| Appendix C. Revision History . . . . . . . . . . . . . . . . . . 59 | 17.1. Normative References . . . . . . . . . . . . . . . . . . . 53 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 63 | 17.2. Informative References . . . . . . . . . . . . . . . . . . 54 | |||
| Intellectual Property and Copyright Statements . . . . . . . . . . 64 | Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 56 | |||
| Appendix B. RELAX NG Compact Schema . . . . . . . . . . . . . . . 57 | ||||
| Appendix C. Revision History . . . . . . . . . . . . . . . . . . 63 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 67 | ||||
| Intellectual Property and Copyright Statements . . . . . . . . . . 68 | ||||
| 1. Introduction | 1. Introduction | |||
| The Atom Publishing Protocol is an application-level protocol for | The Atom Publishing Protocol is an application-level protocol for | |||
| publishing and editing Web resources using HTTP [RFC2616] and XML 1.0 | publishing and editing Web Resources using HTTP [RFC2616] and XML 1.0 | |||
| [W3C.REC-xml]. The protocol supports the creation of Web resources | [REC-xml]. The protocol supports the creation of Web Resources and | |||
| and provides facilities for: | provides facilities for: | |||
| o Collections: Sets of resources, which can be retrieved in whole or | o Collections: Sets of Resources, which can be retrieved in whole or | |||
| in part. | in part. | |||
| o Services: Discovery and description of Collections. | o Services: Discovery and description of Collections. | |||
| o Editing: Creating, updating and deleting resources. | o Editing: Creating, editing, and deleting Resources. | |||
| The Atom Publishing Protocol is different from many contemporary | The Atom Publishing Protocol is different from many contemporary | |||
| protocols in that the server is given wide latitude in processing | protocols in that the server is given wide latitude in processing | |||
| requests from clients. See Section 4 for more details. | requests from clients. See Section 4.4 for more details. | |||
| 2. Notational Conventions | 2. Notational Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 2.1. XML-related Conventions | 2.1. XML-related Conventions | |||
| 2.1.1. Referring to Information Items | 2.1.1. Referring to Information Items | |||
| Atom Protocol Document formats are specified in terms of the XML | Atom Protocol Document formats are specified in terms of the XML | |||
| Information Set [W3C.REC-xml-infoset], serialized as XML 1.0 | Information Set [REC-xml-infoset], serialized as XML 1.0 [REC-xml]. | |||
| [W3C.REC-xml]. | ||||
| The Infoset terms "Element Information Item" and "Attribute | The Infoset terms "Element Information Item" and "Attribute | |||
| Information Item" are shortened to "element" and "attribute" | Information Item" are shortened to "element" and "attribute" | |||
| respectively. Therefore, when this specification uses the term | respectively. Therefore, when this specification uses the term | |||
| "element", it is referring to an Element Information Item, and when | "element", it is referring to an Element Information Item, and when | |||
| it uses the term "attribute", it is referring to an Attribute | it uses the term "attribute", it is referring to an Attribute | |||
| Information Item. | Information Item. | |||
| 2.1.2. RELAX NG Schema | 2.1.2. RELAX NG Schema | |||
| 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 [RNC]. However, the text of | a non-normative RELAX NG Compact schema [RNC]. However, the text of | |||
| this specification provides the definition of conformance. Complete | this specification provides the definition of conformance. Complete | |||
| schemas appear in Appendix B. | schemas appear in Appendix B. | |||
| 2.1.3. Use of xml:base and xml:lang | 2.1.3. Use of xml:base and xml:lang | |||
| XML elements defined by this specification MAY have an xml:base | XML elements defined by this specification MAY have an xml:base | |||
| attribute [W3C.REC-xmlbase-20010627]. When xml:base is used, it | attribute [REC-xmlbase]. When xml:base is used, it serves the | |||
| serves the function described in Section 5.1.1 of URI Generic Syntax | function described in Section 5.1.1 of URI Generic Syntax [RFC3986], | |||
| [RFC3986], by establishing the base URI (or IRI) for resolving | by establishing the base URI (or IRI) for resolving relative | |||
| relative references found within the scope of the xml:base attribute. | references found within the scope of the xml:base attribute. | |||
| Any element defined by this specification MAY have an xml:lang | Any element defined by this specification MAY have an xml:lang | |||
| attribute, whose content indicates the natural language for the | attribute, whose content indicates the natural language for the | |||
| element and its descendents. Requirements regarding the content and | element and its descendents. Requirements regarding the content and | |||
| interpretation of xml:lang are specified in Section 2.12 of XML 1.0 | interpretation of xml:lang are specified in Section 2.12 of XML 1.0 | |||
| [W3C.REC-xml]. | [REC-xml]. | |||
| 3. Terminology | 3. Terminology | |||
| For convenience, this protocol can be referred to as the "Atom | For convenience, this protocol can be referred to as the "Atom | |||
| Protocol" or "APP". | Protocol" or "APP". The following terminology is used by this | |||
| specification: | ||||
| URI/IRI - A Uniform Resource Identifier and Internationalized | ||||
| Resource Identifier. These terms and the distinction between them | ||||
| are defined in [RFC3986] and [RFC3987]. Before an IRI found in a | ||||
| document is used by HTTP, the IRI is first converted to a URI (see | ||||
| Section 4). | ||||
| In this specification the phrase "the URI of a document" is shorthand | o URI - A Uniform Resource Identifier as defined in [RFC3986]. In | |||
| this specification the phrase "the URI of a document" is shorthand | ||||
| for "a URI which, when dereferenced, is expected to produce that | for "a URI which, when dereferenced, is expected to produce that | |||
| document as a representation". | document as a representation". | |||
| Resource - A network-accessible data object or service identified by | o IRI - An Internationalized Resource Identifier as defined in | |||
| an IRI, as defined in [RFC2616]. See [W3C.REC-webarch-20041215] for | [RFC3987]. Before an IRI found in a document is used by HTTP, the | |||
| further discussion on resources. | IRI is first converted to a URI. See Section 4.1. | |||
| Representation - An entity included with a request or response as | o Resource - A network-accessible data object or service identified | |||
| by an IRI, as defined in [RFC2616]. See [REC-webarch] for further | ||||
| discussion on Resources. | ||||
| o relation (or "relation of") - Refers to the "rel" attribute value | ||||
| of an atom:link element. | ||||
| o Representation - An entity included with a request or response as | ||||
| defined in [RFC2616]. | defined in [RFC2616]. | |||
| Collection - A resource that contains a set of Member Entries. See | o Collection - A Resource that contains a set of Member Resources. | |||
| Section 9. | Collections are represented as Atom Feeds. See Section 9. | |||
| Member - A resource whose IRI is listed in a Collection by a link | o Member (or Member Resource) - A Resource whose IRI is listed in a | |||
| element with a relation of "edit" or "edit-media". See Section 9.1. | Collection by an atom:link element with a relation of "edit" or | |||
| The protocol defines two kinds of Members - Entry and Media | "edit-media". See Section 9.1. The protocol defines two kinds of | |||
| resources. | Members: | |||
| Entry Resource - Member Resources of a Collection that are | * Entry Resource - Members of a Collection that are represented | |||
| represented using the "application/atom+xml" media type. | as Atom Entry Documents, as defined in [RFC4287]. | |||
| Media Resource -Member Resources of a Collection that are represented | * Media Resource - Members of a Collection that have | |||
| with a media type other than "application/atom+xml". | representations other than Atom Entry Documents. | |||
| Media Link Entry - an Entry Resource that contains metadata about a | o Media Link Entry - an Entry Resource that contains metadata about | |||
| Media Resource. | a Media Resource. See Section 9.6. | |||
| Workspace - A named group of Collections. See Section 8.1. | o Workspace - A named group of Collections. See Section 8.1. | |||
| Service Document - A document that describes the location and | o Service Document - A document that describes the location and | |||
| capabilities of one or more Collections. See Section 8. | capabilities of one or more Collections, grouped into Workspaces. | |||
| See Section 8. | ||||
| Category Document - A document that describes the categories allowed | o Category Document - A document that describes the categories | |||
| in a Collection. See Section 7. | allowed in a Collection. See Section 7. | |||
| 4. Protocol Model | 4. Protocol Model | |||
| The Atom Publishing Protocol uses HTTP methods to author Member | The Atom Protocol specifies operations for publishing and editing | |||
| Resources as follows: | Resources using HTTP. It uses Atom-formatted representations to | |||
| describe the state and metadata of those Resources. It defines how | ||||
| Collections of Resources can be organized, and specifies formats to | ||||
| support their discovery, grouping and categorization. | ||||
| o GET is used to retrieve a representation of a known resource. | 4.1. Identity and Naming | |||
| o POST is used to create a new, dynamically-named, resource. When | Atom Protocol documents allow the use of IRIs [RFC3987], as well as | |||
| the client submits non-Atom-Entry representations to a Collection | URIs [RFC3986] to identify Resources. Before an IRI in a document is | |||
| for creation, two resources are always created - a Media Entry for | used by HTTP, the IRI is first converted to a URI according to the | |||
| the requested resource, and a Media Link Entry for metadata (in | procedure defined in Section 3.1 of [RFC3987]. In accordance with | |||
| Atom Entry format) about the resource. | that specification, the conversion SHOULD be applied as late as | |||
| possible. Conversion does not imply Resource creation - the IRI and | ||||
| the URI into which it is converted identify the same Resource. | ||||
| o PUT is used to update a known resource. | While the Atom Protocol specifies the formats of the representations | |||
| that are exchanged and the actions that can be performed on the IRIs | ||||
| embedded in those representations, it does not constrain the form of | ||||
| the URIs that are used. HTTP [RFC2616] specifies that the URI space | ||||
| of each server is controlled by that server, and this protocol | ||||
| imposes no further constraints on that control. | ||||
| o DELETE is used to remove a known resource. | 4.2. Documents and Resource classification | |||
| The Atom Protocol does not specify the form of the URIs that are | A Resource whose IRI is listed in a Collection is called a Member | |||
| used. HTTP ([RFC2616]) specifies that the URI space of each server | Resource. The protocol defines two kinds of Member Resources - Entry | |||
| is controlled by that server, and this protocol imposes no further | Resources and Media Resources. Entry Resources are represented as | |||
| constraints on that control. What is specified here are the formats | Atom Entry Documents [RFC4287]. Media Resources can have | |||
| of the representations that are exchanged and the actions that can be | representations in any media type. A Media Resource is described | |||
| performed on the IRIs embedded in those representations. | within a Collection using an Entry called a Media Link Entry. This | |||
| diagram shows the classification of Resources within the Atom | ||||
| Protocol: | ||||
| The Atom Protocol only covers the creation, update and deletion of | Member Resources | |||
| Entry and Media resources. Other resources could be created, | | | |||
| updated, and deleted as the result of manipulating a Collection, but | ----------------- | |||
| the number of those resources, their media-types, and effects of Atom | | | | |||
| Protocol operations on them are outside the scope of this | Entry Resources Media Resources | |||
| specification. | | | |||
| Media Link Entry | ||||
| Since all aspects of client-server interaction are defined in terms | The Atom Protocol defines Collection Resources for managing and | |||
| of HTTP, [RFC2616] should be consulted for any areas not covered in | organizing both kinds of Member Resource. A Collection is | |||
| this specification. | represented by an Atom Feed Document. A Collection Feed's Entries | |||
| contain the IRIs of, and metadata about, the Collection's Member | ||||
| Resources. A Collection Feed can contain any number of Entries, | ||||
| which might represent all the Members of the Collection, or an | ||||
| ordered subset of them (see Section 10.1). In the diagram of a | ||||
| Collection below, there are two Entries. The first contains the IRI | ||||
| of an Entry Resource. The second contains the IRIs of both a Media | ||||
| Resource and a Media Link Entry Resource, which contains the metadata | ||||
| for that Media Resource: | ||||
| Along with operations on Member Resources, the Atom Protocol defines | Collection | |||
| Collection Resources for managing and organizing Member Resources. | | | |||
| The representation of Collections are Atom Feed documents, and | o- Entry | |||
| contain the IRIs of, and metadata about the Collection's Member | | | | |||
| Resources. The Atom Protocol does not make a structural distinction | | o- Member Entry IRI (Entry Resource) | |||
| between Feeds used for Collections and other Atom Feeds. The only | | | |||
| mechanism that this specification supplies for indicating a | o- Entry | |||
| Collection Feed is its appearance in a Service Document. | | | |||
| o- Member Entry IRI (Media Link Entry) | ||||
| | | ||||
| o- Media IRI (Media Resource) | ||||
| Atom Protocol documents allow the use of IRIs [RFC3987], as well as | The Atom Protocol does not make a distinction between Feeds used for | |||
| URIs [RFC3986]. Before an IRI found in a document is used by HTTP, | Collections and other Atom Feeds. The only mechanism that this | |||
| the IRI is first converted to a URI according the procedure defined | specification supplies for indicating a Feed is a Collection Feed is | |||
| in Section 3.1 of [RFC3987]. In accordance with that specification, | the presence of its IRI in a Service Document. | |||
| this conversion SHOULD be applied as late as possible. Conversion | ||||
| does not imply resource creation - the IRI and the URI into which it | ||||
| is converted identify the same resource. | ||||
| There are two kinds of Member Resources - Entry Resources and Media | Service Documents represent server-defined groups of Collections, and | |||
| Resources. Entry Resources are represented as Atom Entries | are used to initialize the process of creating and editing Resources. | |||
| [RFC4287]. Media Resources can have representations in any media | These groups of Collections are called Workspaces. Workspaces have | |||
| type. A Media Link Entry is an Entry Resource that contains metadata | names, but no IRIs, and no specified processing model. The Service | |||
| about a Media Resource. This diagram shows the classification of the | Document can indicate which media types, and which categories, a | |||
| resources: | Collection will accept. In the diagram below, there are two | |||
| Workspaces each describing the IRIs, acceptable media types, and | ||||
| categories for a Collection: | ||||
| Member Resource | Service | |||
| -> Entry Resource | o- Workspace | |||
| -> Media Link Entry | | | | |||
| -> Media Resource | | o- Collection | |||
| | | | ||||
| | o- IRI, categories, mediatypes | ||||
| | | ||||
| o- Workspace | ||||
| | | ||||
| o- Collection | ||||
| | | ||||
| o- IRI, categories, mediatypes | ||||
| A Collection Feed's Atom Entries contain the Entry and Media Resource | 4.3. Control and Publishing | |||
| IRIs of the Collection. A Collection Feed can contain any number of | ||||
| Entries for either kind, or an ordered subset of the Entries (see | ||||
| Section 10.1). In the diagram of a Collection below, there are two | ||||
| Entries. The first contains the IRI of an Entry Resource. The | ||||
| second contains the IRIs of both a Media Resource and a Media Link | ||||
| Entry Resource, which contains the metadata for that Media Resource: | ||||
| Collection | The Atom Publishing Protocol uses HTTP methods to author Member | |||
| Entry | Resources as follows: | |||
| Member Entry IRI -> Entry Resource | ||||
| Entry | ||||
| Member Entry IRI -> Media Link Entry | ||||
| Media IRI -> Media Resource | ||||
| Service Documents represent server-defined groups of Collections, and | o GET is used to retrieve a representation of a known Resource. | |||
| are used to initialize the process of creating and editing resources. | ||||
| 4.1. Client Implementation Considerations | o POST is used to create a new, dynamically-named, Resource. When | |||
| the client submits non-Atom-Entry representations to a Collection | ||||
| for creation, two Resources are always created - a Media Entry for | ||||
| the requested Resource, and a Media Link Entry for metadata about | ||||
| the Resource that will appear in the Collection. | ||||
| o PUT is used to edit a known Resource. It is not used for Resource | ||||
| creation. | ||||
| o DELETE is used to remove a known Resource. | ||||
| The Atom Protocol only covers the creating, editing, and deleting of | ||||
| Entry and Media Resources. Other Resources could be created, edited | ||||
| and deleted as the result of manipulating a Collection, but the | ||||
| number of those Resources, their media-types, and effects of Atom | ||||
| Protocol operations on them are outside the scope of this | ||||
| specification. | ||||
| Since all aspects of client-server interaction are defined in terms | ||||
| of HTTP, [RFC2616] should be consulted for any areas not covered in | ||||
| this specification. | ||||
| 4.4. Client Implementation Considerations | ||||
| The Atom Protocol imposes few restrictions on the actions of servers. | The Atom Protocol imposes few restrictions on the actions of servers. | |||
| Unless a constraint is specified here, servers can be expected to | Unless a constraint is specified here, servers can be expected to | |||
| vary in behavior, in particular around the manipulation of Atom | vary in behavior, in particular around the manipulation of Atom | |||
| Entries sent by clients. For example, although this specification | Entries sent by clients. For example, although this specification | |||
| only defines the expected behavior of Collections with respect to GET | only defines the expected behavior of Collections with respect to GET | |||
| and POST, this does not imply that PUT, DELETE, PROPPATCH and others | and POST, this does not imply that PUT, DELETE, PROPPATCH and others | |||
| are forbidden on Collection resources - only that this specification | are forbidden on Collection Resources - only that this specification | |||
| does not define what the server's response would be to those methods. | does not define what the server's response would be to those methods. | |||
| Similarly while some HTTP status codes are mentioned explicitly, | Similarly while some HTTP status codes are mentioned explicitly, | |||
| clients ought to be prepared to handle any status code from a server. | clients ought to be prepared to handle any status code from a server. | |||
| Servers can choose to accept, reject, delay, moderate, censor, | Servers can choose to accept, reject, delay, moderate, censor, | |||
| reformat, translate, relocate or recategorize the content submitted | reformat, translate, relocate or re-categorize the content submitted | |||
| to them. Only some of these choices are immediately relayed back to | to them. Only some of these choices are immediately relayed back to | |||
| the client in responses to client requests; other choices may only | the client in responses to client requests; other choices may only | |||
| become apparent later, in the feed or published entries. The same | become apparent later, in the feed or published entries. The same | |||
| series of requests to two different publishing sites can result in a | series of requests to two different publishing sites can result in a | |||
| different series of HTTP responses, different resulting feeds or | different series of HTTP responses, different resulting feeds or | |||
| different entry contents. | different entry contents. | |||
| As a result, client software has to be written flexibly to accept | As a result, client software has to be written flexibly to accept | |||
| what the server decides are the results of its submissions. Any | what the server decides are the results of its submissions. Any | |||
| server response or server content modification not explicitly | server response or server content modification not explicitly | |||
| forbidden by this specification or HTTP ([RFC2616]) is therefore | forbidden by this specification or HTTP [RFC2616] is therefore | |||
| allowed. | allowed. | |||
| 5. Protocol Operations | 5. Protocol Operations | |||
| While specific HTTP status codes are shown in the interaction | ||||
| diagrams below, an APP client should be prepared to handle any status | ||||
| code. For example, a PUT to a Member URI could result in the return | ||||
| of a "204 No Content" status code, which still indicates success. | ||||
| 5.1. Retrieving a Service Document | 5.1. Retrieving a Service Document | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) GET to Service Document | | | 1.) GET to Service Document URI | | |||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) Service Document | | | 2.) 200 Ok | | |||
| | Service Document | | ||||
| |<------------------------------------------| | |<------------------------------------------| | |||
| | | | | | | |||
| 1. The client sends a GET request using the URI of the Service | 1. The client sends a GET request to the URI of the Service | |||
| Document. | Document. | |||
| 2. The server responds with the document enumerating the IRIs of a | 2. The server responds with a Service Document enumerating the IRIs | |||
| group of Collections and the capabilities of those Collections | of a group of Collections and the capabilities of those | |||
| supported by the server. The content of this document can vary | Collections supported by the server. The content of this | |||
| based on aspects of the client request, including, but not | document can vary based on aspects of the client request, | |||
| limited to, authentication credentials. | including, but not limited to, authentication credentials. | |||
| 5.2. Listing Collection Members | 5.2. Listing Collection Members | |||
| To list the members of a Collection, the client sends a GET request | To list the members of a Collection, the client sends a GET request | |||
| to the URI of a Collection. An Atom Feed Document is returned whose | to the URI of a Collection. An Atom Feed Document is returned whose | |||
| Entries contain the IRIs of Member Resources. The returned Feed may | Entries contain the IRIs of Member Resources. The returned Feed may | |||
| describe all, or only a partial list of the Members in a Collection | describe all, or only a partial list, of the Members in a Collection | |||
| (see Section 10). | (see Section 10). | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) GET to Collection URI | | | 1.) GET to Collection URI | | |||
| |------------------------------->| | |------------------------------->| | |||
| | | | | | | |||
| | 2.) Atom Feed Doc | | | 2.) 200 Ok | | |||
| | Atom Feed | | ||||
| |<-------------------------------| | |<-------------------------------| | |||
| | | | | | | |||
| 1. The client sends a GET request to the URI of the Collection. | 1. The client sends a GET request to the URI of the Collection. | |||
| 2. The server responds with an Atom Feed Document containing the | 2. The server responds with an Atom Feed Document containing the | |||
| IRIs of the Collection members. | IRIs of the Collection Members. | |||
| 5.3. Creating a Resource | 5.3. Creating a Resource | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) POST to URI of Collection | | | 1.) POST to Collection URI | | |||
| | Member Representation | | ||||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) 201 Created | | | 2.) 201 Created | | |||
| | Location: Member Entry URI | | | Location: Member Entry URI | | |||
| |<------------------------------------------| | |<------------------------------------------| | |||
| | | | | | | |||
| 1. The client POSTs a representation of the Member to the URI of the | 1. The client POSTs a representation of the Member to the URI of the | |||
| Collection. | Collection. | |||
| 2. If the Member Resource was created successfully, the server | 2. If the Member Resource was created successfully, the server | |||
| responds with a status code of 201 and a Location: header that | responds with a status code of 201 and a Location: header that | |||
| contains the IRI of the newly created Entry Resource. Media | contains the IRI of the newly created Entry Resource. Media | |||
| Resources could have also been created and their IRIs can be | Resources could have also been created and their IRIs can be | |||
| found through the Entry Resource. See Section 9.6 for more | found through the Entry Resource. See Section 9.6 for more | |||
| details. | details. | |||
| 5.4. Editing a Resource | 5.4. Editing a Resource | |||
| Once a resource has been created and its Member URI is known, that | Once a Resource has been created and its Member URI is known, that | |||
| URI can be used to retrieve, update, and delete the resource. | URI can be used to retrieve, edit, and delete the Resource. | |||
| Section 11 describes extensions to the Atom Syndication Format used | Section 11 describes extensions to the Atom Syndication Format used | |||
| in the Atom Protocol for editing purposes. | in the Atom Protocol for editing purposes. | |||
| 5.4.1. Retrieving a Resource | 5.4.1. Retrieving a Resource | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) GET to Member URI | | | 1.) GET to Member URI | | |||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) Member Representation | | | 2.) 200 Ok | | |||
| | Member Representation | | ||||
| |<------------------------------------------| | |<------------------------------------------| | |||
| | | | | | | |||
| 1. The client sends a GET request to the URI of a Member Resource to | 1. The client sends a GET request to the URI of a Member Resource to | |||
| retrieve its representation. | retrieve its representation. | |||
| 2. The server responds with the representation of the resource. | 2. The server responds with the representation of the Member | |||
| Resource. | ||||
| 5.4.2. Updating a Resource | 5.4.2. Editing a Resource | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) PUT to Member URI | | | 1.) PUT to Member URI | | |||
| | Member Representation | | ||||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) 200 OK | | | 2.) 200 OK | | |||
| |<------------------------------------------| | |<------------------------------------------| | |||
| 1. The client PUTs an updated representation to the URI of a Member | 1. The client sends a PUT request to store a representation of a | |||
| Resource. | Member Resource. | |||
| 2. If the update is successful the server responds with a status | 2. If the request is successful, the server responds with a status | |||
| code of 200. | code of 200. | |||
| 5.4.3. Deleting a Resource | 5.4.3. Deleting a Resource | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) DELETE to Member URI | | | 1.) DELETE to Member URI | | |||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) 200 OK | | | 2.) 200 OK | | |||
| skipping to change at page 13, line 46 | skipping to change at page 17, line 4 | |||
| code of 200. | code of 200. | |||
| A different approach is taken for deleting Media Resources; see | A different approach is taken for deleting Media Resources; see | |||
| Section 9.6 for details. | Section 9.6 for details. | |||
| 5.5. Use of HTTP Response codes | 5.5. Use of HTTP Response codes | |||
| The Atom Protocol uses the response status codes defined in HTTP to | The Atom Protocol uses the response status codes defined in HTTP to | |||
| indicate the success or failure of an operation. Consult the HTTP | indicate the success or failure of an operation. Consult the HTTP | |||
| specification [RFC2616] for detailed definitions of each status code. | specification [RFC2616] for detailed definitions of each status code. | |||
| Implementers are asked to note that according to the HTTP | Implementers are asked to note that according to the HTTP | |||
| specification, HTTP 4xx and 5xx response entities SHOULD include a | specification, HTTP 4xx and 5xx response entities SHOULD include a | |||
| human-readable explanation of the error. | human-readable explanation of the error. | |||
| 6. Atom Publishing Protocol Documents | 6. Protocol Documents | |||
| 6.1. Document Types | 6.1. Document Types | |||
| This specification defines two kinds of Documents - Category | This specification defines two kinds of documents - Category | |||
| Documents and Service Documents. | Documents and Service Documents. | |||
| A Category Document (Section 7) contains lists of categories | A Category Document (Section 7) contains lists of categories | |||
| specified using the "atom:category" element from the Atom Syndication | specified using the "atom:category" element from the Atom Syndication | |||
| Format. | Format (see Section 4.2.2 of [RFC4287]). | |||
| A Service Document (Section 8) groups available Collections into | A Service Document (Section 8) groups available Collections into | |||
| Workspaces. | Workspaces. | |||
| The namespace name [W3C.REC-xml-names] for either kind of document | The namespace name [REC-xml-names] for either kind of document is: | |||
| is: | ||||
| http://purl.org/atom/app# | http://purl.org/atom/app# | |||
| [[anchor8: The namespace name needs to be updated with the final URI | [[anchor9: The namespace name 'http://purl.org/atom/app#' needs to be | |||
| upon publication]] | updated throughout the document with the final URI upon publication]] | |||
| Atom Publishing Protocol XML Documents MUST be "namespace-well- | ||||
| formed" as specified in Section 7 of [REC-xml-names]. | ||||
| This specification uses the prefix "app:" for the namespace name. | This specification uses the prefix "app:" for the namespace name. | |||
| The prefix "atom:" is used for "http://www.w3.org/2005/Atom", the | The prefix "atom:" is used for "http://www.w3.org/2005/Atom", the | |||
| namespace name of the Atom Syndication Format [RFC4287]. These | namespace name of the Atom Syndication Format [RFC4287]. These | |||
| namespace prefixes are not semantically significant. | namespace prefixes are not semantically significant. | |||
| Atom Publishing Protocol Documents MUST be well-formed XML. This | This specification does not define any DTDs for Atom Protocol | |||
| specification does not define any DTDs for Atom Protocol formats, and | formats, and hence does not require them to be "valid" in the sense | |||
| hence does not require them to be "valid" in the sense used by XML. | used by [REC-xml]. | |||
| 6.2. Document Extensibility | 6.2. Document Extensibility | |||
| Unrecognized markup in an Atom Publishing Protocol document is | Unrecognized markup in an Atom Publishing Protocol document is | |||
| considered "foreign markup" as defined in Section 6 of [RFC4287]. | considered "foreign markup" as defined in Section 6 of the Atom | |||
| Such foreign markup can be used anywhere within a Category or Service | Syndication Format [RFC4287]. Foreign markup can be used anywhere | |||
| Document unless it is explicitly forbidden. Processors that | within a Category or Service Document unless it is explicitly | |||
| encounter foreign markup MUST NOT stop processing and MUST NOT signal | forbidden. Processors that encounter foreign markup MUST NOT stop | |||
| an error. Clients SHOULD preserve foreign markup when transmitting | processing and MUST NOT signal an error. Clients SHOULD preserve | |||
| such documents. | foreign markup when transmitting such documents. | |||
| The namespace name "http://purl.org/atom/app#" is reserved for | The namespace name "http://purl.org/atom/app#" is reserved for | |||
| forward compatible revisions of the Category and Service Document | forward compatible revisions of the Category and Service Document | |||
| types - this does not exclude the addition of elements and attributes | types - this does not exclude the addition of elements and attributes | |||
| that might not be recognized by processors conformant to this | that might not be recognized by processors conformant to this | |||
| specification. Such unrecognized markup from the | specification. Such unrecognized markup from the | |||
| "http://purl.org/atom/app#" namespace MUST be treated as foreign | "http://purl.org/atom/app#" namespace MUST be treated as foreign | |||
| markup. | markup. | |||
| [[anchor9: The namespace name needs to be updated with the final URI | ||||
| upon publication]] | ||||
| 7. Category Documents | 7. Category Documents | |||
| Category Documents contain lists of categories described using the | Category Documents contain lists of categories described using the | |||
| "atom:category" element from the Atom Syndication Format [RFC4287]. | "atom:category" element from the Atom Syndication Format [RFC4287]. | |||
| Categories can also appear in Service Documents, where they describe | Categories can also appear in Service Documents, where they indicate | |||
| the categories allowed in a Collection (see Section 8.3.5). | the categories allowed in a Collection (see Section 8.3.6). | |||
| Category Documents are identified with the "application/atomcat+xml" | Category Documents are identified with the "application/atomcat+xml" | |||
| media type (see Section 16). | media type (see Section 16.1). | |||
| 7.1. Example | 7.1. Example | |||
| <?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
| <app:categories | <app:categories | |||
| xmlns:app="http://purl.org/atom/app#" | xmlns:app="http://purl.org/atom/app#" | |||
| xmlns="http://www.w3.org/2005/Atom" | xmlns:atom="http://www.w3.org/2005/Atom" | |||
| fixed="yes" scheme="http://example.com/cats/big3"> | fixed="yes" scheme="http://example.com/cats/big3"> | |||
| <category term="animal" /> | <atom:category term="animal" /> | |||
| <category term="vegetable" /> | <atom:category term="vegetable" /> | |||
| <category term="mineral" /> | <atom:category term="mineral" /> | |||
| </app:categories> | </app:categories> | |||
| This Category Document contains three categories, with the terms | This Category Document contains atom:category elements, with the | |||
| "animal", "vegetable", and "mineral". None of the categories use the | terms 'animal', 'vegetable', and 'mineral'. None of the categories | |||
| 'label' attribute defined in [RFC4287]. They all inherit the | use the "label" attribute defined in [RFC4287]. They all inherit the | |||
| "http://example.com/cats/big3" 'scheme' attribute declared on the | "http://example.com/cats/big3" "scheme" attribute declared on the | |||
| app:categories element. Therefore if the "mineral" category were to | app:categories element. Therefore if the 'mineral' category were to | |||
| appear in an Atom Entry or Feed Document, it would appear as: | appear in an Atom Entry or Feed Document, it would appear as: | |||
| <category scheme="http://example.com/cats/big3" term="mineral" /> | <atom:category scheme="http://example.com/cats/big3" term="mineral"/> | |||
| 7.2. Element Definitions | 7.2. Element Definitions | |||
| 7.2.1. The "app:categories" element | 7.2.1. The "app:categories" element | |||
| The root of a Category Document is the "app:categories" element. An | The root of a Category Document is the "app:categories" element. An | |||
| app:categories element can contain zero or more "atom:category" | app:categories element can contain zero or more "atom:category" | |||
| elements from the Atom namespace ("http://www.w3.org/2005/Atom"). | elements from the Atom Syndication Format [RFC4287] namespace | |||
| ("http://www.w3.org/2005/Atom"). | ||||
| An app:category child element that has no "scheme" attribute inherits | An atom:category child element that has no "scheme" attribute | |||
| the attribute from its app:categories parent. An app:category child | inherits the attribute from its app:categories parent. An atom: | |||
| element with an existing "scheme" attribute does not inherit the | category child element with an existing "scheme" attribute does not | |||
| "scheme" value of its "app:categories" parent element. | inherit the "scheme" value of its "app:categories" parent element. | |||
| atomCategory = | atomCategory = | |||
| element atom:category { | element atom:category { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute term { text }, | attribute term { text }, | |||
| attribute scheme { atomURI }?, | attribute scheme { atomURI }?, | |||
| attribute label { text }?, | attribute label { text }?, | |||
| undefinedContent | undefinedContent | |||
| } | } | |||
| appInlineCategories = | appInlineCategories = | |||
| element app:categories { | element app:categories { | |||
| attribute fixed { "yes" | "no" }?, | attribute fixed { "yes" | "no" }?, | |||
| attribute scheme { atomURI }?, | attribute scheme { atomURI }?, | |||
| (atomCategory*) | (atomCategory*, | |||
| undefinedContent) | ||||
| } | } | |||
| appOutOfLineCategories = | appOutOfLineCategories = | |||
| element app:categories { | element app:categories { | |||
| attribute href { atomURI }, | attribute href { atomURI }, | |||
| undefinedContent | undefinedContent | |||
| } | } | |||
| appCategories = appInlineCategories | appOutOfLineCategories | appCategories = appInlineCategories | appOutOfLineCategories | |||
| skipping to change at page 18, line 14 | skipping to change at page 22, line 14 | |||
| 8. Service Documents | 8. Service Documents | |||
| For authoring to commence, a client needs to discover the | For authoring to commence, a client needs to discover the | |||
| capabilities and locations of the available Collections. Service | capabilities and locations of the available Collections. Service | |||
| Documents are designed to support this discovery process. | Documents are designed to support this discovery process. | |||
| How Service Documents are discovered is not defined in this | How Service Documents are discovered is not defined in this | |||
| specification. | specification. | |||
| Service Documents are identified with the "application/atomserv+xml" | Service Documents are identified with the "application/atomsvc+xml" | |||
| media type (see Section 16). | media type (see Section 16.2). | |||
| 8.1. Workspaces | 8.1. Workspaces | |||
| A Service Document groups a server's Collections into Workspaces. | A Service Document groups Collections into Workspaces. Operations on | |||
| Operations on Workspaces, such as creation or deletion, are not | Workspaces, such as creation or deletion, are not defined by this | |||
| defined by this specification. In general, this specification | specification. This specification assigns no meaning to Workspaces; | |||
| assigns no meaning to Workspaces; that is, a Workspace does not imply | that is, a Workspace does not imply any specific processing | |||
| any specific processing assumptions. | assumptions. | |||
| There is no requirement that a server support multiple Workspaces. | There is no requirement that a server support multiple Workspaces. | |||
| In addition, a Collection MAY appear in more than one Workspace. | In addition, a Collection MAY appear in more than one Workspace. | |||
| 8.2. Example | 8.2. Example | |||
| <?xml version="1.0" encoding='utf-8'?> | <?xml version="1.0" encoding='utf-8'?> | |||
| <service xmlns="http://purl.org/atom/app#" | <service xmlns="http://purl.org/atom/app#" | |||
| xmlns:atom="http://www.w3.org/2005/Atom"> | xmlns:atom="http://www.w3.org/2005/Atom"> | |||
| <workspace> | <workspace> | |||
| <atom:title>Main Site</atom:title> | <atom:title>Main Site</atom:title> | |||
| <collection | <collection | |||
| href="http://example.org/reilly/main" > | href="http://example.org/blog/main" > | |||
| <atom:title>My Blog Entries</atom:title> | <atom:title>My Blog Entries</atom:title> | |||
| <categories | <categories | |||
| href="http://example.com/cats/forMain.cats" /> | href="http://example.com/cats/forMain.cats" /> | |||
| </collection> | </collection> | |||
| <collection | <collection | |||
| href="http://example.org/reilly/pic" > | href="http://example.org/blog/pic" > | |||
| <atom:title>Pictures</atom:title> | <atom:title>Pictures</atom:title> | |||
| <accept>image/*</accept> | <accept>image/png</accept> | |||
| <accept>image/jpeg</accept> | ||||
| <accept>image/gif</accept> | ||||
| </collection> | </collection> | |||
| </workspace> | </workspace> | |||
| <workspace> | <workspace> | |||
| <atom:title>Side Bar Blog</atom:title> | <atom:title>Sidebar Blog</atom:title> | |||
| <collection | <collection | |||
| href="http://example.org/reilly/list" > | href="http://example.org/sidebar/list" > | |||
| <atom:title>Remaindered Links</atom:title> | <atom:title>Remaindered Links</atom:title> | |||
| <accept>entry</accept> | <accept>application/atom+xml;type=entry</accept> | |||
| <categories fixed="yes"> | <categories fixed="yes"> | |||
| <atom:category | <atom:category | |||
| scheme="http://example.org/extra-cats/" | scheme="http://example.org/extra-cats/" | |||
| term="joke" /> | term="joke" /> | |||
| <atom:category | <atom:category | |||
| scheme="http://example.org/extra-cats/" | scheme="http://example.org/extra-cats/" | |||
| term="serious" /> | term="serious" /> | |||
| </categories> | </categories> | |||
| </collection> | </collection> | |||
| </workspace> | </workspace> | |||
| </service> | </service> | |||
| The Service Document above describes two Workspaces. The first | The Service Document above describes two Workspaces. The first | |||
| Workspace is called "Main Site", and has two Collections called "My | Workspace is called "Main Site", and has two Collections called "My | |||
| Blog Entries" and "Pictures", whose IRIs are | Blog Entries" and "Pictures", whose IRIs are | |||
| "http://example.org/reilly/main" and "http://example.org/reilly/pic" | "http://example.org/blog/main" and "http://example.org/blog/pic" | |||
| respectively. The "Pictures" Workspace includes an "accept" element | respectively. The "Pictures" Collection includes three "accept" | |||
| indicating that a client can post image files to the Collection to | elements indicating the types of image files the client can send to | |||
| create new Media Resources (entries with associated Media Resources | the Collection to create new Media Resources (entries associated with | |||
| are discussed in Section 9.6). | Media Resources are discussed in Section 9.6). | |||
| The second Workspace is called "Side Bar Blog" and has a single | The second Workspace is called "Sidebar Blog" and has a single | |||
| Collection called "Remaindered Links" whose IRI is | Collection called "Remaindered Links" whose IRI is | |||
| "http://example.org/reilly/list". | "http://example.org/sidebar/list". The Collection has an "accept" | |||
| element whose content is "application/atom+xml;type=entry", | ||||
| indicating it will accept Atom Entries from a client. | ||||
| Within each of the two Entry collections, the categories element | Within each of the two Entry Collections, the "categories" element | |||
| provides a list of available categories for Member Entries. In the | provides a list of available categories for Member Entries. In the | |||
| "My Blog Entries" Collection, the list of available categories is | "My Blog Entries" Collection, the list of available categories is | |||
| available through the "href" attribute. The "Side Bar Blog" | available through the "href" attribute. The "Sidebar Blog" | |||
| Collection provides a category list within the Service Document, but | Collection provides a category list within the Service Document, but | |||
| states the list is fixed, signaling a request from the server that | states the list is fixed, signaling a request from the server that | |||
| Entries be POSTed using only those two categories. | Entries be POSTed using only those two categories. | |||
| 8.3. Element Definitions | 8.3. Element Definitions | |||
| 8.3.1. The "app:service" Element | 8.3.1. The "app:service" Element | |||
| The root of a Service Document is the "app:service" element. | The root of a Service Document is the "app:service" element. | |||
| The "app:service" element is the container for service information | The app:service element is the container for service information | |||
| associated with one or more Workspaces. An app:service element MUST | associated with one or more Workspaces. An app:service element MUST | |||
| contain one or more app:workspace elements. | contain one or more app:workspace elements. | |||
| namespace app = "http://purl.org/atom/app#" | namespace app = "http://purl.org/atom/app#" | |||
| start = appService | start = appService | |||
| appService = | appService = | |||
| element app:service { | element app:service { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( appWorkspace+ | ( appWorkspace+ | |||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| 8.3.2. The "app:workspace" Element | 8.3.2. The "app:workspace" Element | |||
| Workspaces are server-defined groups of Collections. The "app: | Workspaces are server-defined groups of Collections. The "app: | |||
| workspace" element contains zero or more app:collection elements | workspace" element contains zero or more app:collection elements | |||
| describing the Collections of resources available for editing. | describing the Collections of Resources available for editing. | |||
| appWorkspace = | appWorkspace = | |||
| element app:workspace { | element app:workspace { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( atomTitle | ( atomTitle | |||
| & appCollection* | & appCollection* | |||
| & extensionSansTitleElement* ) | & extensionSansTitleElement* ) | |||
| } | } | |||
| atomTitle = element atom:title { atomTextConstruct } | atomTitle = element atom:title { atomTextConstruct } | |||
| 8.3.2.1. The "atom:title" Element | 8.3.2.1. The "atom:title" Element | |||
| The app:workspace element MUST contain one "atom:title" element (as | The app:workspace element MUST contain one "atom:title" element (as | |||
| defined in [RFC4287]), giving a human-readable title for the | defined in [RFC4287]), giving a human-readable title for the | |||
| Workspace. | Workspace. | |||
| 8.3.3. The "app:collection" Element | 8.3.3. The "app:collection" Element | |||
| The "app:collection" element describes a Collection. The app: | The "app:collection" element describes a Collection. The app: | |||
| collection element MAY contain one app:accept element and MAY contain | collection Element MUST contain one "atom:title" element. | |||
| any number of app:categories elements. The app:collection element | ||||
| MUST NOT contain more than one app:accept element. | The app:collection element MAY contain any number of app:accept | |||
| elements, indicating the types of representations accepted by the | ||||
| Collection. The order of such elements is not significant. | ||||
| The app:collection element MAY contain any number of app:categories | ||||
| elements. | ||||
| appCollection = | appCollection = | |||
| element app:collection { | element app:collection { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| attribute href { atomURI }, | attribute href { atomURI }, | |||
| ( atomTitle | ( atomTitle | |||
| & appAccept? | & appAccept* | |||
| & appCategories* | & appCategories* | |||
| & extensionSansTitleElement* ) | & extensionSansTitleElement* ) | |||
| } | } | |||
| 8.3.3.1. Usage in Atom Feed Documents | 8.3.3.1. The "href" Attribute | |||
| The app:collection element MAY appear as a child of an atom:feed or | ||||
| atom:source element in an Atom Feed Document. Its content identifies | ||||
| a Collection by which new Entries can be added to appear in the feed. | ||||
| The app:collection element is considered foreign markup as defined in | ||||
| Section 6 of [RFC4287]. | ||||
| 8.3.3.2. The "href" Attribute | ||||
| The app:collection element MUST contain an "href" attribute, whose | The app:collection element MUST contain an "href" attribute, whose | |||
| value gives the IRI of the Collection. | value gives the IRI of the Collection. | |||
| 8.3.3.3. The "atom:title" Element | 8.3.3.2. The "atom:title" Element | |||
| The app:collection Element MUST contain one "atom:title" element (as | The "atom:title" element is defined in [RFC4287], and gives a human- | |||
| defined in [RFC4287]), giving a human-readable title for the | readable title for the Collection. | |||
| Collection. | ||||
| 8.3.4. The "app:accept" Element | 8.3.4. The "app:accept" Element | |||
| The "app:accept" element value specifies a comma-separated list of | The content of an "app:accept" element value is a media-range as | |||
| media-ranges (see [RFC2616]). The list identifies the types of | defined in [RFC2616]. The media range specifies a type of | |||
| representations that can be POSTed to the URI of a Collection. | representation that can be POSTed to a Collection. | |||
| Whitespace around and between media-range values is insignificant and | ||||
| MUST be ignored. | ||||
| The app:accept element is similar to the HTTP Accept request-header | The app:accept element is similar to the HTTP Accept request-header | |||
| [RFC2616] with the exception that app:accept has no notion of | [RFC2616]. Media type parameters are allowed within app:accept, but | |||
| preference. As a result, the value syntax of app:accept does not use | app:accept has no notion of preference - "accept-params" or "q" | |||
| "accept-params" or "q" arguments as specified in [RFC2616], section | arguments, as specified in Section 14.1 of [RFC2616] are not | |||
| 14.1. | significant. | |||
| The order of media-ranges is not significant. For example, the | White space (as defined in [REC-xml]) around the app:accept element's | |||
| following lists are all equivalent: | media-range is insignificant and MUST be ignored. | |||
| <app:accept>image/png,image/*</app:accept> | A value of "application/atom+xml;type=entry" MAY appear in any app: | |||
| <app:accept>image/*, image/png</app:accept> | accept list of media-ranges and indicates that Atom Entry Documents | |||
| <app:accept> image/* </app:accept> | can be POSTed to the Collection. If no app:accept element is | |||
| present, clients SHOULD treat this as equivalent to an app:accept | ||||
| element with the content "application/atom+xml;type=entry". | ||||
| A value of "entry" MAY appear in any list of media-ranges and | If one accept element exists and is empty, clients SHOULD assume that | |||
| indicates that Atom Entry Documents can be POSTed to the Collection. | the Collection does not support the creation of new Entries. | |||
| The value is equivalent to the media type and format parameter | ||||
| "application/atom+xml;type=entry", as defined in Section 12. If the | ||||
| accept element exists but is empty, clients SHOULD assume that the | ||||
| Collection does not support the creation of new Entries. If the | ||||
| accept element is not present, clients SHOULD treat this as | ||||
| equivalent to <app:accept>entry</app:accept>. | ||||
| appAccept = | appAccept = | |||
| element app:accept { | element app:accept { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( appTypeValue? ) | ( text? ) | |||
| } | } | |||
| appTypeValue = ( "entry" | media-type |entry-or-media-type ) | 8.3.5. Usage in Atom Feed Documents | |||
| media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | ||||
| entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | ||||
| 8.3.5. The "app:categories" Element | The app:collection element MAY appear as a child of an atom:feed or | |||
| atom:source element in an Atom Feed Document. Its content identifies | ||||
| a Collection by which new Entries can be added to appear in the feed. | ||||
| When it appears in an atom:feed or atom:source element, the app: | ||||
| collection element is considered foreign markup as defined in Section | ||||
| 6 of [RFC4287]. | ||||
| 8.3.6. The "app:categories" Element | ||||
| The "app:categories" element provides a list of the categories that | The "app:categories" element provides a list of the categories that | |||
| can be applied to the members of a Collection. See Section 7.2.1 for | can be applied to the members of a Collection. See Section 7.2.1 for | |||
| the detailed definition of app:categories. | the detailed definition of app:categories. | |||
| The server MAY reject attempts to create or update members whose | The server MAY reject attempts to create or store members whose | |||
| categories are not listed in the Collection Document. Collections | categories are not present in it's categories list. Collections that | |||
| that indicate the category set is open SHOULD NOT reject otherwise | indicate the category set is open SHOULD NOT reject otherwise | |||
| acceptable members whose categories are not listed by the Collection. | acceptable members whose categories are not in its categories list. | |||
| The absence of an "app:categories" element means that the category | The absence of an "app:categories" element means that the category | |||
| handling of the Collection is unspecified. | handling of the Collection is unspecified. A "fixed" category list | |||
| that contains zero categories indicates the Collection does not | ||||
| accept category data. | ||||
| 9. Creating and Editing Resources | 9. Creating and Editing Resources | |||
| 9.1. Member URIs | 9.1. Member URIs | |||
| The Member URI allows clients to retrieve, update and delete a Member | The Member URI allows clients to retrieve, edit and delete a Member | |||
| Resource using HTTP's GET, PUT and DELETE methods. As their name | Resource using HTTP's GET, PUT and DELETE methods. Entry Resources | |||
| indicates, Entry Resources have Atom Entry documents as | are represented as Atom Entry documents. | |||
| representations. | ||||
| Member URIs appear in two places. They are returned in a Location | Member URIs appear in two places. They are returned in a Location | |||
| header after successful resource creation using POST, as described in | header after successful Resource creation using POST, as described in | |||
| Section 9.2 below. They can also appear in a Collection feed's | Section 9.2 below. They can also appear in a Collection Feed's | |||
| entries, as atom:link elements with a link relation of "edit". | entries, as atom:link elements with a link relation of "edit". | |||
| A Member Entry SHOULD contain such an atom:link element with a link | A Member Entry SHOULD contain such an atom:link element with a link | |||
| relation of "edit", which indicates the Member URI. | relation of "edit", which indicates the Member URI. | |||
| 9.2. Creating resources with POST | 9.2. Creating Resources with POST | |||
| To add members to a Collection, clients send POST requests to the URI | To add members to a Collection, clients send POST requests to the URI | |||
| of the Collection. | of the Collection. | |||
| Successful member creation is indicated with a 201 ("Created") | Successful member creation is indicated with a 201 ("Created") | |||
| response code. When the Collection responds with a status code of | response code. When the Collection responds with a status code of | |||
| 201 ("Created"), it SHOULD also return a response body, which MUST be | 201, it SHOULD also return a response body, which MUST be an Atom | |||
| an Atom Entry Document representing the newly-created resource. | Entry Document representing the newly-created Resource. Since the | |||
| Since the server is free to alter the POSTed Entry, for example by | server is free to alter the POSTed Entry, for example by changing the | |||
| changing the content of the "atom:id" element, returning the Entry | content of the atom:id element, returning the Entry can be useful to | |||
| can be useful to the client, enabling it to correlate the client and | the client, enabling it to correlate the client and server views of | |||
| server views of the new Entry. | the new Entry. | |||
| When a Member Resource is created, its Member Entry URI MUST be | When a Member Resource is created, its Member Entry URI MUST be | |||
| returned in a Location header in the Collections's response. | returned in a Location header in the Collection's response. | |||
| If the creation request contained an Atom Entry Document, and the | If the creation request contained an Atom Entry Document, and the | |||
| subsequent response from the server contains a Content-Location | subsequent response from the server contains a Content-Location | |||
| header that matches the Location header character-for-character, then | header that matches the Location header character-for-character, then | |||
| the client is authorized to interpret the response entity as being | the client is authorized to interpret the response entity as being a | |||
| the representation of the newly created Entry. Without a matching | complete representation of the newly created Entry. Without a | |||
| Content-Location header the client MUST NOT assume the returned | matching Content-Location header, the client MUST NOT assume the | |||
| entity is a complete representation of the created resource. | returned entity is a complete representation of the created Resource. | |||
| The request body sent with the POST need not be an Atom Entry. For | The request body sent with the POST need not be an Atom Entry. For | |||
| example, it might be a picture, or a movie. Collections MAY return a | example, it might be a picture, or a movie. Collections MAY return a | |||
| response with a status code of 415 ("Unsupported Media Type") to | response with a status code of 415 ("Unsupported Media Type") to | |||
| indicate that the media-type of the POSTed entity is not allowed or | indicate that the media-type of the POSTed entity is not allowed or | |||
| supported by the Collection. For a discussion of the issues in | supported by the Collection. For a discussion of the issues in | |||
| creating such content, see Section 9.6. | creating such content, see Section 9.6. | |||
| 9.2.1. Example | 9.2.1. Example | |||
| Below, the client sends a POST request containing an Atom Entry | Below, the client sends a POST request containing an Atom Entry | |||
| representation to the URI of the Collection: | representation using the URI of the Collection: | |||
| POST /myblog/entries HTTP/1.1 | POST /edit/ HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| User-Agent: Thingio/1.0 | User-Agent: Thingio/1.0 | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Type: application/atom+xml | Content-Type: application/atom+xml;type=entry | |||
| Content-Length: nnn | Content-Length: nnn | |||
| Slug: First Post | Slug: First Post | |||
| <?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>Atom-Powered Robots Run Amok</title> | <title>Atom-Powered Robots Run Amok</title> | |||
| <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> | |||
| <author><name>John Doe</name></author> | <author><name>John Doe</name></author> | |||
| <content>Some text.</content> | <content>Some text.</content> | |||
| </entry> | </entry> | |||
| The server signals a successful creation with a status code of 201. | The server signals a successful creation with a status code of 201. | |||
| The response includes a Location: header indicating the Member Entry | The response includes a Location: header indicating the Member Entry | |||
| URI of the Atom Entry, and a representation of that Entry in the body | URI of the Atom Entry, and a representation of that Entry in the body | |||
| of the response. | of the response. | |||
| HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
| Date: Fri, 7 Oct 2005 17:17:11 GMT | Date: Fri, 7 Oct 2005 17:17:11 GMT | |||
| Content-Length: nnn | Content-Length: nnn | |||
| Content-Type: application/atom+xml; charset="utf-8" | Content-Type: application/atom+xml;type=entry;charset="utf-8" | |||
| Location: http://example.org/edit/first-post.atom | Location: http://example.org/edit/first-post.atom | |||
| ETag: "c180de84f991g8" | ||||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>Atom-Powered Robots Run Amok</title> | <title>Atom-Powered Robots Run Amok</title> | |||
| <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> | |||
| <author><name>John Doe</name></author> | <author><name>John Doe</name></author> | |||
| <content>Some text.</content> | <content>Some text.</content> | |||
| <link rel="edit" | <link rel="edit" | |||
| href="http://example.org/edit/first-post.atom"/> | href="http://example.org/edit/first-post.atom"/> | |||
| </entry> | </entry> | |||
| The Entry created and returned by the Collection might not match the | The Entry created and returned by the Collection might not match the | |||
| Entry POSTed by the client. A server MAY change the values of | Entry POSTed by the client. A server MAY change the values of | |||
| various elements in the Entry, such as the atom:id, atom:updated and | various elements in the Entry, such as the atom:id, atom:updated and | |||
| atom:author values, and MAY choose to remove or add other elements | atom:author values, and MAY choose to remove or add other elements | |||
| and attributes, or change element content and attribute values. | and attributes, or change element content and attribute values. | |||
| 9.3. Updating Resources with PUT | 9.3. Editing Resources with PUT | |||
| To update a Member Resource, clients send PUT requests to its Member | To edit a Member Resource, clients send PUT requests to its Member | |||
| URI, as specified in [RFC2616]. | URI, as specified in [RFC2616]. | |||
| To avoid unintentional loss of data when editing Member Entries or | To avoid unintentional loss of data when editing Member Entries or | |||
| Media Link Entries, Atom Protocol clients SHOULD preserve all | Media Link Entries, Atom Protocol clients SHOULD preserve all | |||
| metadata that has not been intentionally modified, including unknown | metadata that has not been intentionally modified, including unknown | |||
| foreign markup as defined in Section 6 of [RFC4287]. | foreign markup as defined in Section 6 of [RFC4287]. | |||
| 9.4. Deleting Resources with DELETE | 9.4. Deleting Resources with DELETE | |||
| To delete a Member Resource, clients send DELETE requests to its | To delete a Member Resource, clients send a DELETE request to its | |||
| Member URI, as specified in [RFC2616]. For a Media Resource, the | Member URI, as specified in [RFC2616]. The deletion of a Media Link | |||
| deletion of its Media Link Entry SHOULD result in the deletion of the | Entry SHOULD result in the deletion of the corresponding Media | |||
| Media Resource. | Resource. | |||
| 9.5. Caching and entity tags | 9.5. Caching and entity tags | |||
| Implementers are advised to pay attention to cache controls, and to | Implementers are advised to pay attention to cache controls, and to | |||
| make use of the mechanisms available in HTTP to make editing resource | make use of the mechanisms available in HTTP when editing Resources, | |||
| easier, in particular entity-tags as outlined in | in particular entity-tags as outlined in [NOTE-detect-lost-update]. | |||
| [W3C.NOTE-detect-lost-update-19990510]. Clients are not assured to | Clients are not assured to receive the most recent representations of | |||
| receive the most recent representations of Collection Members using | Collection Members using GET if the server is authorizing | |||
| GET if the server is authorizing intermediaries to cache them. | intermediaries to cache them. | |||
| 9.5.1. Example | 9.5.1. Example | |||
| Below, the client creates a Member Entry using POST: | Below, the client creates a Member Entry using POST: | |||
| POST /myblog/entries HTTP/1.1 | POST /myblog/entries HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Type: application/atom+xml;type=entry | Content-Type: application/atom+xml;type=entry | |||
| Content-Length: nnn | Content-Length: nnn | |||
| skipping to change at page 27, line 5 | skipping to change at page 31, line 5 | |||
| <?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>Atom-Powered Robots Run Amok</title> | <title>Atom-Powered Robots Run Amok</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2007-02-123T17:09:02Z</updated> | <updated>2007-02-123T17:09:02Z</updated> | |||
| <author><name>Captain Lansing</name></author> | <author><name>Captain Lansing</name></author> | |||
| <content>It's something moving... solid metal</content> | <content>It's something moving... solid metal</content> | |||
| </entry> | </entry> | |||
| The server signals a successful creation with a status code of 201, | The server signals a successful creation with a status code of 201, | |||
| and returns an ETag header in the response. Because in this case the | and returns an ETag header in the response. Because, in this case, | |||
| server returned a Content-Location and Location header with the same | the server returned a Content-Location and Location header with the | |||
| value, the returned Entry representation can be understood to be | same value, the returned Entry representation can be understood to be | |||
| complete (see Section 9.2) and thus the ETag entity value can be also | a complete representation of the newly created Entry (see | |||
| be used. | Section 9.2). | |||
| HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
| Date: Fri, 23 Feb 2007 21:17:11 GMT | Date: Fri, 23 Feb 2007 21:17:11 GMT | |||
| Content-Length: nnn | Content-Length: nnn | |||
| Content-Type: application/atom+xml;type=entry | Content-Type: application/atom+xml;type=entry | |||
| Location: http://example.org/edit/first-post.atom | Location: http://example.org/edit/first-post.atom | |||
| Content-Location: http://example.org/edit/first-post.atom | Content-Location: http://example.org/edit/first-post.atom | |||
| ETag: "e180ee84f0671b1" | ETag: "e180ee84f0671b1" | |||
| <?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>Atom-Powered Robots Run Amok</title> | <title>Atom-Powered Robots Run Amok</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2007-02-123T17:09:02Z</updated> | <updated>2007-02-123T17:09:02Z</updated> | |||
| <author><name>Captain Lansing</name></author> | <author><name>Captain Lansing</name></author> | |||
| <content>It's something moving... solid metal</content> | <content>It's something moving... solid metal</content> | |||
| </entry> | </entry> | |||
| The client can if it wishes use the returned ETag value to later | The client can, if it wishes, use the returned ETag value to later | |||
| construct a "Conditional GET" as defined in [RFC2616]. In this case, | construct a "Conditional GET" as defined in [RFC2616]. In this case, | |||
| prior to editing the client sends the ETag value for the Member using | prior to editing, the client sends the ETag value for the Member | |||
| the If-None-Match: header. | using the If-None-Match: header. | |||
| GET /edit/first-post.atom HTTP/1.1 | GET /edit/first-post.atom HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| If-None-Match: "e180ee84f0671b1" | If-None-Match: "e180ee84f0671b1" | |||
| If the Entry has not been modified, the server (or an intermediary | If the Entry has not been modified, the response will be a status | |||
| cache) can return a status code of 304 (Not Modified). This allows | code of 304 (Not Modified). This allows the client to determine it | |||
| the client to determine it still has the most recent representation | still has the most recent representation of the Entry at the time of | |||
| of the Entry at the time of editing. | editing. | |||
| HTTP/1.1 304 Not Modified | HTTP/1.1 304 Not Modified | |||
| Date: Sat, 24 Feb 2007 13:17:11 GMT | Date: Sat, 24 Feb 2007 13:17:11 GMT | |||
| ETag: "e180ee84f0671b1" | ||||
| After editing, the client can PUT the updated Entry and send the ETag | After editing, the client can PUT the Entry and send the ETag entity | |||
| entity value in an If-Match header, informing the server to accept | value in an If-Match header, informing the server to accept the entry | |||
| the entry on the condition the entity value sent still matches the | on the condition the entity value sent still matches the server's. | |||
| server's. | ||||
| PUT /edit/first-post.atom HTTP/1.1 | PUT /edit/first-post.atom HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Type: application/atom+xml;type=entry | Content-Type: application/atom+xml;type=entry | |||
| Content-Length: nnn | Content-Length: nnn | |||
| If-Match: "e180ee84f0671b1" | If-Match: "e180ee84f0671b1" | |||
| <?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>Atom-Powered Robots Run Amok</title> | <title>Atom-Powered Robots Run Amok</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2007-02-24T16:34:06Z</updated> | <updated>2007-02-24T16:34:06Z</updated> | |||
| <author><name>Captain Lansing</name></author> | <author><name>Captain Lansing</name></author> | |||
| <content>Update: it's a hoax!</content> | <content>Update: it's a hoax!</content> | |||
| </entry> | </entry> | |||
| The server however has since received a more recent update than the | The server however has since received a more recent copy than the | |||
| client's, and responds with a status code of 412 (Precondition | client's, and responds with a status code of 412 (Precondition | |||
| Failed). | Failed). | |||
| HTTP/1.1 412 Precondition Failed | HTTP/1.1 412 Precondition Failed | |||
| Date: Sat, 24 Feb 2007 16:34:11 GMT | Date: Sat, 24 Feb 2007 16:34:11 GMT | |||
| ETag: "r34rrt84f0671b22" | ||||
| This informs the client that the server has a more recent version of | This informs the client that the server has a more recent version of | |||
| the Entry and will not allow the update. | the Entry and will not allow the sent entity to be stored. | |||
| 9.6. Media Resources and Media Link Entries | 9.6. Media Resources and Media Link Entries | |||
| A client can POST a media type other than application/atom+xml to a | A client can POST Media Resources as well as Entry Resources to a | |||
| Collection. Such a request always creates two new resources - one | Collection. If a server accepts such a request, then it MUST create | |||
| that corresponds to the entity sent in the request, called the Media | two new Resources - one that corresponds to the entity sent in the | |||
| Resource, and an associated Member Entry, called the Media Link | request, called the Media Resource, and an associated Member Entry, | |||
| Entry. Media Link Entries are represented as Atom Entries and appear | called the Media Link Entry. Media Link Entries are represented as | |||
| in the Collection. | Atom Entries, and appear in the Collection. | |||
| The Media Link Entry contains the metadata and IRI of the (perhaps | The Media Link Entry contains the metadata and IRI of the (perhaps | |||
| non-textual) Media Resource. The Media Link Entry thus makes the | non-textual) Media Resource. The Media Link Entry thus makes the | |||
| metadata about the Media Resource separately available for retrieval | metadata about the Media Resource separately available for retrieval | |||
| and update. | and alteration. | |||
| The server can signal the media types it will accept using the | The server can signal the media types it will accept using the app: | |||
| "accept" element in the Service Document as specified in | accept element in the Service Document, as specified in | |||
| Section 8.3.4. | Section 8.3.4. | |||
| Successful responses to creation requests MUST include the URI of the | Successful responses to creation requests MUST include the URI of the | |||
| Media Link Entry in the Location header. The Media Link Entry SHOULD | Media Link Entry in the Location header. The Media Link Entry SHOULD | |||
| contain an atom:link element with a link relation of "edit-media" | contain an atom:link element with a link relation of "edit-media" | |||
| that contains the Media Resource IRI. The Media Link Entry MUST have | that contains the Media Resource IRI. The Media Link Entry MUST have | |||
| an "atom:content" element with a "src" attribute. The value of the | an atom:content element with a "src" attribute. The value of the | |||
| "src" attribute is an IRI for the newly created Media Resource. It | "src" attribute is an IRI for the newly created Media Resource. It | |||
| is OPTIONAL that the IRI of the "src" attribute on the atom:content | is OPTIONAL that the IRI of the "src" attribute on the atom:content | |||
| element be the same as the Media Resource IRI. For example, the | element be the same as the Media Resource IRI. For example, the | |||
| "src" attribute value might instead be a link into a static cache or | "src" attribute value might instead be a link into a static cache or | |||
| content distribution network and not the Media Resource IRI. | content distribution network and not the Media Resource IRI. | |||
| Implementers are asked to note that according to the requirements of | Implementers are asked to note that [RFC4287] specifies that Atom | |||
| [RFC4287], Entries, and thus Media Link Entries, MUST contain an | Entries MUST contain an atom:summary element. Thus, upon successful | |||
| atom:summary element. Upon successful creation of a Media Link | creation of a Media Link Entry, a server MAY choose to populate the | |||
| Entry, a server MAY choose to populate the atom:summary element (as | atom:summary element (as well as any other required elements such as | |||
| well as any other required elements such as atom:id, atom:author and | atom:id, atom:author and atom:title) with content derived from the | |||
| atom:title) with content derived from the POSTed entity or from any | POSTed entity or from any other source. A server might not allow a | |||
| other source. A server might not allow a client to modify the server | client to modify the server selected values for these elements. | |||
| selected values for these elements. | ||||
| For resource creation this specification only defines cases where the | For Resource creation this specification only defines cases where the | |||
| POST body has an Atom Entry entity declared as an Atom media type | POST body has an Atom Entry entity declared as an Atom media type | |||
| ("application/atom+xml"), or a non-Atom entity declared as a non-Atom | ("application/atom+xml"), or a non-Atom entity declared as a non-Atom | |||
| media type. It does not specify any request semantics or server | media type. When a client is POSTing an Atom Entry to a collection, | |||
| behavior in the case where the POSTed media-type is "application/ | it may use a media-type of either "application/atom+xml" or | |||
| atom+xml" but the body is something other than an Atom Entry. In | "application/atom +xml;type=entry". This specification does not | |||
| particular, what happens on POSTing an Atom Feed Document to a | specify any request semantics or server behavior in the case where | |||
| Collection using the "application/atom+xml" media type is undefined. | the POSTed media-type is "application/atom+xml" but the body is | |||
| something other than an Atom Entry. In particular, what happens on | ||||
| POSTing an Atom Feed Document to a Collection using the "application/ | ||||
| atom+xml" media type is undefined. | ||||
| The Atom Protocol does not specify a means to create multiple | The Atom Protocol does not specify a means to create multiple | |||
| representations of the same resource (for example a PNG and a JPG of | representations of the same Resource (for example a PNG and a JPG of | |||
| the same image) on creation or update. | the same image) either on creation or editing. | |||
| 9.6.1. Examples | 9.6.1. Examples | |||
| Below, the client sends a POST request containing a PNG image to the | Below, the client sends a POST request containing a PNG image to the | |||
| URI of a Collection that accepts PNG images: | URI of a Collection that accepts PNG images: | |||
| POST /media/ HTTP/1.1 | POST /edit/ HTTP/1.1 | |||
| Host: example.org | Host: media.example.org | |||
| Content-Type: image/png | Content-Type: image/png | |||
| Slug: The Beach | Slug: The Beach | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Length: nnn | Content-Length: nnn | |||
| ...binary data... | ...binary data... | |||
| The server signals a successful creation with a status code of 201. | The server signals a successful creation with a status code of 201. | |||
| The response includes a Location header indicating the Member URI of | The response includes a Location header indicating the Member URI of | |||
| the Media Link Entry and a representation of that entry in the body | the Media Link Entry and a representation of that entry in the body | |||
| of the response. The Media Link Entry includes a content element | of the response. The Media Link Entry includes a content element | |||
| with a src attribute. It also contains a link with a link relation | with a src attribute. It also contains a link with a link relation | |||
| of "edit-media", specifying the IRI to be used for modifying the | of "edit-media", specifying the IRI to be used for modifying the | |||
| Media Resource. | Media Resource. | |||
| HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
| Date: Fri, 7 Oct 2005 17:17:11 GMT | Date: Fri, 7 Oct 2005 17:17:11 GMT | |||
| Content-Length: nnn | Content-Length: nnn | |||
| Content-Type: application/atom+xml; charset="utf-8" | Content-Type: application/atom+xml;type=entry;charset="utf-8" | |||
| Location: http://example.org/media/edit/the_beach.atom | Location: http://example.org/media/edit/the_beach.atom | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>The Beach</title> | <title>The Beach</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2005-10-07T17:17:08Z</updated> | <updated>2005-10-07T17:17:08Z</updated> | |||
| <author><name>Daffy</name></author> | <author><name>Daffy</name></author> | |||
| <summary type="text" /> | <summary type="text" /> | |||
| <content type="image/png" | <content type="image/png" | |||
| src="http://media.example.org/the_beach.png"/> | src="http://media.example.org/the_beach.png"/> | |||
| <link rel="edit-media" | <link rel="edit-media" | |||
| href="http://media.example.org/edit/the_beach.png" /> | href="http://media.example.org/edit/the_beach.png" /> | |||
| <link rel="edit" | <link rel="edit" | |||
| href="http://example.org/media/edit/the_beach.atom" /> | href="http://example.org/media/edit/the_beach.atom" /> | |||
| </entry> | </entry> | |||
| Later, the client PUTS a new PNG to the URI indicated in the Media | Later, the client sends a PUT request containing the new PNG using | |||
| Link Entry's "edit-media" link: | the URI indicated in the Media Link Entry's "edit-media" link: | |||
| PUT /edit/the_beach.png HTTP/1.1 | PUT /edit/the_beach.png HTTP/1.1 | |||
| Host: media.example.org | Host: media.example.org | |||
| Content-Type: image/png | Content-Type: image/png | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Length: nnn | Content-Length: nnn | |||
| ...binary data... | ...binary data... | |||
| The server signals a successful update with a status code of 200. | The server signals a successful edit with a status code of 200. | |||
| HTTP/1.1 200 Ok | HTTP/1.1 200 Ok | |||
| Date: Fri, 8 Oct 2006 17:17:11 GMT | Date: Fri, 8 Oct 2006 17:17:11 GMT | |||
| Content-Length: nnn | ||||
| The client can update the metadata for the picture. First GET the | The client can edit the metadata for the picture. First GET the | |||
| Media Link Entry: | Media Link Entry: | |||
| GET /media/edit/the_beach.atom HTTP/1.1 | GET /media/edit/the_beach.atom HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| The Media Link Entry is returned. | The Media Link Entry is returned. | |||
| HTTP/1.1 200 Ok | HTTP/1.1 200 Ok | |||
| Date: Fri, 7 Oct 2005 17:18:11 GMT | Date: Fri, 7 Oct 2005 17:18:11 GMT | |||
| Content-Length: nnn | Content-Length: nnn | |||
| Content-Type: application/atom+xml; charset="utf-8" | Content-Type: application/atom+xml;type=entry;charset="utf-8" | |||
| ETag: "c181bb840673b5" | ||||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>The Beach</title> | <title>The Beach</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2005-10-07T17:17:08Z</updated> | <updated>2005-10-07T17:17:08Z</updated> | |||
| <author><name>Daffy</name></author> | <author><name>Daffy</name></author> | |||
| <summary type="text" /> | <summary type="text" /> | |||
| <content type="image/png" | <content type="image/png" | |||
| src="http://media.example.org/the_beach.png"/> | src="http://media.example.org/the_beach.png"/> | |||
| skipping to change at page 32, line 8 | skipping to change at page 36, line 8 | |||
| <link rel="edit" | <link rel="edit" | |||
| href="http://example.org/media/edit/the_beach.atom" /> | href="http://example.org/media/edit/the_beach.atom" /> | |||
| </entry> | </entry> | |||
| The metadata can be updated, in this case to add a summary, and then | The metadata can be updated, in this case to add a summary, and then | |||
| PUT back to the server. | PUT back to the server. | |||
| PUT /media/edit/the_beach.atom HTTP/1.1 | PUT /media/edit/the_beach.atom HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Type: application/atom+xml | Content-Type: application/atom+xml;type=entry | |||
| Content-Length: nnn | Content-Length: nnn | |||
| If-Match: "c181bb840673b5" | ||||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>The Beach</title> | <title>The Beach</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| <updated>2005-10-07T17:17:08Z</updated> | <updated>2005-10-07T17:17:08Z</updated> | |||
| <author><name>Daffy</name></author> | <author><name>Daffy</name></author> | |||
| <summary type="text"> | <summary type="text"> | |||
| A nice sunset picture over the water. | A nice sunset picture over the water. | |||
| </summary> | </summary> | |||
| skipping to change at page 32, line 34 | skipping to change at page 36, line 35 | |||
| <link rel="edit" | <link rel="edit" | |||
| href="http://example.org/media/edit/the_beach.atom" /> | href="http://example.org/media/edit/the_beach.atom" /> | |||
| </entry> | </entry> | |||
| The update was successful. | The update was successful. | |||
| HTTP/1.1 200 Ok | HTTP/1.1 200 Ok | |||
| Date: Fri, 7 Oct 2005 17:19:11 GMT | Date: Fri, 7 Oct 2005 17:19:11 GMT | |||
| Content-Length: 0 | Content-Length: 0 | |||
| Multiple media resources can be added to the Collection. | Multiple media Resources can be added to the Collection. | |||
| POST /media/ HTTP/1.1 | POST /edit/ HTTP/1.1 | |||
| Host: example.org | Host: media.example.org | |||
| Content-Type: image/png | Content-Type: image/png | |||
| Slug: The Pier | Slug: The Pier | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Length: nnn | Content-Length: nnn | |||
| ...binary data... | ...binary data... | |||
| The resource is created successfully. | The Resource is created successfully. | |||
| HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
| Date: Fri, 7 Oct 2005 17:17:11 GMT | Date: Fri, 7 Oct 2005 17:17:11 GMT | |||
| Content-Length: nnn | Content-Length: nnn | |||
| Content-Type: application/atom+xml; charset="utf-8" | Content-Type: application/atom+xml;type=entry;charset="utf-8" | |||
| Location: http://example.org/media/edit/the_pier.atom | Location: http://example.org/media/edit/the_pier.atom | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>The Pier</title> | <title>The Pier</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efe6b</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efe6b</id> | |||
| <updated>2005-10-07T17:26:43Z</updated> | <updated>2005-10-07T17:26:43Z</updated> | |||
| <author><name>Daffy</name></author> | <author><name>Daffy</name></author> | |||
| <summary type="text" /> | <summary type="text" /> | |||
| <content type="image/png" | <content type="image/png" | |||
| skipping to change at page 34, line 7 | skipping to change at page 38, line 7 | |||
| href="http://media.example.org/edit/the_pier.png" /> | href="http://media.example.org/edit/the_pier.png" /> | |||
| <link rel="edit" | <link rel="edit" | |||
| href="http://example.org/media/edit/the_pier.atom" /> | href="http://example.org/media/edit/the_pier.atom" /> | |||
| </entry> | </entry> | |||
| The client can now create a new Atom Entry in the blog Entry | The client can now create a new Atom Entry in the blog Entry | |||
| Collection that references the two newly created Media Resources. | Collection that references the two newly created Media Resources. | |||
| POST /blog/ HTTP/1.1 | POST /blog/ HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| Content-Type: application/atom+xml | Content-Type: application/atom+xml;type=entry | |||
| Slug: A day at the beach | Slug: A day at the beach | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Length: nnn | Content-Length: nnn | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>A fun day at the beach</title> | <title>A fun day at the beach</title> | |||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6b</id> | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6b</id> | |||
| <updated>2005-10-07T17:40:02Z</updated> | <updated>2005-10-07T17:40:02Z</updated> | |||
| <author><name>Daffy</name></author> | <author><name>Daffy</name></author> | |||
| <content type="xhtml"> | <content type="xhtml"> | |||
| <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | |||
| <xhtml:p>We had a good day at the beach. | <xhtml:p>We had a good day at the beach. | |||
| <xhtml:img | <xhtml:img alt="the beach" | |||
| src="http://media.example.org/the_beach.png"/> | src="http://media.example.org/the_beach.png"/> | |||
| </xhtml:p> | </xhtml:p> | |||
| <xhtml:p>Later we walked down to the pier. | <xhtml:p>Later we walked down to the pier. | |||
| <xhtml:img | <xhtml:img alt="the pier" | |||
| src="http://media.example.org/the_pier.png"/> | src="http://media.example.org/the_pier.png"/> | |||
| </xhtml:p> | </xhtml:p> | |||
| </xhtml:div> | </xhtml:div> | |||
| </content> | </content> | |||
| </entry> | </entry> | |||
| The resource is created successfully. | The Resource is created successfully. | |||
| HTTP/1.1 200 Ok | HTTP/1.1 200 Ok | |||
| Date: Fri, 7 Oct 2005 17:20:11 GMT | Date: Fri, 7 Oct 2005 17:20:11 GMT | |||
| Content-Length: nnn | Content-Length: nnn | |||
| Content-Type: application/atom+xml; charset="utf-8" | Content-Type: application/atom+xml;type=entry;charset="utf-8" | |||
| Location: http://example.org/blog/atom/a-day-at-the-beach.atom | Location: http://example.org/blog/atom/a-day-at-the-beach.atom | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <entry xmlns="http://www.w3.org/2005/Atom"> | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| <title>A fun day at the beach</title> | <title>A fun day at the beach</title> | |||
| <id>http://example.org/blog/a-day-at-the-beach.xhtml</id> | <id>http://example.org/blog/a-day-at-the-beach.xhtml</id> | |||
| <updated>2005-10-07T17:43:07Z</updated> | <updated>2005-10-07T17:43:07Z</updated> | |||
| <author><name>Daffy</name></author> | <author><name>Daffy</name></author> | |||
| <content type="xhtml"> | <content type="xhtml"> | |||
| <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"> | |||
| <xhtml:p>We had a good day at the beach. | <xhtml:p>We had a good day at the beach. | |||
| <xhtml:img | <xhtml:img alt="the beach" | |||
| src="http://media.example.org/the_beach.png"/> | src="http://media.example.org/the_beach.png"/> | |||
| </xhtml:p> | </xhtml:p> | |||
| <xhtml:p>Later we walked down to the pier. | <xhtml:p>Later we walked down to the pier. | |||
| <xhtml:img | <xhtml:img alt="the pier" | |||
| src="http://media.example.org/the_pier.png"/> | src="http://media.example.org/the_pier.png"/> | |||
| </xhtml:p> | </xhtml:p> | |||
| </xhtml:div> | </xhtml:div> | |||
| </content> | </content> | |||
| <link rel="edit" | <link rel="edit" | |||
| href="http://example.org/blog/edit/a-day-at-the-beach.atom"/> | href="http://example.org/blog/edit/a-day-at-the-beach.atom"/> | |||
| <link rel="alternate" type="application/xhtml+xml" | <link rel="alternate" type="text/html" | |||
| href="http://example.org/blog/a-day-at-the-beach.xhtml"/> | href="http://example.org/blog/a-day-at-the-beach.html"/> | |||
| </entry> | </entry> | |||
| Note that the returned Entry contains a link with a relation of | Note that the returned Entry contains a link with a relation of | |||
| "alternate" that points to the associated XHTML page that was | "alternate" that points to the associated HTML page that was created. | |||
| created. This is not required by this specification, but is included | This is not required by this specification, but is included to show | |||
| to show the kinds of changes a server may make to an Entry. | the kinds of changes a server can make to an Entry. | |||
| 9.7. The Slug: Header | 9.7. The Slug: Header | |||
| Slug is a HTTP entity-header that when accompanying a POST to a | Slug is an HTTP entity-header whose presence in a POST to a | |||
| Collection, constitutes a request by the client that its value be | Collection constitutes a request by the client to use the header's | |||
| used as part of the URI for the to-be-created Member Resource. | value as part of any URIs that would normally used to retrieve the | |||
| to-be-created Entry or Media resources. | ||||
| Servers MAY use the value of the Slug header when creating the Member | Servers MAY use the value of the Slug header when creating the Member | |||
| URI of the newly-created resource, for instance by using some or all | URI of the newly-created Resource, for instance, by using some or all | |||
| of the words in the value for the last URI segment. Servers MAY also | of the words in the value for the last URI segment. Servers MAY also | |||
| use the value when creating the atom:id or as the title of a Media | use the value when creating the atom:id, or as the title of a Media | |||
| Link Entry (see Section 9.6.). | Link Entry (see Section 9.6.). | |||
| Servers MAY choose to ignore the Slug entity-header and MAY alter the | Servers MAY choose to ignore the Slug entity-header. Servers MAY | |||
| value before using it. For instance, a server might filter out some | alter the header value before using it. For instance, a server might | |||
| characters or replace accented letters with non-accented ones, | filter out some characters or replace accented letters with non- | |||
| replace spaces with underscores, change case, and so on. | accented ones, replace spaces with underscores, change case, and so | |||
| on. | ||||
| 9.7.1. Slug: Header syntax | 9.7.1. Slug: Header syntax | |||
| The syntax of this header MUST conform to the augmented BNF grammar | The syntax of this header MUST conform to the augmented BNF grammar | |||
| in section 2.1 of the HTTP/1.1 specification [RFC2616]. The TEXT | in section 2.1 of the HTTP/1.1 specification [RFC2616]. The TEXT | |||
| rule is described in section 2.2 of the same document. | rule is described in section 2.2 of the same document. | |||
| Slug = "Slug" ":" *TEXT | Slug = "Slug" ":" *TEXT | |||
| Clients MAY send non-ASCII characters in the Slug entity-header, | The field-value of the Slug header is a percent-encoded utf-8 Unicode | |||
| which they MUST encode using "encoded-words", as defined in | string that does not contain CR or LF, where CR and LF are defined in | |||
| [RFC2047]. Servers SHOULD treat the slug as [RFC2047] encoded if it | [RFC2616]. All non-ASCII characters in the utf-8 representation MUST | |||
| matches the "encoded-words" production. | be percent-encoded according to the rules in Section 2.1 of | |||
| [RFC3986]. | ||||
| 9.7.2. Example | 9.7.2. Example | |||
| Here is an example of the Slug: header that uses the encoding rules | Here is an example of the Slug: header that uses percent-encoding to | |||
| of [RFC2047]. | represent the Unicode character U+00E8 (LATIN SMALL LETTER E WITH | |||
| GRAVE): | ||||
| POST /myblog/entries HTTP/1.1 | POST /myblog/entries HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| Content-Type: image/png | Content-Type: image/png | |||
| Slug: =?iso-8859-1?q?The_Beach?= | Slug: The Beach at S%C3%A8te | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | Authorization: Basic ZGFmZnk6c2VjZXJldA== | |||
| Content-Length: nnn | Content-Length: nnn | |||
| ...binary data... | ...binary data... | |||
| See Section 9.2.1 for an example of the Slug: header applied to the | See Section 9.2.1 for an example of the Slug: header applied to the | |||
| creation of an Entry Resource. | creation of an Entry Resource. | |||
| 10. Listing Collections | 10. Listing Collections | |||
| Collection Resources MUST provide representations in the form of Atom | Collection Resources MUST provide representations in the form of Atom | |||
| Feed documents whose Entries contain the IRIs of the Members in the | Feed documents whose Entries contain the IRIs of the Members in the | |||
| Collection. No structural distinction is made between Collection | Collection. No distinction is made between Collection Feeds and | |||
| Feeds and other kinds of Feeds - a Feed might act both as a 'public' | other kinds of Feeds - a Feed might act both as a 'public' feed for | |||
| feed for subscription purposes and as a Collection Feed. | subscription purposes and as a Collection Feed. | |||
| Each Entry in the Feed Document SHOULD have an atom:link element with | Each Entry in the Feed Document SHOULD have an atom:link element with | |||
| a relation of "edit" (See Section 11.1). | a relation of "edit" (See Section 11.1). | |||
| The Entries in the returned Atom Feed SHOULD be ordered by their | The Entries in the returned Atom Feed SHOULD be ordered by their | |||
| "atom:updated" property, with the most recently updated Entries | "app:edited" property, with the most recently edited Entries coming | |||
| coming first in the document order. Since the Atom Syndication | first in the document order. The app:edited value is not equivalent | |||
| Format states that the value of atom:updated is altered when the | to the HTTP Last-Modified: header and cannot be used to determine the | |||
| changes to an Entry are something that "the publisher considers | ||||
| significant", clients SHOULD be constructed in consideration of the | ||||
| fact that changes which do not result in alterations to the atom: | ||||
| updated value of an Entry will not affect the position of the Entry | ||||
| in a Collection. The atom:updated value is not equivalent to the | ||||
| HTTP Last-Modified: header and can not be used to determine the | ||||
| freshness of cached responses. | freshness of cached responses. | |||
| Clients MUST NOT assume that an Atom Entry returned in the Feed is a | Clients MUST NOT assume that an Atom Entry returned in the Feed is a | |||
| full representation of an Entry Resource and SHOULD perform a GET on | full representation of an Entry Resource and SHOULD perform a GET on | |||
| the URI of the Member Entry before editing it. See Section 9.5 for a | the URI of the Member Entry before editing it. See Section 9.5 for a | |||
| discussion on the implications of cache control directives when | discussion on the implications of cache control directives when | |||
| obtaining entries. | obtaining entries. | |||
| 10.1. Collection partial lists | 10.1. Collection partial lists | |||
| Collections can contain large numbers of resources. A client such as | Collections can contain large numbers of Resources. A client such as | |||
| a web spider or web browser might be overwhelmed if the response to a | a web spider or web browser might be overwhelmed if the response to a | |||
| GET contained every Entry in a Collection - in turn the server might | GET contained every Entry in a Collection - in turn the server might | |||
| also waste bandwidth and processing time on generating a response | also waste bandwidth and processing time on generating a response | |||
| that cannot be handled. For this reason, servers MAY respond to | that cannot be handled. For this reason, servers MAY respond to | |||
| Collection GET requests with a feed document containing a 'partial | Collection GET requests with a Feed Document containing a partial | |||
| list' of the Collection's members, which also links to the next | list of the Collection's members, and a link to the next partial list | |||
| partial list feed if it exists. The first such partial list returned | feed, if it exists. The first such partial list returned MUST | |||
| MUST contain the most recently updated member resources and MUST have | contain the most recently edited member Resources and MUST have an | |||
| an atom:link with a "next" relation whose "href" value is the URI of | atom:link with a "next" relation whose "href" value is the URI of the | |||
| the next partial list of the Collection. This next partial list will | next partial list of the Collection. This next partial list will | |||
| contain the next most recently updated set of Member Resources (and | contain the next most recently edited set of Member Resources (and an | |||
| an atom:link to the following partial list if it exists). | atom:link to the following partial list if it exists). | |||
| In addition, partial list feeds MAY contain link elements with "rel" | In addition to the "next" relation, partial list feeds MAY contain | |||
| attribute values of "next", "previous", "first" and "last" that can | link elements with "rel" attribute values of "previous", "first", and | |||
| be used to navigate through the complete set of entries in the | "last", that can be used to navigate through the complete set of | |||
| Collection. | entries in the Collection. | |||
| For instance, suppose a client is supplied the URI | For instance, suppose a client is supplied the URI | |||
| "http://example.org/entries/go" of a Collection of Member entries, | "http://example.org/entries/go" of a Collection of Member entries, | |||
| where the server as a matter of policy avoids generating feed | where the server as a matter of policy avoids generating feed | |||
| documents containing more than 10 Entries. The Atom Feed document | documents containing more than 10 Entries. The Atom Feed Document | |||
| for the Collection will then represent the first partial list of a | for the Collection will then represent the first partial list of a | |||
| set of 10 linked feed documents. The "first" relation will reference | set of 10 linked feed documents. The "first" relation will reference | |||
| the initial feed document in the set and the "last" relation | the initial Feed Document in the set and the "last" relation | |||
| references the final Atom Feed Document in the set. Within each | references the final Feed Document in the set. Within each document, | |||
| document, the "next" and "previous" link relations reference the | the "next" and "previous" link relations reference the preceding and | |||
| preceding and subsequent documents. | subsequent documents. | |||
| <feed xmlns="http://www.w3.org/2005/Atom"> | <feed xmlns="http://www.w3.org/2005/Atom"> | |||
| <link rel="first" | <link rel="first" | |||
| href="http://example.org/entries/go" /> | href="http://example.org/entries/go" /> | |||
| <link rel="next" | <link rel="next" | |||
| href="http://example.org/entries/2" /> | href="http://example.org/entries/2" /> | |||
| <link rel="last" | <link rel="last" | |||
| href="http://example.org/entries/10" /> | href="http://example.org/entries/10" /> | |||
| ... | ... | |||
| </feed> | </feed> | |||
| skipping to change at page 38, line 44 | skipping to change at page 42, line 38 | |||
| href="http://example.org/entries/go" /> | href="http://example.org/entries/go" /> | |||
| <link rel="next" | <link rel="next" | |||
| href="http://example.org/entries/3" /> | href="http://example.org/entries/3" /> | |||
| <link rel="last" | <link rel="last" | |||
| href="http://example.org/entries/10" /> | href="http://example.org/entries/10" /> | |||
| ... | ... | |||
| </feed> | </feed> | |||
| 10.2. The "app:edited" Element | 10.2. The "app:edited" Element | |||
| The "app:edited" element is a Date construct as defined by [RFC4287] | The "app:edited" element is a Date construct (as defined by | |||
| whose content indicates the last time an Entry was edited. If the | [RFC4287]), whose content indicates the last time an Entry was | |||
| entry has not been edited yet, the content indicates the time it was | edited. If the entry has not been edited yet, the content indicates | |||
| created. Atom Entry elements in Collection documents SHOULD contain | the time it was created. Atom Entry elements in Collection documents | |||
| one "app:edited" element, and MUST NOT contain more than one. | SHOULD contain one "app:edited" element, and MUST NOT contain more | |||
| than one. | ||||
| appEdited = element app:edited ( atomDateConstruct ) | appEdited = element app:edited ( atomDateConstruct ) | |||
| The server SHOULD change the value of this element every time a | ||||
| Collection Member Resource or an associated Media Resource has been | The server SHOULD change the value of this element every time an | |||
| edited. | Entry Resource or an associated Media Resource has been edited. | |||
| 11. Atom Format Link Relation Extensions | 11. Atom Format Link Relation Extensions | |||
| 11.1. The "edit" Link Relation | 11.1. The "edit" Link Relation | |||
| This specification adds the value "edit" to the Atom Registry of Link | This specification adds the value "edit" to the Atom Registry of Link | |||
| Relations (see section 7.1 of [RFC4287]). The value of "edit" | Relations (see section 7.1 of [RFC4287]). The value of "edit" | |||
| specifies that the value of the href attribute is the IRI of an | specifies that the value of the href attribute is the IRI of an | |||
| editable Member Entry. When appearing within an atom:entry, the href | editable Member Entry. When appearing within an atom:entry, the href | |||
| IRI can be used to retrieve, update and delete the resource | IRI can be used to retrieve, update and delete the Resource | |||
| represented by that Entry. An atom:entry MUST contain no more than | represented by that Entry. An atom:entry MUST NOT contain more than | |||
| one "edit" link relation. | one "edit" link relation. | |||
| 11.2. The "edit-media" Link Relation | 11.2. The "edit-media" Link Relation | |||
| This specification adds the value "edit-media" to the Atom Registry | This specification adds the value "edit-media" to the Atom Registry | |||
| of Link Relations (see section 7.1 of [RFC4287]). When appearing | of Link Relations (see section 7.1 of [RFC4287]). When appearing | |||
| within an atom:entry, the value of the href attribute is an IRI that | within an atom:entry, the value of the href attribute is an IRI that | |||
| can be used to modify a Media Resource associated with that Entry. | can be used to modify a Media Resource associated with that Entry. | |||
| An atom:entry element MAY contain zero or more "edit-media" link | An atom:entry element MAY contain zero or more "edit-media" link | |||
| relations. An atom:entry MUST NOT contain more than one atom:link | relations. An atom:entry MUST NOT contain more than one atom:link | |||
| element with a rel attribute value of "edit-media" that has the same | element with a rel attribute value of "edit-media" that has the same | |||
| "type" and "hreflang" attribute values. All "edit-media" link | "type" and "hreflang" attribute values. All "edit-media" link | |||
| relations in the same Entry reference the same resource. If a client | relations in the same Entry reference the same Resource. If a client | |||
| encounters multiple "edit-media" link relations in an Entry then it | encounters multiple "edit-media" link relations in an Entry then it | |||
| SHOULD choose a link based on the client preferences for "type" and | SHOULD choose a link based on the client preferences for "type" and | |||
| "hreflang". If a client encounters multiple "edit-media" link | "hreflang". If a client encounters multiple "edit-media" link | |||
| relations in an Entry and has no preference based on the "type" and | relations in an Entry and has no preference based on the "type" and | |||
| "hreflang" attributes then the client SHOULD pick the first "edit- | "hreflang" attributes then the client SHOULD pick the first "edit- | |||
| media" link relation in document order. | media" link relation in document order. | |||
| 12. The Atom Format Type Parameter | 12. The Atom Format Type Parameter | |||
| The Atom Syndication Format (RFC 4287) defines the "application/ | The Atom Syndication Format [RFC4287] defines the "application/ | |||
| atom+xml" media type to identify both Atom Feed and Atom Entry | atom+xml" media type to identify both Atom Feed and Atom Entry | |||
| Documents. Implementation experience has demonstrated that Atom Feed | Documents. Implementation experience has demonstrated that Atom Feed | |||
| and Entry Documents can have different processing models and that | and Entry Documents can have different processing models and that | |||
| there are situations where they need to be differentiated. This | there are situations where they need to be differentiated. This | |||
| document defines an optional "type" parameter used to differentiate | document defines an optional "type" parameter used to differentiate | |||
| the two types of Atom documents. | the two types of Atom documents. | |||
| 12.1. The 'type' parameter | 12.1. The 'type' parameter | |||
| This document defines a new "type" parameter for use with the | This document defines a new "type" parameter for use with the | |||
| "application/atom+xml" media type: | "application/atom+xml" media type. The "type" parameter has a value | |||
| of "entry" or "feed". | ||||
| type = "entry" / "feed" | ||||
| Neither the parameter name nor its value are case sensitive. | Neither the parameter name nor its value are case sensitive. | |||
| The value "entry" indicates that the media type identifies an Atom | The value "entry" indicates that the media type identifies an Atom | |||
| Entry Document. The root element of the document MUST be atom:entry. | Entry Document. The root element of the document MUST be atom:entry. | |||
| The value "feed" indicates that the media type identifies an Atom | The value "feed" indicates that the media type identifies an Atom | |||
| Feed Document. The root element of the document MUST be atom:feed. | Feed Document. The root element of the document MUST be atom:feed. | |||
| If not specified, the type is assumed to be unspecified, requiring | If not specified, the type is assumed to be unspecified, requiring | |||
| Atom processors to examine the root element to determine the type of | Atom processors to examine the root element to determine the type of | |||
| Atom document. | Atom document. | |||
| 12.1.1. Conformance | 12.1.1. Conformance | |||
| New specifications MAY require that the type parameter be used to | New specifications MAY require that the "type" parameter be used to | |||
| identify the Atom Document type. Producers of Atom Entry Documents | identify the Atom Document type. Producers of Atom Entry Documents | |||
| SHOULD use the type parameter regardless of whether or not it is | SHOULD use the "type" parameter regardless of whether or not it is | |||
| required. Producers of Atom Feed Documents MAY use the parameter. | required. Producers of Atom Feed Documents MAY use the parameter. | |||
| Atom processors that do not recognize the "type" parameter MUST | Atom processors that do not recognize the "type" parameter MUST | |||
| ignore its value and examine the root element to determine the | ignore its value and examine the root element to determine the | |||
| document type. | document type. | |||
| Atom processors that do recognize the "type" parameter SHOULD detect | Atom processors that do recognize the "type" parameter SHOULD detect | |||
| and report inconsistencies between the parameter's value and the | and report inconsistencies between the parameter's value and the | |||
| actual type of the document's root element. | actual type of the document's root element. | |||
| skipping to change at page 42, line 25 | skipping to change at page 45, line 25 | |||
| pubControl = | pubControl = | |||
| element app:control { | element app:control { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| pubDraft? | pubDraft? | |||
| & extensionElement | & extensionElement | |||
| } | } | |||
| pubDraft = | pubDraft = | |||
| element app:draft { "yes" | "no" } | element app:draft { "yes" | "no" } | |||
| The "app:control" element MAY appear as a child of an atom:entry | The "app:control" element MAY appear as a child of an atom:entry that | |||
| which is being created or updated via the Atom Publishing Protocol. | is being created or updated via the Atom Publishing Protocol. The | |||
| The app:control element MUST appear only once in an Entry. The app: | app:control element MUST appear only once in an Entry. The app: | |||
| control element is considered foreign markup as defined in Section 6 | control element is considered foreign markup as defined in Section 6 | |||
| of [RFC4287]. | of [RFC4287]. | |||
| The app:control element and its child elements MAY be included in | The app:control element and its child elements MAY be included in | |||
| Atom Feed or Entry Documents. | Atom Feed or Entry Documents. | |||
| The app:control element can contain an optional "app:draft" element | The app:control element can contain an optional "app:draft" element | |||
| as defined below, and can contain extension elements as defined in | as defined below, and can contain extension elements as defined in | |||
| Section 6 of [RFC4287]. | Section 6 of [RFC4287]. | |||
| 13.1.1. The "app:draft" Element | 13.1.1. The "app:draft" Element | |||
| The inclusion of the app:draft element represents a request by the | The inclusion of the "app:draft" element represents a request by the | |||
| client to control the visibility of a Member Resource. Server | client to control the visibility of a Member Resource. Server | |||
| support is optional and thus the app:draft element MAY be ignored by | support is optional and thus the app:draft element MAY be ignored by | |||
| the server. | the server. | |||
| The number of app:draft elements in app:control MUST be zero or one. | The number of app:draft elements in app:control MUST be zero or one. | |||
| The content of an app:draft element MUST be one of "yes" or "no". If | The content of an app:draft element MUST be one of "yes" or "no". If | |||
| the element contains "no" this indicates a client request that the | the element contains "no" this indicates a client request that the | |||
| Member Resource be made publicly visible. If the app:draft element | Member Resource be made publicly visible. If the app:draft element | |||
| is not present then servers that support the extension MUST behave as | is not present then servers that support the extension MUST behave as | |||
| though an app:draft element containing "no" was sent. | though an app:draft element containing "no" was sent. | |||
| 14. Securing the Atom Publishing Protocol | 14. Securing the Atom Publishing Protocol | |||
| The Atom Publishing Protocol is based on HTTP. Authentication | The Atom Publishing Protocol is based on HTTP. Authentication | |||
| requirements for HTTP are covered in Section 11 of [RFC2616]. | requirements for HTTP are covered in Section 11 of [RFC2616]. | |||
| The use of authentication mechanisms to prevent POSTing or editing by | The use of authentication mechanisms to prevent POSTing or editing by | |||
| unknown or unauthorized clients is RECOMMENDED but not required. | unknown or unauthorized clients is RECOMMENDED but not required. | |||
| When authentication is not used, clients and servers are vulnerable | When authentication is not used, clients and servers are vulnerable | |||
| to trivial spoofing, denial of service and defacement attacks, | to trivial spoofing, denial of service, and defacement attacks. | |||
| however, in some contexts, this is an acceptable risk. | However, in some contexts, this is an acceptable risk. | |||
| The type of authentication deployed is a local decision made by the | The type of authentication deployed is a local decision made by the | |||
| server operator. Clients are likely to face authentication schemes | server operator. Clients are likely to face authentication schemes | |||
| that vary across server deployments. At a minimum, client and server | that vary across server deployments. At a minimum, client and server | |||
| implementations MUST be capable of being configured to use HTTP Basic | implementations MUST be capable of being configured to use HTTP Basic | |||
| Authentication [RFC2617] in conjunction with a TLS connection as | Authentication [RFC2617] in conjunction with a TLS [RFC2246] | |||
| specified by [RFC2818]. See [RFC4346] for more information on TLS. | connection as defined in [RFC2818] (but note that [RFC2246] has been | |||
| superseded by [RFC4346]). See [RFC4346] for more information on TLS. | ||||
| The choice of authentication mechanism will impact interoperability. | The choice of authentication mechanism will impact interoperability. | |||
| The minimum level of security referenced above (Basic Authentication | The minimum level of security referenced above (Basic Authentication | |||
| with TLS) is considered good practice for Internet applications at | with TLS) is considered good practice for Internet applications at | |||
| the time of publication of this specification and sufficient for | the time of publication of this specification and sufficient for | |||
| establishing a baseline for interoperability. Implementers are | establishing a baseline for interoperability. Implementers are | |||
| encouraged to investigate and use alternative mechanisms regarded as | encouraged to investigate and use alternative mechanisms regarded as | |||
| equivalently good or better at the time of deployment. It is | equivalently good or better at the time of deployment. It is | |||
| RECOMMENDED that clients be implemented in such a way that allows new | RECOMMENDED that clients be implemented in such a way that new | |||
| authentication schemes to be deployed. | authentication schemes can be deployed. | |||
| Because this protocol uses HTTP response status codes as the primary | Because this protocol uses HTTP response status codes as the primary | |||
| means of reporting the result of a request, servers are advised to | means of reporting the result of a request, servers are advised to | |||
| respond to unauthorized or unauthenticated requests using an | respond to unauthorized or unauthenticated requests using an | |||
| appropriate 4xx HTTP response code (e.g. 401 "Unauthorized" or 403 | appropriate 4xx HTTP response code (e.g. 401 "Unauthorized" or 403 | |||
| "Forbidden") in accordance with [RFC2617]. | "Forbidden") in accordance with [RFC2617]. | |||
| 15. Security Considerations | 15. Security Considerations | |||
| As an HTTP-based protocol, APP is subject to the security | The Atom Publishing Protocol is based on HTTP and thus subject to the | |||
| considerations found in Section 15 of [RFC2616]. | security considerations found in Section 15 of [RFC2616]. | |||
| 15.1. Denial of Service | 15.1. Denial of Service | |||
| Atom Publishing server implementations need to take adequate | Atom Publishing Protocol server implementations need to take adequate | |||
| precautions to ensure malicious clients cannot consume excessive | precautions to ensure malicious clients cannot consume excessive | |||
| server resources (CPU, memory, disk, etc). | server resources (CPU, memory, disk, etc). | |||
| 15.2. Replay Attacks | 15.2. Replay Attacks | |||
| Atom Publishing server implementations are susceptible to replay | Atom Publishing Protocol server implementations are susceptible to | |||
| attacks. Specifically, this specification does not define a means of | replay attacks. Specifically, this specification does not define a | |||
| detecting duplicate requests. Accidentally sent duplicate requests | means of detecting duplicate requests. Accidentally sent duplicate | |||
| are indistinguishable from intentional and malicious replay attacks. | requests are indistinguishable from intentional and malicious replay | |||
| attacks. | ||||
| 15.3. Spoofing Attacks | 15.3. Spoofing Attacks | |||
| Atom Publishing implementations are susceptible to a variety of | Atom Publishing Protocol implementations are susceptible to a variety | |||
| spoofing attacks. Malicious clients may send Atom Entries containing | of spoofing attacks. Malicious clients may send Atom Entries | |||
| inaccurate information anywhere in the document. | containing inaccurate information anywhere in the document. | |||
| 15.4. Linked Resources | 15.4. Linked Resources | |||
| Atom Feed and Entry documents can contain XML External Entities as | Atom Feed and Entry documents can contain XML External Entities as | |||
| defined in Section 4.2.2 of [W3C.REC-xml]. Atom implementations are | defined in Section 4.2.2 of [REC-xml]. Atom implementations are not | |||
| not required to load external entities. External entities are | required to load external entities. External entities are subject to | |||
| subject to the same security concerns as any network operation and | the same security concerns as any network operation and can alter the | |||
| can alter the semantics of an Atom document. The same issues exist | semantics of an Atom document. The same issues exist for Resources | |||
| for resources linked to by Atom elements such as atom:link and atom: | linked to by Atom elements such as atom:link and atom:content. | |||
| content. | ||||
| 15.5. Digital Signatures and Encryption | 15.5. Digital Signatures and Encryption | |||
| Atom Entry Documents sent to a server might contain XML Digital | Atom Entry Documents sent to a server might contain XML Digital | |||
| Signatures [W3C.REC-xmldsig-core] and might be encrypted using XML | Signatures [REC-xmldsig-core] and might be encrypted using XML | |||
| Encryption [W3C.REC-xmlenc-core] as specified in Section 5 of | Encryption [REC-xmlenc-core] as specified in Section 5 of [RFC4287]. | |||
| [RFC4287]. | ||||
| Servers are allowed to modify received resource representations in | Servers are allowed to modify received Resource representations in | |||
| ways that can invalidate signatures covering those representations. | ways that can invalidate signatures covering those representations. | |||
| 15.6. URIs and IRIs | 15.6. URIs and IRIs | |||
| Atom Publishing Protocol implementations handle URIs and IRIs. See | Atom Publishing Protocol implementations handle URIs and IRIs. See | |||
| Section 7 of [RFC3986] and Section 8 of [RFC3987]. | Section 7 of [RFC3986] and Section 8 of [RFC3987] for security | |||
| considerations related to their handling and use. | ||||
| 15.7. Code Injection and Cross Site Scripting | ||||
| Atom Feed and Entry documents can contain a broad range of content | ||||
| types including code that might be executable in some contexts. | ||||
| Malicious clients could attempt to attack servers or other clients by | ||||
| injecting code into a Collection Document's Entry or Media Resources. | ||||
| Server implementations are strongly encouraged to verify that client | ||||
| supplied content is safe prior to accepting, processing or publishing | ||||
| it. In the case of HTML, experience indicates that verification | ||||
| based on a white list of acceptable content is more effective than a | ||||
| black list of forbidden content. | ||||
| Additional information about XHTML and HTML content safety can be | ||||
| found in Section 8.1 of [RFC4287] | ||||
| 16. IANA Considerations | 16. IANA Considerations | |||
| 16.1. Content-type registration for 'application/atomserv+xml' | This document uses two new media types that conform to the registry | |||
| mechanism described in [RFC4288], a new message header that conforms | ||||
| to the registry mechanism described in [RFC3864], and two new link | ||||
| relations that conform to the registry mechanism described in | ||||
| [RFC4287]. | ||||
| An Atom Publishing Protocol Service Document, when serialized as XML | 16.1. Content-type registration for 'application/atomcat+xml' | |||
| An Atom Publishing Protocol Category Document, when serialized as XML | ||||
| 1.0, can be identified with the following media type: | 1.0, can be identified with the following media type: | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: atomsvc+xml | MIME subtype name: atomcat+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. | |||
| [[anchor30: update upon publication]] | [[anchor31: 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. [[anchor31: update upon | Published specification: This specification. [[anchor32: 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: .atomsvc | File extension: .atomcat | |||
| 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: Joe | Person and email address to contact for further information: Joe | |||
| Gregorio <joe@bitworking.org> | Gregorio <joe@bitworking.org> | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Author/Change controller: This specification's author(s). | Author/Change controller: This specification's author(s). | |||
| [[anchor32: update upon publication]] | [[anchor33: update upon publication]] | |||
| 16.2. Content-type registration for 'application/atomcat+xml' | 16.2. Content-type registration for 'application/atomsvc+xml' | |||
| An Atom Publishing Protocol Category Document, when serialized as XML | An Atom Publishing Protocol Service Document, when serialized as XML | |||
| 1.0, can be identified with the following media type: | 1.0, can be identified with the following media type: | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: atomcat+xml | MIME subtype name: atomsvc+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. | |||
| [[anchor33: update upon publication]] | [[anchor34: 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. [[anchor34: update upon | Published specification: This specification. [[anchor35: 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: .atomcat | File extension: .atomsvc | |||
| 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: Joe | Person and email address to contact for further information: Joe | |||
| Gregorio <joe@bitworking.org> | Gregorio <joe@bitworking.org> | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Author/Change controller: This specification's author(s). | Author/Change controller: This specification's author(s). | |||
| [[anchor35: update upon publication]] | [[anchor36: update upon publication]] | |||
| 16.3. Header field registration for 'SLUG' | 16.3. Header field registration for 'SLUG' | |||
| Header field: SLUG | Header field: SLUG | |||
| Applicable protocol: http [RFC2616] | Applicable protocol: http [RFC2616] | |||
| Status: standard. | Status: standard. | |||
| Author/Change controller: IETF (iesg@ietf.org) Internet Engineering | Author/Change controller: IETF (iesg@ietf.org) Internet Engineering | |||
| Task Force | Task Force | |||
| Specification document(s): draft-ietf-atompub-protocol-13.txt | Specification document(s): This specification. [[anchor37: update on | |||
| ([[anchor36: update on rfc number assignment]]) | rfc number assignment]]) | |||
| Related information: | Related information: | |||
| 16.4. The Link Relation registration "edit" | 16.4. The Link Relation registration "edit" | |||
| Attribute Value: edit | Attribute Value: edit | |||
| Description: An IRI of an editable Member Entry. When appearing | Description: An IRI of an editable Member Entry. When appearing | |||
| within an atom:entry, the href IRI can be used to retrieve, update | within an atom:entry, the href IRI can be used to retrieve, update | |||
| and delete the resource represented by that Entry. | and delete the Resource represented by that Entry. | |||
| Expected display characteristics: Undefined; this relation can be | Expected display characteristics: Undefined; this relation can be | |||
| used for background processing or to provide extended | used for background processing or to provide extended | |||
| functionality without displaying its value. | functionality without displaying its value. | |||
| Security considerations: Automated agents should take care when this | Security considerations: Automated agents should take care when this | |||
| relation crosses administrative domains (e.g., the URI has a | relation crosses administrative domains (e.g., the URI has a | |||
| different authority than the current document). | different authority than the current document). | |||
| 16.5. The Link Relation registration "edit-media" | 16.5. The Link Relation registration "edit-media" | |||
| skipping to change at page 49, line 9 | skipping to change at page 53, line 9 | |||
| 16.6. The Atom Format Media Type Parameter | 16.6. The Atom Format Media Type Parameter | |||
| IANA is requested to add a reference to this specification in the | IANA is requested to add a reference to this specification in the | |||
| 'application/atom+xml' media type registration. | 'application/atom+xml' media type registration. | |||
| 17. References | 17. References | |||
| 17.1. Normative References | 17.1. Normative References | |||
| [RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | [REC-xml] Yergeau, F., Paoli, J., Bray, T., Sperberg-McQueen, C., | |||
| Part Three: Message Header Extensions for Non-ASCII Text", | ||||
| RFC 2047, November 1996. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | ||||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | ||||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | ||||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | ||||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | ||||
| Authentication: Basic and Digest Access Authentication", | ||||
| RFC 2617, June 1999. | ||||
| [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media | ||||
| Types", RFC 3023, January 2001. | ||||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", STD 66, | ||||
| RFC 3986, January 2005. | ||||
| [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | ||||
| Identifiers (IRIs)", RFC 3987, January 2005. | ||||
| [RFC4287] Nottingham, M. and R. Sayre, "The Atom Syndication | ||||
| Format", RFC 4287, December 2005. | ||||
| [RFC4346] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
| (TLS) Protocol Version 1.1", RFC 4346, April 2006. | ||||
| [W3C.REC-xml] | ||||
| Yergeau, F., Paoli, J., Bray, T., Sperberg-McQueen, C., | ||||
| and E. Maler, "Extensible Markup Language (XML) 1.0 | and E. Maler, "Extensible Markup Language (XML) 1.0 | |||
| (Fourth Edition)", World Wide Web Consortium | (Fourth Edition)", World Wide Web Consortium | |||
| Recommendation REC-xml-20060816, August 2006, | Recommendation REC-xml-20060816, August 2006, | |||
| <http://www.w3.org/TR/2006/REC-xml-20060816>. | <http://www.w3.org/TR/2006/REC-xml-20060816>. | |||
| [W3C.REC-xml-infoset] | [REC-xml-infoset] | |||
| Cowan, J. and R. Tobin, "XML Information Set (Second | Cowan, J. and R. Tobin, "XML Information Set (Second | |||
| Edition)", World Wide Web Consortium Recommendation REC- | Edition)", World Wide Web Consortium Recommendation REC- | |||
| xml-infoset-20040204, February 2004, | xml-infoset-20040204, February 2004, | |||
| <http://www.w3.org/TR/2004/REC-xml-infoset-20040204>. | <http://www.w3.org/TR/2004/REC-xml-infoset-20040204>. | |||
| [W3C.REC-xml-names] | [REC-xml-names] | |||
| Hollander, D., Bray, T., Tobin, R., and A. Layman, | Hollander, D., Bray, T., Tobin, R., and A. Layman, | |||
| "Namespaces in XML 1.0 (Second Edition)", World Wide Web | "Namespaces in XML 1.0 (Second Edition)", World Wide Web | |||
| Consortium Recommendation REC-xml-names-20060816, | Consortium Recommendation REC-xml-names-20060816, | |||
| August 2006, | August 2006, | |||
| <http://www.w3.org/TR/2006/REC-xml-names-20060816>. | <http://www.w3.org/TR/2006/REC-xml-names-20060816>. | |||
| [W3C.REC-xmlbase-20010627] | [REC-xmlbase] | |||
| Marsh, J., "XML Base", W3C REC W3C.REC-xmlbase-20010627, | Marsh, J., "XML Base", W3C REC W3C.REC-xmlbase-20010627, | |||
| June 2001. | June 2001. | |||
| [W3C.REC-xmldsig-core] | [REC-xmldsig-core] | |||
| Solo, D., Reagle, J., and D. Eastlake, "XML-Signature | Solo, D., Reagle, J., and D. Eastlake, "XML-Signature | |||
| Syntax and Processing", World Wide Web Consortium | Syntax and Processing", World Wide Web Consortium | |||
| Recommendation REC-xmldsig-core-20020212, February 2002, | Recommendation REC-xmldsig-core-20020212, February 2002, | |||
| <http://www.w3.org/TR/2002/REC-xmldsig-core-20020212>. | <http://www.w3.org/TR/2002/REC-xmldsig-core-20020212>. | |||
| [W3C.REC-xmlenc-core] | [REC-xmlenc-core] | |||
| Eastlake, D. and J. Reagle, "XML Encryption Syntax and | Eastlake, D. and J. Reagle, "XML Encryption Syntax and | |||
| Processing", World Wide Web Consortium Recommendation REC- | Processing", World Wide Web Consortium Recommendation REC- | |||
| xmlenc-core-20021210, December 2002, | xmlenc-core-20021210, December 2002, | |||
| <http://www.w3.org/TR/2002/REC-xmlenc-core-20021210>. | <http://www.w3.org/TR/2002/REC-xmlenc-core-20021210>. | |||
| 17.2. Informative References | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | ||||
| [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", | ||||
| RFC 2246, January 1999. | ||||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | ||||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | ||||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | ||||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | ||||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | ||||
| Authentication: Basic and Digest Access Authentication", | ||||
| RFC 2617, June 1999. | ||||
| [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. | [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. | |||
| [RNC] Clark, J., "RELAX NG Compact Syntax", December 2001, <http | [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media | |||
| ://www.oasis-open.org/committees/relax-ng/ | Types", RFC 3023, January 2001. | |||
| compact-20021121.html>. | ||||
| [W3C.NOTE-detect-lost-update-19990510] | [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
| Procedures for Message Header Fields", BCP 90, RFC 3864, | ||||
| September 2004. | ||||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", STD 66, | ||||
| RFC 3986, January 2005. | ||||
| [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | ||||
| Identifiers (IRIs)", RFC 3987, January 2005. | ||||
| [RFC4287] Nottingham, M. and R. Sayre, "The Atom Syndication | ||||
| Format", RFC 4287, December 2005. | ||||
| [RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and | ||||
| Registration Procedures", BCP 13, RFC 4288, December 2005. | ||||
| [RFC4346] Dierks, T. and E. Rescorla, "The Transport Layer Security | ||||
| (TLS) Protocol Version 1.1", RFC 4346, April 2006. | ||||
| 17.2. Informative References | ||||
| [NOTE-detect-lost-update] | ||||
| Nielsen, H. and D. LaLiberte, "Editing the Web: Detecting | Nielsen, H. and D. LaLiberte, "Editing the Web: Detecting | |||
| the Lost Update Problem Using Unreserved Checkout", World | the Lost Update Problem Using Unreserved Checkout", World | |||
| Wide Web Consortium NOTE NOTE-detect-lost-update, | Wide Web Consortium NOTE NOTE-detect-lost-update, | |||
| May 1999, <http://www.w3.org/1999/04/Editing/>. | May 1999, <http://www.w3.org/1999/04/Editing/>. | |||
| [W3C.REC-webarch-20041215] | [REC-webarch] | |||
| Walsh, N. and I. Jacobs, "Architecture of the World Wide | Walsh, N. and I. Jacobs, "Architecture of the World Wide | |||
| Web, Volume One", W3C REC REC-webarch-20041215, | Web, Volume One", W3C REC REC-webarch-20041215, | |||
| December 2004. | December 2004. | |||
| [RNC] Clark, J., "RELAX NG Compact Syntax", December 2001, <http | ||||
| ://www.oasis-open.org/committees/relax-ng/ | ||||
| compact-20021121.html>. | ||||
| URIs | URIs | |||
| [1] <http://www.imc.org/atom-protocol/index.html> | [1] <http://www.imc.org/atom-protocol/index.html> | |||
| Appendix A. Contributors | Appendix A. Contributors | |||
| The content and concepts within are a product of the Atom community | The content and concepts within are a product of the Atom community | |||
| and the Atompub Working Group. | and the Atompub Working Group. | |||
| [[anchor40: chairs to compile a contribution list for 1.0 --dehora]] | ||||
| Appendix B. RELAX NG Compact Schema | Appendix B. RELAX NG Compact Schema | |||
| This appendix is informative. | This appendix is informative. | |||
| The Relax NG schema explicitly excludes elements in the Atom Protocol | The Relax NG schema explicitly excludes elements in the Atom Protocol | |||
| namespace which are not defined in this revision of the | namespace which are not defined in this revision of the | |||
| specification. Requirements for Atom Protocol processors | specification. Requirements for Atom Protocol processors | |||
| encountering such markup are given in Section 6.2 and Section 6.3 of | encountering such markup are given in Section 6.2 and Section 6.3 of | |||
| [RFC4287]. | [RFC4287]. | |||
| skipping to change at page 53, line 35 | skipping to change at page 57, line 35 | |||
| start = appService | start = appService | |||
| # common:attrs | # common:attrs | |||
| atomURI = text | atomURI = text | |||
| appCommonAttributes = | appCommonAttributes = | |||
| attribute xml:base { atomURI }?, | attribute xml:base { atomURI }?, | |||
| attribute xml:lang { atomLanguageTag }?, | attribute xml:lang { atomLanguageTag }?, | |||
| attribute xml:space {"default"|"preserved"}?, | ||||
| undefinedAttribute* | undefinedAttribute* | |||
| atomCommonAttributes = appCommonAttributes | atomCommonAttributes = appCommonAttributes | |||
| undefinedAttribute = | undefinedAttribute = | |||
| attribute * - (xml:base | xml:lang | local:*) { text } | attribute * - (xml:base | xml:space | xml:lang | local:*) { text } | |||
| atomLanguageTag = xsd:string { | atomLanguageTag = xsd:string { | |||
| pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*" | pattern = "([A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*)?" | |||
| } | } | |||
| atomDateConstruct = | atomDateConstruct = | |||
| appCommonAttributes, | appCommonAttributes, | |||
| xsd:dateTime | xsd:dateTime | |||
| # app:service | ||||
| # app:service | ||||
| appService = | appService = | |||
| element app:service { | element app:service { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( appWorkspace+ | ( appWorkspace+ | |||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| # app:workspace | # app:workspace | |||
| appWorkspace = | appWorkspace = | |||
| skipping to change at page 54, line 32 | skipping to change at page 58, line 30 | |||
| atomTitle = element atom:title { atomTextConstruct } | atomTitle = element atom:title { atomTextConstruct } | |||
| # app:collection | # app:collection | |||
| appCollection = | appCollection = | |||
| element app:collection { | element app:collection { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| attribute href { atomURI }, | attribute href { atomURI }, | |||
| ( atomTitle | ( atomTitle | |||
| & appAccept? | & appAccept* | |||
| & appCategories* | & appCategories* | |||
| & extensionSansTitleElement* ) | & extensionSansTitleElement* ) | |||
| } | } | |||
| # app:categories | # app:categories | |||
| atomCategory = | atomCategory = | |||
| element atom:category { | element atom:category { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute term { text }, | attribute term { text }, | |||
| attribute scheme { atomURI }?, | attribute scheme { atomURI }?, | |||
| attribute label { text }?, | attribute label { text }?, | |||
| undefinedContent | undefinedContent | |||
| } | } | |||
| appInlineCategories = | appInlineCategories = | |||
| element app:categories { | element app:categories { | |||
| attribute fixed { "yes" | "no" }?, | attribute fixed { "yes" | "no" }?, | |||
| attribute scheme { atomURI }?, | attribute scheme { atomURI }?, | |||
| (atomCategory*) | (atomCategory*, | |||
| undefinedContent) | ||||
| } | } | |||
| appOutOfLineCategories = | appOutOfLineCategories = | |||
| element app:categories { | element app:categories { | |||
| attribute href { atomURI }, | attribute href { atomURI }, | |||
| undefinedContent | undefinedContent | |||
| } | } | |||
| appCategories = appInlineCategories | appOutOfLineCategories | appCategories = appInlineCategories | appOutOfLineCategories | |||
| # app:accept | # app:accept | |||
| appAccept = | appAccept = | |||
| element app:accept { | element app:accept { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( appTypeValue? ) | ( text? ) | |||
| } | } | |||
| appTypeValue = ( "entry" | media-type |entry-or-media-type ) | ||||
| media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | ||||
| entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | ||||
| # above is an approximation, rnc doesn't support interleaved text | ||||
| # Simple Extension | # Simple Extension | |||
| simpleSansTitleExtensionElement = | simpleSansTitleExtensionElement = | |||
| element * - (app:*|atom:title) { | element * - (app:*|atom:title) { | |||
| text | text | |||
| } | } | |||
| simpleExtensionElement = | simpleExtensionElement = | |||
| element * - (app:*) { | element * - (app:*) { | |||
| text | text | |||
| skipping to change at page 57, line 41 | skipping to change at page 61, line 34 | |||
| attribute xml:base { atomURI }?, | attribute xml:base { atomURI }?, | |||
| attribute xml:lang { atomLanguageTag }?, | attribute xml:lang { atomLanguageTag }?, | |||
| undefinedAttribute* | undefinedAttribute* | |||
| undefinedAttribute = | undefinedAttribute = | |||
| attribute * - (xml:base | xml:lang | local:*) { text } | attribute * - (xml:base | xml:lang | local:*) { text } | |||
| atomURI = text | atomURI = text | |||
| atomLanguageTag = xsd:string { | atomLanguageTag = xsd:string { | |||
| pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*" | pattern = "([A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*)?" | |||
| } | } | |||
| atomCategory = | atomCategory = | |||
| element atom:category { | element atom:category { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| attribute term { text }, | attribute term { text }, | |||
| attribute scheme { atomURI }?, | attribute scheme { atomURI }?, | |||
| attribute label { text }?, | attribute label { text }?, | |||
| undefinedContent | undefinedContent | |||
| } | } | |||
| appInlineCategories = | appInlineCategories = | |||
| element app:categories { | element app:categories { | |||
| attribute fixed { "yes" | "no" }?, | attribute fixed { "yes" | "no" }?, | |||
| attribute scheme { atomURI }?, | attribute scheme { atomURI }?, | |||
| (atomCategory*) | (atomCategory*, | |||
| undefinedContent) | ||||
| } | } | |||
| appOutOfLineCategories = | appOutOfLineCategories = | |||
| element app:categories { | element app:categories { | |||
| attribute href { atomURI }, | attribute href { atomURI }, | |||
| (empty) | (empty) | |||
| } | } | |||
| appCategories = appInlineCategories | appOutOfLineCategories | appCategories = appInlineCategories | appOutOfLineCategories | |||
| skipping to change at page 59, line 17 | skipping to change at page 63, line 17 | |||
| [[anchor42: This section to be removed upon publication.]] | [[anchor42: This section to be removed upon publication.]] | |||
| draft-ietf-atompub-protocol-14: typos; removed "The language context | draft-ietf-atompub-protocol-14: typos; removed "The language context | |||
| is only significant for elements and attributes declared to be | is only significant for elements and attributes declared to be | |||
| "Language-Sensitive" by this specification. "; "Successful member | "Language-Sensitive" by this specification. "; "Successful member | |||
| creation is normally indicated with a 201 ("Created") response code." | creation is normally indicated with a 201 ("Created") response code." | |||
| removed "normally" from that sentence (9.2); Added "Media Link | removed "normally" from that sentence (9.2); Added "Media Link | |||
| Entries are represented as Atom Entries and appear in the | Entries are represented as Atom Entries and appear in the | |||
| Collection." to 9.6; said that an app:accept value of "entry" is | Collection." to 9.6; said that an app:accept value of "entry" is | |||
| equivalent to "application/atom+xml;type=entry"; double-check spec | equivalent to "application/atom+xml;type=entry"; double-check spec | |||
| terms; Member Entry Resource -> Entry Resource; Added MLE, Entry | terms; Member Entry resource -> Entry Resource; Added MLE, Entry | |||
| Resource and Media Resource terms defs; 6.1 para split; 10.1 | Resource and Media Resource terms defs; 6.1 para split; 10.1 | |||
| collection paging, rewrote for clarity; 13.1.1 app:edited rewrote for | collection paging, rewrote for clarity; 13.1.1 app:edited rewrote for | |||
| clarity/conflict; text for GETting entries and cache handling; 4: | clarity/conflict; text for GETting entries and cache handling; 4: | |||
| Typo: "And Media Resources IRIs", s/Resources/Resource/; consensus | Typo: "And Media Resources IRIs", s/Resources/Resource/; consensus | |||
| call: application/atomsvc+xml, extension is .atomsvc; DRY app: | call: application/atomsvc+xml, extension is .atomsvc; DRY app: | |||
| categories; make it clear the app:draft support is optional whether | categories; make it clear the app:draft support is optional whether | |||
| or not the value is sent; 9.2: put related ideas together into | or not the value is sent; 9.2: put related ideas together into | |||
| paragraphs.; 10: partial list editing; security: use elharos text; | paragraphs.; 10: partial list editing; security: use elharos text; | |||
| app:edited: tweak text suplied by ari; create a section for | app:edited: tweak text suplied by ari; create a section for | |||
| workspaces and move the descriptive text there; Moved rfc2818 to non- | workspaces and move the descriptive text there; Moved rfc2818 to non- | |||
| skipping to change at page 63, line 24 | skipping to change at page 67, line 24 | |||
| Email: joe@bitworking.org | Email: joe@bitworking.org | |||
| URI: http://ibm.com/ | URI: http://ibm.com/ | |||
| Bill de hOra (editor) | Bill de hOra (editor) | |||
| Propylon Ltd. | Propylon Ltd. | |||
| 45 Blackbourne Square, Rathfarnham Gate | 45 Blackbourne Square, Rathfarnham Gate | |||
| Dublin, Dublin D14 | Dublin, Dublin D14 | |||
| IE | IE | |||
| Phone: +353-1-4927444 | Phone: +353-1-4927444 | |||
| Email: bill.dehora@propylon.com | Email: bill@dehora.net | |||
| URI: http://www.propylon.com/ | URI: http://www.propylon.com/ | |||
| Full Copyright Statement | Full Copyright Statement | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2007). | |||
| This document is subject to the rights, licenses and restrictions | This document is subject to the rights, licenses and restrictions | |||
| contained in BCP 78, and except as set forth therein, the authors | contained in BCP 78, and except as set forth therein, the authors | |||
| retain all their rights. | retain all their rights. | |||
| End of changes. 240 change blocks. | ||||
| 614 lines changed or deleted | 699 lines changed or added | |||
| This html diff was produced by rfcdiff 1.32. The latest version is available from http://www.levkowetz.com/ietf/tools/rfcdiff/ | ||||