UserPreferences

PaceHeadless


Abstract

Eliminates the atom:head element to specify that metadata is applied hierarchically. Adds atom:feeder to include feed metadata in copied entries.

Status

Open.

Rationale

Making a feed document strictly hierarchical allows XML containment to relate feed and entry metadata to the data being described, thereby defining a consistent model for future extension elements.

It also allows the content model to be consistent with a property-based content management system, as supported by common protocols like [WWW]WebDAV and content repository APIs like [WWW]JSR 170.

Finally, it simplifies description of the Atom syndication format extension to metadata that targets its own parent (feed or entry).

Example

<?xml version="1.0" encoding="UTF-8"?>
<feed version="draft-ietf-atompub-format-06: do not deploy"
xmlns="http://purl.org/atom/ns#draft-ietf-atompub-format-06">
  <title>Some Chapters of Books I Like</title>
  <link href="http://example.org/"/>
  <updated>2003-12-13T18:30:02Z</updated>
  <author>
    <name>John Doe</name>
  </author>
  <entry>
    <title>Atom-Powered Robots Run Amok, Chapter One</title>
    <link href="http://example.org/2003/12/13/atom03"/>
    <id>vemmi://example.org/2003/32397</id>
    <summary>It seemed like a good idea at first...</summary>
    <updated>2003-12-13T18:30:02Z</updated>
  </entry>
  <entry>
    <feeder>
      <title>The Baron in the Trees</title>
      <link href="http://example.org/"/>
      <updated>2003-12-13T18:30:02Z</updated>
      <author>
        <name>Italo Calvino</name>
      </author>
      <contributor>
        <name>Archibald Colquhoun</name>
      </contributor>
    </feeder>
    <title>Chapter One</title>
    <link href="http://example.com/something"/>
    <id>vemmi://example.org/2004/foo97</id>
    <summary type="XHTML"><div xmlns="http://www.w3.org/1999/xhtml">
    <i>It was on the fifteenth of June, 1767</i>, that Cosimo Piovasco di Rond&#x00F2;, 
    my brother, sat among us for the last time.</div></summary>
    <updated>2004-12-13T18:30:02Z</updated>
  </entry>
</feed>


Proposal

Edits in respect to draft-ietf-atompub-format-05.txt:

Move section 4.1.1 (The "version" Attribute) to section 2 or remove it entirely. Only the outermost atom:feed or atom:entry can contain the version attribute, so this should be described under documents.

In section 4:

4.  Element Definitions

4.1  The "atom:feed" Element

   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 one or
   more metadata elements followed by zero or more atom:entry child elements.

   atomFeed =
      element atom:feed {
         atomCommonAttributes,
         atomVersionAttribute,
         (  atomTitle
          & atomUpdated
          & atomLink+
          & atomId?
          & atomSubtitle?
          & atomAuthor?
          & atomContributor*
          & atomCopyright?
          & atomCategory*
          & atomIntrospection?
          & atomGenerator?
          & atomPost?
          & anyElement* ),
         atomEntry*
      }

   The atom:feed element MUST have a "version" attribute indicating
   what version of the Atom specification to which the document conforms.

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

   o  atom:feed MUST contain exactly one atom:title element.
   o  atom:feed MUST contain at least one atom:link element
      with a rel attribute value of "alternate".
   o  atom:feed MUST NOT contain more than one atom:link
      element with a rel attribute value of "alternate" that has the
      same type attribute value.  If a feed's atom:link element with
      type="alternate" resolves to an HTML document, then that document
      SHOULD have a autodiscovery link element [Atom-autodiscovery] that
      reflects back to the feed.  atom:head elements MAY contain
      additional atom:link elements beyond those described above.
   o  atom:feed MUST contain exactly one atom:author element
      UNLESS all of the atom:feed element's child atom:entry elements
      contain an atom:author element.  atom:head elements MUST NOT
      contain more than one atom:author element.  [[inheritance]]
   o  atom:feed MUST NOT contain more than one atom:contributor element.
   o  atom:feed MUST NOT contain more than one atom:copyright element.
   o  atom:feed MUST NOT contain more than one atom:id element.
   o  atom:feed MUST contain exactly one atom:updated element.
   o  atom:feed MAY contain any number of atom:category elements.
   o  atom:feed MUST NOT contain more than one atom:post element.
   o  atom:feed MUST NOT contain more than one atom:introspection element.
   o  atom:feed MUST NOT contain more than one atom:subtitle element.
   o  atom:feed MUST NOT contain more than one atom:generator element.

4.2  The "atom:entry" Element

   The "atom:entry" element represents an individual entry.  This
   element can appear as a child of the atom:feed element or as the
   top-level document element of a standalone Atom Entry Document.

   When appearing in an Atom Entry Document, the atom:entry element MUST
   have a "version" attribute indicating what version of the Atom
   specification to which the document conforms.

   atomEntry =
         element atom:entry {
         atomCommonAttributes,
         atomVersionAttribute?,
         (atomTitle
          & atomUpdated
          & atomLink*
          & atomId
          & atomSubtitle?
          & atomAuthor?
          & atomContributor*
          & atomCopyright?
          & atomCategory*
          & atomPublished?
          & atomEdit?
          & atomSummary?
          & atomContent?
          & atomFeeder?
          & anyElement* )
      }

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

   o  atom:entry elements MUST have exactly one "atom:title" element.
   o  atom:entry elements MUST contain exactly one atom:id element.
   o  atom:entry elements that contain no child atom:content element
      MUST contain at least one atom:link element with a rel attribute
      value of "alternate".  atom:entry elements MUST NOT contain more
      than one atom:link element with a rel attribute value of
      "alternate" that has the same type attribute value.  atom:entry
      elements MAY contain additional atom:link elements beyond those
      described above.
   o  atom:entry elements MUST contain exactly one atom:updated element.
   o  atom:entry elements MUST NOT contain more than one atom:published
      element.
   o  atom:entry elements MUST contain exactly one atom:author element,
      unless, in an Atom Feed Document, the atom:head element contains
      an atom:author element itself.  atom:entry elements MUST NOT
      contain more than one atom:author element.
   o  atom:entry elements MUST NOT contain more than one
      atom:contributor element.
   o  atom:entry elements MUST NOT contain more than one atom:copyright
      element.
   o  atom:entry elements MAY contain any number of atom:category
      elements.
   o  atom:entry elements MUST contain an atom:summary element in any of
      the following cases:
      *  the atom:entry element contains no atom:content element.
      *  the atom:entry contains an atom:content which has a "src"
         attribute (and is thus empty).
      *  the atom:entry contains content which is encoded in Base64;
         i.e.  the "type" attribute of atom:content is a MIME media type
         [RFC2045] and does not begin with "text/" nor end with "+xml".
   o  atom:entry elements MUST NOT contain more than one atom:summary
      element.
   o  atom:entry elements MUST NOT contain more than one atom:edit
      element.

   When an atom:entry appears within an atom:feed and does not contain the
   optional child elements atom:author, atom:contributor, atom:copyright, and
   atom:category, then those elements are inherited from the atom:feeder
   child element if any is included within the atom:entry.  If no atom:feeder
   child element is present, then the listed elements are inherited from the
   parent atom:feed element.

4.3 The atom:feeder Element

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

   atomFeeder =
      element atom:feeder {
         atomCommonAttributes,
         (  atomTitle
          & atomUpdated
          & atomLink+
          & atomId?
          & atomSubtitle?
          & atomAuthor?
          & atomContributor*
          & atomCopyright?
          & atomCategory*
          & atomIntrospection?
          & atomGenerator?
          & atomPost?
          & anyElement* )
      }

and in Section 8: (RobertSayre)

8.  Extending Atom

8.1   Extensions To the Atom Vocabulary
        
   Future versions of this specification may 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 a markup error.  For the
   purposes of this discussion, unrecognized markup from the Atom vocabulary
   will be considered "foreign markup".
        
   Unlike markup from other vocabularies, foreign markup from the Atom
   vocabulary MAY appear at any location in an Atom document.

8.2   Software Processing of Foreign Markup
        
   Software processing an Atom Document which encounters foreign markup in a
   location that is legal according to this specification MUST NOT stop
   processing or signal an error. It may be the case that the software is able
   to process the foreign markup correctly and does so. Otherwise, such markup
   is termed "unknown foreign markup".
        
   When unknown foreign markup is encountered in a Text Contruct or
   atom:content element, software SHOULD ignore the markup and process any
   text content of foreign elements as though the surrounding markup were not
   present.

8.3  Extension Elements

  Atom allows foreign markup anywhere in an Atom document. Child elements 
  of atom:entry and atom:feed are considered "metadata" elements, and are 
  described below. The role of other foreign markup is undefined by this 
  specification.

8.3.1  Simple Extension Elements

  A Simple Extension element MUST NOT have any attributes or child
  elements.  The element MAY contain either character data, or be
  empty.

  The element can be interpreted as a simple property 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.

8.3.2  Structured Extension Elements

  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.

  The structure of a Structured Extension element, including the
  order of its child elements, could be significant, so it MUST be
  preserved by processors.

  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 Subject is defined by the specification of the Atom extension.

Impacts

Extracted from PaceFeedRecursive. Replaces PaceHeadInEntry.

Notes


CategoryProposals