| 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 | ||||
| deletion of the linked media resource. | ||||
| Implementors will note that per the requirements of [RFC4287], 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 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 | ||||
| an Atom Entry, and when it is of a non-Atom media type. It does not | ||||
| specify any request semantics or server behavior in the case where | ||||
| the POST media-type is application/atom+xml but the body is something | ||||
| other than an Atom Entry. | ||||
| 8.4.1 Title: Header | ||||
| A POST whose body is not of the Atom media type and which thus | ||||
| requests the creation of a media resource SHOULD contain a Title: | ||||
| header indicating the client's suggested title for the resource. For | ||||
| example: | ||||
| POST /myblog/fotes HTTP/1.1 | POST /myblog/fotes HTTP/1.1 | |||
| Host: example.org | Host: example.org | |||
| User-Agent: Thingio/1.0 | ||||
| Content-Type: image/png | Content-Type: image/png | |||
| Content-Length: nnnn | Content-Length: nnnn | |||
| Title: An Atom-Powered Robot | Title: An Atom-Powered Robot | |||
| ...binary data... | ...binary data... | |||
| The server MAY ignore the content of the Title: header or modify the | The server MAY use the content of the Title: header, as provided or | |||
| suggested title. | in a modified form, in constructing a title for the resource, which | |||
| would presumably appear in the media link entry. | ||||
| Title = "Title" ":" [TEXT] | Title = "Title" ":" [TEXT] | |||
| 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. Words of | |||
| *TEXT MAY contain characters from character sets other than | *TEXT MAY contain characters from character sets other than | |||
| [ISO88591] [ISO-8859-1] only when encoded according to the rules of | [ISO88591] only when encoded according to the rules of [RFC2047]. | |||
| [RFC2047] [RFC2047]. | ||||
| 8.2 Entry Collections | ||||
| Entry Collections are collections that restrict their membership to | 8.4.2 Example | |||
| Atom Entries. They are identified by having an app:member-type of | ||||
| "entry". Every member representation MAY contain an atom:link | ||||
| element with a link relation of "edit" that contains the IRI of the | ||||
| member resource. Member representations MAY contain a pub:control | ||||
| element (Section 11). | ||||
| 8.2.1 Editing entries with foreign markup | Below, the client sends a POST request containing a PNG image to the | |||
| URI of the Collection: | ||||
| To avoid unintentional loss of data when editing entry collection | POST /myblog/entries HTTP/1.1 | |||
| members, Atom Protocol clients SHOULD preserve all metadata, | Host: example.org | |||
| including unknown foreign markup, that has not been intentionally | Content- Type: image/png | |||
| modified. | Content- Length: nnn | |||
| Title: A picture of the beach | ||||
| 8.3 Media Collections | ...binary data... | |||
| Media Collections are collections whose member representations are | The server signals a successful creation with a status code of 201. | |||
| not constrained. They are identified by having an app:member-type of | The response includes a "Location" header indicating the URI of the | |||
| "media". | media link entry and a representation of that entry in the body of | |||
| the response. The media link entry includes a content element with a | ||||
| src attribute referencing the media resource, and a link using the | ||||
| link relation "edit-media" specifying the IRI to be used for | ||||
| modifying the media resource. | ||||
| 8.3.1 Editing Media Resources | HTTP/1.1 201 Created | |||
| Date: Fri, 7 Oct 2005 17:17:11 GMT | ||||
| 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 | ||||
| When listing the contents of a Media Collection, every Entry in the | <?xml version="1.0"?> | |||
| Atom Feed Document MUST have an atom:content element with a "src" | <entry xmlns="http://www.w3.org/2005/Atom"> | |||
| attribute containing the IRI of the media resource itself. This | <title>A picture of the beach</title> | |||
| value may be used to update and delete resources as described in | <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> | |||
| Section 5.3. When creating a public, read-only reference to the | <updated>2003-12-13T18:30:02Z</updated> | |||
| member resource, a client SHOULD use this value. | <author><name>John Doe</name></author> | |||
| <summary type="text" /> | ||||
| <content type="image/png" | ||||
| src="http://example.org/media/img123.png"/> | ||||
| <link rel="edit" | ||||
| href="http://example.org/edit/first-post.atom" /> | ||||
| <link rel="edit-media" | ||||
| href="http://example.org/edit/img123.png" /> | ||||
| </entry> | ||||
| 8.3.2 Editing Media Metadata | 8.5 Editing Entries with Foreign Markup | |||
| Entries in a Media Collection MAY contain an atom:link element with a | To avoid unintentional loss of data when editing entries or media | |||
| link relation of "edit" that contains the IRI of an Atom Entry | link entries, Atom Protocol clients SHOULD preserve all metadata, | |||
| document representing the metadata of the member resource. A client | including unknown foreign markup as defined in Section 6 of | |||
| MAY use this to edit the metadata associated with the resource. | [RFC4287], which has not been intentionally modified. | |||
| 9. Listing Collections | 9. Listing Collections | |||
| Collection resources MUST provide representations in the form of Atom | Collection resources MUST provide representations in the form of Atom | |||
| Feed documents. Each entry in the Feed Document MUST have an atom: | Feed documents whose entries represent the collection's members. | |||
| link element with a relation of "edit" (See Section 10.1). | Each entry in the Feed Document SHOULD have an atom:link element with | |||
| a relation of "edit" (See Section 10.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 that changes which do not alter the entry's atom: | consideration of the fact that changes which do not alter the entry's | |||
| updated value will not affect the position of the entry in a | atom:updated value will not affect the position of the entry in a | |||
| collection. | 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 resource and SHOULD perform a GET on | |||
| the member resource before editing. | the member resource before editing. | |||
| 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 containing 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 least 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 | 9.1 Collection Paging | |||
| Atom Protocol servers MUST provide representations of collections as | ||||
| Atom feed documents whose entries represent the collection's members. | ||||
| The returned Atom feed MAY NOT contain entries for all the | The returned Atom feed MAY NOT contain entries for all the | |||
| collection's members. Instead, the Atom feed document MAY contain | collection's members. Instead, the Atom feed document MAY contain | |||
| link elements with "rel" attribute values of "next", "previous", | link elements with "rel" attribute values of "next", "previous", | |||
| "first" and "last" that can be used to navigate through the complete | "first" and "last" that can be used to navigate through the complete | |||
| set of matching entries. | set of 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 | |||
| skipping to change at page 22, line 11 | skipping to change at page 24, line 11 | |||
| href="http://example.org/entries/10" /> | href="http://example.org/entries/10" /> | |||
| ... | ... | |||
| </feed> | </feed> | |||
| 10. Atom Format Link Relation Extensions | 10. Atom Format Link Relation Extensions | |||
| 10.1 The "edit" Link Relation | 10.1 The "edit" Link Relation | |||
| The Atom Protocol adds the value "edit" to the Atom Registry of Link | The Atom Protocol 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 IRI in the value of the href attribute is the IRI | specifies that the value of the href attribute is the IRI of an | |||
| of an editable Atom Entry Document associated with a resource. In a | editable Atom Entry Document. When appearing within an atom:entry, | |||
| Media Collection this IRI may be used to update the metadata | the href IRI MAY be used to update and delete the resource | |||
| associated with a Media Resource. In an Entry Collection this IRI | represented by that entry. An atom:entry MUST contain no more than | |||
| may be used to update and delete the member resource itself. The | one "edit" link relation. | |||
| link relation MAY appear in Atom Entry representations as well as | ||||
| Entry and Media Collections. | 10.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. | ||||
| 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. Atom Publishing Control Extensions | 11. Atom Publishing Control Extensions | |||
| 11.1 The Atom Publishing Control Namespace | 11.1 The Atom Publishing Control Namespace | |||
| This specification defines an Atom Format extension for publishing | This specification defines an Atom Format extension for publishing | |||
| control called Atom Publishing Control. The namespace name for the | control called Atom Publishing Control. The namespace name for the | |||
| Atom Publishing Control's XML vocabulary is | Atom Publishing Control's XML vocabulary is | |||
| "http://example.net/appns/". This specification uses "pub:" for the | "http://example.net/appns/". This specification uses "pub:" for the | |||
| namespace prefix. The choice of namespace prefix is not semantically | namespace prefix. The choice of namespace prefix is not semantically | |||
| skipping to change at page 23, line 50 | skipping to change at page 25, line 50 | |||
| as defined here, and MAY contain zero or more extension elements as | as defined here, and MAY contain zero or more extension elements as | |||
| outlined in Section 6 of [RFC4287]. Both clients and servers MUST | outlined in Section 6 of [RFC4287]. Both clients and servers MUST | |||
| ignore foreign markup present in the pub:control element. | ignore foreign markup present in the pub:control element. | |||
| 11.2.1 The "pub:draft" Element | 11.2.1 The "pub:draft" Element | |||
| The number of "pub:draft" elements in "pub:control" MUST be zero or | The number of "pub:draft" elements in "pub:control" MUST be zero or | |||
| one. Its value MUST be one of "yes" or "no". A value of "no" means | one. Its value MUST be one of "yes" or "no". A value of "no" means | |||
| that the entry MAY be made publicly visible. If the "pub:draft" | that the entry MAY be made publicly visible. If the "pub:draft" | |||
| element is missing then the value MUST be understood to be "no". The | element is missing then the value MUST be understood to be "no". The | |||
| pub:draft element MAY be ignored. | inclusion of the pub:draft element represents a request by the client | |||
| to control the visibility of an entry and the pub:draft element MAY | ||||
| 12. Atom Publishing Protocol Example | be ignored by the server. | |||
| This is an example of a client creating a new entry with an image. | ||||
| The client has an image to publish and an entry that includes an HTML | ||||
| "img" element that uses that image. In this scenario we consider a | ||||
| client that has IRIs of two collections, an entry collection and a | ||||
| media collection, both of which were discovered through an | ||||
| introspection document. The IRI of the entry collection is: | ||||
| http://example.net/blog/edit/ | ||||
| The IRI of the media collection is: | ||||
| http://example.net/binary/edit | ||||
| First the client creates a new image resource by POSTing the image to | ||||
| the IRI of the media collection. | ||||
| POST /binary/edit/ HTTP/1.1 | ||||
| Host: example.net | ||||
| User-Agent: Thingio/1.0 | ||||
| Content-Type: image/png | ||||
| Content-Length: nnnn | ||||
| Title: A picture of the beach | ||||
| ...binary data... | ||||
| The member resource is created and an HTTP status code of 201 is | ||||
| returned. | ||||
| HTTP/1.1 201 Created | ||||
| Date: Fri, 25 Mar 2005 17:17:11 GMT | ||||
| Content-Length: nnnn | ||||
| Content-Type: application/atom+xml | ||||
| Location: http://example.net/binary/edit/b/129.png | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <entry xmlns="http://www.w3.org/2005/Atom"> | ||||
| <title>A picture of the beach</title> | ||||
| <link rel="edit" | ||||
| href="http://example.net/binary/edit/b/129.png"/> | ||||
| <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-568596895695</id> | ||||
| <updated>2005-09-02T10:30:00Z</updated> | ||||
| <summary>Waves</summary> | ||||
| <content type="image/png" | ||||
| src="http://example.net/binary/readonly/129.png"/> | ||||
| </entry> | ||||
| The client then POSTs the Atom Entry that refers to the newly created | ||||
| image resource. Note that the client takes the URI | ||||
| http://example.net/binary/readonly/129.png and uses it in the 'img' | ||||
| element in the Entry content: | ||||
| POST /blog/edit/ HTTP/1.1 | ||||
| Host: example.net | ||||
| User-Agent: Thingio/1.0 | ||||
| Content-Type: application/atom+xml | ||||
| Content-Length: nnnn | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <entry xmlns="http://www.w3.org/2005/Atom"> | ||||
| <title>What I did on my summer vacation</title> | ||||
| <link href="http://example.org/atom05"/> | ||||
| <id>urn:uuid:1225c695-ffb8-4ebb-aaaa-80da354efa6a</id> | ||||
| <updated>2005-09-02T10:30:00Z</updated> | ||||
| <summary>Beach!</summary> | ||||
| <content type="xhtml" xml:lang="en"> | ||||
| <div xmlns="http://www.w3.org/1999/xhtml"> | ||||
| <p>We went to the beach for summer vacation. | ||||
| Here is a picture of the waves rolling in: | ||||
| <img | ||||
| src="http://example.net/binary/readonly/129.png" | ||||
| alt="A picture of the beach" | ||||
| /> | ||||
| </p> | ||||
| </div> | ||||
| </content> | ||||
| </entry> | ||||
| 13. Securing the Atom Protocol | 12. 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. | |||
| Atom Protocol servers and clients MUST support one of the following | [[anchor22: note: this section is currently under discussion.]] | |||
| authentication mechanisms, and SHOULD support both. | ||||
| o HTTP Digest Authentication [RFC2617] | ||||
| o CGI Authentication | ||||
| Atom Protocol servers and clients MAY support encryption of the | ||||
| session using TLS (see [RFC2246]). | ||||
| There are cases where an authentication mechanism might not be | ||||
| required, such as a publicly editable Wiki, or when using POST to | ||||
| send comments to a site that does not require authentication from a | ||||
| commenter. | ||||
| 13.1 CGI Authentication | ||||
| [[anchor27: note: this section is incomplete; cgi-authentication is | ||||
| described but is unspecified.]] This authentication method is | ||||
| included as part of the protocol to allow Atom Protocol servers and | ||||
| clients that cannot use HTTP Digest Authentication but where the user | ||||
| can both insert its own HTTP headers and create a CGI program to | ||||
| authenticate entries to the server. This scenario is common in | ||||
| environments where the user cannot control what services the server | ||||
| employs, but the user can write their own HTTP services. | ||||
| 14. Security Considerations | ||||
| The security of the Atom Protocol is based on HTTP Digest | ||||
| Authentication and/or CGI Authentication [[anchor29: note: refers to | ||||
| incomplete section]]. Any weaknesses in either of these | ||||
| authentication schemes will affect the security of the Atom | ||||
| Publishing Protocol. | ||||
| Both HTTP Digest Authentication and CGI Authentication [[anchor30: | ||||
| note: refers to incomplete section]] are susceptible to dictionary- | ||||
| based attacks on the shared secret. If the shared secret is a | ||||
| password (instead of a random string with sufficient entropy), an | ||||
| attacker can determine the secret by exhaustively comparing the | ||||
| authenticating string with hashed results of the public string and | ||||
| dictionary entries. | ||||
| See [RFC2617] for the description of the security properties of HTTP | 13. Security Considerations | |||
| Digest Authentication. | ||||
| [[anchor31: expand on HTTP basic and digest authentication, or | The security of the Atom Protocol is based on [[anchor24: note: | |||
| refer.]] | refers to incomplete section]]. | |||
| [[anchor32: note: talk here about denial of service attacks using | [[anchor25: 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.]] | |||
| 15. IANA Considerations | 14. IANA Considerations | |||
| An Atom Publishing Protocol Introspection Document, when serialized | An Atom Publishing Protocol Introspection Document, when serialized | |||
| as XML 1.0, can be identified with the following media type: | 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. | |||
| [[anchor33: update upon publication]] | [[anchor26: update upon publication]] | |||
| In addition, as this media type uses the "+xml" convention, it | In addition, as this media type uses the "+xml" convention, it | |||
| shares the same security considerations as described in [RFC3023], | shares the same security considerations as described in [RFC3023], | |||
| section 10. | section 10. | |||
| Interoperability considerations: There are no known interoperability | Interoperability considerations: There are no known interoperability | |||
| issues. | issues. | |||
| Published specification: This specification. [[anchor34: update upon | Published specification: This specification. [[anchor27: 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 29, line 14 | |||
| 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). [[anchor35: | Author/Change controller: This specification's author(s). [[anchor28: | |||
| update upon publication]] | update upon publication]] | |||
| 16. References | 15. References | |||
| 16.1 Normative References | 15.1 Normative References | |||
| [ISO88591] | [ISO88591] | |||
| ISO, "International Standard -- Information Processing -- | ISO, "International Standard -- Information Processing -- | |||
| 8-bit Single-Byte Coded Graphic Character Sets -- Part 1: | 8-bit Single-Byte Coded Graphic Character Sets -- Part 1: | |||
| Latin alphabet No. 1,", January 1987. | Latin alphabet No. 1,", January 1987. | |||
| [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. | |||
| [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", | ||||
| RFC 2246, January 1999. | ||||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [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 | |||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | ||||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | ||||
| Authentication: Basic and Digest Access Authentication", | ||||
| RFC 2617, June 1999. | ||||
| [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media | [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media | |||
| Types", RFC 3023, January 2001. | Types", RFC 3023, January 2001. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, January 2005. | RFC 3986, January 2005. | |||
| [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | |||
| Identifiers (IRIs)", RFC 3987, January 2005. | Identifiers (IRIs)", RFC 3987, January 2005. | |||
| skipping to change at page 31, line 15 | skipping to change at page 31, line 7 | |||
| 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. | |||
| 16.2 Informative References | 15.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 | |||
| skipping to change at page 35, line 16 | skipping to change at page 35, line 16 | |||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| # app:collection | # app:collection | |||
| appCollection = | appCollection = | |||
| element app:collection { | element app:collection { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| attribute title { text }, | attribute title { text }, | |||
| attribute href { atomUri }, | attribute href { atomUri }, | |||
| ( appMemberType | ( appAccept? | |||
| & extensionElement* ) | & extensionElement* ) | |||
| } | } | |||
| # app:member | # app:member | |||
| appMemberType = | appAccept = | |||
| element app:member-type { | element app:accept { | |||
| appCommonAttributes, | appCommonAttributes, | |||
| ( appTypeValue ) | ( appTypeValue? ) | |||
| } | } | |||
| appTypeValue = "entry" | "media" | appTypeValue = ( "entry" | media-type |entry-or-media-type ) | |||
| media-type = xsd:string { pattern = "entry,(.+/.+,?)*" } | ||||
| entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" } | ||||
| # above is an approximation, rnc doesn't support interleaved text | ||||
| # Simple Extension | # Simple Extension | |||
| simpleExtensionElement = | simpleExtensionElement = | |||
| element * - app:* { | element * - app:* { | |||
| text | text | |||
| } | } | |||
| # Structured Extension | # Structured Extension | |||
| skipping to change at page 37, line 7 | skipping to change at page 37, line 7 | |||
| element * { | element * { | |||
| (attribute * { text } | (attribute * { text } | |||
| | text | | text | |||
| | anyElement)* | | anyElement)* | |||
| } | } | |||
| # EOF | # EOF | |||
| Appendix C. Revision History | Appendix C. Revision History | |||
| draft-ietf-atompub-protocol-09: PaceWorkspaceMayHaveCollections, | ||||
| PaceMediaEntries5, | ||||
| http://www.imc.org/atom-protocol/mail-archive/msg05322.html, and | ||||
| 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, | |||
| PaceRemoveMemberTypeMust, PaceRemoveMemberTypePostMust, | PaceRemoveMemberTypeMust, PaceRemoveMemberTypePostMust, | |||
| PaceTitleHeaderOnlyInMediaCollections, PacePreserveForeignMarkup, | PaceTitleHeaderOnlyInMediaCollections, PacePreserveForeignMarkup, | |||
| PaceClarifyTitleHeader, PaceClarifyMediaResourceLinks, | PaceClarifyTitleHeader, PaceClarifyMediaResourceLinks, | |||
| PaceTwoPrimaryCollections; | PaceTwoPrimaryCollections; | |||
| End of changes. 81 change blocks. | ||||
| 297 lines changed or deleted | 321 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/ | ||||