<?xml version="1.0" encoding="UTF-8"?><?rfc linefile="1:xml/complete/rfc4287.xml"?>
<!-- automatically generated by xml2rfc v1.32 on 2007-04-02T19:01:17Z -->
<!--
    This XML document is the output of clean-for-DTD.xslt; a tool that strips
    extensions to RFC2629(bis) from documents for processing with xml2rfc.
-->
<?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" ?><!--
  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
  PUBLIC "" "rfc2629.dtd">
<rfc category="std" number="4287"> 
    <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">
       

      <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 <xref target="element.feed" format="none">atom:feed</xref> element.</t>

      <t>An Atom Entry Document represents exactly one Atom entry, outside of
      the context of an Atom feed. Its root is the <xref target="element.entry" format="none">atom:entry</xref> element.</t>

      <figure>
	<artwork type="rnc">
namespace atom = "http://www.w3.org/2005/Atom"	 		
start = atomFeed | atomEntry</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
      Section 3.1 of <xref target="RFC3987"/> and (2) when an IRI is serving
      as an <xref target="element.id" format="none">atom:id</xref> 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 Section 5.1.1 of <xref target="RFC3986"/>,
      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>,
      Section 2.12.

      <figure> 
      <iref item="atomCommonAttributes grammar production" primary="true"/>
      <iref item="Grammar" subitem="atomCommonAttributes" primary="true"/>
	<artwork type="rnc">
atomCommonAttributes =
   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">
         
         
         

	<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="rnc">
atomPlainTextConstruct =
   atomCommonAttributes,
   attribute type { "text" | "html" }?,
   text

atomXHTMLTextConstruct =
   atomCommonAttributes,
   attribute type { "xhtml" },
   xhtmlDiv

atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct</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 <xref target="element.content" format="none">atom:content</xref> 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 <xref target="element.title" format="none">atom:title</xref> 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 <xref target="element.title" format="none">atom:title</xref> 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 <xref target="element.title" format="none">atom:title</xref> 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="rnc">
atomPersonConstruct =
   atomCommonAttributes,
   (element atom:name { text }
    &amp; element atom:uri { atomUri }?
    &amp; element atom:email { atomEmailAddress }?
    &amp; extensionElement*)</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">
    
    <iref item="XML Elements" subitem="name" primary="true"/>
    <iref item="name XML element" primary="true"/>
	
	  <t>The "<xref target="element.name" format="none">atom:name</xref>" element's content conveys a
	  human-readable name for the person. The content of <xref target="element.name" format="none">atom:name</xref>
	  is Language-Sensitive. Person constructs MUST contain
	  exactly one "<xref target="element.name" format="none">atom:name</xref>" element.</t>
	  
	</section> 
	
	<section anchor="element.uri" title="The &#34;atom:uri&#34; Element">
    
    <iref item="XML Elements" subitem="uri" primary="true"/>
    <iref item="uri XML element" primary="true"/>

	  <t>The "<xref target="element.uri" format="none">atom:uri</xref>" element's content conveys an IRI associated with
	  the person. Person constructs MAY contain an <xref target="element.uri" format="none">atom:uri</xref> element, but
	  MUST NOT contain more than one.  The content of <xref target="element.uri" format="none">atom:uri</xref> 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">
    
    <iref item="XML Elements" subitem="email" primary="true"/>
    <iref item="email XML element" primary="true"/> 
	  
	  <t>The "<xref target="element.email" format="none">atom:email</xref>" element's content conveys an e-mail address
	  associated with the person. Person constructs MAY contain an
	  <xref target="element.email" format="none">atom:email</xref> 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"> 
        

	<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="rnc">
atomDateConstruct =
   atomCommonAttributes,
   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">
    
    
    <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 <xref target="element.entry" format="none">atom:entry</xref> child
	  elements.
	  
	    <figure> 
        <iref item="atomFeed grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomFeed" primary="true"/>
	      <artwork type="rnc">
atomFeed =
   element atom:feed {
      atomCommonAttributes,
      (atomAuthor*
       &amp; atomCategory*
       &amp; atomContributor*
       &amp; atomGenerator?
       &amp; atomIcon?
       &amp; atomId
       &amp; atomLink*
       &amp; atomLogo?
       &amp; atomRights?
       &amp; atomSubtitle?
       &amp; atomTitle
       &amp; atomUpdated
       &amp; extensionElement*),
      atomEntry*
   }</artwork></figure></t> 
	
	  <t>This specification assigns no significance to the order of
	  <xref target="element.entry" format="none">atom:entry</xref> 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><xref target="element.feed" format="none">atom:feed</xref> elements MUST contain one or more <xref target="element.author" format="none">atom:author</xref> elements,
	      unless all of the <xref target="element.feed" format="none">atom:feed</xref> element's child <xref target="element.entry" format="none">atom:entry</xref> elements
	      contain at least one <xref target="element.author" format="none">atom:author</xref> element.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MAY contain any number of <xref target="element.category" format="none">atom:category</xref>
	      elements.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MAY contain any number of <xref target="element.contributor" format="none">atom:contributor</xref>
	      elements.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST NOT contain more than one
	      <xref target="element.generator" format="none">atom:generator</xref> element.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST NOT contain more than one <xref target="element.icon" format="none">atom:icon</xref>
	      element.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST NOT contain more than one <xref target="element.logo" format="none">atom:logo</xref>
	      element.</t>
      
	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST contain exactly one <xref target="element.id" format="none">atom:id</xref>
	      element.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements SHOULD contain one <xref target="element.link" format="none">atom:link</xref>
	      element with a rel attribute value of "self". This is
	      the preferred URI for retrieving Atom Feed Documents
	      representing this Atom feed.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST NOT contain more than one
	      <xref target="element.link" format="none">atom:link</xref> element with a rel attribute value of
	      "alternate" that has the same combination of type and
	      hreflang attribute values.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MAY contain additional <xref target="element.link" format="none">atom:link</xref>
	      elements beyond those described above.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST NOT contain more than one
	      <xref target="element.rights" format="none">atom:rights</xref> element.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST NOT contain more than one
	      <xref target="element.subtitle" format="none">atom:subtitle</xref> element.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST contain exactly one <xref target="element.title" format="none">atom:title</xref>
	      element.</t>

	      <t><xref target="element.feed" format="none">atom:feed</xref> elements MUST contain exactly one <xref target="element.updated" format="none">atom:updated</xref>
	      element.</t>

	    </list></t> 

	    <t>If multiple <xref target="element.entry" format="none">atom:entry</xref> elements with the same <xref target="element.id" format="none">atom:id</xref>
	    value appear in an Atom Feed Document, they represent the
	    same entry. Their <xref target="element.updated" format="none">atom:updated</xref> timestamps SHOULD be
	    different. If an Atom Feed Document contains multiple
	    entries with the same <xref target="element.id" format="none">atom:id</xref>, 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 <xref target="element.updated" format="none">atom:updated</xref> 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 <xref target="element.entry" format="none">atom:entry</xref>
	    element contain a non-empty <xref target="element.title" format="none">atom:title</xref> element, a
	    non-empty <xref target="element.content" format="none">atom:content</xref> element when that element is
	    present, and a non-empty <xref target="element.summary" format="none">atom:summary</xref> element when the
	    entry contains no <xref target="element.content" format="none">atom:content</xref> element. However, the
	    absence of <xref target="element.summary" format="none">atom:summary</xref> 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">
    
    
    <iref item="XML Elements" subitem="entry" primary="true"/>
    <iref item="entry XML element" primary="true"/> 

	  <t>The "<xref target="element.entry" format="none">atom:entry</xref>" 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
	  <xref target="element.feed" format="none">atom:feed</xref> 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="rnc">
atomEntry =
   element atom:entry {
      atomCommonAttributes,
      (atomAuthor*
       &amp; atomCategory*
       &amp; atomContent?
       &amp; atomContributor*
       &amp; atomId
       &amp; atomLink*
       &amp; atomPublished?
       &amp; atomRights?
       &amp; atomSource?
       &amp; atomSummary?
       &amp; atomTitle
       &amp; atomUpdated
       &amp; extensionElement*)
   }</artwork></figure></t>

	    <t>This specification assigns no significance to the order
	    of appearance of the child elements of <xref target="element.entry" format="none">atom:entry</xref>.</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><xref target="element.entry" format="none">atom:entry</xref> elements MUST contain one or more
	      <xref target="element.author" format="none">atom:author</xref> elements, unless the <xref target="element.entry" format="none">atom:entry</xref> contains an
	      <xref target="element.source" format="none">atom:source</xref> element that contains an <xref target="element.author" format="none">atom:author</xref>
	      element or, in an Atom Feed Document, the <xref target="element.feed" format="none">atom:feed</xref>
	      element contains an <xref target="element.author" format="none">atom:author</xref> element itself.</t>
	   
	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MAY contain any number of <xref target="element.category" format="none">atom:category</xref>
	      elements.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST NOT contain more than one
	      <xref target="element.content" format="none">atom:content</xref> element.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MAY contain any number of
	      <xref target="element.contributor" format="none">atom:contributor</xref> elements.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST contain exactly one <xref target="element.id" format="none">atom:id</xref>
	      element.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements that contain no child
	      <xref target="element.content" format="none">atom:content</xref> element MUST contain at least one <xref target="element.link" format="none">atom:link</xref>
	      element with a rel attribute value of
	      "alternate".</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST NOT contain more than one
	      <xref target="element.link" format="none">atom:link</xref> element with a rel attribute value of
	      "alternate" that has the same combination of type and
	      hreflang attribute values.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MAY contain additional <xref target="element.link" format="none">atom:link</xref> elements
	      beyond those described above.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST NOT contain more than one
	      <xref target="element.published" format="none">atom:published</xref> element.</t>
	      
	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST NOT contain more than one
	      <xref target="element.rights" format="none">atom:rights</xref> element.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST NOT contain more than one <xref target="element.source" format="none">atom:source</xref>
	      element.</t>
      
	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST contain an <xref target="element.summary" format="none">atom:summary</xref> element in
	      either of the following cases:

	      <list style="symbols"> 

		<t>the <xref target="element.entry" format="none">atom:entry</xref> contains an <xref target="element.content" format="none">atom:content</xref> that has a "src"
		attribute (and is thus empty).</t>

		<t>the <xref target="element.entry" format="none">atom:entry</xref> contains content that is encoded in
		Base64; i.e., the "type" attribute of <xref target="element.content" format="none">atom:content</xref> 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><xref target="element.entry" format="none">atom:entry</xref> elements MUST NOT contain more than one <xref target="element.summary" format="none">atom:summary</xref>
	      element.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST contain exactly one <xref target="element.title" format="none">atom:title</xref>
	      element.</t>

	      <t><xref target="element.entry" format="none">atom:entry</xref> elements MUST contain exactly one <xref target="element.updated" format="none">atom:updated</xref>
	      element.</t>
      
	    </list> 

    </t> 

	</section> 

	<section anchor="element.content" title="The &#34;atom:content&#34; Element">
    
    
    
    
    
    
    <iref item="XML Elements" subitem="content" primary="true"/>
    <iref item="content XML element" primary="true"/> 

	  <t>The "<xref target="element.content" format="none">atom:content</xref>" element either contains or links to
	  the content of the entry. The content of <xref target="element.content" format="none">atom:content</xref> 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="rnc">
atomInlineTextContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { "text" | "html" }?,
      (text)*
   }

atomInlineXHTMLContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { "xhtml" },
      xhtmlDiv
   }

atomInlineOtherContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { atomMediaType }?,
      (text|anyElement)*
   }

atomOutOfLineContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { atomMediaType }?,
      attribute src { atomUri },
      empty
   }

atomContent = atomInlineTextContent
 | atomInlineXHTMLContent
 | atomInlineOtherContent
 | atomOutOfLineContent</artwork></figure></t> 
	      
	  <section title="The &#34;type&#34; Attribute"> 

	    <t>On the <xref target="element.content" format="none">atom:content</xref> 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 Section 4.2.6 of <xref target="MIMEREG"/>). 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><xref target="element.content" format="none">atom:content</xref> MAY have a "src" attribute, whose value
	    MUST be an IRI reference <xref target="RFC3987"/>. If the
	    "src" attribute is present, <xref target="element.content" format="none">atom:content</xref> 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 <xref target="element.content" format="none">atom:content</xref>
	    according to the first applicable rule.</t>

	    <t>
	      <list style="numbers"> 
	
		<t>If the value of "type" is "text", the content of
		<xref target="element.content" format="none">atom:content</xref> 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
		<xref target="element.content" format="none">atom:content</xref> 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
		<xref target="element.content" format="none">atom:content</xref> 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/><xref target="element.content" format="none">atom:content</xref> 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 "<xref target="element.content" format="none">atom:content</xref>" 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 <xref target="element.content" format="none">atom:content</xref> MUST NOT contain child elements.</t>

		<t>For all other values of "type", the content of
		<xref target="element.content" format="none">atom:content</xref> MUST be a valid Base64 encoding, as
		described in <xref target="RFC3548"/>, Section 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 <xref target="element.content" format="none">atom:content</xref> 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">
    
    
    <iref item="XML Elements" subitem="author" primary="true"/>
    <iref item="author XML element" primary="true"/> 

	  <t>The "<xref target="element.author" format="none">atom:author</xref>" 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="rnc">
atomAuthor = element atom:author { atomPersonConstruct }</artwork></figure></t> 

	  <t>If an <xref target="element.entry" format="none">atom:entry</xref> element does not contain <xref target="element.author" format="none">atom:author</xref>
	  elements, then the <xref target="element.author" format="none">atom:author</xref> elements of the contained
	  <xref target="element.source" format="none">atom:source</xref> element are considered to apply. In an Atom Feed
	  Document, the <xref target="element.author" format="none">atom:author</xref> elements of the containing
	  <xref target="element.feed" format="none">atom:feed</xref> element are considered to apply to the entry if
	  there are no <xref target="element.author" format="none">atom:author</xref> elements in the locations described
	  above.</t>

	</section> 
	      
	<section anchor="element.category" title="The &#34;atom:category&#34; Element">
    
    
    <iref item="XML Elements" subitem="category" primary="true"/>
    <iref item="category XML element" primary="true"/>
      
	  <t>The "<xref target="element.category" format="none">atom:category</xref>" 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="rnc">
atomCategory =
   element atom:category {
      atomCommonAttributes,
      attribute term { text },
      attribute scheme { atomUri }?,
      attribute label { text }?,
      undefinedContent
   }</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">
    
    
    <iref item="XML Elements" subitem="contributor" primary="true"/>
    <iref item="contributor XML element" primary="true"/>
 
	  <t>The "<xref target="element.contributor" format="none">atom:contributor</xref>" 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="rnc">
atomContributor = element atom:contributor { atomPersonConstruct }</artwork></figure></t>
 
	</section> 

	<section anchor="element.generator" title="The &#34;atom:generator&#34; Element">
    
    
    <iref item="XML Elements" subitem="generator" primary="true"/>
    <iref item="generator XML element" primary="true"/>
	      
	  <t>The "<xref target="element.generator" format="none">atom:generator</xref>" 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="rnc">
atomGenerator = element atom:generator {
   atomCommonAttributes,
   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 <xref target="element.generator" format="none">atom:generator</xref> 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 <xref target="element.generator" format="none">atom:generator</xref> 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">
    
    
    <iref item="XML Elements" subitem="icon" primary="true"/>
    <iref item="icon XML element" primary="true"/>

	  <t>The "<xref target="element.icon" format="none">atom:icon</xref>" 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="rnc">
atomIcon = element atom:icon {
   atomCommonAttributes,
   (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">
    
    
    <iref item="XML Elements" subitem="id" primary="true"/>
    <iref item="id XML element" primary="true"/>

	  <t>The "<xref target="element.id" format="none">atom:id</xref>" 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="rnc">
atomId = element atom:id {
   atomCommonAttributes,
   (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 <xref target="element.id" format="none">atom:id</xref>
	  element MUST NOT change. Put another way, an <xref target="element.id" format="none">atom:id</xref> element
	  pertains to all instantiations of a particular Atom entry or feed;
	  revisions retain the same content in their <xref target="element.id" format="none">atom:id</xref> elements. It is 
	  suggested that the <xref target="element.id" format="none">atom:id</xref> element be stored along with the 
	  associated resource.</t>

	  <t>The content of an <xref target="element.id" format="none">atom:id</xref> 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 <xref target="element.id" format="none">atom:id</xref> 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 <xref target="element.id" format="none">atom:id</xref> elements can be compared to
	    determine whether an entry or feed is the same as one seen
	    before. Processors MUST compare <xref target="element.id" format="none">atom:id</xref> 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">
    
    
    <iref item="XML Elements" subitem="link" primary="true"/>
    <iref item="link XML element" primary="true"/> 
	  
	  <t>The "<xref target="element.link" format="none">atom:link</xref>" 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="rnc">
atomLink =
   element atom:link {
      atomCommonAttributes,
      attribute href { atomUri },
      attribute rel { atomNCName | atomUri }?,
      attribute type { atomMediaType }?,
      attribute hreflang { atomLanguageTag }?,
      attribute title { text }?,
      attribute length { text }?,
      undefinedContent
   }</artwork></figure></t> 

	  <section title="The &#34;href&#34; Attribute"> 

	    <t>The "href" attribute contains the link's IRI. <xref target="element.link" format="none">atom:link</xref>
	    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><xref target="element.link" format="none">atom:link</xref> 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>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>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
		<xref target="element.feed" format="none">atom:feed</xref>:

		<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
		<xref target="element.entry" format="none">atom:entry</xref> whose content contains a discussion of that
		same search engine.</t>

		<t>The value "self" signifies that the IRI in the value of the
		href attribute identifies a resource equivalent to the containing
		element.</t>

		<t>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 <xref target="element.link" format="none">atom:link</xref> elements with
		rel="enclosure", the length attribute SHOULD be
		provided.</t>
		
		<t>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">
    
    
    <iref item="XML Elements" subitem="logo" primary="true"/>
    <iref item="logo XML element" primary="true"/>

	  <t>The "<xref target="element.logo" format="none">atom:logo</xref>" 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="rnc">
atomLogo = element atom:logo {
   atomCommonAttributes,
   (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">
    
    
    <iref item="XML Elements" subitem="published" primary="true"/>
    <iref item="published XML element" primary="true"/> 

	  <t>The "<xref target="element.published" format="none">atom:published</xref>" 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="rnc">
atomPublished = element atom:published { atomDateConstruct}</artwork></figure></t>

	   <t>Typically, <xref target="element.published" format="none">atom:published</xref> 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">
    
    
    <iref item="XML Elements" subitem="rights" primary="true"/>
    <iref item="rights XML element" primary="true"/>

	  <t>The "<xref target="element.rights" format="none">atom:rights</xref>" 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="rnc">
atomRights = element atom:rights { atomTextConstruct }</artwork></figure></t>

	  <t>The <xref target="element.rights" format="none">atom:rights</xref> element SHOULD NOT be used to convey
	  machine-readable licensing information.</t>

          <t>If an <xref target="element.entry" format="none">atom:entry</xref> element does not contain an
          <xref target="element.rights" format="none">atom:rights</xref> element, then the <xref target="element.rights" format="none">atom:rights</xref> element of
          the containing <xref target="element.feed" format="none">atom:feed</xref> element, if present, is considered
          to apply to the entry.</t>

	</section>

	<section anchor="element.source" title="The &#34;atom:source&#34; Element">
    
    
    <iref item="XML Elements" subitem="source" primary="true"/>
    <iref item="source XML element" primary="true"/>

	  <t>If an <xref target="element.entry" format="none">atom:entry</xref> is copied from one feed into another
	  feed, then the source <xref target="element.feed" format="none">atom:feed</xref>'s metadata (all child
	  elements of <xref target="element.feed" format="none">atom:feed</xref> other than the <xref target="element.entry" format="none">atom:entry</xref> elements)
	  MAY be preserved within the copied entry by adding an
	  <xref target="element.source" format="none">atom:source</xref> 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 <xref target="element.source" format="none">atom:source</xref> element's children.
	  Such metadata SHOULD be preserved if the source <xref target="element.feed" format="none">atom:feed</xref>
	  contains any of the child elements <xref target="element.author" format="none">atom:author</xref>,
	  <xref target="element.contributor" format="none">atom:contributor</xref>, <xref target="element.rights" format="none">atom:rights</xref>, or <xref target="element.category" format="none">atom:category</xref> and those
	  child elements are not present in the source <xref target="element.entry" format="none">atom:entry</xref>.

	    <figure>
        <iref item="atomSource grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomSource" primary="true"/>
	      <artwork type="rnc">
atomSource =
   element atom:source {
      atomCommonAttributes,
      (atomAuthor*
       &amp; atomCategory*
       &amp; atomContributor*
       &amp; atomGenerator?
       &amp; atomIcon?
       &amp; atomId?
       &amp; atomLink*
       &amp; atomLogo?
       &amp; atomRights?
       &amp; atomSubtitle?
       &amp; atomTitle?
       &amp; atomUpdated?
       &amp; extensionElement*)
   }</artwork></figure></t>

	  <t>The <xref target="element.source" format="none">atom:source</xref> 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
	  (<xref target="element.id" format="none">atom:id</xref>, <xref target="element.title" format="none">atom:title</xref>, and <xref target="element.updated" format="none">atom:updated</xref>) in the <xref target="element.source" format="none">atom:source</xref>
	  element.</t>
	</section>

	<section anchor="element.subtitle" title="The &#34;atom:subtitle&#34; Element">
    
    
    <iref item="XML Elements" subitem="subtitle" primary="true"/>
    <iref item="subtitle XML element" primary="true"/> 
	      
	  <t>The "<xref target="element.subtitle" format="none">atom:subtitle</xref>" 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="rnc">
atomSubtitle = element atom:subtitle { atomTextConstruct }</artwork></figure></t> 
	  
	</section> 

	<section anchor="element.summary" title="The &#34;atom:summary&#34; Element">
    
    
    <iref item="XML Elements" subitem="summary" primary="true"/>
    <iref item="summary XML element" primary="true"/>

	  <t>The "<xref target="element.summary" format="none">atom:summary</xref>" element is a Text construct that
	  conveys a short summary, abstract, or excerpt of an
	  entry. 
	 
	    <figure>
	      <artwork type="rnc">
atomSummary = element atom:summary { atomTextConstruct }</artwork></figure></t> 
	      
	      <t>It is not advisable for the <xref target="element.summary" format="none">atom:summary</xref> element to
	      duplicate <xref target="element.title" format="none">atom:title</xref> or <xref target="element.content" format="none">atom:content</xref> 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">
    
    
    <iref item="XML Elements" subitem="title" primary="true"/>
    <iref item="title XML element" primary="true"/> 

	  <t>The "<xref target="element.title" format="none">atom:title</xref>" 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="rnc">
atomTitle = element atom:title { atomTextConstruct }</artwork></figure></t>
	  
	</section> 
	
	<section anchor="element.updated" title="The &#34;atom:updated&#34; Element">
    
    
    <iref item="XML Elements" subitem="updated" primary="true"/>
    <iref item="updated XML element" primary="true"/> 

	  <t>The "<xref target="element.updated" format="none">atom:updated</xref>" 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 <xref target="element.updated" format="none">atom:updated</xref>
	  value.

	    <figure> 
        <iref item="atomUpdated grammar production" primary="true"/>
        <iref item="Grammar" subitem="atomUpdated" primary="true"/>
	      <artwork type="rnc">
atomUpdated = element atom:updated { atomDateConstruct}</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., <xref target="element.feed" format="none">atom:feed</xref> in an
	      Atom Feed Document, <xref target="element.entry" format="none">atom:entry</xref> in an Atom Entry
	      Document) or any <xref target="element.entry" format="none">atom:entry</xref> 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>Section 6.5.1 of <xref target="W3C.REC-xmldsig-core-20020212"/> 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
	      <xref target="element.source" format="none">atom:source</xref> element to an entry that does not contain
	      its own <xref target="element.source" format="none">atom:source</xref> 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 <xref target="element.source" format="none">atom:source</xref> 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>Section 4.4.2 of <xref target="W3C.REC-xmldsig-core-20020212"/> 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., <xref target="element.feed" format="none">atom:feed</xref> in an Atom Feed
	      Document, <xref target="element.entry" format="none">atom:entry</xref> 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>Section 5.1 of <xref target="W3C.REC-xmlenc-core-20021210"/>
	      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 <xref target="element.content" format="none">atom:content</xref>
	      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
	      <xref target="element.entry" format="none">atom:entry</xref>, <xref target="element.feed" format="none">atom:feed</xref>, 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 <xref target="element.content" format="none">atom:content</xref> 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">
        
        
	      <t>Atom allows foreign markup anywhere in an Atom
	      document, except where it is explicitly forbidden.
	      Child elements of <xref target="element.entry" format="none">atom:entry</xref>, <xref target="element.feed" format="none">atom:feed</xref>, <xref target="element.source" format="none">atom:source</xref>, 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">
          

		<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="rnc">
simpleExtensionElement =
   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">
          

		<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="rnc">
structuredExtensionElement =
   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"/>, Section 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"/>, Section 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"/>, Section 3.2.</t>

		<t hangText="File extension:"> .atom</t> 

		<t hangText="Fragment identifiers:"> As specified for
		"application/xml" in <xref target="RFC3023"/>, Section 5.</t>

		<t hangText="Base URI:"> As specified in <xref target="RFC3023"/>, Section 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 <xref target="element.content" format="none">atom:content</xref> 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 Section 7 of <xref target="RFC3986"/>.</t>

	    </section>

	    <section title="IRIs" toc="exclude">
	      <t>Atom Processors handle IRIs. See Section 8 of <xref target="RFC3987"/>.</t>
	    </section>

	    <section title="Spoofing" toc="exclude">

	      <t>Atom Processors should be aware of the potential for
	      spoofing attacks where the attacker publishes an
	      <xref target="element.entry" format="none">atom:entry</xref> with the <xref target="element.id" format="none">atom:id</xref> value of an entry from
	      another feed, perhaps with a falsified <xref target="element.source" format="none">atom:source</xref>
	      element duplicating the <xref target="element.id" format="none">atom:id</xref> 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 <xref target="element.id" format="none">atom:id</xref> 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="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 = atomFeed | atomEntry

# Common attributes

atomCommonAttributes =
   attribute xml:base { atomUri }?,
   attribute xml:lang { atomLanguageTag }?,
   undefinedAttribute*

# Text Constructs

atomPlainTextConstruct =
   atomCommonAttributes,
   attribute type { "text" | "html" }?,
   text

atomXHTMLTextConstruct =
   atomCommonAttributes,
   attribute type { "xhtml" },
   xhtmlDiv

atomTextConstruct = atomPlainTextConstruct | atomXHTMLTextConstruct

# Person Construct

atomPersonConstruct =
   atomCommonAttributes,
   (element atom:name { text }
    &amp; element atom:uri { atomUri }?
    &amp; element atom:email { atomEmailAddress }?
    &amp; extensionElement*)

# Date Construct

atomDateConstruct=
   atomCommonAttributes,
   xsd:dateTime

# atom:feed

atomFeed =
   [
      s:rule [
         context = "atom:feed"
         s:assert [
            test = "atom:author or not(atom:entry[not(atom:author)])"
            "An atom:feed must have an atom:author unless all "
            ~ "of its atom:entry children have an atom:author."
         ]
      ]
   ]
   element atom:feed {
      atomCommonAttributes,
      (atomAuthor*
       &amp; atomCategory*
       &amp; atomContributor*
       &amp; atomGenerator?
       &amp; atomIcon?
       &amp; atomId
       &amp; atomLink*
       &amp; atomLogo?
       &amp; atomRights?
       &amp; atomSubtitle?
       &amp; atomTitle
       &amp; atomUpdated
       &amp; extensionElement*),
      atomEntry*
   }

# atom:entry

atomEntry =
   [
      s:rule [
         context = "atom:entry"
         s:assert [
            test = "atom:link[@rel='alternate'] "
            ~ "or atom:link[not(@rel)] "
            ~ "or atom:content"
            "An atom:entry must have at least one atom:link element "
            ~ "with a rel attribute of 'alternate' "
            ~ "or an atom:content."
         ]
      ]
      s:rule [
         context = "atom:entry"
         s:assert [
            test = "atom:author or "
            ~ "../atom:author or atom:source/atom:author"
            "An atom:entry must have an atom:author "
            ~ "if its feed does not."
         ]
      ]
   ]
   element atom:entry {
      atomCommonAttributes,
      (atomAuthor*
       &amp; atomCategory*
       &amp; atomContent?
       &amp; atomContributor*
       &amp; atomId
       &amp; atomLink*
       &amp; atomPublished?
       &amp; atomRights?
       &amp; atomSource?
       &amp; atomSummary?
       &amp; atomTitle
       &amp; atomUpdated
       &amp; extensionElement*)
   }

# atom:content

atomInlineTextContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { "text" | "html" }?,
      (text)*
   }

atomInlineXHTMLContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { "xhtml" },
      xhtmlDiv
   }

atomInlineOtherContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { atomMediaType }?,
      (text|anyElement)*
   }

atomOutOfLineContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { atomMediaType }?,
      attribute src { atomUri },
      empty
   }

atomContent = atomInlineTextContent
 | atomInlineXHTMLContent
 | atomInlineOtherContent
 | atomOutOfLineContent

# atom:author

atomAuthor = element atom:author { atomPersonConstruct }

# atom:category

atomCategory =
   element atom:category {
      atomCommonAttributes,
      attribute term { text },
      attribute scheme { atomUri }?,
      attribute label { text }?,
      undefinedContent
   }

# atom:contributor

atomContributor = element atom:contributor { atomPersonConstruct }

# atom:generator

atomGenerator = element atom:generator {
   atomCommonAttributes,
   attribute uri { atomUri }?,
   attribute version { text }?,
   text
}

# atom:icon

atomIcon = element atom:icon {
   atomCommonAttributes,
   (atomUri)
}

# atom:id

atomId = element atom:id {
   atomCommonAttributes,
   (atomUri)
}

# atom:logo

atomLogo = element atom:logo {
   atomCommonAttributes,
   (atomUri)
}

# atom:link

atomLink =
   element atom:link {
      atomCommonAttributes,
      attribute href { atomUri },
      attribute rel { atomNCName | atomUri }?,
      attribute type { atomMediaType }?,
      attribute hreflang { atomLanguageTag }?,
      attribute title { text }?,
      attribute length { text }?,
      undefinedContent
   }

# atom:published

atomPublished = element atom:published { atomDateConstruct}

# atom:rights

atomRights = element atom:rights { atomTextConstruct }

# atom:source

atomSource =
   element atom:source {
      atomCommonAttributes,
      (atomAuthor*
       &amp; atomCategory*
       &amp; atomContributor*
       &amp; atomGenerator?
       &amp; atomIcon?
       &amp; atomId?
       &amp; atomLink*
       &amp; atomLogo?
       &amp; atomRights?
       &amp; atomSubtitle?
       &amp; atomTitle?
       &amp; atomUpdated?
       &amp; extensionElement*)
   }

# atom:subtitle

atomSubtitle = element atom:subtitle { atomTextConstruct }

# atom:summary

atomSummary = element atom:summary { atomTextConstruct }

# atom:title

atomTitle = element atom:title { atomTextConstruct }

# atom:updated

atomUpdated = element atom:updated { atomDateConstruct}

# 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

simpleExtensionElement =
   element * - atom:* {
      text
   }

# Structured Extension

structuredExtensionElement =
   element * - atom:* {
      (attribute * { text }+,
         (text|anyElement)*)
    | (attribute * { text }*,
       (text?, anyElement+, (text|anyElement)*))
   }

# Other Extensibility

extensionElement =
   simpleExtensionElement | structuredExtensionElement

undefinedAttribute =
  attribute * - (xml:base | xml:lang | local:*) { text }

undefinedContent = (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>