--- 1/draft-ietf-atompub-protocol-09.txt 2006-09-12 22:12:09.000000000 +0200
+++ 2/draft-ietf-atompub-protocol-10.txt 2006-09-12 22:12:09.000000000 +0200
@@ -1,19 +1,19 @@
Network Working Group J. Gregorio, Ed.
-Internet-Draft BitWorking, Inc
-Expires: December 25, 2006 B. de hOra, Ed.
+Internet-Draft IBM
+Expires: March 9, 2007 B. de hOra, Ed.
Propylon Ltd.
- June 23, 2006
+ September 05, 2006
The Atom Publishing Protocol
- draft-ietf-atompub-protocol-09.txt
+ draft-ietf-atompub-protocol-10.txt
Status of this Memo
By submitting this Internet-Draft, each author represents that any
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
aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
@@ -24,793 +24,1053 @@
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
- This Internet-Draft will expire on December 25, 2006.
+ This Internet-Draft will expire on March 9, 2007.
Copyright Notice
Copyright (C) The Internet Society (2006).
Abstract
The Atom Publishing Protocol (APP) is an application-level protocol
for publishing and editing Web resources. The protocol is based on
HTTP transport of Atom-formatted representations. The Atom format is
documented in the Atom Syndication Format (RFC4287).
Editorial Note
To provide feedback on this Internet-Draft, join the atom-protocol
mailing list (http://www.imc.org/atom-protocol/index.html) [1].
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Notational Conventions . . . . . . . . . . . . . . . . . . . 5
- 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 6
- 4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . 7
- 5. Protocol Operations . . . . . . . . . . . . . . . . . . . . 8
- 5.1 Retrieving an Introspection Document . . . . . . . . . . . 8
- 5.2 Creating a Resource . . . . . . . . . . . . . . . . . . . 8
- 5.3 Editing a Resource . . . . . . . . . . . . . . . . . . . . 8
- 5.3.1 Retrieving a Resource . . . . . . . . . . . . . . . . 9
- 5.3.2 Updating a Resource . . . . . . . . . . . . . . . . . 9
- 5.3.3 Deleting a Resource . . . . . . . . . . . . . . . . . 9
- 5.4 Listing Collection Members . . . . . . . . . . . . . . . . 10
- 5.5 Use of HTTP Response codes . . . . . . . . . . . . . . . . 10
- 6. XML-related Conventions . . . . . . . . . . . . . . . . . . 11
- 6.1 Referring to Information Items . . . . . . . . . . . . . . 11
- 6.2 XML Namespace Usage . . . . . . . . . . . . . . . . . . . 11
- 6.3 Use of xml:base and xml:lang . . . . . . . . . . . . . . . 11
- 6.4 RELAX NG Schema . . . . . . . . . . . . . . . . . . . . . 12
- 7. Introspection Documents . . . . . . . . . . . . . . . . . . 13
- 7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 13
+ 2.1 XML-related Conventions . . . . . . . . . . . . . . . . . 5
+ 2.1.1 Referring to Information Items . . . . . . . . . . . . 5
+ 2.1.2 RELAX NG Schema . . . . . . . . . . . . . . . . . . . 5
+ 2.1.3 Use of xml:base and xml:lang . . . . . . . . . . . . . 5
+ 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 7
+ 4. Protocol Model . . . . . . . . . . . . . . . . . . . . . . . 8
+ 5. Protocol Operations . . . . . . . . . . . . . . . . . . . . 10
+ 5.1 Retrieving a Service Document . . . . . . . . . . . . . . 10
+ 5.2 Listing Collection Members . . . . . . . . . . . . . . . . 10
+ 5.3 Creating a Resource . . . . . . . . . . . . . . . . . . . 11
+ 5.4 Editing a Resource . . . . . . . . . . . . . . . . . . . . 11
+ 5.4.1 Retrieving a Resource . . . . . . . . . . . . . . . . 11
+ 5.4.2 Updating a Resource . . . . . . . . . . . . . . . . . 12
+ 5.4.3 Deleting a Resource . . . . . . . . . . . . . . . . . 12
+ 5.5 Use of HTTP Response codes . . . . . . . . . . . . . . . . 12
+ 6. Atom Publishing Protocol Documents . . . . . . . . . . . . . 13
+ 6.1 Document Types . . . . . . . . . . . . . . . . . . . . . . 13
+ 6.2 Document Extensibility . . . . . . . . . . . . . . . . . . 13
+ 7. Category Documents . . . . . . . . . . . . . . . . . . . . . 14
+ 7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.2 Element Definitions . . . . . . . . . . . . . . . . . . . 14
- 7.2.1 The "app:service" Element . . . . . . . . . . . . . . 14
- 7.2.2 The "app:workspace" Element . . . . . . . . . . . . . 14
- 7.2.3 The "app:collection" Element . . . . . . . . . . . . . 15
- 7.2.4 The "app:accept" Element . . . . . . . . . . . . . . . 16
- 8. Collections . . . . . . . . . . . . . . . . . . . . . . . . 17
- 8.1 Creating resources with POST . . . . . . . . . . . . . . . 17
- 8.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 17
- 8.3 The 'edit' Link . . . . . . . . . . . . . . . . . . . . . 19
- 8.4 Media Resources and Media Link Entries . . . . . . . . . . 19
- 8.4.1 Title: Header . . . . . . . . . . . . . . . . . . . . 20
- 8.4.2 Example . . . . . . . . . . . . . . . . . . . . . . . 20
- 8.5 Editing Entries with Foreign Markup . . . . . . . . . . . 21
- 9. Listing Collections . . . . . . . . . . . . . . . . . . . . 22
- 9.1 Collection Paging . . . . . . . . . . . . . . . . . . . . 22
- 10. Atom Format Link Relation Extensions . . . . . . . . . . . . 24
- 10.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 24
- 10.2 The "edit-media" Link Relation . . . . . . . . . . . . . 24
- 11. Atom Publishing Control Extensions . . . . . . . . . . . . . 25
- 11.1 The Atom Publishing Control Namespace . . . . . . . . . 25
- 11.2 The "pub:control" Element . . . . . . . . . . . . . . . 25
- 11.2.1 The "pub:draft" Element . . . . . . . . . . . . . . 25
- 12. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 26
- 13. Security Considerations . . . . . . . . . . . . . . . . . . 27
- 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . 28
- 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 30
- 15.1 Normative References . . . . . . . . . . . . . . . . . . 30
- 15.2 Informative References . . . . . . . . . . . . . . . . . 31
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 32
- A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 33
- B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 34
- C. Revision History . . . . . . . . . . . . . . . . . . . . . . 37
- Intellectual Property and Copyright Statements . . . . . . . 40
+ 7.2.1 The "app:categories" element . . . . . . . . . . . . . 14
+ 8. Service Documents . . . . . . . . . . . . . . . . . . . . . 16
+ 8.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . 16
+ 8.2 Element Definitions . . . . . . . . . . . . . . . . . . . 17
+ 8.2.1 The "app:service" Element . . . . . . . . . . . . . . 17
+ 8.2.2 The "app:workspace" Element . . . . . . . . . . . . . 17
+ 8.2.3 The "app:collection" Element . . . . . . . . . . . . . 18
+ 8.2.4 The "app:accept" Element . . . . . . . . . . . . . . . 19
+ 8.2.5 The "app:categories" Element . . . . . . . . . . . . . 20
+ 9. Creating and Editing Resources . . . . . . . . . . . . . . . 22
+ 9.1 Member URIs . . . . . . . . . . . . . . . . . . . . . . . 22
+ 9.2 Creating resources with POST . . . . . . . . . . . . . . . 22
+ 9.2.1 Example . . . . . . . . . . . . . . . . . . . . . . . 23
+ 9.3 Updating Resources with PUT . . . . . . . . . . . . . . . 24
+ 9.4 Deleting Resources with DELETE . . . . . . . . . . . . . . 24
+ 9.5 Media Resources and Media Link Entries . . . . . . . . . . 24
+ 9.6 The Slug: Header . . . . . . . . . . . . . . . . . . . . . 25
+ 9.6.1 Slug: Header syntax . . . . . . . . . . . . . . . . . 25
+ 9.6.2 Examples . . . . . . . . . . . . . . . . . . . . . . . 26
+ 10. Listing Collections . . . . . . . . . . . . . . . . . . . . 28
+ 10.1 Collection Paging . . . . . . . . . . . . . . . . . . . 28
+ 11. Atom Format Link Relation Extensions . . . . . . . . . . . . 30
+ 11.1 The "edit" Link Relation . . . . . . . . . . . . . . . . 30
+ 11.2 The "edit-media" Link Relation . . . . . . . . . . . . . 30
+ 12. Atom Publishing Controls . . . . . . . . . . . . . . . . . . 31
+ 12.1 The "app:control" Element . . . . . . . . . . . . . . . 31
+ 12.1.1 The "app:draft" Element . . . . . . . . . . . . . . 31
+ 13. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 32
+ 14. Security Considerations . . . . . . . . . . . . . . . . . . 33
+ 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . 34
+ 15.1 Content-type registration for
+ 'application/atomserv+xml' . . . . . . . . . . . . . . . 34
+ 15.2 Content-type registration for
+ 'application/atomcat+xml' . . . . . . . . . . . . . . . 35
+ 16. References . . . . . . . . . . . . . . . . . . . . . . . . . 37
+ 16.1 Normative References . . . . . . . . . . . . . . . . . . 37
+ 16.2 Informative References . . . . . . . . . . . . . . . . . 38
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 39
+ A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 40
+ B. RELAX NG Compact Schema . . . . . . . . . . . . . . . . . . 41
+ C. Revision History . . . . . . . . . . . . . . . . . . . . . . 47
+ Intellectual Property and Copyright Statements . . . . . . . 50
1. Introduction
The Atom Publishing Protocol is an application-level protocol for
publishing and editing Web resources using HTTP [RFC2616] and XML 1.0
[W3C.REC-xml-20040204]. The protocol supports the creation of
arbitrary web resources and provides facilities for:
o Collections: Sets of resources, which can be retrieved in whole or
in part.
- o Introspection: Discovering and describing collections.
+ o Service: Discovering and describing Collections.
o Editing: Creating, updating and deleting resources.
2. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
- 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
- where an IRI is needed. How to map an IRI to a URI is specified in
- Section 3.1 of Internationalized Resource Identifiers (IRIs)
- [RFC3987].
+ 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.1 Referring to Information Items
+
+ Atom Protocol Document formats are specified in terms of the XML
+ Information Set [W3C.REC-xml-infoset-20040204], serialized as XML 1.0
+ [W3C.REC-xml-20040204].
+
+ The Infoset terms "Element Information Item" and "Attribute
+ Information Item" are shortened to "element" and "attribute"
+ respectively. Therefore, when this specification uses the term
+ "element", it is referring to an Element Information Item, and when
+ it uses the term "attribute", it is referring to an Attribute
+ Information Item.
+
+2.1.2 RELAX NG Schema
+
+ Some sections of this specification are illustrated with fragments of
+ a non-normative RELAX NG Compact schema [RNC]. However, the text of
+ this specification provides the definition of conformance. Complete
+ schemas appear in Appendix B.
+
+2.1.3 Use of xml:base and xml:lang
+
+ XML elements defined by this specification MAY have an xml:base
+ attribute [W3C.REC-xmlbase-20010627]. When xml:base is used, it
+ serves the function described in section 5.1.1 of URI Generic Syntax
+ [RFC3986], by establishing the base URI (or IRI) for resolving
+ relative references found within the scope of the xml:base attribute.
+
+ Any element defined by this specification MAY have an xml:lang
+ attribute, whose content indicates the natural language for the
+ element and its descendents. The language context is only
+ significant for elements and attributes declared to be "Language-
+ Sensitive" by this specification. Requirements regarding the content
+ and interpretation of xml:lang are specified in Section 2.12 of XML
+ 1.0 [W3C.REC-xml-20040204].
3. Terminology
For convenience, this protocol can be referred to as the "Atom
Protocol" or "APP".
URI/IRI - A Uniform Resource Identifier and Internationalized
Resource Identifier. These terms and the distinction between them
- are defined in [RFC3986] and [RFC3987]. Note that IRIs are mapped to
- URIs before dereferencing takes place.
+ are defined in [RFC3986] and [RFC3987]. IRIs are mapped to URIs
+ before dereferencing takes place.
+
+ The phrase "the URI of a document" in this specification is shorthand
+ for "a URI which, when dereferenced, is expected to produce that
+ document as a representation".
Resource - A network-accessible data object or service identified by
an IRI, as defined in [RFC2616]. See [W3C.REC-webarch-20041215] for
further discussion on resources.
- The phrase "the URI of a document" in this specification is shorthand
- for "an URI which, when dereferenced, is expected to produce that
- document as a representation".
-
Representation - An entity included with a request or response as
defined in [RFC2616].
- Collection - A resource that contains a set of member IRIs. See
- Section 8.
+ Collection - A resource that contains a set of Member IRIs. See
+ Section 9.
- Member - A resource whose IRI is listed in a Collection.
+ 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.
- Introspection Document - A document that describes the location and
- capabilities of one or more Collections. See Section 7.
+ Workspace - A group of collections. See Section 8.
+
+ Service Document - A document that describes the location and
+ capabilities of one or more Collections. See Section 8.
+
+ Category Document - A document that describes the categories allowed
+ in a Collection. See Section 7.
4. Protocol Model
- The Atom Publishing Protocol uses HTTP to edit and author web
- resources. The Atom Protocol uses the following HTTP methods:
+ The Atom Publishing Protocol uses HTTP methods to edit and author
+ Member Resources as follows:
- o GET is used to retrieve a representation of a resource or perform
- a query.
+ 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 DELETE is used to remove a resource.
+ o DELETE is used to remove a known resource.
- Along with operations on resources the Atom Protocol provides
- structures, called Collections, for managing and organising
- resources, called Members. Collections contain the IRIs of, and
- metadata about, their Member resources. Atom Protocol clients can
- use Introspection documents, which represent server-defined groups of
- Collections, to initialize the process of creating and editing
- resources.
+ Along with operations on Member Resources the Atom Protocol defines
+ Collection resources for managing and organizing Member Resources.
+ Collections are represented by Atom Feed documents and contain the
+ IRIs of, and metadata about, their Member Resources.
- 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
- [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.
+ There are two kinds of Member Resources - Member Entry Resources and
+ Media Resources. Member Entry Resources are represented as Atom
+ Entries. Media Resources MAY have representations in any media type.
+ A Media Link Entry is a Member Entry that contains metadata about a
+ Media Resource. This diagram shows the classification of the
+ resources:
+
+ Member Resource
+ -> Member Entry Resource
+ -> Media Link Entry Resource
+ -> Media Resource
+
+ Collections, represented by Atom feeds, contain entries. Those
+ entries contain the Member Entry and Media Resources IRIs of the
+ Collection. A Collection can contain any number of entries of either
+ kind. In the diagram of a Collection below there are two entries.
+ The first contains the IRI of a Member Entry Resource. The second
+ contains the IRIs of both a Media Resource and a Media Link Entry
+ Resource, which contains the metadata for that Media Resource:
+
+ Collection
+ Entry
+ Member Entry IRI -> Member Entry Resource
+
+ Entry
+ Member Entry IRI -> Media Link Entry Resource
+ Media IRI -> Media Resource
+
+ Service Documents represent server-defined groups of Collections, and
+ are used to initialize the process of creating and editing resources.
5. Protocol Operations
-5.1 Retrieving an Introspection Document
+5.1 Retrieving a Service Document
Client Server
| |
- | 1.) GET to URI of Introspection Document |
+ | 1.) GET to URI of Service Document |
|------------------------------------------>|
| |
- | 2.) Introspection Document |
+ | 2.) Service Document |
|<------------------------------------------|
| |
- 1. The client sends a GET request to the URI of the Introspection
+ 1. The client sends a GET request to the URI of the Service
Document.
2. The server responds with the document enumerating the IRIs of a
set of Collections and the capabilities of those Collections
supported by the server. The content of this document can vary
based on aspects of the client request, including, but not
limited to, authentication credentials.
-5.2 Creating a Resource
+5.2 Listing Collection Members
+
+ To list the members of a Collection the client sends a GET request to
+ the URI of a Collection. An Atom Feed Document is returned
+ containing one Atom Entry for each Member Entry Resource. See
+ Section 10 and Section 11 for a description of the feed contents.
+
+ Client Server
+ | |
+ | 1.) GET to Collection URI |
+ |------------------------------->|
+ | |
+ | 2.) 200 OK, Atom Feed Doc |
+ |<-------------------------------|
+ | |
+
+ 1. The client sends a GET request to the URI of the Collection.
+
+ 2. The server responds with an Atom Feed Document containing the
+ IRIs of the Collection members.
+
+5.3 Creating a Resource
Client Server
| |
| 1.) POST to URI of Collection |
|------------------------------------------>|
| |
| 2.) 201 Created |
+ | Location: Member Entry URI |
|<------------------------------------------|
| |
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
- contains the URI of the newly created resource.
+ contains the IRI of the newly created Member Entry Resource.
+ Media Resources may have also been created and their IRIs can be
+ found through the Member Entry Resource. See Section 9.5 for
+ more details.
-5.3 Editing a Resource
+5.4 Editing a Resource
- Once a resource has been created and its URI is known, that URI can
- be used to retrieve, update, and delete the resource.
+ Once a resource has been created and its Member URI is known, that
+ URI can be used to retrieve, update, and delete the resource.
-5.3.1 Retrieving a Resource
+5.4.1 Retrieving a Resource
Client Server
| |
| 1.) GET to Member URI |
|------------------------------------------>|
| |
| 2.) Member Representation |
|<------------------------------------------|
| |
- 1. The client sends a GET request to the Member's URI to retrieve
- its representation.
+ 1. The client sends a GET request to the URI of a Member Resource to
+ retrieve its representation.
2. The server responds with the representation of the resource.
-5.3.2 Updating a Resource
+5.4.2 Updating a Resource
Client Server
| |
| 1.) PUT to Member URI |
|------------------------------------------>|
| |
| 2.) 200 OK |
|<------------------------------------------|
- 1. The client PUTs an updated representation to the Member's URI.
+ 1. The client PUTs an updated representation to the URI of a Member
+ Resource.
2. Upon a successful update of the resource the server responds with
a status code of 200.
-5.3.3 Deleting a Resource
+5.4.3 Deleting a Resource
Client Server
| |
| 1.) DELETE to Member URI |
|------------------------------------------>|
| |
| 2.) 200 Ok |
|<------------------------------------------|
| |
- 1. The client sends a DELETE request to the Member's URI.
+ 1. The client sends a DELETE request to the URI of a Member
+ Resource.
2. Upon the successful deletion of the resource the server responds
with a status code of 200.
-5.4 Listing Collection Members
-
- To list the members of a Collection the client sends a GET request to
- the Collection's URI. An Atom Feed Document is returned containing
- one Atom Entry for each member resource. See Section 9 and
- Section 10 for a description of the feed contents.
-
- Client Server
- | |
- | 1.) GET to Collection URI |
- |------------------------------->|
- | |
- | 2.) 200 OK, Atom Feed Doc |
- |<-------------------------------|
- | |
-
- 1. The client sends a GET request to the Collection's URI.
-
- 2. The server responds with an Atom Feed Document containing the
- IRIs of the collection members.
+ A different approach is taken for deleting Media Resources, see
+ Section 9.5 for details.
5.5 Use of HTTP Response codes
The Atom Protocol uses the response status codes defined in HTTP to
indicate the success or failure of an operation. Consult the HTTP
specification [RFC2616] for detailed definitions of each status code.
It is RECOMMENDED that entities contained within HTTP 4xx and 5xx
responses include a human-readable explanation of the error.
-6. XML-related Conventions
-
- The Atom Protocol Introspection format is specified in terms of the
- XML Information Set [W3C.REC-xml-infoset-20040204], serialised as XML
- 1.0 [W3C.REC-xml-20040204]. Atom Publishing Protocol Documents MUST
- 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
- sense used by XML.
-
-6.1 Referring to Information Items
+6. Atom Publishing Protocol Documents
- This specification uses a shorthand for two common terms: the phrase
- "Information Item" is omitted when discussing Element Information
- Items and Attribute Information Items. Therefore, when this
- specification uses the term "element," it is referring to an Element
- Information Item in Infoset terms. Likewise, when it uses the term
- "attribute," it is referring to an Attribute Information Item.
+6.1 Document Types
-6.2 XML Namespace Usage
+ This specification describes two kinds of Documents - Category
+ Documents and Service Documents.
- The namespace name [W3C.REC-xml-names-19990114] for the XML format
- described in this specification is:
+ A Category Document (Section 7) contain lists of categories specified
+ using the "atom:category" element from the Atom Syndication Format.
+ A Service Document (Section 8) describes capabilities of workspaces,
+ which are server-defined groupings of Collections.
+ The namespace name [W3C.REC-xml-names-19990114] for either kind of
+ document is:
http://purl.org/atom/app#
This specification uses the prefix "app:" for the namespace name.
- The choice of namespace prefix is not semantically significant.
+ The prefix "atom:" is used for "http://www.w3.org/2005/Atom", the
+ namespace name of the Atom Syndication Format [RFC4287]. The
+ namespace prefixes are 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".
+ Atom Publishing Protocol Documents MUST be well-formed XML. This
+ 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.
- This specification also uses the prefix "atom:" for
- "http://www.w3.org/2005/Atom", the namespace name of the Atom
- Syndication Format [RFC4287].
+6.2 Document Extensibility
-6.3 Use of xml:base and xml:lang
+ 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.
- XML elements defined by this specification MAY have an xml:base
- attribute [W3C.REC-xmlbase-20010627]. When xml:base is used, it
- serves the function described in section 5.1.1 of URI Generic Syntax
- [RFC3986], establishing the base URI (or IRI) for resolving any
- relative references found within the effective scope of the xml:base
- attribute.
+ Unrecognized markup in an Atom Publishing Protocol document is
+ considered "foreign markup" as defined in [RFC4287].
- Any element defined by this specification MAY have an xml:lang
- attribute, whose content indicates the natural language for the
- element and its descendents. The language context is only
- significant for elements and attributes declared to be "Language-
- Sensitive" by this specification. Requirements regarding the content
- and interpretation of xml:lang are specified in Section 2.12 of XML
- 1.0 [W3C.REC-xml-20040204].
- appCommonAttributes =
- attribute xml:base { atomUri }?,
- attribute xml:lang { atomLanguageTag }?,
- undefinedAttribute*
+ Markup from other vocabularies ("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.
-6.4 RELAX NG Schema
+7. Category Documents
- Some sections of this specification are illustrated with fragments of
- a non-normative RELAX NG Compact schema [RNC]. A complete schema
- appears in Appendix B. However, the text of this specification
- provides the definition of conformance.
+ Category Documents contain lists of categories described using the
+ "atom:category" element from the Atom Syndication Format [RFC4287].
+ Categories can also appear in Service Documents and describe the
+ categories allowed in a Collection (see Section 8.2.5).
-7. Introspection Documents
+ Category Documents are identified with the "application/atomcat+xml"
+ media type (see Section 15).
+
+7.1 Example
+
+
+
+
+
+
+
+
+ This Category Document contains three categories with the terms
+ "animal", "vegetable", and "mineral". None of the categories has a
+ label attribute (as defined in [RFC4287]). They all inherit the
+ "http://example.com/cats/big3" category 'scheme' (in the [RFC4287]
+ sense) declared on the app:categories element. Therefore if the
+ "mineral" category were to appear in an Atom Entry or Feed Document,
+ it would appear as:
+
+
+
+7.2 Element Definitions
+
+7.2.1 The "app:categories" element
+
+ The root of a Category Document is the "app:categories" element. An
+ app:categories element MAY contain one or more "atom:category"
+ elements from the Atom namespace ("http://www.w3.org/2005/Atom").
+
+ If an app:category child element has no "scheme" attribute it
+ inherits the attribute from its app:categories parent. An app:
+ category child element with an existing "scheme" attribute does not
+ inherit the "scheme" value of its "app:categories" parent element.
+
+7.2.1.1 Attributes of "app:categories"
+
+ The app:categories element MAY contain a "fixed" attribute, with a
+ value of either "yes" or "no", indicating if the list of categories
+ is a fixed or an open set. Collections that indicate the set is
+ fixed MAY reject members whose categories are not listed in the
+ Collection Document. Collections that indicate the set is open
+ SHOULD NOT reject otherwise acceptable members whose categories are
+ not listed in the Collection.
+
+ Alternatively, the app:categories element MAY contain an "href"
+ attribute, whose value MUST be an IRI reference identifying a
+ Category Document. If the "href" attribute is provided, the app:
+ categories element MUST be empty and MUST NOT have the "fixed" or
+ "scheme" attributes.
+
+ atomCategory =
+ element atom:category {
+ atomCommonAttributes,
+ attribute term { text },
+ attribute scheme { atomURI }?,
+ attribute label { text }?,
+ undefinedContent
+ }
+
+ appInlineCategories =
+ element app:categories {
+ attribute fixed { "yes" | "no" }?,
+ attribute scheme { atomURI }?,
+ (atomCategory*)
+ }
+
+ appOutOfLineCategories =
+ element app:categories {
+ attribute href { atomURI },
+ (empty)
+ }
+
+ appCategories = appInlineCategories | appOutOfLineCategories
+
+8. Service Documents
For authoring to commence, a client needs to first discover the
- capabilities and locations of the available collections.
- Introspection documents are designed to support this discovery
- process. An Introspection Document describes workspaces, which are
- server-defined groupings of collections.
+ capabilities and locations of the available collections. Service
+ Documents are designed to support this discovery process.
- Introspection documents are identified with the "application/
- atomserv+xml" media type (see Section 14).
+ A Service Document describes workspaces, which are server-defined
+ groupings of Collections. Service Documents are identified with the
+ "application/atomserv+xml" media type (see Section 15).
- While an introspection document allows multiple workspaces, there is
- no requirement that a server support multiple workspaces. In
- addition, a collection MAY appear in more than one workspace.
+ There is no requirement that a server support multiple workspaces.
+ In addition, a Collection MAY appear in more than one Workspace.
-7.1 Example
+8.1 Example
-
-
+
+
+ Main Site
+ href="http://example.org/reilly/main" >
+ My Blog Entries
+
+
+ Picturesimage/*
-
-
+
+ Side Bar Blog
+
+ Remaindered Links
+ entry
+
+
+
+
+
- This Introspection Document describes two workspaces. The first,
- called "Main Site", has two collections called "My Blog Entries" and
- "Pictures" whose IRIs are "http://example.org/reilly/main" and
+ This Service Document describes two workspaces. The first Workspace
+ is called "Main Site", has two collections called "My Blog Entries"
+ and "Pictures" whose IRIs are "http://example.org/reilly/main" and
"http://example.org/reilly/pic" respectively. The "Pictures"
- includes an accept element indicating that client can post image
- files to the collection to create new entries. Entries with
- associated media resources are discussed in section 8.3.
+ Workspace includes an "accept" element indicating that a client can
+ post image files to the Collection to create new entries. Entries
+ with associated media resources are discussed in Section 9.5.
- The second workspace is called "Side Bar Blog" and has a single
- collection called "Remaindered Links" whose collection IRI is
+ The second Workspace is called "Side Bar Blog" and has a single
+ Collection called "Remaindered Links" whose IRI is
"http://example.org/reilly/list".
-7.2 Element Definitions
+ Within each of the two entry collections, the categories element
+ provides a list of available categories for member entries. In the
+ "My Blog Entries" Collection, the list of available categories is
+ obtainable through the "href" attribute. The "Side Bar Blog"
+ Collection provides a category list within the Service Document, but
+ states the list is fixed, signaling a request from the server that
+ entries be posted using only those two categories.
-7.2.1 The "app:service" Element
+8.2 Element Definitions
- The root of an introspection document is the "app:service" element.
+8.2.1 The "app:service" Element
- The "app:service" element is the container for introspection
- information associated with one or more workspaces. An app:service
- element MUST contain one or more app:workspace elements.
+ The root of a Service Document is the "app:service" element.
+
+ The "app:service" element is the container for service information
+ associated with one or more workspaces. An app:service element MUST
+ contain one or more app:workspace elements.
namespace app = "http://purl.org/atom/app#"
start = appService
appService =
element app:service {
appCommonAttributes,
( appWorkspace+
& extensionElement* )
}
-7.2.2 The "app:workspace" Element
+8.2.2 The "app:workspace" Element
The "app:workspace" element contains information elements about the
collections of resources available for editing. The app:workspace
- element MAY contain zero or more app:collection elements.
+ element contains zero or more app:collection elements.
appWorkspace =
element app:workspace {
appCommonAttributes,
- attribute title { text },
- ( appCollection+
+ ( appCollection*
& extensionElement* )
}
+ atomTitle = element atom:title { atomTextConstruct }
+
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. In the following
example, the "Entries" collection would be considered the preferred
- collection:
+ Collection:
-
-
-
-
+
+ My Blog
+
+ Entries
+
+
+ Photosimage/*
-7.2.2.1 The "title" Attribute
+8.2.2.1 The "atom:title" Element
- The app:workspace element MUST contain a "title" attribute, which
- gives a human-readable name for the workspace. This attribute is
- Language-Sensitive.
+ The app:workspace element MUST contain one "atom:title" element,
+ giving a human-readable title for the workspace.
-7.2.3 The "app:collection" Element
+8.2.3 The "app:collection" Element
- The "app:collection" describes an Atom Protocol collection. One
- child element is defined here for app:collection: "app:accept".
+ The "app:collection" element describes a Collection. The app:
+ collection element MAY contain one app:accept element and MAY contain
+ any number of app:categories elements. The app:collection element
+ MUST NOT contain more that one app:accept element.
appCollection =
element app:collection {
appCommonAttributes,
- attribute title { text },
- attribute href { atomUri },
+ attribute href { atomURI },
( appAccept?
+
+ & appCategories*
& 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.
+8.2.3.1 Usage in Atom Feed Documents
-7.2.3.1 The "title" Attribute
+ The app:collection element MAY appear as a child of an atom:feed or
+ atom:source element in an Atom Feed Document. Its value identifies a
+ Collection by which new entries can be added to appear in the feed.
- The app:collection element MUST contain a "title" attribute, whose
- value gives a human-readable name for the collection. This attribute
- is Language-Sensitive.
+8.2.3.2 The "href" Attribute
-7.2.3.2 The "href" Attribute
+ The app:collection element MUST contain an "href" attribute, whose
+ value gives the IRI of the Collection.
- The app:collection element MUST contain a "href" attribute, whose
- value gives the IRI of the collection.
+8.2.3.3 The "atom:title" Element
-7.2.4 The "app:accept" Element
+ The app:collection Element MUST contain one "atom:title" element,
+ giving a human-readable title for the Workspace.
- The app:collection element MAY contain one "app:accept" element. The
- app:accept element value specifies a comma-separated list of media-
- 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.
+8.2.4 The "app:accept" Element
+
+ The "app:accept" element value specifies a comma-separated list of
+ media-ranges (see [RFC2616]) identifying the types of representations
+ that can be POSTed to the URI of a Collection. Whitespace separation
+ of the media-range values is considered insignificant and MUST be
+ ignored.
The app:accept element is similar to the HTTP Accept request-header
[RFC2616] with the exception that app:accept has no notion of
- preference. Accordingly, the value syntax of app:accept does not use
- 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:
+ preference. As a result, the value syntax of app:accept does not use
+ "accept-params" or "q" arguments as specified in [RFC2616], section
+ 14.1.
+
+ The order of media-ranges is not significant. The following lists
+ are all equivalent:
image/png, image/*image/*, image/pngimage/*
-
- A value of "entry" indicates that Atom Entry Documents can be posted
- to the Collection. If the accept element is omitted, or empty,
+ A value of "entry" may appear in any list of media-ranges in an
+ accept element and indicates that Atom Entry Documents can be posted
+ 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.
+ by the Collection.
appAccept =
element app:accept {
appCommonAttributes,
( appTypeValue? )
}
appTypeValue = ( "entry" | media-type |entry-or-media-type )
media-type = xsd:string { pattern = "entry,(.+/.+,?)*" }
entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" }
-8. Collections
+8.2.5 The "app:categories" Element
-8.1 Creating resources with POST
+ The "app:categories" element provides a listing of the categories
+ that can be applied to the members of a Collection.
- To add members to a collection, clients send POST requests to the
- collection's URI. Collections MAY impose constraints on the media-
- types of request entities POSTed to the collection and MAY generate a
+ atomCategory =
+ element atom:category {
+ atomCommonAttributes,
+ attribute term { text },
+ attribute scheme { atomURI }?,
+ attribute label { text }?,
+ undefinedContent
+ }
+
+ appInlineCategories =
+ element app:categories {
+ attribute fixed { "yes" | "no" }?,
+ attribute scheme { atomURI }?,
+ (atomCategory*)
+ }
+
+ appOutOfLineCategories =
+ element app:categories {
+ attribute href { atomURI },
+ (empty)
+ }
+
+ appCategories = appInlineCategories | appOutOfLineCategories
+ The app:categories element MAY contain a "fixed" attribute, with a
+ value of either "yes" or "no", indicating whether or not the listing
+ of categories is considered to be a fixed, or closed set. The
+ absence of the "fixed" attribute is equivalent to the presence of a
+ "fixed" attribute with a value of "no". Collections that indicate a
+ fixed set MAY reject members that include categories not specified in
+ the provided listing. Collections that indicate an open set SHOULD
+ NOT reject otherwise acceptable members whose categories are not
+ present in the provided list.
+
+ The app:categories element MAY contain an "href" attribute, whose
+ value MUST be an IRI reference identifying a Category Document. If
+ the "href" attribute is provided, the app:categories element MUST be
+ empty and the "fixed" and "scheme" attributes MUST NOT be present.
+
+9. Creating and Editing Resources
+
+9.1 Member URIs
+
+ The Member URI supports retrieving, updating and deleting the
+ resource using HTTP GET, PUT and DELETE as described in this section.
+ Retrieval and updating of Member Entry Resources are done via Atom
+ Entry representations.
+
+ Member Entry URIs appear in two places. First, they are returned in
+ a Location header after successful resource creation using POST, as
+ described below. Second, in the entries of a Collection document, by
+ an atom:link element with a link relation of "edit".
+
+ Each Member Entry SHOULD contain such an atom:link element providing
+ its Member Entry URI.
+
+9.2 Creating resources with POST
+
+ To add members to a Collection, clients send POST requests to the URI
+ of a Collection. Collections MAY impose constraints on the media-
+ types of request entities POSTed to the Collection and MAY generate a
response with a status code of 415 ("Unsupported Media Type").
- If an entry was created in the collection which received the POST,
- its URI MUST be returned in an HTTP Location header.
+ If a Member Resource was created in the Collection which received the
+ POST, its Member Entry 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
+ ("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.
+ created resource, and SHOULD include its Member Entry URI in an atom:
+ link element that has a relation of "edit".
Since the server is free to alter the posted entry, for example by
- changing the content of the "id" element. returning the entry as
+ 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.
+ 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.
+ The request body sent with 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 9.5.
-8.2 Example
+9.2.1 Example
Below, the client sends a POST request containing an Atom Entry
representation to the URI of the Collection:
POST /myblog/entries HTTP/1.1
Host: example.org
User- Agent: Thingio/1.0
+ Authorization: Basic ZGFmZnk6c2VjZXJldA==
Content- Type: application/atom+xml
Content- Length: nnn
+ Slug: First Post
-
+ Atom-Powered Robots Run Amokurn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a2003-12-13T18:30:02ZJohn DoeSome text.
The server signals a successful creation with a status code of 201.
- The response includes a "Location" header indicating the URI of the
- Atom Entry and a representation of that Entry in the body of the
- response.
+ The response includes a "Location" header indicating the Member Entry
+ URI of the Atom Entry and a representation of that Entry in the body
+ of the response.
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
-
+ Atom-Powered Robots Run Amokurn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a2003-12-13T18:30:02ZJohn DoeSome text.
-
- Note that the Entry created by the server might not match exactly the
- Entry POSTed by the client. In particular, a server MAY change the
- 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.
+ The Entry created and returned by the server might not match the
+ Entry POSTed by the client. A server MAY change the 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.
+ values not provided in the original POST. For example, it
+ ascertained the name of the author, presumably via the authentication
+ protocol used to establish the right to post.
-8.3 The 'edit' Link
+9.3 Updating Resources with PUT
- 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.
+ To update a resource, clients send PUT requests to its Member URI, as
+ specified in [RFC2616].
-8.4 Media Resources and Media Link Entries
+ To avoid unintentional loss of data when editing Member Entries or
+ Media Link Entries, Atom Protocol clients SHOULD preserve all
+ metadata that has not been intentionally modified, including unknown
+ foreign markup as defined in Section 6 of [RFC4287].
- 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.
+9.4 Deleting Resources with DELETE
- 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.
+ To delete a resource, clients send DELETE requests to its Member URI,
+ as specified in [RFC2616]. For Media Resources, deletion of a Media
+ Link Entry SHOULD result in the deletion of the associated 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.
+9.5 Media Resources and Media Link Entries
- 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.
+ A client can POST a media type other than application/atom+xml to a
+ Collection. Such a request creates two new resources - one that
+ corresponds to the entity sent in the request, called the Media
+ Resource, and an associated Member Entry, called the Media Link
+ Entry. The server can signal the media types it will accept via the
+ "accept" element in the Service Document (Section 8.2.4).
- 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.
+ The Media Link Entry contains the IRI of the Media Resource and makes
+ metadata about it separately available for retrieval and update. The
+ Media Link Entry is used to store metadata about the (perhaps non-
+ textual) Media Resource.
- 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.
+ Successful responses to creation requests MUST include the URI of the
+ Media Link Entry in the Location header. The Media Link Entry SHOULD
+ contain an atom:link element with a link relation of "edit-media"
+ that contains the Media Resource IRI. The Media Link Entry MUST have
+ an "atom:content" element with a non-empty "src" attribute. The
+ value of the "src" attribute is an IRI of the newly created Media
+ Resource. It is OPTIONAL that the IRI of the "src" attribute on the
+ atom:content element be the same as the Media Resource IRI. That is,
+ the "src" attribute value might instead be a link into a static cache
+ or content distribution network and not be the Media Resource IRI.
-8.4.1 Title: Header
+ Implementers are asked to note that according to the requirements of
+ [RFC4287], entries, and thus 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 entity or from any
+ other source. A server might not allow a client to modify the server
+ selected values for these elements.
- 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:
+ For resource creation this specification only defines cases where the
+ POST body has an Atom Entry entity declared as an Atom media type
+ ("application/atom+xml"), or a non-Atom entity declared as a non-Atom
+ media type. It does not specify any request semantics or server
+ behavior in the case where the POSTed media-type is "application/
+ atom+xml" but the body is something other than an Atom Entry. In
+ particular, what happens on POSTing an Atom Feed Document to a
+ Collection using the "application/atom+xml" media type is undefined.
- POST /myblog/fotes HTTP/1.1
- Host: example.org
- Content- Type: image/png
- Content- Length: nnnn
- Title: An Atom-Powered Robot
+9.6 The Slug: Header
- ...binary data...
+ Slug is a HTTP entity-header whose value is a "slug", i.e. a short
+ name that can be used as part of URI for a Member Resource.
- The server MAY use the content of the Title: header, as provided or
- in a modified form, in constructing a title for the resource, which
- would presumably appear in the media link entry.
+ When posting an entity to a Collection to add a new Member, the
+ server MAY use this information when creating the Member URI of the
+ newly-created resource, for instance by using some or all of the
+ words in the last URI segment. It MAY also use it when creating the
+ atom:id or as the title of a Media Link Entry (see Section 9.5.).
- Title = "Title" ":" [TEXT]
+ Servers MAY ignore the Slug entity-header and MAY alter its value
+ before using it. For example, the server MAY filter out some
+ characters or replace accented letters with non-accented ones, spaces
+ with underscores, etc.
+
+9.6.1 Slug: Header syntax
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]
- rule is described in section 2.2 of the same document. Words of
- *TEXT MAY contain characters from character sets other than
- [ISO88591] only when encoded according to the rules of [RFC2047].
+ in section 2.1 of the HTTP/1.1 specification [RFC2616]. The TEXT
+ rule is described in section 2.2 of the same document.
-8.4.2 Example
+ Slug = "Slug" ":" *TEXT
+
+ Clients MAY send non-ASCII characters in the Slug entity-header,
+ which they MUST encode using "encoded-words", as defined in
+ [RFC2047]. Servers SHOULD treat the slug as [RFC2047] encoded if it
+ matches the "encoded-words" production.
+
+9.6.2 Examples
Below, the client sends a POST request containing a PNG image to the
URI of the Collection:
POST /myblog/entries HTTP/1.1
Host: example.org
Content- Type: image/png
+ Slug: The Beach
+ Authorization: Basic ZGFmZnk6c2VjZXJldA==
Content- Length: nnn
- Title: A picture of the beach
...binary data...
The server signals a successful creation with a status code of 201.
- The response includes a "Location" header indicating the URI of the
- 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.
+ The response includes a Location header indicating the Member URI of
+ the 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, and a link using the link relation "edit-media"
+ specifying the IRI to be used for modifying the Media Resource.
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
+ Content-Location: http://example.org/myblog/edit/the_beach
+ Location: http://example.org/myblog/edit/the_beach
- A picture of the beach
+ The Beachurn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a
- 2003-12-13T18:30:02Z
- John Doe
+ 2005-10-07T17:17:08Z
+ Daffy
-
+ src="http://example.org/media/the_beach.png"/>
+ href="http://example.org/media/edit/the_beach.png" />
+
...
@@ -823,145 +1083,141 @@
href="http://example.org/entries/go" />
...
-10. Atom Format Link Relation Extensions
+11. Atom Format Link Relation Extensions
-10.1 The "edit" Link Relation
+11.1 The "edit" Link Relation
- The Atom Protocol adds the value "edit" to the Atom Registry of Link
+ This specification adds the value "edit" to the Atom Registry of Link
Relations (see section 7.1 of [RFC4287]). The value of "edit"
specifies that the value of the href attribute is the IRI of an
- editable Atom Entry Document. When appearing within an atom:entry,
- the href IRI MAY be used to update and delete the resource
+ editable Member Entry. When appearing within an atom:entry, the href
+ IRI MAY be used to retrieve, update and delete the resource
represented by that entry. An atom:entry MUST contain no more than
one "edit" link relation.
-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.
+11.2 The "edit-media" Link Relation
- 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.
+ This specification 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.
-11. Atom Publishing Control Extensions
+ An atom:entry element 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.1 The Atom Publishing Control Namespace
+12. Atom Publishing Controls
- This specification defines an Atom Format extension for publishing
- control called Atom Publishing Control. The namespace name for the
- Atom Publishing Control's XML vocabulary is
- "http://example.net/appns/". This specification uses "pub:" for the
- namespace prefix. The choice of namespace prefix is not semantically
- significant.
+ This specification defines an Atom Format Structured Extension, as
+ defined in Section 6 of [RFC4287], for publishing control within the
+ http://purl.org/atom/app# namespace.
-11.2 The "pub:control" Element
+12.1 The "app:control" Element
- namespace pub = "http://example.net/appns/"
+ namespace app = "http://purl.org/atom/app#"
pubControl =
- element pub:control {
+ element app:control {
atomCommonAttributes,
pubDraft?
& extensionElement
}
pubDraft =
- element pub:draft { "yes" | "no" }
+ element app:draft { "yes" | "no" }
- The "pub:control" element MAY appear as a child of an "atom:entry"
+ The "app:control" element MAY appear as a child of an atom:entry
which is being created or updated via the Atom Publishing Protocol.
- The "pub:control" element, if it does appear in an entry, MUST only
- appear at most one time. The "pub:control" element is considered
- foreign markup as defined in Section 6 of [RFC4287].
+ The app:control element MUST appear only once in an Entry. The app:
+ control element is considered foreign markup as defined in Section 6
+ of [RFC4287].
- The "pub:control" element and its child elements MAY be included in
+ The app:control element and its child elements MAY be included in
Atom Feed or Entry Documents.
- The "pub:control" element MAY contain exactly one "pub:draft" element
- as defined here, and MAY contain zero or more extension elements as
- outlined in Section 6 of [RFC4287]. Both clients and servers MUST
- ignore foreign markup present in the pub:control element.
+ The app:control element MAY contain exactly one "app:draft" element
+ as defined below, and MAY contain zero or more extension elements as
+ defined in Section 6 of [RFC4287].
-11.2.1 The "pub:draft" Element
+12.1.1 The "app:draft" Element
- 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
- 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
- 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
- be ignored by the server.
+ The number of app:draft elements in app:control MUST be zero or one.
+ Its value MUST be one of "yes" or "no". A value of "no" indicates a
+ client request that the Member Resource be made publicly visible. If
+ the app:draft element is missing then the value MUST be understood to
+ be "no". The inclusion of the app:draft element represents a request
+ by the client to control the visibility of a Member Resource and the
+ app:draft element MAY be ignored by the server.
-12. Securing the Atom Protocol
+13. Securing the Atom Protocol
All instances of publishing Atom Format entries SHOULD be protected
by authentication to prevent posting or editing by unknown sources.
- [[anchor22: note: this section is currently under discussion.]]
+ [[anchor23: note: this section is currently under discussion.]]
-13. Security Considerations
+14. Security Considerations
- The security of the Atom Protocol is based on [[anchor24: note:
+ The security of the Atom Protocol is based on [[anchor25: note:
refers to incomplete section]].
- [[anchor25: note: talk here about denial of service attacks using
+ [[anchor26: note: talk here about denial of service attacks using
large XML files, or the billion laughs DTD attack.]]
-14. IANA Considerations
+15. IANA Considerations
- An Atom Publishing Protocol Introspection Document, when serialized
- as XML 1.0, can be identified with the following media type:
+15.1 Content-type registration for 'application/atomserv+xml'
+
+ An Atom Publishing Protocol Service Document, when serialized as XML
+ 1.0, can be identified with the following media type:
MIME media type name: application
MIME subtype name: atomserv+xml
Mandatory parameters: None.
Optional parameters:
"charset": This parameter has identical semantics to the charset
parameter of the "application/xml" media type as specified in
[RFC3023].
Encoding considerations: Identical to those of "application/xml" as
described in [RFC3023], section 3.2.
Security considerations: As defined in this specification.
- [[anchor26: update upon publication]]
+ [[anchor27: update upon publication]]
In addition, as this media type uses the "+xml" convention, it
shares the same security considerations as described in [RFC3023],
section 10.
Interoperability considerations: There are no known interoperability
issues.
- Published specification: This specification. [[anchor27: update upon
+ Published specification: This specification. [[anchor28: update upon
publication]]
Applications that use this media type: No known applications
currently use this media type.
Additional information:
Magic number(s): As specified for "application/xml" in [RFC3023],
section 3.2.
@@ -972,31 +1227,84 @@
Base URI: As specified in [RFC3023], section 6.
Macintosh File Type code: TEXT
Person and email address to contact for further information: Joe
Gregorio
Intended usage: COMMON
- Author/Change controller: This specification's author(s). [[anchor28:
+ Author/Change controller: This specification's author(s). [[anchor29:
update upon publication]]
-15. References
+15.2 Content-type registration for 'application/atomcat+xml'
-15.1 Normative References
+ An Atom Publishing Protocol Category Document, when serialized as XML
+ 1.0, can be identified with the following media type:
- [ISO88591]
- ISO, "International Standard -- Information Processing --
- 8-bit Single-Byte Coded Graphic Character Sets -- Part 1:
- Latin alphabet No. 1,", January 1987.
+ MIME media type name: application
+
+ MIME subtype name: atomcat+xml
+
+ Mandatory parameters: None.
+
+ Optional parameters:
+
+ "charset": This parameter has identical semantics to the charset
+ parameter of the "application/xml" media type as specified in
+ [RFC3023].
+
+ Encoding considerations: Identical to those of "application/xml" as
+ described in [RFC3023], section 3.2.
+
+ Security considerations: As defined in this specification.
+ [[anchor30: update upon publication]]
+
+ In addition, as this media type uses the "+xml" convention, it
+ shares the same security considerations as described in [RFC3023],
+ section 10.
+
+ Interoperability considerations: There are no known interoperability
+ issues.
+
+ Published specification: This specification. [[anchor31: update upon
+ publication]]
+
+ Applications that use this media type: No known applications
+ currently use this media type.
+
+ Additional information:
+
+ Magic number(s): As specified for "application/xml" in [RFC3023],
+ section 3.2.
+
+ File extension: .atomcat
+
+ Fragment identifiers: As specified for "application/xml" in
+ [RFC3023], section 5.
+
+ Base URI: As specified in [RFC3023], section 6.
+
+ Macintosh File Type code: TEXT
+
+ Person and email address to contact for further information: Joe
+ Gregorio
+
+ Intended usage: COMMON
+
+ Author/Change controller: This specification's author(s). [[anchor32:
+ update upon publication]]
+
+16. References
+
+16.1 Normative References
[RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions)
Part Three: Message Header Extensions for Non-ASCII Text",
RFC 2047, November 1996.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
@@ -1026,44 +1334,44 @@
February 2004.
[W3C.REC-xml-names-19990114]
Hollander, D., Bray, T., and A. Layman, "Namespaces in
XML", W3C REC REC-xml-names-19990114, January 1999.
[W3C.REC-xmlbase-20010627]
Marsh, J., "XML Base", W3C REC W3C.REC-xmlbase-20010627,
June 2001.
-15.2 Informative References
+16.2 Informative References
[RNC] Clark, J., "RELAX NG Compact Syntax", December 2001.
[W3C.REC-webarch-20041215]
Walsh, N. and I. Jacobs, "Architecture of the World Wide
Web, Volume One", W3C REC REC-webarch-20041215,
December 2004.
URIs
[1]
Authors' Addresses
Joe Gregorio (editor)
- BitWorking, Inc
- 1002 Heathwood Dairy Rd.
- Apex, NC 27502
+ IBM
+ 4205 South Miama Blvd.
+ Research Triangle Park, NC 27709
US
Phone: +1 919 272 3764
- Email: joe@bitworking.com
- URI: http://bitworking.com/
+ Email: joe@bitworking.org
+ URI: http://ibm.com/
Bill de hOra (editor)
Propylon Ltd.
45 Blackbourne Square, Rathfarnham Gate
Dublin, Dublin D14
IE
Phone: +353-1-4927444
Email: bill.dehora@propylon.com
URI: http://www.propylon.com/
@@ -1076,75 +1384,113 @@
Appendix B. RELAX NG Compact Schema
This appendix is informative.
The Relax NG schema explicitly excludes elements in the Atom Protocol
namespace which are not defined in this revision of the
specification. Requirements for Atom Protocol processors
encountering such markup are given in Section 6.2 and Section 6.3 of
[RFC4287].
+ The Schema for Service Documents:
+
# -*- rnc -*-
# RELAX NG Compact Syntax Grammar for the Atom Protocol
namespace app = "http://purl.org/atom/app#"
+ namespace atom = "http://www.w3.org/2005/Atom"
+ namespace xsd = "http://www.w3.org/2001/XMLSchema"
+ namespace xhtml = "http://www.w3.org/1999/xhtml"
namespace local = ""
start = appService
# common:attrs
+ atomURI = text
+
appCommonAttributes =
- attribute xml:base { atomUri }?,
+ attribute xml:base { atomURI }?,
attribute xml:lang { atomLanguageTag }?,
undefinedAttribute*
+ atomCommonAttributes = appCommonAttributes
+
undefinedAttribute =
attribute * - (xml:base | xml:lang | local:*) { text }
- atomUri = text
-
atomLanguageTag = xsd:string {
pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
}
+ atomDateConstruct =
+ appCommonAttributes,
+ xsd:dateTime
# app:service
appService =
element app:service {
appCommonAttributes,
( appWorkspace+
& extensionElement* )
}
# app:workspace
appWorkspace =
element app:workspace {
appCommonAttributes,
- attribute title { text },
- ( appCollection+
+ ( appCollection*
& extensionElement* )
}
+ atomTitle = element atom:title { atomTextConstruct }
+
# app:collection
appCollection =
element app:collection {
appCommonAttributes,
- attribute title { text },
- attribute href { atomUri },
+ attribute href { atomURI },
( appAccept?
+
+ & appCategories*
& extensionElement* )
}
- # app:member
+ # app:categories
+
+ atomCategory =
+ element atom:category {
+ atomCommonAttributes,
+ attribute term { text },
+ attribute scheme { atomURI }?,
+ attribute label { text }?,
+ undefinedContent
+ }
+
+ appInlineCategories =
+ element app:categories {
+ attribute fixed { "yes" | "no" }?,
+ attribute scheme { atomURI }?,
+ (atomCategory*)
+ }
+
+ appOutOfLineCategories =
+ element app:categories {
+ attribute href { atomURI },
+ (empty)
+ }
+
+ appCategories = appInlineCategories | appOutOfLineCategories
+
+ # app:accept
appAccept =
element app:accept {
appCommonAttributes,
( appTypeValue? )
}
appTypeValue = ( "entry" | media-type |entry-or-media-type )
media-type = xsd:string { pattern = "entry,(.+/.+,?)*" }
entry-or-media-type = xsd:string { pattern = "(.+/.+,?)*" }
@@ -1161,36 +1507,149 @@
structuredExtensionElement =
element * - app:* {
(attribute * { text }+,
(text|anyElement)*)
| (attribute * { text }*,
(text?, anyElement+, (text|anyElement)*))
}
# Other Extensibility
+
extensionElement =
simpleExtensionElement | structuredExtensionElement
+ undefinedContent = (text|anyForeignElement)*
# Extensions
anyElement =
element * {
(attribute * { text }
| text
| anyElement)*
}
+ anyForeignElement =
+ element * - atom:* {
+ (attribute * { text }
+ | text
+ | anyElement)*
+ }
+
+ atomPlainTextConstruct =
+ atomCommonAttributes,
+ attribute type { "text" | "html" }?,
+ text
+
+ atomXHTMLTextConstruct =
+ atomCommonAttributes,
+ attribute type { "xhtml" },
+ xhtmlDiv
+
+ atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct
+
+ anyXHTML = element xhtml:* {
+ (attribute * { text }
+ | text
+ | anyXHTML)*
+ }
+
+ xhtmlDiv = element xhtml:div {
+ (attribute * { text }
+ | text
+ | anyXHTML)*
+ }
+
+ # EOF
+
+ The Schema for Category Documents:
+
+ # -*- rnc -*-
+ # RELAX NG Compact Syntax Grammar for the Atom Protocol
+ namespace app = "http://purl.org/atom/app#"
+ namespace atom = "http://www.w3.org/2005/Atom"
+ namespace xsd = "http://www.w3.org/2001/XMLSchema"
+ namespace local = ""
+
+ start = appCategories
+
+ # common:attrs
+
+ atomCommonAttributes =
+ attribute xml:base { atomUri }?,
+ attribute xml:lang { atomLanguageTag }?,
+ undefinedAttribute*
+
+ undefinedAttribute =
+ attribute * - (xml:base | xml:lang | local:*) { text }
+
+ atomUri = text
+
+ atomLanguageTag = xsd:string {
+ pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
+ }
+
+ atomCategory =
+ element atom:category {
+ atomCommonAttributes,
+ attribute term { text },
+ attribute scheme { atomUri }?,
+ attribute label { text }?,
+ undefinedContent
+ }
+
+ appInlineCategories =
+ element app:categories {
+ attribute fixed { "yes" | "no" }?,
+ attribute scheme { atomUri }?,
+ (atomCategory*)
+ }
+
+ appOutOfLineCategories =
+ element app:categories {
+ attribute href { atomURI },
+ (empty)
+ }
+
+ appCategories = appInlineCategories | appOutOfLineCategories
+ # Extensibility
+
+ undefinedContent = (text|anyForeignElement)*
+
+ anyElement =
+ element * {
+ (attribute * { text }
+ | text
+ | anyElement)*
+ }
+
+ anyForeignElement =
+ element * - atom:* {
+ (attribute * { text }
+ | text
+ | anyElement)*
+ }
+
# EOF
Appendix C. Revision History
+ draft-ietf-atompub-protocol-10: PaceRemoveTitleHeader2,
+ PaceSlugHeader4, PaceOnlyMemberURI,PaceOneAppNamespaceOnly,
+ PaceAppCategories, PaceExtendIntrospection,
+ UseElementsForAppCollectionTitles3, renamed Introspection to Service,
+ lots of good editorials suggestions, updated media example with slug,
+ moved xml conventions to convention sections, renamed XMl related
+ Conventions to Atom Publishing Protocol Documents, added auth header
+ to examples, consolidated definition of all resource types into the
+ model section, added IANA reg info for application/atomcat+xml.
+
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
IRI/URI; fixed URI/IRI ; next/previous fixed as per Atom
LinkRelations Attribute
(http://www.imc.org/atom-protocol/mail-archive/msg04095.html);
incorporated: PaceEditLinkMustToMay; PaceMissingDraftHasNoMeaning,