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 WebDAV and content repository APIs like 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ò, 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.