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.
