Choice Element

All <Choice> elements shall have a @Requires attribute whose value contains a whitespace-delimited list of namespace prefixes that identify the namespaces that a markup consumer needs to understand to select that Choice and process the content. If the markup consumer does not understand all of the namespaces identified, it shall not select that <Choice> element. Markup consumers shall select the first <Choice> element, in markup order, in which all namespaces identified by the @Requires attribute are understood.

<Choice> elements can include the attributes @Ignorable, @MustUnderstand, @ProcessContent, @PreserveElements, and @PreserveAttributes described in this specification. These attributes shall be prefixed when on a <Choice> element. A markup consumer shall generate an error if it encounters a <Choice> element having any unprefixed attribute name, with the single exception of the @Requires attribute, which shall be unprefixed.
Note: : A namespace declaration is not considered to be an unprefixed attribute name.
A markup consumer that encounters a prefixed @Requires attribute, when the prefix is associated with the Markup Compatibility namespace, shall generate an error.

<Choice> elements might have ignored attributes. Markup consumers shall not generate an error when encountering such attributes. However, markup consumers shall generate an error when encountering an attribute of the <Choice> element that belongs to a namespace that is neither understood nor ignorable.

Markup producers shall not generate <Choice> elements that have the @xml:lang or @xml:space attributes. Markup consumers shall generate an error if they encounter the @xml:lang or @xml:space attributes on a< Choice> element, regardless of whether the element is preceded by a selected <Choice> element.