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</