This proposal provides content for section 9 "How To Extend Atom", noting the locations where non-Atom-namespace markup may be inserted and requiring "Must Ignore" behavior from software.




The default MustIgnore rule needs to be spelled out somewhere.


(These sub-section numbers will be bumped by 1 if PaceExtensionConstruct is accepted.)

=== 9. Extending Atom ===
==== 9.1 Extensions From Non-Atom Vocabularies ====
        This specification describes Atom's XML markup vocabulary.  Markup from
        other vocabularies ("foreign markup") can be used in Atom in a variety of
        ways. Text Constructs may contain foreign markup which SHOULD be HTML or
        XHTML.  The atom:content element is designed to support the inclusion of
        arbitrary foreign markup.
        Also, Person Constructs, the atom:head element, and the atom:entry element
        allow the inclusion of foreign markup.
==== 9.2 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.
==== 9.3 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 as a child of atom:entry,
        atom:head, or a Person Construct, software SHOULD bypass the markup and any
        textual content and MUST NOT change its behavior as a result of the
        markup's presence.
        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



TimBray (with advice from Dave Orchard)