Any XML-based document specification can use the markup language described in this Part as the basis of its compatibility with previous and future specification revisions and to enable the creation of independent extensions of its specification. In this specification, the term markup specification is used to refer to a specification that relies on this Office Open XML Markup Compatibility and Extensibility Part and defines a set of XML namespaces, the elements and attributes within those namespaces, and any processing requirements for those namespaces, elements, and attributes. Markup document refers to an XML document that conforms to a markup specification. A markup producer is a software application or component that generates a markup document. A markup consumer is a software application or component that can process a markup document according to the processing requirements of the markup specification.

This specification is dependent on XML namespace names, expressed as URIs. A markup specification defines a set of elements and attributes within one or more namespaces. A characteristic of a markup consumer is that it can recognize or process the elements and attributes within understood namespaces, including those containing elements and attributes defined in the markup specification. Markup consumers shall process all recognized elements and attributes of any understood namespace according to the requirements of the markup specifications defining those elements or attributes. A markup specification might require that the presence of unrecognized elements or attributes in an understood namespace be treated as an error condition; however, markup consumers shall always treat the presence of an unrecognized element or attribute from the Markup Compatibility namespace as an error condition. If a markup consumer encounters an element or attribute from a non-understood namespace, the markup consumer shall treat the presence of that element or attribute as an error condition, unless the markup producer has embedded in the markup document explicit Markup Compatibility elements or attributes that override that behavior.

Within a markup document, a markup producer might use Markup Compatibility attributes to identify ignorable namespaces. Markup consumers shall ignore elements and attributes from namespaces that are both non-understood and ignorable, and shall not treat their presence as errors. A markup producer can indicate to the markup consumer whether the content of an ignored element shall be disregarded together with the ignored element, or if the content should be processed as if it were the content of the ignored element’s parent.

Within a markup docume

nt, a markup producer might also use Markup Compatibility attributes to suggest to a markup editor that the editor attempt to preserve some ignored elements or attributes. The markup editor can attempt to persist these ignored elements and attributes when a saving markup document, despite the editor’s inability to recognize the purpose of these ignored elements and attributes.

A markup producer, aware of the existence of markup consumers with overlapping but different sets of understood namespaces, might choose to include in a markup document alternate content regions, each holding a set of markup alternatives for use by different markup consumers. A markup consumer shall use rules embedded in the markup document by the markup producer to select no more than one of these alternatives for normal processing, and shall disregard all other alternatives.

Future versions of markup specifications shall specify new namespaces for any markup that is enhanced or modified by the new version, which a markup consumer of that version of the markup specification would include as an understood namespace. Some of the namespaces introduced in the new markup specification might each subsume one of the previous version’s understood namespaces. A new understood namespace subsumes a previously-understood namespace if it includes all of the elements, attributes, and attribute values of the previously-understood namespace. Regardless of whether a new namespace subsumes a previously defined namespace, markup consumers based on a new version of a markup specification shall support all understood namespaces of the previous version unless the new version makes an explicit statement to the contrary.

This specification can be implemented using a pipelined, preprocessing architecture in the form of a software module called a markup preprocessor. A markup preprocessor can use the Markup Compatibility elements and attributes to produce output that is free of all ignorable non-understood content, all Markup Compatibility elements and attributes, and all elements and attributes in subsumed namespaces.

Markup consumers should report errors when processing non-conforming documents.