<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc tocdepth="3" ?>
<?rfc tocindent="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc compact="yes" ?>
<?rfc comments="yes" ?>
<?rfc inline="yes" ?>
<?rfc inline="yes" ?>
<?rfc-ext include-references-in-index="yes" ?>

<?rfc-ext allow-markup-in-artwork="yes"?>

<!--
  This version may use non-xml2rfc extensions, currently only supported
  in rfc2629xslt. See <http://greenbytes.de/tech/webdav/rfc2629xslt/rfc2629xslt.html>
  for instructions to downgrade to the xml2rfc grammar (DWNGRD).
-->

<!DOCTYPE rfc [
  <!ENTITY MAY "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MAY</bcp14>">
  <!ENTITY MUST "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MUST</bcp14>">
  <!ENTITY MUST-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>MUST NOT</bcp14>">
  <!ENTITY OPTIONAL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>OPTIONAL</bcp14>">
  <!ENTITY RECOMMENDED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>RECOMMENDED</bcp14>">
  <!ENTITY REQUIRED "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>REQUIRED</bcp14>">
  <!ENTITY SHALL "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHALL</bcp14>">
  <!ENTITY SHALL-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHALL NOT</bcp14>">
  <!ENTITY SHOULD "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHOULD</bcp14>">
  <!ENTITY SHOULD-NOT "<bcp14 xmlns='http://purl.org/net/xml2rfc/ext'>SHOULD NOT</bcp14>">
]>

<rfc category="std" number="4287" xmlns:x="http://purl.org/net/xml2rfc/ext" xmlns:grddl='http://www.w3.org/2003/g/data-view#' grddl:transformation='rfc2629grddl.xslt'> 
    <front>        
      <title abbrev="Atom Format">The Atom Syndication Format</title>		
      <author initials="M." surname="Nottingham" fullname="Mark Nottingham" role="editor">
	<organization/>
	<address>		
	  <email>mnot@pobox.com</email>	
	  <uri>http://www.mnot.net/</uri>		
	</address>	
      </author>		
      <author initials="R." surname="Sayre" fullname="Robert Sayre" role="editor">
	<organization/>
	<address>
	  <email>rfsayre@boswijck.com</email>
	  <uri>http://boswijck.com</uri>		 
	</address>		
      </author>  
      
      <date month="December" year="2005"/>        

      <abstract>
	<t>This document specifies Atom, an XML-based Web content and metadata syndication format.</t>
      </abstract>    
	  
  </front>    

  <middle>
    <section title="Introduction">
      
      <t>Atom is an XML-based document format that describes lists of related
      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.</t>
      
      <t>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.</t>
      
      <section title="Examples"><t><figure> 
	  <preamble>A brief, single-entry Atom Feed
	  Document:</preamble>
	  
	  <artwork type="example">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;feed xmlns="http://www.w3.org/2005/Atom"&gt;

  &lt;title&gt;Example Feed&lt;/title&gt; 
  &lt;link href="http://example.org/"/&gt;
  &lt;updated&gt;2003-12-13T18:30:02Z&lt;/updated&gt;
  &lt;author&gt; 
    &lt;name&gt;John Doe&lt;/name&gt;
  &lt;/author&gt; 
  &lt;id&gt;urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6&lt;/id&gt;

  &lt;entry&gt;
    &lt;title&gt;Atom-Powered Robots Run Amok&lt;/title&gt;
    &lt;link href="http://example.org/2003/12/13/atom03"/&gt;
    &lt;id&gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&lt;/id&gt;
    &lt;updated&gt;2003-12-13T18:30:02Z&lt;/updated&gt;
    &lt;summary&gt;Some text.&lt;/summary&gt;
  &lt;/entry&gt;

&lt;/feed&gt;</artwork></figure></t>
      <t>
	<figure>
	  <preamble>A more extensive, single-entry Atom Feed
	  Document:</preamble>
	  <artwork type="example">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;feed xmlns="http://www.w3.org/2005/Atom"&gt;
  &lt;title type="text"&gt;dive into mark&lt;/title&gt;
  &lt;subtitle type="html"&gt;
    A &amp;lt;em&amp;gt;lot&amp;lt;/em&amp;gt; of effort
    went into making this effortless
  &lt;/subtitle&gt;
  &lt;updated&gt;2005-07-31T12:29:29Z&lt;/updated&gt;
  &lt;id&gt;tag:example.org,2003:3&lt;/id&gt;
  &lt;link rel="alternate" type="text/html" 
   hreflang="en" href="http://example.org/"/&gt;
  &lt;link rel="self" type="application/atom+xml" 
   href="http://example.org/feed.atom"/&gt;
  &lt;rights&gt;Copyright (c) 2003, Mark Pilgrim&lt;/rights&gt;
  &lt;generator uri="http://www.example.com/" version="1.0"&gt;
    Example Toolkit
  &lt;/generator&gt;
  &lt;entry&gt;
    &lt;title&gt;Atom draft-07 snapshot&lt;/title&gt;
    &lt;link rel="alternate" type="text/html" 
     href="http://example.org/2005/04/02/atom"/&gt;
    &lt;link rel="enclosure" type="audio/mpeg" length="1337"
     href="http://example.org/audio/ph34r_my_podcast.mp3"/&gt;
    &lt;id&gt;tag:example.org,2003:3.2397&lt;/id&gt;
    &lt;updated&gt;2005-07-31T12:29:29Z&lt;/updated&gt;
    &lt;published&gt;2003-12-13T08:29:29-04:00&lt;/published&gt;
    &lt;author&gt;
      &lt;name&gt;Mark Pilgrim&lt;/name&gt;
      &lt;uri&gt;http://example.org/&lt;/uri&gt;
      &lt;email&gt;f8dy@example.com&lt;/email&gt;
    &lt;/author&gt;
    &lt;contributor&gt;
      &lt;name&gt;Sam Ruby&lt;/name&gt;
    &lt;/contributor&gt;
    &lt;contributor&gt;
      &lt;name&gt;Joe Gregorio&lt;/name&gt;
    &lt;/contributor&gt;
    &lt;content type="xhtml" xml:lang="en" 
     xml:base="http://diveintomark.org/"&gt;
      &lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
        &lt;p&gt;&lt;i&gt;[Update: The Atom draft is finished.]&lt;/i&gt;&lt;/p&gt;
      &lt;/div&gt;
    &lt;/content&gt;
  &lt;/entry&gt;
&lt;/feed&gt;</artwork>
	</figure>
      </t>
      </section>



      <section title="Namespace and Version" anchor="namespace.and.version">

	<t>The XML Namespaces URI <xref target="W3C.REC-xml-names-19990114"/> for the XML data
	format described in this specification is:</t>

	<t>http://www.w3.org/2005/Atom</t>
	 
	<t>For convenience, this data format may be referred to as
	"Atom 1.0".  This specification uses "Atom" internally.</t>

      </section>

      <section title="Notational Conventions"> 

	<t>This specification describes conformance in terms of two
	artifacts: Atom Feed Documents and Atom Entry
	Documents. Additionally, it places some requirements on Atom
	Processors.</t>
     
	<t>This specification uses the namespace prefix "atom:" for
	the Namespace URI identified in <xref target="namespace.and.version"/>, above.  Note that
	the choice of namespace prefix is arbitrary and not
	semantically significant.</t>
      
	<t>Atom is specified using terms from the XML Infoset <xref target="W3C.REC-xml-infoset-20040204"/>. However, this
	specification uses a shorthand for two common terms: the
	phrase "Information Item" is omitted when naming Element
	Information Items and Attribute 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.</t>

	<t>Some sections of this specification are illustrated with fragments
	of a non-normative RELAX NG Compact schema <xref target="RELAX-NG"/>. However, the text of this specification provides the definition of
	conformance. A complete schema appears in <xref target="schema"/>.
	</t>
	
	<t>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, <xref target="RFC2119"/>, as scoped to those conformance targets.</t>


      </section> 
    
    </section> 

    <section title="Atom Documents" anchor="atom.documents">
      <x:anchor-alias value="atomCommonAttributes"/> 

      <t>This specification describes two kinds of Atom Documents: Atom Feed
      Documents and Atom Entry Documents.</t> 

      <t>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 root is the <x:ref>atom:feed</x:ref> element.</t>

      <t>An Atom Entry Document represents exactly one Atom entry, outside of
      the context of an Atom feed. Its root is the <x:ref>atom:entry</x:ref> element.</t>

      <figure>
	<artwork type="application/relax-ng-compact-syntax">
namespace atom = "http://www.w3.org/2005/Atom"	 		
start = <x:ref>atomFeed</x:ref> | <x:ref>atomEntry</x:ref></artwork>
      </figure> 
      
      <t>Both kinds of Atom Documents are specified in terms of the
      XML Information Set, serialized as XML 1.0 <xref target="W3C.REC-xml-20040204"/> and identified with the
      "application/atom+xml" media type. Atom Documents &MUST; be
      well-formed XML. This specification does not define a DTD for
      Atom Documents, and hence does not require them to be valid (in
      the sense used by XML).</t>

      <t>Atom allows the use of IRIs <xref target="RFC3987"/>. Every
      URI <xref target="RFC3986"/> is also an IRI, so a URI may be
      used wherever below an IRI is named. There are two special
      considerations: (1) when an IRI that is not also a URI is given for
      dereferencing, it &MUST; be mapped to a URI using the steps in
      <xref target="RFC3987" x:sec="3.1" x:fmt="of"/> and (2) when an IRI is serving
      as an <x:ref>atom:id</x:ref> value, it &MUST-NOT; be so mapped, so that the
      comparison works as described in <xref target="idCompare"/>.</t>

      <t>Any element defined by this specification &MAY; have an
      xml:base attribute <xref target="W3C.REC-xmlbase-20010627"/>.
      When xml:base is used in an Atom Document, it serves the
      function described in <xref target="RFC3986" x:fmt="of" x:sec="5.1.1"/>,
      establishing the base URI (or IRI) for resolving any relative
      references found within the effective scope of the xml:base
      attribute.</t>
      
      <t>Any element defined by this specification &MAY; have an
      xml:lang attribute, whose content indicates the natural language
      for the element and its descendents.  The language context is only
      significant for elements and attributes declared to be
      "Language-Sensitive" by this specification. Requirements
      regarding the content and interpretation of xml:lang are
      specified in <xref target="W3C.REC-xml-20040204">XML 1.0</xref>,
      <xref target="W3C.REC-xml-20040204" x:fmt="sec" x:sec="2.12" x:rel="#sec-lang-tag"/>.

      <figure> 
      <iref item="atomCommonAttributes grammar production" primary="true"/>
      <iref item="Grammar" subitem="atomCommonAttributes" primary="true"/>
	<artwork type="application/relax-ng-compact-syntax">
<x:ref>atomCommonAttributes</x:ref> =
   attribute xml:base { atomUri }?,
   attribute xml:lang { atomLanguageTag }?,
   undefinedAttribute*</artwork>  </figure></t>

      <t>Atom is an extensible format. See <xref target="extending_atom"/>
      of this document for a full description of how Atom Documents can
      be extended.</t>

      <t>Atom Processors &MAY; keep state sourced from Atom Feed
      Documents and combine them with other Atom Feed Documents, in
      order to facilitate a contiguous view of the contents of a
      feed. The manner in which Atom Feed Documents are combined in
      order to reconstruct a feed (e.g., updating entries and
      metadata, dealing with missing entries) is out of the scope of
      this specification.</t>

    </section> 

    <section title="Common Atom Constructs"> 

      <t>Many of Atom's elements share a few common structures. This section
      defines those structures and their requirements for convenient
      reference by the appropriate element definitions.</t>

      <t>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.</t>

      <t>Note that there &MUST-NOT; be any white space in a Date construct
      or in any IRI. Some XML-emitting implementations erroneously insert
      white space around values by default, and such implementations will emit
      invalid Atom Documents.</t>

      <section title="Text Constructs" anchor="text.constructs">
        <x:anchor-alias value="atomPlainTextConstruct"/> 
        <x:anchor-alias value="atomXHTMLTextConstruct"/> 
        <x:anchor-alias value="atomTextConstruct"/> 

	<t>A Text construct contains human-readable text, usually in
	small quantities. The content of Text constructs is
	Language-Sensitive.

	  <figure>
      <iref item="atomPlainTextConstruct grammar production" primary="true"/>
      <iref item="Grammar" subitem="atomPlainTextConstruct" primary="true"/>
      <iref item="atomXHTMLTextConstruct grammar production" primary="true"/>
      <iref item="Grammar" subitem="atomXHTMLTextConstruct" primary="true"/>
      <iref item="atomTextConstruct grammar production" primary="true"/>
      <iref item="Grammar" subitem="atomTextConstruct" primary="true"/>
	    <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomPlainTextConstruct</x:ref> =
   <x:ref>atomCommonAttributes</x:ref>,
   attribute type { "text" | "html" }?,
   text

<x:ref>atomXHTMLTextConstruct</x:ref> =
   <x:ref>atomCommonAttributes</x:ref>,
   attribute type { "xhtml" },
   xhtmlDiv

<x:ref>atomTextConstruct</x:ref> = <x:ref>atomPlainTextConstruct</x:ref> | <x:ref>atomXHTMLTextConstruct</x:ref></artwork></figure></t>

	<section title="The &#34;type&#34; Attribute"> 

	  <t>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, Atom
	  Processors &MUST; behave as though it were present with a
	  value of "text". Unlike the <x:ref>atom:content</x:ref> element defined in
	  <xref target="element.content"/>, MIME media types <xref target="MIMEREG"/> &MUST-NOT; be used as values for the "type"
	  attribute on Text constructs.</t>

	  <section title="Text">

	    <t>Example <x:ref>atom:title</x:ref> with text content:
	    

	      <figure>
		<artwork type="example">
...
&lt;title type="text"&gt;
  Less: &amp;lt;
&lt;/title&gt;
...	     </artwork>
	      </figure>
	    </t>

	    <t>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, Atom Processors &MAY; collapse white space (including
	    line breaks) and display the text using typographic
	    techniques such as justification and proportional
	    fonts.</t>
	  
	  </section>

	  <section title="HTML">

	    <t>Example <x:ref>atom:title</x:ref> with HTML content:

	      <figure>
		<artwork type="example">
...
&lt;title type="html"&gt;
  Less: &amp;lt;em&gt; &amp;amp;lt; &amp;lt;/em&gt;
&lt;/title&gt;
...	     </artwork>
	      </figure>
	    </t>

	    <t>If the value of "type" is "html", the content of the
	    Text construct &MUST-NOT; contain child elements and &SHOULD;
      be suitable for handling as HTML <xref target="HTML"/>. Any markup within
	    &MUST; be escaped; for example, "&lt;br&gt;" as
	    "&amp;lt;br&gt;". HTML markup within &SHOULD; be such that it
	    could validly appear directly within an HTML &lt;DIV&gt;
	    element, after unescaping. Atom Processors that display
	    such content &MAY; use that markup to aid in its display.</t>

	  </section>

	  <section title="XHTML">

	    <t>Example <x:ref>atom:title</x:ref> with XHTML content:

	    
	      <figure>
		<artwork type="example">
...
&lt;title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"&gt;
  &lt;xhtml:div&gt;
    Less: &lt;xhtml:em&gt; &amp;lt; &lt;/xhtml:em&gt;
  &lt;/xhtml:div&gt;
&lt;/title&gt;
...	     </artwork>
	      </figure>
	    </t>


	    <t>If the value of "type" is "xhtml", the content of
	    the Text construct &MUST; be a single XHTML div element <xref target="XHTML"/> and &SHOULD; be suitable for handling as
	    XHTML. The XHTML div element itself &MUST-NOT; be considered
	    part of the content. Atom Processors that display the
	    content &MAY; use the markup to aid in displaying it. The
	    escaped versions of characters such as "&amp;" and "&gt;"
	    represent those characters, not markup.<vspace blankLines="1"/></t>

	    <t>Examples of valid XHTML content:

	  <figure>
	    <artwork type="example">
...
&lt;summary type="xhtml"&gt;
   &lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
      This is &lt;b&gt;XHTML&lt;/b&gt; content.
   &lt;/div&gt;
&lt;/summary&gt;
...
&lt;summary type="xhtml"&gt;
   &lt;xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"&gt;
      This is &lt;xhtml:b&gt;XHTML&lt;/xhtml:b&gt; content.
   &lt;/xhtml:div&gt;
&lt;/summary&gt; 
...</artwork>
	  </figure></t>

	  <t>The following example assumes that the XHTML namespace has been
	  bound to the "xh" prefix earlier in the document:

	  <figure>
	    <artwork type="example">
...
&lt;summary type="xhtml"&gt;
   &lt;xh:div&gt;
      This is &lt;xh:b&gt;XHTML&lt;/xh:b&gt; content.
   &lt;/xh:div&gt;
&lt;/summary&gt;
...</artwork>
	  </figure></t>

	  </section>

	</section> 

      </section>

      <section title="Person Constructs" anchor="atomPersonConstruct">

	<t>A Person construct is an element that describes a person,
	corporation, or similar entity (hereafter, 'person').

	  <figure>
      <iref item="atomPersonConstruct grammar production" primary="true"/>
      <iref item="Grammar" subitem="atomPersonConstruct" primary="true"/>
	    <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomPersonConstruct</x:ref> =
   <x:ref>atomCommonAttributes</x:ref>,
   (element <x:ref>atom:name</x:ref> { text }
    &amp; element <x:ref>atom:uri</x:ref> { atomUri }?
    &amp; element <x:ref>atom:email</x:ref> { atomEmailAddress }?
    &amp; <x:ref>extensionElement</x:ref>*)</artwork></figure></t>

	<t>This specification assigns no significance to the order of
	appearance of the child elements in a Person construct. Person
	constructs allow extension Metadata elements (see 
	<xref target="extension"/>).</t>

	<section anchor="element.name" title="The &#34;atom:name&#34; Element">
    <x:anchor-alias value="atom:name"/>
    <iref item="XML Elements" subitem="name" primary="true"/>
    <iref item="name XML element" primary="true"/>
	
	  <t>The "<x:ref>atom:name</x:ref>" element's content conveys a
	  human-readable name for the person. The content of <x:ref>atom:name</x:ref>
	  is Language-Sensitive. Person constructs &MUST; contain
	  exactly one "<x:ref>atom:name</x:ref>" element.</t>
	  
	</section> 
	
	<section anchor="element.uri" title="The &#34;atom:uri&#34; Element">
    <x:anchor-alias value="atom:uri"/>
    <iref item="XML Elements" subitem="uri" primary="true"/>
    <iref item="uri XML element" primary="true"/>

	  <t>The "<x:ref>atom:uri</x:ref>" element's content conveys an IRI associated with
	  the person. Person constructs &MAY; contain an <x:ref>atom:uri</x:ref> element, but
	  &MUST-NOT; contain more than one.  The content of <x:ref>atom:uri</x:ref> in a Person
	  construct &MUST; be an IRI reference <xref target="RFC3987"/>.</t>

	</section> 
	
	<section anchor="element.email" title="The &#34;atom:email&#34; Element">
    <x:anchor-alias value="atom:email"/>
    <iref item="XML Elements" subitem="email" primary="true"/>
    <iref item="email XML element" primary="true"/> 
	  
	  <t>The "<x:ref>atom:email</x:ref>" element's content conveys an e-mail address
	  associated with the person. Person constructs &MAY; contain an
	  <x:ref>atom:email</x:ref> element, but &MUST-NOT; contain more than one. Its content
	  &MUST; conform to the "addr-spec" production in <xref target="RFC2822"/>.</t>
	</section> 
      
      </section> 
      
      <section title="Date Constructs" anchor="date.constructs"> 
        <x:anchor-alias value="atomDateConstruct"/>

	<t>A Date construct is an element whose content &MUST; conform
	to the "date-time" production in <xref target="RFC3339"/>. In addition, an uppercase "T" character 
	&MUST; be used to separate date and time, and an uppercase "Z"
	character &MUST; be present in the absence of a numeric time zone
	offset.
	
	  <figure>
      <iref item="atomDateConstruct grammar production" primary="true"/>
      <iref item="Grammar" subitem="atomDateConstruct" primary="true"/>
	    <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomDateConstruct</x:ref> =
   <x:ref>atomCommonAttributes</x:ref>,
   xsd:dateTime</artwork></figure></t> 

	<t>Such date values happen to be compatible with the following
	specifications:
	<xref target="ISO.8601.1988"/>, 
	<xref target="W3C.NOTE-datetime-19980827"/>,
	and <xref target="W3C.REC-xmlschema-2-20041028"/>.</t>
	
	<t>Example Date constructs:

	<figure>
	  <artwork type="example">
&lt;updated&gt;2003-12-13T18:30:02Z&lt;/updated&gt;
&lt;updated&gt;2003-12-13T18:30:02.25Z&lt;/updated&gt;
&lt;updated&gt;2003-12-13T18:30:02+01:00&lt;/updated&gt;
&lt;updated&gt;2003-12-13T18:30:02.25+01:00&lt;/updated&gt;
</artwork>
		   
	</figure>
	</t>

	<t>Date values &SHOULD; be as accurate as possible. For
	example, it would be generally inappropriate for a publishing
	system to apply the same timestamp to several entries that
	were published during the course of a single day.</t>


      </section>

    </section>

    <section title="Atom Element Definitions">
    
      <section title="Container Elements">

	<section anchor="element.feed" title="The &#34;atom:feed&#34; Element">
    <x:anchor-alias value="atom:feed"/>
    <x:anchor-alias value="atomFeed"/>
    <iref item="XML Elements" subitem="feed" primary="true"/>
    <iref item="feed XML element" primary="true"/> 

	  <t>The "atom:feed" element is the document (i.e., top-level) element
	  of an Atom Feed Document, acting as a container for metadata and
	  data associated with the feed.  Its element children consist of
	  metadata elements followed by zero or more <x:ref>atom:entry</x:ref> child
	  elements.
	  
	    <figure> 
        <iref item="atomFeed grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomFeed" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomFeed</x:ref> =
   element <x:ref>atom:feed</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      (<x:ref>atomAuthor</x:ref>*
       &amp; <x:ref>atomCategory</x:ref>*
       &amp; <x:ref>atomContributor</x:ref>*
       &amp; <x:ref>atomGenerator</x:ref>?
       &amp; <x:ref>atomIcon</x:ref>?
       &amp; <x:ref>atomId</x:ref>
       &amp; <x:ref>atomLink</x:ref>*
       &amp; <x:ref>atomLogo</x:ref>?
       &amp; <x:ref>atomRights</x:ref>?
       &amp; <x:ref>atomSubtitle</x:ref>?
       &amp; <x:ref>atomTitle</x:ref>
       &amp; <x:ref>atomUpdated</x:ref>
       &amp; <x:ref>extensionElement</x:ref>*),
      <x:ref>atomEntry</x:ref>*
   }</artwork></figure></t> 
	
	  <t>This specification assigns no significance to the order of
	  <x:ref>atom:entry</x:ref> elements within the feed.</t>
	
	  <t>The following child elements are defined by this specification
	  (note that the presence of some of these elements is required):</t>

	  <t> 
	    
	    <list style="symbols"> 
	      

	      <t><x:ref>atom:feed</x:ref> elements &MUST; contain one or more <x:ref>atom:author</x:ref> elements,
	      unless all of the <x:ref>atom:feed</x:ref> element's child <x:ref>atom:entry</x:ref> elements
	      contain at least one <x:ref>atom:author</x:ref> element.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MAY; contain any number of <x:ref>atom:category</x:ref>
	      elements.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MAY; contain any number of <x:ref>atom:contributor</x:ref>
	      elements.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:generator</x:ref> element.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST-NOT; contain more than one <x:ref>atom:icon</x:ref>
	      element.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST-NOT; contain more than one <x:ref>atom:logo</x:ref>
	      element.</t>
      
	      <t><x:ref>atom:feed</x:ref> elements &MUST; contain exactly one <x:ref>atom:id</x:ref>
	      element.</t>

	      <t><x:ref>atom:feed</x:ref> elements &SHOULD; contain one <x:ref>atom:link</x:ref>
	      element with a rel attribute value of "self". This is
	      the preferred URI for retrieving Atom Feed Documents
	      representing this Atom feed.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:link</x:ref> element with a rel attribute value of
	      "alternate" that has the same combination of type and
	      hreflang attribute values.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MAY; contain additional <x:ref>atom:link</x:ref>
	      elements beyond those described above.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:rights</x:ref> element.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:subtitle</x:ref> element.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST; contain exactly one <x:ref>atom:title</x:ref>
	      element.</t>

	      <t><x:ref>atom:feed</x:ref> elements &MUST; contain exactly one <x:ref>atom:updated</x:ref>
	      element.</t>

	    </list></t> 

	    <t>If multiple <x:ref>atom:entry</x:ref> elements with the same <x:ref>atom:id</x:ref>
	    value appear in an Atom Feed Document, they represent the
	    same entry. Their <x:ref>atom:updated</x:ref> timestamps &SHOULD; be
	    different. If an Atom Feed Document contains multiple
	    entries with the same <x:ref>atom:id</x:ref>, Atom Processors &MAY; choose
	    to display all of them or some subset of them. One typical
	    behavior would be to display only the entry with the
	    latest <x:ref>atom:updated</x:ref> timestamp.</t> 

	  <section toc="exclude" title="Providing Textual Content">
	    <t>Experience teaches that feeds that contain textual
	    content are in general more useful than those that do
	    not. Some applications (one example is full-text indexers)
	    require a minimum amount of text or (X)HTML to function
	    reliably and predictably. Feed producers should be aware
	    of these issues. It is advisable that each <x:ref>atom:entry</x:ref>
	    element contain a non-empty <x:ref>atom:title</x:ref> element, a
	    non-empty <x:ref>atom:content</x:ref> element when that element is
	    present, and a non-empty <x:ref>atom:summary</x:ref> element when the
	    entry contains no <x:ref>atom:content</x:ref> element. However, the
	    absence of <x:ref>atom:summary</x:ref> is not an error, and Atom
	    Processors &MUST-NOT; fail to function correctly as a
	    consequence of such an absence.</t>
	  </section>

	</section> 

	<section anchor="element.entry" title="The &#34;atom:entry&#34; Element">
    <x:anchor-alias value="atom:entry"/>
    <x:anchor-alias value="atomEntry"/>
    <iref item="XML Elements" subitem="entry" primary="true"/>
    <iref item="entry XML element" primary="true"/> 

	  <t>The "<x:ref>atom:entry</x:ref>" element represents an individual entry,
	  acting as a container for metadata and data associated with
	  the entry. This element can appear as a child of the
	  <x:ref>atom:feed</x:ref> element, or it can appear as the document (i.e.,
	  top-level) element of a stand-alone Atom Entry Document.

	    <figure> 
        <iref item="atomEntry grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomEntry" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomEntry</x:ref> =
   element <x:ref>atom:entry</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      (<x:ref>atomAuthor</x:ref>*
       &amp; <x:ref>atomCategory</x:ref>*
       &amp; <x:ref>atomContent</x:ref>?
       &amp; <x:ref>atomContributor</x:ref>*
       &amp; <x:ref>atomId</x:ref>
       &amp; <x:ref>atomLink</x:ref>*
       &amp; <x:ref>atomPublished</x:ref>?
       &amp; <x:ref>atomRights</x:ref>?
       &amp; <x:ref>atomSource</x:ref>?
       &amp; <x:ref>atomSummary</x:ref>?
       &amp; <x:ref>atomTitle</x:ref>
       &amp; <x:ref>atomUpdated</x:ref>
       &amp; <x:ref>extensionElement</x:ref>*)
   }</artwork></figure></t>

	    <t>This specification assigns no significance to the order
	    of appearance of the child elements of <x:ref>atom:entry</x:ref>.</t>

	  <t>The following child elements are defined by this specification
	  (note that it requires the presence of some of these elements):</t>

	  <t> 
	
	    <list style="symbols"> 

	      <t><x:ref>atom:entry</x:ref> elements &MUST; contain one or more
	      <x:ref>atom:author</x:ref> elements, unless the <x:ref>atom:entry</x:ref> contains an
	      <x:ref>atom:source</x:ref> element that contains an <x:ref>atom:author</x:ref>
	      element or, in an Atom Feed Document, the <x:ref>atom:feed</x:ref>
	      element contains an <x:ref>atom:author</x:ref> element itself.</t>
	   
	      <t><x:ref>atom:entry</x:ref> elements &MAY; contain any number of <x:ref>atom:category</x:ref>
	      elements.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:content</x:ref> element.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MAY; contain any number of
	      <x:ref>atom:contributor</x:ref> elements.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MUST; contain exactly one <x:ref>atom:id</x:ref>
	      element.</t>

	      <t><x:ref>atom:entry</x:ref> elements that contain no child
	      <x:ref>atom:content</x:ref> element &MUST; contain at least one <x:ref>atom:link</x:ref>
	      element with a rel attribute value of
	      "alternate".</t>

	      <t><x:ref>atom:entry</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:link</x:ref> element with a rel attribute value of
	      "alternate" that has the same combination of type and
	      hreflang attribute values.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MAY; contain additional <x:ref>atom:link</x:ref> elements
	      beyond those described above.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:published</x:ref> element.</t>
	      
	      <t><x:ref>atom:entry</x:ref> elements &MUST-NOT; contain more than one
	      <x:ref>atom:rights</x:ref> element.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MUST-NOT; contain more than one <x:ref>atom:source</x:ref>
	      element.</t>
      
	      <t><x:ref>atom:entry</x:ref> elements &MUST; contain an <x:ref>atom:summary</x:ref> element in
	      either of the following cases:

	      <list style="symbols"> 

		<t>the <x:ref>atom:entry</x:ref> contains an <x:ref>atom:content</x:ref> that has a "src"
		attribute (and is thus empty).</t>

		<t>the <x:ref>atom:entry</x:ref> contains content that is encoded in
		Base64; i.e., the "type" attribute of <x:ref>atom:content</x:ref> is a
		MIME media type <xref target="MIMEREG"/>, but is not
		an XML media type <xref target="RFC3023"/>, does not
		begin with "text/", and does not end with "/xml" or
		"+xml".</t>

	      </list> 
	    
	      </t> 
      
	      <t><x:ref>atom:entry</x:ref> elements &MUST-NOT; contain more than one <x:ref>atom:summary</x:ref>
	      element.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MUST; contain exactly one <x:ref>atom:title</x:ref>
	      element.</t>

	      <t><x:ref>atom:entry</x:ref> elements &MUST; contain exactly one <x:ref>atom:updated</x:ref>
	      element.</t>
      
	    </list> 

    </t> 

	</section> 

	<section anchor="element.content" title="The &#34;atom:content&#34; Element">
    <x:anchor-alias value="atom:content"/>
    <x:anchor-alias value="atomContent"/>
    <x:anchor-alias value="atomInlineTextContent"/>
    <x:anchor-alias value="atomInlineXHTMLContent"/>
    <x:anchor-alias value="atomInlineOtherContent"/>
    <x:anchor-alias value="atomOutOfLineContent"/>
    <iref item="XML Elements" subitem="content" primary="true"/>
    <iref item="content XML element" primary="true"/> 

	  <t>The "<x:ref>atom:content</x:ref>" element either contains or links to
	  the content of the entry. The content of <x:ref>atom:content</x:ref> is
	  Language-Sensitive.

	    <figure> 
        <iref item="atomContent grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomContent" primary="true"/>
        <iref item="atomInlineTextContent grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomInlineTextContent" primary="true"/>
        <iref item="atomInlineXHTMLContent grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomInlineXHTMLContent" primary="true"/>
        <iref item="atomInlineOtherContent grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomInlineOtherContent" primary="true"/>
        <iref item="atomOutOfLineContent grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomOutOfLineContent" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomInlineTextContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { "text" | "html" }?,
      (text)*
   }

<x:ref>atomInlineXHTMLContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { "xhtml" },
      xhtmlDiv
   }

<x:ref>atomInlineOtherContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { atomMediaType }?,
      (text|anyElement)*
   }

<x:ref>atomOutOfLineContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { atomMediaType }?,
      attribute src { atomUri },
      empty
   }

<x:ref>atomContent</x:ref> = <x:ref>atomInlineTextContent</x:ref>
 | <x:ref>atomInlineXHTMLContent</x:ref>
 | <x:ref>atomInlineOtherContent</x:ref>
 | <x:ref>atomOutOfLineContent</x:ref></artwork></figure></t> 
	      
	  <section title="The &#34;type&#34; Attribute"> 

	    <t>On the <x:ref>atom:content</x:ref> element, the value of the "type"
	    attribute &MAY; be one of "text", "html", or "xhtml".
	    Failing that, it &MUST; conform to the syntax of a MIME
	    media type, but &MUST-NOT; be a composite type (see <xref target="MIMEREG"
      x:fmt="of" x:sec="4.2.6"/>). If neither the type
	    attribute nor the src attribute is provided, Atom
	    Processors &MUST; behave as though the type attribute were
	    present with a value of "text".</t>

	  </section> 

	  <section title="The &#34;src&#34; Attribute">

	    <t><x:ref>atom:content</x:ref> &MAY; have a "src" attribute, whose value
	    &MUST; be an IRI reference <xref target="RFC3987"/>. If the
	    "src" attribute is present, <x:ref>atom:content</x:ref> &MUST; be
	    empty. Atom Processors &MAY; use the IRI to retrieve the
	    content and &MAY; choose to ignore remote content or to present
	    it in a different manner than local content.</t>

	    <t>If the "src" attribute is present, the "type" attribute
	    &SHOULD; be provided and &MUST; be a MIME media type <xref target="MIMEREG"/>, rather than "text", "html", or
	    "xhtml". The value is advisory; that is to say, when the
	    corresponding URI (mapped from an IRI, if necessary)
	    is dereferenced, if the server providing that content also
	    provides a media type, the server-provided media type is
	    authoritative.</t>

	  </section> 
      
	  <section title="Processing Model"> 

	    <t>Atom Documents &MUST; conform to the following
	    rules. Atom Processors &MUST; interpret <x:ref>atom:content</x:ref>
	    according to the first applicable rule.</t>

	    <t>
	      <list style="numbers"> 
	
		<t>If the value of "type" is "text", the content of
		<x:ref>atom:content</x:ref> &MUST-NOT; contain child elements. Such
		text is intended to be presented to humans in a
		readable fashion. Thus, Atom Processors &MAY; collapse
		white space (including line breaks), and display the
		text using typographic techniques such as
		justification and proportional fonts.</t>

		<t>If the value of "type" is "html", the content of
		<x:ref>atom:content</x:ref> &MUST-NOT; contain child elements and &SHOULD; be
		suitable for handling as HTML <xref target="HTML"/>. The HTML markup &MUST; be
		escaped; for example, "&lt;br&gt;" as "&amp;lt;br&gt;". The HTML
		markup &SHOULD; be such that it could validly appear directly
		within an HTML &lt;DIV&gt; element. Atom Processors that display
		the content &MAY; use the markup to aid in displaying it.</t>

		<t>If the value of "type" is "xhtml", the content of
		<x:ref>atom:content</x:ref> &MUST; be a single XHTML div element <xref target="XHTML"/> and &SHOULD; be suitable for handling
		as XHTML. The XHTML div element itself &MUST-NOT; be
		considered part of the content. Atom Processors that
		display the content &MAY; use the markup to aid in
		displaying it. The escaped versions of characters such
		as "&amp;" and "&gt;" represent those characters, not
		markup.</t>

		<t>If the value of "type" is an XML media type <xref target="RFC3023"/> or ends with "+xml" or "/xml"
		(case insensitive), the content of <vspace/><x:ref>atom:content</x:ref> &MAY;
		include child elements and &SHOULD; be suitable for
		handling as the indicated media type. If the "src"
		attribute is not provided, this would normally mean
		that the "<x:ref>atom:content</x:ref>" element would contain a single
		child element that would serve as the root element of
		the XML document of the indicated type.</t>

		<t>If the value of "type" begins with "text/"
		(case insensitive), the content of <x:ref>atom:content</x:ref> &MUST-NOT; contain child elements.</t>

		<t>For all other values of "type", the content of
		<x:ref>atom:content</x:ref> &MUST; be a valid Base64 encoding, as
		described in <xref target="RFC3548" x:fmt="," x:sec="3"/>.
		When decoded, it &SHOULD; be suitable for handling as
		the indicated media type. In this case, the characters
		in the Base64 encoding &MAY; be preceded and followed in
		the <x:ref>atom:content</x:ref> element by white space, and lines are
		separated by a single newline (U+000A)
		character.</t>
		
	      </list>
	      
	    </t>
		
	  </section> 

	  <section title="Examples">
		    

	    <t>XHTML inline:</t>

	    <figure>
	      <artwork type="example">
...
&lt;content type="xhtml"&gt;
   &lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
      This is &lt;b&gt;XHTML&lt;/b&gt; content.
   &lt;/div&gt;
&lt;/content&gt;
...
&lt;content type="xhtml"&gt;
   &lt;xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml"&gt;
      This is &lt;xhtml:b&gt;XHTML&lt;/xhtml:b&gt; content.
   &lt;/xhtml:div&gt;
&lt;/content&gt; 
...</artwork>
	    </figure>


	    <t>The following example assumes that the XHTML namespace has been
	    bound to the "xh" prefix earlier in the document:
		    

	    <figure>
	      <artwork type="example">
...
&lt;content type="xhtml"&gt;
   &lt;xh:div&gt;
      This is &lt;xh:b&gt;XHTML&lt;/xh:b&gt; content.
   &lt;/xh:div&gt;
&lt;/content&gt;
...</artwork>
	    </figure></t>
	    
	  </section>

	</section>

      </section>

      <section title="Metadata Elements">
	
	<section anchor="element.author" title="The &#34;atom:author&#34; Element">
    <x:anchor-alias value="atom:author"/>
    <x:anchor-alias value="atomAuthor"/>
    <iref item="XML Elements" subitem="author" primary="true"/>
    <iref item="author XML element" primary="true"/> 

	  <t>The "<x:ref>atom:author</x:ref>" element is a Person construct that indicates
	  the author of the entry or feed.

	    <figure>
        <iref item="atomAuthor grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomAuthor" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomAuthor</x:ref> = element <x:ref>atom:author</x:ref> { <x:ref>atomPersonConstruct</x:ref> }</artwork></figure></t> 

	  <t>If an <x:ref>atom:entry</x:ref> element does not contain <x:ref>atom:author</x:ref>
	  elements, then the <x:ref>atom:author</x:ref> elements of the contained
	  <x:ref>atom:source</x:ref> element are considered to apply. In an Atom Feed
	  Document, the <x:ref>atom:author</x:ref> elements of the containing
	  <x:ref>atom:feed</x:ref> element are considered to apply to the entry if
	  there are no <x:ref>atom:author</x:ref> elements in the locations described
	  above.</t>

	</section> 
	      
	<section anchor="element.category" title="The &#34;atom:category&#34; Element">
    <x:anchor-alias value="atom:category"/>
    <x:anchor-alias value="atomCategory"/>
    <iref item="XML Elements" subitem="category" primary="true"/>
    <iref item="category XML element" primary="true"/>
      
	  <t>The "<x:ref>atom:category</x:ref>" element conveys information about a
	  category associated with an entry or feed. This
	  specification assigns no meaning to the content (if any) of
	  this element.

	    <figure> 
        <iref item="atomCategory grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomCategory" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomCategory</x:ref> =
   element <x:ref>atom:category</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute term { text },
      attribute scheme { atomUri }?,
      attribute label { text }?,
      <x:ref>undefinedContent</x:ref>
   }</artwork></figure></t>
 
	  <section title="The &#34;term&#34; Attribute"> 

	    <t>The "term" attribute is a string that identifies the category
	    to which the entry or feed belongs. Category elements &MUST; have a
	    "term" attribute.</t>

	  </section> 
	      
	  <section title="The &#34;scheme&#34; Attribute">

	    <t>The "scheme" attribute is an IRI that identifies a
	    categorization scheme. Category elements &MAY; have a "scheme"
	    attribute.</t>

	  </section>
	      
	  <section title="The &#34;label&#34; Attribute"> 

	    <t>The "label" attribute provides a human-readable label
	    for display in end-user applications. The content of the
	    "label" attribute is Language-Sensitive. Entities such as
	    "&amp;amp;" and "&amp;lt;" represent their corresponding
	    characters ("&amp;" and "&lt;", respectively), not markup.
	    Category elements &MAY; have a "label" attribute.</t>

	  </section> 

	</section> 

	<section anchor="element.contributor" title="The &#34;atom:contributor&#34; Element">
    <x:anchor-alias value="atom:contributor"/>
    <x:anchor-alias value="atomContributor"/>
    <iref item="XML Elements" subitem="contributor" primary="true"/>
    <iref item="contributor XML element" primary="true"/>
 
	  <t>The "<x:ref>atom:contributor</x:ref>" element is a Person construct that
	  indicates a person or other entity who contributed to the entry or
	  feed.

     <figure>
       <iref item="atomContributor grammar production" primary="true"/>
       <iref item="Grammar" subitem="atomContributor" primary="true"/>
       <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomContributor</x:ref> = element <x:ref>atom:contributor</x:ref> { <x:ref>atomPersonConstruct</x:ref> }</artwork></figure></t>
 
	</section> 

	<section anchor="element.generator" title="The &#34;atom:generator&#34; Element">
    <x:anchor-alias value="atom:generator"/>
    <x:anchor-alias value="atomGenerator"/>
    <iref item="XML Elements" subitem="generator" primary="true"/>
    <iref item="generator XML element" primary="true"/>
	      
	  <t>The "<x:ref>atom:generator</x:ref>" element's content identifies the agent used
	  to generate a feed, for debugging and other purposes.
      
	    <figure> 
        <iref item="atomGenerator grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomGenerator" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomGenerator</x:ref> = element <x:ref>atom:generator</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   attribute uri { atomUri }?,
   attribute version { text }?,
   text
}</artwork></figure></t> 

	  <t>The content of this element, when present, &MUST; be a
	  string that is a human-readable name for the generating
	  agent.  Entities such as "&amp;amp;" and "&amp;lt;"
	  represent their corresponding characters ("&amp;" and "&lt;"
	  respectively), not markup.</t>

	  <t>The <x:ref>atom:generator</x:ref> element &MAY; have a "uri" attribute
	  whose value &MUST; be an IRI reference <xref target="RFC3987"/>. When dereferenced, the resulting URI (mapped from an
	  IRI, if necessary) &SHOULD; produce a representation that is
	  relevant to that agent.</t>

	  <t>The <x:ref>atom:generator</x:ref> element &MAY; have a "version" attribute that
	  indicates the version of the generating agent.</t>

	</section> 

	<section anchor="element.icon" title="The &#34;atom:icon&#34; Element">
    <x:anchor-alias value="atom:icon"/>
    <x:anchor-alias value="atomIcon"/>
    <iref item="XML Elements" subitem="icon" primary="true"/>
    <iref item="icon XML element" primary="true"/>

	  <t>The "<x:ref>atom:icon</x:ref>" element's content is an IRI reference <xref target="RFC3987"/> that identifies an image that provides iconic
	  visual identification for a feed.

	    <figure> 
        <iref item="atomIcon grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomIcon" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomIcon</x:ref> = element <x:ref>atom:icon</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   (atomUri)
}</artwork>
	    </figure></t> 

	  <t>The image &SHOULD; have an aspect ratio of one (horizontal)
	  to one (vertical) and &SHOULD; be suitable for presentation
	  at a small size.</t>
	</section>

	<section anchor="element.id" title="The &#34;atom:id&#34; Element">
    <x:anchor-alias value="atom:id"/>
    <x:anchor-alias value="atomId"/>
    <iref item="XML Elements" subitem="id" primary="true"/>
    <iref item="id XML element" primary="true"/>

	  <t>The "<x:ref>atom:id</x:ref>" element conveys a permanent, universally unique
	  identifier for an entry or feed.
	 
	    <figure> 
        <iref item="atomId grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomId" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomId</x:ref> = element <x:ref>atom:id</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   (atomUri)
}</artwork></figure></t> 

	  <t>Its content &MUST; be an IRI, as defined by <xref target="RFC3987"/>. Note that the definition of "IRI" excludes relative
	  references. Though the IRI might use a dereferencable scheme, Atom
	  Processors &MUST-NOT; assume it can be dereferenced.</t>

	  <t>When an Atom Document is relocated, migrated, syndicated,
	  republished, exported, or imported, the content of its <x:ref>atom:id</x:ref>
	  element &MUST-NOT; change. Put another way, an <x:ref>atom:id</x:ref> element
	  pertains to all instantiations of a particular Atom entry or feed;
	  revisions retain the same content in their <x:ref>atom:id</x:ref> elements. It is 
	  suggested that the <x:ref>atom:id</x:ref> element be stored along with the 
	  associated resource.</t>

	  <t>The content of an <x:ref>atom:id</x:ref> element &MUST; be created in a way that
	  assures uniqueness.</t>
     
	  <t>Because of the risk of confusion between IRIs that would
	  be equivalent if they were mapped to URIs and dereferenced, the
	  following normalization strategy &SHOULD; be applied when
	  generating <x:ref>atom:id</x:ref> elements:</t>

	  <t>
	    <list style="symbols"> 
	      <t>Provide the scheme in lowercase characters.</t>
	      <t>Provide the host, if any, in lowercase characters.</t> 
	      <t>Only perform percent-encoding where it is essential.</t>
	      <t>Use uppercase A through F characters when
	      percent-encoding.</t>
	      <t>Prevent dot-segments from appearing in paths.</t>
	      <t>For schemes that define a default authority, use an empty
	      authority if the default is desired.</t>
	      <t>For schemes that define an empty path to be equivalent to a
	      path of "/", use "/".</t>
	      <t>For schemes that define a port, use an empty port if the
	      default is desired.</t>
	      <t>Preserve empty fragment identifiers and queries.</t>
	      <t>Ensure that all components of the IRI are appropriately
	      character normalized, e.g., by using NFC or NFKC.</t>
	    </list></t> 
	  

	  <section anchor="idCompare" title="Comparing atom:id"> 

	    <t>Instances of <x:ref>atom:id</x:ref> elements can be compared to
	    determine whether an entry or feed is the same as one seen
	    before. Processors &MUST; compare <x:ref>atom:id</x:ref> elements on a
	    character-by-character basis (in a case-sensitive
	    fashion). Comparison operations &MUST; be based solely on
	    the IRI character strings and &MUST-NOT; rely on
	    dereferencing the IRIs or URIs mapped from them.</t>

	    <t>As a result, two IRIs that resolve to the same resource but are
	    not character-for-character identical will be considered different
	    for the purposes of identifier comparison.</t>

	    <t>For example, these are four distinct
	    identifiers, despite the fact that they differ only in
	    case:</t>
	  
	    <t>
	      <list style="empty">
		<t>http://www.example.org/thing</t> 
		<t>http://www.example.org/Thing</t>
		<t>http://www.EXAMPLE.org/thing</t> 
		<t>HTTP://www.example.org/thing</t>
	      </list>
	    </t> 
	    

	    <t>Likewise, these are three distinct identifiers, because
	    IRI %-escaping is significant for the purposes of
	    comparison:</t>

	    <t>
	      <list style="empty">
		<t>http://www.example.com/~bob</t> 
		<t>http://www.example.com/%7ebob</t>
		<t>http://www.example.com/%7Ebob</t>
	      </list></t> 
	    
	  </section>
	  
	</section>
	
	<section anchor="element.link" title="The &#34;atom:link&#34; Element">
    <x:anchor-alias value="atom:link"/>
    <x:anchor-alias value="atomLink"/>
    <iref item="XML Elements" subitem="link" primary="true"/>
    <iref item="link XML element" primary="true"/> 
	  
	  <t>The "<x:ref>atom:link</x:ref>" element defines a reference from an entry
	  or feed to a Web resource. This specification assigns no
	  meaning to the content (if any) of this element.

	    <figure>
        <iref item="atomLink grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomLink" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomLink</x:ref> =
   element <x:ref>atom:link</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute href { atomUri },
      attribute rel { atomNCName | atomUri }?,
      attribute type { atomMediaType }?,
      attribute hreflang { atomLanguageTag }?,
      attribute title { text }?,
      attribute length { text }?,
      <x:ref>undefinedContent</x:ref>
   }</artwork></figure></t> 

	  <section title="The &#34;href&#34; Attribute"> 

	    <t>The "href" attribute contains the link's IRI. <x:ref>atom:link</x:ref>
	    elements &MUST; have an href attribute, whose value &MUST; be a IRI
	    reference <xref target="RFC3987"/>.</t>

	  </section> 

	  <section title="The &#34;rel&#34; Attribute" anchor="rel_attribute"> 

	    <t><x:ref>atom:link</x:ref> elements &MAY; have a "rel" attribute that indicates
	    the link relation type. If the "rel" attribute is not present, the
	    link element &MUST; be interpreted as if the link relation type is
	    "alternate".</t>
	     
	    <t>The value of "rel" &MUST; be a string that is non-empty
	    and matches either the "isegment-nz-nc" or the "IRI"
	    production in <xref target="RFC3987"/>. Note that use of
	    a relative reference other than a simple name is not
	    allowed.  If a name is given, implementations &MUST;
      consider the link relation type equivalent to the
	    same name registered within the IANA Registry of Link
	    Relations (<xref target="IANA"/>), and thus to the IRI that would be
	    obtained 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 Atom
	    Processors.</t>

	    <t>This document defines five initial values for the Registry of
	    Link Relations:
	      <list style="numbers">

		<t>
    <iref item="alternate (Link Relation)" primary="true"/>
    <iref item="Link Relations" subitem="alternate" primary="true"/> 
    The value "alternate" signifies that the IRI in the value of
		the href attribute identifies an alternate version of the resource
		described by the containing element.</t>

		<t>
    <iref item="related (Link Relation)" primary="true"/>
    <iref item="Link Relations" subitem="related" primary="true"/> 
    The value "related" signifies that the IRI in the value of the
		href attribute identifies a resource related to the resource
		described by the containing element. For example, the feed for a
		site that discusses the performance of the search engine at
		"http://search.example.com" might contain, as a child of
		<x:ref>atom:feed</x:ref>:

		<figure> 
		  <artwork type="example">
    &lt;link rel="related" href="http://search.example.com/"/&gt;
</artwork> 
		</figure>An identical link might appear as a child of any
		<x:ref>atom:entry</x:ref> whose content contains a discussion of that
		same search engine.</t>

		<t>
    <iref item="self (Link Relation)" primary="true"/>
    <iref item="Link Relations" subitem="self" primary="true"/> 
    The value "self" signifies that the IRI in the value of the
		href attribute identifies a resource equivalent to the containing
		element.</t>

		<t>
    <iref item="enclosure (Link Relation)" primary="true"/>
    <iref item="Link Relations" subitem="enclosure" primary="true"/> 
    The value "enclosure" signifies that the IRI in the
		value of the href attribute identifies a related
		resource that is potentially large in size and might
		require special handling. For <x:ref>atom:link</x:ref> elements with
		rel="enclosure", the length attribute &SHOULD; be
		provided.</t>
		
		<t>
    <iref item="via (Link Relation)" primary="true"/>
    <iref item="Link Relations" subitem="via" primary="true"/> 
    The value "via" signifies that the IRI in the value of the href
		attribute identifies a resource that is the source of the
		information provided in the containing element.</t>

	      </list></t>

	  </section> 

	  <section title="The &#34;type&#34; Attribute"> 

	    <t>On the link element, the "type" attribute's value is an
	    advisory media type: it is a hint about the type of the
	    representation that is expected to be returned when the
	    value of the href attribute is dereferenced. Note that the
	    type attribute does not override the actual media type
	    returned with the representation. Link elements &MAY; have a
	    type attribute, whose value &MUST; conform to the syntax of
	    a MIME media type <xref target="MIMEREG"/>.</t>

	  </section> 
	      
	  <section title="The &#34;hreflang&#34; Attribute"> 

	    <t>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 translated version of the
	    entry. Link elements &MAY; have an hreflang attribute, whose value
	    &MUST; be a language tag <xref target="RFC3066"/>.</t>

	  </section> 
		
	  <section title="The &#34;title&#34; Attribute"> 

	    <t>The "title" attribute conveys human-readable
	    information about the link. The content of the "title"
	    attribute is Language-Sensitive. Entities such as
	    "&amp;amp;" and "&amp;lt;" represent their corresponding
	    characters ("&amp;" and "&lt;", respectively), not
	    markup. Link elements &MAY; have a title attribute.</t>

	  </section>

	  <section title="The &#34;length&#34; Attribute"> 

	    <t>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 IRI
	    in the href attribute is mapped to a URI and
	    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.</t>

	  </section> 
	  
	</section> 

	<section anchor="element.logo" title="The &#34;atom:logo&#34; Element">
    <x:anchor-alias value="atom:logo"/>
    <x:anchor-alias value="atomLogo"/>
    <iref item="XML Elements" subitem="logo" primary="true"/>
    <iref item="logo XML element" primary="true"/>

	  <t>The "<x:ref>atom:logo</x:ref>" element's content is an IRI reference <xref target="RFC3987"/> that identifies an image that provides visual
	  identification for a feed.

	    <figure> 
        <iref item="atomLogo grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomLogo" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomLogo</x:ref> = element <x:ref>atom:logo</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   (atomUri)
}</artwork></figure></t> 

	  <t>The image &SHOULD; have an aspect ratio of 2 (horizontal)
	  to 1 (vertical).</t>
	</section>

	<section anchor="element.published" title="The &#34;atom:published&#34; Element">
    <x:anchor-alias value="atom:published"/>
    <x:anchor-alias value="atomPublished"/>
    <iref item="XML Elements" subitem="published" primary="true"/>
    <iref item="published XML element" primary="true"/> 

	  <t>The "<x:ref>atom:published</x:ref>" element is a Date construct indicating an
	  instant in time associated with an event early in the life cycle of
	  the entry.

	    <figure> 
        <iref item="atomPublished grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomPublished" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomPublished</x:ref> = element <x:ref>atom:published</x:ref> { <x:ref>atomDateConstruct</x:ref>}</artwork></figure></t>

	   <t>Typically, <x:ref>atom:published</x:ref> will be associated with the
	   initial creation or first availability of the resource.</t>

	</section>

	<section anchor="element.rights" title="The &#34;atom:rights&#34; Element">
    <x:anchor-alias value="atom:rights"/>
    <x:anchor-alias value="atomRights"/>
    <iref item="XML Elements" subitem="rights" primary="true"/>
    <iref item="rights XML element" primary="true"/>

	  <t>The "<x:ref>atom:rights</x:ref>" element is a Text construct that
	  conveys information about rights held in and over an entry or feed.
	  
	    <figure>
        <iref item="atomRights grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomRights" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomRights</x:ref> = element <x:ref>atom:rights</x:ref> { <x:ref>atomTextConstruct</x:ref> }</artwork></figure></t>

	  <t>The <x:ref>atom:rights</x:ref> element &SHOULD-NOT; be used to convey
	  machine-readable licensing information.</t>

          <t>If an <x:ref>atom:entry</x:ref> element does not contain an
          <x:ref>atom:rights</x:ref> element, then the <x:ref>atom:rights</x:ref> element of
          the containing <x:ref>atom:feed</x:ref> element, if present, is considered
          to apply to the entry.</t>

	</section>

	<section anchor="element.source" title="The &#34;atom:source&#34; Element">
    <x:anchor-alias value="atom:source"/>
    <x:anchor-alias value="atomSource"/>
    <iref item="XML Elements" subitem="source" primary="true"/>
    <iref item="source XML element" primary="true"/>

	  <t>If an <x:ref>atom:entry</x:ref> is copied from one feed into another
	  feed, then the source <x:ref>atom:feed</x:ref>'s metadata (all child
	  elements of <x:ref>atom:feed</x:ref> other than the <x:ref>atom:entry</x:ref> elements)
	  &MAY; be preserved within the copied entry by adding an
	  <x:ref>atom:source</x:ref> child element, if it is not already present in
	  the entry, and including some or all of the source feed's
	  Metadata elements as the <x:ref>atom:source</x:ref> element's children.
	  Such metadata &SHOULD; be preserved if the source <x:ref>atom:feed</x:ref>
	  contains any of the child elements <x:ref>atom:author</x:ref>,
	  <x:ref>atom:contributor</x:ref>, <x:ref>atom:rights</x:ref>, or <x:ref>atom:category</x:ref> and those
	  child elements are not present in the source <x:ref>atom:entry</x:ref>.

	    <figure>
        <iref item="atomSource grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomSource" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomSource</x:ref> =
   element <x:ref>atom:source</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      (<x:ref>atomAuthor</x:ref>*
       &amp; <x:ref>atomCategory</x:ref>*
       &amp; <x:ref>atomContributor</x:ref>*
       &amp; <x:ref>atomGenerator</x:ref>?
       &amp; <x:ref>atomIcon</x:ref>?
       &amp; <x:ref>atomId</x:ref>?
       &amp; <x:ref>atomLink</x:ref>*
       &amp; <x:ref>atomLogo</x:ref>?
       &amp; <x:ref>atomRights</x:ref>?
       &amp; <x:ref>atomSubtitle</x:ref>?
       &amp; <x:ref>atomTitle</x:ref>?
       &amp; <x:ref>atomUpdated</x:ref>?
       &amp; <x:ref>extensionElement</x:ref>*)
   }</artwork></figure></t>

	  <t>The <x:ref>atom:source</x:ref> element is designed to allow the
	  aggregation of entries from different feeds while retaining
	  information about an entry's source feed. For this reason,
	  Atom Processors that are performing such aggregation &SHOULD;
    include at least the required feed-level Metadata elements
	  (<x:ref>atom:id</x:ref>, <x:ref>atom:title</x:ref>, and <x:ref>atom:updated</x:ref>) in the <x:ref>atom:source</x:ref>
	  element.</t>
	</section>

	<section anchor="element.subtitle" title="The &#34;atom:subtitle&#34; Element">
    <x:anchor-alias value="atom:subtitle"/>
    <x:anchor-alias value="atomSubtitle"/>
    <iref item="XML Elements" subitem="subtitle" primary="true"/>
    <iref item="subtitle XML element" primary="true"/> 
	      
	  <t>The "<x:ref>atom:subtitle</x:ref>" element is a Text construct that conveys a
	  human-readable description or subtitle for a feed.
 
	    <figure> 
        <iref item="atomSubtitle grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomSubtitle" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomSubtitle</x:ref> = element <x:ref>atom:subtitle</x:ref> { <x:ref>atomTextConstruct</x:ref> }</artwork></figure></t> 
	  
	</section> 

	<section anchor="element.summary" title="The &#34;atom:summary&#34; Element">
    <x:anchor-alias value="atom:summary"/>
    <x:anchor-alias value="atomSummary"/>
    <iref item="XML Elements" subitem="summary" primary="true"/>
    <iref item="summary XML element" primary="true"/>

	  <t>The "<x:ref>atom:summary</x:ref>" element is a Text construct that
	  conveys a short summary, abstract, or excerpt of an
	  entry. 
	 
	    <figure>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomSummary</x:ref> = element <x:ref>atom:summary</x:ref> { <x:ref>atomTextConstruct</x:ref> }</artwork></figure></t> 
	      
	      <t>It is not advisable for the <x:ref>atom:summary</x:ref> element to
	      duplicate <x:ref>atom:title</x:ref> or <x:ref>atom:content</x:ref> because Atom
	      Processors might assume there is a useful summary when
	      there is none.</t>
	</section> 

	<section anchor="element.title" title="The &#34;atom:title&#34; Element">
    <x:anchor-alias value="atom:title"/>
    <x:anchor-alias value="atomTitle"/>
    <iref item="XML Elements" subitem="title" primary="true"/>
    <iref item="title XML element" primary="true"/> 

	  <t>The "<x:ref>atom:title</x:ref>" element is a Text construct that conveys a
	  human-readable title for an entry or feed.

	    <figure>
        <iref item="atomTitle grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomTitle" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomTitle</x:ref> = element <x:ref>atom:title</x:ref> { <x:ref>atomTextConstruct</x:ref> }</artwork></figure></t>
	  
	</section> 
	
	<section anchor="element.updated" title="The &#34;atom:updated&#34; Element">
    <x:anchor-alias value="atom:updated"/>
    <x:anchor-alias value="atomUpdated"/>
    <iref item="XML Elements" subitem="updated" primary="true"/>
    <iref item="updated XML element" primary="true"/> 

	  <t>The "<x:ref>atom:updated</x:ref>" element is a Date construct indicating the
	  most recent instant in time when an entry or feed was modified in a
	  way the publisher considers significant. Therefore, not all
	  modifications necessarily result in a changed <x:ref>atom:updated</x:ref>
	  value.

	    <figure> 
        <iref item="atomUpdated grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomUpdated" primary="true"/>
	      <artwork type="application/relax-ng-compact-syntax">
<x:ref>atomUpdated</x:ref> = element <x:ref>atom:updated</x:ref> { <x:ref>atomDateConstruct</x:ref>}</artwork></figure></t>

	  <t>Publishers &MAY; change the value of this element over time.</t>
 
	</section> 

      </section> 

    </section>

      <section title="Securing Atom Documents"> 

	    <t>Because Atom is an XML-based format, existing XML security
	    mechanisms can be used to secure its content.</t>

	    
	    <t>Producers of feeds and/or entries, and intermediaries
	    who aggregate feeds and/or entries, may have sound
	    reasons for signing and/or encrypting
	    otherwise-unprotected content. For example, a merchant
	    might digitally sign a message that contains a discount
	    coupon for its products. A bank that uses Atom to deliver
	    customer statements is very likely to want to sign and
	    encrypt those messages to protect their customers'
	    financial information and to assure the customer of their
	    authenticity. Intermediaries may want to encrypt
	    aggregated feeds so that a passive observer cannot tell
	    what topics the recipient is interested in. Of course,
	    many other examples exist as well.</t>


	    <t>The algorithm requirements in this section pertain to
	    the Atom Processor. They require that a recipient, at a
	    minimum, be able to handle messages that use the specified
	    cryptographic algorithms.  These requirements do not limit the
	    algorithms that the sender can choose.</t>

	    <section title="Digital Signatures" toc="exclude">
     
	      <t>The root of an Atom Document (i.e., <x:ref>atom:feed</x:ref> in an
	      Atom Feed Document, <x:ref>atom:entry</x:ref> in an Atom Entry
	      Document) or any <x:ref>atom:entry</x:ref> element &MAY; have an
	      Enveloped Signature, as described by <xref target="W3C.REC-xmldsig-core-20020212">XML-Signature and
	      Syntax Processing</xref>.</t>

	      <t>Atom 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.</t>

	      <t>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 an
	      Atom Processor to fail merely because of its presence.</t>

	      <t>Other elements in an Atom Document &MUST-NOT; be signed unless
	      their definitions explicitly specify such a capability.</t>

	      <t><xref target="W3C.REC-xmldsig-core-20020212" x:fmt="of" x:sec="6.5.1" x:rel="#sec-Canonical"/> requires
	      support for Canonical XML <xref target="W3C.REC-xml-c14n-20010315"/>. However, many
	      implementers do not use it because signed XML documents
	      enclosed in other XML documents have their signatures
	      broken. Thus, Atom Processors that verify signed Atom
	      Documents &MUST; be able to canonicalize with the
	      exclusive XML canonicalization method identified by the
	      URI "http://www.w3.org/2001/10/xml-exc-c14n#", as
	      specified in Exclusive XML Canonicalization <xref target="W3C.REC-xml-exc-c14n-20020718"/>.
	      </t>

	      <t>Intermediaries such as aggregators may need to add an
	      <x:ref>atom:source</x:ref> element to an entry that does not contain
	      its own <x:ref>atom:source</x:ref> element. If such an entry is signed,
	      the addition will break the signature. Thus, a publisher
	      of individually-signed entries should strongly consider
	      adding an <x:ref>atom:source</x:ref> element to those entries before
	      signing them. Implementers should also be aware of the
	      issues concerning the use of markup in the "xml:"
	      namespace as it interacts with canonicalization.</t>

	      <t><xref target="W3C.REC-xmldsig-core-20020212" x:fmt="of" x:sec="4.4.2" x:rel="#sec-KeyValue"/> requires
	      support for DSA signatures and recommends support for
	      RSA signatures.  However, because of the much greater
	      popularity in the market of RSA versus DSA, Atom
	      Processors that verify signed Atom Documents &MUST; be
	      able to verify RSA signatures, but do not need be able
	      to verify DSA signatures. Due to security issues that
	      can arise if the keying material for message
	      authentication code (MAC) authentication is not handled
	      properly, Atom Documents &SHOULD-NOT; use MACs for
	      signatures.</t>
	      
	    </section> 

	    <section title="Encryption" toc="exclude"> 

	      <t>The root of an Atom Document (i.e., <x:ref>atom:feed</x:ref> in an Atom Feed
	      Document, <x:ref>atom:entry</x:ref> in an Atom Entry Document) &MAY; be
	      encrypted, using the mechanisms described by <xref target="W3C.REC-xmlenc-core-20021210"> XML Encryption Syntax and
	      Processing</xref>.</t>

	      <t><xref target="W3C.REC-xmlenc-core-20021210" x:fmt="of" x:sec="5.1" x:rel="#sec-AlgID"/>
	      requires support of TripleDES, AES-128, and
	      AES-256. Atom Processors that decrypt Atom Documents
	      &MUST; be able to decrypt with AES-128 in Cipher Block Chaining (CBC) mode.</t>

	      <t>Encryption based on <xref target="W3C.REC-xmlenc-core-20021210"/> does not ensure
	      integrity of the original document. There are known
	      cryptographic attacks where someone who cannot decrypt a
	      message can still change bits in a way where part or all
	      the decrypted message makes sense but has a different
	      meaning. Thus, Atom Processors that decrypt Atom
	      Documents &SHOULD; check the integrity of the decrypted
	      document by verifying the hash in the signature (if any)
	      in the document, or by verifying a hash of the document
	      within the document (if any).</t>


	    </section> 

	    <section title="Signing and Encrypting" toc="exclude">
		
		<t>When an Atom Document is to be both signed and
		encrypted, it is generally a good idea to first sign
		the document, then encrypt the signed document. This
		provides integrity to the base document while
		encrypting all the information, including the identity
		of the entity that signed the document. Note that, if
		MACs are used for authentication, the order &MUST; be
		that the document is signed and then encrypted, and not the
		other way around.</t>

	    </section>

	  </section>

	  <section title="Extending Atom" anchor="extending_atom"> 

	    <section title="Extensions from Non-Atom Vocabularies" toc="exclude">
	    
	      <t>This specification describes Atom's XML markup
	      vocabulary. Markup from other vocabularies ("foreign markup")
	      can be used in an Atom Document. Note that the <x:ref>atom:content</x:ref>
	      element is designed to support the inclusion of arbitrary
	      foreign markup.</t>
	    
	    </section>
	    
	    <section title="Extensions to the Atom Vocabulary" toc="exclude" anchor="extensions.to.the.atom.vocabulary">

	      <t>The Atom namespace is reserved for future
	      forward-compatible revisions of Atom. Future versions
	      of this specification could add new elements and
	      attributes to the Atom markup vocabulary. Software
	      written to conform to this version of the specification
	      will not be able to process such markup correctly and,
	      in fact, will not be able to distinguish it from markup
	      error. For the purposes of this discussion, unrecognized
	      markup from the Atom vocabulary will be considered
	      "foreign markup".</t>

	    </section>
	    
	    <section title="Processing Foreign Markup" toc="exclude" anchor="processing.foreign.markup">
	      
	      <t>Atom Processors that encounter foreign markup in a
	      location that is legal according to this specification
	      &MUST-NOT; stop processing or signal an error. It might be
	      the case that the Atom Processor is able to process the
	      foreign markup correctly and does so. Otherwise, such
	      markup is termed "unknown foreign markup".</t>
        
	      <t>When unknown foreign markup is encountered as a child of
	      <x:ref>atom:entry</x:ref>, <x:ref>atom:feed</x:ref>, or a Person construct, Atom Processors &MAY;
	      bypass the markup and any textual content and &MUST-NOT; change
	      their behavior as a result of the markup's presence.</t>
        
	      <t>When unknown foreign markup is encountered in a Text
	      Construct or <x:ref>atom:content</x:ref> element, software &SHOULD; ignore
	      the markup and process any text content of foreign
	      elements as though the surrounding markup were not
	      present.</t>

	    </section>

	    <section title="Extension Elements" anchor="extension" toc="exclude">
        <x:anchor-alias value="extensionElement"/>
        
	      <t>Atom allows foreign markup anywhere in an Atom
	      document, except where it is explicitly forbidden.
	      Child elements of <x:ref>atom:entry</x:ref>, <x:ref>atom:feed</x:ref>, <x:ref>atom:source</x:ref>, and
	      Person constructs are considered Metadata elements and
	      are described below. Child elements of Person constructs
	      are considered to apply to the construct. The role of
	      other foreign markup is undefined by this
	      specification.</t>

	      <section title="Simple Extension Elements" toc="exclude" anchor="simple.extension.elements">
          <x:anchor-alias value="simpleExtensionElement"/>

		<t>A Simple Extension element &MUST-NOT; have any
		attributes or child elements.  The element &MAY; contain
		character data or be empty. Simple Extension elements
		are not Language-Sensitive.

		<figure> 
      <iref item="simpleExtensionElement grammar production" primary="true"/>
      <iref item="Grammar" subitem="simpleExtensionElement" primary="true"/>
		  <artwork type="application/relax-ng-compact-syntax">
<x:ref>simpleExtensionElement</x:ref> =
   element * - atom:* {
      text
   }</artwork></figure></t>


		<t>The element can be interpreted as a simple property (or
		name/value pair) of the parent element that encloses it.  The
		pair consisting of the namespace-URI of the element and the
		local name of the element can be interpreted as the name of
		the property.  The character data content of the element can
		be interpreted as the value of the property.  If the element
		is empty, then the property value can be interpreted as an
		empty string.</t>

	      </section>

	      <section title="Structured Extension Elements" toc="exclude" anchor="structured.extension.elements">
          <x:anchor-alias value="structuredExtensionElement"/>

		<t>The root element of a Structured Extension element
		&MUST; have at least one attribute or child element.  It
		&MAY; have attributes, it &MAY; contain well-formed XML
		content (including character data), or it &MAY; be
		empty. Structured Extension elements are
		Language-Sensitive.

		<figure> 
      <iref item="structuredExtensionElement grammar production" primary="true"/>
      <iref item="Grammar" subitem="structuredExtensionElement" primary="true"/>
		  <artwork type="application/relax-ng-compact-syntax">
<x:ref>structuredExtensionElement</x:ref> =
   element * - atom:* {
      (attribute * { text }+,
         (text|anyElement)*)
    | (attribute * { text }*,
       (text?, anyElement+, (text|anyElement)*))
   }</artwork></figure></t>


		<t>The structure of a Structured Extension element, including
		the order of its child elements, could be significant.</t>

		<t>This specification does not provide an interpretation of a
		Structured Extension element.  The syntax of the XML contained
		in the element (and an interpretation of how the element
		relates to its containing element) is defined by the
		specification of the Atom extension.</t>

	      </section>

	    </section>

	  </section>

     
	  <section title="IANA Considerations" anchor="IANA"> 

    <iref item="Media Type" subitem="application/atom+xml" primary="true"/>
    <iref item="application/atom+xml Media Type" primary="true"/>
    
	    <t>An Atom Document, when serialized as XML 1.0, can be identified
	    with the following media type:</t>

	    <t>
	      <list style="hanging"> 
		<t hangText="MIME media type name:"> application</t>
		<t hangText="MIME subtype name:"> atom+xml</t>
		<t hangText="Mandatory parameters:"> None.</t> 
		<t hangText="Optional parameters:"> 
		  <list style="hanging"> 
		    <t hangText="&#34;charset&#34;:"> This parameter has semantics identical
        to the charset parameter of the
		    "application/xml" media type as specified in <xref target="RFC3023"/>.</t>
		  </list> 
		</t>
		
		<t hangText="Encoding considerations:"> Identical to those of
		"application/xml" as described in <xref target="RFC3023" x:fmt="," x:sec="3.2"/>.</t>

		<t hangText="Security considerations:"> As defined in this
		specification.</t>

		<t>In addition, as this media type uses the "+xml" convention,
		it shares the same security considerations as described in
		<xref target="RFC3023" x:fmt="," x:sec="10"/>.</t>

		<t hangText="Interoperability considerations:"> There are no
		known interoperability issues.</t>

		<t hangText="Published specification:"> This
		specification.</t>
		
		<t hangText="Applications that use this media type:"> No known
		applications currently use this media type.</t>

	      </list>
	    </t>

	    <t>Additional information:</t> 

	    <t>
	      <list style="hanging"> 
		
		<t hangText="Magic number(s):"> As specified for
		"application/xml" in <xref target="RFC3023" x:fmt="," x:sec="3.2"/>.</t>

		<t hangText="File extension:"> .atom</t> 

		<t hangText="Fragment identifiers:"> As specified for
		"application/xml" in <xref target="RFC3023" x:fmt="," x:sec="5"/>.</t>

		<t hangText="Base URI:"> As specified in <xref target="RFC3023" x:fmt="," x:sec="6"/>.</t> 

		<t hangText="Macintosh File Type code:"> TEXT</t>

		<t hangText="Person and email address to contact for further information:"> Mark Nottingham &lt;mnot@pobox.com&gt;</t>

		<t hangText="Intended usage:">
		COMMON</t> <t hangText="Author/Change controller:">IESG</t>
		</list></t>

		<section title="Registry of Link Relations" toc="exclude"> 
		  <t>This registry is maintained by IANA and initially
		  contains five values: "alternate", "related", "self",
		  "enclosure", and "via". New assignments are subject to IESG
		  Approval, as outlined in <xref target="RFC2434"/>. Requests
		  should be made by email to IANA, which will then forward the
		  request to the IESG, requesting approval. The request should
		  use the following template:</t>
      
		  <t>
		    <list style="symbols"> 
		      <t>Attribute Value: (A value for the "rel" attribute that conforms to the
		      syntax rule given in <xref target="rel_attribute"/>)</t>

		      <t>Description:</t>

		      <t>Expected display characteristics:</t> 
      
		      <t>Security considerations:</t>

		    </list>
		  </t> 

		</section> 
	  </section> 

	  <section title="Security Considerations"> 

	    <section title="HTML and XHTML Content" toc="exclude">

	      <t>Text constructs and <x:ref>atom:content</x:ref> allow the delivery
	      of HTML and XHTML. Many elements in these languages are
	      considered 'unsafe' in that they open clients to one or
	      more types of attack. Implementers of software that
	      processes Atom should carefully consider their handling
	      of every type of element when processing incoming
	      (X)HTML in Atom Documents. See the security sections of
	      <xref target="RFC2854"/> and <xref target="HTML"/> for
	      guidance.</t>

	      <t>Atom Processors should pay particular attention to the
	      security of the IMG, SCRIPT, EMBED, OBJECT, FRAME, FRAMESET,
	      IFRAME, META, and LINK elements, but other elements might also
	      have negative security properties.</t>

	      <t>(X)HTML can either directly contain or indirectly reference
	      executable content.</t>

	    </section>

	    <section title="URIs" toc="exclude">

	      <t>Atom Processors handle URIs. See <xref target="RFC3986" x:fmt="of" x:sec="7"/>.</t>

	    </section>

	    <section title="IRIs" toc="exclude">
	      <t>Atom Processors handle IRIs. See <xref target="RFC3987" x:fmt="of" x:sec="8"/>.</t>
	    </section>

	    <section title="Spoofing" toc="exclude">

	      <t>Atom Processors should be aware of the potential for
	      spoofing attacks where the attacker publishes an
	      <x:ref>atom:entry</x:ref> with the <x:ref>atom:id</x:ref> value of an entry from
	      another feed, perhaps with a falsified <x:ref>atom:source</x:ref>
	      element duplicating the <x:ref>atom:id</x:ref> of the other feed. For
	      example, an Atom Processor could suppress display of
	      duplicate entries by displaying only one entry from a
	      set of entries with identical <x:ref>atom:id</x:ref> values. In that
	      situation, the Atom Processor might also take steps to
	      determine whether the entries originated from the same
	      publisher before considering them duplicates.</t>

	    </section>

	    <section title="Encryption and Signing" toc="exclude">

	      <t>Atom Documents can be encrypted and signed using <xref target="W3C.REC-xmlenc-core-20021210"/> and <xref target="W3C.REC-xmldsig-core-20020212"/>, respectively, and are
	      subject to the security considerations implied by their
	      use. </t>

	      <t>Digital signatures provide authentication, message
	      integrity, and non-repudiation with proof of
	      origin. Encryption provides data confidentiality.</t>

	    </section>

	  </section>

	</middle> 

	<back> 
	  
	  <references title="Normative References"> 

<reference anchor="MIMEREG">
<front>
<title>Media Type Specifications and Registration Procedures</title>
<author initials="N." surname="Freed" fullname="N. Freed">
<organization/></author>
<author initials="J." surname="Klensin" fullname="J. Klensin">
<organization/></author>
<date year="2005" month="December"/></front>
<seriesInfo name="BCP" value="13"/>
<seriesInfo name="RFC" value="4288"/>
</reference>
	      

<reference anchor="RFC2119">

<front>
<title abbrev="RFC Key Words">Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials="S." surname="Bradner" fullname="Scott Bradner">
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email></address></author>
<date year="1997" month="March"/>
<area>General</area>
<keyword>keyword</keyword>
<abstract>
<t>
   In many standards track documents several words are used to signify
   the requirements in the specification.  These words are often
   capitalized.  This document defines these words as they should be
   interpreted in IETF documents.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      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
      RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="2119"/>
</reference>
 

<reference anchor="RFC2822">

<front>
<title>Internet Message Format</title>
<author initials="P." surname="Resnick" fullname="P. Resnick">
<organization/></author>
<date year="2001" month="April"/>
<abstract>
<t>This document specifies a syntax for text messages that are sent betweencomputer users, within the framework of "electronic mail" messages.[STANDARDS TRACK]</t></abstract></front>

<seriesInfo name="RFC" value="2822"/>
</reference>
 

<reference anchor="RFC2854">

<front>
<title>The 'text/html' Media Type</title>
<author initials="D." surname="Connolly" fullname="D. Connolly">
<organization/></author>
<author initials="L." surname="Masinter" fullname="L. Masinter">
<organization/></author>
<date year="2000" month="June"/></front>

<seriesInfo name="RFC" value="2854"/>
</reference>
 

<reference anchor="RFC3023">

<front>
<title>XML Media Types</title>
<author initials="M." surname="Murata" fullname="M. Murata">
<organization/></author>
<author initials="S." surname="St. Laurent" fullname="S. St. Laurent">
<organization/></author>
<author initials="D." surname="Kohn" fullname="D. Kohn">
<organization/></author>
<date year="2001" month="January"/>
<abstract>
<t>This document standardizes five new media types -- text/xml, application/xml, text/xml-external-parsed-entity, application/xml-external-parsed-entity, and application/xml-dtd -- for use in exchanging network entities that are related to the Extensible Markup Language (XML).  This document also standardizes a convention (using the suffix '+xml') for naming media types outside of these five types when those media types represent XML MIME (Multipurpose Internet Mail Extensions) entities.</t></abstract></front>

<seriesInfo name="RFC" value="3023"/>
</reference>
 

<reference anchor="RFC3066">

<front>
<title>Tags for the Identification of Languages</title>
<author initials="H." surname="Alvestrand" fullname="H. Alvestrand">
<organization/></author>
<date year="2001" month="January"/>
<abstract>
<t>This document describes a language tag for use in cases where it is desired to indicate the language used in an information object, how to register values for use in this language tag, and a construct for matching such language tags.</t></abstract></front>

<seriesInfo name="BCP" value="47"/>
<seriesInfo name="RFC" value="3066"/>
</reference>
 

<reference anchor="RFC3339">

<front>
<title>Date and Time on the Internet: Timestamps</title>
<author initials="G." surname="Klyne" fullname="G. Klyne">
<organization/></author>
<author initials="C." surname="Newman" fullname="C. Newman">
<organization/></author>
<date year="2002" month="July"/>
<abstract>
<t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t></abstract></front>

<seriesInfo name="RFC" value="3339"/>
</reference>
 

<reference anchor="RFC3548">

<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author initials="S." surname="Josefsson" fullname="S. Josefsson">
<organization/></author>
<date year="2003" month="July"/>
<abstract>
<t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, and use of different encoding alphabets.</t></abstract></front>

<seriesInfo name="RFC" value="3548"/>
</reference>
 

<reference anchor="RFC3986">

<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
<organization/></author>
<author initials="R." surname="Fielding" fullname="R. Fielding">
<organization/></author>
<author initials="L." surname="Masinter" fullname="L. Masinter">
<organization/></author>
<date year="2005" month="January"/></front>

<seriesInfo name="STD" value="66"/>
<seriesInfo name="RFC" value="3986"/>
</reference>
 

<reference anchor="RFC3987">

<front>
<title>Internationalized Resource Identifiers (IRIs)</title>
<author initials="M." surname="Duerst" fullname="M. Duerst">
<organization/></author>
<author initials="M." surname="Suignard" fullname="M. Suignard">
<organization/></author>
<date year="2005" month="January"/></front>

<seriesInfo name="RFC" value="3987"/>
</reference>
 

<reference anchor="W3C.REC-xml-infoset-20040204" target="http://www.w3.org/TR/2004/REC-xml-infoset-20040204">
<front>
<title>XML Information Set (Second Edition)</title>

<author initials="J" surname="Cowan" fullname="John Cowan">
    <organization/>
</author>

<author initials="R" surname="Tobin" fullname="Richard Tobin">
    <organization/>
</author>

<date month="February" day="4" year="2004"/>
</front>

<seriesInfo name="W3C REC" value="REC-xml-infoset-20040204"/>
</reference>
 

<reference anchor="W3C.REC-xmlbase-20010627" target="http://www.w3.org/TR/2001/REC-xmlbase-20010627">
<front>
<title>XML Base</title>

<author initials="J" surname="Marsh" fullname="Jonathan Marsh">
    <organization/>
</author>

<date month="June" day="27" year="2001"/>
</front>

<seriesInfo name="W3C REC" value="REC-xmlbase-20010627"/>
</reference>
 

<reference anchor="W3C.REC-xml-names-19990114" target="http://www.w3.org/TR/1999/REC-xml-names-19990114">
<front>
<title>Namespaces in XML</title>

<author initials="D" surname="Hollander" fullname="Dave Hollander">
    <organization/>
</author>

<author initials="T" surname="Bray" fullname="Tim Bray">
    <organization/>
</author>

<author initials="A" surname="Layman" fullname="Andrew Layman">
    <organization/>
</author>

<date month="January" day="14" year="1999"/>
</front>

<seriesInfo name="W3C REC" value="REC-xml-names-19990114"/>
</reference>
 

<reference anchor="W3C.REC-xml-20040204" target="http://www.w3.org/TR/2004/REC-xml-20040204">
<front>
<title>Extensible Markup Language (XML) 1.0 (Third Edition)</title>

<author initials="F" surname="Yergeau" fullname="Franois Yergeau">
    <organization/>
</author>

<author initials="J" surname="Paoli" fullname="Jean Paoli">
    <organization/>
</author>

<author initials="C" surname="Sperberg-McQueen" fullname="C. M. Sperberg-McQueen">
    <organization/>
</author>

<author initials="T" surname="Bray" fullname="Tim Bray">
    <organization/>
</author>

<author initials="E" surname="Maler" fullname="Eve Maler">
    <organization/>
</author>

<date month="February" day="4" year="2004"/>
</front>

<seriesInfo name="W3C REC" value="REC-xml-20040204"/>
</reference>
 

<reference anchor="W3C.REC-xmldsig-core-20020212" target="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212">
<front>
<title>XML-Signature Syntax and Processing</title>

<author initials="D" surname="Solo" fullname="David Solo">
    <organization/>
</author>

<author initials="J" surname="Reagle" fullname="Joseph Reagle">
    <organization/>
</author>

<author initials="D" surname="Eastlake" fullname="Donald Eastlake">
    <organization/>
</author>

<date month="February" day="12" year="2002"/>
</front>

<seriesInfo name="W3C REC" value="REC-xmldsig-core-20020212"/>
</reference>
 

<reference anchor="W3C.REC-xmlenc-core-20021210" target="http://www.w3.org/TR/2002/REC-xmlenc-core-20021210">
<front>
<title>XML Encryption Syntax and Processing</title>

<author initials="J" surname="Reagle" fullname="Joseph Reagle">
    <organization/>
</author>

<author initials="D" surname="Eastlake" fullname="Donald Eastlake">
    <organization/>
</author>

<date month="December" day="10" year="2002"/>
</front>

<seriesInfo name="W3C REC" value="REC-xmlenc-core-20021210"/>
</reference>
 

<reference anchor="HTML" target="http://www.w3.org/TR/1999/REC-html401-19991224">
<front>
<title>HTML 4.01 Specification</title>

<author initials="D" surname="Raggett" fullname="David Raggett">
    <organization/>
</author>

<author initials="A" surname="Hors" fullname="Arnaud Le Hors">
    <organization/>
</author>

<author initials="I" surname="Jacobs" fullname="Ian Jacobs">
    <organization/>
</author>

<date month="December" day="24" year="1999"/>
</front>

<seriesInfo name="W3C REC" value="REC-html401-19991224"/>
</reference>
 

<reference anchor="XHTML" target="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410">
<front>
<title>Modularization of XHTML™</title>

<author initials="M" surname="Altheim" fullname="Murray Altheim">
    <organization/>
</author>

<author initials="F" surname="Boumphrey" fullname="Frank Boumphrey">
    <organization/>
</author>

<author initials="S" surname="McCarron" fullname="Shane McCarron">
    <organization/>
</author>

<author initials="S" surname="Dooley" fullname="Sam Dooley">
    <organization/>
</author>

<author initials="S" surname="Schnitzenbaumer" fullname="Sebastian Schnitzenbaumer">
    <organization/>
</author>

<author initials="T" surname="Wugofski" fullname="Ted Wugofski">
    <organization/>
</author>

<date month="April" day="10" year="2001"/>
</front>

<seriesInfo name="W3C REC" value="REC-xhtml-modularization-20010410"/>
</reference>

        
        
        

<reference anchor="W3C.REC-xml-c14n-20010315" target="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
<front>
<title>Canonical XML Version 1.0</title>

<author initials="J" surname="Boyer" fullname="John Boyer">
    <organization/>
</author>

<date month="March" day="15" year="2001"/>
</front>

<seriesInfo name="W3C REC" value="REC-xml-c14n-20010315"/>
</reference>
 

<reference anchor="W3C.REC-xml-exc-c14n-20020718" target="http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718">
<front>
<title>Exclusive XML Canonicalization Version 1.0</title>

<author initials="D" surname="Eastlake" fullname="Donald E. Eastlake 3rd">
    <organization/>
</author>

<author initials="J" surname="Boyer" fullname="John Boyer">
    <organization/>
</author>

<author initials="J" surname="Reagle" fullname="Joseph Reagle">
    <organization/>
</author>

<date month="July" day="18" year="2002"/>
</front>

<seriesInfo name="W3C REC" value="REC-xml-exc-c14n-20020718"/>
</reference>

	  </references>
	  
	  <references title="Informative References">

	    

<reference anchor="RFC2434">

<front>
<title abbrev="Guidelines for IANA Considerations">Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author initials="T." surname="Narten" fullname="Thomas Narten">
<organization>IBM Corporation</organization>
<address>
<postal>
<street>3039 Cornwallis Ave.</street>
<street>PO Box 12195 - BRQA/502</street>
<street>Research Triangle Park</street>
<street>NC 27709-2195</street></postal>
<phone>919-254-7798</phone>
<email>narten@raleigh.ibm.com</email></address></author>
<author initials="H.T." surname="Alvestrand" fullname="Harald Tveit Alvestrand">
<organization>Maxware</organization>
<address>
<postal>
<street>Pirsenteret</street>
<street>N-7005 Trondheim</street>
<country>Norway</country></postal>
<phone>+47 73 54 57 97</phone>
<email>Harald@Alvestrand.no</email></address></author>
<date year="1998" month="October"/>
<area>General</area>
<keyword>Internet Assigned Numbers Authority</keyword>
<keyword>IANA</keyword>
<abstract>
<t>
   Many protocols make use of identifiers consisting of constants and
   other well-known values. Even after a protocol has been defined and
   deployment has begun, new values may need to be assigned (e.g., for a
   new option type in DHCP, or a new encryption or authentication
   algorithm for IPSec).  To insure that such quantities have consistent
   values and interpretations in different implementations, their
   assignment must be administered by a central authority. For IETF
   protocols, that role is provided by the Internet Assigned Numbers
   Authority (IANA).
</t>
<t>
   In order for the IANA to manage a given name space prudently, it
   needs guidelines describing the conditions under which new values can
   be assigned. If the IANA is expected to play a role in the management
   of a name space, the IANA must be given clear and concise
   instructions describing that role.  This document discusses issues
   that should be considered in formulating a policy for assigning
   values to a name space and provides guidelines to document authors on
   the specific text that must be included in documents that place
   demands on the IANA.
</t></abstract></front>

<seriesInfo name="BCP" value="26"/>
<seriesInfo name="RFC" value="2434"/>
</reference>


<reference anchor="ISO.8601.1988">
<front>
<title>Data elements and interchange formats - Information interchange - Representation of dates and times</title>
<author>
<organization>International Organization for Standardization</organization>
</author>
<date month="June" year="1988"/>
</front>
<seriesInfo name="ISO" value="Standard 8601"/>
</reference>

      

<reference anchor="W3C.REC-xmlschema-2-20041028" target="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028">
<front>
<title>XML Schema Part 2: Datatypes Second Edition</title>

<author initials="A" surname="Malhotra" fullname="Ashok Malhotra">
    <organization/>
</author>

<author initials="P" surname="Biron" fullname="Paul V. Biron">
    <organization/>
</author>

<date month="October" day="28" year="2004"/>
</front>

<seriesInfo name="W3C REC" value="REC-xmlschema-2-20041028"/>
</reference>

      

<reference anchor="W3C.NOTE-datetime-19980827" target="http://www.w3.org/TR/1998/NOTE-datetime-19980827">
<front>
<title>Date and Time Formats</title>

<author initials="M" surname="Wolf" fullname="Misha Wolf">
    <organization/>
</author>

<author initials="C" surname="Wicksteed" fullname="Charles Wicksteed">
    <organization/>
</author>

<date month="August" day="27" year="1998"/>
</front>

<seriesInfo name="W3C NOTE" value="NOTE-datetime-19980827"/>
</reference>


	    <reference anchor="RELAX-NG" target="http://www.oasis-open.org/committees/relax-ng/compact-20021121.html"> 
	      
	      <front> 
		
		<title>RELAX NG Compact Syntax</title>
		
	
		<author initials="J" surname="Clark" fullname="James Clark">
		  <organization>OASIS Technical Committee: RELAX NG</organization> 
		</author> 

		<date year="2001" month="December" day="03"/>
	      </front> 

	    </reference> 
	    </references> 

	    <section title="Contributors"> 
	    
	      <t>The following people contributed to preliminary
	      versions 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 Atompub Working Group.</t>

	      <t>The Atompub Working Group has dozens of very active
	      contributors who proposed ideas and wording for this
	      document, including:</t>

	      <t>Danny Ayers, James Aylett, Roger Benningfield, Arve
	      Bersvendsen, Tim Bray, Dan Brickley, Thomas Broyer,
	      Robin Cover, Bill de hOra, Martin Duerst, Roy Fielding,
	      Joe Gregorio, Bjoern Hoehrmann, Paul Hoffman, Anne van
	      Kesteren, Brett Lindsley, Dare Obasanjo, David Orchard,
	      Aristotle Pagaltzis, John Panzer, Graham Parks, Dave
	      Pawson, Mark Pilgrim, David Powell, Julian Reschke, Phil
	      Ringnalda, Antone Roundy, Sam Ruby, Eric Scheid, Brent
	      Simmons, Henri Sivonen, Ray Slakinski, James Snell,
	      Henry Story, Asbjorn Ulsberg, Walter Underwood, Norman
	      Walsh, Dave Winer, and Bob Wyman.</t>

	    </section> 

	    <section title="RELAX NG Compact Schema" anchor="schema"> 
	      <t>This appendix is informative.</t>
	      
	      <t>The Relax NG schema explicitly excludes elements in
	      the Atom namespace that are not defined in this
	      revision of the specification. Requirements for Atom
	      Processors encountering such markup are given in Sections
        <xref target="extensions.to.the.atom.vocabulary" format="counter"/> and <xref target="processing.foreign.markup" format="counter"/>.
        </t>
        
	      <figure> 
		<artwork type="application/relax-ng-compact-syntax" name="collected-grammar.rnc">
# -*- rnc -*-
# RELAX NG Compact Syntax Grammar for the
# Atom Format Specification Version 11

namespace atom = "http://www.w3.org/2005/Atom"
namespace xhtml = "http://www.w3.org/1999/xhtml"
namespace s = "http://www.ascc.net/xml/schematron"
namespace local = ""

start = <x:ref>atomFeed</x:ref> | <x:ref>atomEntry</x:ref>

# Common attributes

<x:ref>atomCommonAttributes</x:ref> =
   attribute xml:base { atomUri }?,
   attribute xml:lang { atomLanguageTag }?,
   undefinedAttribute*

# Text Constructs

<x:ref>atomPlainTextConstruct</x:ref> =
   <x:ref>atomCommonAttributes</x:ref>,
   attribute type { "text" | "html" }?,
   text

<x:ref>atomXHTMLTextConstruct</x:ref> =
   <x:ref>atomCommonAttributes</x:ref>,
   attribute type { "xhtml" },
   xhtmlDiv

<x:ref>atomTextConstruct</x:ref> = <x:ref>atomPlainTextConstruct</x:ref> | <x:ref>atomXHTMLTextConstruct</x:ref>

# Person Construct

<x:ref>atomPersonConstruct</x:ref> =
   <x:ref>atomCommonAttributes</x:ref>,
   (element <x:ref>atom:name</x:ref> { text }
    &amp; element <x:ref>atom:uri</x:ref> { atomUri }?
    &amp; element <x:ref>atom:email</x:ref> { atomEmailAddress }?
    &amp; <x:ref>extensionElement</x:ref>*)

# Date Construct

<x:ref>atomDateConstruct</x:ref>=
   <x:ref>atomCommonAttributes</x:ref>,
   xsd:dateTime

# <x:ref>atom:feed</x:ref>

<x:ref>atomFeed</x:ref> =
   [
      s:rule [
         context = "<x:ref>atom:feed</x:ref>"
         s:assert [
            test = "<x:ref>atom:author</x:ref> or not(<x:ref>atom:entry</x:ref>[not(<x:ref>atom:author</x:ref>)])"
            "An <x:ref>atom:feed</x:ref> must have an <x:ref>atom:author</x:ref> unless all "
            ~ "of its <x:ref>atom:entry</x:ref> children have an <x:ref>atom:author</x:ref>."
         ]
      ]
   ]
   element <x:ref>atom:feed</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      (<x:ref>atomAuthor</x:ref>*
       &amp; <x:ref>atomCategory</x:ref>*
       &amp; <x:ref>atomContributor</x:ref>*
       &amp; <x:ref>atomGenerator</x:ref>?
       &amp; <x:ref>atomIcon</x:ref>?
       &amp; <x:ref>atomId</x:ref>
       &amp; <x:ref>atomLink</x:ref>*
       &amp; <x:ref>atomLogo</x:ref>?
       &amp; <x:ref>atomRights</x:ref>?
       &amp; <x:ref>atomSubtitle</x:ref>?
       &amp; <x:ref>atomTitle</x:ref>
       &amp; <x:ref>atomUpdated</x:ref>
       &amp; <x:ref>extensionElement</x:ref>*),
      <x:ref>atomEntry</x:ref>*
   }

# <x:ref>atom:entry</x:ref>

<x:ref>atomEntry</x:ref> =
   [
      s:rule [
         context = "<x:ref>atom:entry</x:ref>"
         s:assert [
            test = "<x:ref>atom:link</x:ref>[@rel='alternate'] "
            ~ "or <x:ref>atom:link</x:ref>[not(@rel)] "
            ~ "or <x:ref>atom:content</x:ref>"
            "An <x:ref>atom:entry</x:ref> must have at least one <x:ref>atom:link</x:ref> element "
            ~ "with a rel attribute of 'alternate' "
            ~ "or an <x:ref>atom:content</x:ref>."
         ]
      ]
      s:rule [
         context = "<x:ref>atom:entry</x:ref>"
         s:assert [
            test = "<x:ref>atom:author</x:ref> or "
            ~ "../<x:ref>atom:author</x:ref> or <x:ref>atom:source</x:ref>/<x:ref>atom:author</x:ref>"
            "An <x:ref>atom:entry</x:ref> must have an <x:ref>atom:author</x:ref> "
            ~ "if its feed does not."
         ]
      ]
   ]
   element <x:ref>atom:entry</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      (<x:ref>atomAuthor</x:ref>*
       &amp; <x:ref>atomCategory</x:ref>*
       &amp; <x:ref>atomContent</x:ref>?
       &amp; <x:ref>atomContributor</x:ref>*
       &amp; <x:ref>atomId</x:ref>
       &amp; <x:ref>atomLink</x:ref>*
       &amp; <x:ref>atomPublished</x:ref>?
       &amp; <x:ref>atomRights</x:ref>?
       &amp; <x:ref>atomSource</x:ref>?
       &amp; <x:ref>atomSummary</x:ref>?
       &amp; <x:ref>atomTitle</x:ref>
       &amp; <x:ref>atomUpdated</x:ref>
       &amp; <x:ref>extensionElement</x:ref>*)
   }

# <x:ref>atom:content</x:ref>

<x:ref>atomInlineTextContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { "text" | "html" }?,
      (text)*
   }

<x:ref>atomInlineXHTMLContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { "xhtml" },
      xhtmlDiv
   }

<x:ref>atomInlineOtherContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { atomMediaType }?,
      (text|anyElement)*
   }

<x:ref>atomOutOfLineContent</x:ref> =
   element <x:ref>atom:content</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute type { atomMediaType }?,
      attribute src { atomUri },
      empty
   }

<x:ref>atomContent</x:ref> = <x:ref>atomInlineTextContent</x:ref>
 | <x:ref>atomInlineXHTMLContent</x:ref>
 | <x:ref>atomInlineOtherContent</x:ref>
 | <x:ref>atomOutOfLineContent</x:ref>

# <x:ref>atom:author</x:ref>

<x:ref>atomAuthor</x:ref> = element <x:ref>atom:author</x:ref> { <x:ref>atomPersonConstruct</x:ref> }

# <x:ref>atom:category</x:ref>

<x:ref>atomCategory</x:ref> =
   element <x:ref>atom:category</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute term { text },
      attribute scheme { atomUri }?,
      attribute label { text }?,
      <x:ref>undefinedContent</x:ref>
   }

# <x:ref>atom:contributor</x:ref>

<x:ref>atomContributor</x:ref> = element <x:ref>atom:contributor</x:ref> { <x:ref>atomPersonConstruct</x:ref> }

# <x:ref>atom:generator</x:ref>

<x:ref>atomGenerator</x:ref> = element <x:ref>atom:generator</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   attribute uri { atomUri }?,
   attribute version { text }?,
   text
}

# <x:ref>atom:icon</x:ref>

<x:ref>atomIcon</x:ref> = element <x:ref>atom:icon</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   (atomUri)
}

# <x:ref>atom:id</x:ref>

<x:ref>atomId</x:ref> = element <x:ref>atom:id</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   (atomUri)
}

# <x:ref>atom:logo</x:ref>

<x:ref>atomLogo</x:ref> = element <x:ref>atom:logo</x:ref> {
   <x:ref>atomCommonAttributes</x:ref>,
   (atomUri)
}

# <x:ref>atom:link</x:ref>

<x:ref>atomLink</x:ref> =
   element <x:ref>atom:link</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      attribute href { atomUri },
      attribute rel { atomNCName | atomUri }?,
      attribute type { atomMediaType }?,
      attribute hreflang { atomLanguageTag }?,
      attribute title { text }?,
      attribute length { text }?,
      <x:ref>undefinedContent</x:ref>
   }

# <x:ref>atom:published</x:ref>

<x:ref>atomPublished</x:ref> = element <x:ref>atom:published</x:ref> { <x:ref>atomDateConstruct</x:ref>}

# <x:ref>atom:rights</x:ref>

<x:ref>atomRights</x:ref> = element <x:ref>atom:rights</x:ref> { <x:ref>atomTextConstruct</x:ref> }

# <x:ref>atom:source</x:ref>

<x:ref>atomSource</x:ref> =
   element <x:ref>atom:source</x:ref> {
      <x:ref>atomCommonAttributes</x:ref>,
      (<x:ref>atomAuthor</x:ref>*
       &amp; <x:ref>atomCategory</x:ref>*
       &amp; <x:ref>atomContributor</x:ref>*
       &amp; <x:ref>atomGenerator</x:ref>?
       &amp; <x:ref>atomIcon</x:ref>?
       &amp; <x:ref>atomId</x:ref>?
       &amp; <x:ref>atomLink</x:ref>*
       &amp; <x:ref>atomLogo</x:ref>?
       &amp; <x:ref>atomRights</x:ref>?
       &amp; <x:ref>atomSubtitle</x:ref>?
       &amp; <x:ref>atomTitle</x:ref>?
       &amp; <x:ref>atomUpdated</x:ref>?
       &amp; <x:ref>extensionElement</x:ref>*)
   }

# <x:ref>atom:subtitle</x:ref>

<x:ref>atomSubtitle</x:ref> = element <x:ref>atom:subtitle</x:ref> { <x:ref>atomTextConstruct</x:ref> }

# <x:ref>atom:summary</x:ref>

<x:ref>atomSummary</x:ref> = element <x:ref>atom:summary</x:ref> { <x:ref>atomTextConstruct</x:ref> }

# <x:ref>atom:title</x:ref>

<x:ref>atomTitle</x:ref> = element <x:ref>atom:title</x:ref> { <x:ref>atomTextConstruct</x:ref> }

# <x:ref>atom:updated</x:ref>

<x:ref>atomUpdated</x:ref> = element <x:ref>atom:updated</x:ref> { <x:ref>atomDateConstruct</x:ref> }

# Low-level simple types

atomNCName = xsd:string { minLength = "1" pattern = "[^:]*" }

# Whatever a media type is, it contains at least one slash
atomMediaType = xsd:string { pattern = ".+/.+" }

# As defined in RFC 3066
atomLanguageTag = xsd:string {
   pattern = "[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*"
}

# Unconstrained; it's not entirely clear how IRI fit into
# xsd:anyURI so let's not try to constrain it here
atomUri = text

# Whatever an email address is, it contains at least one @
atomEmailAddress = xsd:string { pattern = ".+@.+" }

# Simple Extension

<x:ref>simpleExtensionElement</x:ref> =
   element * - atom:* {
      text
   }

# Structured Extension

<x:ref>structuredExtensionElement</x:ref> =
   element * - atom:* {
      (attribute * { text }+,
         (text|anyElement)*)
    | (attribute * { text }*,
       (text?, anyElement+, (text|anyElement)*))
   }

# Other Extensibility

<x:ref>extensionElement</x:ref> =
   <x:ref>simpleExtensionElement</x:ref> | <x:ref>structuredExtensionElement</x:ref>

undefinedAttribute =
  attribute * - (xml:base | xml:lang | local:*) { text }

<x:ref anchor="undefinedContent">undefinedContent</x:ref> = (text|anyForeignElement)*

anyElement =
   element * {
      (attribute * { text }
       | text
       | anyElement)*
   }

anyForeignElement =
   element * - atom:* {
      (attribute * { text }
       | text
       | anyElement)*
   }

# XHTML

anyXHTML = element xhtml:* {
   (attribute * { text }
    | text
    | anyXHTML)*
}

xhtmlDiv = element xhtml:div {
   (attribute * { text }
    | text
    | anyXHTML)*
}

# EOF</artwork>
	      </figure>

	    </section>

	  </back> 
	</rfc>