UserPreferences

PaceEntriesElement


Abstract

Remove atom:head, group entries with atom:entries instead. Allow feeds to contain atom:summary and atom:content (Folders are Resources Too!).

Diff from a format-05 feed: http://franklinmint.fm/2005/02/03/ongoingatom-diff.html

Use cases: http://www.imc.org/atom-syntax/mail-archive/msg12963.html

Status

Open

Rationale

Making a feed document strictly hierarchical and recursive solves a number of problems that have been previously attacked in a piecemeal fashion:

  1. XML containment relates feed and entry metadata to the data being described, thereby defining a consistent model for future extension elements;

  2. Multiple feeds can be aggregated and presented using a single data format without having to modify the entries within those feeds to incorporate their original feed metadata;

  3. Digital signatures can be safely applied to feeds and entries without needing special-case exceptions on how to recreate the signature after aggregation;

  4. Simplifies description of the Atom syndication format to containers (atom, feed, content) and metadata that targets its own parent (atom).

  5. Allows Hierarchical feeds, comments.

  6. No structural changes for format05 feeds in the simple case. Rename your elements, add "atom:feed" as a child.

  7. Differentiates elements lower in a hierarchy from metadata.

  8. Some aggregators let you subscribe to OPML.

More than one person thinks "atom:head" in "atom:entry" is a bad idea (not that they agree this Pace is the way to fix it).

[WWW]Mark Nottingham: 4.2.1 Usage of "atom:head" within "atom:entry" -- This doesn't seem clean; I know that people have use cases for it, but I'd like to register my preference to get rid of it, FWIW.

[WWW]Robert Sayre: If it were up to me, and I had to turn the draft in tomorrow, I would strike PaceHeadInEntry, because "it can easily be added later".

[WWW]Roy Fielding:

"Don't think for a second that your format contains more data that the current flat format," --Graham

I would hope not -- the point was to make that data available such that it would not have to be replicated in every entry.

Example

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet
href="http://www.blogger.com/styles/atom.css" type="text/css"?>
<atom xmlns="http://purl.org/atom/ns#">
  <title>bloggerDev Google Group</title>
  <subtitle>
    For discussion of development related to the Blogger API. And
    stuff. This ISN&amp;#39;T a list for Blogger technical support. 
  </subtitle>
  <link href="http://groups-beta.google.com:/group/bloggerDev"
        rel="alternate" title="bloggerDev" type="text/html" />
  <updated>2005-01-20T01:48:00Z</updated>
  <generator url="http://groups-beta.google.com:" version="1.99">Google Groups</generator>
  <feed>
    <atom>
      <author>
        <name>Randy Charles Morin</name>
        <email>randymo...@gmail.com</email>
      </author>
      
      <published>2005-01-19T02:05:21Z</published>
      <updated>2005-01-19T02:05:21Z</updated>
      
      <id>http://groups-beta.google.com/group/bloggerDev/browse_thread/thread/b30482ac4e0d3931</id>
      <link href="http://groups-beta.google.com/group/bloggerDev/browse_thread/thread/b30482ac4e0d3931"
            rel="alternate" title="Universal Subscription Mechanism" type="text/html"/>
      <title>Universal Subscription Mechanism</title> 
      
      <summary type="HTML">
      How quickly can we get Blogger&lt;wbr&gt;
      to support the USM? &lt;br&gt; &lt;a target=&quot;_blank&quot;
      href=&quot;http://www.kbcafe.com/rss/usm.html&quot;&gt;[link]&lt;/a&gt;
      &lt;br&gt; With USM support, you simply c&lt;wbr&gt;lick on the
      orange XML/RSS ico&lt;wbr&gt;n or Atom &lt;br&gt; icon and the
      feed is added to &lt;wbr&gt;your RSS aggregator. &lt;br&gt; I've
      already written a client &lt;wbr&gt;for my Yahoo, which I call,
      th&lt;wbr&gt;e Yahoo! &lt;br&gt; solution ;) &lt;br&gt; &lt;a
      target=&quot;_blank&quot;
      href=&quot;http://www.kbcafe.com/rss/?guid=20050118154018&quot;&gt;[link]&lt;/a&gt;
      </summary>

      <feed>
        <atom>
          <author>
            <name>steve jenson</name>
            <email>ste...@google.com</email>
          </author>
          <published>2005-01-20T01:48:00Z</published>
          <updated>2005-01-20T01:48:00Z</updated>
          <id>http://groups-beta.google.com:/group/bloggerDev/msg/bef049ee0ccacb4f</id>
          <link href="http://groups-beta.google.com:/group/bloggerDev/msg/bef049ee0ccacb4f" 
                rel="alternate" title="Re: [bloggerDev] Re: Universal Subscription Mechanism" type="text/html" />
          <title>Re: [bloggerDev] Re: Universal Subscription Mechanism</title>
          <summary type="HTML">
            I've only ever seen him drink &lt;wbr&gt;Diet Dr. Pepper.
            Well, that an&lt;wbr&gt;d scotch. &lt;br&gt; &lt;p&gt;-steve
          </summary>
        </atom>
        <atom>
          <author>
            <name>Danny Ayers</name>
            <email>danny.ay...@gmail.com</email>
          </author>
          <published>2005-01-19T22:18:05Z</published>
          <updated>2005-01-19T22:18:05Z</updated>
          <id>http://groups-beta.google.com:/group/bloggerDev/msg/ad4c85537041d860</id>
          <link href="http://groups-beta.google.com:/group/bloggerDev/msg/ad4c85537041d860" 
                rel="alternate" title="Re: [bloggerDev] Re: Universal Subscription Mechanism" type="text/html" />
          <title>Re: [bloggerDev] Re: Universal Subscription Mechanism</title>
          <summary type="HTML">
            Ah. &lt;br&gt; &lt;p&gt;But can *he* make coffee..?
            &lt;br&gt; &lt;p&gt;-- &lt;br&gt; &lt;p&gt;&lt;a
            target=&quot;_blank&quot;
            href=&quot;http://dannyayers.com&quot;&gt;[link]&lt;/a&gt; 
          </summary>
        </atom>
      </feed>
    </atom>
  </feed>
</atom>


Proposal

in section 2:

2.  Atom Documents

   This specification describes Atom Documents.

  namespace atom =
     "http://purl.org/atom/ns#draft-ietf-atompub-format-05"

   start = atomAtom

   Atom Documents are specified in terms of the XML
   Information Set, serialised as XML 1.0 [W3C.REC-xml-20040204] and
   identified with the "application/atom+xml" media type.  Atom
   Documents MUST be well-formed XML.

   Atom constrains the appearance and content of elements and
   attributes; unless otherwise stated, Atom Documents MAY contain other
   Information Items as appropriate.  In particular, Comment Information
   Items and Processing Instruction Information Items SHOULD be ignored
   in the normal processing of an Atom Document.

   [[ discussion of URI escaping and i18n, IRI ]]

   [[ discussion of white space ]]

2.1 Metadata and Content
 
   Atom Documents consist of "container" and "metadata" elements.
   All elements are properties of the container element which encloses them.

   [[ RNC stuff ...]]

2.2 Extending Atom

   Atom is extensible.  All extension elements are considered to be
   "metadata" elements. See the section titled 'Extending Atom' later in
   this document for a full description of how Atom Documents can be
   extended.

2.4 Common Attributes

   Any element in an Atom Document MAY have an xml:base attribute.  XML
   Base [W3C.REC-xmlbase-20010627] processing MUST be applied to any
   relative reference [RFC3986] present in an Atom Document.  This
   includes such elements and attributes as specified by Atom itself, as
   well as those specified by extensions to Atom.

   Any element in an Atom Document MAY have an xml:lang attribute, whose
   content indicates the natural language of the element's content.
   Requirements regarding the content and interpretation of xml:lang are
   specified in XML 1.0 [W3C.REC-xml-20040204] Section 2.12.

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

In section 4:

4.1 Container Elements

   Container elements are used to group metadata and content.

4.1.2  The "atom:atom" Element

   The "atom:atom" element acts as a container for metadata and data. 

   atomAtom =
      element atom:atom {
         atomCommonAttributes,
         (atomFeed?
          & atomTitle
          & atomSubtitle?
          & atomId
          & atomLink*
          & atomUpdated
          & atomPublished?
          & atomAuthor?
          & atomContributor*
          & atomGenerator?
          & atomCopyright?
          & atomCategory*
          & atomSummary?
          & atomContent?
          & anyElement*)
      }

   The following child elements are defined by this specification (note
   that the presence of some of these elements is required):

   o  atom:atom elements MAY contain exactly one atom:feed element.
   o  atom:atom elements MUST contain exactly one atom:title element.
   o  atom:atom elements MUST contain at least one atom:link element
      with a relation of "alternate".
   o  atom:atom elements MUST NOT contain more than one atom:link
      element with a rel attribute value of "alternate" that has the
      same type attribute value. atom:feed elements MAY contain
      additional atom:link elements beyond those described above.
   o  atom:atom elements MUST NOT contain more than one 
      atom:author element.  
   o  atom:atom elements MUST NOT contain more than one 
      atom:contributor element.
   o  atom:atom elements MUST NOT contain more than one 
      atom:copyright element.
   o  atom:atom elements MUST contain exactly one atom:id element.
   o  atom:atom elements MUST contain exactly one atom:updated element.
   o  atom:atom elements MUST NOT contain more than one atom:published
      element.
   o  atom:atom elements MAY contain any number of atom:category
      elements.
   o  atom:atom elements MUST NOT contain more than one atom:summary
      element.
   o  atom:atom elements MUST NOT contain more than one atom:content
      element.

4.1.1.1 The Root Element
   
   The atom:atom element has some additional requirements when it 
   is the root element of an Atom document.

   o  atom:atom elements MUST contain exactly one atom:author element.

   If the root element's atom:link element with type="alternate" resolves to
   an HTML document, then that document SHOULD have a autodiscovery link
   element [Atom-autodiscovery] that  reflects back to the Atom document. 

4.1.2 The "atom:feed" Element

   The "atom:feed" element represents Atom documents that are 
   lower in a hierarchy than the containing atom:atom element. 

   atomFeed =
         element atom:entries {
         atomCommonAttributes,
         (atomAtom*)
         }


4.2 Metadata Elements

[[ Alphabetical listing of metadata elements... ]]
[[ Fix wherever it says "Atom Feed or Entry"]]

Remove "The atom:head element"

Impacts

"Everything. PaceHeadInEntry is no longer needed. Dozens of other paces become obsolete or changed due to simplifying the data model."

* Requires atom:author and atom:id on the document element.

* Assumes there's no atom:post, atom:edit, atom:introspection, atom:info, or atom:host. Removal of cruft left us with almost exactly the same element content in atom:entry and atom:feed.

Notes

See Also: PaceFeedRecursive


CategoryProposals