draft-ietf-atompub-protocol-04.txt | draft-ietf-atompub-protocol-05.txt | |||
---|---|---|---|---|
Network Working Group J. Gregorio, Ed. | Network Working Group J. Gregorio, Ed. | |||
Internet-Draft BitWorking, Inc | Internet-Draft BitWorking, Inc | |||
Expires: November 10, 2005 R. Sayre, Ed. | Expires: April 14, 2006 B. de hOra, Ed. | |||
May 9, 2005 | Propylon Ltd. | |||
October 11, 2005 | ||||
The Atom Publishing Protocol | The Atom Publishing Protocol | |||
draft-ietf-atompub-protocol-04.txt | draft-ietf-atompub-protocol-05.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 34 | 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 November 10, 2005. | This Internet-Draft will expire on April 14, 2006. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The Internet Society (2005). | Copyright (C) The Internet Society (2005). | |||
Abstract | Abstract | |||
This memo presents a protocol for using XML (Extensible Markup | This memo presents a protocol for using XML (Extensible Markup | |||
Language) and HTTP (HyperText Transport Protocol) to edit content. | Language) and HTTP (HyperText Transport Protocol) to edit content. | |||
The Atom Publishing Protocol is an application-level protocol for | The Atom Publishing Protocol (APP) is an application-level protocol | |||
publishing and editing Web resources belonging to periodically | for publishing and editing Web resources. The protocol at its core | |||
updated websites. The protocol at its core is the HTTP transport of | is the HTTP transport of Atom-formatted representations. The Atom | |||
Atom-formatted representations. The Atom format is documented in the | format is documented in the Atom Syndication Format | |||
Atom Syndication Format (draft-ietf-atompub-format-06.txt). | (draft-ietf-atompub-format-11.txt). | |||
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 . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Notational Conventions . . . . . . . . . . . . . . . . . . . . 4 | 2. XML Namespace and Language . . . . . . . . . . . . . . . . . 5 | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Notational Conventions . . . . . . . . . . . . . . . . . . . 6 | |||
4. The Atom Publishing Protocol Model . . . . . . . . . . . . . . 6 | 4. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.1 Collections . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. The Atom Publishing Protocol Model . . . . . . . . . . . . . 8 | |||
4.2 Discovery . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.1 Collections . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4.3 Listing . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.2 Editable Resources . . . . . . . . . . . . . . . . . . . . 9 | |||
4.4 Authoring . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.2.1 Read . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4.4.1 Create . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.2.2 Update . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4.4.2 Read . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5.2.3 Delete . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4.4.3 Update . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5.3 Capabilities Discovery . . . . . . . . . . . . . . . . . . 11 | |||
4.4.4 Delete . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5.4 Listing . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.5 Success and Failure . . . . . . . . . . . . . . . . . . . 9 | 5.5 Success and Failure . . . . . . . . . . . . . . . . . . . 12 | |||
5. Collections . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6. Atom Publishing Protocol Documents . . . . . . . . . . . . . 13 | |||
5.1 Collection Documents . . . . . . . . . . . . . . . . . . . 10 | 6.1 Use of xml:base xml:lang . . . . . . . . . . . . . . . . . 13 | |||
5.1.1 Element Definitions . . . . . . . . . . . . . . . . . 10 | 6.2 Collection Documents . . . . . . . . . . . . . . . . . . . 14 | |||
5.2 Collection Resource . . . . . . . . . . . . . . . . . . . 12 | 6.2.1 Element Definitions . . . . . . . . . . . . . . . . . 14 | |||
5.2.2 POST . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 6.3 Introspection Documents . . . . . . . . . . . . . . . . . 16 | |||
5.2.3 Usage Scenarios . . . . . . . . . . . . . . . . . . . 15 | 6.3.1 Element Definitions . . . . . . . . . . . . . . . . . 17 | |||
5.2.4 Range: Header . . . . . . . . . . . . . . . . . . . . 16 | 7. Introspection Resource . . . . . . . . . . . . . . . . . . . 20 | |||
5.2.5 Accept-Ranges: Header . . . . . . . . . . . . . . . . 16 | 7.1 Discovery . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
5.2.6 Name: Header . . . . . . . . . . . . . . . . . . . . . 17 | 8. Collection Resources . . . . . . . . . . . . . . . . . . . . 21 | |||
6. Entry Collection . . . . . . . . . . . . . . . . . . . . . . . 18 | 8.1 GET . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
6.1 Editing Entry Resources . . . . . . . . . . . . . . . . . 18 | 8.2 POST . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
6.2 Role of Atom Entry Elements During Editing . . . . . . . . 18 | 8.3 Title: Header . . . . . . . . . . . . . . . . . . . . . . 22 | |||
7. Generic Collection . . . . . . . . . . . . . . . . . . . . . . 20 | 9. Entry Collections . . . . . . . . . . . . . . . . . . . . . 23 | |||
7.1 Editing Generic Resources . . . . . . . . . . . . . . . . 20 | 9.1 Editing Entry Resources . . . . . . . . . . . . . . . . . 23 | |||
8. Introspection . . . . . . . . . . . . . . . . . . . . . . . . 21 | 9.2 Role of Atom Entry Elements During Editing . . . . . . . . 23 | |||
8.1 Introspection Document . . . . . . . . . . . . . . . . . . 21 | 10. Generic Collections . . . . . . . . . . . . . . . . . . . . 25 | |||
8.1.1 Element Definitions . . . . . . . . . . . . . . . . . 21 | 10.1 Editing Generic Resources . . . . . . . . . . . . . . . 25 | |||
8.2 Introspection Resource . . . . . . . . . . . . . . . . . . 23 | 10.2 Title: Header . . . . . . . . . . . . . . . . . . . . . 25 | |||
8.2.1 Discovery . . . . . . . . . . . . . . . . . . . . . . 24 | 11. List Resources . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
9. Securing the Atom Protocol . . . . . . . . . . . . . . . . . . 25 | 11.1 URI Templates . . . . . . . . . . . . . . . . . . . . . 26 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . 26 | 11.2 URI Template Parameters . . . . . . . . . . . . . . . . 27 | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . 27 | 11.2.1 \{index\} URI template variable . . . . . . . . . . 27 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 11.2.2 \{daterange\} URI template variable . . . . . . . . 27 | |||
12.1 Normative References . . . . . . . . . . . . . . . . . . . 30 | 11.2.3 Other URI Template parameters . . . . . . . . . . . 28 | |||
12.2 Informative References . . . . . . . . . . . . . . . . . . 31 | 12. Atom Entry Extensions . . . . . . . . . . . . . . . . . . . 29 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 32 | 13. Securing the Atom Protocol . . . . . . . . . . . . . . . . . 30 | |||
A. Revision History . . . . . . . . . . . . . . . . . . . . . . . 33 | 14. Security Considerations . . . . . . . . . . . . . . . . . . 31 | |||
Intellectual Property and Copyright Statements . . . . . . . . 35 | 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . 32 | |||
16. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
16.1 Normative References . . . . . . . . . . . . . . . . . . 35 | ||||
16.2 Informative References . . . . . . . . . . . . . . . . . 36 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 37 | ||||
A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 38 | ||||
B. Revision History . . . . . . . . . . . . . . . . . . . . . . 39 | ||||
Intellectual Property and Copyright Statements . . . . . . . 41 | ||||
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]. | [W3C.REC-xml-20040204]. | |||
2. Notational Conventions | 2. XML Namespace and Language | |||
The XML Namespaces URI [W3C.REC-xml-names-19990114] for the XML data | ||||
format described in this specification is: http://purl.org/atom/app# | ||||
XML elements 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 [W3C.REC-xml- | ||||
20040204], Section 2.12. | ||||
3. 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]. | |||
3. Terminology | 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. | ||||
This specification uses the namespace prefix "app:" for the Namespace | ||||
URI identified in Section 2 above. It uses the namespace prefix | ||||
"atom:" for the Namespace URI identified in [AtomFormat]. Note that | ||||
choices of namespace prefix are arbitrary and not semantically | ||||
significant. | ||||
4. Terminology | ||||
For convenience, this protocol may be referred to as "Atom Protocol" | ||||
or "APP". This specification uses both internally. | ||||
URI/IRI - A Uniform Resource Identifier and Internationalized | URI/IRI - A Uniform Resource Identifier and Internationalized | |||
Resource Identifier, respectively. These terms (and the distinction | Resource Identifier, respectively. These terms (and the distinction | |||
between them) are defined in [RFC3986] and [RFC3987]. | between them) are defined in [RFC3986] and [RFC3987]. | |||
Resource - an item identified by a URI [W3C.REC-webarch-20041215]. | Resource - A network data object or service that can be identified | |||
by a URI, as defined in [RFC2616]. | ||||
Collection Resource - A resource that contains a listing of Member | ||||
Resources and meets the requirements in Section 5 of this | ||||
specification. | ||||
Member Resource - A resource whose URI is listed by a Collection | Representation - An entity included with a request or response as | |||
Resource. | defined in [RFC2616]. | |||
4. The Atom Publishing Protocol Model | 5. The Atom Publishing Protocol Model | |||
The Atom Publishing Protocol operates on collections of Web | The Atom Publishing Protocol is a subset of HTTP that is used to edit | |||
resources. All collections support the same basic interactions, as | resources on the web. The APP operates on collections of Web | |||
do the resources within the collections. The patterns of interaction | resources. Collections are HTTP resources, as are the members of the | |||
are based on the common HTTP verbs. | collection. Both Collections and collection member resources support | |||
the same basic interactions. The patterns of interaction are based | ||||
on the common HTTP verbs. | ||||
o GET is used to retrieve a representation of a resource or perform | o GET is used to retrieve a representation of a resource or perform | |||
a read-only query. | a read-only query. | |||
o POST is used to create a new, dynamically-named resource. | o POST is used to create a new, dynamically-named resource, or to | |||
provide a block of data to a data-handling process. | ||||
o PUT is used to update a known resource. | o PUT is used to update a known resource. | |||
o DELETE is used to remove a resource. | o DELETE is used to remove a resource. | |||
4.1 Collections | 5.1 Collections | |||
The APP groups resources into "Collections", which are analogous to | The APP groups resources into "Collections", which are analogous to | |||
the "folders" or "directories" found in many file systems. | folders or directories found in a file system. In the figure we have | |||
member resources in a collection. | ||||
4.2 Discovery | ||||
To discover the location of the collections exposed by an APP | +-------------------------+ | |||
service, the client must locate and request an Introspection Document | | Collection | | |||
(Section 8). | | | | |||
| +----------------+ | | ||||
| | Member_A | | | ||||
| +----------------+ | | ||||
| | | ||||
| +----------------+ | | ||||
| | Member_B | | | ||||
| +----------------+ | | ||||
| | | ||||
| +----------------+ | | ||||
| | Member_C | | | ||||
| +----------------+ | | ||||
| | | ||||
| ... | | ||||
| | | ||||
| +----------------+ | | ||||
| | Member_Oldest | | | ||||
| +----------------+ | | ||||
| | | ||||
+-------------------------+ | ||||
To add a new member to a collection an appropriate representation is | ||||
POSTed to the URI of the collection resource. Here we show it being | ||||
added to the beginnng of the list. The ordering of the members of | ||||
collections is in terms of the time at which each resource was last | ||||
updated, which includes the act of creating the resource. The | ||||
ordering of collection members is covered in more detail in Section 8 | ||||
and Section 11. | ||||
Client Server | +-------------------------+ | |||
| Collection | | ||||
| | | | | | |||
| 1.) GET Introspection | | POST | +----------------+ | | |||
|------------------------------->| | --------->| Member_New | | | |||
| +----------------+ | | ||||
| | | | | | |||
| 2.) Introspection Doc | | | +----------------+ | | |||
|<-------------------------------| | | | Member_A | | | |||
| +----------------+ | | ||||
| | | ||||
| +----------------+ | | ||||
| | Member_B | | | ||||
| +----------------+ | | ||||
| | | | | | |||
| +----------------+ | | ||||
| | Member_C | | | ||||
| +----------------+ | | ||||
| | | ||||
| ... | | ||||
| | | ||||
| +----------------+ | | ||||
| | Member_Oldest | | | ||||
| +----------------+ | | ||||
| | | ||||
+-------------------------+ | ||||
1. The client sends a GET request to the Service Description | You'll note that up until now we haven't said what kinds of | |||
Resource. | representations we are expecting at each of the resources. There are | |||
two kinds of collections, Entry and Generic. In Entry Collections | ||||
all the members MUST have representations as Atom Entries. For | ||||
further restrictions on Entry Collection see Section 9 The other type | ||||
of collection is a Generic Collection. Generic Collections make no | ||||
restriction on the representations of their member resources. | ||||
2. The server responds with an Introspection Document containing the | 5.2 Editable Resources | |||
locations of collections provided by the service. The content of | ||||
this document can vary based on aspects of the client request, | ||||
including, but not limited to, authentication credentials. | ||||
4.3 Listing | All the members of a collection are Editable Resources. An Editable | |||
resource is a resource whose available HTTP methods can be used to | ||||
retrieve, update and delete it. | ||||
Once the client has discovered the location of a collection, it can | 5.2.1 Read | |||
request a listing of the collection's membership. However, | ||||
collections might be extremely large, so servers are likely to list a | To retrieve a representation of the resource, you send a GET to the | |||
small subset of the collection by default. | URI of the Editable Resource. Remember that for members of Entry | |||
Collections, the served representation will be an Atom Entry. | ||||
Client Server | Client Server | |||
| | | | | | |||
| 1.) GET to Collection URI | | | 1.) GET to Editable Resource URI | | |||
|------------------------------->| | |------------------------------------------>| | |||
| | | | | | |||
| 2.) 200 OK, Atom Feed Doc | | | 2.) 200 OK | | |||
|<-------------------------------| | |<------------------------------------------| | |||
| | | | | | |||
1. The client sends a GET request to the Collection's URI. | 1. The client sends a GET request to the member's URI. | |||
2. The server responds with an Atom Feed Document containing a full | ||||
or partial listing of the collection's membership. | ||||
4.4 Authoring | 2. The server responds with the representation of the resource. | |||
After locating a collection, a client can add entries by sending a | 5.2.2 Update | |||
request to the collection; other changes are accomplished by sending | ||||
HTTP requests to its member resources. | ||||
4.4.1 Create | To update an Editable Resource the client will PUT an updated | |||
representation to the URI of the resource. | ||||
Client Server | Client Server | |||
| | | | | | |||
| 1.) POST to Collection URI | | | 1.) PUT to Editable Resource URI | | |||
|------------------------------->| | |------------------------------------------>| | |||
| | | ||||
| 2.) 201 Created @ Location | | ||||
|<-------------------------------| | ||||
| | | | | | |||
| 2.) 200 OK | | ||||
|<------------------------------------------| | ||||
1. The client sends a representation of a member to the server via | 1. The client PUTs an updated representation to the member's URI. | |||
HTTP POST. The Request URI is that of the Collection. | ||||
2. The server responds with a response of "201 Created" and a | 2. The server MAY respond with an updated representation of the | |||
"Location" header containing the URI of the newly-created | member's new state. | |||
resource. | ||||
4.4.2 Read | 5.2.3 Delete | |||
An Editable Resource is deleted by sending it DELETE. Note that this | ||||
also removes it from all the collections that it belonged to. | ||||
Client Server | Client Server | |||
| | | | | | |||
| 1.) GET or HEAD to Member URI | | | 1.) DELETE to Editable Resource URI | | |||
|------------------------------->| | |------------------------------------------>| | |||
| | | | | | |||
| 2.) 200 OK | | | 2.) 200 Ok | | |||
|<-------------------------------| | |<------------------------------------------| | |||
| | | | | | |||
1. The client sends a GET (or HEAD) request to the member's URI. | 1. The client sends a DELETE request to the member's URI. | |||
2. The server responds with an appropriate representation. | 2. The server responds with successful status code. | |||
4.4.3 Update | 5.3 Capabilities Discovery | |||
Each collection resource responds to GET and can return a Collection | ||||
Document as it's representation. The Collection Document enumerates | ||||
the capabilities of each collection and the format is described in | ||||
Section 6.2. | ||||
Client Server | Client Server | |||
| | | | | | |||
| 1.) PUT to Member URI | | | 1.) GET to Collection | | |||
|------------------------------->| | |------------------------------->| | |||
| | | | | | |||
| 2.) 200 OK | | | 2.) Collection Document | | |||
|<-------------------------------| | |<-------------------------------| | |||
| | | ||||
1. The client PUTs an updated representation to the member's URI. | 1. The client sends a GET request to the Collection Resource. | |||
2. The server responds with a representation of the member's new | 2. The server responds with a Collection Document containing a | |||
state. | description of the capabilities of the collection. The content | |||
of this document can vary based on aspects of the client request, | ||||
including, but not limited to, authentication credentials. | ||||
4.4.4 Delete | 5.4 Listing | |||
Clients can request a listing of the Collection's membership. | ||||
Listing the Editable Resources that are members of a collection is | ||||
done using one of the List Resources in the Introspection Document, | ||||
utilizing the 'app:uri-template' element. The List Resource returns | ||||
Atom Feed Documents with one Atom Entry for each member resource that | ||||
match the selection criteria. This is true whether the collection is | ||||
an Entry Collection or a Generic Collection. If an Entry Collection | ||||
is being interrogated, the entries returned by a list resource SHOULD | ||||
NOT to be considered complete representations of the member | ||||
resources. See Section 11 and Section 12 for more details on the | ||||
extensions and constraints found on the entries returned from List | ||||
Resources. | ||||
Client Server | Client Server | |||
| | | | | | |||
| 1.) DELETE to Member URI | | | 1.) GET to List Resource | | |||
|------------------------------->| | |------------------------------->| | |||
| | | | | | |||
| 2.) 204 No Content | | | 2.) 200 OK, Atom Feed Doc | | |||
|<-------------------------------| | |<-------------------------------| | |||
| | | | | | |||
1. The client sends a DELETE request to the member's URI. | 1. The client sends a GET request to the Collection's URI. | |||
2. The server responds with successful status code. | 2. The server responds with an Atom Feed Document containing a full | |||
or partial listing of the Collection's membership. | ||||
4.5 Success and Failure | 5.5 Success and Failure | |||
HTTP defines classes of response. HTTP status codes of the form 2xx | HTTP defines different classes of response, which are used by the | |||
signal that a request was successful. HTTP status codes of the form | Atom Protocol. HTTP status codes of the form 2xx signal that a | |||
4xx or 5xx signal that an error has occurred, and the request has | request was successful. HTTP status codes of the form 4xx or 5xx | |||
failed. Consult the HTTP specification for more detailed definitions | signal that an error has occurred, and the request has failed. | |||
of each status code. | Consult the HTTP specification [RFC2616] for more detailed | |||
definitions of each status code. | ||||
5. Collections | 6. Atom Publishing Protocol Documents | |||
An Atom Collection is a set of related resources. All members of a | This specification describes two kinds of Atom Publishing Protocol | |||
collection have an "updated" property, and the collection is | Documents: Atom Collections Documents and Atom Introspection | |||
considered to be ordered by this property. | Documents. | |||
5.1 Collection Documents | An Atom Collection Document is a representation of an Atom | |||
collection, including metadata about the collection, and some or all | ||||
of the members associated with it. Its root is the app:collection | ||||
element. | ||||
An example Collection Document. | An Atom Introspection Document represents one or more workspaces, | |||
which describe server-defined groupings of collections. Its root is | ||||
the app:service element. | ||||
namespace app = "..." start = appCollection | appIntrospection | ||||
Both kinds of Atom Publishing Protocol Documents are specified in | ||||
terms of the XML Information Set, serialised as XML 1.0 ([W3C.REC- | ||||
xml-20040204]). Atom Publishing Protocol Documents MUST be well- | ||||
formed XML. This specification does not define a DTD for Atom | ||||
Protocol, and hence does not require them to be valid (in the sense | ||||
used by XML). | ||||
Atom Collection Documents are identified with the "application/ | ||||
atomcoll+xml" media type. | ||||
Atom Introspection Documents are identified with the "application/ | ||||
atomserv+xml" media type. | ||||
Atom 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. | ||||
While IRIs must, for many protocols, be mapped to URIs prior to | ||||
dereferencing, they MUST NOT be so mapped for comparison when used in | ||||
atom:id. Section 3.1 of [RFC3987] describes how to map an IRI to a | ||||
URI when necessary. | ||||
6.1 Use of xml:base xml:lang | ||||
Any element defined by this specification MAY have an xml:base | ||||
attribute [W3C.REC-xmlbase-20010627]. When xml:base is used in an | ||||
Atom Publishing Protocol Document, it serves the function described | ||||
in section 5.1.1 of [RFC3986], establishing the base URI (or IRI) for | ||||
resolving any relative references found within the effective 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 XML 1.0 ([W3C.REC- | ||||
xml-20040204]), Section 2.12. | ||||
appCommonAttributes = | ||||
attribute xml:base { atomUri }?, | ||||
attribute xml:lang { atomLanguageTag }?, | ||||
undefinedAttribute* | ||||
6.2 Collection Documents | ||||
The Collection Document describes the capabilities of a Collection, | ||||
the types of Entries that it will support, the URI Templates it | ||||
supports. | ||||
The Collection Document has the media-type 'application/atomcoll+xml' | ||||
(see Section 15). | ||||
Here's an example document: | ||||
<?xml version="1.0" encoding='utf-8'?> | <?xml version="1.0" encoding='utf-8'?> | |||
<collection xmlns="http://purl.org/atom/app#"> | <app:collection xmlns:app="http://purl.org/atom/app#"> | |||
<member href="http://example.org/1" | <app:member-type>entry</pub:member-type> | |||
hrefreadonly="http://example.com/1/bar" | <app:uri-template>http://example.org/{index}</pub:uri-template> | |||
title="Sample 1" | <app:uri-template>http://example.org/{daterange}</pub:uri-template> | |||
updated="2003-12-13T18:30:02Z" /> | </app:collection> | |||
<member href="http://example.org/2" | ||||
hrefreadonly="http://example.com/2/bar" | ||||
title="Sample 2" | ||||
updated="2003-12-13T18:30:02Z" /> | ||||
<member href="http://example.org/3" | ||||
hrefreadonly="http://example.com/3/bar" | ||||
title="Sample 3" | ||||
updated="2003-12-13T18:30:02Z" /> | ||||
<member href="http://example.org/4" | ||||
title="Sample 4" | ||||
updated="2003-12-13T18:30:02Z" /> | ||||
</collection> | ||||
Atom Collection Documents have the media-type 'application/ | This example says the Collection contains Atom Entry documents, and | |||
atomcoll+xml', see Section 11. | that there are two means of selecting entries using what are called | |||
'URI Templates'; one based on the collection's order, and another | ||||
based on dates. See Section 11.1 for more about URI Templates. | ||||
5.1.1 Element Definitions | 6.2.1 Element Definitions | |||
5.1.1.1 The 'app:collection' Element | 6.2.1.1 The 'app:collection' Element | |||
The 'app:collection' element represents an Atom Collection. A | The app:collection is the document element of a Collection Document. | |||
collection document does not necessarily list every member of the | ||||
collection. | ||||
appCollection = | appCollection = | |||
element app:collection { | element app:collection { | |||
attribute next { text } ?, | appCommonAttributes, | |||
appMember* | ( appMemberType+ | |||
appSearchTemplate | ||||
& anyElement* ) | ||||
} | } | |||
o 'app:collection' elements MAY contain any number of 'app:member' | ||||
elements. | ||||
o 'app:collection' elements MAY contain a 'next' attribute which | This specification defines two child elements for app:collection: | |||
identifies a collection document containing member elements | ||||
updated earlier in time. | ||||
The members listed in a collection document MUST constitute a | o app:member-type: any number of elements listing the types of | |||
consecutive sequence of the collection's members, ordered by their | Entries that the Collection may contain. | |||
"updated" properties. That is, a collection document MUST contain a | ||||
contiguous subset of the members of the collection ordered by their | ||||
'updated' property. | ||||
5.1.1.2 The 'app:member' Element | o app:uri-template: any number of URI Templates for a List Resource | |||
(See Section 11). | ||||
The 'app:member' represents a single member resource. | 6.2.1.2 The 'app:member-type' Element | |||
The app:member-type element contains information elements about the | ||||
types of Entries that the Collection may contain. | ||||
appMember = | appMember = | |||
element app:member { | element app:member-type { | |||
attribute title { text }, | appCommonAttributes, | |||
attribute href { text }, | appTypeValue | |||
attribute hrefreadonly { text } ?, | ||||
attribute updated { text } | ||||
} | } | |||
o 'app:member' elements MUST include an 'href' attribute, whose | The element content of an app:member-type MUST be a string that is | |||
value conveys the URI used to edit the member source | non-empty, and matches either the "isegment-nz-nc" or the "IRI" | |||
production in [RFC3987]. Note that use of a relative reference other | ||||
than a simple name is not allowed. If a name is given, | ||||
implementations MUST consider the link relation type to be equivalent | ||||
to the same name registered within the IANA Registry of Member Types | ||||
(Section 15), and thus the IRI that would be obtained by appending | ||||
the value of the rel attribute to the string | ||||
"http://www.iana.org/assignments/entrytype/". | ||||
o 'app:member' elements MAY include an "hrefreadonly | The content of an app:member-type specifies constraints on the | |||
(Section 5.1.1.3)" attribute. | Entries that may appear in the Collection. The app:collection | |||
element MAY have multiple app:member-type elements. An Entry POSTed | ||||
to a Collection MUST meet the constraints of at least one of the app: | ||||
member-type constraints. It MAY meet more than one, but the minimum | ||||
requirement is at least one. | ||||
o 'app:member' elements MUST include a 'title' attribute, whose | This specification defines two initial values for app:member-type | |||
value is a human-readable name or description for the item. | IANA registry: | |||
o 'app:member' elements MUST include an 'updated' attribute, whose | o "entry" - The Collection is an Entry Collection as defined in | |||
value is the 'updated' property of the collection member. Its | Section 9. | |||
format MUST conform to the date-time production in [RFC3339]. | ||||
5.1.1.3 The 'hrefreadonly' Attribute | o "generic" - The Collection is a Generic Collection as defined in | |||
Section 10. | ||||
This optional attribute identifies a URI which, on a GET request, | 6.2.1.3 The 'app:uri-template' Element | |||
responds equivalently to how the "href" URI would respond to the same | ||||
request. Clients SHOULD NOT apply to this URI any HTTP methods that | ||||
would be expected to modify the state of the resource (e.g. PUT, | ||||
POST or DELETE). A PUT or POST request to this URI MAY NOT affect | ||||
the underlying resource. If the "hrefreadonly" attribute is not | ||||
given, its value defaults to the "href" value. If the "hrefreadonly" | ||||
attribute is present, and its value is an empty string, then there is | ||||
no URI that can be treated in the way such a value would be treated. | ||||
Clients SHOULD use the "href" value to manipulate the resource within | The element content of an app:uri-template is a URI Template for a | |||
the context of the APP itself. Clients SHOULD prefer the | List Resource (See Section 11). Every List resource, whose URI is | |||
"hrefreadonly" value in any other context. For example, if the | determined by filling in the parameters in a URI Template, MUST | |||
resource is an image, a client may replace the image data using a PUT | return an Atom feed document as its representation. This Atom feed | |||
on the "href" value, and may even display a preview of the image by | document MUST NOT contain entries which do not match the selection | |||
fetching the "href" URI. But when creating a public, read-only | criteria. | |||
reference to the same image resource, the client should use the | ||||
"hrefreadonly" value. If the "hrefreadonly" value is an empty | ||||
string, the client SHOULD NOT make public reference to the "href" | ||||
value. | ||||
[[anchor10: Define extensibility for Collection Documents.]] | 6.3 Introspection Documents | |||
5.2 Collection Resource | In order for authoring to commence, a client must first discover the | |||
capabilities and locations of collections offered. | ||||
This specification defines two HTTP methods for use with collection | The Introspection Document describes "workspaces", which are server- | |||
resources: GET and POST. | defined groupings of collections. There is no requirement that | |||
servers support multiple workspaces, and a collection may appear in | ||||
more than one workspace. | ||||
5.2.1 GET | The Introspection Document has the media-type 'application/ | |||
atomserv+xml', see Section 15 | ||||
Collections can contain extremely large numbers of resources. A | Here's an example document: | |||
naive client such as a web spider or web browser would be overwhelmed | ||||
if the response to a GET reflected the full membership of the | ||||
collection, and the server would waste large amounts of bandwidth and | ||||
processing time on clients unable to handle the response. As a | ||||
result, responses to a simple GET request represent a server- | ||||
determined subset of the collection's membership. | ||||
In addition, the client MAY send a 'Range' header with a range type | <?xml version="1.0" encoding='utf-8'?> | |||
of 'udpated', indicating the subset of the collection to be returned. | <app:service xmlns:app="http://purl.org/atom/app#"> | |||
The 'Range' header is described in Section 5.2.4. | <app:workspace title="Main Site" > | |||
<app:collection contents="entries" | ||||
title="My Blog Entries" | ||||
href="http://example.org/reilly/feed" /> | ||||
<app:collection contents="generic" | ||||
title="Documents" | ||||
href="http://example.org/reilly/pic" /> | ||||
</app:workspace> | ||||
<app:workspace title="Side Bar Blog"> | ||||
<app:collection contents="entries" title="Entries" | ||||
href="http://example.org/reilly/feed" /> | ||||
<app:collection contents="http://example.net/booklist" | ||||
title="Books" | ||||
href="http://example.org/reilly/books" /> | ||||
</app:workspace> | ||||
</app:service> | ||||
This specification defines two serializations for Atom Collections. | This example says there are two workspaces, each consisting of two | |||
Servers MUST provide both, but MAY also provide additional | collections. The first workspace is called 'Mail', and has two | |||
serializations. | collections, called 'My Blog Entries' and 'Documents' whose locations | |||
are 'http://example.org/reilly/feed' and | ||||
'http://example.org/reilly/pic'. 'My Blog Entries' contains Atom | ||||
Entries and 'Documents' contains Generic Entries. The second | ||||
workspace is called 'Side Bar Blog' and also has two collections, | ||||
called 'Entries' and 'Books' whose locations are | ||||
'http://example.org/reilly/feed' and | ||||
'http://example.org/reilly/booklist'. 'Entries' contains Atom | ||||
Entries and 'Books' contains Generic Entries (since its contents | ||||
attribute is not present you MUST assume it is a Generic Collection). | ||||
1. Atom Collection Documents (application/atomcoll+xml), | 6.3.1 Element Definitions | |||
Section 5.1. | ||||
2. Atom Collection Documents wrapped by a SOAP envelope | 6.3.1.1 The 'app:service' Element | |||
(application/soap+xml), . | ||||
Clients use the HTTP 'Accept' request header to indicate their | The "app:service" element is the document element of a Introspection | |||
preference. | Document, acting as a container for service data associated with one | |||
or more workspaces. An app:service elements MAY contain any number | ||||
of app:workspace elements. | ||||
Example Request, with Accept header | appService = | |||
element app:service { | ||||
appCommonAttributes, | ||||
( appWorkspace* | ||||
& anyElement* ) | ||||
} | ||||
GET /collection HTTP/1.1 | 6.3.1.2 The 'app:workspace' Element | |||
Host: example.org | ||||
User-Agent: Agent/1.0 | ||||
Accept: application/atomcoll+xml | ||||
Here, the server could return any subset of the collection as an Atom | The 'workspace' element contains information elements about the | |||
Collection Document. | collections of resources available for editing. The app:workspace | |||
elements MAY contain any number of app:collection elements. | ||||
Example Response, Atom Collection Document | appWorkspace = | |||
element app:workspace { | ||||
appCommonAttributes, | ||||
attribute title { text }, | ||||
( appCollection* | ||||
& anyElement* ) | ||||
} | ||||
HTTP/1.1 200 OK | 6.3.1.2.1 The 'title' Attribute | |||
Date: Fri, 25 Mar 2005 17:15:33 GMT | ||||
Last-Modified: Mon, 04 Oct 2004 18:31:45 GMT | ||||
ETag: "2b3f6-a4-5b572640" | ||||
Accept-Ranges: updated | ||||
Content-Length: nnnn | ||||
Content-Type: application/atomcoll+xml; charset="utf-8" | ||||
<?xml version="1.0" encoding="utf-8"?> | The app:workspace element MUST contain a 'title' attribute, which | |||
<collection xmlns="http://purl.org/atom/app#"> | conveys a human-readable name for the workspace. This attribute is | |||
... | Language-Sensitive. | |||
<member href="http://example.org/1" | ||||
hrefreadonly="http://example.com/1/bar" | ||||
title="Example 1" | ||||
updated="2003-12-13T18:30:02Z" /> | ||||
... | ||||
</collection> | ||||
Example Request, with SOAP Accept header | 6.3.1.3 The 'app:collection' Element | |||
GET /collection HTTP/1.1 | The 'app:collection' element describes collections and their member | |||
Host: example.org | resources. | |||
User-Agent: Cosimo/1.0 | ||||
Accept: application/soap+xml | ||||
Here, the server could return any subset of the collection as an Atom | appCollection = | |||
Feed Document wrapped by a SOAP envelope. | element app:collection { | |||
appCommonAttributes, | ||||
attribute title { text }, | ||||
attribute href { text }, | ||||
attribute contents { text }, | ||||
anyElement* | ||||
} | ||||
Example Response, Atom Feed Document wrapped by a SOAP envelope | 6.3.1.3.1 The 'title' Attribute | |||
HTTP/1.1 200 OK | The app:collection element MUST contain a 'title' attribute, whose | |||
Date: Fri, 25 Mar 2005 17:15:33 GMT | value conveys a human-readable name for the workspace. This | |||
Last-Modified: Mon, 04 Oct 2004 18:31:45 GMT | attribute is Language-Sensitive. | |||
ETag: "2b3f6-a4-5b572640-89" | ||||
Accept-Ranges: bytes | ||||
Content-Length: nnnn | ||||
Content-Type: application/soap+xml; charset="utf-8" | ||||
<?xml version="1.0" encoding="utf-8"?> | 6.3.1.3.2 The 'href' Attribute | |||
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> | ||||
<env:Header /> | ||||
<env:Body> | ||||
<collection xmlns="http://purl.org/atom/app#"> | ||||
... | ||||
<member href="http://example.org/1" | ||||
hrefreadonly="http://example.com/1/bar" | ||||
title="Example 1" | ||||
updated="2003-12-13T18:30:02Z" /> | ||||
... | ||||
</collection> | ||||
</env:Body> | ||||
</env:Envelope> | ||||
5.2.2 POST | The app:collection element MUST contain an 'href' attribute, whose | |||
value conveys the IRI of the collection. | ||||
In addition to GET, a Collection Resource also accepts POST requests. | 6.3.1.3.3 The 'contents' Attribute | |||
The client POSTs a representation of the desired resource to the | ||||
Collection Resource. Note that some collections only allow members | ||||
of a specific media-type and a POST MAY generate a response with a | ||||
status code of 415 ("Unsupported Media Type"). | ||||
In the case of a successful creation, the status code MUST be 201 | The app:collection element MAY contain a 'contents' attribute. The | |||
("Created"). | 'contents' attribute conveys the nature of a collection's member | |||
resources. This specification defines two initial values for the | ||||
'contents' attribute: | ||||
Example Request, Create a resource in a collection. | o 'entry': A value of 'entry' for the contents attribute indicates | |||
that the Collection is an Entry Collection (Section 9). | ||||
POST /collection HTTP/1.1 | o 'generic': A value of 'generic' for the contents attribute | |||
indicates that the Collection is a Generic Collection | ||||
(Section 10). | ||||
If the attribute is not present, its value MUST be considered to be | ||||
'generic'. | ||||
7. Introspection Resource | ||||
To retrieve an Introspection Document, the client sends a GET request | ||||
to its URI. | ||||
GET /service-desc HTTP/1.1 | ||||
Host: example.org | Host: example.org | |||
User-Agent: Cosimo/1.0 | User-Agent: Cosimo/1.0 | |||
Accept: application/atomcoll+xml | Accept: application/atomserv+xml | |||
Content-Type: image/png | ||||
Content-Length: nnnn | ||||
Name: trip-to-beach.png | ||||
...binary data... | The server responds to a GET request by returning an Introspection | |||
Document in the message body. | ||||
Here, the client is adding a new image resource to a collection. The | HTTP/1.1 200 OK | |||
Name: header indicates the client's desired name for the resource, | Date: Mon, 21 Mar 2005 19:20:19 GMT | |||
see Section 5.2.6. | Server: CountBasic/2.0 | |||
Last-Modified: Mon, 21 Mar 2005 19:17:26 GMT | ||||
ETag: "4c083-268-423f1dc6" | ||||
Content-Length: nnnn | ||||
Content-Type: application/atomserv+xml | ||||
Example Response, resource created successfully. | <?xml version="1.0" encoding='utf-8'?> | |||
<app:service xmlns:app="http://purl.org/atom/app#"> | ||||
... | ||||
</app:service> | ||||
HTTP/1.1 201 Created | 7.1 Discovery | |||
Date: Fri, 25 Mar 2005 17:17:11 GMT | ||||
Content-Length: nnnn | ||||
Content-Type: application/atomcoll+xml; charset="utf-8" | ||||
Location: http://example.org/images/trip-to-the-beach-01.png | ||||
<?xml version="1.0" encoding="UTF-8"?> | [[anchor18: Add in desc of an HTML link element that points to the | |||
<collection xmlns="http://purl.org/atom/app#"> | Introspection Resource, or add it to the autodisco draft]] | |||
<member href="http://example.org/images/trip-to-beach.png" | ||||
hrefreadonly="http://example.com/ed/im/trip-01.png" | ||||
title="trip-to-beach.png" | ||||
updated="2005-03-25T17:17:09Z" /> | ||||
</collection> | ||||
5.2.3 Usage Scenarios | 8. Collection Resources | |||
These scenarios illustrate common idioms for interactin with | An Atom Collection is a set of related resources. All members of a | |||
Collections. | collection have an "app:updated" property, and the Collection is | |||
considered to be ordered by this property. | ||||
The Atom Collection can be used by clients in two ways. In the first | This specification defines two HTTP methods for use with collection | |||
case the client encounters a Collection for the first time and is | resources: GET and POST. | |||
doing an initial syncronization, that is, retrieving a list of all | ||||
the members of the collections and possibly retrieving all the | ||||
members of the collection also. The client can perform a non-partial | ||||
GET on the collection resource and it will receive a collection | ||||
document that either contains all the members of the collection, or | ||||
the collection document root element 'collection' will contain a | ||||
'next' attribute pointing to the next collection document. By | ||||
repeatedly following the 'next' attribute from document to document | ||||
the client can find all the members of the collection. | ||||
In the second case the client has already done an initial sync, and | 8.1 GET | |||
now needs to re-sync, because the client was just restarted, or some | ||||
time has passed since a re-sync, etc. The client does a partial GET | ||||
on the collection document, supplying a Range header that begins from | ||||
the last time the client sync'd to the current time. The collection | ||||
document returned will contain only those members of the collection | ||||
that have changed since the last time the client syncronized. | ||||
5.2.4 Range: Header | A GET to a Collection Resource returns a Collection Document, | |||
outlining the Collection. Collection Documents are described in | ||||
Section 6.2. | ||||
HTTP/1.1 allows a client to request that only part (a range of) the | 8.2 POST | |||
collection to be included within the response. HTTP/1.1 uses range | ||||
units in the Range header field. A collection can be broken down | ||||
into subranges according to the members 'updated' property. If a | ||||
Range: header is present in the request, its value explictly | ||||
identifies the a time interval interval in which all the members | ||||
'updated' property must fall to be included in the response. | ||||
Range = "Range" ":" ranges-specifier | In addition to GET, a Collection Resource also accepts POST requests. | |||
The client POSTs a representation of the desired resource to the | ||||
Collection Resource. Note that some collections may impose | ||||
constraints on the media-types that are created in a Collection and | ||||
MAY generate a response with a status code of 415 ("Unsupported Media | ||||
Type"). | ||||
The value of the Range: header should be a pair of ISO 8601 dates, | In the case of a successful creation, the status code MUST be 201 | |||
separated by a slash character; either date may be optionally | ("Created"). | |||
omitted, in which case the range is understood as stretching to | ||||
infinity on that end. | ||||
ranges-specifier = updated-ranges-specifier | Every successful POST MUST return a Location: header with the URI of | |||
updated-ranges-specifier = updated-unit "=" updated-range | the newly created resource. | |||
updated-unit = "updated" | ||||
updated-range = [iso-date] "/" [iso-date] | ||||
The response to a collection request MUST be a collection document, | Here's an example. Below, the client requests to create a resource | |||
all of whose 'member' elements fall within the requested range. The | in a Collection: | |||
request range is considered a closed set, that is, if a 'member' | ||||
element matches one end of the range exactly it MUST be included in | ||||
the response. If no members fall in the requested range, the server | ||||
MUST respond with a collection document containing no 'member' | ||||
elements. | ||||
The inclusion of the Range: header in a request changes the request | POST /edit HTTP/1.1 | |||
to a "partial GET" [RFC2616]. | Host: example.org | |||
User-Agent: Cosimo/1.0 | ||||
Accept: application/atom+xml | ||||
Content-Type: application/atom+xml | ||||
Content-Length: 601 | ||||
5.2.5 Accept-Ranges: Header | <atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> | |||
<atom:title>Mars Attacks!</atom:title> | ||||
<atom:summary type="html"> | ||||
Why cant we all just... get along? | ||||
</atom:summary> | ||||
<atom:author> | ||||
<atom:name>The President</atom:name> | ||||
<atom:uri>http://www.example.org/blog</atom:uri> | ||||
</atom:author> | ||||
<atom:content type="html" xml:lang="en" | ||||
xml:base="http://www.example.org/blog/"> | ||||
<p> | ||||
Why can't we...work out our differences? | ||||
Why can't we...work things out? | ||||
Little people...why can't we all just...get along? | ||||
</p> | ||||
</atom:content> | ||||
</atom:entry> | ||||
The response to a non-partial GET request MUST include an Accept- | The resource is created by sending an Atom Entry as the entity body. | |||
Ranges header that indicates that the server accepts 'updated' range | ||||
requests. | ||||
Accept-Ranges = "Accept-Ranges" ":" acceptable-ranges | Assuming the server created the resource successfully, it sends back | |||
acceptable-ranges = updated-unit ( 1#range-unit ) | a 201 Created response with a Location: header that contains the IRI | |||
of the newly created member as an Editable Resource. | ||||
5.2.6 Name: Header | HTTP/1.1 201 Created | |||
Date: Fri, 7 Oct 2005 17:17:11 GMT | ||||
Content-Length: 663 | ||||
Content-Type: application/atom+xml; charset="utf-8" | ||||
Location: http://example.org/edit/first-post.atom | ||||
[[anchor13: this is new...]] | 8.3 Title: Header | |||
The POST to a Collection Resource MAY contain a Name: header that | The POST to a Collection Resource MAY contain a Title: header that | |||
indicates the clients suggested name for the resource. The server | indicates the clients suggested name for the resource. The server | |||
MAY ignore the Name: header or modify the requested name to suit | MAY ignore the Title: header or modify the requested name to suit | |||
local conventions. | local conventions. | |||
Name = "Name" ":" relative-part | Title = "Title" ":" [text] | |||
The relative-part production is defined in [RFC3986]. | ||||
6. Entry Collection | 9. Entry Collections | |||
Entry Collections are Collections that restrict their membership to | Entry Collections are Collections that restrict their membership to | |||
Atom entries. This specification defines two serializations for Atom | Atom entries. | |||
entries. Servers MUST provide both serializations. | ||||
1. Atom Entry Documents (application/atom+xml), [AtomFormat]. | ||||
2. Atom Entry Documents wrapped by a SOAP envelope (application/ | ||||
soap+xml), . | ||||
Clients use the HTTP 'Accept' request header to indicate their | ||||
preference [RFC2616]. If no 'Accept' header is present in the | ||||
request, the server is free to choose any serialization. When an | ||||
HTTP request contains a body, clients MUST include a 'Content-Type' | ||||
header, and servers MUST accept both application/atom+xml and | ||||
application/soap+xml message bodies. | ||||
6.1 Editing Entry Resources | 9.1 Editing Entry Resources | |||
Atom entries are edited by sending HTTP requests to an individual | Atom entries are edited by sending HTTP requests to an individual | |||
entry's URI. Servers can determine the processing necessary to | entry's URI. Servers can determine the processing necessary to | |||
interpret a request by examining the request's HTTP method and | interpret a request by examining the request's HTTP method and | |||
'Content-Type' header. | 'Content-Type' header. | |||
If the request method is POST and the 'Content-Type' is application/ | ||||
soap+xml, the SOAP document MUST contain a Web-Method property . | ||||
This specifcation defines two values for that property, PUT and | ||||
DELETE. | ||||
Processing Client Requests | Processing Client Requests | |||
+----------------------------------+------+--------+--------+--------+ | +-----------+------+--------+--------+------+ | |||
| | GET | PUT | DELETE | POST | | | | GET | PUT | DELETE | POST | | |||
+----------------------------------+------+--------+--------+--------+ | +-----------+------+--------+--------+------+ | |||
| No Body | Read | x | Delete | x | | | No Body | Read | x | Delete | x | | |||
| | | | | | | | | | | | | | |||
| Atom Body | x | Update | x | x | | | Atom Body | x | Update | x | x | | |||
| | | | | | | +-----------+------+--------+--------+------+ | |||
| SOAP Body with Web-Method PUT | x | x | x | Update | | ||||
| | | | | | | ||||
| SOAP Body with Web-Method DELETE | x | x | x | Delete | | ||||
+----------------------------------+------+--------+--------+--------+ | ||||
6.2 Role of Atom Entry Elements During Editing | 9.2 Role of Atom Entry Elements During Editing | |||
The elements of an Atom Entry Document are either a 'Writable | The elements of an Atom Entry Document are either a 'Writable | |||
Element' or a 'Round Trip Element'. | Element' or a 'Round Trip Element'. | |||
Writable Element - An element of an Atom Entry whose value is | Writable Element - An element of an Atom Entry whose value is | |||
editable by the client and not enforced by the server. | editable by the client and not enforced by the server. | |||
Round Trip Element - An element of an Atom Entry whose value is | Round Trip Element - An element of an Atom Entry whose value is | |||
enforced by the server and not editable by the client. | enforced by the server and not editable by the client. | |||
skipping to change at page 20, line 5 | skipping to change at page 25, line 5 | |||
| | | | | | | | |||
| atom:summary | Writable | | | atom:summary | Writable | | |||
| | | | | | | | |||
| atom:title | Writable | | | atom:title | Writable | | |||
| | | | | | | | |||
| atom:updated | Round Trip | | | atom:updated | Round Trip | | |||
+--------------------+------------+ | +--------------------+------------+ | |||
Table 2 | Table 2 | |||
7. Generic Collection | 10. Generic Collections | |||
Generic Collections are Collections that do not have uniform | Generic Collections are Collections that do not have uniform | |||
restrictions on the representations of the member resources. | restrictions on the representations of the member resources. | |||
7.1 Editing Generic Resources | 10.1 Editing Generic Resources | |||
Member resources are edited by sending HTTP requests to an individual | Member resources are edited by sending HTTP requests to an individual | |||
resource's URI. Servers can determine the processing necessary to | resource's URI. Servers can determine the processing necessary to | |||
interpret a request by examining the request's HTTP method and | interpret a request by examining the request's HTTP method and | |||
'Content-Type' header. | 'Content-Type' header. | |||
Processing Client Requests | Processing Client Requests | |||
+----------+------+--------+--------+------+ | +----------+------+--------+--------+------+ | |||
| | GET | PUT | DELETE | POST | | | | GET | PUT | DELETE | POST | | |||
+----------+------+--------+--------+------+ | +----------+------+--------+--------+------+ | |||
| No Body | Read | x | Delete | x | | | No Body | Read | x | Delete | x | | |||
| | | | | | | | | | | | | | |||
| Any Body | x | Update | x | x | | | Any Body | x | Update | x | x | | |||
+----------+------+--------+--------+------+ | +----------+------+--------+--------+------+ | |||
8. Introspection | When a List resource returns an Atom Feed enumerating the contents of | |||
a Generic Collection, all the Entries MUST have an atom:content | ||||
element with a 'src' attribute. | ||||
In order for authoring to commence, a client must first discover the | 10.2 Title: Header | |||
capabilities and locations of collections offered. | ||||
8.1 Introspection Document | The POST to a Generic Collection Resource MAY contain a Title: header | |||
that indicates the clients suggested title for the resource. The | ||||
server MAY ignore the Title: header or modify the requested title to | ||||
suit local conventions. | ||||
The Introspection Document describes "workspaces", which are server- | Title = "Title" ":" [text] | |||
defined groupings of collections. There is no requirement that | ||||
servers support multiple workspaces, and a collection may appear in | ||||
more than one workspace. | ||||
The Introspection Document has the media-type 'application/ | 11. List Resources | |||
atomserv+xml', see Section 11 | ||||
<?xml version="1.0" encoding='utf-8'?> | List resources are resources which are identified by URI templates | |||
<service xmlns="http://purl.org/atom/app#"> | indicating selection criteria. They can be used where clients | |||
<workspace title="Main Site" > | require fine control over the range or size of a server's response. | |||
<collection contents="entries" title="My Blog Entries" | A list resource MUST return an Atom feed document as its | |||
href="http://example.org/reilly/feed" /> | representation. The entries in the returned document MUST be ordered | |||
<collection contents="generic" title="Documents" | by their 'atom:updated' property, with the most recently updated | |||
href="http://example.org/reilly/pic" /> | entries coming first in the document order. Clients MUST NOT assume | |||
</workspace> | that the entry returned in the feed is a full representation of a | |||
<workspace title="Side Bar Blog"> | member resource. If the entry is an Editable Resource then the | |||
<collection contents="entries" title="Entries" | client should perform a GET on the member resource before editing. | |||
href="http://example.org/reilly/feed" /> | ||||
<collection contents="http://example.net/booklist" title="Books" | ||||
href="http://example.org/reilly/books" /> | ||||
</workspace> | ||||
</service> | ||||
8.1.1 Element Definitions | note: in this section some URIs carry across onto the next line; this | |||
is indicated by a '\' | ||||
8.1.1.1 The 'app:service' Element | 11.1 URI Templates | |||
The "service" element is the document element of a Service Document, | URI Templates are a mechanism for declaring criteria against a list | |||
acting as a container for service data associated with one or more | resource. By itself a URI Template is not a valid URI. Instead | |||
workspaces. | there are multiple parameters embedded in the URI and distinguished | |||
by closing braces which can be populated and used as selection | ||||
criteria. The value of each app:uri-template element in a Collection | ||||
document is a URI Template. | ||||
appService = | Each URI template has one or more parameters that MUST be substituted | |||
element app:service { | with values to construct a valid URI. The substitution MUST ensure | |||
( appWorkspace* | that the resulting value is also properly percent-encoded utf-8. | |||
& anyElement* ) | ||||
} | ||||
The following child elements are defined by this specification: | Here are some examples of template URIs and corresponding populated | |||
values: | ||||
o app:service elements MAY contain any number of app:workspace | http://example.org/blog/edit/{index} | |||
elements. | http://example.org/blog/edit/3-9 | |||
8.1.1.2 The 'app:workspace' Element | http://example.org/blog/edit/{index}/foo | |||
http://example.org/blog/edit/0-100/foo | ||||
The 'workspace' element element contains information elements about | http://example.org/blog/edit/{daterange} | |||
the collections of resources available for editing. | http://example.org/blog/edit/daterange=\ | |||
2003-12-13T18:30:02Z-2003-12-13T18:30:02Z | ||||
appWorkspace = | http://example.org/blog/edit?dr={daterange}/bar/ | |||
element app:workspace { | http://example.org/blog/edit?dr=\ | |||
attribute title { text }, | 2003-12-13T18:30:02Z,2003-12-13T18:30:02Z/bar/ | |||
( appCollection* | ||||
& anyElement* ) | ||||
} | ||||
The following attributes and child elements are defined by this | Note that the parameters MAY appear at any place in the URI template. | |||
specification: | ||||
o app:workspace elements MUST contain a 'title' attribute, which | 11.2 URI Template Parameters | |||
conveys a human-readable name for the workspace | ||||
o app:workspace elements MAY contain any number of app:collection | This specification defines two parameters for use in URI Templates: | |||
elements. | ||||
8.1.1.3 The 'app:collection' Element | o index: allows selection into a collection's resources based as | |||
though ordered by their 'atom:updated' property. | ||||
The 'app:collection' element describes collections and their member | o daterange: allows selection into a collection's resources based on | |||
resources. | their 'atom:updated' property | |||
[[anchor19: We have a collection element that's different than the | In both cases, the response to the selection request MUST be an Atom | |||
root element of the collection document. Messy. --R. Sayre]] | Feed where all the entries fall within the requested criteria. The | |||
request range is considered a closed set - if an entry matches one | ||||
end of the range exactly it MUST be included in the response. If no | ||||
members fall in the requested range, the server MUST respond with an | ||||
Atom Feed containing no entries. | ||||
appCollection = | A Collection Document MUST contain at least two app:uri-template | |||
element app:collection { | elements - one for the {index} parameter template and the other for | |||
attribute title { text }, | the {daterange} parameter template. The two parameters are not | |||
attribute contents { text }, | mutually exclusive and MAY appear together in a single Template URI. | |||
attribute href { text }, | ||||
anyElement* | ||||
} | ||||
The following attributes are defined by this specification: | 11.2.1 \{index\} URI template variable | |||
o app:collection elements MUST contain a 'title' attribute, whose | The value of the {index} criterion MUST be a pair of non-negative | |||
value conveys a human-readable name for the workspace | integer indices separated by a dash character. One or other index | |||
MAY omitted, in which case the range is understood as stretching to | ||||
zero, or infinity. | ||||
o app:collection elements MAY contain a 'contents' attribute | index-specifier = [index] "-" [index] | |||
(Section 8.1.1.3.1). If it is not present, it's value is | ||||
considered to be 'generic'. | ||||
o app:collection elements MUST contain an 'href' attribute, whose | For example, suppose the client is supplied this {index} URI | |||
value conveys the URI of the collection. | template: | |||
8.1.1.3.1 The 'contents' Attribute | http://example.org/blog/edit/{index} | |||
The 'contents' attribute conveys the nature of a collection's member | If the client wants the first 15 entries in the Collection it would | |||
resources. This specification defines two initial values for the | substitute the brace-delimited parameter {index}, with the value | |||
'contents' attribute: | 1-15, giving: | |||
o entry | http://example.org/blog/edit/1-15 | |||
o generic | 11.2.2 \{daterange\} URI template variable | |||
Extensibility for 'content' values is handled [[anchor20: Same as | A URI Template with the variable 'daterange' allows querying for Atom | |||
atom:link]]. | Entries in a Collection according to their 'atom:updated' property. | |||
8.1.1.3.1.1 entry | The value of the {daterange} criterion should be a pair of ISO | |||
formatted dates separated by a dash character; either index may be | ||||
optionally omitted, in which case the range is understood as | ||||
stretching to infinity on that end. | ||||
A value of 'entry' for the contents attribute indicates that the | daterange-specifier = [iso-date] "," [iso-date] | |||
Collection is an Entry Collection (Section 6). | ||||
8.1.1.3.1.2 generic | The [iso-date] terminal MUST conform to the "date-time" production in | |||
[RFC3339]. In addition, an uppercase "T" character MUST be used to | ||||
separate date and time, and an uppercase "Z" character MUST be | ||||
present in the absence of a numeric time zone offset. | ||||
A value of 'generic' for the contents attribute indicates that the | For example, suppose the client is supplied this {daterange} URI | |||
Collection is a Generic Collection (Section 7). | Template: | |||
8.2 Introspection Resource | http://example.org/blog/edit/{daterange} | |||
To retrieve an Introspection Document, the client sends a GET request | If the client wants the entries in the collection between January and | |||
to its URI. | February 2006 it would substitute the brace-delimited parameter | |||
{daterange} with the desired selection value, giving this URI: | ||||
GET /service-desc HTTP/1.1 | http://example.org/blog/edit/2006-01-01T00:00:00Z,\ | |||
Host: example.org | 2006-02-01T00:00:00Z | |||
User-Agent: Cosimo/1.0 | ||||
Accept: application/atomserv+xml | ||||
The server responds to a GET request by returning an Introspection | 11.2.3 Other URI Template parameters | |||
Document in the message body. | ||||
HTTP/1.1 200 OK | Other specifications MAY define new parameters for use in URI | |||
Date: Mon, 21 Mar 2005 19:20:19 GMT | templates and declared in the app:uri-template element. | |||
Server: CountBasic/2.0 | ||||
Last-Modified: Mon, 21 Mar 2005 19:17:26 GMT | ||||
ETag: "4c083-268-423f1dc6" | ||||
Content-Length: nnnn | ||||
Content-Type: application/atomserv+xml | ||||
<?xml version="1.0" encoding='utf-8'?> | 12. Atom Entry Extensions | |||
<service xmlns="http://purl.org/atom/app#"> | ||||
... | ||||
</service> | ||||
8.2.1 Discovery | This specification adds three new values to the Registry of Link | |||
Relations. | ||||
[[anchor24: Add in desc of an HTML link element that points to the | The value of 'collection' signifies that the IRI in the value of the | |||
Introspection Resource, or add it to the autodisco draft]] | href is the Collection that this Entry belongs to. Any entry MAY | |||
contain a link with a relation of 'collection'. | ||||
9. Securing the Atom Protocol | The value of 'edit' signifies that the IRI in the value of the href | |||
attribute identifies the resource that is used to edit the entry. | ||||
That is, it is the URI of the Entry as an Editable Resource. | ||||
The value of 'srcedit' signifies that the IRI in the value of the | ||||
href attribute identifies the resource that is used to edit the | ||||
resource pointed to by the 'src' attribute of the atom:content | ||||
element. That is, it is the IRI of the atom:content@src as an | ||||
Editable Resource. If a link element with a relation of "srcedit" is | ||||
not given, then it's value defaults to the "src" attribute of the | ||||
content element. List Resources for Generic Collections MUST return | ||||
entries that have 'srcedit' links or MUST have a atom:content@src | ||||
value. | ||||
If the "srcedit" link is present, and it's value is an empty string, | ||||
then there is no URI that can be treated in the way such a value | ||||
would be treated. | ||||
Clients SHOULD use the "srcedit" value to manipulate the resource | ||||
within the context of the APP itself. Clients SHOULD prefer the | ||||
"atom:content@src" value in any other context. For example, if the | ||||
resource is an image, a client may replace the image data using a PUT | ||||
on the "srcedit" value, and may even display a preview of the image | ||||
by fetching the "srcedit" URI. But when creating a public, read-only | ||||
reference to the same image resource, the client should use the | ||||
"atom:content@src" value. | ||||
13. Securing the Atom Protocol | ||||
All instances of publishing Atom entries SHOULD be protected by | All instances of publishing Atom entries SHOULD be protected by | |||
authentication to prevent posting or editing by unknown sources. | authentication to prevent posting or editing by unknown sources. | |||
Atom servers and clients MUST support one of the following | Atom servers and clients MUST support one of the following | |||
authentication mechanisms, and SHOULD support both. | authentication mechanisms, and SHOULD support both. | |||
o HTTP Digest Authentication [RFC2617] | o HTTP Digest Authentication [RFC2617] | |||
o [@@TBD@@ CGI Authentication ref] | o [@@TBD@@ CGI Authentication ref] | |||
Atom servers and clients MAY support encryption of the Atom session | Atom servers and clients MAY support encryption of the Atom session | |||
using TLS [RFC2246]. | using TLS [RFC2246]. | |||
There are cases where an authentication mechanism may not be | There are cases where an authentication mechanism may not be | |||
required, such as a publicly editable Wiki, or when using the PostURI | required, such as a publicly editable Wiki, or when using the PostURI | |||
to post comments to a site that does not require authentication to | to post comments to a site that does not require authentication to | |||
create comments. | create comments. | |||
9.1 [@@TBD@@ CGI Authentication] | 13.1 [@@TBD@@ CGI Authentication] | |||
This authentication method is included as part of the protocol to | This authentication method is included as part of the protocol to | |||
allow Atom servers and clients that cannot use HTTP Digest | allow Atom servers and clients that cannot use HTTP Digest | |||
Authentication but where the user can both insert its own HTTP | Authentication but where the user can both insert its own HTTP | |||
headers and create a CGI program to authenticate entries to the | headers and create a CGI program to authenticate entries to the | |||
server. This scenario is common in environments where the user | server. This scenario is common in environments where the user | |||
cannot control what services the server employs, but the user can | cannot control what services the server employs, but the user can | |||
write their own HTTP services. | write their own HTTP services. | |||
10. Security Considerations | 14. Security Considerations | |||
Because Atom is a publishing protocol, it is important that only | Because Atom is a publishing protocol, it is important that only | |||
authorized users can create and edit entries. | authorized users can create and edit entries. | |||
The security of Atom is based on HTTP Digest Authentication and/or | The security of Atom is based on HTTP Digest Authentication and/or | |||
[@@TBD@@ CGI Authentication]. Any weaknesses in either of these | [@@TBD@@ CGI Authentication]. Any weaknesses in either of these | |||
authentication schemes will obviously affect the security of the Atom | authentication schemes will affect the security of the Atom | |||
Publishing Protocol. | Publishing Protocol. | |||
Both HTTP Digest Authentication and [@@TBD@@ CGI Authentication] are | Both HTTP Digest Authentication and [@@TBD@@ CGI Authentication] are | |||
susceptible to dictionary-based attacks on the shared secret. If the | susceptible to dictionary-based attacks on the shared secret. If the | |||
shared secret is a password (instead of a random string with | shared secret is a password (instead of a random string with | |||
sufficient entropy), an attacker can determine the secret by | sufficient entropy), an attacker can determine the secret by | |||
exhaustively comparing the authenticating string with hashed results | exhaustively comparing the authenticating string with hashed results | |||
of the public string and dictionary entries. | of the public string and dictionary entries. | |||
See RFC 2617 for more detailed description of the security properties | See RFC 2617 for more detailed description of the security properties | |||
of HTTP Digest Authentication. | of HTTP Digest Authentication. | |||
@@TBD@@ Talk here about using HTTP basic and digest authentication. | @@TBD@@ Talk here about using HTTP basic and digest authentication. | |||
@@TBD@@ Talk here about denial of service attacks using large XML | @@TBD@@ Talk here about denial of service attacks using large XML | |||
files, or the billion laughs DTD attack. | files, or the billion laughs DTD attack. | |||
11. IANA Considerations | 15. IANA Considerations | |||
A Atom Collection Document, when serialized as XML 1.0, can be | A Atom Collection Document, when serialized as XML 1.0, can be | |||
identified with the following media type: | identified with the following media type: | |||
MIME media type name: application | MIME media type name: application | |||
MIME subtype name: atomcoll+xml | MIME subtype name: atomcoll+xml | |||
Mandatory parameters: None. | Mandatory parameters: None. | |||
Optional parameters: | Optional parameters: | |||
"charset": This parameter has identical semantics to the charset | "charset": This parameter has identical semantics to the charset | |||
parameter of the "application/xml" media type as specified in | parameter of the "application/xml" media type as specified in | |||
[RFC3023]. | [RFC3023]. | |||
Encoding considerations: Identical to those of "application/xml" as | Encoding considerations: Identical to those of "application/xml" as | |||
described in [RFC3023], section 3.2. | described in [RFC3023], section 3.2. | |||
Security considerations: As defined in this specification. | Security considerations: As defined in this specification. | |||
[[anchor28: update upon publication]] | [[anchor31: update upon publication]] | |||
In addition, as this media type uses the "+xml" convention, it | In addition, as this media type uses the "+xml" convention, it | |||
shares the same security considerations as described in [RFC3023], | shares the same security considerations as described in [RFC3023], | |||
section 10. | section 10. | |||
Interoperability considerations: There are no known interoperability | Interoperability considerations: There are no known interoperability | |||
issues. | issues. | |||
Published specification: This specification. [[anchor29: update upon | Published specification: This specification. [[anchor32: update upon | |||
publication]] | publication]] | |||
Applications that use this media type: No known applications | Applications that use this media type: No known applications | |||
currently use this media type. | currently use this media type. | |||
Additional information: | Additional information: | |||
Magic number(s): As specified for "application/xml" in [RFC3023], | Magic number(s): As specified for "application/xml" in [RFC3023], | |||
section 3.2. | section 3.2. | |||
skipping to change at page 28, line 35 | skipping to change at page 33, line 35 | |||
Optional parameters: | Optional parameters: | |||
"charset": This parameter has identical semantics to the charset | "charset": This parameter has identical semantics to the charset | |||
parameter of the "application/xml" media type as specified in | parameter of the "application/xml" media type as specified in | |||
[RFC3023]. | [RFC3023]. | |||
Encoding considerations: Identical to those of "application/xml" as | Encoding considerations: Identical to those of "application/xml" as | |||
described in [RFC3023], section 3.2. | described in [RFC3023], section 3.2. | |||
Security considerations: As defined in this specification. | Security considerations: As defined in this specification. | |||
[[anchor30: update upon publication]] | [[anchor33: update upon publication]] | |||
In addition, as this media type uses the "+xml" convention, it | In addition, as this media type uses the "+xml" convention, it | |||
shares the same security considerations as described in [RFC3023], | shares the same security considerations as described in [RFC3023], | |||
section 10. | section 10. | |||
Interoperability considerations: There are no known interoperability | Interoperability considerations: There are no known interoperability | |||
issues. | issues. | |||
Published specification: This specification. [[anchor31: update upon | Published specification: This specification. [[anchor34: update upon | |||
publication]] | publication]] | |||
Applications that use this media type: No known applications | Applications that use this media type: No known applications | |||
currently use this media type. | currently use this media type. | |||
Additional information: | Additional information: | |||
Magic number(s): As specified for "application/xml" in [RFC3023], | Magic number(s): As specified for "application/xml" in [RFC3023], | |||
section 3.2. | section 3.2. | |||
skipping to change at page 29, line 22 | skipping to change at page 34, line 22 | |||
Base URI: As specified in [RFC3023], section 6. | Base URI: As specified in [RFC3023], section 6. | |||
Macintosh File Type code: TEXT | Macintosh File Type code: TEXT | |||
Person and email address to contact for further information: Joe | Person and email address to contact for further information: Joe | |||
Gregorio <joe@bitworking.org> | Gregorio <joe@bitworking.org> | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Author/Change controller: This specification's author(s). [[anchor32: | Author/Change controller: This specification's author(s). [[anchor35: | |||
update upon publication]] | update upon publication]] | |||
12. References | 16. References | |||
12.1 Normative References | 16.1 Normative References | |||
[AtomFormat] | [AtomFormat] | |||
Nottingham, M. and R. Sayre, "The Atom Syndication | Nottingham, M. and R. Sayre, "The Atom Syndication | |||
Format", work-in-progress, April 2005. | Format", 1.0, July 2005. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", | [RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", | |||
RFC 2246, January 1999. | RFC 2246, January 1999. | |||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
skipping to change at page 30, line 41 | skipping to change at page 35, line 41 | |||
[RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | |||
Timestamps", RFC 3339, July 2002. | Timestamps", RFC 3339, July 2002. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, January 2005. | RFC 3986, January 2005. | |||
[RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | [RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource | |||
Identifiers (IRIs)", RFC 3987, January 2005. | Identifiers (IRIs)", RFC 3987, January 2005. | |||
[W3C.REC-soap12-part1-20030624] | ||||
Nielsen, H., Mendelsohn, N., Gudgin, M., Hadley, M., and | ||||
J. Moreau, "SOAP Version 1.2 Part 1: Messaging Framework", | ||||
W3C REC REC-soap12-part1-20030624, June 2003. | ||||
[W3C.REC-soap12-part2-20030624] | ||||
Nielsen, H., Hadley, M., Moreau, J., Mendelsohn, N., and | ||||
M. Gudgin, "SOAP Version 1.2 Part 2: Adjuncts", W3C | ||||
REC REC-soap12-part2-20030624, June 2003. | ||||
[W3C.REC-xml-20040204] | [W3C.REC-xml-20040204] | |||
Yergeau, F., Paoli, J., Sperberg-McQueen, C., Bray, T., | Yergeau, F., Paoli, J., Sperberg-McQueen, C., Bray, T., | |||
and E. Maler, "Extensible Markup Language (XML) 1.0 (Third | and E. Maler, "Extensible Markup Language (XML) 1.0 (Third | |||
Edition)", W3C REC REC-xml-20040204, February 2004. | Edition)", W3C REC REC-xml-20040204, February 2004. | |||
12.2 Informative References | [W3C.REC-xml-names-19990114] | |||
Hollander, D., Bray, T., and A. Layman, "Namespaces in | ||||
XML", W3C REC REC-xml-names-19990114, January 1999. | ||||
16.2 Informative References | ||||
[RNC] Clark, J., "RELAX NG Compact Syntax", December 2001. | ||||
[W3C.REC-webarch-20041215] | [W3C.REC-webarch-20041215] | |||
Walsh, N. and I. Jacobs, "Architecture of the World Wide | Walsh, N. and I. Jacobs, "Architecture of the World Wide | |||
Web, Volume One", W3C REC REC-webarch-20041215, | Web, Volume One", W3C REC REC-webarch-20041215, | |||
December 2004. | December 2004. | |||
URIs | URIs | |||
[1] <http://www.imc.org/atom-protocol/index.html> | [1] <http://www.imc.org/atom-protocol/index.html> | |||
skipping to change at page 32, line 21 | skipping to change at page 37, line 21 | |||
Joe Gregorio (editor) | Joe Gregorio (editor) | |||
BitWorking, Inc | BitWorking, Inc | |||
1002 Heathwood Dairy Rd. | 1002 Heathwood Dairy Rd. | |||
Apex, NC 27502 | Apex, NC 27502 | |||
US | US | |||
Phone: +1 919 272 3764 | Phone: +1 919 272 3764 | |||
Email: joe@bitworking.com | Email: joe@bitworking.com | |||
URI: http://bitworking.com/ | URI: http://bitworking.com/ | |||
Robert Sayre (editor) | Bill de hOra (editor) | |||
Propylon Ltd. | ||||
45 Blackbourne Square, Rathfarnham Gate | ||||
Dublin, Dublin D14 | ||||
IE | ||||
Email: rfsayre@boswijck.com | Phone: +353-1-4927444 | |||
URI: http://boswijck.com | Email: bill.dehora@propylon.com | |||
URI: http://www.propylon.com/ | ||||
Appendix A. Revision History | Appendix A. Contributors | |||
The content and concepts within are a product of the Atom community | ||||
and the Atompub Working Group. Robert Sayre was an editor for drafts | ||||
00-04. | ||||
Appendix B. Revision History | ||||
draft-ietf-atompub-protocol-05 - Added: Contributors section. Added: | ||||
de hOra to editors. Fixed: typos. Added diagrams and description to | ||||
model section. Incorporates PaceAppDocuments, PaceAppDocuments2, | ||||
PaceSimplifyCollections2 (large-sized chunks of it anyhow: the | ||||
notions of Entry and Generic resources, the section 4 language on the | ||||
Protocol Model, 4.1 through 4.5.2, the notion of a Collection | ||||
document, as in Section 5 through 5.3, Section 7 "Collection | ||||
resources", Selection resources (modified from pace which talked | ||||
about search); results in major mods to Collection Documents, Section | ||||
9.2 "Title: Header" and brokeout para to section 9.1 Editing Generic | ||||
Resources). Added XML namespace and language section. Some cleanup | ||||
of front matter. Added Language Sensitivity to some attributes. | ||||
Removed resource descriptions from terminology. Some juggling of | ||||
sections. See: | ||||
http://www.imc.org/atom-protocol/mail-archive/msg01812.html. | ||||
draft-ietf-atompub-protocol-04 - Add ladder diagrams, reorganize, add | draft-ietf-atompub-protocol-04 - Add ladder diagrams, reorganize, add | |||
SOAP interactions | SOAP interactions | |||
draft-ietf-atompub-protocol-03 - Incorporates PaceSliceAndDice3 and | draft-ietf-atompub-protocol-03 - Incorporates PaceSliceAndDice3 and | |||
PaceIntrospection. | PaceIntrospection. | |||
draft-ietf-atompub-protocol-02 - Incorporates Pace409Response, | draft-ietf-atompub-protocol-02 - Incorporates Pace409Response, | |||
PacePostLocationMust, and PaceSimpleResourcePosting. | PacePostLocationMust, and PaceSimpleResourcePosting. | |||
End of changes. | ||||
This html diff was produced by rfcdiff 1.12, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |