draft-ietf-atompub-protocol-10.txt   draft-ietf-atompub-protocol-11.txt 
Network Working Group J. Gregorio, Ed. Network Working Group J. Gregorio, Ed.
Internet-Draft IBM Internet-Draft IBM
Expires: March 9, 2007 B. de hOra, Ed. Expires: April 6, 2007 B. de hOra, Ed.
Propylon Ltd. Propylon Ltd.
September 05, 2006 October 03, 2006
The Atom Publishing Protocol The Atom Publishing Protocol
draft-ietf-atompub-protocol-10.txt draft-ietf-atompub-protocol-11.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 March 9, 2007. This Internet-Draft will expire on April 6, 2007.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (2006). Copyright (C) The Internet Society (2006).
Abstract Abstract
The Atom Publishing Protocol (APP) is an application-level protocol The Atom Publishing Protocol (APP) is an application-level protocol
for publishing and editing Web resources. The protocol is based on for publishing and editing Web resources. The protocol is based on
HTTP transport of Atom-formatted representations. The Atom format is HTTP transport of Atom-formatted representations. The Atom format is
documented in the Atom Syndication Format (RFC4287). documented in the Atom Syndication Format [RFC4287].
Editorial Note Editorial Note
To provide feedback on this Internet-Draft, join the atom-protocol To provide feedback on this Internet-Draft, join the atom-protocol
mailing list (http://www.imc.org/atom-protocol/index.html) [1]. mailing list (http://www.imc.org/atom-protocol/index.html) [1].
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Notational Conventions . . . . . . . . . . . . . . . . . . . 5 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 5
2.1 XML-related Conventions . . . . . . . . . . . . . . . . . 5 2.1 XML-related Conventions . . . . . . . . . . . . . . . . . 5
2.1.1 Referring to Information Items . . . . . . . . . . . . 5 2.1.1 Referring to Information Items . . . . . . . . . . . . 5
2.1.2 RELAX NG Schema . . . . . . . . . . . . . . . . . . . 5 2.1.2 RELAX NG Schema . . . . . . . . . . . . . . . . . . . 5
2.1.3 Use of xml:base and xml:lang . . . . . . . . . . . . . 5 2.1.3 Use of xml:base and xml:lang . . . . . . . . . . . . . 5
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 7 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . 8 4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . 7
5. Protocol Operations . . . . . . . . . . . . . . . . . . . . 10 5. Protocol Operations . . . . . . . . . . . . . . . . . . . . 9
5.1 Retrieving a Service Document . . . . . . . . . . . . . . 10 5.1 Retrieving a Service Document . . . . . . . . . . . . . . 9
5.2 Listing Collection Members . . . . . . . . . . . . . . . . 10 5.2 Listing Collection Members . . . . . . . . . . . . . . . . 9
5.3 Creating a Resource . . . . . . . . . . . . . . . . . . . 11 5.3 Creating a Resource . . . . . . . . . . . . . . . . . . . 10
5.4 Editing a Resource . . . . . . . . . . . . . . . . . . . . 11 5.4 Editing a Resource . . . . . . . . . . . . . . . . . . . . 10
5.4.1 Retrieving a Resource . . . . . . . . . . . . . . . . 11 5.4.1 Retrieving a Resource . . . . . . . . . . . . . . . . 10
5.4.2 Updating a Resource . . . . . . . . . . . . . . . . . 12 5.4.2 Updating a Resource . . . . . . . . . . . . . . . . . 11
5.4.3 Deleting a Resource . . . . . . . . . . . . . . . . . 12 5.4.3 Deleting a Resource . . . . . . . . . . . . . . . . . 11
5.5 Use of HTTP Response codes . . . . . . . . . . . . . . . . 12 5.5 Use of HTTP Response codes . . . . . . . . . . . . . . . . 11
6. Atom Publishing Protocol Documents . . . . . . . . . . . . . 13 6. Atom Publishing Protocol Documents . . . . . . . . . . . . . 12
6.1 Document Types . . . . . . . . . . . . . . . . . . . . . . 13 6.1 Document Types . . . . . . . . . . . . . . . . . . . . . . 12
6.2 Document Extensibility . . . . . . . . . . . . . . . . . . 13 6.2 Document Extensibility . . . . . . . . . . . . . . . . . . 12
7. Category Documents . . . . . . . . . . . . . . . . . . . . . 14 7. Category Documents . . . . . . . . . . . . . . . . . . . . . 13
7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 14 7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.2 Element Definitions . . . . . . . . . . . . . . . . . . . 14 7.2 Element Definitions . . . . . . . . . . . . . . . . . . . 13
7.2.1 The "app:categories" element . . . . . . . . . . . . . 14 7.2.1 The "app:categories" element . . . . . . . . . . . . . 13
8. Service Documents . . . . . . . . . . . . . . . . . . . . . 16 8. Service Documents . . . . . . . . . . . . . . . . . . . . . 15
8.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 16 8.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.2 Element Definitions . . . . . . . . . . . . . . . . . . . 17 8.2 Element Definitions . . . . . . . . . . . . . . . . . . . 17
8.2.1 The "app:service" Element . . . . . . . . . . . . . . 17 8.2.1 The "app:service" Element . . . . . . . . . . . . . . 17
8.2.2 The "app:workspace" Element . . . . . . . . . . . . . 17 8.2.2 The "app:workspace" Element . . . . . . . . . . . . . 17
8.2.3 The "app:collection" Element . . . . . . . . . . . . . 18 8.2.3 The "app:collection" Element . . . . . . . . . . . . . 18
8.2.4 The "app:accept" Element . . . . . . . . . . . . . . . 19 8.2.4 The "app:accept" Element . . . . . . . . . . . . . . . 19
8.2.5 The "app:categories" Element . . . . . . . . . . . . . 20 8.2.5 The "app:categories" Element . . . . . . . . . . . . . 20
9. Creating and Editing Resources . . . . . . . . . . . . . . . 22 9. Creating and Editing Resources . . . . . . . . . . . . . . . 22
9.1 Member URIs . . . . . . . . . . . . . . . . . . . . . . . 22 9.1 Member URIs . . . . . . . . . . . . . . . . . . . . . . . 22
9.2 Creating resources with POST . . . . . . . . . . . . . . . 22 9.2 Creating resources with POST . . . . . . . . . . . . . . . 22
9.2.1 Example . . . . . . . . . . . . . . . . . . . . . . . 23 9.2.1 Example . . . . . . . . . . . . . . . . . . . . . . . 23
9.3 Updating Resources with PUT . . . . . . . . . . . . . . . 24 9.3 Updating Resources with PUT . . . . . . . . . . . . . . . 24
9.4 Deleting Resources with DELETE . . . . . . . . . . . . . . 24 9.4 Deleting Resources with DELETE . . . . . . . . . . . . . . 24
9.5 Media Resources and Media Link Entries . . . . . . . . . . 24 9.5 Media Resources and Media Link Entries . . . . . . . . . . 24
9.6 The Slug: Header . . . . . . . . . . . . . . . . . . . . . 25 9.6 The Slug: Header . . . . . . . . . . . . . . . . . . . . . 25
9.6.1 Slug: Header syntax . . . . . . . . . . . . . . . . . 25 9.6.1 Slug: Header syntax . . . . . . . . . . . . . . . . . 25
9.6.2 Examples . . . . . . . . . . . . . . . . . . . . . . . 26 9.6.2 Examples . . . . . . . . . . . . . . . . . . . . . . . 26
10. Listing Collections . . . . . . . . . . . . . . . . . . . . 28 10. Listing Collections . . . . . . . . . . . . . . . . . . . . 28
10.1 Collection Paging . . . . . . . . . . . . . . . . . . . 28 10.1 Collection Paging . . . . . . . . . . . . . . . . . . . 28
10.2 The "app:edited" Element . . . . . . . . . . . . . . . . 29
11. Atom Format Link Relation Extensions . . . . . . . . . . . . 30 11. Atom Format Link Relation Extensions . . . . . . . . . . . . 30
11.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 30 11.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 30
11.2 The "edit-media" Link Relation . . . . . . . . . . . . . 30 11.2 The "edit-media" Link Relation . . . . . . . . . . . . . 30
12. Atom Publishing Controls . . . . . . . . . . . . . . . . . . 31 12. Atom Publishing Controls . . . . . . . . . . . . . . . . . . 31
12.1 The "app:control" Element . . . . . . . . . . . . . . . 31 12.1 The "app:control" Element . . . . . . . . . . . . . . . 31
12.1.1 The "app:draft" Element . . . . . . . . . . . . . . 31 12.1.1 The "app:draft" Element . . . . . . . . . . . . . . 31
13. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 32 13. Securing the Atom Publishing Protocol . . . . . . . . . . . 32
14. Security Considerations . . . . . . . . . . . . . . . . . . 33 14. Security Considerations . . . . . . . . . . . . . . . . . . 33
14.1 Denial of Service . . . . . . . . . . . . . . . . . . . 33
14.2 Replay Attacks . . . . . . . . . . . . . . . . . . . . . 33
14.3 Spoofing Attacks . . . . . . . . . . . . . . . . . . . . 33
14.4 Linked Resources . . . . . . . . . . . . . . . . . . . . 33
14.5 Digital Signatures and Encryption . . . . . . . . . . . 33
14.6 URIs and IRIs . . . . . . . . . . . . . . . . . . . . . 33
15. IANA Considerations . . . . . . . . . . . . . . . . . . . . 34 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . 34
15.1 Content-type registration for 15.1 Content-type registration for
'application/atomserv+xml' . . . . . . . . . . . . . . . 34 'application/atomserv+xml' . . . . . . . . . . . . . . . 34
15.2 Content-type registration for 15.2 Content-type registration for
'application/atomcat+xml' . . . . . . . . . . . . . . . 35 'application/atomcat+xml' . . . . . . . . . . . . . . . 35
16. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 15.3 Header field registration for 'SLUG' . . . . . . . . . . 36
16.1 Normative References . . . . . . . . . . . . . . . . . . 37 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 38
16.2 Informative References . . . . . . . . . . . . . . . . . 38 16.1 Normative References . . . . . . . . . . . . . . . . . . 38
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 39 16.2 Informative References . . . . . . . . . . . . . . . . . 39
A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 40 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 40
B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 41 A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 41
C. Revision History . . . . . . . . . . . . . . . . . . . . . . 47 B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 42
Intellectual Property and Copyright Statements . . . . . . . 50 C. Revision History . . . . . . . . . . . . . . . . . . . . . . 48
Intellectual Property and Copyright Statements . . . . . . . 51
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-20060816]. The protocol supports the creation of
arbitrary web resources and provides facilities for: arbitrary web resources and provides facilities for:
o Collections: Sets of resources, which can be retrieved in whole or o Collections: Sets of resources, which can be retrieved in whole or
in part. in part.
o Service: Discovering and describing Collections. o Service: Discovering and describing Collections.
o Editing: Creating, updating and deleting resources. o Editing: Creating, updating and deleting resources.
2. Notational Conventions 2. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
Atom Protocol documents allow the use of IRIs [RFC3987], as well as
URIs [RFC3986]. Before an IRI found in a document is used by HTTP,
the IRI is first converted to a URI according the procedure defined
in [RFC3987] (Section 3.1). The resource identified by the URI after
conversion is the same as the one identified by the IRI.
2.1 XML-related Conventions 2.1 XML-related Conventions
2.1.1 Referring to Information Items 2.1.1 Referring to Information Items
Atom Protocol Document formats are specified in terms of the XML Atom Protocol Document formats are specified in terms of the XML
Information Set [W3C.REC-xml-infoset-20040204], serialized as XML 1.0 Information Set [W3C.REC-xml-infoset-20040204], serialized as XML 1.0
[W3C.REC-xml-20040204]. [W3C.REC-xml-20060816].
The Infoset terms "Element Information Item" and "Attribute The Infoset terms "Element Information Item" and "Attribute
Information Item" are shortened to "element" and "attribute" Information Item" are shortened to "element" and "attribute"
respectively. Therefore, when this specification uses the term respectively. Therefore, when this specification uses the term
"element", it is referring to an Element Information Item, and when "element", it is referring to an Element Information Item, and when
it uses the term "attribute", it is referring to an Attribute it uses the term "attribute", it is referring to an Attribute
Information Item. Information Item.
2.1.2 RELAX NG Schema 2.1.2 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]. However, the text of a non-normative RELAX NG Compact schema [RNC]. However, the text of
this specification provides the definition of conformance. Complete this specification provides the definition of conformance. Complete
schemas appear in Appendix B. schemas appear in Appendix B.
2.1.3 Use of xml:base and xml:lang 2.1.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], by establishing the base URI (or IRI) for resolving [RFC3986], by establishing the base URI (or IRI) for resolving
relative references found within the scope of the xml:base attribute. relative references found within the scope of the xml:base attribute.
Any element defined by this specification MAY have an xml:lang Any element defined by this specification MAY have an xml:lang
attribute, whose content indicates the natural language for the attribute, whose content indicates the natural language for the
element and its descendents. The language context is only element and its descendents. The language context is only
significant for elements and attributes declared to be "Language- significant for elements and attributes declared to be "Language-
Sensitive" by this specification. Requirements regarding the content Sensitive" by this specification. Requirements regarding the content
and interpretation of xml:lang are specified in Section 2.12 of XML and interpretation of xml:lang are specified in Section 2.12 of XML
1.0 [W3C.REC-xml-20040204]. 1.0 [W3C.REC-xml-20060816].
3. Terminology 3. Terminology
For convenience, this protocol can be referred to as the "Atom For convenience, this protocol can be referred to as the "Atom
Protocol" or "APP". Protocol" or "APP".
URI/IRI - A Uniform Resource Identifier and Internationalized URI/IRI - A Uniform Resource Identifier and Internationalized
Resource Identifier. These terms and the distinction between them Resource Identifier. These terms and the distinction between them
are defined in [RFC3986] and [RFC3987]. IRIs are mapped to URIs are defined in [RFC3986] and [RFC3987]. Before an IRI found in a
before dereferencing takes place. document is used by HTTP, the IRI is first converted to a URI (see
Section 4
The phrase "the URI of a document" in this specification is shorthand The phrase "the URI of a document" in this specification is shorthand
for "a URI which, when dereferenced, is expected to produce that for "a URI which, when dereferenced, is expected to produce that
document as a representation". document as a representation".
Resource - A network-accessible data object or service identified by Resource - A network-accessible data object or service identified by
an IRI, as defined in [RFC2616]. See [W3C.REC-webarch-20041215] for an IRI, as defined in [RFC2616]. See [W3C.REC-webarch-20041215] for
further discussion on resources. further discussion on resources.
Representation - An entity included with a request or response as Representation - An entity included with a request or response as
defined in [RFC2616]. defined in [RFC2616].
Collection - A resource that contains a set of Member IRIs. See Collection - A resource that contains a set of Member Entries. See
Section 9. Section 9.
Member - A resource whose IRI is listed in a Collection by a link Member - A resource whose IRI is listed in a Collection by a link
element with a relation of "edit" or "edit-media". See Section 9.1. element with a relation of "edit" or "edit-media". See Section 9.1.
Workspace - A group of collections. See Section 8. Workspace - A group of collections. See Section 8.
Service Document - A document that describes the location and Service Document - A document that describes the location and
capabilities of one or more Collections. See Section 8. capabilities of one or more Collections. See Section 8.
Category Document - A document that describes the categories allowed Category Document - A document that describes the categories allowed
in a Collection. See Section 7. in a Collection. See Section 7.
4. Protocol Model 4. Protocol Model
The Atom Publishing Protocol uses HTTP methods to edit and author The Atom Publishing Protocol uses HTTP methods to author Member
Member Resources as follows: Resources as follows:
o GET is used to retrieve a representation of a known resource. o GET is used to retrieve a representation of a known resource.
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 known resource. o DELETE is used to remove a known resource.
Along with operations on Member Resources the Atom Protocol defines Along with operations on Member Resources the Atom Protocol defines
Collection resources for managing and organizing Member Resources. Collection resources for managing and organizing Member Resources.
Collections are represented by Atom Feed documents and contain the Collections are represented by Atom Feed documents and contain the
IRIs of, and metadata about, their Member Resources. IRIs of, and metadata about, their Member Resources.
Atom Protocol documents allow the use of IRIs [RFC3987], as well as
URIs [RFC3986]. Before an IRI found in a document is used by HTTP,
the IRI is first converted to a URI according the procedure defined
in Section 3.1 of [RFC3987]. The resource identified by the URI
after conversion is the same as the one identified by the IRI.
There are two kinds of Member Resources - Member Entry Resources and There are two kinds of Member Resources - Member Entry Resources and
Media Resources. Member Entry Resources are represented as Atom Media Resources. Member Entry Resources are represented as Atom
Entries. Media Resources MAY have representations in any media type. Entries [RFC4287]. Media Resources can have representations in any
A Media Link Entry is a Member Entry that contains metadata about a media type. A Media Link Entry is a Member Entry that contains
Media Resource. This diagram shows the classification of the metadata about a Media Resource. This diagram shows the
resources: classification of the resources:
Member Resource Member Resource
-> Member Entry Resource -> Member Entry Resource
-> Media Link Entry Resource -> Media Link Entry Resource
-> Media Resource -> Media Resource
Collections, represented by Atom feeds, contain entries. Those Collections, represented by Atom feeds, contain entries. Those
entries contain the Member Entry and Media Resources IRIs of the entries contain the Member Entry and Media Resources IRIs of the
Collection. A Collection can contain any number of entries of either Collection. A Collection can contain any number of entries of either
kind. In the diagram of a Collection below there are two entries. kind. In the diagram of a Collection below there are two entries.
skipping to change at page 10, line 11 skipping to change at page 9, line 11
Service Documents represent server-defined groups of Collections, and Service Documents represent server-defined groups of Collections, and
are used to initialize the process of creating and editing resources. are used to initialize the process of creating and editing resources.
5. Protocol Operations 5. Protocol Operations
5.1 Retrieving a Service Document 5.1 Retrieving a Service Document
Client Server Client Server
| | | |
| 1.) GET to URI of Service Document | | 1.) GET to Service Document |
|------------------------------------------>| |------------------------------------------>|
| | | |
| 2.) Service Document | | 2.) Service Document |
|<------------------------------------------| |<------------------------------------------|
| | | |
1. The client sends a GET request to the URI of the Service 1. The client sends a GET request using the URI of the Service
Document. Document.
2. The server responds with the document enumerating the IRIs of a 2. The server responds with the document enumerating the IRIs of a
set of Collections and the capabilities of those Collections set of Collections and the capabilities of those Collections
supported by the server. The content of this document can vary supported by the server. The content of this document can vary
based on aspects of the client request, including, but not based on aspects of the client request, including, but not
limited to, authentication credentials. limited to, authentication credentials.
5.2 Listing Collection Members 5.2 Listing Collection Members
To list the members of a Collection the client sends a GET request to To list the members of a Collection, the client sends a GET request
the URI of a Collection. An Atom Feed Document is returned to the URI of a Collection. An Atom Feed Document is returned
containing one Atom Entry for each Member Entry Resource. See containing one Atom Entry for each Member Entry Resource. See
Section 10 and Section 11 for a description of the feed contents. Section 10 and Section 11 for a description of the feed contents.
Client Server Client Server
| | | |
| 1.) GET to Collection URI | | 1.) GET to Collection URI |
|------------------------------->| |------------------------------->|
| | | |
| 2.) 200 OK, Atom Feed Doc | | 2.) 200 OK, Atom Feed Doc |
|<-------------------------------| |<-------------------------------|
skipping to change at page 12, line 46 skipping to change at page 11, line 46
with a status code of 200. with a status code of 200.
A different approach is taken for deleting Media Resources, see A different approach is taken for deleting Media Resources, see
Section 9.5 for details. Section 9.5 for details.
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 Implementers are asked to note that per the HTTP specification, HTTP
responses include a human-readable explanation of the error. 4xx and 5xx response entities SHOULD include a human-readable
explanation of the error.
6. Atom Publishing Protocol Documents 6. Atom Publishing Protocol Documents
6.1 Document Types 6.1 Document Types
This specification describes two kinds of Documents - Category This specification describes two kinds of Documents - Category
Documents and Service Documents. Documents and Service Documents.
A Category Document (Section 7) contain lists of categories specified A Category Document (Section 7) contain lists of categories specified
using the "atom:category" element from the Atom Syndication Format. using the "atom:category" element from the Atom Syndication Format.
A Service Document (Section 8) describes capabilities of workspaces, A Service Document (Section 8) describes capabilities of workspaces,
which are server-defined groupings of Collections. which are server-defined groupings of Collections.
The namespace name [W3C.REC-xml-names-19990114] for either kind of The namespace name [W3C.REC-xml-names-20060816] for either kind of
document is: document is:
http://purl.org/atom/app# http://purl.org/atom/app#
[[anchor8: Needs to be updated with the final URI upon publication]]
This specification uses the prefix "app:" for the namespace name. This specification uses the prefix "app:" for the namespace name.
The prefix "atom:" is used for "http://www.w3.org/2005/Atom", the The prefix "atom:" is used for "http://www.w3.org/2005/Atom", the
namespace name of the Atom Syndication Format [RFC4287]. The namespace name of the Atom Syndication Format [RFC4287]. The
namespace prefixes are not semantically significant. namespace prefixes are not semantically significant.
Atom Publishing Protocol Documents MUST be well-formed XML. This Atom Publishing Protocol Documents MUST be well-formed XML. This
specification does not define any DTDs for Atom Protocol formats, and specification does not define any DTDs for Atom Protocol formats, and
hence does not require them to be "valid" in the sense used by XML. hence does not require them to be "valid" in the sense used by XML.
6.2 Document Extensibility 6.2 Document Extensibility
The namespace name "http://purl.org/atom/app#" is reserved for future
forward-compatible revisions of the document types. Future versions
of this specification could add new elements and attributes.
Software written to conform to this version of the specification will
not be able to process such markup correctly and in fact will not be
able to distinguish it from markup error.
Unrecognized markup in an Atom Publishing Protocol document is Unrecognized markup in an Atom Publishing Protocol document is
considered "foreign markup" as defined in [RFC4287]. considered "foreign markup" as defined in [RFC4287]. Such foreign
markup can be used anywhere within a Category or Service Document
unless it is explicitly forbidden. Processors that encounter foreign
markup MUST NOT stop processing or signal an error, and SHOULD
preserve foreign markup when transmitting such documents.
Markup from other vocabularies ("foreign markup") can be used The namespace name "http://purl.org/atom/app#" is reserved for
anywhere within a Category or Service Document unless it is forward compatible revisions of the Category and Service Document
explicitly forbidden. Processors that encounter foreign markup MUST types - this does not exclude the addition of elements and attributes
NOT stop processing or signal an error, and SHOULD preserve foreign that might not be recognised by processors conformant to this
markup when transmitting such documents. specification. Such unrecognised markup from the
"http://purl.org/atom/app#" namespace MUST be treated as foreign
markup.
7. Category Documents 7. Category Documents
Category Documents contain lists of categories described using the Category Documents contain lists of categories described using the
"atom:category" element from the Atom Syndication Format [RFC4287]. "atom:category" element from the Atom Syndication Format [RFC4287].
Categories can also appear in Service Documents and describe the Categories can also appear in Service Documents and describe the
categories allowed in a Collection (see Section 8.2.5). categories allowed in a Collection (see Section 8.2.5).
Category Documents are identified with the "application/atomcat+xml" Category Documents are identified with the "application/atomcat+xml"
media type (see Section 15). media type (see Section 15).
skipping to change at page 14, line 27 skipping to change at page 13, line 27
<?xml version="1.0" ?> <?xml version="1.0" ?>
<app:categories <app:categories
xmlns:app="http://purl.org/atom/app#" xmlns:app="http://purl.org/atom/app#"
xmlns="http://www.w3.org/2005/Atom" xmlns="http://www.w3.org/2005/Atom"
fixed="yes" scheme="http://example.com/cats/big3"> fixed="yes" scheme="http://example.com/cats/big3">
<category term="animal" /> <category term="animal" />
<category term="vegetable" /> <category term="vegetable" />
<category term="mineral" /> <category term="mineral" />
</app:categories> </app:categories>
This Category Document contains three categories with the terms This Category Document contains three categories, with the terms
"animal", "vegetable", and "mineral". None of the categories has a "animal", "vegetable", and "mineral". None of the categories use the
label attribute (as defined in [RFC4287]). They all inherit the 'label' attribute defined in [RFC4287]. They all inherit the
"http://example.com/cats/big3" category 'scheme' (in the [RFC4287] "http://example.com/cats/big3" 'scheme' attribute declared on the
sense) declared on the app:categories element. Therefore if the app:categories element. Therefore if the "mineral" category were to
"mineral" category were to appear in an Atom Entry or Feed Document, appear in an Atom Entry or Feed Document, it would appear as:
it would appear as:
<category scheme="http://example.com/cats/big3" term="mineral" /> <category scheme="http://example.com/cats/big3" term="mineral" />
7.2 Element Definitions 7.2 Element Definitions
7.2.1 The "app:categories" element 7.2.1 The "app:categories" element
The root of a Category Document is the "app:categories" element. An The root of a Category Document is the "app:categories" element. An
app:categories element MAY contain one or more "atom:category" app:categories element can contain zero or more "atom:category"
elements from the Atom namespace ("http://www.w3.org/2005/Atom"). elements from the Atom namespace ("http://www.w3.org/2005/Atom").
If an app:category child element has no "scheme" attribute it An app:category child element that has no "scheme" attribute inherits
inherits the attribute from its app:categories parent. An app: the attribute from its app:categories parent. An app:category child
category child element with an existing "scheme" attribute does not element with an existing "scheme" attribute does not inherit the
inherit the "scheme" value of its "app:categories" parent element. "scheme" value of its "app:categories" parent element.
7.2.1.1 Attributes of "app:categories" 7.2.1.1 Attributes of "app:categories"
The app:categories element MAY contain a "fixed" attribute, with a The app:categories element can contain a "fixed" attribute, with a
value of either "yes" or "no", indicating if the list of categories value of either "yes" or "no", indicating whether the list of
is a fixed or an open set. Collections that indicate the set is categories is a fixed or an open set. Newly created or updated
fixed MAY reject members whose categories are not listed in the members whose categories are not listed in the Collection Document
Collection Document. Collections that indicate the set is open MAY be rejected by the server. Collections that indicate the set is
SHOULD NOT reject otherwise acceptable members whose categories are open SHOULD NOT reject otherwise acceptable members whose categories
not listed in the Collection. are not listed in the Collection.
Alternatively, the app:categories element MAY contain an "href" Alternatively, the app:categories element MAY contain an "href"
attribute, whose value MUST be an IRI reference identifying a attribute, whose value MUST be an IRI reference identifying a
Category Document. If the "href" attribute is provided, the app: Category Document. If the "href" attribute is provided the app:
categories element MUST be empty and MUST NOT have the "fixed" or categories element MUST be empty and MUST NOT have the "fixed" or
"scheme" attributes. "scheme" attributes.
atomCategory = atomCategory =
element atom:category { element atom:category {
atomCommonAttributes, atomCommonAttributes,
attribute term { text }, attribute term { text },
attribute scheme { atomURI }?, attribute scheme { atomURI }?,
attribute label { text }?, attribute label { text }?,
undefinedContent undefinedContent
skipping to change at page 15, line 40 skipping to change at page 14, line 36
appInlineCategories = appInlineCategories =
element app:categories { element app:categories {
attribute fixed { "yes" | "no" }?, attribute fixed { "yes" | "no" }?,
attribute scheme { atomURI }?, attribute scheme { atomURI }?,
(atomCategory*) (atomCategory*)
} }
appOutOfLineCategories = appOutOfLineCategories =
element app:categories { element app:categories {
attribute href { atomURI }, attribute href { atomURI },
(empty) undefinedContent
} }
appCategories = appInlineCategories | appOutOfLineCategories appCategories = appInlineCategories | appOutOfLineCategories
8. Service Documents 8. Service Documents
For authoring to commence, a client needs to first discover the For authoring to commence, a client needs to first discover the
capabilities and locations of the available collections. Service capabilities and locations of the available collections. Service
Documents are designed to support this discovery process. Documents are designed to support this discovery process. How
Service Documents are in turn discovered is not defined in this
specification.
A Service Document describes workspaces, which are server-defined A Service Document describes workspaces, which are server-defined
groupings of Collections. Service Documents are identified with the groupings of Collections. Service Documents are identified with the
"application/atomserv+xml" media type (see Section 15). "application/atomserv+xml" media type (see Section 15).
There is no requirement that a server support multiple workspaces. There is no requirement that a server support multiple workspaces.
In addition, a Collection MAY appear in more than one Workspace. In addition, a Collection MAY appear in more than one Workspace.
8.1 Example 8.1 Example
skipping to change at page 18, line 10 skipping to change at page 17, line 42
8.2.2 The "app:workspace" Element 8.2.2 The "app:workspace" Element
The "app:workspace" element contains information elements about the The "app:workspace" element contains information elements about the
collections of resources available for editing. The app:workspace collections of resources available for editing. The app:workspace
element contains zero or more app:collection elements. element contains zero or more app:collection elements.
appWorkspace = appWorkspace =
element app:workspace { element app:workspace {
appCommonAttributes, appCommonAttributes,
( appCollection* ( atomTitle
& appCollection*
& extensionElement* ) & extensionElement* )
} }
atomTitle = element atom:title { atomTextConstruct } atomTitle = element atom:title { atomTextConstruct }
In an app:workspace element, the first app:collection element MUST In an app:workspace element, the first app:collection element MUST
refer to the preferred or primary Collection. In the following refer to the preferred or primary Collection. This distinction is
example, the "Entries" collection would be considered the preferred considered useful in scenarios where Members and Media Link Entries
are POSTed to different Collections. In the following example, the
"Eintragungen" collection would be considered the preferred
Collection: Collection:
<service xmlns="http://purl.org/atom/app#" <service xmlns="http://purl.org/atom/app#"
xmlns:atom="http://www.w3.org/2005/Atom"> xmlns:atom="http://www.w3.org/2005/Atom">
<workspace> <workspace xml:lang="de">
<atom:title>My Blog</atom:title> <atom:title>Das Blog</atom:title>
<collection <collection
href="http://example.org/myblog/entries" > href="http://example.org/blog/eintragungen" >
<atom:title>Entries</atom:title> <atom:title>Eintragungen</atom:title>
</collection> </collection>
<collection <collection
href="http://example.org/myblog/fotes"> href="http://example.org/blog/fotos">
<atom:title>Photos</atom:title> <atom:title>Fotos</atom:title>
<accept>image/*</accept> <accept>image/*</accept>
</collection> </collection>
</workspace> </workspace>
</service> </service>
8.2.2.1 The "atom:title" Element 8.2.2.1 The "atom:title" Element
The app:workspace element MUST contain one "atom:title" element, The app:workspace element MUST contain one "atom:title" element (as
giving a human-readable title for the workspace. defined in [RFC4287]), giving a human-readable title for the
workspace.
8.2.3 The "app:collection" Element 8.2.3 The "app:collection" Element
The "app:collection" element describes a Collection. The app: The "app:collection" element describes a Collection. The app:
collection element MAY contain one app:accept element and MAY contain collection element MAY contain one app:accept element and MAY contain
any number of app:categories elements. The app:collection element any number of app:categories elements. The app:collection element