This proposal subsets PaceExtensibilityAndVersioning to achieve the minimum text necessary for Atom. The format rules are roughly: re-use namespace names when possible, ie compatible change, follow the "Must Ignore unknown extensions" rule, and provide "mustUnderstand" attribute for extensibility, change namespaces when making breaking, ie incompatible, changes.


The following text is to be inserted into the format specification

New format section 3.1.3 "mustUnderstand" attribute The "mustUnderstand" attribute indicates whether the parent element MUST be understood by Atom processors. The default value is false.

Remove section 4.1

New section 7 Extending and Versioning Atom

Atom allows any party to extend instances of Atom using a namespace other than the atom format namespace name. Atom may make changes to its namespace and/or qnames, and this is called versioning. This section describes the processing model, extensibility and namespace models for extensibility and versioning.

An optional change means that existing software that doesn't know about the change should not break. A required change means that software that doesn't know about the change must break if it doesn't understand the change. The meaning of "understanding" is up to the change owner. It typically means at least a human has read a specification and/or software can validate the type according to the type definition.

7.1 Processing model

All atom compliant processor MUST ignore any unknown namespace qualified XML attribute content. All atom compliant processor MUST ignore any unknown XML element content in any namespace and all it's descendents UNLESS the atom:mustUnderstand flag on the element is set to "true". An atom compliant processor MUST process all elements marked with mustUnderstand="true" or process none at all. A Fault must be generated if any element marked mustUnderstand is not understood.

7.2 Atom namespace management policy

Any future version of Atom that is backwards compatible with this version will use this namespace name. An example is adding an optional element or attribute. Any backwards compatible version of Atom may use the version attribute to indicate the particular version of the compatible language.

Any future version of Atom that is incompatible with this version will either use a different namespace name or will use an element name not defined in this specification. An example is adding a required element/attribute or removing an element or attribute.

7.3 Atom third party extensibility

Third parties are allowed to extend Atom. They MUST use namespace names they control. The default for third party extensions is that they will be ignored by processors if the processor does not know about the extension, as defined by section 7.1. Element extensions may be marked with atom:mustUnderstand to indicate that processor must fault if the extension is unknown.