| draft-ietf-atompub-protocol-09.txt | draft-ietf-atompub-protocol-10.txt | |||
|---|---|---|---|---|
| Network Working Group J. Gregorio, Ed. | Network Working Group J. Gregorio, Ed. | |||
| Internet-Draft BitWorking, Inc | Internet-Draft IBM | |||
| Expires: December 25, 2006 B. de hOra, Ed. | Expires: March 9, 2007 B. de hOra, Ed. | |||
| Propylon Ltd. | Propylon Ltd. | |||
| June 23, 2006 | September 05, 2006 | |||
| The Atom Publishing Protocol | The Atom Publishing Protocol | |||
| draft-ietf-atompub-protocol-09.txt | draft-ietf-atompub-protocol-10.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 December 25, 2006. | This Internet-Draft will expire on March 9, 2007. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2006). | Copyright (C) The Internet Society (2006). | |||
| 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 transport of Atom-formatted representations. The Atom format is | HTTP transport of Atom-formatted representations. The Atom format is | |||
| documented in the Atom Syndication Format (RFC4287). | documented in the Atom Syndication Format (RFC4287). | |||
| Editorial Note | Editorial Note | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 5 | 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1 XML-related Conventions . . . . . . . . . . . . . . . . . 5 | |||
| 4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . 7 | 2.1.1 Referring to Information Items . . . . . . . . . . . . 5 | |||
| 5. Protocol Operations . . . . . . . . . . . . . . . . . . . . 8 | 2.1.2 RELAX NG Schema . . . . . . . . . . . . . . . . . . . 5 | |||
| 5.1 Retrieving an Introspection Document . . . . . . . . . . . 8 | 2.1.3 Use of xml:base and xml:lang . . . . . . . . . . . . . 5 | |||
| 5.2 Creating a Resource . . . . . . . . . . . . . . . . . . . 8 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.3 Editing a Resource . . . . . . . . . . . . . . . . . . . . 8 | 4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.3.1 Retrieving a Resource . . . . . . . . . . . . . . . . 9 | 5. Protocol Operations . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.3.2 Updating a Resource . . . . . . . . . . . . . . . . . 9 | 5.1 Retrieving a Service Document . . . . . . . . . . . . . . 10 | |||
| 5.3.3 Deleting a Resource . . . . . . . . . . . . . . . . . 9 | 5.2 Listing Collection Members . . . . . . . . . . . . . . . . 10 | |||
| 5.4 Listing Collection Members . . . . . . . . . . . . . . . . 10 | 5.3 Creating a Resource . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.5 Use of HTTP Response codes . . . . . . . . . . . . . . . . 10 | 5.4 Editing a Resource . . . . . . . . . . . . . . . . . . . . 11 | |||
| 6. XML-related Conventions . . . . . . . . . . . . . . . . . . 11 | 5.4.1 Retrieving a Resource . . . . . . . . . . . . . . . . 11 | |||
| 6.1 Referring to Information Items . . . . . . . . . . . . . . 11 | 5.4.2 Updating a Resource . . . . . . . . . . . . . . . . . 12 | |||
| 6.2 XML Namespace Usage . . . . . . . . . . . . . . . . . . . 11 | 5.4.3 Deleting a Resource . . . . . . . . . . . . . . . . . 12 | |||
| 6.3 Use of xml:base and xml:lang . . . . . . . . . . . . . . . 11 | 5.5 Use of HTTP Response codes . . . . . . . . . . . . . . . . 12 | |||
| 6.4 RELAX NG Schema . . . . . . . . . . . . . . . . . . . . . 12 | 6. Atom Publishing Protocol Documents . . . . . . . . . . . . . 13 | |||
| 7. Introspection Documents . . . . . . . . . . . . . . . . . . 13 | 6.1 Document Types . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.2 Document Extensibility . . . . . . . . . . . . . . . . . . 13 | |||
| 7. Category Documents . . . . . . . . . . . . . . . . . . . . . 14 | ||||
| 7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
| 7.2 Element Definitions . . . . . . . . . . . . . . . . . . . 14 | 7.2 Element Definitions . . . . . . . . . . . . . . . . . . . 14 | |||
| 7.2.1 The "app:service" Element . . . . . . . . . . . . . . 14 | 7.2.1 The "app:categories" element . . . . . . . . . . . . . 14 | |||
| 7.2.2 The "app:workspace" Element . . . . . . . . . . . . . 14 | 8. Service Documents . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7.2.3 The "app:collection" Element . . . . . . . . . . . . . 15 | 8.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7.2.4 The "app:accept" Element . . . . . . . . . . . . . . . 16 | 8.2 Element Definitions . . . . . . . . . . . . . . . . . . . 17 | |||
| 8. Collections . . . . . . . . . . . . . . . . . . . . . . . . 17 | 8.2.1 The "app:service" Element . . . . . . . . . . . . . . 17 | |||
| 8.1 Creating resources with POST . . . . . . . . . . . . . . . 17 | 8.2.2 The "app:workspace" Element . . . . . . . . . . . . . 17 | |||
| 8.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 8.2.3 The "app:collection" Element . . . . . . . . . . . . . 18 | |||
| 8.3 The 'edit' Link . . . . . . . . . . . . . . . . . . . . . 19 | 8.2.4 The "app:accept" Element . . . . . . . . . . . . . . . 19 | |||
| 8.4 Media Resources and Media Link Entries . . . . . . . . . . 19 | 8.2.5 The "app:categories" Element . . . . . . . . . . . . . 20 | |||
| 8.4.1 Title: Header . . . . . . . . . . . . . . . . . . . . 20 | 9. Creating and Editing Resources . . . . . . . . . . . . . . . 22 | |||
| 8.4.2 Example . . . . . . . . . . . . . . . . . . . . . . . 20 | 9.1 Member URIs . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 8.5 Editing Entries with Foreign Markup . . . . . . . . . . . 21 | 9.2 Creating resources with POST . . . . . . . . . . . . . . . 22 | |||
| 9. Listing Collections . . . . . . . . . . . . . . . . . . . . 22 | 9.2.1 Example . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 9.1 Collection Paging . . . . . . . . . . . . . . . . . . . . 22 | 9.3 Updating Resources with PUT . . . . . . . . . . . . . . . 24 | |||
| 10. Atom Format Link Relation Extensions . . . . . . . . . . . . 24 | 9.4 Deleting Resources with DELETE . . . . . . . . . . . . . . 24 | |||
| 10.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 24 | 9.5 Media Resources and Media Link Entries . . . . . . . . . . 24 | |||
| 10.2 The "edit-media" Link Relation . . . . . . . . . . . . . 24 | 9.6 The Slug: Header . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 11. Atom Publishing Control Extensions . . . . . . . . . . . . . 25 | 9.6.1 Slug: Header syntax . . . . . . . . . . . . . . . . . 25 | |||
| 11.1 The Atom Publishing Control Namespace . . . . . . . . . 25 | 9.6.2 Examples . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 11.2 The "pub:control" Element . . . . . . . . . . . . . . . 25 | 10. Listing Collections . . . . . . . . . . . . . . . . . . . . 28 | |||
| 11.2.1 The "pub:draft" Element . . . . . . . . . . . . . . 25 | 10.1 Collection Paging . . . . . . . . . . . . . . . . . . . 28 | |||
| 12. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 26 | 11. Atom Format Link Relation Extensions . . . . . . . . . . . . 30 | |||
| 13. Security Considerations . . . . . . . . . . . . . . . . . . 27 | 11.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 30 | |||
| 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . 28 | 11.2 The "edit-media" Link Relation . . . . . . . . . . . . . 30 | |||
| 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 12. Atom Publishing Controls . . . . . . . . . . . . . . . . . . 31 | |||
| 15.1 Normative References . . . . . . . . . . . . . . . . . . 30 | 12.1 The "app:control" Element . . . . . . . . . . . . . . . 31 | |||
| 15.2 Informative References . . . . . . . . . . . . . . . . . 31 | 12.1.1 The "app:draft" Element . . . . . . . . . . . . . . 31 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 32 | 13. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 32 | |||
| A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 33 | 14. Security Considerations . . . . . . . . . . . . . . . . . . 33 | |||
| B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 34 | 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . 34 | |||
| C. Revision History . . . . . . . . . . . . . . . . . . . . . . 37 | 15.1 Content-type registration for | |||
| Intellectual Property and Copyright Statements . . . . . . . 40 | 'application/atomserv+xml' . . . . . . . . . . . . . . . 34 | |||
| 15.2 Content-type registration for | ||||
| 'application/atomcat+xml' . . . . . . . . . . . . . . . 35 | ||||
| 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 | ||||
| 16.1 Normative References . . . . . . . . . . . . . . . . . . 37 | ||||
| 16.2 Informative References . . . . . . . . . . . . . . . . . 38 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 39 | ||||
| A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 40 | ||||
| B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 41 | ||||
| C. Revision History . . . . . . . . . . . . . . . . . . . . . . 47 | ||||
| Intellectual Property and Copyright Statements . . . . . . . 50 | ||||
| 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-20040204]. The protocol supports the creation of | [W3C.REC-xml-20040204]. The protocol supports the creation of | |||
| arbitrary web resources and provides facilities for: | arbitrary web resources and 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 Introspection: Discovering and describing collections. | o Service: Discovering and describing Collections. | |||
| o Editing: Creating, updating and deleting resources. | o Editing: Creating, updating and deleting resources. | |||
| 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]. | |||
| Note: The Introspection Document allows the use of IRIs [RFC3987], as | Atom Protocol documents allow the use of IRIs [RFC3987], as well as | |||
| well as URIs [RFC3986]. Every URI is an IRI, so any URI can be used | URIs [RFC3986]. Before an IRI found in a document is used by HTTP, | |||
| where an IRI is needed. How to map an IRI to a URI is specified in | the IRI is first converted to a URI according the procedure defined | |||
| Section 3.1 of Internationalized Resource Identifiers (IRIs) | in [RFC3987] (Section 3.1). The resource identified by the URI after | |||
| [RFC3987]. | conversion is the same as the one identified by the IRI. | |||
| 2.1 XML-related Conventions | ||||
| 2.1.1 Referring to Information Items | ||||
| Atom Protocol Document formats are specified in terms of the XML | ||||
| Information Set [W3C.REC-xml-infoset-20040204], serialized as XML 1.0 | ||||
| [W3C.REC-xml-20040204]. | ||||
| The Infoset terms "Element Information Item" and "Attribute | ||||
| Information Item" are shortened to "element" and "attribute" | ||||
| respectively. Therefore, when this specification uses the term | ||||
| "element", it is referring to an Element Information Item, and when | ||||
| it uses the term "attribute", it is referring to an Attribute | ||||
| Information Item. | ||||
| 2.1.2 RELAX NG Schema | ||||
| Some sections of this specification are illustrated with fragments of | ||||
| a non-normative RELAX NG Compact schema [RNC]. However, the text of | ||||
| this specification provides the definition of conformance. Complete | ||||
| schemas appear in Appendix B. | ||||
| 2.1.3 Use of xml:base and xml:lang | ||||
| XML elements defined by this specification MAY have an xml:base | ||||
| attribute [W3C.REC-xmlbase-20010627]. When xml:base is used, it | ||||
| serves the function described in section 5.1.1 of URI Generic Syntax | ||||
| [RFC3986], by establishing the base URI (or IRI) for resolving | ||||
| relative references found within the scope of the xml:base attribute. | ||||
| Any element defined by this specification MAY have an xml:lang | ||||
| attribute, whose content indicates the natural language for the | ||||
| element and its descendents. The language context is only | ||||
| significant for elements and attributes declared to be "Language- | ||||
| Sensitive" by this specification. Requirements regarding the content | ||||
| and interpretation of xml:lang are specified in Section 2.12 of XML | ||||
| 1.0 [W3C.REC-xml-20040204]. | ||||
| 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". | |||
| URI/IRI - A Uniform Resource Identifier and Internationalized | URI/IRI - A Uniform Resource Identifier and Internationalized | |||
| Resource Identifier. These terms and the distinction between them | Resource Identifier. These terms and the distinction between them | |||
| are defined in [RFC3986] and [RFC3987]. Note that IRIs are mapped to | are defined in [RFC3986] and [RFC3987]. IRIs are mapped to URIs | |||
| URIs before dereferencing takes place. | before dereferencing takes place. | |||
| The phrase "the URI of a document" in this specification is shorthand | ||||
| for "a URI which, when dereferenced, is expected to produce that | ||||
| document as a representation". | ||||
| Resource - A network-accessible data object or service identified by | Resource - A network-accessible data object or service identified by | |||
| an IRI, as defined in [RFC2616]. See [W3C.REC-webarch-20041215] for | an IRI, as defined in [RFC2616]. See [W3C.REC-webarch-20041215] for | |||
| further discussion on resources. | further discussion on resources. | |||
| The phrase "the URI of a document" in this specification is shorthand | ||||
| for "an URI which, when dereferenced, is expected to produce that | ||||
| document as a representation". | ||||
| Representation - An entity included with a request or response as | 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 IRIs. See | Collection - A resource that contains a set of Member IRIs. See | |||
| Section 8. | Section 9. | |||
| Member - A resource whose IRI is listed in a Collection. | Member - A resource whose IRI is listed in a Collection by a link | |||
| element with a relation of "edit" or "edit-media". See Section 9.1. | ||||
| Introspection Document - A document that describes the location and | Workspace - A group of collections. See Section 8. | |||
| capabilities of one or more Collections. See Section 7. | ||||
| Service Document - A document that describes the location and | ||||
| capabilities of one or more Collections. See Section 8. | ||||
| Category Document - A document that describes the categories allowed | ||||
| in a Collection. See Section 7. | ||||
| 4. Protocol Model | 4. Protocol Model | |||
| The Atom Publishing Protocol uses HTTP to edit and author web | The Atom Publishing Protocol uses HTTP methods to edit and author | |||
| resources. The Atom Protocol uses the following HTTP methods: | Member Resources as follows: | |||
| o GET is used to retrieve a representation of a resource or perform | o GET is used to retrieve a representation of a known resource. | |||
| a query. | ||||
| o POST is used to create a new, dynamically-named resource. | o POST is used to create a new, dynamically-named, resource. | |||
| o PUT is used to update a known resource. | o PUT is used to update a known resource. | |||
| o DELETE is used to remove a resource. | o DELETE is used to remove a known resource. | |||
| Along with operations on resources the Atom Protocol provides | Along with operations on Member Resources the Atom Protocol defines | |||
| structures, called Collections, for managing and organising | Collection resources for managing and organizing Member Resources. | |||
| resources, called Members. Collections contain the IRIs of, and | Collections are represented by Atom Feed documents and contain the | |||
| metadata about, their Member resources. Atom Protocol clients can | IRIs of, and metadata about, their Member Resources. | |||
| use Introspection documents, which represent server-defined groups of | ||||
| Collections, to initialize the process of creating and editing | ||||
| resources. | ||||
| Note that when an IRI is used for resource retrieval over HTTP, the | There are two kinds of Member Resources - Member Entry Resources and | |||
| IRI is first converted to a URI according the procedure defined in | Media Resources. Member Entry Resources are represented as Atom | |||
| [RFC3987] section 3.1. The resource that the IRI locates is the same | Entries. Media Resources MAY have representations in any media type. | |||
| as the one located by the URI obtained after converting the IRI. | A Media Link Entry is a Member Entry that contains metadata about a | |||
| Media Resource. This diagram shows the classification of the | ||||
| resources: | ||||
| Member Resource | ||||
| -> Member Entry Resource | ||||
| -> Media Link Entry Resource | ||||
| -> Media Resource | ||||
| Collections, represented by Atom feeds, contain entries. Those | ||||
| entries contain the Member Entry and Media Resources IRIs of the | ||||
| Collection. A Collection can contain any number of entries of either | ||||
| kind. In the diagram of a Collection below there are two entries. | ||||
| The first contains the IRI of a Member 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 | ||||
| Entry | ||||
| Member Entry IRI -> Member Entry Resource | ||||
| Entry | ||||
| Member Entry IRI -> Media Link Entry Resource | ||||
| Media IRI -> Media Resource | ||||
| Service Documents represent server-defined groups of Collections, and | ||||
| are used to initialize the process of creating and editing resources. | ||||
| 5. Protocol Operations | 5. Protocol Operations | |||
| 5.1 Retrieving an Introspection Document | 5.1 Retrieving a Service Document | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) GET to URI of Introspection Document | | | 1.) GET to URI of Service Document | | |||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) Introspection Document | | | 2.) Service Document | | |||
| |<------------------------------------------| | |<------------------------------------------| | |||
| | | | | | | |||
| 1. The client sends a GET request to the URI of the Introspection | 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 the document enumerating the IRIs of a | |||
| set of Collections and the capabilities of those Collections | set of Collections and the capabilities of those Collections | |||
| supported by the server. The content of this document can vary | supported by the server. The content of this document can vary | |||
| based on aspects of the client request, including, but not | based on aspects of the client request, including, but not | |||
| limited to, authentication credentials. | limited to, authentication credentials. | |||
| 5.2 Creating a Resource | 5.2 Listing Collection Members | |||
| 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 | ||||
| containing one Atom Entry for each Member Entry Resource. See | ||||
| Section 10 and Section 11 for a description of the feed contents. | ||||
| Client Server | ||||
| | | | ||||
| | 1.) GET to Collection URI | | ||||
| |------------------------------->| | ||||
| | | | ||||
| | 2.) 200 OK, Atom Feed Doc | | ||||
| |<-------------------------------| | ||||
| | | | ||||
| 1. The client sends a GET request to the URI of the Collection. | ||||
| 2. The server responds with an Atom Feed Document containing the | ||||
| IRIs of the Collection members. | ||||
| 5.3 Creating a Resource | ||||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) POST to URI of Collection | | | 1.) POST to URI of Collection | | |||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) 201 Created | | | 2.) 201 Created | | |||
| | 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 URI of the newly created resource. | contains the IRI of the newly created Member Entry Resource. | |||
| Media Resources may have also been created and their IRIs can be | ||||
| found through the Member Entry Resource. See Section 9.5 for | ||||
| more details. | ||||
| 5.3 Editing a Resource | 5.4 Editing a Resource | |||
| Once a resource has been created and its URI is known, that URI can | Once a resource has been created and its Member URI is known, that | |||
| be used to retrieve, update, and delete the resource. | URI can be used to retrieve, update, and delete the resource. | |||
| 5.3.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.) Member Representation | | |||
| |<------------------------------------------| | |<------------------------------------------| | |||
| | | | | | | |||
| 1. The client sends a GET request to the Member's URI to retrieve | 1. The client sends a GET request to the URI of a Member Resource to | |||
| its representation. | retrieve its representation. | |||
| 2. The server responds with the representation of the resource. | 2. The server responds with the representation of the resource. | |||
| 5.3.2 Updating a Resource | 5.4.2 Updating a Resource | |||
| Client Server | Client Server | |||
| | | | | | | |||
| | 1.) PUT to Member URI | | | 1.) PUT to Member URI | | |||
| |------------------------------------------>| | |------------------------------------------>| | |||
| | | | | | | |||
| | 2.) 200 OK | | | 2.) 200 OK | | |||
| |<------------------------------------------| | |<------------------------------------------| | |||
| 1. The client PUTs an updated representation to the Member's URI. | 1. The client PUTs an updated representation to the URI of a Member | |||
| Resource. | ||||
| 2. Upon a successful update of the resource the server responds with | 2. Upon a successful update of the resource the server responds with | |||
| a status code of 200. | a status code of 200. | |||
| 5.3.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 | | |||
| |<------------------------------------------| | |<------------------------------------------| | |||
| | | | | | | |||
| 1. The client sends a DELETE request to the Member's URI. | 1. The client sends a DELETE request to the URI of a Member | |||
| Resource. | ||||
| 2. Upon the successful deletion of the resource the server responds | 2. Upon the successful deletion of the resource the server responds | |||
| with a status code of 200. | with a status code of 200. | |||
| 5.4 Listing Collection Members | A different approach is taken for deleting Media Resources, see | |||
| Section 9.5 for details. | ||||
| To list the members of a Collection the client sends a GET request to | ||||
| the Collection's URI. An Atom Feed Document is returned containing | ||||
| one Atom Entry for each member resource. See Section 9 and | ||||
| Section 10 for a description of the feed contents. | ||||
| Client Server | ||||
| | | | ||||
| | 1.) GET to Collection URI | | ||||
| |------------------------------->| | ||||
| | | | ||||
| | 2.) 200 OK, Atom Feed Doc | | ||||
| |<-------------------------------| | ||||
| | | | ||||
| 1. The client sends a GET request to the Collection's URI. | ||||
| 2. The server responds with an Atom Feed Document containing the | ||||
| IRIs of the collection members. | ||||
| 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. | |||
| It is RECOMMENDED that entities contained within HTTP 4xx and 5xx | It is RECOMMENDED that entities contained within HTTP 4xx and 5xx | |||
| responses include a human-readable explanation of the error. | responses include a human-readable explanation of the error. | |||
| 6. XML-related Conventions | 6. Atom Publishing Protocol Documents | |||
| The Atom Protocol Introspection format is specified in terms of the | ||||
| XML Information Set [W3C.REC-xml-infoset-20040204], serialised as XML | ||||
| 1.0 [W3C.REC-xml-20040204]. Atom Publishing Protocol Documents MUST | ||||
| be well-formed XML. This specification does not define any DTDs for | ||||
| Atom Protocol, and hence does not require them to be "valid" in the | ||||
| sense used by XML. | ||||
| 6.1 Referring to Information Items | ||||
| This specification uses a shorthand for two common terms: the phrase | 6.1 Document Types | |||
| "Information Item" is omitted when discussing Element Information | ||||
| Items and Attribute Information Items. Therefore, when this | ||||
| specification uses the term "element," it is referring to an Element | ||||
| Information Item in Infoset terms. Likewise, when it uses the term | ||||
| "attribute," it is referring to an Attribute Information Item. | ||||
| 6.2 XML Namespace Usage | This specification describes two kinds of Documents - Category | |||
| Documents and Service Documents. | ||||
| The namespace name [W3C.REC-xml-names-19990114] for the XML format | A Category Document (Section 7) contain lists of categories specified | |||
| described in this specification is: | using the "atom:category" element from the Atom Syndication Format. | |||
| A Service Document (Section 8) describes capabilities of workspaces, | ||||
| which are server-defined groupings of Collections. | ||||
| The namespace name [W3C.REC-xml-names-19990114] for either kind of | ||||
| document is: | ||||
| http://purl.org/atom/app# | http://purl.org/atom/app# | |||
| This specification uses the prefix "app:" for the namespace name. | This specification uses the prefix "app:" for the namespace name. | |||
| The choice of namespace prefix is not semantically significant. | The prefix "atom:" is used for "http://www.w3.org/2005/Atom", the | |||
| namespace name of the Atom Syndication Format [RFC4287]. The | ||||
| namespace prefixes are not semantically significant. | ||||
| The "app:" namespace is reserved for future forward-compatible | Atom Publishing Protocol Documents MUST be well-formed XML. This | |||
| revisions of the Atom Publishing Protocol. Future versions of this | specification does not define any DTDs for Atom Protocol formats, and | |||
| specification could add new elements and attributes to the markup | hence does not require them to be "valid" in the sense used by XML. | |||
| vocabulary. Software written to conform to this version of the | ||||
| specification will not be able to process such markup correctly and, | ||||
| in fact, will not be able to distinguish it from markup error. For | ||||
| the purposes of this discussion, unrecognized markup from the Atom | ||||
| Publishing Protocol vocabulary will be considered "foreign markup". | ||||
| This specification also uses the prefix "atom:" for | 6.2 Document Extensibility | |||
| "http://www.w3.org/2005/Atom", the namespace name of the Atom | ||||
| Syndication Format [RFC4287]. | ||||
| 6.3 Use of xml:base and xml:lang | The namespace name "http://purl.org/atom/app#" is reserved for future | |||
| forward-compatible revisions of the document types. Future versions | ||||
| of this specification could add new elements and attributes. | ||||
| Software written to conform to this version of the specification will | ||||
| not be able to process such markup correctly and in fact will not be | ||||
| able to distinguish it from markup error. | ||||
| XML elements defined by this specification MAY have an xml:base | Unrecognized markup in an Atom Publishing Protocol document is | |||
| attribute [W3C.REC-xmlbase-20010627]. When xml:base is used, it | considered "foreign markup" as defined in [RFC4287]. | |||
| serves the function described in section 5.1.1 of URI Generic Syntax | ||||
| [RFC3986], establishing the base URI (or IRI) for resolving any | ||||
| relative references found within the effective scope of the xml:base | ||||
| attribute. | ||||
| Any element defined by this specification MAY have an xml:lang | Markup from other vocabularies ("foreign markup") can be used | |||
| attribute, whose content indicates the natural language for the | anywhere within a Category or Service Document unless it is | |||
| element and its descendents. The language context is only | explicitly forbidden. Processors that encounter foreign markup MUST | |||
| significant for elements and attributes declared to be "Language- | NOT stop processing or signal an error, and SHOULD preserve foreign | |||
| Sensitive" by this specification. Requirements regarding the content | markup when transmitting such documents. | |||
| and interpretation of xml:lang are specified in Section 2.12 of XML | ||||
| 1.0 [W3C.REC-xml-20040204]. | ||||
| appCommonAttributes = | ||||
| attribute xml:base { atomUri }?, | ||||
| attribute xml:lang { atomLanguageTag }?, | ||||
| undefinedAttribute* | ||||
| 6.4 RELAX NG Schema | 7. Category Documents | |||
| Some sections of this specification are illustrated with fragments of | Category Documents contain lists of categories described using the | |||
| a non-normative RELAX NG Compact schema [RNC]. A complete schema | "atom:category" element from the Atom Syndication Format [RFC4287]. | |||
| appears in Appendix B. However, the text of this specification | Categories can also appear in Service Documents and describe the | |||
| provides the definition of conformance. | categories allowed in a Collection (see Section 8.2.5). | |||
| 7. Introspection Documents | Category Documents are identified with the "application/atomcat+xml" | |||
| media type (see Section 15). | ||||
| 7.1 Example | ||||
| <?xml version="1.0" ?> | ||||
| <app:categories | ||||
| xmlns:app="http://purl.org/atom/app#" | ||||
| xmlns="http://www.w3.org/2005/Atom" | ||||
| fixed="yes" scheme="http://example.com/cats/big3"> | ||||
| <category term="animal" /> | ||||
| <category term="vegetable" /> | ||||
| <category term="mineral" /> | ||||
| </app:categories> | ||||
| This Category Document contains three categories with the terms | ||||
| "animal", "vegetable", and "mineral". None of the categories has a | ||||
| label attribute (as defined in [RFC4287]). They all inherit the | ||||
| "http://example.com/cats/big3" category 'scheme' (in the [RFC4287] | ||||
| sense) declared on the app:categories element. Therefore if the | ||||
| "mineral" category were to appear in an Atom Entry or Feed Document, | ||||
| it would appear as: | ||||
| <category scheme="http://example.com/cats/big3" term="mineral" /> | ||||
| 7.2 Element Definitions | ||||
| 7.2.1 The "app:categories" element | ||||
| The root of a Category Document is the "app:categories" element. An | ||||
| app:categories element MAY contain one or more "atom:category" | ||||
| elements from the Atom namespace ("http://www.w3.org/2005/Atom"). | ||||
| If an app:category child element has no "scheme" attribute it | ||||
| inherits the attribute from its app:categories parent. An app: | ||||
| category child element with an existing "scheme" attribute does not | ||||
| inherit the "scheme" value of its "app:categories" parent element. | ||||
| 7.2.1.1 Attributes of "app:categories" | ||||
| The app:categories element MAY contain a "fixed" attribute, with a | ||||
| value of either "yes" or "no", indicating if the list of categories | ||||
| is a fixed or an open set. Collections that indicate the set is | ||||
| fixed MAY reject members whose categories are not listed in the | ||||
| Collection Document. Collections that indicate the set is open | ||||
| SHOULD NOT reject otherwise acceptable members whose categories are | ||||
| not listed in the Collection. | ||||
| Alternatively, the app:categories element MAY contain an "href" | ||||
| attribute, whose value MUST be an IRI reference identifying a | ||||
| Category Document. If the "href" attribute is provided, the app: | ||||
| categories element MUST be empty and MUST NOT have the "fixed" or | ||||
| "scheme" attributes. | ||||
| atomCategory = | ||||
| element atom:category { | ||||
| atomCommonAttributes, | ||||
| attribute term { text }, | ||||
| attribute scheme { atomURI }?, | ||||
| attribute label { text }?, | ||||
| undefinedContent | ||||
| } | ||||
| appInlineCategories = | ||||
| element app:categories { | ||||
| attribute fixed { "yes" | "no" }?, | ||||
| attribute scheme { atomURI }?, | ||||
| (atomCategory*) | ||||
| } | ||||
| appOutOfLineCategories = | ||||
| element app:categories { | ||||
| attribute href { atomURI }, | ||||
| (empty) | ||||
| } | ||||
| appCategories = appInlineCategories | appOutOfLineCategories | ||||
| 8. Service Documents | ||||
| For authoring to commence, a client needs to first discover the | For authoring to commence, a client needs to first discover the | |||
| capabilities and locations of the available collections. | capabilities and locations of the available collections. Service | |||
| Introspection documents are designed to support this discovery | Documents are designed to support this discovery process. | |||
| process. An Introspection Document describes workspaces, which are | ||||
| server-defined groupings of collections. | ||||
| Introspection documents are identified with the "application/ | A Service Document describes workspaces, which are server-defined | |||
| atomserv+xml" media type (see Section 14). | groupings of Collections. Service Documents are identified with the | |||
| "application/atomserv+xml" media type (see Section 15). | ||||
| While an introspection document allows multiple workspaces, there is | There is no requirement that a server support multiple workspaces. | |||
| no requirement that a server support multiple workspaces. In | In addition, a Collection MAY appear in more than one Workspace. | |||
| addition, a collection MAY appear in more than one workspace. | ||||
| 7.1 Example | 8.1 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#" | |||
| <workspace title="Main Site" > | xmlns:atom="http://www.w3.org/2005/Atom"> | |||
| <workspace> | ||||
| <atom:title>Main Site</atom:title> | ||||
| <collection | <collection | |||
| title="My Blog Entries" | href="http://example.org/reilly/main" > | |||
| href="http://example.org/reilly/main" /> | <atom:title>My Blog Entries</atom:title> | |||
| <categories | ||||
| href="http://example.com/cats/forMain.cats" /> | ||||
| </collection> | ||||
| <collection | <collection | |||
| title="Pictures" | ||||
| href="http://example.org/reilly/pic" > | href="http://example.org/reilly/pic" > | |||
| <atom:title>Pictures</atom:title> | ||||
| <accept>image/*</accept> | <accept>image/*</accept> | |||
| </collection> | </collection> | |||
| </workspace> | </workspace> | |||
| <workspace title="Side Bar Blog"> | <workspace> | |||
| <collection title="Remaindered Links" | <atom:title>Side Bar Blog</atom:title> | |||
| href="http://example.org/reilly/list" /> | <collection | |||
| href="http://example.org/reilly/list" > | ||||
| <atom:title>Remaindered Links</atom:title> | ||||
| <accept>entry</accept> | ||||
| <categories fixed="yes"> | ||||
| <atom:category | ||||
| scheme="http://example.org/extra-cats/" | ||||
| term="joke" /> | ||||
| <atom:category | ||||
| scheme="http://example.org/extra-cats/" | ||||
| term="serious" /> | ||||
| </categories> | ||||
| </collection> | ||||
| </workspace> | </workspace> | |||
| </service> | </service> | |||
| This Introspection Document describes two workspaces. The first, | This Service Document describes two workspaces. The first Workspace | |||
| called "Main Site", has two collections called "My Blog Entries" and | is called "Main Site", has two collections called "My Blog Entries" | |||
| "Pictures" whose IRIs are "http://example.org/reilly/main" and | and "Pictures" whose IRIs are "http://example.org/reilly/main" and | |||
| "http://example.org/reilly/pic" respectively. The "Pictures" | "http://example.org/reilly/pic" respectively. The "Pictures" | |||
| includes an accept element indicating that client can post image | Workspace includes an "accept" element indicating that a client can | |||
| files to the collection to create new entries. Entries with | post image files to the Collection to create new entries. Entries | |||
| associated media resources are discussed in section 8.3. | with associated media resources are discussed in Section 9.5. | |||
| The second workspace is called "Side Bar Blog" and has a single | The second Workspace is called "Side Bar Blog" and has a single | |||
| collection called "Remaindered Links" whose collection IRI is | Collection called "Remaindered Links" whose IRI is | |||
| "http://example.org/reilly/list". | "http://example.org/reilly/list". | |||
| 7.2 Element Definitions | Within each of the two entry collections, the categories element | |||
| provides a list of available categories for member entries. In the | ||||
| "My Blog Entries" Collection, the list of available categories is | ||||
| obtainable through the "href" attribute. The "Side Bar Blog" | ||||
| Collection provides a category list within the Service Document, but | ||||
| states the list is fixed, signaling a request from the server that | ||||
| entries be posted using only those two categories. | ||||
| 7.2.1 The "app:service" Element | 8.2 Element Definitions | |||
| The root of an introspection document is the "app:service" element. | 8.2.1 The "app:service" Element | |||
| The "app:service" element is the container for introspection | The root of a Service Document is the "app:service" element. | |||
| information associated with one or more workspaces. An app:service | ||||
| element MUST contain one or more app:workspace elements. | The "app:service" element is the container for service information | |||
| associated with one or more workspaces. An app:service element MUST | ||||
| 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* ) | |||
| } | } | |||
| 7.2.2 The "app:workspace" Element | 8.2.2 The "app:workspace" Element | |||
| The "app:workspace" element contains information elements about the | The "app:workspace" element contains information elements about the | |||
| collections of resources available for editing. The app:workspace | collections of resources available for editing. The app:workspace | |||
| element MAY contain zero or more app:collection elements. | element contains zero or more app:collection elements. | |||
| appWorkspace = | appWorkspace = | |||
| element app:workspace { | element app:workspace { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| attribute title { text }, | ( appCollection* | |||
| ( appCollection+ | ||||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| atomTitle = element atom:title { atomTextConstruct } | ||||
| In an app:workspace element, the first app:collection element MUST | In an app:workspace element, the first app:collection element MUST | |||
| refer to the preferred or primary collection. In the following | refer to the preferred or primary Collection. In the following | |||
| example, the "Entries" collection would be considered the preferred | example, the "Entries" collection would be considered the preferred | |||
| collection: | Collection: | |||
| <service xmlns="http://purl.org/atom/app#"> | <service xmlns="http://purl.org/atom/app#" | |||
| <workspace title="My Blog"> | xmlns:atom="http://www.w3.org/2005/Atom"> | |||
| <collection title="Entries" | <workspace> | |||
| href="http://example.org/myblog/entries" /> | <atom:title>My Blog</atom:title> | |||
| <collection title="Photos" | <collection | |||
| href="http://example.org/myblog/entries" > | ||||
| <atom:title>Entries</atom:title> | ||||
| </collection> | ||||
| <collection | ||||
| href="http://example.org/myblog/fotes"> | href="http://example.org/myblog/fotes"> | |||
| <atom:title>Photos</atom:title> | ||||
| <accept>image/*</accept> | <accept>image/*</accept> | |||
| </collection> | </collection> | |||
| </workspace> | </workspace> | |||
| </service> | </service> | |||
| 7.2.2.1 The "title" Attribute | 8.2.2.1 The "atom:title" Element | |||
| The app:workspace element MUST contain a "title" attribute, which | The app:workspace element MUST contain one "atom:title" element, | |||
| gives a human-readable name for the workspace. This attribute is | giving a human-readable title for the workspace. | |||
| Language-Sensitive. | ||||
| 7.2.3 The "app:collection" Element | 8.2.3 The "app:collection" Element | |||
| The "app:collection" describes an Atom Protocol collection. One | The "app:collection" element describes a Collection. The app: | |||
| child element is defined here for app:collection: "app:accept". | collection element MAY contain one app:accept element and MAY contain | |||
| any number of app:categories elements. The app:collection element | ||||
| MUST NOT contain more that one app:accept element. | ||||
| appCollection = | appCollection = | |||
| element app:collection { | element app:collection { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| attribute title { text }, | attribute href { atomURI }, | |||
| attribute href { atomUri }, | ||||
| ( appAccept? | ( appAccept? | |||
| & appCategories* | ||||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| In an Atom feed, the app:collection element MAY appear as a child of | 8.2.3.1 Usage in Atom Feed Documents | |||
| an atom:feed or atom:source element to identify the collection to | ||||
| which new entries can be added to the feed. | ||||
| 7.2.3.1 The "title" Attribute | The app:collection element MAY appear as a child of an atom:feed or | |||
| atom:source element in an Atom Feed Document. Its value identifies a | ||||
| Collection by which new entries can be added to appear in the feed. | ||||
| The app:collection element MUST contain a "title" attribute, whose | 8.2.3.2 The "href" Attribute | |||
| value gives a human-readable name for the collection. This attribute | ||||
| is Language-Sensitive. | ||||
| 7.2.3.2 The "href" Attribute | The app:collection element MUST contain an "href" attribute, whose | |||
| value gives the IRI of the Collection. | ||||
| The app:collection element MUST contain a "href" attribute, whose | 8.2.3.3 The "atom:title" Element | |||
| value gives the IRI of the collection. | ||||
| 7.2.4 The "app:accept" Element | The app:collection Element MUST contain one "atom:title" element, | |||
| giving a human-readable title for the Workspace. | ||||
| The app:collection element MAY contain one "app:accept" element. The | 8.2.4 The "app:accept" Element | |||
| app:accept element value specifies a comma-separated list of media- | ||||
| ranges [RFC2616] identifying the types of representations that can be | The "app:accept" element value specifies a comma-separated list of | |||
| POSTed to the Collection's URI. Whitespace separating the media- | media-ranges (see [RFC2616]) identifying the types of representations | |||
| range values is considered insignificant and MUST be ignored. | that can be POSTed to the URI of a Collection. Whitespace separation | |||
| of the media-range values is considered 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] with the exception that app:accept has no notion of | |||
| preference. Accordingly, the value syntax of app:accept does not use | preference. As a result, the value syntax of app:accept does not use | |||
| accept-params or "q" parameters as specified in [RFC2616], section | "accept-params" or "q" arguments as specified in [RFC2616], section | |||
| 14.1. The order of media-ranges is not significant. The following | 14.1. | |||
| lists are all equivalent: | ||||
| The order of media-ranges is not significant. The following lists | ||||
| are all equivalent: | ||||
| <app:accept>image/png, image/*</app:accept> | <app:accept>image/png, image/*</app:accept> | |||
| <app:accept>image/*, image/png</app:accept> | <app:accept>image/*, image/png</app:accept> | |||
| <app:accept>image/*</app:accept> | <app:accept>image/*</app:accept> | |||
| A value of "entry" may appear in any list of media-ranges in an | ||||
| A value of "entry" indicates that Atom Entry Documents can be posted | accept element and indicates that Atom Entry Documents can be posted | |||
| to the Collection. If the accept element is omitted, or empty, | to the Collection. If the accept element is omitted or empty, | |||
| clients SHOULD assume that only Atom Entry documents will be accepted | clients SHOULD assume that only Atom Entry documents will be accepted | |||
| by the collection. | by the Collection. | |||
| appAccept = | appAccept = | |||
| element app:accept { | element app:accept { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( appTypeValue? ) | ( appTypeValue? ) | |||
| } | } | |||
| appTypeValue = ( "entry" | media-type |entry-or-media-type ) | appTypeValue = ( "entry" | media-type |entry-or-media-type ) | |||
| media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | |||
| entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | |||
| 8. Collections | 8.2.5 The "app:categories" Element | |||
| 8.1 Creating resources with POST | The "app:categories" element provides a listing of the categories | |||
| that can be applied to the members of a Collection. | ||||
| To add members to a collection, clients send POST requests to the | atomCategory = | |||
| collection's URI. Collections MAY impose constraints on the media- | element atom:category { | |||
| types of request entities POSTed to the collection and MAY generate a | atomCommonAttributes, | |||
| attribute term { text }, | ||||
| attribute scheme { atomURI }?, | ||||
| attribute label { text }?, | ||||
| undefinedContent | ||||
| } | ||||
| appInlineCategories = | ||||
| element app:categories { | ||||
| attribute fixed { "yes" | "no" }?, | ||||
| attribute scheme { atomURI }?, | ||||
| (atomCategory*) | ||||
| } | ||||
| appOutOfLineCategories = | ||||
| element app:categories { | ||||
| attribute href { atomURI }, | ||||
| (empty) | ||||
| } | ||||
| appCategories = appInlineCategories | appOutOfLineCategories | ||||
| The app:categories element MAY contain a "fixed" attribute, with a | ||||
| value of either "yes" or "no", indicating whether or not the listing | ||||
| of categories is considered to be a fixed, or closed set. The | ||||
| absence of the "fixed" attribute is equivalent to the presence of a | ||||
| "fixed" attribute with a value of "no". Collections that indicate a | ||||
| fixed set MAY reject members that include categories not specified in | ||||
| the provided listing. Collections that indicate an open set SHOULD | ||||
| NOT reject otherwise acceptable members whose categories are not | ||||
| present in the provided list. | ||||
| The app:categories element MAY contain an "href" attribute, whose | ||||
| value MUST be an IRI reference identifying a Category Document. If | ||||
| the "href" attribute is provided, the app:categories element MUST be | ||||
| empty and the "fixed" and "scheme" attributes MUST NOT be present. | ||||
| 9. Creating and Editing Resources | ||||
| 9.1 Member URIs | ||||
| The Member URI supports retrieving, updating and deleting the | ||||
| resource using HTTP GET, PUT and DELETE as described in this section. | ||||
| Retrieval and updating of Member Entry Resources are done via Atom | ||||
| Entry representations. | ||||
| Member Entry URIs appear in two places. First, they are returned in | ||||
| a Location header after successful resource creation using POST, as | ||||
| described below. Second, in the entries of a Collection document, by | ||||
| an atom:link element with a link relation of "edit". | ||||
| Each Member Entry SHOULD contain such an atom:link element providing | ||||
| its Member Entry URI. | ||||
| 9.2 Creating resources with POST | ||||
| To add members to a Collection, clients send POST requests to the URI | ||||
| of a Collection. Collections MAY impose constraints on the media- | ||||
| types of request entities POSTed to the Collection and MAY generate a | ||||
| response with a status code of 415 ("Unsupported Media Type"). | response with a status code of 415 ("Unsupported Media Type"). | |||
| If an entry was created in the collection which received the POST, | If a Member Resource was created in the Collection which received the | |||
| its URI MUST be returned in an HTTP Location header. | POST, its Member Entry URI MUST be returned in an HTTP Location | |||
| header. | ||||
| When the server generates a response with a status code of 201 | When the server generates a response with a status code of 201 | |||
| ("Created"), it SHOULD also return a response body, which, if | ("Created"), it SHOULD also return a response body, which if | |||
| provided, MUST be an Atom Entry Document representing the newly- | provided, MUST be an Atom Entry Document representing the newly- | |||
| created resource. Clients MUST NOT assume that an Atom Entry | created resource, and SHOULD include its Member Entry URI in an atom: | |||
| returned is a full representation of the member resource. | link element that has a relation of "edit". | |||
| Since the server is free to alter the posted entry, for example by | Since the server is free to alter the posted entry, for example by | |||
| changing the content of the "id" element. returning the entry as | changing the content of the "id" element, returning the Entry as | |||
| described in the previous paragraph can be useful to the client, | described in the previous paragraph can be useful to the client, | |||
| enabling it to correlate the client and server views of the new | enabling it to correlate the client and server views of the new | |||
| entry. | Entry. | |||
| When the POST request contains an Atom Entry Document, the response | When the POST request contains an Atom Entry Document, the response | |||
| from the server SHOULD contain a Content-Location header that | from the server SHOULD contain a Content-Location header that | |||
| contains the same character-by-character value as the Location | contains the same character-by-character value as the Location | |||
| header. | header. | |||
| Clients MUST NOT assume that the URI provided by the Location header | The request body sent with the POST need not be an Atom Entry. For | |||
| can be used to edit the created entry. | example, it might be a picture, or a movie. For a discussion of the | |||
| issues in posting such content, see Section 9.5. | ||||
| The request body of the POST need not be an Atom entry. For example, | ||||
| it might be a picture, or a movie. For a discussion of the issues in | ||||
| posting such content, see Section 8.4. | ||||
| 8.2 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 to the URI of the Collection: | |||
| POST /myblog/entries HTTP/1.1 | POST /myblog/entries HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| User- Agent: Thingio/1.0 | User- Agent: Thingio/1.0 | |||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | ||||
| Content- Type: application/atom+xml | Content- Type: application/atom+xml | |||
| Content- Length: nnn | Content- Length: nnn | |||
| 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" | |||
| xmlns:app="http://purl.org/atom/app#"> | ||||
| <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 URI of the | The response includes a "Location" header indicating the Member Entry | |||
| Atom Entry and a representation of that Entry in the body of the | URI of the Atom Entry and a representation of that Entry in the body | |||
| 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; charset="utf-8" | |||
| Content- Location: http://example.org/edit/first-post.atom | Content- Location: http://example.org/edit/first-post.atom | |||
| Location: http://example.org/edit/first-post.atom | Location: http://example.org/edit/first-post.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" | |||
| xmlns:app="http://purl.org/atom/app#"> | ||||
| <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 server might not match the | ||||
| Note that the Entry created by the server might not match exactly the | Entry POSTed by the client. A server MAY change the values of | |||
| Entry POSTed by the client. In particular, a server MAY change the | various elements in the Entry such as the atom:id, atom:updated and | |||
| values of various elements in the Entry such as the atom:id, atom: | atom:author values and MAY choose to remove or add other elements and | |||
| updated and atom:author values and MAY choose to remove or add other | attributes, or change element and attribute values. | |||
| elements and attributes, or change element and attribute values. | ||||
| In particular, the publishing system in this example filled in some | In particular, the publishing system in this example filled in some | |||
| values not provided in the original POST. For example, presumably it | values not provided in the original POST. For example, it | |||
| ascertained the author's name via the authentication protocol used to | ascertained the name of the author, presumably via the authentication | |||
| establish the right to post. | protocol used to establish the right to post. | |||
| 8.3 The 'edit' Link | 9.3 Updating Resources with PUT | |||
| Each member Entry within a collection SHOULD contain an atom:link | To update a resource, clients send PUT requests to its Member URI, as | |||
| element with a link relation of "edit" that contains the IRI used to | specified in [RFC2616]. | |||
| retrieve, update or delete the member Entry. | ||||
| 8.4 Media Resources and Media Link Entries | To avoid unintentional loss of data when editing Member Entries or | |||
| Media Link Entries, Atom Protocol clients SHOULD preserve all | ||||
| metadata that has not been intentionally modified, including unknown | ||||
| foreign markup as defined in Section 6 of [RFC4287]. | ||||
| As discussed above, if the body of a client's POST is an Atom Entry | 9.4 Deleting Resources with DELETE | |||
| document, this constitutes a request that the server create a new | ||||
| entry in the collection to which the POST is addressed and return its | ||||
| URI. | ||||
| If the body of the client's POST is of a media type other than | To delete a resource, clients send DELETE requests to its Member URI, | |||
| application/atom+xml, this constitutes a request that the server | as specified in [RFC2616]. For Media Resources, deletion of a Media | |||
| create a new resource as represented by the body of the post, called | Link Entry SHOULD result in the deletion of the associated Media | |||
| a "media resource", and also an entry in the collection to which the | Resource. | |||
| POST was addressed, called a "media link entry", and return both | ||||
| URIs. If the server successfully creates a media resource and media | ||||
| link entry pair, the Location header included in the response MUST be | ||||
| that of the media link entry. The media link entry MUST have a | ||||
| "content" element with a "src" attribute which links to the media | ||||
| resource. | ||||
| The intent is that the media link entry be used to store metadata | 9.5 Media Resources and Media Link Entries | |||
| about the (perhaps non-textual) media resource, so that the media and | ||||
| the metadata can be retrieved and updated separately. | ||||
| A media link entry SHOULD contain an atom:link element with a link | A client can POST a media type other than application/atom+xml to a | |||
| relation of "edit-media" that contains the IRI used to modify the | Collection. Such a request creates two new resources - one that | |||
| media resource. Deletion of a media link entry SHOULD result in the | corresponds to the entity sent in the request, called the Media | |||
| deletion of the linked media resource. | Resource, and an associated Member Entry, called the Media Link | |||
| Entry. The server can signal the media types it will accept via the | ||||
| "accept" element in the Service Document (Section 8.2.4). | ||||
| Implementors will note that per the requirements of [RFC4287], media | The Media Link Entry contains the IRI of the Media Resource and makes | |||
| link entries MUST contain an atom:summary element. Upon successful | metadata about it separately available for retrieval and update. The | |||
| creation of a media link entry, a server MAY choose to populate the | Media Link Entry is used to store metadata about the (perhaps non- | |||
| atom:summary element (as well as other required elements such as | textual) Media Resource. | |||
| atom:id, atom:author and atom:title) with content derived from the | ||||
| POSTed media resource or from any other source. A server might not | ||||
| allow a client to modify the server selected values for these | ||||
| elements. | ||||
| Note that this specification covers the cases when the POST body is | Successful responses to creation requests MUST include the URI of the | |||
| an Atom Entry, and when it is of a non-Atom media type. It does not | Media Link Entry in the Location header. The Media Link Entry SHOULD | |||
| specify any request semantics or server behavior in the case where | contain an atom:link element with a link relation of "edit-media" | |||
| the POST media-type is application/atom+xml but the body is something | that contains the Media Resource IRI. The Media Link Entry MUST have | |||
| other than an Atom Entry. | an "atom:content" element with a non-empty "src" attribute. The | |||
| value of the "src" attribute is an IRI of the newly created Media | ||||
| Resource. It is OPTIONAL that the IRI of the "src" attribute on the | ||||
| atom:content element be the same as the Media Resource IRI. That is, | ||||
| the "src" attribute value might instead be a link into a static cache | ||||
| or content distribution network and not be the Media Resource IRI. | ||||
| 8.4.1 Title: Header | Implementers are asked to note that according to the requirements of | |||
| [RFC4287], entries, and thus Media Link Entries, MUST contain an | ||||
| atom:summary element. Upon successful creation of a Media Link | ||||
| Entry, a server MAY choose to populate the atom:summary element (as | ||||
| well as other required elements such as atom:id, atom:author and | ||||
| atom:title) with content derived from the POSTed entity or from any | ||||
| other source. A server might not allow a client to modify the server | ||||
| selected values for these elements. | ||||
| A POST whose body is not of the Atom media type and which thus | For resource creation this specification only defines cases where the | |||
| requests the creation of a media resource SHOULD contain a Title: | POST body has an Atom Entry entity declared as an Atom media type | |||
| header indicating the client's suggested title for the resource. For | ("application/atom+xml"), or a non-Atom entity declared as a non-Atom | |||
| example: | media type. It does not specify any request semantics or server | |||
| behavior in the case where 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. | ||||
| POST /myblog/fotes HTTP/1.1 | 9.6 The Slug: Header | |||
| Host: example.org | ||||
| Content- Type: image/png | ||||
| Content- Length: nnnn | ||||
| Title: An Atom-Powered Robot | ||||
| ...binary data... | Slug is a HTTP entity-header whose value is a "slug", i.e. a short | |||
| name that can be used as part of URI for a Member Resource. | ||||
| The server MAY use the content of the Title: header, as provided or | When posting an entity to a Collection to add a new Member, the | |||
| in a modified form, in constructing a title for the resource, which | server MAY use this information when creating the Member URI of the | |||
| would presumably appear in the media link entry. | newly-created resource, for instance by using some or all of the | |||
| words in the last URI segment. It MAY also use it when creating the | ||||
| atom:id or as the title of a Media Link Entry (see Section 9.5.). | ||||
| Title = "Title" ":" [TEXT] | Servers MAY ignore the Slug entity-header and MAY alter its value | |||
| before using it. For example, the server MAY filter out some | ||||
| characters or replace accented letters with non-accented ones, spaces | ||||
| with underscores, etc. | ||||
| 9.6.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. Words of | rule is described in section 2.2 of the same document. | |||
| *TEXT MAY contain characters from character sets other than | ||||
| [ISO88591] only when encoded according to the rules of [RFC2047]. | ||||
| 8.4.2 Example | Slug = "Slug" ":" *TEXT | |||
| Clients MAY send non-ASCII characters in the Slug entity-header, | ||||
| which they MUST encode using "encoded-words", as defined in | ||||
| [RFC2047]. Servers SHOULD treat the slug as [RFC2047] encoded if it | ||||
| matches the "encoded-words" production. | ||||
| 9.6.2 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 the Collection: | URI of the Collection: | |||
| 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: The Beach | ||||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | ||||
| Content- Length: nnn | Content- Length: nnn | |||
| Title: A picture of the beach | ||||
| ...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 URI of the | The response includes a Location header indicating the Member URI of | |||
| media link entry and a representation of that entry in the body of | the Media Link Entry and a representation of that entry in the body | |||
| the response. The media link entry includes a content element with a | of the response. The Media Link Entry includes a content element | |||
| src attribute referencing the media resource, and a link using the | with a src attribute, and a link using the link relation "edit-media" | |||
| link relation "edit-media" specifying the IRI to be used for | specifying the IRI to be used for modifying the Media Resource. | |||
| modifying the 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; charset="utf-8" | |||
| Content- Location: http://example.org/edit/first-post.atom | Content-Location: http://example.org/myblog/edit/the_beach | |||
| Location: http://example.org/edit/first-post.atom | Location: http://example.org/myblog/edit/the_beach | |||
| <?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 picture of 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>2003-12-13T18:30:02Z</updated> | <updated>2005-10-07T17:17:08Z</updated> | |||
| <author><name>John Doe</name></author> | <author><name>Daffy</name></author> | |||
| <summary type="text" /> | <summary type="text" /> | |||
| <content type="image/png" | <content type="image/png" | |||
| src="http://example.org/media/img123.png"/> | src="http://example.org/media/the_beach.png"/> | |||
| <link rel="edit" | ||||
| href="http://example.org/edit/first-post.atom" /> | ||||
| <link rel="edit-media" | <link rel="edit-media" | |||
| href="http://example.org/edit/img123.png" /> | href="http://example.org/media/edit/the_beach.png" /> | |||
| <link rel="edit" | ||||
| href="http://example.org/myblog/edit/the_beach /> | ||||
| </entry> | </entry> | |||
| Here is an example of the Slug: header that uses the encoding rules | ||||
| of [RFC2047]. | ||||
| 8.5 Editing Entries with Foreign Markup | POST /myblog/entries HTTP/1.1 | |||
| Host: example.org | ||||
| Content-Type: image/png | ||||
| Slug: =?iso-8859-1?q?The_Beach?= | ||||
| Authorization: Basic ZGFmZnk6c2VjZXJldA== | ||||
| Content-Length: nnn | ||||
| To avoid unintentional loss of data when editing entries or media | ...binary data... | |||
| link entries, Atom Protocol clients SHOULD preserve all metadata, | ||||
| including unknown foreign markup as defined in Section 6 of | ||||
| [RFC4287], which has not been intentionally modified. | ||||
| 9. Listing Collections | See Section 9.2.1 for an example of the Slug: header applied to the | |||
| creation of a Member Entry Resource. | ||||
| 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 represent the collection's members. | Feed documents whose entries represent the Members in the Collection. | |||
| 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 10.1). | a relation of "edit" (See Section 11.1). | |||
| The entries in the returned Atom Feed MUST be ordered by their "atom: | The entries in the returned Atom Feed MUST be ordered by their "atom: | |||
| updated" property, with the most recently updated entries coming | updated" property, with the most recently updated entries coming | |||
| first in the document order. Clients SHOULD be constructed in | first in the document order. Clients SHOULD be constructed in | |||
| consideration of the fact that changes which do not alter the entry's | consideration of the fact that changes which do not alter the atom: | |||
| atom:updated value will not affect the position of the entry in a | updated value of an entry will not affect the position of the entry | |||
| collection. | in a Collection. | |||
| 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 a member resource and SHOULD perform a GET on | full representation of a Member Entry Resource and SHOULD perform a | |||
| the member resource before editing. | GET on the URI of the Member Entry before editing. | |||
| 10.1 Collection Paging | ||||
| Collections can contain large numbers of resources. A naive client | Collections can contain large numbers of resources. A naive client | |||
| such as a web spider or web browser could be overwhelmed if the | such as a web spider or web browser could be overwhelmed if the | |||
| response to a GET contained every entry in the collection, and the | response to a GET contained every entry in the Collection, and the | |||
| server would waste large amounts of bandwidth and processing time on | server would waste large amounts of bandwidth and processing time on | |||
| clients unable to handle the response. For this reason, servers MAY | clients unable to handle the response. For this reason, servers MAY | |||
| return a partial listing containing the most recently updated member | return a partial listing of the most recently updated Member | |||
| resources. Such partial feed documents MUST have an atom:link with a | Resources. Such partial feed documents MUST have an atom:link with a | |||
| "next" relation whose "href" value is the URI of the next partial | "next" relation whose "href" value is the URI of the next partial | |||
| listing of the collection (the least recently updated member | listing of the Collection (the next most recently updated Member | |||
| resources) where it exists. This is called "collection paging". | Resources) where it exists. This is called "Collection paging". | |||
| 9.1 Collection Paging | ||||
| The returned Atom feed MAY NOT contain entries for all the | The returned Atom Feed MAY NOT contain entries for all the Members in | |||
| collection's members. Instead, the Atom feed document MAY contain | a Collection. Instead, the Atom Feed document MAY contain link | |||
| link elements with "rel" attribute values of "next", "previous", | elements with "rel" attribute values of "next", "previous", "first" | |||
| "first" and "last" that can be used to navigate through the complete | and "last" that can be used to navigate through the complete set of | |||
| set of matching entries. | matching entries. | |||
| 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 'page' in a set of | for the Collection will then represent the first 'page' in a set of | |||
| 10 linked feed documents. The "first" relation will reference the | 10 linked feed documents. The "first" relation will reference the | |||
| initial feed document in the set and the "last" relation references | initial feed document in the set and the "last" relation references | |||
| the final feed document in the set. Within each document, the "next" | the final Atom Feed Document in the set. Within each document, the | |||
| and "previous" link relations reference the preceding and subsequent | "next" and "previous" link relations reference the preceding and | |||
| 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 24, line 5 | skipping to change at page 30, line 5 | |||
| href="http://example.org/entries/go" /> | href="http://example.org/entries/go" /> | |||
| <link rel="previous" | <link rel="previous" | |||
| 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. Atom Format Link Relation Extensions | 11. Atom Format Link Relation Extensions | |||
| 10.1 The "edit" Link Relation | 11.1 The "edit" Link Relation | |||
| The Atom Protocol 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 Atom Entry Document. When appearing within an atom:entry, | editable Member Entry. When appearing within an atom:entry, the href | |||
| the href IRI MAY be used to update and delete the resource | IRI MAY 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 contain no more than | |||
| one "edit" link relation. | one "edit" link relation. | |||
| 10.2 The "edit-media" Link Relation | 11.2 The "edit-media" Link Relation | |||
| The Atom Protocol adds the value "edit-media" to the Atom Registry 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 MAY be | ||||
| used to modify a media resource associated with that entry. | ||||
| An atom:entry MAY contain zero or more "edit-media" link relations. | This specification adds the value "edit-media" to the Atom Registry | |||
| An atom:entry MUST NOT contain more than one atom:link element with a | of Link Relations (see section 7.1 of [RFC4287]). When appearing | |||
| rel attribute value of "edit-media" that has the same type and | within an atom:entry, the value of the href attribute is an IRI that | |||
| hreflang attribute values. All "edit-media" link relations in the | MAY be used to modify a Media Resource associated with that entry. | |||
| same entry reference the same resource. If a client encounters | ||||
| multiple "edit-media" link relations in an entry then it SHOULD | ||||
| choose a link based on the client preferences for type and hreflang. | ||||
| If a client encounters multiple "edit-media" link relations in an | ||||
| entry and has no preference based on the type and hreflang attributes | ||||
| then the client SHOULD pick the first "edit-media" link relation in | ||||
| document order. | ||||
| 11. Atom Publishing Control Extensions | An atom:entry element MAY contain zero or more "edit-media" 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 | ||||
| type and hreflang attribute values. All "edit-media" link relations | ||||
| in the same entry reference the same resource. If a client | ||||
| encounters multiple "edit-media" link relations in an entry then it | ||||
| SHOULD choose a link based on the client preferences for type and | ||||
| hreflang. If a client encounters multiple "edit-media" link | ||||
| relations in an entry and has no preference based on the type and | ||||
| hreflang attributes then the client SHOULD pick the first "edit- | ||||
| media" link relation in document order. | ||||
| 11.1 The Atom Publishing Control Namespace | 12. Atom Publishing Controls | |||
| This specification defines an Atom Format extension for publishing | This specification defines an Atom Format Structured Extension, as | |||
| control called Atom Publishing Control. The namespace name for the | defined in Section 6 of [RFC4287], for publishing control within the | |||
| Atom Publishing Control's XML vocabulary is | http://purl.org/atom/app# namespace. | |||
| "http://example.net/appns/". This specification uses "pub:" for the | ||||
| namespace prefix. The choice of namespace prefix is not semantically | ||||
| significant. | ||||
| 11.2 The "pub:control" Element | 12.1 The "app:control" Element | |||
| namespace pub = "http://example.net/appns/" | namespace app = "http://purl.org/atom/app#" | |||
| pubControl = | pubControl = | |||
| element pub:control { | element app:control { | |||
| atomCommonAttributes, | atomCommonAttributes, | |||
| pubDraft? | pubDraft? | |||
| & extensionElement | & extensionElement | |||
| } | } | |||
| pubDraft = | pubDraft = | |||
| element pub:draft { "yes" | "no" } | element app:draft { "yes" | "no" } | |||
| The "pub:control" element MAY appear as a child of an "atom:entry" | The "app:control" element MAY appear as a child of an atom:entry | |||
| which is being created or updated via the Atom Publishing Protocol. | which is being created or updated via the Atom Publishing Protocol. | |||
| The "pub:control" element, if it does appear in an entry, MUST only | The app:control element MUST appear only once in an Entry. The app: | |||
| appear at most one time. The "pub:control" element is considered | control element is considered foreign markup as defined in Section 6 | |||
| foreign markup as defined in Section 6 of [RFC4287]. | of [RFC4287]. | |||
| The "pub: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 "pub:control" element MAY contain exactly one "pub:draft" element | The app:control element MAY contain exactly one "app:draft" element | |||
| as defined here, and MAY contain zero or more extension elements as | as defined below, and MAY contain zero or more extension elements as | |||
| outlined in Section 6 of [RFC4287]. Both clients and servers MUST | defined in Section 6 of [RFC4287]. | |||
| ignore foreign markup present in the pub:control element. | ||||
| 11.2.1 The "pub:draft" Element | 12.1.1 The "app:draft" Element | |||
| The number of "pub:draft" elements in "pub:control" MUST be zero or | The number of app:draft elements in app:control MUST be zero or one. | |||
| one. Its value MUST be one of "yes" or "no". A value of "no" means | Its value MUST be one of "yes" or "no". A value of "no" indicates a | |||
| that the entry MAY be made publicly visible. If the "pub:draft" | client request that the Member Resource be made publicly visible. If | |||
| element is missing then the value MUST be understood to be "no". The | the app:draft element is missing then the value MUST be understood to | |||
| inclusion of the pub:draft element represents a request by the client | be "no". The inclusion of the app:draft element represents a request | |||
| to control the visibility of an entry and the pub:draft element MAY | by the client to control the visibility of a Member Resource and the | |||
| be ignored by the server. | app:draft element MAY be ignored by the server. | |||
| 12. Securing the Atom Protocol | 13. Securing the Atom Protocol | |||
| All instances of publishing Atom Format entries SHOULD be protected | All instances of publishing Atom Format entries SHOULD be protected | |||
| by authentication to prevent posting or editing by unknown sources. | by authentication to prevent posting or editing by unknown sources. | |||
| [[anchor22: note: this section is currently under discussion.]] | [[anchor23: note: this section is currently under discussion.]] | |||
| 13. Security Considerations | 14. Security Considerations | |||
| The security of the Atom Protocol is based on [[anchor24: note: | The security of the Atom Protocol is based on [[anchor25: note: | |||
| refers to incomplete section]]. | refers to incomplete section]]. | |||
| [[anchor25: note: talk here about denial of service attacks using | [[anchor26: note: talk here about denial of service attacks using | |||
| large XML files, or the billion laughs DTD attack.]] | large XML files, or the billion laughs DTD attack.]] | |||
| 14. IANA Considerations | 15. IANA Considerations | |||
| An Atom Publishing Protocol Introspection Document, when serialized | 15.1 Content-type registration for 'application/atomserv+xml' | |||
| as XML 1.0, can be identified with the following media type: | ||||
| An Atom Publishing Protocol Service Document, when serialized as XML | ||||
| 1.0, can be identified with the following media type: | ||||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: atomserv+xml | MIME subtype name: atomserv+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. | |||
| [[anchor26: update upon publication]] | [[anchor27: 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. [[anchor27: update upon | Published specification: This specification. [[anchor28: 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. | |||
| skipping to change at page 29, line 14 | skipping to change at page 35, line 16 | |||
| 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). [[anchor28: | Author/Change controller: This specification's author(s). [[anchor29: | |||
| update upon publication]] | update upon publication]] | |||
| 15. References | 15.2 Content-type registration for 'application/atomcat+xml' | |||
| 15.1 Normative References | An Atom Publishing Protocol Category Document, when serialized as XML | |||
| 1.0, can be identified with the following media type: | ||||
| [ISO88591] | MIME media type name: application | |||
| ISO, "International Standard -- Information Processing -- | ||||
| 8-bit Single-Byte Coded Graphic Character Sets -- Part 1: | MIME subtype name: atomcat+xml | |||
| Latin alphabet No. 1,", January 1987. | ||||
| Mandatory parameters: None. | ||||
| Optional parameters: | ||||
| "charset": This parameter has identical semantics to the charset | ||||
| parameter of the "application/xml" media type as specified in | ||||
| [RFC3023]. | ||||
| Encoding considerations: Identical to those of "application/xml" as | ||||
| described in [RFC3023], section 3.2. | ||||
| Security considerations: As defined in this specification. | ||||
| [[anchor30: update upon publication]] | ||||
| In addition, as this media type uses the "+xml" convention, it | ||||
| shares the same security considerations as described in [RFC3023], | ||||
| section 10. | ||||
| Interoperability considerations: There are no known interoperability | ||||
| issues. | ||||
| Published specification: This specification. [[anchor31: update upon | ||||
| publication]] | ||||
| Applications that use this media type: No known applications | ||||
| currently use this media type. | ||||
| Additional information: | ||||
| Magic number(s): As specified for "application/xml" in [RFC3023], | ||||
| section 3.2. | ||||
| File extension: .atomcat | ||||
| Fragment identifiers: As specified for "application/xml" in | ||||
| [RFC3023], section 5. | ||||
| Base URI: As specified in [RFC3023], section 6. | ||||
| Macintosh File Type code: TEXT | ||||
| Person and email address to contact for further information: Joe | ||||
| Gregorio <joe@bitworking.org> | ||||
| Intended usage: COMMON | ||||
| Author/Change controller: This specification's author(s). [[anchor32: | ||||
| update upon publication]] | ||||
| 16. References | ||||
| 16.1 Normative References | ||||
| [RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | [RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) | |||
| Part Three: Message Header Extensions for Non-ASCII Text", | Part Three: Message Header Extensions for Non-ASCII Text", | |||
| RFC 2047, November 1996. | RFC 2047, November 1996. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
| skipping to change at page 31, line 7 | skipping to change at page 38, line 5 | |||
| February 2004. | February 2004. | |||
| [W3C.REC-xml-names-19990114] | [W3C.REC-xml-names-19990114] | |||
| Hollander, D., Bray, T., and A. Layman, "Namespaces in | Hollander, D., Bray, T., and A. Layman, "Namespaces in | |||
| XML", W3C REC REC-xml-names-19990114, January 1999. | XML", W3C REC REC-xml-names-19990114, January 1999. | |||
| [W3C.REC-xmlbase-20010627] | [W3C.REC-xmlbase-20010627] | |||
| Marsh, J., "XML Base", W3C REC W3C.REC-xmlbase-20010627, | Marsh, J., "XML Base", W3C REC W3C.REC-xmlbase-20010627, | |||
| June 2001. | June 2001. | |||
| 15.2 Informative References | 16.2 Informative References | |||
| [RNC] Clark, J., "RELAX NG Compact Syntax", December 2001. | [RNC] Clark, J., "RELAX NG Compact Syntax", December 2001. | |||
| [W3C.REC-webarch-20041215] | [W3C.REC-webarch-20041215] | |||
| 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. | |||
| URIs | URIs | |||
| [1] <http://www.imc.org/atom-protocol/index.html> | [1] <http://www.imc.org/atom-protocol/index.html> | |||
| Authors' Addresses | Authors' Addresses | |||
| Joe Gregorio (editor) | Joe Gregorio (editor) | |||
| BitWorking, Inc | IBM | |||
| 1002 Heathwood Dairy Rd. | 4205 South Miama Blvd. | |||
| Apex, NC 27502 | Research Triangle Park, NC 27709 | |||
| US | US | |||
| Phone: +1 919 272 3764 | Phone: +1 919 272 3764 | |||
| Email: joe@bitworking.com | Email: joe@bitworking.org | |||
| URI: http://bitworking.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@propylon.com | |||
| URI: http://www.propylon.com/ | URI: http://www.propylon.com/ | |||
| skipping to change at page 34, line 15 | skipping to change at page 41, line 15 | |||
| 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]. | |||
| The Schema for Service Documents: | ||||
| # -*- rnc -*- | # -*- rnc -*- | |||
| # RELAX NG Compact Syntax Grammar for the Atom Protocol | # RELAX NG Compact Syntax Grammar for the Atom Protocol | |||
| namespace app = "http://purl.org/atom/app#" | namespace app = "http://purl.org/atom/app#" | |||
| namespace atom = "http://www.w3.org/2005/Atom" | ||||
| namespace xsd = "http://www.w3.org/2001/XMLSchema" | ||||
| namespace xhtml = "http://www.w3.org/1999/xhtml" | ||||
| namespace local = "" | namespace local = "" | |||
| start = appService | start = appService | |||
| # common:attrs | # common:attrs | |||
| atomURI = text | ||||
| appCommonAttributes = | appCommonAttributes = | |||
| attribute xml:base { atomUri }?, | attribute xml:base { atomURI }?, | |||
| attribute xml:lang { atomLanguageTag }?, | attribute xml:lang { atomLanguageTag }?, | |||
| undefinedAttribute* | undefinedAttribute* | |||
| atomCommonAttributes = appCommonAttributes | ||||
| undefinedAttribute = | undefinedAttribute = | |||
| attribute * - (xml:base | xml:lang | local:*) { text } | attribute * - (xml:base | xml:lang | local:*) { 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})*" | |||
| } | } | |||
| atomDateConstruct = | ||||
| appCommonAttributes, | ||||
| 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 = | |||
| element app:workspace { | element app:workspace { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| attribute title { text }, | ( appCollection* | |||
| ( appCollection+ | ||||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| atomTitle = element atom:title { atomTextConstruct } | ||||
| # app:collection | # app:collection | |||
| appCollection = | appCollection = | |||
| element app:collection { | element app:collection { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| attribute title { text }, | attribute href { atomURI }, | |||
| attribute href { atomUri }, | ||||
| ( appAccept? | ( appAccept? | |||
| & appCategories* | ||||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| # app:member | # app:categories | |||
| atomCategory = | ||||
| element atom:category { | ||||
| atomCommonAttributes, | ||||
| attribute term { text }, | ||||
| attribute scheme { atomURI }?, | ||||
| attribute label { text }?, | ||||
| undefinedContent | ||||
| } | ||||
| appInlineCategories = | ||||
| element app:categories { | ||||
| attribute fixed { "yes" | "no" }?, | ||||
| attribute scheme { atomURI }?, | ||||
| (atomCategory*) | ||||
| } | ||||
| appOutOfLineCategories = | ||||
| element app:categories { | ||||
| attribute href { atomURI }, | ||||
| (empty) | ||||
| } | ||||
| appCategories = appInlineCategories | appOutOfLineCategories | ||||
| # app:accept | ||||
| appAccept = | appAccept = | |||
| element app:accept { | element app:accept { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( appTypeValue? ) | ( appTypeValue? ) | |||
| } | } | |||
| appTypeValue = ( "entry" | media-type |entry-or-media-type ) | appTypeValue = ( "entry" | media-type |entry-or-media-type ) | |||
| media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | |||
| entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | |||
| skipping to change at page 36, line 4 | skipping to change at page 43, line 45 | |||
| structuredExtensionElement = | structuredExtensionElement = | |||
| element * - app:* { | element * - app:* { | |||
| (attribute * { text }+, | (attribute * { text }+, | |||
| (text|anyElement)*) | (text|anyElement)*) | |||
| | (attribute * { text }*, | | (attribute * { text }*, | |||
| (text?, anyElement+, (text|anyElement)*)) | (text?, anyElement+, (text|anyElement)*)) | |||
| } | } | |||
| # Other Extensibility | # Other Extensibility | |||
| extensionElement = | extensionElement = | |||
| simpleExtensionElement | structuredExtensionElement | simpleExtensionElement | structuredExtensionElement | |||
| undefinedContent = (text|anyForeignElement)* | ||||
| # Extensions | # Extensions | |||
| anyElement = | anyElement = | |||
| element * { | element * { | |||
| (attribute * { text } | (attribute * { text } | |||
| | text | | text | |||
| | anyElement)* | | anyElement)* | |||
| } | } | |||
| anyForeignElement = | ||||
| element * - atom:* { | ||||
| (attribute * { text } | ||||
| | text | ||||
| | anyElement)* | ||||
| } | ||||
| atomPlainTextConstruct = | ||||
| atomCommonAttributes, | ||||
| attribute type { "text" | "html" }?, | ||||
| text | ||||
| atomXHTMLTextConstruct = | ||||
| atomCommonAttributes, | ||||
| attribute type { "xhtml" }, | ||||
| xhtmlDiv | ||||
| atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct | ||||
| anyXHTML = element xhtml:* { | ||||
| (attribute * { text } | ||||
| | text | ||||
| | anyXHTML)* | ||||
| } | ||||
| xhtmlDiv = element xhtml:div { | ||||
| (attribute * { text } | ||||
| | text | ||||
| | anyXHTML)* | ||||
| } | ||||
| # EOF | ||||
| The Schema for Category Documents: | ||||
| # -*- rnc -*- | ||||
| # RELAX NG Compact Syntax Grammar for the Atom Protocol | ||||
| namespace app = "http://purl.org/atom/app#" | ||||
| namespace atom = "http://www.w3.org/2005/Atom" | ||||
| namespace xsd = "http://www.w3.org/2001/XMLSchema" | ||||
| namespace local = "" | ||||
| start = appCategories | ||||
| # common:attrs | ||||
| atomCommonAttributes = | ||||
| attribute xml:base { atomUri }?, | ||||
| attribute xml:lang { atomLanguageTag }?, | ||||
| undefinedAttribute* | ||||
| undefinedAttribute = | ||||
| attribute * - (xml:base | xml:lang | local:*) { text } | ||||
| atomUri = text | ||||
| atomLanguageTag = xsd:string { | ||||
| pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*" | ||||
| } | ||||
| atomCategory = | ||||
| element atom:category { | ||||
| atomCommonAttributes, | ||||
| attribute term { text }, | ||||
| attribute scheme { atomUri }?, | ||||
| attribute label { text }?, | ||||
| undefinedContent | ||||
| } | ||||
| appInlineCategories = | ||||
| element app:categories { | ||||
| attribute fixed { "yes" | "no" }?, | ||||
| attribute scheme { atomUri }?, | ||||
| (atomCategory*) | ||||
| } | ||||
| appOutOfLineCategories = | ||||
| element app:categories { | ||||
| attribute href { atomURI }, | ||||
| (empty) | ||||
| } | ||||
| appCategories = appInlineCategories | appOutOfLineCategories | ||||
| # Extensibility | ||||
| undefinedContent = (text|anyForeignElement)* | ||||
| anyElement = | ||||
| element * { | ||||
| (attribute * { text } | ||||
| | text | ||||
| | anyElement)* | ||||
| } | ||||
| anyForeignElement = | ||||
| element * - atom:* { | ||||
| (attribute * { text } | ||||
| | text | ||||
| | anyElement)* | ||||
| } | ||||
| # EOF | # EOF | |||
| Appendix C. Revision History | Appendix C. Revision History | |||
| draft-ietf-atompub-protocol-10: PaceRemoveTitleHeader2, | ||||
| PaceSlugHeader4, PaceOnlyMemberURI,PaceOneAppNamespaceOnly, | ||||
| PaceAppCategories, PaceExtendIntrospection, | ||||
| UseElementsForAppCollectionTitles3, renamed Introspection to Service, | ||||
| lots of good editorials suggestions, updated media example with slug, | ||||
| moved xml conventions to convention sections, renamed XMl related | ||||
| Conventions to Atom Publishing Protocol Documents, added auth header | ||||
| to examples, consolidated definition of all resource types into the | ||||
| model section, added IANA reg info for application/atomcat+xml. | ||||
| draft-ietf-atompub-protocol-09: PaceWorkspaceMayHaveCollections, | draft-ietf-atompub-protocol-09: PaceWorkspaceMayHaveCollections, | |||
| PaceMediaEntries5, | PaceMediaEntries5, | |||
| http://www.imc.org/atom-protocol/mail-archive/msg05322.html, and | http://www.imc.org/atom-protocol/mail-archive/msg05322.html, and | |||
| http://www.imc.org/atom-protocol/mail-archive/msg05272.html | http://www.imc.org/atom-protocol/mail-archive/msg05272.html | |||
| draft-ietf-atompub-protocol-08: added infoset ref; added wording re | draft-ietf-atompub-protocol-08: added infoset ref; added wording re | |||
| IRI/URI; fixed URI/IRI ; next/previous fixed as per Atom | IRI/URI; fixed URI/IRI ; next/previous fixed as per Atom | |||
| LinkRelations Attribute | LinkRelations Attribute | |||
| (http://www.imc.org/atom-protocol/mail-archive/msg04095.html); | (http://www.imc.org/atom-protocol/mail-archive/msg04095.html); | |||
| incorporated: PaceEditLinkMustToMay; PaceMissingDraftHasNoMeaning, | incorporated: PaceEditLinkMustToMay; PaceMissingDraftHasNoMeaning, | |||
| End of changes. 199 change blocks. | ||||
| 479 lines changed or deleted | 939 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/ | ||||