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/ |