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