Must use double indirection
<!ENTITY % NS.prefixed "IGNORE" >
<!ENTITY % MATHML.prefixed "%NS.prefixed;" >
<!ENTITY % MATHML.xmlns "http://www.w3.org/1998/Math/MathML" >
<!ENTITY % MATHML.prefix "m" >
<![%MATHML.prefixed;[
<!ENTITY % MATHML.xmlns.extra.attrib "" >
]]>
<!ENTITY % MATHML.xmlns.extra.attrib "" >
<![%MATHML.prefixed;[
<!ENTITY % MATHML.pfx "%MATHML.prefix;:" >
<!ENTITY % MATHML.xmlns.attrib
"xmlns:%MATHML.prefix; CDATA #FIXED '%MATHML.xmlns;'
%MATHML.xmlns.extra.attrib;"
>
]]>
<!ENTITY % MATHML.pfx "" >
<!ENTITY % MATHML.xmlns.attrib
"xmlns CDATA #FIXED '%MATHML.xmlns;'
%MATHML.xmlns.extra.attrib;"
>
<![%NS.prefixed;[
<!ENTITY % XHTML.xmlns.extra.attrib
"%MATHML.xmlns.attrib;" >
]]>
<!ENTITY % XHTML.xmlns.extra.attrib ""
>
<!-- Section B: MathML Qualified Names ::::::::::::::::::::::::::::: -->
<!-- 9. This section declares parameter entities used to provide
namespace-qualified names for all MathML element types.
-->
<!ENTITY % abs.qname "%MATHML.pfx;abs" >
<!ENTITY % and.qname "%MATHML.pfx;and" >
...
Only works in external DTD subset