view Side-By-Side changes
Network Working Group M. Nottingham, Ed. Internet-Draft Expires: July11,27, 2005 R. Sayre, Ed. Boswijck Memex Consulting January10,26, 2005 The Atom Syndication Formatdraft-ietf-atompub-format-04draft-ietf-atompub-format-05 Status of this Memo By submitting this Internet-Draft, I certify that any applicable 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. 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. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt. The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. This Internet-Draft will expire on July11,27, 2005. Copyright Notice Copyright (C) The Internet Society (2005). All Rights Reserved. Abstract This document specifies Atom, an XML-based Web content and metadata syndication format. Nottingham & Sayre Expires July11,27, 2005 [Page 1] Internet-Draft Atom Format January 2005 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1 Editorial Notes . . . . . . . . . . . . . . . . . . . . . 4 1.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 Conformance . . . . . . . . . . . . . . . . . . . . . . . 5 1.4 Notational Conventions . . . . . . . . . . . . . . . . . . 5 2. Atom Documents . . . . . . . . . . . . . . . . . . . . . . . 7 3. Common Atom Constructs . . . . . . . . . . . . . . . . . . .89 3.1 Text Constructs . . . . . . . . . . . . . . . . . . . . .89 3.1.1 "type" Attribute . . . . . . . . . . . . . . . . . . .89 3.2 Person Constructs . . . . . . . . . . . . . . . . . . . .910 3.2.1 The "atom:name" Element . . . . . . . . . . . . . . .. . 910 3.2.2 The "atom:uri" Element . . . . . . . . . . . . . . . .. . 910 3.2.3 The "atom:email" Element . . . . . . . . . . . . . . .. . 911 3.3 Date Constructs . . . . . . . . . . . . . . . . . . . . .911 3.4 Service Constructs . . . . . . . . . . . . . . . . . . . .911 3.4.1 The "href" Attribute . . . . . . . . . . . . . . . . .. . 1011 3.5LinkIdentity Constructs . . . . . . . . . . . . . . . . . . .. . 1011 3.5.1"rel" Attribute . . . . . . . . .Dereferencing Identity Constructs . . . . . . . . . .1012 3.5.2"type" Attribute . . . . . .Comparing Identity Constructs . . . . . . . . . . . . 12 4. Element Definitions .11 3.5.3 "href" Attribute. . . . . . . . . . . . . . . . . . .11 3.5.4 "hreflang" Attribute14 4.1 The "atom:feed" Element . . . . . . . . . . . . . . . . .11 3.5.5 "title"14 4.1.1 The "version" Attribute . . . . . . . . . . . . . . .. . . 11 3.5.6 "length" Attribute .14 4.2 The "atom:head" Element . . . . . . . . . . . . . . . . .11 3.6 Identity Constructs14 4.2.1 Usage of "atom:head" within "atom:entry" . . . . . . . 16 4.3 The "atom:entry" Element . . . . . . . . . . . .12 3.6.1 Dereferencing Identity Constructs. . . . . 16 4.4 The "atom:title" Element . . . . .12 3.6.2 Comparing Identity Constructs. . . . . . . . . . . .12 3.718 4.5 TheCategory Construct"atom:id" Element . . . . . . . . . . . . . . . . . .13 3.7.118 4.6 The"term" Attribute"atom:link" Element . . . . . . . . . . . . . . . . .13 3.7.218 4.6.1 The"scheme""href" Attribute . . . . . . . . . . . . . . . .13 3.7.3. 19 4.6.2 The"label" attribute"rel" Attribute . . . . . . . . . . . . . . . .13 4. The "atom:feed" Element. 19 4.6.3 The "type" Attribute . . . . . . . . . . . . . . . . .14 4.1 "version"20 4.6.4 The "hreflang" Attribute . . . . . . . . . . . . . . .. . . . 14 4.220 4.6.5 The"atom:head" Element . ."title" Attribute . . . . . . . . . . . . . . .14 4.2.1 "atom:title" Element. 20 4.6.6 The "length" Attribute . . . . . . . . . . . . . . . .14 4.2.2 "atom:link"20 4.7 The "atom:updated" Element . . . . . . . . . . . . . . . .. 14 4.2.3 "atom:category"20 4.8 The "atom:published" Element . . . . . . . . . . . . . . .15 4.2.4 "atom:introspection"21 4.9 The "atom:author" Element . . . . . . . . . . . . .15 4.2.5 "atom:post" Element .. . . 21 4.10 The "atom:contributor" Element . . . . . . . . . . . . .15 4.2.6 "atom:author"21 4.11 The "atom:host" Element . . . . . . . . . . . . . . . .15 4.2.7 "atom:contributor"21 4.12 The "atom:copyright" Element . . . . . . . . . . . . . .15 4.2.8 "atom:tagline"21 4.13 The "atom:category" Element . . . . . . . . . . . . . .. . 15 4.2.9 "atom:id" Element22 4.13.1 The "term" Attribute . . . . . . . . . . . . . . . . 22 4.13.2 The "scheme" Attribute . .16 4.2.10 "atom:generator" Element. . . . . . . . . . . . . 22 4.13.3 The "label" attribute .16 4.2.11 "atom:copyright" Element. . . . . . . . . . . . . .16 4.2.12 "atom:info"22 4.14 The "atom:summary" Element . . . . . . . . . . . . . . .. 16 4.2.13 "atom:updated"22 4.15 The "atom:content" Element . . . . . . . . . . . . . . .1623 Nottingham & Sayre Expires July11,27, 2005 [Page 2] Internet-Draft Atom Format January 20055.4.15.1 The"atom:entry" Element ."type" attribute . . . . . . . . . . . . . . . . 23 4.15.2 The "src" attribute .18 5.1 "atom:title" Element. . . . . . . . . . . . . . .. . . . 18 5.2 "atom:link" Element . . . . . . . . . . . . . . . . . . . 18 5.3 "atom:category" Element . . . . . . . . . . . . . . . . . 18 5.4 "atom:edit" Element . . . . . . . . . . . . . . . . . . . 19 5.5 "atom:author" Element23 4.15.3 Processing Model . . . . . . . . . . . . . . . . . .19 5.6 "atom:contributor"24 4.16 The "atom:introspection" Element . . . . . . . . . . . .. . . . 19 5.7 "atom:host"25 4.17 The "atom:post" Element . . . . . . . . . . . . . . . .. . . 19 5.8 "atom:id"25 4.18 The "atom:edit" Element . . . . . . . . . . . . . . . .. . . . 19 5.9 "atom:updated"25 4.19 The "atom:tagline" Element . . . . . . . . . . . . . . .. . . 19 5.10 "atom:published"25 4.20 The "atom:generator" Element . . . . . . . . . . . . . .. . 20 5.11 "atom:summary"25 4.21 The "atom:info" Element . . . . . . . . . . . . . . . .. 20 5.12 "atom:content" Element . . . . . . . . . . .26 5. Managing Feed State . . . . . .20 5.12.1 "type" attribute. . . . . . . . . . . . . . 27 6. Securing Atom Documents . . . .20 5.12.2 "src" attribute. . . . . . . . . . . . . . 28 6.1 Digital Signatures . . . .21 5.12.3 Processing Model. . . . . . . . . . . . . . . . 28 6.2 Encryption . .21 5.13 "atom:copyright" Element. . . . . . . . . . . . . . . .22 5.14 "atom:head" Element. . . . . . 28 7. Embedding Atom in Other Formats . . . . . . . . . . . .22 6. Managing Feed State. . 29 8. Extending Atom . . . . . . . . . . . . . . . . . .23 7. Securing Atom Documents. . . . . 30 9. IANA Considerations . . . . . . . . . . . . .24 7.1 Digital Signatures. . . . . . . 31 9.1 Registry of Link Relations . . . . . . . . . . . . .24 7.2 Encryption. . . 31 10. Security Considerations . . . . . . . . . . . . . . . . . . 33 11. References . . .24 8. Embedding Atom in Other Formats. . . . . . . . . . . . . .25 9. Extending Atom. . . . . . . . 34 11.1 Normative References . . . . . . . . . . . . . . .26 10. IANA Considerations. . . . 34 11.2 Informative References . . . . . . . . . . . . . . . .27 10.1 Registry of Link Relations. . 35 Authors' Addresses . . . . . . . . . . . . .27 11. Security Considerations. . . . . . . . 36 A. Contributors . . . . . . . . . .29 12. References. . . . . . . . . . . . . . 37 B. Collected RELAX NG Compact Schema . . . . . . . . . . .30 12.1 Normative References. . 38 C. Revision History . . . . . . . . . . . . . . . . .30 12.2 Informative References. . . . . 45 Intellectual Property and Copyright Statements . . . . . . .. . . . . . 31 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 32 A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 33 B. Revision History . . . . . . . . . . . . . . . . . . . . . . 34 Intellectual Property and Copyright Statements . . . . . . . 3647 Nottingham & Sayre Expires July11,27, 2005 [Page 3] Internet-Draft Atom Format January 2005 1. Introduction Atom is an XML-based document formatintended to allowwhich describes lists of relatedinformation,information known as "feeds". Feeds are composed of a number of items, known as "entries", each with an extensible set of attached metadata. For example, each entry has a title. The primary use case that Atom addresses is the syndication of Web content such as Weblogs and news headlines to Web sites as well as directly to user agents. However, nothing precludes it from being used for other purposes and kinds of content. Details of communication protocols between software agents using Atom can be found in the Atom Protocol specification [Atom-protocol]. [[ more motivation / design principles ]] 1.1 Editorial Notes The Atom format is a work-in-progress, and this draft is both incomplete and likely to change rapidly. As a result, THE FORMAT DESCRIBED BY THIS DRAFT SHOULD NOT BE DEPLOYED, either in production systems or in any non-experimental fashion on the Internet. Discussion of this draft happens in two fora; The mailing list [1] The Atom Wiki Web site [2] Active development takes place on the mailing list, while the Wiki is used for issue tracking and new proposals. This document is an early draft and known to be incomplete. Topics marked [[like this]] indicate where additional text is likely to be added. Nottingham & Sayre Expires July11,27, 2005 [Page 4] Internet-Draft Atom Format January 2005 1.2 Example A minimal, single-entry Atom Feed Document: <?xml version="1.0" encoding="UTF-8"?> <feedversion="draft-ietf-atompub-format-04 : doversion="draft-ietf-atompub-format-05:do not deploy"xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-04 ">xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-05"> <head> <title>Example Feed</title> <link href="http://example.org/"/> <updated>2003-12-13T18:30:02Z</updated> <author> <name>John Doe</name> </author> </head> <entry> <title>Atom-Powered Robots Run Amok</title> <link href="http://example.org/2003/12/13/atom03"/> <id>vemmi://example.org/2003/32397</id> <updated>2003-12-13T18:30:02Z</updated> </entry> </feed> 1.3 Conformance [[ talk about atom documents and atom consumers, and how requirements are placed on them ]] 1.4 Notational Conventions The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14, [RFC2119]. This specification uses XML Namespaces [W3C.REC-xml-names-19990114] to uniquely identify XML elements and attribute names. It uses the following namespace prefixes for the indicated namespace URIs; "atom":http://purl.org/atom/ns#draft-ietf-atompub-format-04http://purl.org/atom/ns#draft-ietf-atompub-format-05 Note that the choice of any namespace prefix is arbitrary and not semantically significant. Atom is specified using terms from the XML Infoset [W3C.REC-xml-infoset-20011024]. However, this specification uses aNottingham & Sayre Expires July 11, 2005 [Page 5] Internet-Draft Atom Format January 2005shorthand for two common terms; the phrase "Information Item" is omitted when naming Element Information Items and Attribute Nottingham & Sayre Expires July 27, 2005 [Page 5] Internet-Draft Atom Format January 2005 Information Items. Therefore, when this specification uses the term "element," it is referring to an Element Information Item in Infoset terms. Likewise, when it uses the term "attribute," it is referring to an Attribute Information Item. Some sections of this specification are illustrated with fragments of a non-normative RELAX NG Compact schema [RELAX-NG]. However, the text of this specification provides the definition of conformance. A collected schema appears in an informative appendix. Nottingham & Sayre Expires July11,27, 2005 [Page 6] Internet-Draft Atom Format January 2005 2. Atom Documents This specification describes two kinds of Atom Documents; Atom Feed Documents and Atom Entry Documents. An Atom Feed Document is a representation of an Atom feed, including metadata about the feed, and some or all of the entries associated with it. Its document element is atom:feed. An Atom Entry Document represents exactly one Atom Entry, outside of the context of an Atom Feed. Its document element is atom:entry. namespace atom = "http://purl.org/atom/ns#draft-ietf-atompub-format-05" start = atomFeed | atomEntry Both kinds of Atom documents are specified in terms of the XML Information Set, serialised as XML 1.0 [W3C.REC-xml-20040204] and identified with the "application/atom+xml" media type. Atom Documents MUST be well-formed XML.[[ Validity? ]]Atom constrains the appearance and content of elements and attributes; unless otherwise stated, Atom Documents MAY contain other Information Items as appropriate. In particular, Comment Information Items and Processing Instruction Information Items SHOULD be ignored in the normal processing of an Atom Document. Any element in an Atom Document MAY have an xml:base attribute. XML Base [W3C.REC-xmlbase-20010627] processing MUST be applied to any relative reference[RFC2396bis][RFC3986] present in an Atom Document. This includes such elements and attributes as specified by Atom itself, as well as those specified by extensions to Atom. Any element in an Atom Document MAY have an xml:lang attribute, whose content indicates thedefaultnatural language of the element's content. Requirements regarding the content and interpretation of xml:lang are specified in XML 1.0 [W3C.REC-xml-20040204] Section 2.12. atomCommonAttributes = attribute xml:base { atomUri }?, attribute xml:lang { atomLanguageTag }? [[ discussion of URI escaping and i18n, IRI ]] [[ discussion of white space ]] Atom is extensible. See the section titled 'Extending Atom' later in Nottingham & Sayre Expires July 27, 2005 [Page 7] Internet-Draft Atom Format January 2005 this document for a full description of how Atom Documents can be extended. Nottingham & Sayre Expires July11,27, 2005 [Page7]8] Internet-Draft Atom Format January 2005 3. Common Atom Constructs Many of Atom's elements share a few common structures. This section defines a few such structures and theirrequirements,requirements for convenient reference by the appropriate element definitions. When an element is identified as being a particular kind of construct, it inherits the corresponding requirements from that construct's definition in this section. 3.1 Text Constructs A Text construct contains human readable text, usually in fairly small quantities. atomPlainTextConstruct = atomCommonAttributes, attribute type { "TEXT" | "HTML" }?, text atomXHTMLTextConstruct = atomCommonAttributes, attribute type { "XHTML" }, (text|anyElement)* atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct 3.1.1 "type" Attribute Text constructs MAY have a "type" attribute. When present, the value MUST be one of "TEXT", "HTML" or "XHTML". If the "type" attribute is not provided, software MUST behave as though it were present with a value of "TEXT". Note that MIME media types [RFC2045] are not acceptable values for the "type" attribute. If the value is "TEXT", the content of the Text construct MUST NOT contain child elements. Such text is intended to be presented to humans in a readable fashion. Thus, software MAY display it using normal text rendering techniques such as proportional fonts, white-space collapsing, and justification. If the value of "type" is "HTML", the content of the Text construct MUST NOT contain child elements, and SHOULD be suitable for handling by software that knows HTML. The HTML markup must be escaped; for example, "<br>" as "<br>". The HTML markup SHOULD be such that it Nottingham & Sayre Expires July 27, 2005 [Page 9] Internet-Draft Atom Format January 2005 could validly appear directly within an HTML <DIV> element. Receiving software which displays the content MAY use the markup to aid in displaying it. [[example atom entry w/ escaped markup]] If the value of "type" is "XHTML", the content of the Text construct MAY contain child elements. The content SHOULD be XHTML text and markup that could validly appear directly within an xhtml:div element. Receiving software which displays the content MAY use the markup to aid in displaying it. Escaped markup is interpreted as a text representation of markup, and MUST NOT be interpreted as markup itself.Nottingham & Sayre Expires July 11, 2005 [Page 8] Internet-Draft Atom Format January 20053.2 Person Constructs A Person construct is an element that describes a person, corporation, or similar entity. Person constructs MAY be extended by namespace-qualified element children. This specification assigns no significance to the order of appearance of the child elementsofin a Person construct. atomPersonConstruct = atomCommonAttributes, (element atom:name { text } & element atom:uri { atomUri }? & element atom:email { atomEmailAddress }?) 3.2.1 The "atom:name" Element The "atom:name" element's content conveys a human-readable name for the person. Person constructs MUST contain exactly one "atom:name" element. 3.2.2 The "atom:uri" Element The "atom:uri" element's content conveys a URI associated with the person. Person constructs MAY contain an atom:uri element, but MUST NOT contain more than one. The content of atom:uri in a Person construct MUST be a URI reference[RFC2396bis].[RFC3986]. xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the atom:uri element's content. Nottingham & Sayre Expires July 27, 2005 [Page 10] Internet-Draft Atom Format January 2005 3.2.3 The "atom:email" Element The "atom:email" element's content conveys an e-mail address associated with the persons. Person constructs MAY contain an atom:email element, but MUST NOT contain more than one. Its content MUST be an e-mail address [RFC2822]. 3.3 Date Constructs A Date construct is an element whose content MUST conform to the date-time BNF rule in [RFC3339]. atomDateConstruct = atomCommonAttributes, xsd:dateTime 3.4 Service Constructs A Service construct is an empty element that conveys the URI of an Atom Publishing Protocol [Atom-protocol] service associated with an entry or feed. atomServiceConstruct = atomCommonAttributes, attribute href { atomUri } 3.4.1 Thetype"href" Attribute The "href" attribute contains the a URI ofservice is identified by the element name. A Service construct has the following attribute: Nottingham & Sayre Expires July 11, 2005 [Page 9] Internet-Draft Atom Format January 2005 3.4.1 "href" Attribute The "href" attribute contains the a URI pointing to the endpoint of the service named bythename attribute.service. atom:service elements MUST have a "href" attribute, whose value MUST be a URI reference[RFC2396bis].[RFC3986]. xml:base processing MUST be applied to the "href" attribute. 3.5LinkIdentity ConstructsA LinkAn Identity construct is anemptyelementthat describeswhose content conveys aconnection from an Atom Document to another Web resource. 3.5.1 "rel" Attribute Link constructs MAY have an optional "rel" attribute that indicatespermanent, universally unique identifier for thelink relation type. Ifconstruct's parent. Its content MUST be a URI, as defined by [RFC3986]. Note that the"rel" attributedefinition of "URI" excludes relative references. When an Atom document isnot present,relocated, migrated, syndicated, republished, exported or imported, thelinkcontent of its Identity construct MUSTbe interpreted as ifNOT change. Put another way, an Identity construct Nottingham & Sayre Expires July 27, 2005 [Page 11] Internet-Draft Atom Format January 2005 pertains to all instantiations of a particular Atom entry or feed; revisions retain thelink relation type is "alternate". rel_attributesame content in their Identity constructs. atomIdentityConstruct =segment-nz-nc / URIatomCommonAttributes, (atomUri) 3.5.1 Dereferencing Identity Constructs Thevaluecontent of"rel"an Identity construct MAY be dereferencable (e.g. an HTTP URI). However, processors MUST NOT assume it to beeitherdereferencable. The content of an Identity construct MUST be created in aname, which is non-emptyway that assures uniqueness, anddoes not contain any colon (":") characters, or a URI [RFC2396bis]. Noteit is suggested thatusethe Identity construct be stored along with the associated resource. Because ofa relative reference tothe"rel" value URI 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 Registryrisk ofLink Relations Section 10, and thus the URIconfusion between URIs that would beobtained by appending the value of the rel attribute to the string "http://www.iana.org/assignments/relation/". The value of "rel" describes the meaning of the link, but does not impose any behavioral requirements on implementations. This document defines two initial values forequivalent if dereferenced, theRegistry of Link Relations: The value "alternate" signifies thatfollowing normalization strategy is strongly encouraged when generating Identity constructs: o Provide theURIscheme in lowercase characters. o Provide thevalue ofhost, if any, in lowercase characters. o Only perform percent-encoding where it is essential. o Use uppercase A-through-F characters when percent-encoding. o Prevent dot-segments appearing in paths. o For schemes that define a default authority, use an empty authority if thehref attribute identifiesdefault is desired. o For schemes that define analternate versionempty path to be equivalent to a path of "/", use "/". o For schemes that define a port, use an empty port if theresource described by the containing element. The value "related" signifiesdefault is desired. o Preserve empty fragment identifiers and queries. o Ensure that all portions of the URIin the valueare UTF-8 encoded NFC form Unicode strings. 3.5.2 Comparing Identity Constructs Instances ofthe href attribute identifies a resourceIdentity constructs can be compared towhich the resource described by the containing atom:feeddetermine whether an entry oratom:entry element is related. For example, thefeedfor a site which discussesis theperformance of the search engine at "http://search.example.com" might contain,same as one seen before. Processors MUST compare Identity constructs on achildcharacter-by-character basis in a case-sensitive fashion. As a result, two URIs that resolve to the same resource but are not character-for-character identical will be considered different for the purposes ofatom:head: <link rel="related" href="http://search.example.com/">Identifier comparison. Nottingham & Sayre Expires July11,27, 2005 [Page10]12] Internet-Draft Atom Format January 2005An identical link might appear as a child of any atom:entry whose content contains a discussion of that same search engine. 3.5.2 "type" Attribute Link constructs MAY have a type attribute, whose value MUST conform toFor example, "http://www.example.org/thing", "http://www.example.org/Thing", "http://www.EXAMPLE.org/thing" and "HTTP://www.example.org/thing" will all be considered different identifiers, despite their differences in case. Likewise, "http://www.example.com/~bob", "http://www.example.com/%7ebob" and "http://www.example.com/%7Ebob" will all be considered different identifiers, because URI %-escaping is significant for thesyntaxpurposes ofa MIME media type [RFC2045].comparison. Nottingham & Sayre Expires July 27, 2005 [Page 13] Internet-Draft Atom Format January 2005 4. Element Definitions 4.1 Thetype attribute's value"atom:feed" Element The "atom:feed" element is the document (i.e., top-level) element of anadvisory media type; it MAY be usedAtom Feed Document, acting as ahint to determine the type ofcontainer for metadata and data associated with therepresentationfeed. Its first element child MUST be atom:head, whichis expected toMAY bereturned whenfollowed zero or more atom:entry child elements. atomFeed = element atom:feed { atomCommonAttributes, atomVersionAttribute, (atomHead & atomEntry* & anyElement*) } 4.1.1 The "version" Attribute atom:feed elements MUST have a "version" attribute whose content indicates thevalueversion of thehref attribute is dereferenced. NoteAtom specification that thetypefeed conforms to. The content of this attributedoes not override the actual media type returned with the representation. 3.5.3 "href" Attributeis unstructured text. The"href"version identifier for this specification is "draft-ietf-atompub-format-05: do not deploy". atomVersionAttribute = attributecontains the link's URI. Link constructs MUST have a href attribute, whose value MUST be a URI reference [RFC2396bis]. xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the href attribute's content. 3.5.4 "hreflang" Attribute The "hreflang" attribute's content describes the language of the resource pointed to by the href attribute. When used together with the rel="alternate", it implies a translatedversionof the entry. Link constructs MAY have an hreflang attribute, whose value MUST be a language tag [RFC3066]. 3.5.5 "title" Attribute{"draft-ietf-atompub-format-05 : do not deploy"} 4.2 The"title" attribute conveys human-readable information"atom:head" Element The atom:head element acts as a container for metadata about thelink. Link constructs MAY have a title attribute. 3.5.6 "length" Attributefeed itself. The"length" attribute indicates an advisory length of the linked content in octets; itatom:head element MAYbe usedcontain any namespace-qualified [W3C.REC-xml-names-19990114] elements asa hintchildren. This specification assigns no significance todeterminethecontent lengthorder ofthe representation returned when the URI in the href attribute is dereferenced. Note that the length attribute does not override the actual content lengthappearance of therepresentation as reported by the underlying protocol. Link constructs MAY have a length attribute.child elements of atom:head. Nottingham & Sayre Expires July11,27, 2005 [Page11]14] Internet-Draft Atom Format January 20053.6 Identity Constructs An Identity construct is anatomHead = elementwhose content conveys a permanent, universally unique identifier for the construct's parent. Its content MUST be a URI, asatom:head { atomCommonAttributes, (atomTitle & atomUpdated & atomLink+ & atomId? & atomAuthor? & atomContributor* & atomTagline? & atomGenerator? & atomInfo? & atomCopyright? & atomCategory* & atomIntrospection? & atomPost? & anyElement*) } The following child elements are defined by[RFC2396bis]. Notethis specification (note that thedefinitionpresence of"URI" excludes relative references. When an Atom documentsome of these elements isrelocated, migrated, syndicated, republished, exported or imported, the contentrequired): o atom:head elements MUST contain exactly one atom:title element. o atom:head elements MUST contain at least one atom:link element with a rel attribute value ofits Identity construct"alternate". o atom:head elements MUST NOTchange. Put another way, an Identity construct pertains to all instantiations ofcontain more than one atom:link element with aparticular Atom entry or feed; revisions retainrel attribute value of "alternate" that has the samecontent in their Identity constructs. 3.6.1 Dereferencing Identity Constructs The content of an Identity construct MAY be dereferencable (e.g. an HTTP URI). However, processors MUST NOT assume ittype attribute value. If a feed's atom:link element with type="alternate" resolves tobe dereferencable. The content ofanIdentity construct MUST be created in a wayHTML document, then thatassures uniqueness, and it is suggesteddocument SHOULD have a autodiscovery link element [Atom-autodiscovery] that reflects back to theIdentity construct be stored along with the associated resource. Because of the riskfeed. atom:head elements MAY contain additional atom:link elements beyond those described above. o atom:head elements MUST contain exactly one atom:author element, UNLESS all ofconfusion between URIs that would be equivalent if dereferenced,thefollowing normalization strategy is strongly encouraged when generating Identity constructs:atom:feed element's child atom:entry elements contain an atom:author element. atom:head elements MUST NOT contain more than one atom:author element. [[inheritance]] oProvide the scheme in lowercase characters.atom:head elements MUST NOT contain more than one an atom:contributor element. oProvide the host, if any, in lowercase characters. o Only perform percent-encoding where it is essential. o Use uppercase A-through-F characters when percent-encoding. o Prevent dot-segments appearing in paths. o For schemes that define a default authority, use an empty authority if the default is desired. o For schemes that defineatom:head elements MUST NOT contain more than one anempty path to be equivalent to a path of "/", use "/".atom:copyright element. oFor schemes that define a port, useatom:head elements MUST NOT contain more than one anempty port if the default is desired.atom:id element. oPreserve empty fragment identifiers and queries.atom:head elements MUST contain exactly one atom:updated element. oEnsure that all portions of the URI are UTF-8 encoded NFC form Unicode strings. 3.6.2 Comparing Identity Constructs Instancesatom:head elements MAY contain any number ofIdentity constructs can be compared to determine whether an entry or feed is the same as one seen before. Processorsatom:category elements. o atom:head elements MUSTcompare Identity constructs on a character-by-character basis in a case-sensitive fashion.NOT contain more than one atom:post element. Nottingham & Sayre Expires July11,27, 2005 [Page12]15] Internet-Draft Atom Format January 2005As a result, two URIs that resolve too atom:head elements MUST NOT contain more than one atom:introspection element. o atom:head elements MUST NOT contain more than one atom:tagline element. o atom:head elements MUST NOT contain more than one atom:generator element. o atom:head elements MUST NOT contain more than one atom:info element. 4.2.1 Usage of "atom:head" within "atom:entry" In this case, thesame resource but are not character-for-character identical will be considered differentatom:head element acts as a container for metadata about thepurposes of Identifier comparison. For example, "http://www.example.org/thing", "http://www.example.org/Thing", "http://www.EXAMPLE.org/thing" and "HTTP://www.example.org/thing" will all be considered different identifiers, despite their differences in case. Likewise, "http://www.example.com/~bob", "http://www.example.com/%7ebob" and "http://www.example.com/%7Ebob" will all be considered different identifiers, because URI %-escapingfeed within which the entry was created. If an atom:entry issignificant forcopied into one feed from another feed, then thepurposesatom:head element ofcomparison. 3.7 The Category Construct Category constructs contain information about a category to which an Atomthe source feedor entry is associated. 3.7.1 The "term" Attribute The "term" attribute willSHOULD bea string which identifiesinserted into thecategory withinatom:entry unless thecategorization scheme to whichentry, as copied, already contains an atom:head element. If theentry or feed belongs. Category constructs MUST have a "term" attribute. 3.7.2 The "scheme" Attribute The is a URI that identifies a categorization scheme. Category constructs MAY have a "scheme" attribute. 3.7.3 The "label" attribute The "label" attribute provides a human-readable labelatom:entry already contains an atom:head, then thatmayatom:head SHOULD bedisplayed in end-user applications. Category constructs MAY have a "label" attribute. Nottingham & Sayre Expires July 11, 2005 [Page 13] Internet-Draft Atom Format January 2005 4.copied without modification. [[ ... example ... ]] 4.3 The"atom:feed""atom:entry" Element The"atom:feed""atom:entry" elementisrepresents an individual entry. This element can appear as a child of the atom:feed element, or it can appear as the document (i.e., top-level) element of a standalone Atom Entry Document. When appearing in an AtomFeedEntry Document,acting asatom:entry elements MUST have acontainer for metadata and data associated with the feed. Its first element child MUST be atom:head, which MAY be followed zero or more atom:entry child elements. 4.1 "version" Attribute atom:feed elements MUST have a "version" attribute whose content indicates"version" attribute whose content indicates the version of the Atom specification that thefeedentry conforms to. Thecontent of this attribute is unstructured text. Theversion identifier for this specification is"draft-ietf-atompub-format-04 :"draft-ietf-atompub-format-05: do not deploy".4.2 The "atom:head" Element The atom:head element acts as a container for metadata about the feed itself.Theatom:headatom:entry element MAY contain any namespace-qualified [W3C.REC-xml-names-19990114] elements as children. This specification assigns no significance to the order of appearance of the child elements ofatom:head.atom:entry. Nottingham & Sayre Expires July 27, 2005 [Page 16] Internet-Draft Atom Format January 2005 atomEntry = element atom:entry { atomCommonAttributes, atomVersionAttribute?, (atomTitle & atomId & atomLink* & atomUpdated & atomPublished? & atomAuthor? & atomContributor* & atomHost? & atomCopyright? & atomCategory* & atomEdit? & atomSummary? & atomContent? & atomHead? & anyElement*) } The following child elements are defined by this specification (note that it requires the presence of some of these elements): o atom:entry elementsis required): 4.2.1 "atom:title" Element TheMUST have exactly one "atom:title"element is a Text construct that conveys a human-readable title for the feed. atom:headelement. o atom:entry elements MUST contain exactly oneatom:titleatom:id element.4.2.2 "atom:link" Element The "atom:link" element is a Link construct that conveys a URI associated with the feed. The nature of the relationship is determined by the construct's rel attribute. atom:heado atom:entry elements that contain no child atom:content element MUST contain at least one atom:link element with a rel attribute value of "alternate".atom:headatom:entry elements MUST NOT contain more than one atom:link element with a rel attribute value of "alternate" that has the same type attribute value.Nottingham & Sayre Expires July 11, 2005 [Page 14] Internet-Draft Atom Format January 2005 If a feed's atom:link element with type="alternate" resolves to an HTML document, then that document SHOULD have a autodiscovery link element [Atom-autodiscovery] that reflects back to the feed. atom:headatom:entry elements MAY contain additional atom:link elements beyond those described above.4.2.3 "atom:category" Element A Category Construct identifying a category with which the feed is associated. atom:heado atom:entry elementsMAYMUST containany number of atom:category elements. 4.2.4 "atom:introspection" Element The "atom:introspection" element is a Service construct that conveys the URI of an introspection file associated with the feed. atom:headexactly one atom:updated element. o atom:entry elements MUST NOT contain more than oneatom:introspectionatom:published element.4.2.5 "atom:post" Element The "atom:post" element is a Service construct that conveys the URI used to add entries to the feed. atom:head elements MUST NOT contain more than one atom:post element. 4.2.6 "atom:author" Element The "atom:author" element is a Person construct that indicates the default author of the feed. atom:heado atom:entry elements MUST contain exactly one atom:author element,UNLESS all ofunless, in an Atom Feed Document, theatom:feed element's child atom:entry elements containatom:head element contains an atom:authorelement. atom:headelement itself. atom:entry elements MUST NOT contain more than one atom:author element.[[explain inheritance]] 4.2.7 "atom:contributor" Element The "atom:contributor" element is a Person construct that indicates a person or other entity who contributes to the feed. atom:heado atom:entry elementsMAYMUST NOT containone ormore than one atom:contributorelements. 4.2.8 "atom:tagline" Element The "atom:tagline" element is a Text construct that conveys a human-readable description or tagline for the feed. atom:headelement. o atom:entry elementsMAYMUST NOT containan atom:tagline element, butmore than one atom:host element. o atom:entry elements MUST NOT contain more thanone.one atom:copyright element. o atom:entry elements MAY contain any number of atom:category elements. Nottingham & Sayre Expires July11,27, 2005 [Page15]17] Internet-Draft Atom Format January 20054.2.9 "atom:id" Element The "atom:id"o atom:entry elements MUST contain an atom:summary elementisin any of the following cases: * the atom:entry element contains no atom:content element. * the atom:entry contains anIdentity construct that conveysatom:content which has apermanent, universally unique identifier for"src" attribute (and is thus empty). * the atom:entry contains content which is encoded in Base64; i.e. the "type" attribute of atom:content is afeed. atom:headMIME media type [RFC2045] and does not begin with "text/" nor end with "+xml". o atom:entry elementsMAYMUST NOT containan atom:id element, butmore than one atom:summary element. o atom:entry elements MUST NOT contain more thanone. 4.2.10 "atom:generator" Element The "atom:generator" element's content identifies the software agent used to generate the feed, for debugging and other purposes. atom:headone atom:edit element. o atom:entry elementsMAY contain an atom:generator element, butMUST NOT contain more thanone. The content of this element, when present, MUST be a string that is a human-readable name for the generating agent. The atom:generator element MAY have a "uri" attribute whose value MUST be a URI reference [RFC2396bis]. When dereferenced, that URI SHOULD produce a representation that is relevant to that agent.one atom:head element. 4.4 Theatom:generator element MAY have a "version" attribute that indicates the version of the generating agent. When present, its value is unstructured text. 4.2.11 "atom:copyright""atom:title" Element The"atom:copyright""atom:title" element is a Text construct that conveys a human-readablecopyright statementtitle forthe feed. atom:head elements MAY containanatom:copyright element, but MUST NOT contain more than one. The atom:copyrightentry or feed. atomTitle = elementSHOULD NOT be used to convey machine-readable licensing information. 4.2.12 "atom:info"atom:title { atomTextConstruct } 4.5 The "atom:id" Element The"atom:info""atom:id" element isa Textan Identity construct that conveys ahuman-readable explanation of the feed format itself. atom:head elements MAY containpermanent, universally unique identifier for anatom:info element, but MUST NOT contain more than one. The atom:infoentry or feed. atomId = elementSHOULD NOT considered meaningful by processors; it is a convenience to publishers in certain situations. 4.2.13 "atom:updated"atom:id { atomIdentityConstruct } 4.6 The "atom:link" Element The"atom:updated"atom:link element is an empty element that defines aDate construct indicating the mostreference from an Atom Document to a Web resource. atomLink = element atom:link { atomCommonAttributes, attribute href { atomUri }, attribute rel { atomNCName | atomUri }?, attribute type { atomMediaType }?, attribute hreflang { atomLanguageTag }?, attribute title { text }?, attribute length { text }?, empty Nottingham & Sayre Expires July11,27, 2005 [Page16]18] Internet-Draft Atom Format January 2005recent instant in time when} 4.6.1 The "href" Attribute The "href" attribute contains thefeed was modified inlink's URI. Link constructs MUST have away the producer considers significant. Therefore, not all modifications necessarily result in a changed atom:updated value. atom:head elementshref attribute, whose value MUSTcontain exactly one atom:updated element. Nottingham & Sayre Expires July 11, 2005 [Page 17] Internet-Draft Atom Format January 2005 5. The "atom:entry" Element The "atom:entry" element represents an individual entry. This element can appear asbe achild of the atom:feed element, or it can appear asURI reference [RFC3986]. xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to thedocument (i.e., top-level) element of a standalone Atom Entry Document. When appearing in an Atom Entry Document, atom:entryhref attribute's content. 4.6.2 The "rel" Attribute Link elementsMUSTMAY havea "version"an "rel" attributewhose contentthat indicates theversion of the Atom specification thatlink relation type. If theentry conforms to. The version identifier for this specification"rel" attribute is"draft-ietf-atompub-format-04 : donotdeploy". The atom:entrypresent, the link elementMAY contain any namespace-qualified [W3C.REC-xml-names-19990114] elementsMUST be interpreted aschildren. This specification assigns no significance to the order of appearance ofif thechild elements of atom:entry.link relation type is "alternate". rel_attribute = segment-nz-nc / URI Thefollowing child elements are defined by this specification (note that it requires the presence of somevalue ofthese elements): 5.1 "atom:title" Element The "atom:title" element"rel" MUST be either a name, which is non-empty and does not contain any colon (":") characters, or aText constructURI [RFC3986]. Note thatconveysuse of ahuman-readable title for the entry. atom:entry elements MUST have exactly one "atom:title" element. 5.2 "atom:link" Element The "atom:link" elementrelative reference is not allowed. If aLink construct that conveys a URI associated with the entry. The nature of the relationship as well asname is given, implementations MUST consider the linkitself is determined byrelation type to be equivalent to theelement's content. atom:entry elementssame name registered within the IANA Registry of Link Relations Section 9, and thus the URI thatcontain no child atom:content element MUST contain at least one atom:link element with a rel attributewould be obtained by appending the value of"alternate". atom:entry elements MUST NOT contain more than one atom:link element with athe rel attribute to the string "http://www.iana.org/assignments/relation/". The value of "rel" describes the meaning of the link, but does not impose any behavioral requirements on implementations. This document defines two initial values for the Registry of Link Relations: The value "alternate" signifies thathasthesame typeURI in the value of the href attributevalue. atom:entry elements MAY contain additional atom:link elements beyond thoseidentifies an alternate version of the resource describedabove. 5.3 "atom:category" Element A Category Construct identifyingby the containing element. The value "related" signifies that the URI in the value of the href attribute identifies acategory withresource related to the resource described by the containing atom:feed or atom:entry element. For example, the feed for a site which discusses theentry isperformance of the search engine at "http://search.example.com" might contain, as a child of atom:head: <link rel="related" href="http://search.example.com/"> Nottingham & Sayre Expires July11,27, 2005 [Page18]19] Internet-Draft Atom Format January 2005associated. atom:entry elements MAY containAn identical link might appear as a child of anynumberatom:entry whose content contains a discussion ofatom:category elements. 5.4 "atom:edit" Elementthat same search engine. 4.6.3 The"atom:edit" element is"type" Attribute Link elements MAY have aService construct that conveystype attribute, whose value MUST conform to theURI used to retrieve and edit the source representationsyntax ofthe entry. atom:entry elements MUST NOT contain more than one atom:edit element. 5.5 "atom:author" Elementa MIME media type [RFC2045]. The"atom:author" elementtype attribute's value is an advisory media type; it is aPerson construct that indicateshint about thedefault authortype of theentry. atom:entry elements MUST contain exactly one atom:author element, unless, in an Atom Feed Document,representation which is expected to be returned when theatom:head element contains an atom:author element itself. atom:entry elements MUST NOT contain more than one atom:author element. 5.6 "atom:contributor" Element The "atom:contributor" elementvalue of the href attribute isa Person constructdereferenced. Note thatindicates a person or other entity who contributes totheentry. atom:entry elements MAY contain one or more atom:contributor elements. 5.7 "atom:host" Elementtype attribute does not override the actual media type returned with the representation. 4.6.4 The"atom:host" element's"hreflang" Attribute The "hreflang" attribute's contentconveys a domain name or network address associateddescribes the language of the resource pointed to by the href attribute. When used together with theentry's origin. atom:entryrel="alternate", it implies a translated version of the entry. Link elements MAYcontain a single atom:host element. Its contenthave an hreflang attribute, whose value MUST be adomain name [RFC1035], a dotted-decimal IPv4 address [RFC0791], or a colon-delimited IPv6 address [RFC2460]. 5.8 "atom:id" Elementlanguage tag [RFC3066]. 4.6.5 The"atom:id" element is an Identity construct that"title" Attribute The "title" attribute conveysa permanent, universally unique identifier for an entry. atom:entryhuman-readable information about the link. Link elementsMUST contain exactly one atom:id element. 5.9 "atom:updated" Element The "atom:updated" element isMAY have aDate constructtitle attribute. 4.6.6 The "length" Attribute The "length" attribute indicates an advisory length of the linked content in octets; it is a hint about the content length of the representation returned when the URI in the href attribute is dereferenced. Note that the length attribute does not override the actual content length of the representation as reported by the underlying protocol. Link elements MAY have a length attribute. 4.7 The "atom:updated" Element The "atom:updated" element is a Date construct indicating the most recent instant in time whenthean entry or feed was modified in a way the producer considers significant. Therefore, not all modifications necessarily result in a changed atom:updated value.atom:entry elements MUST contain exactly one atom:updated element.Publishers MAY change the value of this element over time.Nottingham & Sayre Expires July 11, 2005 [Page 19] Internet-Draft Atom Format January 2005Processors MAY present entries sorted using this value. Processors MAY choose not to present entries until the instant in time specified Nottingham & Sayre Expires July 27, 2005 [Page 20] Internet-Draft Atom Format January 2005 in the atom:updated element has passed.5.10atomUpdated = element atom:updated { atomDateConstruct } 4.8 The "atom:published" Element The "atom:published" element is a Date construct indicating an instant in time associated with an event early in the life cycle of the entry. Typically, atom:published will be associated with the initial creation or first availability of the resource.atom:entry elements MAY contain an atom:published element, but MUST NOT contain more than one.Processors MAY present entries sorted using this value. Processors MAY choose not to present entries until the instant in time specified in the atom:published element has passed.5.11 "atom:summary"4.9 The "atom:author" Element The"atom:summary""atom:author" element is aTextPerson construct thatconveys a short summary, abstract or excerptindicates the default author of theentry. atom:entry elements MAY contain an atom:summary element, but MUST NOT contain more than one. atom:entry elements MUST containanatom:summaryentry or feed atomAuthor = elementin any of the following cases: o the atom:entryatom:author { atomPersonConstruct } 4.10 The "atom:contributor" Element The "atom:contributor" elementcontains no atom:content element. o the atom:entry contains an atom:content which has a "src" attribute (andisthus empty). oa Person construct that indicates a person or other entity who contributes to theatom:entry containsentry. atomContributor = element atom:contributor { atomPersonConstruct } 4.11 The "atom:host" Element The "atom:host" element's contentwhich is encoded in Base64; i.e. the "type" attribute of atom:content isconveys aMIME media type [RFC2045] and does not begin with "text/" nor end with "+xml". 5.12 "atom:content" Element The "atom:content" element either containsdomain name orlinks to thenetwork address associated with an entry's origin. Its contentof the entry. atom:entry elementsMUSTcontain zero or one atom:content elements. 5.12.1 "type" attribute atom:content MAY have a "type" attribute, When present, the value MAYbeone of "TEXT", "HTML",a domain name [RFC1035], a dotted-decimal IPv4 address [RFC0791], or"XHTML". Failing that, it MUST beaMIME media type [RFC2045] in which, to use the terminology of Section 5 of [RFC2045], the top levelcolon-delimited IPv6 address [RFC2460]. 4.12 The "atom:copyright" Element The "atom:copyright" element is adiscrete type. If the type attribute is not provided, software MUST behave as though it were present withText construct that conveys avalue of "TEXT".human-readable copyright statement for an entry or feed. The atom:copyright element SHOULD NOT be used to convey Nottingham & Sayre Expires July11,27, 2005 [Page20]21] Internet-Draft Atom Format January 20055.12.2 "src" attribute atom:content MAY have a "src" attribute, whose value MUST be a URI reference [RFC2396bis].machine-readable licensing information. If an atom:entry element does not contain an atom:copyright element, then the"src" attribute is present, software MAY use the URI to retrieve the content. Ifatom:copyright element of the"src" attribute iscontaining atom:feed element's atom:head element, if present,atom:content MUSTshould beempty. That isconsidered to apply tosay,thecontent may be retrievable using "src=" URI,entry. 4.13 The "atom:category" Element Category elements contain information about a category to which an Atom feed orit may be contained within atom:content, but not both. If the "src" attributeentry ispresent, the "type"associated. atomCategory = element atom:category { atomCommonAttributes, attributeSHOULD be provided and MUST be a MIME media type [RFC2045], rather than "TEXT", "HTML", or "XHTML".term { text }, attribute scheme { atomUri }?, attribute label { text }?, empty } 4.13.1 Thevalue is advisory; that"term" Attribute The "term" attribute isto say, upon dereferencinga string which identifies theURIcategory toretrieve the content, ifwhich theserver providing that content also providesentry or feed belongs. Category elements MUST have amedia type, the server-provided media type"term" attribute. 4.13.2 The "scheme" Attribute The "scheme" attribute isauthoritative. If the value of type begins with "text/" or ends with "+xml", the content SHOULD be local;a URI thatis to say, no "src"identifies a categorization scheme. Category elements MAY have a "scheme" attribute. 4.13.3 The "label" attributeshouldThe "label" attribute provides a human-readable label that may beprovided. 5.12.3 Processing Model Software MUST apply the following rules in successiondisplayed inthe order belowend-user applications. Category elements MAY have a "label" attribute. 4.14 The "atom:summary" Element The "atom:summary" element is a Text construct that conveys a short summary, abstract or excerpt of an entry. atomSummary = element atom:summary { atomTextConstruct } Nottingham & Sayre Expires July 27, 2005 [Page 22] Internet-Draft Atom Format January 2005 4.15 The "atom:content" Element The "atom:content" element either contains or links toascertain the rules governingthe content of"atom:content". 1. If the value is "TEXT",thecontent of atom:contententry. atom:entry elements MUSTNOTcontainchildzero or one atom:content elements.Such text is intended to be presented to humans inatomInlineTextContent = element atom:content { atomCommonAttributes, attribute type { "TEXT" | "HTML" | atomMediaType }?, (text)* } atomInlineXHTMLContent = element atom:content { atomCommonAttributes, attribute type { "XHTML" | atomMediaType }?, (text|anyElement)* } atomOutOfLineContent = element atom:content { atomCommonAttributes, attribute type { "TEXT" | "HTML" | "XHTML" | atomMediaType }?, attribute src { atomUri }, empty } atomContent = atomInlineTextContent | atomInlineXHTMLContent | atomOutOfLineContent 4.15.1 The "type" attribute atom:content MAY have areadable fashion. Thus, software"type" attribute, When present, the value MAYdisplay it using normal text rendering techniques such as proportional fonts, white-space collapsing, and justification. 2. If the valuebe one of"type" is"TEXT", "HTML",the content of atom:contentor "XHTML". Failing that, it MUSTNOT contain child elements, and SHOULD be suitable for handling by software that knows HTML. The HTML markup must be escaped; for example, "<br>" as "<br>". The HTML markup SHOULDbesuch that it could validly appear directly within an HTML <DIV> element. Receiving software which displays the content SHOULD use the markup to aida MIME media type [RFC2045] indisplaying it. 3. Ifwhich, to use thevalueterminology of"type" is "XHTML", the contentSection 5 ofatom:content MAY contain child elements. The content SHOULD be XHTML text and markup that could validly appear directly within an xhtml:div element. Receiving software which displays[RFC2045], thecontent SHOULD usetop level is a discrete type. If themarkup to aid in displaying it. Escaped markuptype attribute isinterpretednot provided, software MUST behave as though it were present with atext representationvalue ofmarkup, and"TEXT". 4.15.2 The "src" attribute atom:content MAY have a "src" attribute, whose value MUSTNOTbeinterpreted as markup itself. 4.a URI reference [RFC3986]. If thevalue of "type" ends with "+xml" or "/xml", the content of atom:content may include child elements, and SHOULD be suitable for handling by"src" attribute is present, softwarethat knowsMAY use theindicated media type.URI to retrieve the content. If the "src" attribute isnot provided, this would normally meanNottingham & Sayre Expires July11,27, 2005 [Page21]23] Internet-Draft Atom Format January 2005thatpresent, atom:content MUST be empty. That is to say, the"atom:content" element would contain a single child element which would serve ascontent may be retrievable using "src=" URI, or it may be contained within atom:content, but not both. If theroot element of"src" attribute is present, theXML document of"type" attribute SHOULD be provided and MUST be a MIME media type [RFC2045], rather than "TEXT", "HTML", or "XHTML". The value is advisory; that is to say, upon dereferencing theindicated type. 5.URI to retrieve the content, if the server providing that content also provides a media type, the server-provided media type is authoritative. If the value of"type"type begins with "text/" or ends with "+xml", the content SHOULD be local; that is to say, no "src" attribute should be provided. 4.15.3 Processing Model Software MUST apply the following rules in the order below to ascertain the rules governing the content of "atom:content". 1. If the value is "TEXT", the content of atom:content MUST NOT contain child elements.6. For all other valuesSuch text is intended to be presented to humans in a readable fashion. Thus, software MAY display it using normal text rendering techniques such as proportional fonts, white-space collapsing, and justification. 2. If the value of"type","type" is "HTML", the content of atom:content MUSTbe a valid Base64 encoding [RFC3548], which when decodedNOT contain child elements, and SHOULD be suitable for handling by software that knows HTML. The HTML markup must be escaped; for example, "<br>" as "<br>". The HTML markup SHOULD be such that it could validly appear directly within an HTML <DIV> element. Receiving software which displays theindicated media type. In this case,content SHOULD use thecharactersmarkup to aid in displaying it. 3. If theBase64 encoding may be preceded and followed invalue of "type" is "XHTML", theatom:content element by whitespace, and lines are separated by a single newline (U+000A) character, as required by XML. 5.13 "atom:copyright" Element The "atom:copyright" element is a Text construct that conveys a human-readable copyright statement for the entry. atom:entry elementscontent of atom:content MAY containan atom:copyright element, but MUST NOT contain more than one.child elements. Theatom:copyright elementcontent SHOULDNOTbeused to convey machine-readable licensing information. If an atom:entry element does not containXHTML text and markup that could validly appear directly within anatom:copyright element, thenxhtml:div element. Receiving software which displays theatom:copyright element ofcontent SHOULD use thecontaining atom:feed element's atom:head element, if present, should be considered to applymarkup tothe entry. 5.14 "atom:head" Element The atom:head element actsaid in displaying it. Escaped markup is interpreted as acontainer for metadata abouttext representation of markup, and MUST NOT be interpreted as markup itself. 4. If thefeed within whichvalue of "type" ends with "+xml" or "/xml", theentry was created. atom:entry elements MAY contain at most one atom:head element.content of atom:content may include child elements, and SHOULD be suitable for handling by software that knows the indicated media type. If theatom:head element"src" attribute ispresent, it SHOULD benot provided, this would normally mean that thefirst"atom:content" element would contain a single child elementof atom:entry. If an atom:entry is copied into one feed from another feed, thenwhich would serve as theatom:headroot element of thesource feed SHOULD be inserted into the atom:entry unlessXML document of theentry, as copied, already contains an atom:head element.indicated type. 5. If theatom:entry already contains an atom:head, then that atom:head SHOULD be copied without modification. [[ ... example ... ]]value of "type" begins with "text/" the content of atom:content MUST NOT contain child elements. Nottingham & Sayre Expires July11,27, 2005 [Page22]24] Internet-Draft Atom Format January 2005 6.Managing Feed State [[ talk about what it meansFor all other values of "type", the content of atom:content MUST be a valid Base64 encoding [RFC3548], which when decoded SHOULD be suitable for handling by software that knows the indicated media type. In this case, the characters in the Base64 encoding may be preceded and followed in the atom:content element by whitespace, and lines are separated by a single newline (U+000A) character. 4.16 The "atom:introspection" Element The "atom:introspection" element is a Service construct that conveys the URI of an introspection file associated with a feed. atomIntrospection = element atom:introspection { atomServiceConstruct } 4.17 The "atom:post" Element The "atom:post" element is a Service construct that conveys the URI used to add entries tokeepaviewfeed. atomPost = element atom:post { atomServiceConstruct } 4.18 The "atom:edit" Element The "atom:edit" element is a Service construct that conveys the URI used to retrieve and edit the source representation of an entry. atomEdit = element atom:edit { atomServiceConstruct } 4.19 The "atom:tagline" Element The "atom:tagline" element is afeed ]]Text construct that conveys a human-readable description or tagline for the feed. atomTagline = element atom:tagline { atomTextConstruct } 4.20 The "atom:generator" Element The "atom:generator" element's content identifies the software agent Nottingham & Sayre Expires July11,27, 2005 [Page23]25] Internet-Draft Atom Format January 20057. Securing Atom Documents Because Atom is an XML-based format, existing XML security mechanisms can beused tosecure its content. Note that while these mechanisms are available to secure Atom documents, they should not be used indiscriminately. 7.1 Digital Signatures The document element of an Atom document (i.e., atom:feedgenerate a feed, for debugging and other purposes. atomGenerator = element atom:generator { atomCommonAttributes, attribute url { atomUri }?, attribute version { text }?, text } The content of this element, when present, MUST be a string that is a human-readable name for the generating agent. The atom:generator element MAY have a "uri" attribute whose value MUST be a URI reference [RFC3986]. When dereferenced, that URI SHOULD produce a representation that is relevant to that agent. The atom:generator element MAY have a "version" attribute that indicates the version of the generating agent. When present, its value is unstructured text. 4.21 The "atom:info" Element The "atom:info" element is a Text construct that conveys a human-readable explanation of the feed format itself. The atom:info element SHOULD NOT be considered meaningful by processors; it is a convenience to publishers. atomInfo = element atom:info { atomTextConstruct } Nottingham & Sayre Expires July 27, 2005 [Page 26] Internet-Draft Atom Format January 2005 5. Managing Feed State [[ talk about what it means to keep a view of a feed ]] Nottingham & Sayre Expires July 27, 2005 [Page 27] Internet-Draft Atom Format January 2005 6. Securing Atom Documents Because Atom is an XML-based format, existing XML security mechanisms can be used to secure its content. 6.1 Digital Signatures The document element of an Atom document (i.e., atom:feed in an Atom Feed Document, atom:entry in an Atom Entry Document) MAY have an Enveloped Signature, as described by XML-Signature and Syntax Processing [W3C.REC-xmldsig-core-20020212].Other XML signature mechanisms MUST NOT be used on the document element of an Atom document.Processors MUST NOT reject an Atom document containing such a signature because they are not capable of verifying it; they MUST continue processing and MAY inform the user of their failure to validate the signature. In other words, the presence of an element with the namespace URI "http://www.w3.org/2000/09/xmldsig#" and a local name of "Signature" as a child of the document element must not cause a processor to fail merely because of its presence. Other elements in an Atom document MUST NOT be signed unless their definitions explicitly specify such a capability.7.26.2 Encryption The document element of an Atom document (i.e., atom:feed in an Atom Feed Document, atom:entry in an Atom Entry Document) MAY be encrypted, using the mechanisms described by XML Encryption Syntax and Processing [W3C.REC-xmlenc-core-20021210].Other XML encryption mechanisms MUST NOT be used on the document element of an Atom document.Nottingham & Sayre Expires July11,27, 2005 [Page24]28] Internet-Draft Atom Format January 20058.7. Embedding Atom in Other Formats [[ ... ]] Nottingham & Sayre Expires July11,27, 2005 [Page25]29] Internet-Draft Atom Format January 20059.8. Extending Atom [[ ... ]] Nottingham & Sayre Expires July11,27, 2005 [Page26]30] Internet-Draft Atom Format January 200510.9. IANA Considerations An Atom Document, when serialized as XML 1.0, can be identified with the following media type: MIME media type name: application MIME subtype name: atom+xml Mandatory parameters: None. Optional parameters: "charset": This parameter has identical semantics to the charset parameter of the "application/xml" media type as specified in RFC 3023 [RFC3023]. [RFC3023]. Encoding considerations: Identical to those of "application/xml" as described in RFC 3023 [RFC3023], section 3.2. Security considerations: As defined in this specification. [[update upon publication]] In addition, as this media type uses the "+xml" convention, it shares the same security considerations as described in RFC 3023 [RFC3023], section 10. Interoperability considerations: There are no known interoperability issues. Published specification: This specification. [[update upon publication]] Applications which use this media type: No known applications currently use this media type. Additional information: Magic number(s): As specified for "application/xml" in RFC 3023 [RFC3023], section 3.2. File extension: .atom Fragment identifiers: As specified for "application/xml" in RFC 3023 [RFC3023], section 5. Base URI: As specified in RFC 3023 [RFC3023], section 6. Macintosh File Type code: TEXT Person and email address to contact for further information: Mark Nottingham <mnot@pobox.com> Intended usage: COMMON Author/Change controller: This specification's author(s). [[update upon publication]]10.19.1 Registry of Link Relations This registry is maintained by IANA and initially contains the two values: "alternate" and "related". New assignments are subject to IESG Approval, as outlined in [RFC2434]. Requests should be made by email to IANA, which will then forward the request to the IESG requesting approval. The request should contain discussion of at Nottingham & Sayre Expires July11,27, 2005 [Page27]31] Internet-Draft Atom Format January 2005 least the following five topics: o A value for the "rel" attribute that conforms to the syntax rule given in Section3.5.14.6.2 o Common name for link type. o Description of link type semantics. o Expected display characteristics. o Security considerations. Nottingham & Sayre Expires July11,27, 2005 [Page28]32] Internet-Draft Atom Format January 200511.10. Security Considerations Atom document can be encrypted and signed using [W3C.REC-xmlenc-core-20021210] and [W3C.REC-xmldsig-core-20020212], respectively, and is subject to the security considerations implied by their use. Nottingham & Sayre Expires July11,27, 2005 [Page29]33] Internet-Draft Atom Format January 200512.11. References12.111.1 Normative References [Atom-autodiscovery] Pilgrim, M., "Atom Feed Autodiscovery", work-in-progress, August 2004. [Atom-protocol] Gregorio, J. and R. Sayre, "The Atom Publishing Protocol", work-in-progress, July 2004. [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981. [RFC1035] Mockapetris, P., "Domain names - implementation and specification", STD 13, RFC 1035, November 1987. [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.[RFC2396bis] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", awaiting RFC number, December 2004.[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998. [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April 2001. [RFC3023] Murata, M., St. Laurent, S. and D. Kohn, "XML Media Types", RFC 3023, January 2001. [RFC3066] Alvestrand, H., "Tags for the Identification of Languages", BCP 47, RFC 3066, January 2001. [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: Timestamps", RFC 3339, July 2002. [RFC3548] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", RFC 3548, July 2003. [RFC3986] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, January 2005. [W3C.NOTE-datetime-19980827] Nottingham & Sayre Expires July11,27, 2005 [Page30]34] Internet-Draft Atom Format January 2005[W3C.NOTE-datetime-19980827]Wolf, M. and C. Wicksteed, "Date and Time Formats", W3C NOTE NOTE-datetime-19980827, August 1998. [W3C.REC-xml-20040204] Yergeau, F., Paoli, J., Sperberg-McQueen, C., Bray, T. and E. Maler, "Extensible Markup Language (XML) 1.0 (Third Edition)", W3C REC REC-xml-20040204, February 2004. [W3C.REC-xml-infoset-20011024] Tobin, R. and J. Cowan, "XML Information Set", W3C FirstEdition REC-xml-infoset-20011024, October 2001. [W3C.REC-xml-names-19990114] Hollander, D., Bray, T. and A. Layman, "Namespaces in XML", W3C REC REC-xml-names-19990114, January 1999. [W3C.REC-xmlbase-20010627] Marsh, J., "XML Base", W3C REC REC-xmlbase-20010627, June 2001. [W3C.REC-xmldsig-core-20020212] Solo, D., Reagle, J. and D. Eastlake, "XML-Signature Syntax and Processing", W3C REC REC-xmldsig-core-20020212, February 2002. [W3C.REC-xmlenc-core-20021210] Reagle, J. and D. Eastlake, "XML Encryption Syntax and Processing", W3C REC REC-xmlenc-core-20021210, December 2002.12.211.2 Informative References [RELAX-NG] OASIS Technical Committee: RELAX NG, "RELAX NG Specification", December 2001. [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998. Nottingham & Sayre Expires July11,27, 2005 [Page 35] Internet-Draft Atom Format January 2005 URIs [1] <http://www.imc.org/atom-syntax/index.html> [2] <http://www.intertwingly.net/wiki/pie/FrontPage> Authors' Addresses Mark Nottingham (editor) EMail: mnot@pobox.com URI: http://www.mnot.net/ Robert Sayre (editor) Boswijck Memex Consulting EMail: rfsayre@boswijck.com URI: http://boswijck.com Nottingham & Sayre Expires July 27, 2005 [Page 36] Internet-Draft Atom Format January 2005 Appendix A. Contributors The following people contributed to preliminary drafts of this document: Tim Bray, Mark Pilgrim, and Sam Ruby. Norman Walsh provided the Relax NG schema. The content and concepts within are a product of the Atom community and the Atom Publishing Format and Protocol Working Group. Nottingham & Sayre Expires July 27, 2005 [Page 37] Internet-Draft Atom Format January 2005 Appendix B. Collected RELAX NG Compact Schema This appendix is informative. # -*- Relax NG -*- namespace local = "" namespace atom = "http://purl.org/atom/ns#draft-ietf-atompub-format-04" namespace s = "http://www.ascc.net/xml/schematron" start = atomFeed | atomEntry # Attribute definitions atomCommonAttributes = attribute xml:base { atomUri }?, attribute xml:lang { atomLanguageTag }? atomVersionAttribute = attribute version {"draft-ietf-atompub-format-05 : do not deploy"} # Common Atom Constructs atomPlainTextConstruct = atomCommonAttributes, attribute type { "TEXT" | "HTML" }?, text atomXHTMLTextConstruct = atomCommonAttributes, attribute type { "XHTML" }, (text|anyElement)* atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct atomPersonConstruct = atomCommonAttributes, (element atom:name { text } & element atom:uri { atomUri }? & element atom:email { atomEmailAddress }?) atomDateConstruct = atomCommonAttributes, xsd:dateTime atomServiceConstruct = atomCommonAttributes, Nottingham & Sayre Expires July 27, 2005 [Page 38] Internet-Draft Atom Format January 2005 attribute href { atomUri } atomIdentityConstruct = atomCommonAttributes, (atomUri) # atom:feed # TODO: Test for multiple atom:link/@rel='alternate' with # the same @type The following tests are simple to do, # but my validator is giving me trouble. # TODO: Debug and add them back # Test for at least one atom:link/@rel='alternate' # Test for atom:author or all atom:entry have atom:author # atom:feed atomFeed = element atom:feed { atomCommonAttributes, atomVersionAttribute, (atomHead & atomEntry* & anyElement*) } # atom:head atomHead = [ s:rule [ context = "atom:head" s:assert [ test = "atom:link[@rel='alternate']" "An atom:feed must have at least one link element with a rel attribute of 'alternate'." ] ] s:rule [ context = "atom:head" s:assert [ test = "atom:author or not(../atom:entry[count(atom:author) = 0])" "An atom:feed must have an atom:author unless all of its atom:entry children have an atom:author." ] ] ] element atom:head { Nottingham & Sayre Expires July 27, 2005 [Page 39] Internet-Draft Atom Format January 2005 atomCommonAttributes, (atomTitle & atomUpdated & atomLink+ & atomId? & atomAuthor? & atomContributor* & atomTagline? & atomGenerator? & atomInfo? & atomCopyright? & atomCategory* & atomIntrospection? & atomPost? & anyElement*) } # atom:entry # TODO: Test for multiple atom:link @rel='alternate' # with the same @type # TODO: Test for required atom:summary atomEntry = [ s:rule [ context = "/atom:entry" s:assert [ test = "@version" "The version attribute is required on standalone atom:entry elements." ] ] s:rule [ context = "atom:entry" s:assert [ test = "atom:link[@rel='alternate']" "An atom:entry must have at least one link element with a rel attribute of 'alternate'