idnits 2.17.1 draft-ietf-atompub-format-05.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** It looks like you're using RFC 3978 boilerplate. You should update this to the boilerplate described in the IETF Trust License Policy document (see https://trustee.ietf.org/license-info), which is required now. -- Found old boilerplate from RFC 3667, Section 5.1 on line 16. -- Found old boilerplate from RFC 3978, Section 5.5 on line 1673. -- Found old boilerplate from RFC 3979, Section 5, paragraph 1 on line 1650. -- Found old boilerplate from RFC 3979, Section 5, paragraph 2 on line 1657. -- Found old boilerplate from RFC 3979, Section 5, paragraph 3 on line 1663. ** Found boilerplate matching RFC 3978, Section 5.4, paragraph 1 (on line 1679), which is fine, but *also* found old RFC 2026, Section 10.4C, paragraph 1 text on line 38. ** The document seems to lack an RFC 3978 Section 5.1 IPR Disclosure Acknowledgement -- however, there's a paragraph with a matching beginning. Boilerplate error? ** This document has an original RFC 3978 Section 5.4 Copyright Line, instead of the newer IETF Trust Copyright according to RFC 4748. ** This document has an original RFC 3978 Section 5.5 Disclaimer, instead of the newer disclaimer which includes the IETF Trust according to RFC 4748. ** The document uses RFC 3667 boilerplate or RFC 3978-like boilerplate instead of verbatim RFC 3978 boilerplate. After 6 May 2005, submission of drafts without verbatim RFC 3978 boilerplate is not accepted. The following non-3978 patterns matched text found in the document. That text should be removed or replaced: By submitting this Internet-Draft, I certify that any applicable patent or other IPR claims of which I am aware have been disclosed, or will be disclosed, and any of which I become aware will be disclosed, in accordance with RFC 3668. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == No 'Intended status' indicated for this document; assuming Proposed Standard Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the RFC 3978 Section 5.4 Copyright Line does not match the current year -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (January 26, 2005) is 7028 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Possible downref: Non-RFC (?) normative reference: ref. 'Atom-autodiscovery' -- Possible downref: Non-RFC (?) normative reference: ref. 'Atom-protocol' ** Obsolete normative reference: RFC 2460 (Obsoleted by RFC 8200) ** Obsolete normative reference: RFC 2822 (Obsoleted by RFC 5322) ** Obsolete normative reference: RFC 3023 (Obsoleted by RFC 7303) ** Obsolete normative reference: RFC 3066 (Obsoleted by RFC 4646, RFC 4647) ** Obsolete normative reference: RFC 3548 (Obsoleted by RFC 4648) -- Obsolete informational reference (is this intentional?): RFC 2434 (Obsoleted by RFC 5226) Summary: 11 errors (**), 0 flaws (~~), 2 warnings (==), 11 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group M. Nottingham, Ed. 3 Internet-Draft 4 Expires: July 27, 2005 R. Sayre, Ed. 5 Boswijck Memex Consulting 6 January 26, 2005 8 The Atom Syndication Format 9 draft-ietf-atompub-format-05 11 Status of this Memo 13 By submitting this Internet-Draft, I certify that any applicable 14 patent or other IPR claims of which I am aware have been disclosed, 15 and any of which I become aware will be disclosed, in accordance with 16 RFC 3668. 18 Internet-Drafts are working documents of the Internet Engineering 19 Task Force (IETF), its areas, and its working groups. Note that 20 other groups may also distribute working documents as 21 Internet-Drafts. 23 Internet-Drafts are draft documents valid for a maximum of six months 24 and may be updated, replaced, or obsoleted by other documents at any 25 time. It is inappropriate to use Internet-Drafts as reference 26 material or to cite them other than as "work in progress." 28 The list of current Internet-Drafts can be accessed at 29 http://www.ietf.org/ietf/1id-abstracts.txt. 31 The list of Internet-Draft Shadow Directories can be accessed at 32 http://www.ietf.org/shadow.html. 34 This Internet-Draft will expire on July 27, 2005. 36 Copyright Notice 38 Copyright (C) The Internet Society (2005). All Rights Reserved. 40 Abstract 42 This document specifies Atom, an XML-based Web content and metadata 43 syndication format. 45 Table of Contents 47 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 48 1.1 Editorial Notes . . . . . . . . . . . . . . . . . . . . . 4 49 1.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . 5 50 1.3 Conformance . . . . . . . . . . . . . . . . . . . . . . . 5 51 1.4 Notational Conventions . . . . . . . . . . . . . . . . . . 5 52 2. Atom Documents . . . . . . . . . . . . . . . . . . . . . . . 7 53 3. Common Atom Constructs . . . . . . . . . . . . . . . . . . . 9 54 3.1 Text Constructs . . . . . . . . . . . . . . . . . . . . . 9 55 3.1.1 "type" Attribute . . . . . . . . . . . . . . . . . . . 9 56 3.2 Person Constructs . . . . . . . . . . . . . . . . . . . . 10 57 3.2.1 The "atom:name" Element . . . . . . . . . . . . . . . 10 58 3.2.2 The "atom:uri" Element . . . . . . . . . . . . . . . . 10 59 3.2.3 The "atom:email" Element . . . . . . . . . . . . . . . 11 60 3.3 Date Constructs . . . . . . . . . . . . . . . . . . . . . 11 61 3.4 Service Constructs . . . . . . . . . . . . . . . . . . . . 11 62 3.4.1 The "href" Attribute . . . . . . . . . . . . . . . . . 11 63 3.5 Identity Constructs . . . . . . . . . . . . . . . . . . . 11 64 3.5.1 Dereferencing Identity Constructs . . . . . . . . . . 12 65 3.5.2 Comparing Identity Constructs . . . . . . . . . . . . 12 66 4. Element Definitions . . . . . . . . . . . . . . . . . . . . 14 67 4.1 The "atom:feed" Element . . . . . . . . . . . . . . . . . 14 68 4.1.1 The "version" Attribute . . . . . . . . . . . . . . . 14 69 4.2 The "atom:head" Element . . . . . . . . . . . . . . . . . 14 70 4.2.1 Usage of "atom:head" within "atom:entry" . . . . . . . 16 71 4.3 The "atom:entry" Element . . . . . . . . . . . . . . . . . 16 72 4.4 The "atom:title" Element . . . . . . . . . . . . . . . . . 18 73 4.5 The "atom:id" Element . . . . . . . . . . . . . . . . . . 18 74 4.6 The "atom:link" Element . . . . . . . . . . . . . . . . . 18 75 4.6.1 The "href" Attribute . . . . . . . . . . . . . . . . . 19 76 4.6.2 The "rel" Attribute . . . . . . . . . . . . . . . . . 19 77 4.6.3 The "type" Attribute . . . . . . . . . . . . . . . . . 20 78 4.6.4 The "hreflang" Attribute . . . . . . . . . . . . . . . 20 79 4.6.5 The "title" Attribute . . . . . . . . . . . . . . . . 20 80 4.6.6 The "length" Attribute . . . . . . . . . . . . . . . . 20 81 4.7 The "atom:updated" Element . . . . . . . . . . . . . . . . 20 82 4.8 The "atom:published" Element . . . . . . . . . . . . . . . 21 83 4.9 The "atom:author" Element . . . . . . . . . . . . . . . . 21 84 4.10 The "atom:contributor" Element . . . . . . . . . . . . . 21 85 4.11 The "atom:host" Element . . . . . . . . . . . . . . . . 21 86 4.12 The "atom:copyright" Element . . . . . . . . . . . . . . 21 87 4.13 The "atom:category" Element . . . . . . . . . . . . . . 22 88 4.13.1 The "term" Attribute . . . . . . . . . . . . . . . . 22 89 4.13.2 The "scheme" Attribute . . . . . . . . . . . . . . . 22 90 4.13.3 The "label" attribute . . . . . . . . . . . . . . . 22 91 4.14 The "atom:summary" Element . . . . . . . . . . . . . . . 22 92 4.15 The "atom:content" Element . . . . . . . . . . . . . . . 23 93 4.15.1 The "type" attribute . . . . . . . . . . . . . . . . 23 94 4.15.2 The "src" attribute . . . . . . . . . . . . . . . . 23 95 4.15.3 Processing Model . . . . . . . . . . . . . . . . . . 24 96 4.16 The "atom:introspection" Element . . . . . . . . . . . . 25 97 4.17 The "atom:post" Element . . . . . . . . . . . . . . . . 25 98 4.18 The "atom:edit" Element . . . . . . . . . . . . . . . . 25 99 4.19 The "atom:tagline" Element . . . . . . . . . . . . . . . 25 100 4.20 The "atom:generator" Element . . . . . . . . . . . . . . 25 101 4.21 The "atom:info" Element . . . . . . . . . . . . . . . . 26 102 5. Managing Feed State . . . . . . . . . . . . . . . . . . . . 27 103 6. Securing Atom Documents . . . . . . . . . . . . . . . . . . 28 104 6.1 Digital Signatures . . . . . . . . . . . . . . . . . . . . 28 105 6.2 Encryption . . . . . . . . . . . . . . . . . . . . . . . . 28 106 7. Embedding Atom in Other Formats . . . . . . . . . . . . . . 29 107 8. Extending Atom . . . . . . . . . . . . . . . . . . . . . . . 30 108 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . 31 109 9.1 Registry of Link Relations . . . . . . . . . . . . . . . . 31 110 10. Security Considerations . . . . . . . . . . . . . . . . . . 33 111 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 112 11.1 Normative References . . . . . . . . . . . . . . . . . . . 34 113 11.2 Informative References . . . . . . . . . . . . . . . . . . 35 114 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 36 115 A. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 37 116 B. Collected RELAX NG Compact Schema . . . . . . . . . . . . . 38 117 C. Revision History . . . . . . . . . . . . . . . . . . . . . . 45 118 Intellectual Property and Copyright Statements . . . . . . . 47 120 1. Introduction 122 Atom is an XML-based document format which describes lists of related 123 information known as "feeds". Feeds are composed of a number of 124 items, known as "entries", each with an extensible set of attached 125 metadata. For example, each entry has a title. 127 The primary use case that Atom addresses is the syndication of Web 128 content such as Weblogs and news headlines to Web sites as well as 129 directly to user agents. However, nothing precludes it from being 130 used for other purposes and kinds of content. 132 Details of communication protocols between software agents using Atom 133 can be found in the Atom Protocol specification [Atom-protocol]. 135 [[ more motivation / design principles ]] 137 1.1 Editorial Notes 139 The Atom format is a work-in-progress, and this draft is both 140 incomplete and likely to change rapidly. As a result, THE FORMAT 141 DESCRIBED BY THIS DRAFT SHOULD NOT BE DEPLOYED, either in production 142 systems or in any non-experimental fashion on the Internet. 144 Discussion of this draft happens in two fora; 146 The mailing list [1] 147 The Atom Wiki Web site [2] 149 Active development takes place on the mailing list, while the Wiki is 150 used for issue tracking and new proposals. 152 This document is an early draft and known to be incomplete. Topics 153 marked [[like this]] indicate where additional text is likely to be 154 added. 156 1.2 Example 158 A minimal, single-entry Atom Feed Document: 160 161 163 164 Example Feed 165 166 2003-12-13T18:30:02Z 167 168 John Doe 169 170 171 172 Atom-Powered Robots Run Amok 173 174 vemmi://example.org/2003/32397 175 2003-12-13T18:30:02Z 176 177 179 1.3 Conformance 181 [[ talk about atom documents and atom consumers, and how requirements 182 are placed on them ]] 184 1.4 Notational Conventions 186 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 187 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 188 document are to be interpreted as described in BCP 14, [RFC2119]. 190 This specification uses XML Namespaces [W3C.REC-xml-names-19990114] 191 to uniquely identify XML elements and attribute names. It uses the 192 following namespace prefixes for the indicated namespace URIs; 194 "atom": http://purl.org/atom/ns#draft-ietf-atompub-format-05 196 Note that the choice of any namespace prefix is arbitrary and not 197 semantically significant. 199 Atom is specified using terms from the XML Infoset 200 [W3C.REC-xml-infoset-20011024]. However, this specification uses a 201 shorthand for two common terms; the phrase "Information Item" is 202 omitted when naming Element Information Items and Attribute 203 Information Items. 205 Therefore, when this specification uses the term "element," it is 206 referring to an Element Information Item in Infoset terms. Likewise, 207 when it uses the term "attribute," it is referring to an Attribute 208 Information Item. 210 Some sections of this specification are illustrated with fragments of 211 a non-normative RELAX NG Compact schema [RELAX-NG]. However, the 212 text of this specification provides the definition of conformance. A 213 collected schema appears in an informative appendix. 215 2. Atom Documents 217 This specification describes two kinds of Atom Documents; Atom Feed 218 Documents and Atom Entry Documents. 220 An Atom Feed Document is a representation of an Atom feed, including 221 metadata about the feed, and some or all of the entries associated 222 with it. Its document element is atom:feed. 224 An Atom Entry Document represents exactly one Atom Entry, outside of 225 the context of an Atom Feed. Its document element is atom:entry. 227 namespace atom = 228 "http://purl.org/atom/ns#draft-ietf-atompub-format-05" 230 start = atomFeed | atomEntry 232 Both kinds of Atom documents are specified in terms of the XML 233 Information Set, serialised as XML 1.0 [W3C.REC-xml-20040204] and 234 identified with the "application/atom+xml" media type. Atom 235 Documents MUST be well-formed XML. 237 Atom constrains the appearance and content of elements and 238 attributes; unless otherwise stated, Atom Documents MAY contain other 239 Information Items as appropriate. In particular, Comment Information 240 Items and Processing Instruction Information Items SHOULD be ignored 241 in the normal processing of an Atom Document. 243 Any element in an Atom Document MAY have an xml:base attribute. XML 244 Base [W3C.REC-xmlbase-20010627] processing MUST be applied to any 245 relative reference [RFC3986] present in an Atom Document. This 246 includes such elements and attributes as specified by Atom itself, as 247 well as those specified by extensions to Atom. 249 Any element in an Atom Document MAY have an xml:lang attribute, whose 250 content indicates the natural language of the element's content. 251 Requirements regarding the content and interpretation of xml:lang are 252 specified in XML 1.0 [W3C.REC-xml-20040204] Section 2.12. 254 atomCommonAttributes = 255 attribute xml:base { atomUri }?, 256 attribute xml:lang { atomLanguageTag }? 258 [[ discussion of URI escaping and i18n, IRI ]] 260 [[ discussion of white space ]] 262 Atom is extensible. See the section titled 'Extending Atom' later in 263 this document for a full description of how Atom Documents can be 264 extended. 266 3. Common Atom Constructs 268 Many of Atom's elements share a few common structures. This section 269 defines a few such structures and their requirements for convenient 270 reference by the appropriate element definitions. 272 When an element is identified as being a particular kind of 273 construct, it inherits the corresponding requirements from that 274 construct's definition in this section. 276 3.1 Text Constructs 278 A Text construct contains human readable text, usually in fairly 279 small quantities. 281 atomPlainTextConstruct = 282 atomCommonAttributes, 283 attribute type { "TEXT" | "HTML" }?, 284 text 286 atomXHTMLTextConstruct = 287 atomCommonAttributes, 288 attribute type { "XHTML" }, 289 (text|anyElement)* 291 atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct 293 3.1.1 "type" Attribute 295 Text constructs MAY have a "type" attribute. When present, the value 296 MUST be one of "TEXT", "HTML" or "XHTML". If the "type" attribute is 297 not provided, software MUST behave as though it were present with a 298 value of "TEXT". 300 Note that MIME media types [RFC2045] are not acceptable values for 301 the "type" attribute. 303 If the value is "TEXT", the content of the Text construct MUST NOT 304 contain child elements. Such text is intended to be presented to 305 humans in a readable fashion. Thus, software MAY display it using 306 normal text rendering techniques such as proportional fonts, 307 white-space collapsing, and justification. 309 If the value of "type" is "HTML", the content of the Text construct 310 MUST NOT contain child elements, and SHOULD be suitable for handling 311 by software that knows HTML. The HTML markup must be escaped; for 312 example, "
" as "<br>". The HTML markup SHOULD be such that it 313 could validly appear directly within an HTML
element. 314 Receiving software which displays the content MAY use the markup to 315 aid in displaying it. 317 [[example atom entry w/ escaped markup]] 319 If the value of "type" is "XHTML", the content of the Text construct 320 MAY contain child elements. The content SHOULD be XHTML text and 321 markup that could validly appear directly within an xhtml:div 322 element. Receiving software which displays the content MAY use the 323 markup to aid in displaying it. Escaped markup is interpreted as a 324 text representation of markup, and MUST NOT be interpreted as markup 325 itself. 327 3.2 Person Constructs 329 A Person construct is an element that describes a person, 330 corporation, or similar entity. 332 Person constructs MAY be extended by namespace-qualified element 333 children. 335 This specification assigns no significance to the order of appearance 336 of the child elements in a Person construct. 338 atomPersonConstruct = 339 atomCommonAttributes, 340 (element atom:name { text } 341 & element atom:uri { atomUri }? 342 & element atom:email { atomEmailAddress }?) 344 3.2.1 The "atom:name" Element 346 The "atom:name" element's content conveys a human-readable name for 347 the person. Person constructs MUST contain exactly one "atom:name" 348 element. 350 3.2.2 The "atom:uri" Element 352 The "atom:uri" element's content conveys a URI associated with the 353 person. Person constructs MAY contain an atom:uri element, but MUST 354 NOT contain more than one. The content of atom:uri in a Person 355 construct MUST be a URI reference [RFC3986]. 357 xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the 358 atom:uri element's content. 360 3.2.3 The "atom:email" Element 362 The "atom:email" element's content conveys an e-mail address 363 associated with the persons. Person constructs MAY contain an 364 atom:email element, but MUST NOT contain more than one. Its content 365 MUST be an e-mail address [RFC2822]. 367 3.3 Date Constructs 369 A Date construct is an element whose content MUST conform to the 370 date-time BNF rule in [RFC3339]. 372 atomDateConstruct = 373 atomCommonAttributes, 374 xsd:dateTime 376 3.4 Service Constructs 378 A Service construct is an empty element that conveys the URI of an 379 Atom Publishing Protocol [Atom-protocol] service associated with an 380 entry or feed. 382 atomServiceConstruct = 383 atomCommonAttributes, 384 attribute href { atomUri } 386 3.4.1 The "href" Attribute 388 The "href" attribute contains the a URI of the service. atom:service 389 elements MUST have a "href" attribute, whose value MUST be a URI 390 reference [RFC3986]. 392 xml:base processing MUST be applied to the "href" attribute. 394 3.5 Identity Constructs 396 An Identity construct is an element whose content conveys a 397 permanent, universally unique identifier for the construct's parent. 398 Its content MUST be a URI, as defined by [RFC3986]. Note that the 399 definition of "URI" excludes relative references. 401 When an Atom document is relocated, migrated, syndicated, 402 republished, exported or imported, the content of its Identity 403 construct MUST NOT change. Put another way, an Identity construct 404 pertains to all instantiations of a particular Atom entry or feed; 405 revisions retain the same content in their Identity constructs. 407 atomIdentityConstruct = 408 atomCommonAttributes, 409 (atomUri) 411 3.5.1 Dereferencing Identity Constructs 413 The content of an Identity construct MAY be dereferencable (e.g. an 414 HTTP URI). However, processors MUST NOT assume it to be 415 dereferencable. 417 The content of an Identity construct MUST be created in a way that 418 assures uniqueness, and it is suggested that the Identity construct 419 be stored along with the associated resource. 421 Because of the risk of confusion between URIs that would be 422 equivalent if dereferenced, the following normalization strategy is 423 strongly encouraged when generating Identity constructs: 425 o Provide the scheme in lowercase characters. 426 o Provide the host, if any, in lowercase characters. 427 o Only perform percent-encoding where it is essential. 428 o Use uppercase A-through-F characters when percent-encoding. 429 o Prevent dot-segments appearing in paths. 430 o For schemes that define a default authority, use an empty 431 authority if the default is desired. 432 o For schemes that define an empty path to be equivalent to a path 433 of "/", use "/". 434 o For schemes that define a port, use an empty port if the default 435 is desired. 436 o Preserve empty fragment identifiers and queries. 437 o Ensure that all portions of the URI are UTF-8 encoded NFC form 438 Unicode strings. 440 3.5.2 Comparing Identity Constructs 442 Instances of Identity constructs can be compared to determine whether 443 an entry or feed is the same as one seen before. Processors MUST 444 compare Identity constructs on a character-by-character basis in a 445 case-sensitive fashion. 447 As a result, two URIs that resolve to the same resource but are not 448 character-for-character identical will be considered different for 449 the purposes of Identifier comparison. 451 For example, "http://www.example.org/thing", 452 "http://www.example.org/Thing", "http://www.EXAMPLE.org/thing" and 453 "HTTP://www.example.org/thing" will all be considered different 454 identifiers, despite their differences in case. 456 Likewise, "http://www.example.com/~bob", 457 "http://www.example.com/%7ebob" and "http://www.example.com/%7Ebob" 458 will all be considered different identifiers, because URI %-escaping 459 is significant for the purposes of comparison. 461 4. Element Definitions 463 4.1 The "atom:feed" Element 465 The "atom:feed" element is the document (i.e., top-level) element of 466 an Atom Feed Document, acting as a container for metadata and data 467 associated with the feed. Its first element child MUST be atom:head, 468 which MAY be followed zero or more atom:entry child elements. 470 atomFeed = 471 element atom:feed { 472 atomCommonAttributes, 473 atomVersionAttribute, 474 (atomHead 475 & atomEntry* 476 & anyElement*) 477 } 479 4.1.1 The "version" Attribute 481 atom:feed elements MUST have a "version" attribute whose content 482 indicates the version of the Atom specification that the feed 483 conforms to. The content of this attribute is unstructured text. 485 The version identifier for this specification is 486 "draft-ietf-atompub-format-05: do not deploy". 488 atomVersionAttribute = 489 attribute version {"draft-ietf-atompub-format-05 : do not deploy"} 491 4.2 The "atom:head" Element 493 The atom:head element acts as a container for metadata about the feed 494 itself. 496 The atom:head element MAY contain any namespace-qualified 497 [W3C.REC-xml-names-19990114] elements as children. This 498 specification assigns no significance to the order of appearance of 499 the child elements of atom:head. 501 atomHead = 502 element atom:head { 503 atomCommonAttributes, 504 (atomTitle 505 & atomUpdated 506 & atomLink+ 507 & atomId? 508 & atomAuthor? 509 & atomContributor* 510 & atomTagline? 511 & atomGenerator? 512 & atomInfo? 513 & atomCopyright? 514 & atomCategory* 515 & atomIntrospection? 516 & atomPost? 517 & anyElement*) 518 } 520 The following child elements are defined by this specification (note 521 that the presence of some of these elements is required): 523 o atom:head elements MUST contain exactly one atom:title element. 524 o atom:head elements MUST contain at least one atom:link element 525 with a rel attribute value of "alternate". 526 o atom:head elements MUST NOT contain more than one atom:link 527 element with a rel attribute value of "alternate" that has the 528 same type attribute value. If a feed's atom:link element with 529 type="alternate" resolves to an HTML document, then that document 530 SHOULD have a autodiscovery link element [Atom-autodiscovery] that 531 reflects back to the feed. atom:head elements MAY contain 532 additional atom:link elements beyond those described above. 533 o atom:head elements MUST contain exactly one atom:author element, 534 UNLESS all of the atom:feed element's child atom:entry elements 535 contain an atom:author element. atom:head elements MUST NOT 536 contain more than one atom:author element. [[inheritance]] 537 o atom:head elements MUST NOT contain more than one an 538 atom:contributor element. 539 o atom:head elements MUST NOT contain more than one an 540 atom:copyright element. 541 o atom:head elements MUST NOT contain more than one an atom:id 542 element. 543 o atom:head elements MUST contain exactly one atom:updated element. 544 o atom:head elements MAY contain any number of atom:category 545 elements. 546 o atom:head elements MUST NOT contain more than one atom:post 547 element. 549 o atom:head elements MUST NOT contain more than one 550 atom:introspection element. 551 o atom:head elements MUST NOT contain more than one atom:tagline 552 element. 553 o atom:head elements MUST NOT contain more than one atom:generator 554 element. 555 o atom:head elements MUST NOT contain more than one atom:info 556 element. 558 4.2.1 Usage of "atom:head" within "atom:entry" 560 In this case, the atom:head element acts as a container for metadata 561 about the feed within which the entry was created. 563 If an atom:entry is copied into one feed from another feed, then the 564 atom:head element of the source feed SHOULD be inserted into the 565 atom:entry unless the entry, as copied, already contains an atom:head 566 element. If the atom:entry already contains an atom:head, then that 567 atom:head SHOULD be copied without modification. 569 [[ ... example ... ]] 571 4.3 The "atom:entry" Element 573 The "atom:entry" element represents an individual entry. This 574 element can appear as a child of the atom:feed element, or it can 575 appear as the document (i.e., top-level) element of a standalone Atom 576 Entry Document. 578 When appearing in an Atom Entry Document, atom:entry elements MUST 579 have a "version" attribute whose content indicates the version of the 580 Atom specification that the entry conforms to. 582 The version identifier for this specification is 583 "draft-ietf-atompub-format-05: do not deploy". 585 The atom:entry element MAY contain any namespace-qualified 586 [W3C.REC-xml-names-19990114] elements as children. This 587 specification assigns no significance to the order of appearance of 588 the child elements of atom:entry. 590 atomEntry = 591 element atom:entry { 592 atomCommonAttributes, 593 atomVersionAttribute?, 594 (atomTitle 595 & atomId 596 & atomLink* 597 & atomUpdated 598 & atomPublished? 599 & atomAuthor? 600 & atomContributor* 601 & atomHost? 602 & atomCopyright? 603 & atomCategory* 604 & atomEdit? 605 & atomSummary? 606 & atomContent? 607 & atomHead? 608 & anyElement*) 609 } 611 The following child elements are defined by this specification (note 612 that it requires the presence of some of these elements): 614 o atom:entry elements MUST have exactly one "atom:title" element. 615 o atom:entry elements MUST contain exactly one atom:id element. 616 o atom:entry elements that contain no child atom:content element 617 MUST contain at least one atom:link element with a rel attribute 618 value of "alternate". atom:entry elements MUST NOT contain more 619 than one atom:link element with a rel attribute value of 620 "alternate" that has the same type attribute value. atom:entry 621 elements MAY contain additional atom:link elements beyond those 622 described above. 623 o atom:entry elements MUST contain exactly one atom:updated element. 624 o atom:entry elements MUST NOT contain more than one atom:published 625 element. 626 o atom:entry elements MUST contain exactly one atom:author element, 627 unless, in an Atom Feed Document, the atom:head element contains 628 an atom:author element itself. atom:entry elements MUST NOT 629 contain more than one atom:author element. 630 o atom:entry elements MUST NOT contain more than one 631 atom:contributor element. 632 o atom:entry elements MUST NOT contain more than one atom:host 633 element. 634 o atom:entry elements MUST NOT contain more than one atom:copyright 635 element. 636 o atom:entry elements MAY contain any number of atom:category 637 elements. 639 o atom:entry elements MUST contain an atom:summary element in any of 640 the following cases: 641 * the atom:entry element contains no atom:content element. 642 * the atom:entry contains an atom:content which has a "src" 643 attribute (and is thus empty). 644 * the atom:entry contains content which is encoded in Base64; 645 i.e. the "type" attribute of atom:content is a MIME media type 646 [RFC2045] and does not begin with "text/" nor end with "+xml". 647 o atom:entry elements MUST NOT contain more than one atom:summary 648 element. 649 o atom:entry elements MUST NOT contain more than one atom:edit 650 element. 651 o atom:entry elements MUST NOT contain more than one atom:head 652 element. 654 4.4 The "atom:title" Element 656 The "atom:title" element is a Text construct that conveys a 657 human-readable title for an entry or feed. 659 atomTitle = element atom:title { atomTextConstruct } 661 4.5 The "atom:id" Element 663 The "atom:id" element is an Identity construct that conveys a 664 permanent, universally unique identifier for an entry or feed. 666 atomId = element atom:id { atomIdentityConstruct } 668 4.6 The "atom:link" Element 670 The atom:link element is an empty element that defines a reference 671 from an Atom Document to a Web resource. 673 atomLink = element atom:link { 674 atomCommonAttributes, 675 attribute href { atomUri }, 676 attribute rel { atomNCName | atomUri }?, 677 attribute type { atomMediaType }?, 678 attribute hreflang { atomLanguageTag }?, 679 attribute title { text }?, 680 attribute length { text }?, 681 empty 683 } 685 4.6.1 The "href" Attribute 687 The "href" attribute contains the link's URI. Link constructs MUST 688 have a href attribute, whose value MUST be a URI reference [RFC3986]. 690 xml:base [W3C.REC-xmlbase-20010627] processing MUST be applied to the 691 href attribute's content. 693 4.6.2 The "rel" Attribute 695 Link elements MAY have an "rel" attribute that indicates the link 696 relation type. If the "rel" attribute is not present, the link 697 element MUST be interpreted as if the link relation type is 698 "alternate". 700 rel_attribute = segment-nz-nc / URI 702 The value of "rel" MUST be either a name, which is non-empty and does 703 not contain any colon (":") characters, or a URI [RFC3986]. Note 704 that use of a relative reference is not allowed. If a name is given, 705 implementations MUST consider the link relation type to be equivalent 706 to the same name registered within the IANA Registry of Link 707 Relations Section 9, and thus the URI that would be obtained by 708 appending the value of the rel attribute to the string 709 "http://www.iana.org/assignments/relation/". The value of "rel" 710 describes the meaning of the link, but does not impose any behavioral 711 requirements on implementations. 713 This document defines two initial values for the Registry of Link 714 Relations: 716 The value "alternate" signifies that the URI in the value of the href 717 attribute identifies an alternate version of the resource described 718 by the containing element. 720 The value "related" signifies that the URI in the value of the href 721 attribute identifies a resource related to the resource described by 722 the containing atom:feed or atom:entry element. For example, the 723 feed for a site which discusses the performance of the search engine 724 at "http://search.example.com" might contain, as a child of 725 atom:head: 727 728 An identical link might appear as a child of any atom:entry whose 729 content contains a discussion of that same search engine. 731 4.6.3 The "type" Attribute 733 Link elements MAY have a type attribute, whose value MUST conform to 734 the syntax of a MIME media type [RFC2045]. 736 The type attribute's value is an advisory media type; it is a hint 737 about the type of the representation which is expected to be returned 738 when the value of the href attribute is dereferenced. Note that the 739 type attribute does not override the actual media type returned with 740 the representation. 742 4.6.4 The "hreflang" Attribute 744 The "hreflang" attribute's content describes the language of the 745 resource pointed to by the href attribute. When used together with 746 the rel="alternate", it implies a translated version of the entry. 747 Link elements MAY have an hreflang attribute, whose value MUST be a 748 language tag [RFC3066]. 750 4.6.5 The "title" Attribute 752 The "title" attribute conveys human-readable information about the 753 link. Link elements MAY have a title attribute. 755 4.6.6 The "length" Attribute 757 The "length" attribute indicates an advisory length of the linked 758 content in octets; it is a hint about the content length of the 759 representation returned when the URI in the href attribute is 760 dereferenced. Note that the length attribute does not override the 761 actual content length of the representation as reported by the 762 underlying protocol. 764 Link elements MAY have a length attribute. 766 4.7 The "atom:updated" Element 768 The "atom:updated" element is a Date construct indicating the most 769 recent instant in time when an entry or feed was modified in a way 770 the producer considers significant. Therefore, not all modifications 771 necessarily result in a changed atom:updated value. 773 Publishers MAY change the value of this element over time. 774 Processors MAY present entries sorted using this value. Processors 775 MAY choose not to present entries until the instant in time specified 776 in the atom:updated element has passed. 778 atomUpdated = element atom:updated { atomDateConstruct } 780 4.8 The "atom:published" Element 782 The "atom:published" element is a Date construct indicating an 783 instant in time associated with an event early in the life cycle of 784 the entry. Typically, atom:published will be associated with the 785 initial creation or first availability of the resource. 787 Processors MAY present entries sorted using this value. Processors 788 MAY choose not to present entries until the instant in time specified 789 in the atom:published element has passed. 791 4.9 The "atom:author" Element 793 The "atom:author" element is a Person construct that indicates the 794 default author of the an entry or feed 796 atomAuthor = element atom:author { atomPersonConstruct } 798 4.10 The "atom:contributor" Element 800 The "atom:contributor" element is a Person construct that indicates a 801 person or other entity who contributes to the entry. 803 atomContributor = element atom:contributor { atomPersonConstruct } 805 4.11 The "atom:host" Element 807 The "atom:host" element's content conveys a domain name or network 808 address associated with an entry's origin. Its content MUST be a 809 domain name [RFC1035], a dotted-decimal IPv4 address [RFC0791], or a 810 colon-delimited IPv6 address [RFC2460]. 812 4.12 The "atom:copyright" Element 814 The "atom:copyright" element is a Text construct that conveys a 815 human-readable copyright statement for an entry or feed. 817 The atom:copyright element SHOULD NOT be used to convey 818 machine-readable licensing information. 820 If an atom:entry element does not contain an atom:copyright element, 821 then the atom:copyright element of the containing atom:feed element's 822 atom:head element, if present, should be considered to apply to the 823 entry. 825 4.13 The "atom:category" Element 827 Category elements contain information about a category to which an 828 Atom feed or entry is associated. 830 atomCategory = element atom:category { 831 atomCommonAttributes, 832 attribute term { text }, 833 attribute scheme { atomUri }?, 834 attribute label { text }?, 835 empty 836 } 838 4.13.1 The "term" Attribute 840 The "term" attribute is a string which identifies the category to 841 which the entry or feed belongs. Category elements MUST have a 842 "term" attribute. 844 4.13.2 The "scheme" Attribute 846 The "scheme" attribute is a URI that identifies a categorization 847 scheme. Category elements MAY have a "scheme" attribute. 849 4.13.3 The "label" attribute 851 The "label" attribute provides a human-readable label that may be 852 displayed in end-user applications. Category elements MAY have a 853 "label" attribute. 855 4.14 The "atom:summary" Element 857 The "atom:summary" element is a Text construct that conveys a short 858 summary, abstract or excerpt of an entry. 860 atomSummary = element atom:summary { atomTextConstruct } 862 4.15 The "atom:content" Element 864 The "atom:content" element either contains or links to the content of 865 the entry. atom:entry elements MUST contain zero or one atom:content 866 elements. 868 atomInlineTextContent = 869 element atom:content { 870 atomCommonAttributes, 871 attribute type { "TEXT" | "HTML" | atomMediaType }?, 872 (text)* 873 } 875 atomInlineXHTMLContent = 876 element atom:content { 877 atomCommonAttributes, 878 attribute type { "XHTML" | atomMediaType }?, 879 (text|anyElement)* 880 } 882 atomOutOfLineContent = 883 element atom:content { 884 atomCommonAttributes, 885 attribute type { "TEXT" | "HTML" | "XHTML" | atomMediaType }?, 886 attribute src { atomUri }, 887 empty 888 } 890 atomContent = atomInlineTextContent 891 | atomInlineXHTMLContent 892 | atomOutOfLineContent 894 4.15.1 The "type" attribute 896 atom:content MAY have a "type" attribute, When present, the value MAY 897 be one of "TEXT", "HTML", or "XHTML". Failing that, it MUST be a 898 MIME media type [RFC2045] in which, to use the terminology of Section 899 5 of [RFC2045], the top level is a discrete type. If the type 900 attribute is not provided, software MUST behave as though it were 901 present with a value of "TEXT". 903 4.15.2 The "src" attribute 905 atom:content MAY have a "src" attribute, whose value MUST be a URI 906 reference [RFC3986]. If the "src" attribute is present, software MAY 907 use the URI to retrieve the content. If the "src" attribute is 908 present, atom:content MUST be empty. That is to say, the content may 909 be retrievable using "src=" URI, or it may be contained within 910 atom:content, but not both. 912 If the "src" attribute is present, the "type" attribute SHOULD be 913 provided and MUST be a MIME media type [RFC2045], rather than "TEXT", 914 "HTML", or "XHTML". The value is advisory; that is to say, upon 915 dereferencing the URI to retrieve the content, if the server 916 providing that content also provides a media type, the 917 server-provided media type is authoritative. 919 If the value of type begins with "text/" or ends with "+xml", the 920 content SHOULD be local; that is to say, no "src" attribute should be 921 provided. 923 4.15.3 Processing Model 925 Software MUST apply the following rules in the order below to 926 ascertain the rules governing the content of "atom:content". 928 1. If the value is "TEXT", the content of atom:content MUST NOT 929 contain child elements. Such text is intended to be presented to 930 humans in a readable fashion. Thus, software MAY display it 931 using normal text rendering techniques such as proportional 932 fonts, white-space collapsing, and justification. 933 2. If the value of "type" is "HTML", the content of atom:content 934 MUST NOT contain child elements, and SHOULD be suitable for 935 handling by software that knows HTML. The HTML markup must be 936 escaped; for example, "
" as "<br>". The HTML markup 937 SHOULD be such that it could validly appear directly within an 938 HTML
element. Receiving software which displays the 939 content SHOULD use the markup to aid in displaying it. 940 3. If the value of "type" is "XHTML", the content of atom:content 941 MAY contain child elements. The content SHOULD be XHTML text and 942 markup that could validly appear directly within an xhtml:div 943 element. Receiving software which displays the content SHOULD 944 use the markup to aid in displaying it. Escaped markup is 945 interpreted as a text representation of markup, and MUST NOT be 946 interpreted as markup itself. 947 4. If the value of "type" ends with "+xml" or "/xml", the content of 948 atom:content may include child elements, and SHOULD be suitable 949 for handling by software that knows the indicated media type. If 950 the "src" attribute is not provided, this would normally mean 951 that the "atom:content" element would contain a single child 952 element which would serve as the root element of the XML document 953 of the indicated type. 954 5. If the value of "type" begins with "text/" the content of 955 atom:content MUST NOT contain child elements. 957 6. For all other values of "type", the content of atom:content MUST 958 be a valid Base64 encoding [RFC3548], which when decoded SHOULD 959 be suitable for handling by software that knows the indicated 960 media type. In this case, the characters in the Base64 encoding 961 may be preceded and followed in the atom:content element by 962 whitespace, and lines are separated by a single newline (U+000A) 963 character. 965 4.16 The "atom:introspection" Element 967 The "atom:introspection" element is a Service construct that conveys 968 the URI of an introspection file associated with a feed. 970 atomIntrospection = 971 element atom:introspection { atomServiceConstruct } 973 4.17 The "atom:post" Element 975 The "atom:post" element is a Service construct that conveys the URI 976 used to add entries to a feed. 978 atomPost = element atom:post { atomServiceConstruct } 980 4.18 The "atom:edit" Element 982 The "atom:edit" element is a Service construct that conveys the URI 983 used to retrieve and edit the source representation of an entry. 985 atomEdit = element atom:edit { atomServiceConstruct } 987 4.19 The "atom:tagline" Element 989 The "atom:tagline" element is a Text construct that conveys a 990 human-readable description or tagline for the feed. 992 atomTagline = element atom:tagline { atomTextConstruct } 994 4.20 The "atom:generator" Element 996 The "atom:generator" element's content identifies the software agent 997 used to generate a feed, for debugging and other purposes. 999 atomGenerator = element atom:generator { 1000 atomCommonAttributes, 1001 attribute url { atomUri }?, 1002 attribute version { text }?, 1003 text 1004 } 1006 The content of this element, when present, MUST be a string that is a 1007 human-readable name for the generating agent. 1009 The atom:generator element MAY have a "uri" attribute whose value 1010 MUST be a URI reference [RFC3986]. When dereferenced, that URI 1011 SHOULD produce a representation that is relevant to that agent. 1013 The atom:generator element MAY have a "version" attribute that 1014 indicates the version of the generating agent. When present, its 1015 value is unstructured text. 1017 4.21 The "atom:info" Element 1019 The "atom:info" element is a Text construct that conveys a 1020 human-readable explanation of the feed format itself. The atom:info 1021 element SHOULD NOT be considered meaningful by processors; it is a 1022 convenience to publishers. 1024 atomInfo = element atom:info { atomTextConstruct } 1026 5. Managing Feed State 1028 [[ talk about what it means to keep a view of a feed ]] 1030 6. Securing Atom Documents 1032 Because Atom is an XML-based format, existing XML security mechanisms 1033 can be used to secure its content. 1035 6.1 Digital Signatures 1037 The document element of an Atom document (i.e., atom:feed in an Atom 1038 Feed Document, atom:entry in an Atom Entry Document) MAY have an 1039 Enveloped Signature, as described by XML-Signature and Syntax 1040 Processing [W3C.REC-xmldsig-core-20020212]. 1042 Processors MUST NOT reject an Atom document containing such a 1043 signature because they are not capable of verifying it; they MUST 1044 continue processing and MAY inform the user of their failure to 1045 validate the signature. 1047 In other words, the presence of an element with the namespace URI 1048 "http://www.w3.org/2000/09/xmldsig#" and a local name of "Signature" 1049 as a child of the document element must not cause a processor to fail 1050 merely because of its presence. 1052 Other elements in an Atom document MUST NOT be signed unless their 1053 definitions explicitly specify such a capability. 1055 6.2 Encryption 1057 The document element of an Atom document (i.e., atom:feed in an Atom 1058 Feed Document, atom:entry in an Atom Entry Document) MAY be 1059 encrypted, using the mechanisms described by XML Encryption Syntax 1060 and Processing [W3C.REC-xmlenc-core-20021210]. 1062 7. Embedding Atom in Other Formats 1064 [[ ... ]] 1066 8. Extending Atom 1068 [[ ... ]] 1070 9. IANA Considerations 1072 An Atom Document, when serialized as XML 1.0, can be identified with 1073 the following media type: 1075 MIME media type name: application 1076 MIME subtype name: atom+xml 1077 Mandatory parameters: None. 1078 Optional parameters: 1079 "charset": This parameter has identical semantics to the charset 1080 parameter of the "application/xml" media type as specified in 1081 RFC 3023 [RFC3023]. [RFC3023]. 1082 Encoding considerations: Identical to those of "application/xml" as 1083 described in RFC 3023 [RFC3023], section 3.2. 1084 Security considerations: As defined in this specification. [[update 1085 upon publication]] 1086 In addition, as this media type uses the "+xml" convention, it 1087 shares the same security considerations as described in RFC 3023 1088 [RFC3023], section 10. 1089 Interoperability considerations: There are no known interoperability 1090 issues. 1091 Published specification: This specification. [[update upon 1092 publication]] 1093 Applications which use this media type: No known applications 1094 currently use this media type. 1096 Additional information: 1098 Magic number(s): As specified for "application/xml" in RFC 3023 1099 [RFC3023], section 3.2. 1100 File extension: .atom 1101 Fragment identifiers: As specified for "application/xml" in RFC 3023 1102 [RFC3023], section 5. 1103 Base URI: As specified in RFC 3023 [RFC3023], section 6. 1104 Macintosh File Type code: TEXT 1105 Person and email address to contact for further information: Mark 1106 Nottingham 1107 Intended usage: COMMON 1108 Author/Change controller: This specification's author(s). [[update 1109 upon publication]] 1111 9.1 Registry of Link Relations 1113 This registry is maintained by IANA and initially contains the two 1114 values: "alternate" and "related". New assignments are subject to 1115 IESG Approval, as outlined in [RFC2434]. Requests should be made by 1116 email to IANA, which will then forward the request to the IESG 1117 requesting approval. The request should contain discussion of at 1118 least the following five topics: 1120 o A value for the "rel" attribute that conforms to the syntax rule 1121 given in Section 4.6.2 1122 o Common name for link type. 1123 o Description of link type semantics. 1124 o Expected display characteristics. 1125 o Security considerations. 1127 10. Security Considerations 1129 Atom document can be encrypted and signed using 1130 [W3C.REC-xmlenc-core-20021210] and [W3C.REC-xmldsig-core-20020212], 1131 respectively, and is subject to the security considerations implied 1132 by their use. 1134 11. References 1136 11.1 Normative References 1138 [Atom-autodiscovery] 1139 Pilgrim, M., "Atom Feed Autodiscovery", work-in-progress, 1140 August 2004. 1142 [Atom-protocol] 1143 Gregorio, J. and R. Sayre, "The Atom Publishing Protocol", 1144 work-in-progress, July 2004. 1146 [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1147 1981. 1149 [RFC1035] Mockapetris, P., "Domain names - implementation and 1150 specification", STD 13, RFC 1035, November 1987. 1152 [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail 1153 Extensions (MIME) Part One: Format of Internet Message 1154 Bodies", RFC 2045, November 1996. 1156 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1157 Requirement Levels", BCP 14, RFC 2119, March 1997. 1159 [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 1160 (IPv6) Specification", RFC 2460, December 1998. 1162 [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April 1163 2001. 1165 [RFC3023] Murata, M., St. Laurent, S. and D. Kohn, "XML Media 1166 Types", RFC 3023, January 2001. 1168 [RFC3066] Alvestrand, H., "Tags for the Identification of 1169 Languages", BCP 47, RFC 3066, January 2001. 1171 [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: 1172 Timestamps", RFC 3339, July 2002. 1174 [RFC3548] Josefsson, S., "The Base16, Base32, and Base64 Data 1175 Encodings", RFC 3548, July 2003. 1177 [RFC3986] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform 1178 Resource Identifier (URI): Generic Syntax", STD 66, RFC 1179 3986, January 2005. 1181 [W3C.NOTE-datetime-19980827] 1182 Wolf, M. and C. Wicksteed, "Date and Time Formats", W3C 1183 NOTE NOTE-datetime-19980827, August 1998. 1185 [W3C.REC-xml-20040204] 1186 Yergeau, F., Paoli, J., Sperberg-McQueen, C., Bray, T. and 1187 E. Maler, "Extensible Markup Language (XML) 1.0 (Third 1188 Edition)", W3C REC REC-xml-20040204, February 2004. 1190 [W3C.REC-xml-infoset-20011024] 1191 Tobin, R. and J. Cowan, "XML Information Set", W3C 1192 FirstEdition REC-xml-infoset-20011024, October 2001. 1194 [W3C.REC-xml-names-19990114] 1195 Hollander, D., Bray, T. and A. Layman, "Namespaces in 1196 XML", W3C REC REC-xml-names-19990114, January 1999. 1198 [W3C.REC-xmlbase-20010627] 1199 Marsh, J., "XML Base", W3C REC REC-xmlbase-20010627, June 1200 2001. 1202 [W3C.REC-xmldsig-core-20020212] 1203 Solo, D., Reagle, J. and D. Eastlake, "XML-Signature 1204 Syntax and Processing", W3C REC REC-xmldsig-core-20020212, 1205 February 2002. 1207 [W3C.REC-xmlenc-core-20021210] 1208 Reagle, J. and D. Eastlake, "XML Encryption Syntax and 1209 Processing", W3C REC REC-xmlenc-core-20021210, December 1210 2002. 1212 11.2 Informative References 1214 [RELAX-NG] 1215 OASIS Technical Committee: RELAX NG, "RELAX NG 1216 Specification", December 2001. 1218 [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an 1219 IANA Considerations Section in RFCs", BCP 26, RFC 2434, 1220 October 1998. 1222 URIs 1224 [1] 1226 [2] 1228 Authors' Addresses 1230 Mark Nottingham (editor) 1232 EMail: mnot@pobox.com 1233 URI: http://www.mnot.net/ 1235 Robert Sayre (editor) 1236 Boswijck Memex Consulting 1238 EMail: rfsayre@boswijck.com 1239 URI: http://boswijck.com 1241 Appendix A. Contributors 1243 The following people contributed to preliminary drafts of this 1244 document: Tim Bray, Mark Pilgrim, and Sam Ruby. Norman Walsh 1245 provided the Relax NG schema. The content and concepts within are a 1246 product of the Atom community and the Atom Publishing Format and 1247 Protocol Working Group. 1249 Appendix B. Collected RELAX NG Compact Schema 1251 This appendix is informative. 1253 # -*- Relax NG -*- 1255 namespace local = "" 1256 namespace atom = 1257 "http://purl.org/atom/ns#draft-ietf-atompub-format-04" 1258 namespace s = "http://www.ascc.net/xml/schematron" 1260 start = atomFeed | atomEntry 1262 # Attribute definitions 1264 atomCommonAttributes = 1265 attribute xml:base { atomUri }?, 1266 attribute xml:lang { atomLanguageTag }? 1268 atomVersionAttribute = 1269 attribute version {"draft-ietf-atompub-format-05 : do not deploy"} 1271 # Common Atom Constructs 1273 atomPlainTextConstruct = 1274 atomCommonAttributes, 1275 attribute type { "TEXT" | "HTML" }?, 1276 text 1278 atomXHTMLTextConstruct = 1279 atomCommonAttributes, 1280 attribute type { "XHTML" }, 1281 (text|anyElement)* 1283 atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct 1285 atomPersonConstruct = 1286 atomCommonAttributes, 1287 (element atom:name { text } 1288 & element atom:uri { atomUri }? 1289 & element atom:email { atomEmailAddress }?) 1291 atomDateConstruct = 1292 atomCommonAttributes, 1293 xsd:dateTime 1295 atomServiceConstruct = 1296 atomCommonAttributes, 1297 attribute href { atomUri } 1299 atomIdentityConstruct = 1300 atomCommonAttributes, 1301 (atomUri) 1303 # atom:feed 1304 # TODO: Test for multiple atom:link/@rel='alternate' with 1305 # the same @type The following tests are simple to do, 1306 # but my validator is giving me trouble. 1307 # TODO: Debug and add them back 1308 # Test for at least one atom:link/@rel='alternate' 1309 # Test for atom:author or all atom:entry have atom:author 1311 # atom:feed 1313 atomFeed = 1314 element atom:feed { 1315 atomCommonAttributes, 1316 atomVersionAttribute, 1317 (atomHead 1318 & atomEntry* 1319 & anyElement*) 1320 } 1322 # atom:head 1324 atomHead = 1325 [ 1326 s:rule [ 1327 context = "atom:head" 1328 s:assert [ 1329 test = "atom:link[@rel='alternate']" 1330 "An atom:feed must have at least one link element 1331 with a rel attribute of 'alternate'." 1332 ] 1333 ] 1334 s:rule [ 1335 context = "atom:head" 1336 s:assert [ 1337 test = "atom:author or not(../atom:entry[count(atom:author) = 0])" 1338 "An atom:feed must have an atom:author unless all of 1339 its atom:entry children have an atom:author." 1340 ] 1341 ] 1342 ] 1343 element atom:head { 1344 atomCommonAttributes, 1345 (atomTitle 1346 & atomUpdated 1347 & atomLink+ 1348 & atomId? 1349 & atomAuthor? 1350 & atomContributor* 1351 & atomTagline? 1352 & atomGenerator? 1353 & atomInfo? 1354 & atomCopyright? 1355 & atomCategory* 1356 & atomIntrospection? 1357 & atomPost? 1358 & anyElement*) 1359 } 1361 # atom:entry 1362 # TODO: Test for multiple atom:link @rel='alternate' 1363 # with the same @type 1364 # TODO: Test for required atom:summary 1366 atomEntry = 1367 [ 1368 s:rule [ 1369 context = "/atom:entry" 1370 s:assert [ 1371 test = "@version" 1372 "The version attribute is required on standalone 1373 atom:entry elements." 1374 ] 1375 ] 1376 s:rule [ 1377 context = "atom:entry" 1378 s:assert [ 1379 test = "atom:link[@rel='alternate']" 1380 "An atom:entry must have at least one link element 1381 with a rel attribute of 'alternate'." 1382 ] 1383 ] 1384 s:rule [ 1385 context = "atom:entry" 1386 s:assert [ 1387 test = "atom:author or ../atom:author" 1388 "An atom:entry must have an atom:author 1389 if the parent atom:feed does not." 1390 ] 1391 ] 1393 ] 1394 element atom:entry { 1395 atomCommonAttributes, 1396 atomVersionAttribute?, 1397 (atomTitle 1398 & atomId 1399 & atomLink* 1400 & atomUpdated 1401 & atomPublished? 1402 & atomAuthor? 1403 & atomContributor* 1404 & atomHost? 1405 & atomCopyright? 1406 & atomCategory* 1407 & atomEdit? 1408 & atomSummary? 1409 & atomContent? 1410 & atomHead? 1411 & anyElement*) 1412 } 1414 # atom:title 1416 atomTitle = element atom:title { atomTextConstruct } 1418 # atom:id 1420 atomId = element atom:id { atomIdentityConstruct } 1422 atomLink = element atom:link { 1423 atomCommonAttributes, 1424 attribute href { atomUri }, 1425 attribute rel { atomNCName | atomUri }?, 1426 attribute type { atomMediaType }?, 1427 attribute hreflang { atomLanguageTag }?, 1428 attribute title { text }?, 1429 attribute length { text }?, 1430 empty 1431 } 1433 # atom:updated 1434 # TODO: Test for a timezone that SHOULD be UTC 1436 atomUpdated = element atom:updated { atomDateConstruct } 1438 # atom:published 1439 atomPublished = element atom:published { atomDateConstruct } 1441 # atom:author 1443 atomAuthor = element atom:author { atomPersonConstruct } 1445 # atom:contributor 1447 atomContributor = element atom:contributor { atomPersonConstruct } 1449 # atom:host 1451 # TODO: tighten this up 1452 atomHost = element atom:host { text } 1454 # atom:copyright 1456 atomCopyright = element atom:copyright { atomTextConstruct } 1458 # atom:category 1460 atomCategory = element atom:category { 1461 atomCommonAttributes, 1462 attribute term { text }, 1463 attribute scheme { atomUri }?, 1464 attribute label { text }?, 1465 empty 1466 } 1468 # atom:summary 1470 atomSummary = element atom:summary { atomTextConstruct } 1472 # atom:content 1474 atomInlineTextContent = 1475 element atom:content { 1476 atomCommonAttributes, 1477 attribute type { "TEXT" | "HTML" | atomMediaType }?, 1478 (text)* 1479 } 1481 atomInlineXHTMLContent = 1482 element atom:content { 1483 atomCommonAttributes, 1484 attribute type { "XHTML" | atomMediaType }?, 1485 (text|anyElement)* 1486 } 1488 atomOutOfLineContent = 1489 element atom:content { 1490 atomCommonAttributes, 1491 attribute type { "TEXT" | "HTML" | "XHTML" | atomMediaType }?, 1492 attribute src { atomUri }, 1493 empty 1494 } 1496 atomContent = atomInlineTextContent 1497 | atomInlineXHTMLContent 1498 | atomOutOfLineContent 1500 # atom:introspection 1502 atomIntrospection = 1503 element atom:introspection { atomServiceConstruct } 1505 # atom:post 1507 atomPost = element atom:post { atomServiceConstruct } 1509 # atom:edit 1511 atomEdit = element atom:edit { atomServiceConstruct } 1513 # atom:tagline 1515 atomTagline = element atom:tagline { atomTextConstruct } 1517 # atom:generator 1519 atomGenerator = element atom:generator { 1520 atomCommonAttributes, 1521 attribute url { atomUri }?, 1522 attribute version { text }?, 1523 text 1524 } 1526 # atom:info 1528 atomInfo = element atom:info { atomTextConstruct } 1529 # Low-level simple types 1531 # TODO: can anything more specific be said about these types? 1533 atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" } 1534 atomMediaType = text 1535 atomLanguageTag = text 1536 atomUri = text 1537 atomEmailAddress = text 1539 # Extensibility 1541 anyForeignElement = 1542 element * - (atom:* | local:*) 1543 { 1544 (attribute * { text } 1545 | text 1546 | anyForeignElement)* 1547 } 1549 anyForeignAttribute = 1550 attribute * - (atom:* | local:* | xml:*) { text } 1552 anyElement = 1553 element * - atom:* 1554 { 1555 (attribute * { text } 1556 | text 1557 | anyElement)* 1558 } 1560 # EOF 1562 Appendix C. Revision History 1564 [[ this section should be removed before final publication. ]] 1566 -05: Add RNC from N. Walsh. 1567 Re-organize element definitions. 1568 Lift the prohibition on other types of DSig and encryption. 1569 Remove text on "indiscriminate use" of DSig and XMLEnc. 1570 -04: Update URI terms for 2396bis. 1571 Add Category construct (PaceCategoryRevised). 1572 Insert paranoid XHTML interpretation guidelines. 1573 Adjust atom:copyright, per chairs' instruction. 1574 Add atom:host as child element of atom:entry, per chairs' 1575 direction (PacePersonConstruct). 1576 Add link/content co-constraint (PaceContentOrLink). 1577 Remove atom:origin as a side effect of adding atom:head to 1578 atom:entry (PaceHeadInEntry). 1579 Add optional length attribute to atom:link (PaceLinkRelated). 1580 Add Link registry to Link Construct, IANA Considerations 1581 placeholder (PaceFieldingLinks). 1582 Change definition of atom:updated (PaceUpdatedDefinition). 1583 -03: Move definition of Link @rel to format spec, restrict 1584 acceptable values (PaceMoveLinkElement, PaceLinkAttrDefaults). 1585 Add Service Construct, head/post, head/introspection, entry/edit 1586 (PaceServiceElement). 1587 Add Text Construct, entry/content (PaceReformedContent3). 1588 Add entry/published (PaceDatePublished). 1589 Adjust definition of Identity Construct per chairs' direction to 1590 "fix it." 1591 Add Sayre to editors. 1592 -02: Removed entry/modified, entry/issued, entry/created; added 1593 entry/updated (PaceDateUpdated). 1594 Changed date construct from W3C date-time to RFC3339 1595 (PaceDateUpdated). 1596 Feed links to HTML pages should be reflected back 1597 (PaceLinkReflection). 1598 Added Identity construct (PaceIdConstruct). 1599 Changed feed/id and entry/id to be Identity constructs 1600 (PaceIdConstruct). 1601 Changed entry/origin's content so that it's the same as the feed's 1602 id, rather than its link/@rel="alternate" (PaceIdConstruct). 1603 Added "Securing Atom Documents" (PaceDigitalSignatures). 1604 -01: Constrained omission of "Information Item" to just elements and 1605 attributes. 1606 Clarified xml:lang inheritence. 1608 Removed entry- and feed-specific langauge about xml:lang (covered 1609 by general discussion of xml:lang) 1610 Changed xml:lang to reference XML for normative requirements. 1611 Changed "... MUST be a string" to "... is unstructued text." 1612 Remomved langauge about DOCTYPEs, PIs, Comments, Entities. 1613 Changed atom:url to atom:uri, @url to @uri 1614 Introduced atom:head 1615 Introduced "Atom Feed Document" and "Atom Entry Document". 1616 Removed requirement for all elements and attributes to be 1617 namespace-qualified; now children of selective elements 1618 Added extensibility to Person constructs. 1619 Removed requirement for media types to be registered 1620 (non-registered media types are legal) 1621 Added atom:origin (PaceEntryOrigin) 1622 Added requirement for entry/id to be present and a URI 1623 (PaceEntryIdRequired). 1624 Clarified approach to Comments, PIs and well-formedness, as per 1625 RFC3470. 1626 Referenced escaping algorithm in XML. 1627 Assorted editorial nits and cleanup, refactoring 1628 -00: Initial IETF Internet-Draft submission. 1629 Added optional version attribute to entry 1630 (PaceEntryElementNeedsVersionAttribute). 1631 Added hreflang attribute (PaceHrefLang). 1632 Clarified inheritence of copyright element (PaceItemCopyright). 1633 Added xml:lang to entries (PaceItemLang). 1634 Tweaked Infoset-related language (PaceNoInfoSet). 1635 Clarified lack of structure in version attribute 1636 (PaceVersionAsText). 1637 Changed approach to XML Base (PaceXmlBaseEverywhere). 1638 Added XML Base processing to atom:id (PaceXmlBaseId). 1639 Various editorial cleanup and adjustments for IETF publication. 1641 Intellectual Property Statement 1643 The IETF takes no position regarding the validity or scope of any 1644 Intellectual Property Rights or other rights that might be claimed to 1645 pertain to the implementation or use of the technology described in 1646 this document or the extent to which any license under such rights 1647 might or might not be available; nor does it represent that it has 1648 made any independent effort to identify any such rights. Information 1649 on the procedures with respect to rights in RFC documents can be 1650 found in BCP 78 and BCP 79. 1652 Copies of IPR disclosures made to the IETF Secretariat and any 1653 assurances of licenses to be made available, or the result of an 1654 attempt made to obtain a general license or permission for the use of 1655 such proprietary rights by implementers or users of this 1656 specification can be obtained from the IETF on-line IPR repository at 1657 http://www.ietf.org/ipr. 1659 The IETF invites any interested party to bring to its attention any 1660 copyrights, patents or patent applications, or other proprietary 1661 rights that may cover technology that may be required to implement 1662 this standard. Please address the information to the IETF at 1663 ietf-ipr@ietf.org. 1665 Disclaimer of Validity 1667 This document and the information contained herein are provided on an 1668 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 1669 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET 1670 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, 1671 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 1672 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 1673 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1675 Copyright Statement 1677 Copyright (C) The Internet Society (2005). This document is subject 1678 to the rights, licenses and restrictions contained in BCP 78, and 1679 except as set forth therein, the authors retain all their rights. 1681 Acknowledgment 1683 Funding for the RFC Editor function is currently provided by the 1684 Internet Society.