| draft-ietf-atompub-protocol-08.txt | | draft-ietf-atompub-protocol-09.txt | |
| | | | |
| Network Working Group J. Gregorio, Ed. | | Network Working Group J. Gregorio, Ed. | |
| Internet-Draft BitWorking, Inc | | Internet-Draft BitWorking, Inc | |
|
| Expires: August 5, 2006 B. de hOra, Ed. | | Expires: December 25, 2006 B. de hOra, Ed. | |
| Propylon Ltd. | | Propylon Ltd. | |
|
| February 01, 2006 | | June 23, 2006 | |
| | | | |
| The Atom Publishing Protocol | | The Atom Publishing Protocol | |
|
| draft-ietf-atompub-protocol-08.txt | | draft-ietf-atompub-protocol-09.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 August 5, 2006. | | This Internet-Draft will expire on December 25, 2006. | |
| | | | |
| 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 | |
| | | | |
| skipping to change at page 2, line 33 | | skipping to change at page 2, line 33 | |
| 6.1 Referring to Information Items . . . . . . . . . . . . . . 11 | | 6.1 Referring to Information Items . . . . . . . . . . . . . . 11 | |
| 6.2 XML Namespace Usage . . . . . . . . . . . . . . . . . . . 11 | | 6.2 XML Namespace Usage . . . . . . . . . . . . . . . . . . . 11 | |
| 6.3 Use of xml:base and xml:lang . . . . . . . . . . . . . . . 11 | | 6.3 Use of xml:base and xml:lang . . . . . . . . . . . . . . . 11 | |
| 6.4 RELAX NG Schema . . . . . . . . . . . . . . . . . . . . . 12 | | 6.4 RELAX NG Schema . . . . . . . . . . . . . . . . . . . . . 12 | |
| 7. Introspection Documents . . . . . . . . . . . . . . . . . . 13 | | 7. Introspection Documents . . . . . . . . . . . . . . . . . . 13 | |
| 7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 13 | | 7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |
| 7.2 Element Definitions . . . . . . . . . . . . . . . . . . . 14 | | 7.2 Element Definitions . . . . . . . . . . . . . . . . . . . 14 | |
| 7.2.1 The "app:service" Element . . . . . . . . . . . . . . 14 | | 7.2.1 The "app:service" Element . . . . . . . . . . . . . . 14 | |
| 7.2.2 The "app:workspace" Element . . . . . . . . . . . . . 14 | | 7.2.2 The "app:workspace" Element . . . . . . . . . . . . . 14 | |
| 7.2.3 The "app:collection" Element . . . . . . . . . . . . . 15 | | 7.2.3 The "app:collection" Element . . . . . . . . . . . . . 15 | |
|
| 7.2.4 The "app:member-type" Element . . . . . . . . . . . . 16 | | 7.2.4 The "app:accept" Element . . . . . . . . . . . . . . . 16 | |
| 8. Collections . . . . . . . . . . . . . . . . . . . . . . . . 17 | | 8. Collections . . . . . . . . . . . . . . . . . . . . . . . . 17 | |
| 8.1 Creating resources with POST . . . . . . . . . . . . . . . 17 | | 8.1 Creating resources with POST . . . . . . . . . . . . . . . 17 | |
|
| 8.1.1 Example . . . . . . . . . . . . . . . . . . . . . . . 17 | | 8.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |
| 8.1.2 Title: Header . . . . . . . . . . . . . . . . . . . . 17 | | 8.3 The 'edit' Link . . . . . . . . . . . . . . . . . . . . . 19 | |
| 8.2 Entry Collections . . . . . . . . . . . . . . . . . . . . 18 | | 8.4 Media Resources and Media Link Entries . . . . . . . . . . 19 | |
| 8.2.1 Editing entries with foreign markup . . . . . . . . . 18 | | 8.4.1 Title: Header . . . . . . . . . . . . . . . . . . . . 20 | |
| 8.3 Media Collections . . . . . . . . . . . . . . . . . . . . 18 | | 8.4.2 Example . . . . . . . . . . . . . . . . . . . . . . . 20 | |
| 8.3.1 Editing Media Resources . . . . . . . . . . . . . . . 18 | | 8.5 Editing Entries with Foreign Markup . . . . . . . . . . . 21 | |
| 8.3.2 Editing Media Metadata . . . . . . . . . . . . . . . . 19 | | 9. Listing Collections . . . . . . . . . . . . . . . . . . . . 22 | |
| 9. Listing Collections . . . . . . . . . . . . . . . . . . . . 20 | | 9.1 Collection Paging . . . . . . . . . . . . . . . . . . . . 22 | |
| 9.1 Collection Paging . . . . . . . . . . . . . . . . . . . . 20 | | 10. Atom Format Link Relation Extensions . . . . . . . . . . . . 24 | |
| 10. Atom Format Link Relation Extensions . . . . . . . . . . . . 22 | | 10.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 24 | |
| 10.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 22 | | 10.2 The "edit-media" Link Relation . . . . . . . . . . . . . 24 | |
| 11. Atom Publishing Control Extensions . . . . . . . . . . . . . 23 | | 11. Atom Publishing Control Extensions . . . . . . . . . . . . . 25 | |
| 11.1 The Atom Publishing Control Namespace . . . . . . . . . 23 | | 11.1 The Atom Publishing Control Namespace . . . . . . . . . 25 | |
| 11.2 The "pub:control" Element . . . . . . . . . . . . . . . 23 | | 11.2 The "pub:control" Element . . . . . . . . . . . . . . . 25 | |
| 11.2.1 The "pub:draft" Element . . . . . . . . . . . . . . 23 | | 11.2.1 The "pub:draft" Element . . . . . . . . . . . . . . 25 | |
| 12. Atom Publishing Protocol Example . . . . . . . . . . . . . . 24 | | 12. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 26 | |
| 13. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 26 | | 13. Security Considerations . . . . . . . . . . . . . . . . . . 27 | |
| 14. Security Considerations . . . . . . . . . . . . . . . . . . 27 | | 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . 28 | |
| 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . 28 | | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |
| 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | | 15.1 Normative References . . . . . . . . . . . . . . . . . . 30 | |
| 16.1 Normative References . . . . . . . . . . . . . . . . . . 30 | | 15.2 Informative References . . . . . . . . . . . . . . . . . 31 | |
| 16.2 Informative References . . . . . . . . . . . . . . . . . 31 | | | |
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 32 | | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 32 | |
| A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 33 | | A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 33 | |
| B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 34 | | B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 34 | |
| C. Revision History . . . . . . . . . . . . . . . . . . . . . . 37 | | C. Revision History . . . . . . . . . . . . . . . . . . . . . . 37 | |
| Intellectual Property and Copyright Statements . . . . . . . 40 | | Intellectual Property and Copyright Statements . . . . . . . 40 | |
| | | | |
| 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 may 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 Introspection: 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 | | Note: The Introspection Document allows the use of IRIs [RFC3987], as | |
| well as URIs [RFC3986]. Every URI is an IRI, so any URI can be used | | well as URIs [RFC3986]. Every URI is an IRI, so any URI can be used | |
| where an IRI is needed. How to map an IRI to a URI is specified in | | where an IRI is needed. How to map an IRI to a URI is specified in | |
| Section 3.1 of Internationalized Resource Identifiers (IRIs) | | Section 3.1 of Internationalized Resource Identifiers (IRIs) | |
| [RFC3987]. | | [RFC3987]. | |
| | | | |
| 3. Terminology | | 3. Terminology | |
| | | | |
|
| For convenience, this protocol may 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]. Note that IRIs are mapped to | |
| URIs before dereferencing takes place. | | URIs before dereferencing takes place. | |
| | | | |
| 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. | |
| | | | |
| skipping to change at page 7, line 19 | | skipping to change at page 7, line 19 | |
| | | | |
| o GET is used to retrieve a representation of a resource or perform | | o GET is used to retrieve a representation of a resource or perform | |
| a query. | | 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 resource. | |
| | | | |
|
| Along with operations on resources, the Atom Protocol provides list- | | Along with operations on resources the Atom Protocol provides | |
| based structures, called Collections, for managing and organising | | structures, called Collections, for managing and organising | |
| resources, called Members. Collections contain the IRIs of, and | | resources, called Members. Collections contain the IRIs of, and | |
|
| metadata about, their Member resources. For authoring and editing of | | metadata about, their Member resources. Atom Protocol clients can | |
| resources to commence, an Atom Protocol client can examine | | use Introspection documents, which represent server-defined groups of | |
| Introspection Documents which represent server-defined groups of | | Collections, to initialize the process of creating and editing | |
| Collections. | | resources. | |
| | | | |
| Note that when an IRI is used for resource retrieval over HTTP, the | | Note that when an IRI is used for resource retrieval over HTTP, the | |
| IRI is first converted to a URI according the procedure defined in | | IRI is first converted to a URI according the procedure defined in | |
| [RFC3987] section 3.1. The resource that the IRI locates is the same | | [RFC3987] section 3.1. The resource that the IRI locates is the same | |
| as the one located by the URI obtained after converting the IRI. | | as the one located by the URI obtained after converting the IRI. | |
| | | | |
| 5. Protocol Operations | | 5. Protocol Operations | |
| | | | |
| 5.1 Retrieving an Introspection Document | | 5.1 Retrieving an Introspection Document | |
| | | | |
| | | | |
| skipping to change at page 8, line 47 | | skipping to change at page 8, line 47 | |
| | | | |
| 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 URI of the newly created resource. | |
| | | | |
| 5.3 Editing a Resource | | 5.3 Editing a Resource | |
| | | | |
|
| Once a resource has been created and its URI is known, that URI may | | Once a resource has been created and its URI is known, that URI can | |
| be used to retrieve, update, and delete the resource. | | be used to retrieve, update, and delete the resource. | |
| | | | |
| 5.3.1 Retrieving a Resource | | 5.3.1 Retrieving a Resource | |
| | | | |
| Client Server | | Client Server | |
| | | | | | | | |
| | 1.) GET to Member URI | | | | 1.) GET to Member URI | | |
| |------------------------------------------>| | | |------------------------------------------>| | |
| | | | | | | | |
| | 2.) Member Representation | | | | 2.) Member Representation | | |
| | | | |
| skipping to change at page 10, line 32 | | skipping to change at page 10, line 32 | |
| | | | |
| 2. The server responds with an Atom Feed Document containing the | | 2. The server responds with an Atom Feed Document containing the | |
| IRIs of the collection members. | | IRIs of the collection members. | |
| | | | |
| 5.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 an explanation of the error using natural language. | | responses include a human-readable explanation of the error. | |
| | | | |
| 6. XML-related Conventions | | 6. XML-related Conventions | |
| | | | |
| The Atom Protocol Introspection format is specified in terms of the | | The Atom Protocol Introspection format is specified in terms of the | |
| XML Information Set [W3C.REC-xml-infoset-20040204], serialised as XML | | XML Information Set [W3C.REC-xml-infoset-20040204], serialised as XML | |
| 1.0 [W3C.REC-xml-20040204]. Atom Publishing Protocol Documents MUST | | 1.0 [W3C.REC-xml-20040204]. Atom Publishing Protocol Documents MUST | |
| be well-formed XML. This specification does not define any DTDs for | | 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 | | Atom Protocol, and hence does not require them to be "valid" in the | |
| sense used by XML. | | sense used by XML. | |
| | | | |
| | | | |
| skipping to change at page 11, line 33 | | skipping to change at page 11, line 33 | |
| 6.2 XML Namespace Usage | | 6.2 XML Namespace Usage | |
| | | | |
| The namespace name [W3C.REC-xml-names-19990114] for the XML format | | The namespace name [W3C.REC-xml-names-19990114] for the XML format | |
| described in this specification is: | | described in this specification 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 choice of namespace prefix is not semantically significant. | |
| | | | |
|
| | | The "app:" namespace is reserved for future forward-compatible | |
| | | revisions of the Atom Publishing Protocol. Future versions of this | |
| | | specification could add new elements and attributes to the markup | |
| | | vocabulary. Software written to conform to this version of the | |
| | | specification will not be able to process such markup correctly and, | |
| | | in fact, will not be able to distinguish it from markup error. For | |
| | | the purposes of this discussion, unrecognized markup from the Atom | |
| | | Publishing Protocol vocabulary will be considered "foreign markup". | |
| | | | |
| This specification also uses the prefix "atom:" for | | This specification also uses the prefix "atom:" for | |
| "http://www.w3.org/2005/Atom", the namespace name of the Atom | | "http://www.w3.org/2005/Atom", the namespace name of the Atom | |
|
| Publishing Format [RFC4287]. | | Syndication Format [RFC4287]. | |
| | | | |
| 6.3 Use of xml:base and xml:lang | | 6.3 Use of xml:base and xml:lang | |
| | | | |
| XML elements defined by this specification MAY have an xml:base | | XML elements defined by this specification MAY have an xml:base | |
| attribute [W3C.REC-xmlbase-20010627]. When xml:base is used, it | | attribute [W3C.REC-xmlbase-20010627]. When xml:base is used, it | |
| serves the function described in section 5.1.1 of URI Generic Syntax | | serves the function described in section 5.1.1 of URI Generic Syntax | |
| [RFC3986], establishing the base URI (or IRI) for resolving any | | [RFC3986], establishing the base URI (or IRI) for resolving any | |
| relative references found within the effective scope of the xml:base | | relative references found within the effective scope of the xml:base | |
| attribute. | | attribute. | |
| | | | |
| | | | |
| skipping to change at page 13, line 8 | | skipping to change at page 13, line 8 | |
| 6.4 RELAX NG Schema | | 6.4 RELAX NG Schema | |
| | | | |
| Some sections of this specification are illustrated with fragments of | | Some sections of this specification are illustrated with fragments of | |
| a non-normative RELAX NG Compact schema [RNC]. A complete schema | | a non-normative RELAX NG Compact schema [RNC]. A complete schema | |
| appears in Appendix B. However, the text of this specification | | appears in Appendix B. However, the text of this specification | |
| provides the definition of conformance. | | provides the definition of conformance. | |
| | | | |
| 7. Introspection Documents | | 7. Introspection 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 collections offered. This is done | | capabilities and locations of the available collections. | |
| using Introspection Documents. An Introspection Document describes | | Introspection documents are designed to support this discovery | |
| workspaces, which are server-defined groupings of collections. | | process. An Introspection Document describes workspaces, which are | |
| | | server-defined groupings of collections. | |
| | | | |
| Introspection documents are identified with the "application/ | | Introspection documents are identified with the "application/ | |
|
| atomserv+xml" media type (see Section 15). | | atomserv+xml" media type (see Section 14). | |
| | | | |
| While an introspection document allows multiple workspaces, there is | | While an introspection document allows multiple workspaces, there is | |
|
| no requirement that a service support multiple workspaces. In | | no requirement that a server support multiple workspaces. In | |
| addition, a collection MAY appear in more than one workspace. | | addition, a collection MAY appear in more than one workspace. | |
| | | | |
| 7.1 Example | | 7.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" > | | <workspace title="Main Site" > | |
| <collection | | <collection | |
| title="My Blog Entries" | | title="My Blog Entries" | |
|
| href="http://example.org/reilly/main" > | | href="http://example.org/reilly/main" /> | |
| <member-type>entry</member-type> | | | |
| </collection> | | | |
| <collection | | <collection | |
| title="Pictures" | | title="Pictures" | |
| href="http://example.org/reilly/pic" > | | href="http://example.org/reilly/pic" > | |
|
| <member-type>media</member-type> | | <accept>image/*</accept> | |
| </collection> | | </collection> | |
| </workspace> | | </workspace> | |
| <workspace title="Side Bar Blog"> | | <workspace title="Side Bar Blog"> | |
| <collection title="Remaindered Links" | | <collection title="Remaindered Links" | |
|
| href="http://example.org/reilly/list" > | | href="http://example.org/reilly/list" /> | |
| <member-type>entry</member-type> | | | |
| </collection> | | | |
| </workspace> | | </workspace> | |
| </service> | | </service> | |
| | | | |
| This Introspection Document describes two workspaces. The first, | | This Introspection Document describes two workspaces. The first, | |
| called "Main Site", has two collections called "My Blog Entries" and | | called "Main Site", has two collections called "My Blog Entries" and | |
|
| "Pictures" whose URIs are "http://example.org/reilly/main" and | | "Pictures" whose IRIs are "http://example.org/reilly/main" and | |
| "http://example.org/reilly/pic" respectively. "My Blog Entries" is | | "http://example.org/reilly/pic" respectively. The "Pictures" | |
| an Entry collection and "Pictures" is a Media collection. Entry and | | includes an accept element indicating that client can post image | |
| Media collections are discussed in Section 7.2.4. | | files to the collection to create new entries. Entries with | |
| | | associated media resources are discussed in section 8.3. | |
| | | | |
| 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 URI is | | collection called "Remaindered Links" whose collection IRI is | |
| "http://example.org/reilly/list". "Remaindered Links" is an Entry | | "http://example.org/reilly/list". | |
| collection. | | | |
| | | | |
| 7.2 Element Definitions | | 7.2 Element Definitions | |
| | | | |
| 7.2.1 The "app:service" Element | | 7.2.1 The "app:service" Element | |
| | | | |
| The root of an introspection document is the "app:service" element. | | The root of an introspection document is the "app:service" element. | |
| | | | |
| The "app:service" element is the container for introspection | | The "app:service" element is the container for introspection | |
| information associated with one or more workspaces. An app:service | | information associated with one or more workspaces. An app:service | |
| element MUST contain one or more app:workspace elements. | | element MUST contain one or more app:workspace elements. | |
| | | | |
| skipping to change at page 14, line 30 | | skipping to change at page 14, line 29 | |
| element app:service { | | element app:service { | |
| appCommonAttributes, | | appCommonAttributes, | |
| ( appWorkspace+ | | ( appWorkspace+ | |
| & extensionElement* ) | | & extensionElement* ) | |
| } | | } | |
| | | | |
| 7.2.2 The "app:workspace" Element | | 7.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 MUST contain one or more app:collection elements. | | element MAY contain zero or more app:collection elements. | |
| | | | |
| appWorkspace = | | appWorkspace = | |
| element app:workspace { | | element app:workspace { | |
| appCommonAttributes, | | appCommonAttributes, | |
| attribute title { text }, | | attribute title { text }, | |
| ( appCollection+ | | ( appCollection+ | |
| & extensionElement* ) | | & extensionElement* ) | |
| } | | } | |
| | | | |
|
| In an app:workspace element, the first app:collection element of each | | In an app:workspace element, the first app:collection element MUST | |
| type MUST refer to the preferred or primary collection. In the | | refer to the preferred or primary collection. In the following | |
| following example, the "Entries" collection would be considered the | | example, the "Entries" collection would be considered the preferred | |
| preferred (or primary) entries collection of the workspace and the | | collection: | |
| "Photos" collection would be considered the primary media collection: | | | |
| | | | |
|
| <service> | | <service xmlns="http://purl.org/atom/app#"> | |
| <workspace title="My Blog"> | | <workspace title="My Blog"> | |
| <collection title="Entries" | | <collection title="Entries" | |
|
| href="http://example.org/myblog/entries"> | | href="http://example.org/myblog/entries" /> | |
| <member-type>entry</member-type> | | | |
| </collection> | | | |
| <collection title="Photos" | | <collection title="Photos" | |
| href="http://example.org/myblog/fotes"> | | href="http://example.org/myblog/fotes"> | |
|
| <member-type>media</member-type> | | <accept>image/*</accept> | |
| </collection> | | </collection> | |
| </workspace> | | </workspace> | |
| </service> | | </service> | |
| | | | |
| 7.2.2.1 The "title" Attribute | | 7.2.2.1 The "title" Attribute | |
| | | | |
| The app:workspace element MUST contain a "title" attribute, which | | The app:workspace element MUST contain a "title" attribute, which | |
| gives a human-readable name for the workspace. This attribute is | | gives a human-readable name for the workspace. This attribute is | |
| Language-Sensitive. | | Language-Sensitive. | |
| | | | |
| 7.2.3 The "app:collection" Element | | 7.2.3 The "app:collection" Element | |
| | | | |
| The "app:collection" describes an Atom Protocol collection. One | | The "app:collection" describes an Atom Protocol collection. One | |
|
| child element is defined here for app:collection: "app:member-type". | | child element is defined here for app:collection: "app:accept". | |
| | | | |
| appCollection = | | appCollection = | |
| element app:collection { | | element app:collection { | |
| appCommonAttributes, | | appCommonAttributes, | |
| attribute title { text }, | | attribute title { text }, | |
|
| attribute href { text }, | | attribute href { atomUri }, | |
| ( appMemberType | | ( appAccept? | |
| & appListTemplate | | | |
| & extensionElement* ) | | & extensionElement* ) | |
| } | | } | |
| | | | |
|
| | | In an Atom feed, the app:collection element MAY appear as a child of | |
| | | 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 | | 7.2.3.1 The "title" Attribute | |
| | | | |
| The app:collection element MUST contain a "title" attribute, whose | | The app:collection element MUST contain a "title" attribute, whose | |
| value gives a human-readable name for the collection. This attribute | | value gives a human-readable name for the collection. This attribute | |
| is Language-Sensitive. | | is Language-Sensitive. | |
| | | | |
| 7.2.3.2 The "href" Attribute | | 7.2.3.2 The "href" Attribute | |
| | | | |
| The app:collection element MUST contain a "href" attribute, whose | | The app:collection element MUST contain a "href" attribute, whose | |
| value gives the IRI of the collection. | | value gives the IRI of the collection. | |
| | | | |
|
| 7.2.4 The "app:member-type" Element | | 7.2.4 The "app:accept" Element | |
| | | | |
|
| The app:collection element MUST contain one "app:member-type" | | The app:collection element MAY contain one "app:accept" element. The | |
| element. The app:member-type element value specifies the types of | | app:accept element value specifies a comma-separated list of media- | |
| members that can appear in the collection. | | ranges [RFC2616] identifying the types of representations that can be | |
| | | POSTed to the Collection's URI. Whitespace separating the media- | |
| | | range values is considered insignificant and MUST be ignored. | |
| | | | |
|
| appMemberType = | | The app:accept element is similar to the HTTP Accept request-header | |
| element app:member-type { | | [RFC2616] with the exception that app:accept has no notion of | |
| appCommonAttributes, | | preference. Accordingly, the value syntax of app:accept does not use | |
| ( appTypeValue ) | | accept-params or "q" parameters as specified in [RFC2616], section | |
| } | | 14.1. The order of media-ranges is not significant. The following | |
| | | lists are all equivalent: | |
| | | | |
|
| appTypeValue = "entry" | "media" | | <app:accept>image/png, image/*</app:accept> | |
| | | <app:accept>image/*, image/png</app:accept> | |
| | | <app:accept>image/*</app:accept> | |
| | | | |
|
| This specification defines two values for the app:member-type | | A value of "entry" indicates that Atom Entry Documents can be posted | |
| element: | | to the Collection. If the accept element is omitted, or empty, | |
| | | clients SHOULD assume that only Atom Entry documents will be accepted | |
| | | by the collection. | |
| | | | |
|
| o "entry" - Indicates the collection contains only member resources | | appAccept = | |
| whose representation MUST be an Atom Entry. Further constraints | | element app:accept { | |
| on the representations of members in a collection of type "entry" | | appCommonAttributes, | |
| are listed in Section 8.2. | | ( appTypeValue? ) | |
| | | } | |
| | | | |
|
| o "media" - Indicates the collection contains member resources whose | | appTypeValue = ( "entry" | media-type |entry-or-media-type ) | |
| representation can be of any media type. Additional constraints | | media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | |
| are listed in Section 8.3. | | entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | |
| | | | |
| 8. Collections | | 8. Collections | |
| | | | |
| 8.1 Creating resources with POST | | 8.1 Creating resources with POST | |
| | | | |
| To add members to a collection, clients send POST requests to the | | To add members to a collection, clients send POST requests to the | |
| collection's URI. Collections MAY impose constraints on the media- | | collection's URI. Collections MAY impose constraints on the media- | |
|
| types that are created in a collection and MAY generate a response | | types of request entities POSTed to the collection and MAY generate a | |
| with a status code of 415 ("Unsupported Media Type"). On successful | | response with a status code of 415 ("Unsupported Media Type"). | |
| creation, the response to the POST request MUST return a Location: | | | |
| header with the URI of the newly created resource. | | | |
| | | | |
|
| 8.1.1 Example | | If an entry was created in the collection which received the POST, | |
| | | its URI MUST be returned in an HTTP Location header. | |
| | | | |
| | | When the server generates a response with a status code of 201 | |
| | | ("Created"), it SHOULD also return a response body, which, if | |
| | | provided, MUST be an Atom Entry Document representing the newly- | |
| | | created resource. Clients MUST NOT assume that an Atom Entry | |
| | | returned is a full representation of the member resource. | |
| | | | |
| | | Since the server is free to alter the posted entry, for example by | |
| | | changing the content of the "id" element. returning the entry as | |
| | | described in the previous paragraph can be useful to the client, | |
| | | enabling it to correlate the client and server views of the new | |
| | | entry. | |
| | | | |
| | | When the POST request contains an Atom Entry Document, the response | |
| | | from the server SHOULD contain a Content-Location header that | |
| | | contains the same character-by-character value as the Location | |
| | | header. | |
| | | | |
| | | Clients MUST NOT assume that the URI provided by the Location header | |
| | | can be used to edit the created entry. | |
| | | | |
| | | 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 | |
| | | | |
| 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 | |
| Content-Type: application/atom+xml | | Content-Type: application/atom+xml | |
| Content-Length: nnn | | Content-Length: nnn | |
| | | | |
|
| | | <?xml version="1.0" ?> | |
| <entry xmlns="http://www.w3.org/2005/Atom"> | | <entry xmlns="http://www.w3.org/2005/Atom"> | |
| <title>Atom-Powered Robots Run Amok</title> | | <title>Atom-Powered Robots Run Amok</title> | |
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |
| <updated>2003-12-13T18:30:02Z</updated> | | <updated>2003-12-13T18:30:02Z</updated> | |
|
| | | <author><name>John Doe</name></author> | |
| <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. | |
| and the response includes a 'Location' header indicating the URI of | | The response includes a "Location" header indicating the URI of the | |
| the Atom Entry. | | Atom Entry and a representation of that Entry in the body 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: 0 | | Content- Length: nnn | |
| | | Content- Type: application/atom+xml; charset="utf-8" | |
| | | 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 | |
| | | | |
|
| 8.1.2 Title: Header | | <?xml version="1.0"?> | |
| | | <entry xmlns="http://www.w3.org/2005/Atom"> | |
| | | <title>Atom-Powered Robots Run Amok</title> | |
| | | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |
| | | <updated>2003-12-13T18:30:02Z</updated> | |
| | | <author><name>John Doe</name></author> | |
| | | <content>Some text.</content> | |
| | | <link rel="edit" | |
| | | href="http://example.org/edit/first-post.atom"/> | |
| | | </entry> | |
| | | | |
|
| A POST to a Media Collection creating a resource SHOULD contain a | | Note that the Entry created by the server might not match exactly the | |
| Title: header that indicates the client's suggested title for the | | Entry POSTed by the client. In particular, a server MAY change the | |
| resource: | | values of various elements in the Entry such as the atom:id, atom: | |
| | | updated and atom:author values and MAY choose to remove or add other | |
| | | elements and attributes, or change element and attribute values. | |
| | | | |
| | | In particular, the publishing system in this example filled in some | |
| | | values not provided in the original POST. For example, presumably it | |
| | | ascertained the author's name via the authentication protocol used to | |
| | | establish the right to post. | |
| | | | |
| | | 8.3 The 'edit' Link | |
| | | | |
| | | Each member Entry within a collection SHOULD contain an atom:link | |
| | | element with a link relation of "edit" that contains the IRI used to | |
| | | retrieve, update or delete the member Entry. | |
| | | | |
| | | 8.4 Media Resources and Media Link Entries | |
| | | | |
| | | As discussed above, if the body of a client's POST is an Atom Entry | |
| | | 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 | |
| | | application/atom+xml, this constitutes a request that the server | |
| | | create a new resource as represented by the body of the post, called | |
| | | a "media resource", and also an entry in the collection to which the | |
| | | 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 | |
| | | 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 | |
| | | relation of "edit-media" that contains the IRI used to modify the | |
| | | media resource. Deletion of a media link entry SHOULD result in the | |
| | | |