| draft-gregorio-09.txt | draft-ietf-atompub-protocol-00.txt | |||
|---|---|---|---|---|
| yes J. Gregorio | Network Working Group J. Gregorio, Ed. | |||
| BitWorking, Inc | Internet-Draft BitWorking, Inc | |||
| December 10, 2003 | Expires: December 30, 2004 R. Sayre, Ed. | |||
| Boswijck Memex Consulting | ||||
| July 1, 2004 | ||||
| The AtomAPI | The Atom Publishing Protocol | |||
| draft-ietf-atompub-protocol-00.txt | ||||
| Abstract | Status of this Memo | |||
| This memo presents a technique for using XML (Extensible Markup | By submitting this Internet-Draft, I certify that any applicable | |||
| Language) and HTTP (HyperText Transport Protocol) to edit content. | patent or other IPR claims of which I am aware have been disclosed, | |||
| and any of which I become aware will be disclosed, in accordance with | ||||
| RFC 3668. | ||||
| Table of Contents | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | ||||
| other groups may also distribute working documents as | ||||
| Internet-Drafts. | ||||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 3 | Internet-Drafts are draft documents valid for a maximum of six months | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | and may be updated, replaced, or obsoleted by other documents at any | |||
| 3. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | time. It is inappropriate to use Internet-Drafts as reference | |||
| 4. Introduction . . . . . . . . . . . . . . . . . . . . . . . 6 | material or to cite them other than as "work in progress." | |||
| 4.1 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| 4.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| 4.3 The AtomAPI Model . . . . . . . . . . . . . . . . . . . . 6 | ||||
| 5. Functional Specification . . . . . . . . . . . . . . . . . 8 | ||||
| 5.1 PostURI . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5.1.1 Locating . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5.1.2 Request . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5.1.3 Response . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5.2 EditURI . . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 5.2.1 Locating . . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 5.2.2 Request . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 5.3 FeedURI . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 5.3.1 Locating . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 5.3.2 Request . . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 5.3.3 Response . . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 5.4 Link Tag . . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 5.4.1 rel . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 5.4.2 href . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 5.4.3 title . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 5.4.4 type . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 5.5 Atom Request and Response Body Constraints . . . . . . . . 12 | ||||
| 5.5.1 id . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 5.5.2 link . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 5.5.3 title . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 5.5.4 summary . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 5.5.5 content . . . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
| 5.5.6 issued . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
| 5.5.7 modified . . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| 5.5.8 created . . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| 5.5.9 author . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| The AtomAPI December 2003 | ||||
| 5.5.10 contributor . . . . . . . . . . . . . . . . . . . . . . . 16 | The list of current Internet-Drafts can be accessed at | |||
| 5.5.11 generator . . . . . . . . . . . . . . . . . . . . . . . . 16 | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . 17 | ||||
| 7. Appendices . . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 7.1 SOAP Enabling . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 7.1.1 Servers . . . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 7.1.2 Clients . . . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 7.2 Example for a weblog . . . . . . . . . . . . . . . . . . . 18 | ||||
| 7.3 Example for a wiki . . . . . . . . . . . . . . . . . . . . 19 | ||||
| 8. Revision History . . . . . . . . . . . . . . . . . . . . . 20 | ||||
| 9. Copyright . . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
| References . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . 22 | ||||
| The AtomAPI December 2003 | ||||
| 1. Introduction | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | ||||
| The AtomAPI is an application level protocol for publishing and | This Internet-Draft will expire on December 30, 2004. | |||
| editing web resources. The protocol at its core is the HTTP transport | ||||
| of Atom formatted representations. | ||||
| To provide feedback on this draft RFC please visit the Atom Wiki [1] | Copyright Notice | |||
| or join the atom-syntax mailing list [2]. | ||||
| The AtomAPI December 2003 | Copyright (C) The Internet Society (2004). All Rights Reserved. | |||
| 2. Terminology | Abstract | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | This memo presents a protocol for using XML (Extensible Markup | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",the and "OPTIONAL" in | Language) and HTTP (HyperText Transport Protocol) to edit content. | |||
| this document are to be interpreted as described in RFC2119. | ||||
| The AtomAPI December 2003 | The Atom Publishing Protocol is an application-level protocol for | |||
| publishing and editing Web resources belonging to periodically | ||||
| updated websites. The protocol at its core is the HTTP transport of | ||||
| Atom-formatted representations. The Atom format is documented in the | ||||
| Atom Syndication Format 0.3 PRE-DRAFT | ||||
| (http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html). | ||||
| 3. Scope | To provide feedback on this Internet-Draft, join the atom-syntax | |||
| mailing list (http://www.imc.org/atom-syntax/index.html). | ||||
| This document covers the editing of content of a periodically | Table of Contents | |||
| updating website using the HTTP and XML. All of the XML payloads are | ||||
| in Atom format, which is documented in the draft Atom Syndication | ||||
| Format RFC [3]. | ||||
| The AtomAPI December 2003 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.1 Notational Conventions . . . . . . . . . . . . . . . . . . 4 | ||||
| 1.2 Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | ||||
| 2. The Atom Publishing Protocol Model . . . . . . . . . . . . . 4 | ||||
| 3. Functional Specification . . . . . . . . . . . . . . . . . . 5 | ||||
| 3.1 PostURI . . . . . . . . . . . . . . . . . . . . . . . . . 5 | ||||
| 3.1.1 Locating the PostURI . . . . . . . . . . . . . . . . . 5 | ||||
| 3.1.2 Request . . . . . . . . . . . . . . . . . . . . . . . 5 | ||||
| 3.1.3 Response . . . . . . . . . . . . . . . . . . . . . . . 5 | ||||
| 3.2 EditURI . . . . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| 3.2.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| 3.2.2 Request . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| 3.3 FeedURI . . . . . . . . . . . . . . . . . . . . . . . . . 7 | ||||
| 3.3.1 Locating . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 3.3.2 Request . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 3.3.3 Response . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 3.4 Link Tag . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 3.4.1 rel . . . . . . . . . . . . . . . . . . . . . . . . . 8 | ||||
| 3.4.2 href . . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 3.4.3 title . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 3.4.4 type . . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 3.5 Atom Request and Response Body Constraints . . . . . . . . 9 | ||||
| 3.5.1 id . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 3.5.2 link . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 3.5.3 title . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 3.5.4 summary . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 3.5.5 content . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 3.5.6 issued . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 3.5.7 modified . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 3.5.8 created . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 3.5.9 author . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 3.5.10 contributor . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 3.5.11 generator . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . 12 | ||||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 6. Appendix A - SOAP Enabling . . . . . . . . . . . . . . . . . 13 | ||||
| 6.1 Servers . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 6.2 Clients . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 7. Appendix B - Examples . . . . . . . . . . . . . . . . . . . 13 | ||||
| 7.1 Example for a weblog . . . . . . . . . . . . . . . . . . . 13 | ||||
| 7.2 Example for a wiki . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 8. Revision History . . . . . . . . . . . . . . . . . . . . . . 14 | ||||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 15 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| Intellectual Property and Copyright Statements . . . . . . . 16 | ||||
| 4. Introduction | 1. Introduction | |||
| 4.1 Purpose | The Atom Publishing Protocol is an application-level protocol for | |||
| publishing and editing Web resources. | ||||
| The AtomAPI is an application level protocol for publishing and | 1.1 Notational Conventions | |||
| editing web resources. | ||||
| 4.2 Terminology | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", the and "OPTIONAL" in | ||||
| this document are to be interpreted as described in RFC2119. | ||||
| Atom Entry A fragment of a full Atom feed. In this case the fragment | 1.2 Terminology | |||
| is a single 'entry' element and all it's child elements. | ||||
| PostURI A URI that is used to create new resources. POSTing an Atom | Atom Entry: An Atom Entry is a fragment of a full Atom feed. In this | |||
| case, the fragment is a single 'entry' element and all its child | ||||
| elements. Each Atom Entry describes a single Web resource, | ||||
| providing metadata and optionally a textual representation of that | ||||
| resource. | ||||
| PostURI: A URI that is used to create new resources. POSTing an Atom | ||||
| Entry to this URI will create a new resource. | Entry to this URI will create a new resource. | |||
| EditURI: A URI that is used to edit a resource. The editing is done | ||||
| EditURI A URI that is used to edit a resource. The editing is done | ||||
| using the HTTP verbs GET, PUT and DELETE. The representation of | using the HTTP verbs GET, PUT and DELETE. The representation of | |||
| the resource is always that of an Atom Entry. | the resource is always that of an Atom Entry. | |||
| FeedURI: The URI which identifies an Atom Feed. | ||||
| FeedURI A URI that has a representation as a full Atom feed. | 2. The Atom Publishing Protocol Model | |||
| 4.3 The AtomAPI Model | ||||
| AtomAPI is an application level protocol for publishing and editing | ||||
| web resources. Using the common HTTP verbs provides a pattern for | ||||
| working with all such web resources: | ||||
| The Atom Publishing Protocol is an application-level protocol for | ||||
| publishing and editing Web resources. Using the common HTTP verbs | ||||
| provides a pattern for working with all such Web resources: | ||||
| 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 PUT is used to update a known resource. | o PUT is used to update 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 DELETE is used to remove a resource. | o DELETE is used to remove a resource. | |||
| There are different kinds of resources managed by the AtomAPI, each | There are three major classes of URIs in this specification: PostURI, | |||
| of these have URIs and those URIs support a subset of the above | FeedURI and EditURI. This specification defines the expected actions | |||
| methods. There are three major classes of URIs in this specification: | for each of the methods listed. A URI MAY support methods not listed | |||
| PostURI, FeedURI and EditURI. This specification defines the expected | here. For example, an EditURI could support a POST or OPTIONS | |||
| actions for each of the methods listed. Note that this does not | method. However, what those methods do is beyond the scope of this | |||
| restrict a URI to only supporting just those methods listed, for | ||||
| example an EditURI could support a POST method, or the OPTIONS | ||||
| method, what those methods do is beyond the scope of this | ||||
| specification. | specification. | |||
| o EditURI: PUT, GET, DELETE | o EditURI: PUT, GET, DELETE | |||
| The AtomAPI December 2003 | ||||
| o PostURI: POST | o PostURI: POST | |||
| o FeedURI: GET | o FeedURI: GET | |||
| This RFC does not specify the form of the URIs that are used. The URI | This document does not specify the form of the URIs that are used. | |||
| space of each server is controlled, as defined by HTTP, by the server | The URI space of each server is controlled, as defined by HTTP, by | |||
| alone. What this RFC does specify are the formats of the files that | the server alone. What this document does specify are the formats of | |||
| are exchanged and the actions that can be performed on the URIs | the files that are exchanged and the actions that can be performed on | |||
| embedded in those files. | the URIs embedded in those files. | |||
| The AtomAPI December 2003 | ||||
| 5. Functional Specification | 3. Functional Specification | |||
| 5.1 PostURI | 3.1 PostURI | |||
| The PostURI is used to create entries. These can be either full | The PostURI is used to create entries. These can be either full | |||
| entries, such as a weblog post, or they can be comments, or even a | entries, such as a weblog post, or they can be comments, or even a | |||
| wiki page. The client POSTs a filled in Atom Entry to this URI. If | wiki page. The client POSTs a filled-in Atom Entry to this URI. If | |||
| the request is succesful then multiple new URIs may be created that | the request is successful, one or more Web resources MAY be created. | |||
| contain representations of varying types. For example, POSTing an | For example, POSTing an Atom entry to a PostURI may create two new | |||
| Atom entry to a PostURI may create a new weblog entry with both an | Web resources, an HTML representation and an Atom representation. | |||
| HTML and Atom representation now available. The URI of the newly | ||||
| created Atom representation may in fact be an EditURI through which | ||||
| the resource can be edited. | ||||
| 5.1.1 Locating | 3.1.1 Locating the PostURI | |||
| For creating a new site Entry, the link tag is used. Note that a link | The PostURI can be discovered in a link element with an @rel of | |||
| tag is used in both HTML and in the Atom format. A link tag of the | 'service.post'. The link element containing a PostURI used to create | |||
| following format points to the PostURI for a site. In HTML the link | a new entry MAY be discovered in three different places. The first | |||
| tags are always found in the head element, while in Atom they may | place it may be found is in a <link> element in the 'head' element of | |||
| appear as children of the Feed and entry elements. | an HTML document. | |||
| The second place a PostURI may be found an atom:link element that is | ||||
| a child of the atom:feed element. The third place a PostURI may be | ||||
| found is in the atom:link element of an atom:entry. | ||||
| @@ TBD @@ - Discuss subordinate resources and what a PostURI means | ||||
| based on where the URI was found. | ||||
| <link rel="service.post" | <link rel="service.post" | |||
| type="application/x.atom+xml" | type="application/atom+xml" | |||
| href="URI for Posting goes here" | href="URI for Posting goes here" | |||
| title="The name of the site."> | title="The name of the site."> | |||
| Note: Multiple link tags may appear together and can be distinguished | 3.1.2 Request | |||
| by having different 'rel', 'type' and 'title' attributes. | ||||
| 5.1.2 Request | ||||
| The request contains a filled in Atom entry, subject to the | The request contains a filled-in Atom entry, subject to the | |||
| constraints in section @@ TBD @@. | constraints in section Section 3.5. | |||
| 5.1.3 Response | 3.1.3 Response | |||
| The expected status codes from a POST are 201, 303, 400, and 500. | The possible status codes from a POST are 201, 303, 400, 401, 404, | |||
| 401, 404, and 410 are also possible. | 410 and 500. | |||
| 5.1.3.1 201 | 3.1.3.1 Response code 201 | |||
| Response includes a Location: header with the URI of the created | Response includes a Location: header with the URI of the created | |||
| resource, i.e. the URI used to edit the entry, as opposed to the URI | resource, i.e. the URI used to edit the entry, as opposed to the URI | |||
| used to display the content. The body of the response will contain | used to display the content. The body of the response will contain | |||
| the entry "filled in" with time stamps and any other data the server | the entry "filled-in" with time stamps and any other data the server | |||
| choses to reveal. This must contain enough information to enable a | chooses to reveal. This must contain enough information to enable a | |||
| client to issue a subsequent PUT to this location. Note that the | client to issue a subsequent PUT to this location. Note that the | |||
| The AtomAPI December 2003 | ||||
| server may chose to omit the content in the response, particularly if | server may chose to omit the content in the response, particularly if | |||
| it is large. | it is large. | |||
| 5.1.3.2 303 | 3.1.3.2 Response code 303 | |||
| The body of this response does not contain the filled in Entry, but | The body of this response does not contain the filled-in Entry, but | |||
| the filled in Entry can be found under a different URI and SHOULD be | the filled-in Entry can be found under a different URI and can be | |||
| retrieved using a GET method on that resource. The different URI | retrieved using a GET method on that resource. The URI SHOULD be | |||
| SHOULD be given by the Location field in the response. | given by the Location field in the response. | |||
| 5.1.3.3 400 | 3.1.3.3 Response code 400 | |||
| Indicates that the server believes that that data sent constitutes an | Indicates that the server believes that that data sent constitutes an | |||
| invalid request. A short description of the error will appear on the | invalid request. A short description of the error will appear on the | |||
| status line itself. A longer description will appear in the body. | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1> | |||
| itself. A longer description will appear in the body. | ||||
| 5.1.3.4 500 | 3.1.3.4 Response code 500 | |||
| Indicates that the server detected an internal error on the server | Indicates that the server detected an internal error on the server | |||
| processing this request (such as an unhandled exception). A short | processing this request (such as an unhandled exception). A short | |||
| description of the error will appear on the status line itself. A | description of the error will appear on the | |||
| longer description will appear in the body. | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1> | |||
| itself. A longer description will appear in the body. | ||||
| 5.2 EditURI | 3.2 EditURI | |||
| An EditURI is used to edit a single entry. Each entry that is | An EditURI is used to edit a single entry. Each entry that is | |||
| editable MUST have a unique URI. This URI supports both GET and PUT | editable MUST have a unique URI. This URI supports both GET and PUT | |||
| and they are used in tandem for an editing cycle. The client GET's | and they are used in tandem for an editing cycle. The client GETs | |||
| the represenation which is formatted as an Atom entry. The client may | the representation which is formatted as an Atom entry. The client | |||
| then update the entry and then PUT it back to the same URI. The PUT | may then update the entry and then PUT it back to the same URI. The | |||
| will cause all the related resources to be updated, for example, the | PUT will cause all the related resources to be updated, for example, | |||
| HTML representaion. | the HTML representation. | |||
| Note that the value of the content element in the Atom entry does not | Note that the value of the content element in the Atom entry does not | |||
| have to exactly match the content element for the same entry when it | have to exactly match the content element for the same entry when it | |||
| is represented in an Atom feed. For example, a server may allow the | is represented in an Atom feed. For example, a server may allow the | |||
| client to post entries whose content is formatted as WikiML, yet the | client to post entries whose content is formatted as WikiML, yet the | |||
| server may clean up such markup and transform it into well-formed | server may clean up such markup and transform it into well-formed | |||
| XHTML before placing it in the publicly avialable Atom feed. Another | XHTML before placing it in the publicly available Atom feed. Another | |||
| scenario is summaries, the EditURI is for editing the full content of | scenario is summaries--the EditURI is for editing the full content of | |||
| an entry, but the server may only present excerpts when it produces | an entry, but the server may only present excerpts when it produces | |||
| an Atom feed. | an Atom feed. | |||
| A client will send a DELETE to the EditURI to delete an entry. | A client will send a DELETE to the EditURI to delete an entry. | |||
| 5.2.1 Locating | 3.2.1 Locating | |||
| For editing a site Entry, the link tag is used. Note that a link tag | For editing a site Entry, the link tag is used. Note that a link tag | |||
| The AtomAPI December 2003 | ||||
| is used in both HTML and in the Atom format. A link tag of the | is used in both HTML and in the Atom format. A link tag of the | |||
| following format points to the EditURI for a site. In HTML the link | following format points to the EditURI for a site. In HTML, the link | |||
| tags for editing are always found in the head element, while in Atom | tags for editing are always found in the head element, while in Atom | |||
| they may appear as children of the entry elements. | they may appear as children of the entry elements. | |||
| <link rel="service.edit" | <link rel="service.edit" | |||
| type="application/x.atom+xml" | type="application/atom+xml" | |||
| href="URI for Editing goes here" | href="URI for Editing goes here" | |||
| title="Readable desc of the entry."> | title="Readable desc of the entry."> | |||
| Note: The critical characteristic of this link tag is the @rel of | Note: The critical characteristic of this link tag is the @rel of | |||
| 'service.edit' and the @type of 'application/x.atom+xml'. | 'service.edit' and the @type of 'application/atom+xml'. | |||
| 5.2.2 Request | 3.2.2 Request | |||
| A PUT request, and a GET response both contain a filled in Atom | A PUT request, and a GET response both contain a filled-in Atom | |||
| entry, subject to the constraints in section @@ TBD @@. | entry, subject to the constraints in section Section 3.5. | |||
| 5.3 FeedURI | 3.3 FeedURI | |||
| The FeedURI is used to retrieve a represenation in Atom format. Note | The FeedURI is used to retrieve a representation in Atom format. | |||
| that this feed is different from a typical Atom feed in that it | Note that this feed is different from a typical Atom feed in that it | |||
| contains "link" elements for navigating and manipulating the content | contains "link" elements for navigating and manipulating the content | |||
| of the site. For example there should be a "link" element with | of the site. For example there should be a "link" element with | |||
| rel="next" whose URI points to the next block of entries on the site. | rel="next" whose URI points to the next block of entries on the site. | |||
| Similarly the feed element can contain a "link" element with | Similarly, the feed element can contain a "link" element with | |||
| rel="service.post", the URI of which is a PostURI. Individual entries | rel="service.post", the URI of which is a PostURI. Individual | |||
| should contain "link" elements with rel="service.edit" whose URIs are | entries should contain "link" elements with rel="service.edit" whose | |||
| EditURIs. | URIs are EditURIs. | |||
| @@ Editor's Note: @@ Note that the "service.feed" takes the place of | @@ Editor's Note: @@ Note that the "service.feed" takes the place of | |||
| the Introspection File and the Search facet in previous versions of | the Introspection File and the Search facet in previous versions of | |||
| the specification. That is, facet discovery, which was previously | the specification. That is, facet discovery, which was previously | |||
| done by inspecting the Introspection file is now done by looking for | done by inspecting the Introspection file is now done by looking for | |||
| "link" tags with an attribute "rel" set to "service.[something]" in | "link" tags with an attribute "rel" set to "service.[something]" in | |||
| the "service.feed" file. At the same time the same representation | the "service.feed" file. At the same time the same representation | |||
| replaces the search facet by having "link" tags that point to other | replaces the search facet by having "link" tags that point to other | |||
| feeds using well knows 'rel' attribute values such as 'next' and | feeds using well knows 'rel' attribute values such as 'next' and | |||
| 'prev', or the search can branch in multiple directions by specifying | 'prev', or the search can branch in multiple directions by specifying | |||
| multiple link tags with rel="service.feed" and having differing title | multiple link tags with rel="service.feed" and having differing title | |||
| attributes that announce the kind of search results in that feed. | attributes that announce the kind of search results in that feed. | |||
| 5.3.1 Locating | 3.3.1 Locating | |||
| A link tag of the following format points to the FeedURI. | A link tag of the following format points to the FeedURI. | |||
| <link rel="service.feed" | <link rel="service.feed" | |||
| type="application/x.atom+xml" | type="application/atom+xml" | |||
| The AtomAPI December 2003 | ||||
| href="URI goes here" | href="URI goes here" | |||
| title="The name of the site."> | title="The name of the site."> | |||
| 5.3.2 Request | 3.3.2 Request | |||
| The request is a simple GET. No other verbs are currently specified | The request is a simple GET. No other verbs are currently specified | |||
| for this URI. | for this URI. | |||
| 5.3.3 Response | 3.3.3 Response | |||
| The expected status codes from a GET are 200, 301, 307, and 500. 401, | The expected status codes from a GET are 200, 301, 307, and 500. | |||
| 404, and 410 are also possible. | 401, 404, and 410 are also possible. | |||
| 5.3.3.1 301 | 3.3.3.1 Response code 301 | |||
| The Feed has moved permanently, the new URI is given in the the | The Feed has moved permanently, the new URI is given in the Location | |||
| Location header. | header. | |||
| 5.3.3.2 307 | 3.3.3.2 Response code 307 | |||
| The Feed has moved temporarily, the new URI is given in the the | The Feed has moved temporarily, the new URI is given in the Location | |||
| Location header. | header. | |||
| 5.4 Link Tag | 3.4 Link Tag | |||
| The link tag is used in both HTML and Atom formats. There are slight | The link tag is used in both HTML and Atom formats. There are slight | |||
| differences between the two usages. Here are the commonalities, | differences between the two usages. Here are the commonalities, | |||
| differences, and a list of well-known values for the rel attribute. | differences, and a list of well-known values for the rel attribute. | |||
| The link tag in HTML documents appears in the 'head' of the document. | <http://www.w3.org/TR/html4/struct/links.html#edef-LINK> appears in | |||
| The 'head' section only allows a linear list of 'link' tags. The Atom | the 'head' of the document. The 'head' section only allows a linear | |||
| format allows 'link' tags as children of both the 'feed' element and | list of 'link' tags. The Atom format allows 'link' tags as children | |||
| of the 'entry' element. Note that this gives the information present | of both the 'feed' element and of the 'entry' element. Note that | |||
| in the link tag more context. For example ... @@ TBD @@ | this gives the information present in the link tag more context. For | |||
| example ... @@ TBD @@ | ||||
| 5.4.1 rel | 3.4.1 rel | |||
| This attribute describes the relationship from the current document, | This attribute describes the relationship from the current document, | |||
| be it HTML or Atom, to the anchor specified by the href attribute. | be it HTML or Atom, to the anchor specified by the href attribute. | |||
| The value of this attribute is a space-separated list of link types. | The value of this attribute is a space-separated list of link types. | |||
| Note that these values are case insensitive. With type="application/ | Note that these values are case insensitive. When used in concert | |||
| x.atom+xml" we have the following interpretations of the relations. | with type="application/atom+xml", the relations may be interpreted as | |||
| follows. | ||||
| alternate The URI in the href attribute points to an alternate | alternate: The URI in the href attribute points to an alternate | |||
| representation of the containing resource. | representation of the containing resource. | |||
| start: The Atom feed at the URI supplied in the href attribute | ||||
| The AtomAPI December 2003 | ||||
| start The Atom feed at the URI supplied in the href attribute | ||||
| contains the first feed in a linear sequence of entries. | contains the first feed in a linear sequence of entries. | |||
| next: The Atom feed at the URI supplied in the href attribute | ||||
| next The Atom feed at the URI supplied in the href attribute contains | contains the next N entries in a linear sequence of entries. | |||
| the next N entries in a linear sequence of entries. | prev: The Atom feed at the URI supplied in the href attribute | |||
| contains the previous N entries in a linear sequence of entries. | ||||
| prev The Atom feed at the URI supplied in the href attribute contains | service.edit: The URI given in the href attribute is used to edit a | |||
| the previous N entries in a linear sequence of entries. | ||||
| service.edit The URI given in the href attribute is used to edit a | ||||
| representation of the referred resource. | representation of the referred resource. | |||
| service.post: The URI in the href attribute is used to create new | ||||
| service.post The URI in the href attribute is used to create new | ||||
| resources. | resources. | |||
| service.feed: The URI given in the href attribute is a starting point | ||||
| service.feed The URI given in the href attribute is a starting point | ||||
| for navigating content and services. | for navigating content and services. | |||
| 5.4.2 href | 3.4.2 href | |||
| URI of the resource being described by this link element. | URI of the resource being described by this link element. | |||
| 5.4.3 title | 3.4.3 title | |||
| Offers advisory information about the link. Rendered to the user to | Offers advisory information about the link. Rendered to the user to | |||
| help them choose among a set of links with the same rel and type | help them choose among a set of links with the same rel and type | |||
| attributes. | attributes. | |||
| 5.4.4 type | 3.4.4 type | |||
| The content type of the resource avaialable at the URI given in the | The content type of the resource available at the URI given in the | |||
| href attribute of the link element. Most of the link types in this | href attribute of the link element. Most of the link types in this | |||
| specification are on type 'application/x.atom+xml'. | specification are on type 'application/atom+xml'. | |||
| 5.5 Atom Request and Response Body Constraints | 3.5 Atom Request and Response Body Constraints | |||
| The Atom format is used as the representation of all the resources in | The Atom format is used as the representation of all the resources in | |||
| this specification. As it is used in differing contexts, there are | this specification. As it is used in differing contexts, there are | |||
| different constraints of which elements may be present, and how their | different constraints of which elements may be present, and how their | |||
| values should be interpreted. | values should be interpreted. | |||
| 5.5.1 id | 3.5.1 id | |||
| PostURI MUST NOT be present. | PostURI MUST NOT be present. | |||
| The AtomAPI December 2003 | ||||
| FeedURI MUST be present. | FeedURI MUST be present. | |||
| EditURI | EditURI | |||
| GET MUST be present. | GET MUST be present. | |||
| PUT MUST be present. | PUT MUST be present. | |||
| 5.5.2 link | 3.5.2 link | |||
| PostURI MAY be present. Servers may use the information to determine | PostURI MAY be present. Servers MAY use the information to determine | |||
| the URI of the created resource. Relative URLs are to be | the URI of the created resource. Relative URLs are to be | |||
| interpreted relative to xml:base. | interpreted relative to xml:base. | |||
| FeedURI MUST be present. | FeedURI MUST be present. | |||
| EditURI | EditURI | |||
| GET MUST be present. | GET MUST be present. | |||
| PUT MUST be present. | PUT MUST be present. | |||
| 5.5.3 title | 3.5.3 title | |||
| PostURI MUST be present. The element may be empty, to explicitly | PostURI MUST be present. The element may be empty, to explicitly | |||
| indicate "no title". Servers SHOULD NOT try to generate a title if | indicate "no title". Servers SHOULD NOT try to generate a title | |||
| one is not provided. The type attribute MAY be present, and if not | if one is not provided. The type attribute MAY be present, and if | |||
| it defaults to "text/plain". If present, it MUST represent a mime | not it defaults to "text/plain". If present, it MUST represent a | |||
| type that the server supports The mode attribute MAY be present, | MIME type that the server supports. The mode attribute MAY be | |||
| if not it defaults to "xml". If present, it must be "xml", | present. If not present, it defaults to "xml". If present, it | |||
| "base64", or "escaped". | MUST be "xml", "base64", or "escaped". | |||
| FeedURI MUST be present. | FeedURI MUST be present. | |||
| EditURI | EditURI | |||
| GET MUST be present. | GET MUST be present. | |||
| PUT MUST be present. The element may be empty, to explicitly | PUT MUST be present. The element may be empty, to explicitly | |||
| indicate "no title". Servers SHOULD NOT try to generate a title | indicate "no title". Servers SHOULD NOT try to generate a | |||
| if one is not provided. | title if one is not provided. | |||
| 5.5.4 summary | ||||
| The AtomAPI December 2003 | ||||
| PostURI MAY be present, if not present, indicates the server is | 3.5.4 summary |