A MathML document must be a well-formed XML documents using elements in the MathML namespace as defined by this specification, however it is not required that the document refer to any specific Document Type Definition or Schema that specifies MathML. It is sometimes advantagous not to specify such a language definition as these files are large, often much larger than the MathML expression and unless they have been previously cached by the MathML application, the time taken to fetch the DTD or schema may have an appreciable effect on the processing of the MathML document.
Note also that if no DTD is specified with a DOCTYPE declaration, that entity references (for example to refer to MathML characters by name) may not be used. The document should be encoded in an encoding (for example UTF-8) in which all needed characters may be encoded as character data, or characters may be referenced using numeric character references, for example ∫ rather than ∫
If a MathML fragment is parsed without a DTD, in other words as a well-formed XML fragment, it is the responsibility of the processing application to treat the white space characters occurring outside of token elements as not significant.
However, in many circumstances, especially while producing or editing MathML, it is useful to use a language definition, to constrain the editing process or to check the correctness of generated files. The following section, Section A.2 Using the MathML DTD, discusses the MathML DTD, which forms a normative part of the specification. Following that, Section A.3 Using the MathML XML Schema, discusses an alternative language definition using the W3C XML Schema language, [XMLSchemas]. One should note that the Schema definition of the language is currently stricter than the DTD version. That is, a Schema validating processor will declare invalid documents that are declared valid by a (DTD) validating XML parser. This is partly due to the fact that the XML Schema language may express additional constraints not expressable in the DTD, and partly due to the fact that for reasons of compatibility with earlier releases, the DTD is intentionally forgiving in some places and does not enforce constraints that are specified in the text of this specification.
MathML documents should be validated using the XML DTD for MathML, http://www.w3.org/Math/DTD/mathml2/mathml2.dtd, which is also shown below in Section A.2.5 The MathML DTD.
Documents using this DTD should contain a doctype declaration of the form:
<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"
>
The URI may be changed to that of a local copy of the DTD if required.
The MathML DTD has several parameter entities that may be used to
                  customise the behaviour of the XML parser.  In the examples below
                  these parameter entites are shown being used in the internal
                     subset of the DTD, i.e. within [] inside the
                  <!DOCTYPE declaration. If the MathML DTD is being used
                  as a module in a larger document type, then these parameters entities
                  may be set in the combined DTD and need not be explictly set in
                  individual document instances. For example the combined XHTML + MathML
                  DTD described below in Section A.2.3 MathML as a DTD Module sets each of
                  these parameters to appropriate defaults.
               
It is sometimes necessary, or convenient, to
                     use the mechanisms described in [Modularization]
                      which provide a namespace prefix on
                     MathML element names. The DTD below is designed to allow this usage.
                     If the parameter entity MATHML.prefixed is declared to be 
                     INCLUDE, using a declaration such as
                     
                  
<!ENTITY % MATHML.prefixed "INCLUDE" >
                     either in the internal subset of the DOCTYPE declaration, or in the
                     DTD file that is including the MathML DTD, then all MathML elements
                     should be used with a prefix, for example <m:mrow>,
                     <m:apply>, etc. The prefix defaults to m
                     but another prefix  may be declared by
                     declaring in addition the parameter entity MathML.prefix.
                     For example,
                     
                  
<!ENTITY % MATHML.prefix "mml" >
                     would set the prefix for the MathML namespace to mml.
                  
So a complete declaration for a document using this prefix could be:
<!DOCTYPE mml:math 
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" [
    <!ENTITY % MATHML.prefixed "INCLUDE">
    <!ENTITY % MATHML.prefix "mml">
]>
<mml:math>
...
This use of parameter entities to control namespace prefixes follows the conventions specified in [Modularization].
In addition to the prefix for the MathML namespace, the DTD
                     allows similar customization of other prefixes that may be used
                     in attributes. The Xlink  and W3C XML Schema Instance namespaces 
                     may be used with this DTD, with default prefixes xlink
                     and xsi respectively. The entities XLINK.prefix and
                     Schema.prefix may be set in the same way as
                     MATHML.prefix above to use different prefixes. As these
                     namespaces are used for attribute names, they must be used with
                     explict prefixes, so there is no analogue of the
                     MATHML.prefixed parameter in these cases.
                     The following example uses the s:schemaLocation attribute (which is
                     described below in Section A.3.1 Associating the MathML Schema with MathML fragments)
                     with a non standard prefix, and uses a parameter entity in the internal
                     subset of the DTD so that the file may be DTD valid as well as
                     Schema valid.
                  
<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" [
    <!ENTITY % Schema.prefix "s">
]>
<math xmlns="http://www.w3.org/1998/Math/MathML"
      xmlns:s="http://www.w3.org/2001/XMLSchema-instance"
      s:schemaLocation="http://www.w3.org/1998/Math/MathML 
                        http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd">
...
Note that while the [Namespaces] Recommendation provides mechanisms to change the prefix at arbitrary points in the document, this flexibility is not provided in this DTD (and is probably not possible to specify in any DTD).
For reasons of backward compatibility, there are several
                     constraints specified in this specification that are not
                     enforced by the DTD by default. There are many constraints in the
                     specification that may not be enforced by a DTD, however there
                     are some additional constraints that could be checked.
                     The parameter entity MathMLStrict
                      may be set to INCLUDE to activate
                     these stricter checks.
                  
The syntax to set the parameter is as the same as for the previous examples:
<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" [
    <!ENTITY % MathMLstrict "INCLUDE">
]>
If this strict checking is enabled, the DTD will enforce that
                     mfrac has exactly two child elements. Similarly for
                     msub, mover, etc. The values of several
                     attributes will be checked, for example the value of
                     mathvariant is constrained to the list specified in Section 3.2.2 Mathematics style attributes common to token
                        elements. The DTD will check
                     that table makup, mtr and mtd, is only used correctly
                     nested in mtable. Finally the use of Presentation MathML
                     elements within  Content MathML is restricted to those elements listed
                     in section Section 5.2.3 Presentation Markup Contained in Content Markup.
                  
Normally, however, a MathML expression does not constitute an entire XML document. MathML is designed to be used as the mathematics fragment of larger markup languages. In particular it is designed to be used as a module in documents marked up with the XHTML family of markup languages, as defined in [Modularization]. As a convenience, a version of the XHTML DTD, extended with this MathML module, is also provided as a concrete example. This version includes all the necessary declarations included into one file (in contrast to the standalone version of the MathML DTD which references several files for entity declarations etc.). To use this DTD, a document should contain the doctype declaration
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"
>
as above, the URI may be altered to that of a local copy of the DTD, and the namespace prefixes used for XHTML and MathML may be controlled by the use of parameter entities.
If required, one may validate MathML documents using an SGML
                  parser such as nsgmls,  
                  rather than a validating XML parser.
                  In this case an SGML declaration defining the
                  constraints of XML applicable to an SGML parser must be used.
                  See [sgml-xml].
               
The entity declarations for characters are referenced at the end of the DTD. These are linked to the character tables in Chapter 6 Characters, Entities and Fonts for each entity set.
Lists of the combined MathML set of character names, ordered by name or by Unicode value are also available.
In order to accommodate XML namespace prefixes, the DTD does not
                  directly refer to an element name such as mrow
                  but instead always refers to the name via a parameter entity such as
                  %mrow.qname;. The definitions of these parameter
                  entities are in the file 
                  but are not shown here. They are simply declarations such as
                  the following, one for each MathML element.
                  
               
<!ENTITY % mrow.qname "%MATHML.pfx;mrow" >
Here we give the main body of the DTD. The full DTD, as well as the XHTML-Math DTD, is available as a gzipped tar archive.
<!-- MathML 2.0 DTD  ....................................................... -->
<!-- file: mathml2.dtd
-->
<!-- MathML 2.0 DTD
     This is the Mathematical Markup Language (MathML) 2.0, an XML
     application for describing mathematical notation and capturing
     both its structure and content.
     Copyright © 1998-2003 W3C® (MIT, ERCIM, Keio), All Rights 
     Reserved. W3C liability, trademark, document use and software
     licensing rules apply. 
     Permission to use, copy, modify and distribute the MathML 2.0 DTD and
     its accompanying documentation for any purpose and without fee is
     hereby granted in perpetuity, provided that the above copyright notice
     and this paragraph appear in all copies.  The copyright holders make
     no representation about the suitability of the DTD for any purpose.
     It is provided "as is" without expressed or implied warranty.
        Revision:   $Id: appendixa.html,v 1.1 2003/08/04 20:06:18 mf Exp $
     This entity may be identified by the PUBLIC and SYSTEM identifiers:
       PUBLIC "-//W3C//DTD MathML 2.0//EN"
       SYSTEM "mathml2.dtd"
     Revisions: editor and revision history at EOF
-->
<!-- Entity used to enable marked sections which enforces stricter
     checking of MathML syntax rules
-->
<!ENTITY % MathMLstrict "IGNORE">
<!-- MathML Qualified Names module ............................... -->
<!ENTITY % mathml-qname.module "INCLUDE" >
<![%mathml-qname.module;[
<!ENTITY % mathml-qname.mod
     PUBLIC "-//W3C//ENTITIES MathML 2.0 Qualified Names 1.0//EN"
            "mathml2-qname-1.mod" >
%mathml-qname.mod;]]>
<!-- if %NS.prefixed; is INCLUDE, include all NS attributes, 
     otherwise just those associated with MathML
-->
<![%NS.prefixed;[
  <!ENTITY % MATHML.NamespaceDecl.attrib 
         "%NamespaceDecl.attrib;"
>
]]>
<!ENTITY % MATHML.NamespaceDecl.attrib 
     "%MATHML.xmlns.attrib;"
>
<!-- Attributes shared by all elements  .......................... -->
<!ENTITY % MATHML.Common.attrib
     "%MATHML.NamespaceDecl.attrib;
      %XLINK.prefix;:href   CDATA           #IMPLIED
      %XLINK.prefix;:type   CDATA           #IMPLIED
      class        CDATA                    #IMPLIED
      style        CDATA                    #IMPLIED
      id           ID                       #IMPLIED
      xref         IDREF                    #IMPLIED
      other        CDATA                    #IMPLIED"
>
<!-- Presentation element set  ................................... -->
<!-- Attribute definitions -->
<!ENTITY % att-fontsize
     "fontsize     CDATA                    #IMPLIED" >
<!ENTITY % att-fontweight
     "fontweight   ( normal | bold )        #IMPLIED" >
<!ENTITY % att-fontstyle
     "fontstyle    ( normal | italic )      #IMPLIED" >
<!ENTITY % att-fontfamily
     "fontfamily   CDATA                    #IMPLIED" >
<!ENTITY % att-color
     "color        CDATA                    #IMPLIED" >
<!-- MathML2 typographically-distinguished symbol attributes -->
<![%MathMLstrict;[
  <!ENTITY % att-mathvariant
     "mathvariant     ( normal | bold | italic | bold-italic | double-struck | 
                        bold-fraktur | script | bold-script | fraktur |
                        sans-serif | bold-sans-serif | sans-serif-italic |
                        sans-serif-bold-italic | monospace )
                                                                   #IMPLIED" >
]]>
<!ENTITY % att-mathvariant
     "mathvariant     CDATA                    #IMPLIED" >
<!ENTITY % att-mathsize
     "mathsize     CDATA                    #IMPLIED" >
<!ENTITY % att-mathcolor
     "mathcolor     CDATA                    #IMPLIED" >
<!ENTITY % att-mathbackground
     "mathbackground     CDATA                    #IMPLIED" >
<!ENTITY % att-fontinfo
     "%att-fontsize;
      %att-fontweight;
      %att-fontstyle;
      %att-fontfamily;
      %att-color;
      %att-mathvariant;
      %att-mathsize;
      %att-mathcolor;
      %att-mathbackground;"
>
<!ENTITY % att-form
     "form         ( prefix | infix | postfix )  #IMPLIED" >
<!ENTITY % att-fence
     "fence        ( true | false )         #IMPLIED" >
<!ENTITY % att-separator
     "separator    ( true | false )         #IMPLIED" >
<!ENTITY % att-lspace
     "lspace       CDATA                    #IMPLIED" >
<!ENTITY % att-rspace
     "rspace       CDATA                    #IMPLIED" >
<!ENTITY % att-stretchy
     "stretchy     ( true | false )         #IMPLIED" >
<!ENTITY % att-symmetric
     "symmetric    ( true | false )         #IMPLIED" >
<!ENTITY % att-maxsize
     "maxsize      CDATA                    #IMPLIED" >
<!ENTITY % att-minsize
     "minsize      CDATA                    #IMPLIED" >
<!ENTITY % att-largeop
     "largeop      ( true | false)          #IMPLIED" >
<!ENTITY % att-movablelimits
     "movablelimits ( true | false )        #IMPLIED" >
<!ENTITY % att-accent
     "accent       ( true | false )         #IMPLIED" >
<!ENTITY % att-opinfo
     "%att-form;
      %att-fence;
      %att-separator;
      %att-lspace;
      %att-rspace;
      %att-stretchy;
      %att-symmetric;
      %att-maxsize;
      %att-minsize;
      %att-largeop;
      %att-movablelimits;
      %att-accent;"
>
<!ENTITY % att-width
     "width        CDATA                    #IMPLIED" >
<!ENTITY % att-height
     "height       CDATA                    #IMPLIED" >
<!ENTITY % att-depth
     "depth        CDATA                    #IMPLIED" >
<!ENTITY % att-linebreak
     "linebreak    CDATA                    #IMPLIED" >
<!ENTITY % att-sizeinfo
     "%att-width;
      %att-height;
      %att-depth;"
>
<!ENTITY % att-lquote               
     "lquote       CDATA                    #IMPLIED" >
<!ENTITY % att-rquote               
     "rquote       CDATA                    #IMPLIED" >
<!ENTITY % att-linethickness        
     "linethickness CDATA                   #IMPLIED" >
<!ENTITY % att-scriptlevel          
     "scriptlevel  CDATA                    #IMPLIED" >
<!ENTITY % att-displaystyle         
     "displaystyle ( true | false )         #IMPLIED" >
<!ENTITY % att-scriptsizemultiplier 
     "scriptsizemultiplier CDATA            #IMPLIED" >
<!ENTITY % att-scriptminsize        
     "scriptminsize CDATA                   #IMPLIED" >
<!ENTITY % att-background           
     "background   CDATA                    #IMPLIED" >
<!ENTITY % att-veryverythinmathspace           
     "veryverythinmathspace   CDATA         #IMPLIED" >
<!ENTITY % att-verythinmathspace           
     "verythinmathspace   CDATA             #IMPLIED" >
<!ENTITY % att-thinmathspace           
     "thinmathspace   CDATA                 #IMPLIED" >
<!ENTITY % att-mediummathspace           
     "mediummathspace   CDATA               #IMPLIED" >
<!ENTITY % att-thickmathspace           
     "thickmathspace   CDATA                #IMPLIED" >
<!ENTITY % att-verythickmathspace           
     "verythickmathspace   CDATA            #IMPLIED" >
<!ENTITY % att-veryverythickmathspace           
     "veryverythickmathspace   CDATA        #IMPLIED" >
<!ENTITY % att-open                 
     "open         CDATA                    #IMPLIED" >
<!ENTITY % att-close                
     "close        CDATA                    #IMPLIED" >
<!ENTITY % att-separators          
     "separators   CDATA                    #IMPLIED" >
<!ENTITY % att-subscriptshift       
     "subscriptshift CDATA                  #IMPLIED" >
<!ENTITY % att-superscriptshift     
     "superscriptshift CDATA                #IMPLIED" >
<!ENTITY % att-accentunder          
     "accentunder  ( true | false )         #IMPLIED" >
<!ENTITY % att-align       
     "align        CDATA                    #IMPLIED" >
<![%MathMLstrict;[
  <!ENTITY % att-numalign
     "numalign     ( left | center | right )         #IMPLIED" >
  <!ENTITY % att-denomalign
     "denomalign   ( left | center | right )         #IMPLIED" >
]]>
<!ENTITY % att-numalign
     "numalign        CDATA                    #IMPLIED" >
<!ENTITY % att-denomalign
     "denomalign        CDATA                    #IMPLIED" >
<!ENTITY % att-rowalign-list
     "rowalign     CDATA                    #IMPLIED" >
<!ENTITY % att-columnalign-list
     "columnalign  CDATA                    #IMPLIED" >
<![%MathMLstrict;[
  <!ENTITY % att-rowalign
     "rowalign     ( top | bottom |	center | baseline | axis )    #IMPLIED" >
  <!ENTITY % att-columnalign
     "columnalign  ( left | center | right )        #IMPLIED" >
]]>
<!ENTITY % att-rowalign      
     "rowalign     CDATA                    #IMPLIED" >
<!ENTITY % att-columnalign     
     "columnalign  CDATA                    #IMPLIED" >
<!ENTITY % att-columnwidth   
     "columnwidth  CDATA                    #IMPLIED" >
<!ENTITY % att-groupalign-list
     "groupalign   CDATA                    #IMPLIED" >
<![%MathMLstrict;[
  <!ENTITY % att-groupalign
     "groupalign   ( left | right | center | decimalpoint )   #IMPLIED" >
]]>
<!ENTITY % att-groupalign      
     "groupalign   CDATA                    #IMPLIED" >
<!ENTITY % att-alignmentscope 
     "alignmentscope CDATA                  #IMPLIED" >
<!ENTITY % att-rowspacing           
     "rowspacing   CDATA                    #IMPLIED" >
<!ENTITY % att-columnspacing      
     "columnspacing CDATA                   #IMPLIED" >
<!ENTITY % att-rowlines            
     "rowlines     CDATA                    #IMPLIED" >
<!ENTITY % att-columnlines        
     "columnlines  CDATA                    #IMPLIED" >
<!ENTITY % att-frame            
     "frame       ( none | solid | dashed ) #IMPLIED" >
<!ENTITY % att-side
     "side       ( left | right | leftoverlap | rightoverlap ) #IMPLIED" >
<!ENTITY % att-framespacing         
     "framespacing CDATA                    #IMPLIED" >
<!ENTITY % att-minlabelspacing
     "minlabelspacing CDATA                 #IMPLIED" >
<![%MathMLstrict;[
  <!ENTITY % att-equalrows
     "equalrows    ( true | false )         #IMPLIED" >
  <!ENTITY % att-equalcolumns
     "equalcolumns ( true | false )         #IMPLIED" >
]]>
<!ENTITY % att-equalrows        
     "equalrows    CDATA                    #IMPLIED" >
<!ENTITY % att-equalcolumns         
     "equalcolumns CDATA                    #IMPLIED" >
<!ENTITY % att-tableinfo            
     "%att-align;
      %att-rowalign-list;
      %att-columnalign-list;
      %att-columnwidth;
      %att-groupalign-list;
      %att-alignmentscope;
      %att-side;
      %att-rowspacing;
      %att-columnspacing;
      %att-rowlines;
      %att-columnlines;
      %att-width;
      %att-frame;
      %att-framespacing;
      %att-minlabelspacing;
      %att-equalrows;
      %att-equalcolumns;
      %att-displaystyle;" 
>
<!ENTITY % att-rowspan              
     "rowspan      CDATA                    #IMPLIED" >
<!ENTITY % att-columnspan           
     "columnspan   CDATA                    #IMPLIED" >
<!ENTITY % att-edge        
     "edge         ( left | right )         #IMPLIED" >
<!ENTITY % att-actiontype          
     "actiontype   CDATA                    #IMPLIED" >
<!ENTITY % att-selection       
     "selection    CDATA                    #IMPLIED" >
<!ENTITY % att-name                 
     "name         CDATA                    #IMPLIED" >
<!ENTITY % att-alt              
     "alt          CDATA                    #IMPLIED" >
<!ENTITY % att-index           
     "index        CDATA                    #IMPLIED" >
<![%MathMLstrict;[
  <!ENTITY % att-bevelled
     "bevelled      ( true | false )        #IMPLIED" >
]]>
<!ENTITY % att-bevelled       
     "bevelled      CDATA                    #IMPLIED" >
<!-- Presentation schemata with content -->
<!ENTITY % ptoken                   
     "%mi.qname; | %mn.qname; | %mo.qname;
      | %mtext.qname; | %ms.qname;" >
<!ATTLIST %mi.qname;
      %MATHML.Common.attrib;
      %att-fontinfo;
>
<!ATTLIST %mn.qname;      
      %MATHML.Common.attrib; 
      %att-fontinfo;
>
<!ATTLIST %mo.qname;     
      %MATHML.Common.attrib; 
      %att-fontinfo;
      %att-opinfo;
>
<!ATTLIST %mtext.qname;  
      %MATHML.Common.attrib;
      %att-fontinfo;
>
<!ATTLIST %ms.qname;     
      %MATHML.Common.attrib;
      %att-fontinfo;
      %att-lquote;
      %att-rquote;
>
<!-- Empty presentation schemata -->
<!ENTITY % petoken                  
     "%mspace.qname;" >
<!ELEMENT %mspace.qname;  EMPTY >
<!ATTLIST %mspace.qname; 
      %att-sizeinfo;
      %att-linebreak;
      %MATHML.Common.attrib;
>
<!-- Presentation: general layout schemata -->
<!ENTITY % pgenschema               
     "%mrow.qname; | %mfrac.qname; | %msqrt.qname; | %mroot.qname; 
      | %menclose.qname; | %mstyle.qname; | %merror.qname; 
      | %mpadded.qname; | %mphantom.qname; | %mfenced.qname;" >
<!ATTLIST %mrow.qname;        
      %MATHML.Common.attrib;
>
<!ATTLIST %mfrac.qname;     
      %MATHML.Common.attrib;
      %att-bevelled;
      %att-numalign;
      %att-denomalign;
      %att-linethickness;
>
<!ATTLIST %msqrt.qname;     
      %MATHML.Common.attrib;
>
<![%MathMLstrict;[
  <!ATTLIST %menclose.qname;
      %MATHML.Common.attrib;
      notation ( longdiv | actuarial | radical ) 'longdiv' >
]]>
<!ATTLIST %menclose.qname;  
      %MATHML.Common.attrib;
      notation CDATA 'longdiv' >
<!ATTLIST %mroot.qname;    
      %MATHML.Common.attrib;
>
<!ATTLIST %mstyle.qname;  
      %MATHML.Common.attrib;
      %att-fontinfo;
      %att-opinfo;
      %att-lquote;
      %att-rquote;
      %att-linethickness;
      %att-scriptlevel;
      %att-scriptsizemultiplier;
      %att-scriptminsize;
      %att-background;
      %att-veryverythinmathspace;
      %att-verythinmathspace;
      %att-thinmathspace;
      %att-mediummathspace;
      %att-thickmathspace;
      %att-verythickmathspace;
      %att-veryverythickmathspace;
      %att-open;
      %att-close;
      %att-separators;
      %att-subscriptshift;
      %att-superscriptshift;
      %att-accentunder;
      %att-tableinfo;
      %att-rowspan;
      %att-columnspan;
      %att-edge;
      %att-selection;
      %att-bevelled;
      %att-height;
      %att-depth;
>
<!ATTLIST %merror.qname;   
      %MATHML.Common.attrib;
>
<!ATTLIST %mpadded.qname;     
      %MATHML.Common.attrib;
      %att-sizeinfo;
      %att-lspace;
>
<!ATTLIST %mphantom.qname;      
      %MATHML.Common.attrib;
>
<!ATTLIST %mfenced.qname;     
      %MATHML.Common.attrib;
      %att-open;
      %att-close;
      %att-separators;
>
<!-- Presentation layout schemata: scripts and limits -->
<!ENTITY % pscrschema               
     "%msub.qname; | %msup.qname; | %msubsup.qname; | %munder.qname; 
      | %mover.qname; | %munderover.qname; | %mmultiscripts.qname;" >
<!ATTLIST %msub.qname;      
      %MATHML.Common.attrib;
      %att-subscriptshift;
>
<!ATTLIST %msup.qname;         
      %MATHML.Common.attrib;
      %att-superscriptshift;
>
<!ATTLIST %msubsup.qname;    
      %MATHML.Common.attrib;
      %att-subscriptshift;
      %att-superscriptshift;
>
<!ATTLIST %munder.qname;   
      %MATHML.Common.attrib;
      %att-accentunder;
>
<!ATTLIST %mover.qname;   
      %MATHML.Common.attrib;
      %att-accent;
>
<!ATTLIST %munderover.qname;   
      %MATHML.Common.attrib;
      %att-accent;
      %att-accentunder;
>
<!ATTLIST %mmultiscripts.qname;   
      %MATHML.Common.attrib;
      %att-subscriptshift;
      %att-superscriptshift;
>
<!-- Presentation layout schemata: empty elements for scripts -->
<!ENTITY % pscreschema              
     "%mprescripts.qname; | %none.qname;" >
<!ELEMENT %mprescripts.qname;  EMPTY >
<!ATTLIST %mprescripts.qname;   
      %MATHML.xmlns.attrib; >
<!ELEMENT %none.qname;  EMPTY >
<!ATTLIST %none.qname;    
      %MATHML.xmlns.attrib; >
<!-- Presentation layout schemata: tables -->
<![%MathMLstrict;[
<!-- in strict mode only allow mtable at top level.
     mtr ,mlabledtr and mtd only allowed inside mtable.
-->
  <!ENTITY % ptabschema    "%mtable.qname;" >
]]>
<!ENTITY % ptabschema               
     "%mtable.qname; | %mtr.qname; | %mlabeledtr.qname; | %mtd.qname;" >
<!ATTLIST %mtable.qname;
      %MATHML.Common.attrib;
      %att-tableinfo;
>
<!ATTLIST %mtr.qname;    
      %MATHML.Common.attrib;
      %att-rowalign;
      %att-columnalign-list;
      %att-groupalign-list;
>
<!ATTLIST %mlabeledtr.qname;  
      %MATHML.Common.attrib;
      %att-rowalign;
      %att-columnalign-list;
      %att-groupalign-list;
>
<!ATTLIST %mtd.qname;   
      %MATHML.Common.attrib;
      %att-rowalign;
      %att-columnalign;
      %att-groupalign-list;
      %att-rowspan;
      %att-columnspan;
>
<!ENTITY % plschema                 
     "%pgenschema; | %pscrschema; | %ptabschema;" >
<!-- Empty presentation layout schemata -->
<!ENTITY % peschema                 
     "%maligngroup.qname; | %malignmark.qname;" >
<!ELEMENT %malignmark.qname;  EMPTY >
<!ATTLIST %malignmark.qname;  
      %att-edge; >
<!ELEMENT %maligngroup.qname;  EMPTY >
<!ATTLIST %maligngroup.qname;  
      %MATHML.Common.attrib;
      %att-groupalign;
>
<!ELEMENT %mglyph.qname;  EMPTY >
<!ATTLIST %mglyph.qname;    
      %att-alt;
      %att-fontfamily;
      %att-index; >
<!-- Presentation action schemata -->
<!ENTITY % pactions                 
     "%maction.qname;" >
<!ATTLIST %maction.qname;    
      %MATHML.Common.attrib;
      %att-actiontype;
      %att-selection;
>
<!-- The following entity for substitution into
     content constructs excludes elements that
     are not valid as expressions.
-->
<!ENTITY % PresInCont               
     "%ptoken; | %petoken; |
      %plschema; | %peschema; | %pactions;" >
<!-- Presentation entity: all presentation constructs -->
<![%MathMLstrict;[
<!-- In strict mode don't allow prescripts and none at top level.-->
  <!ENTITY % Presentation "%PresInCont;">             
]]>
<!ENTITY % Presentation             
     "%ptoken; | %petoken; | %pscreschema; |
      %plschema; | %peschema; | %pactions;">
<!-- Content element set  ........................................ -->
<!-- Attribute definitions -->
<!ENTITY % att-base                 
     "base         CDATA                    '10'" >
<!ENTITY % att-closure              
     "closure      CDATA                    'closed'" >
<!ENTITY % att-definition           
     "definitionURL CDATA                   ''" >
<!ENTITY % att-encoding             
     "encoding     CDATA                    ''" >
<!ENTITY % att-nargs             
     "nargs        CDATA                    '1'" >
<!ENTITY % att-occurrence           
     "occurrence   CDATA                    'function-model'" >
<!ENTITY % att-order   
     "order        CDATA                    'numeric'" >
<!ENTITY % att-scope                
     "scope        CDATA                    'local'" >
<!ENTITY % att-type                 
     "type         CDATA                    #IMPLIED" >
<!-- Content elements: leaf nodes -->
<!ENTITY % ctoken               
     "%csymbol.qname; | %ci.qname; | %cn.qname;" >
<!ATTLIST %ci.qname;     
      %MATHML.Common.attrib;
      %att-type;
      %att-definition;
      %att-encoding;
>
<!ATTLIST %csymbol.qname;   
      %MATHML.Common.attrib;
      %att-encoding;
      %att-type;
      %att-definition;
>
<!ATTLIST %cn.qname;    
      %MATHML.Common.attrib;
      %att-type;
      %att-base;
      %att-definition;
      %att-encoding;
>
<!-- Content elements: specials -->
<!ENTITY % cspecial                 
     "%apply.qname; | %reln.qname; |
      %lambda.qname;" >
<!ATTLIST %apply.qname;   
      %MATHML.Common.attrib;
>
<!ATTLIST %reln.qname;   
      %MATHML.Common.attrib;
>
<!ATTLIST %lambda.qname;      
      %MATHML.Common.attrib;
>
<!-- Content elements: others -->
<!ENTITY % cother                   
     "%condition.qname; | %declare.qname; | %sep.qname;" >
<!ATTLIST %condition.qname;     
      %MATHML.Common.attrib;
>
<!ATTLIST %declare.qname;    
      %MATHML.Common.attrib;
      %att-type;
      %att-scope;
      %att-nargs;
      %att-occurrence;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %sep.qname;  EMPTY >
<!ATTLIST %sep.qname;         
      %MATHML.xmlns.attrib; >
<!-- Content elements: semantic mapping -->
<![%MathMLstrict;[
<!-- in strict mode only allow semantics at top level.
     annotation and annotation-xml only allowed in semantics
-->
  <!ENTITY % csemantics  "%semantics.qname;" >
]]>
<!ENTITY % csemantics               
     "%semantics.qname; | %annotation.qname; |
      %annotation-xml.qname;" >
<!ATTLIST %semantics.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ATTLIST %annotation.qname;  
      %MATHML.Common.attrib;
      %att-encoding;
>
<!ATTLIST %annotation-xml.qname; 
      %MATHML.Common.attrib;
      %att-encoding;
>
<!-- Content elements: constructors -->
<!ENTITY % cconstructor             
     "%interval.qname; | %list.qname; | %matrix.qname; 
      | %matrixrow.qname; | %set.qname; | %vector.qname;
      | %piecewise.qname; " >
<!ATTLIST %interval.qname;   
      %MATHML.Common.attrib;
      %att-closure;
>
<!ATTLIST %set.qname;        
      %MATHML.Common.attrib;
      %att-type;
>
<!ATTLIST %list.qname;          
      %MATHML.Common.attrib;
      %att-order;
>
<!ATTLIST %vector.qname;    
      %MATHML.Common.attrib;
>
<!ATTLIST %matrix.qname;    
      %MATHML.Common.attrib;
>
<!ATTLIST %matrixrow.qname;     
      %MATHML.Common.attrib;
>
<!ATTLIST %piecewise.qname;   
      %MATHML.Common.attrib;
>
<!ATTLIST %piece.qname;   
      %MATHML.Common.attrib;
>
<!ATTLIST %otherwise.qname;   
      %MATHML.Common.attrib;
>
<!-- Content elements: symbols -->
<!ENTITY % c0ary              
    "%integers.qname; |
     %reals.qname; |
     %rationals.qname; |
     %naturalnumbers.qname; |
     %complexes.qname; |
     %primes.qname; |
     %exponentiale.qname; |
     %imaginaryi.qname; |
     %notanumber.qname; |
     %true.qname; |
     %false.qname; |
     %emptyset.qname; |
     %pi.qname; |
     %eulergamma.qname; |
     %infinity.qname;" >
<!ELEMENT %integers.qname;  EMPTY >
<!ATTLIST %integers.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %reals.qname;  EMPTY >
<!ATTLIST %reals.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %rationals.qname;  EMPTY >
<!ATTLIST %rationals.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %naturalnumbers.qname;  EMPTY >
<!ATTLIST %naturalnumbers.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %complexes.qname;  EMPTY >
<!ATTLIST %complexes.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %primes.qname;  EMPTY >
<!ATTLIST %primes.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %exponentiale.qname;  EMPTY >
<!ATTLIST %exponentiale.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %imaginaryi.qname;  EMPTY >
<!ATTLIST %imaginaryi.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %notanumber.qname;  EMPTY >
<!ATTLIST %notanumber.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %true.qname;  EMPTY >
<!ATTLIST %true.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %false.qname;  EMPTY >
<!ATTLIST %false.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %emptyset.qname;  EMPTY >
<!ATTLIST %emptyset.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %pi.qname;  EMPTY >
<!ATTLIST %pi.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %eulergamma.qname;  EMPTY >
<!ATTLIST %eulergamma.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %infinity.qname;  EMPTY >
<!ATTLIST %infinity.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!-- Content elements: operators -->
<!ENTITY % cfuncop1ary              
     "%inverse.qname; | %ident.qname;|
      %domain.qname; |  %codomain.qname; | 
      %image.qname;  " >
<!ELEMENT %inverse.qname;  EMPTY >
<!ATTLIST %inverse.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %domain.qname;  EMPTY >
<!ATTLIST %domain.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %codomain.qname;  EMPTY >
<!ATTLIST %codomain.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %image.qname;  EMPTY >
<!ATTLIST %image.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % cfuncopnary              
     "%fn.qname; | %compose.qname;" >
<!ATTLIST %fn.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %ident.qname;  EMPTY >
<!ATTLIST %ident.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %compose.qname;  EMPTY >
<!ATTLIST %compose.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % carithop1ary             
     "%abs.qname; | %conjugate.qname; | %exp.qname; | %factorial.qname; |
      %arg.qname; | %real.qname; | %imaginary.qname; |
      %floor.qname; | %ceiling.qname;" >
<!ELEMENT %exp.qname;  EMPTY >
<!ATTLIST %exp.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %abs.qname;  EMPTY >
<!ATTLIST %abs.qname;        
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arg.qname;  EMPTY >
<!ATTLIST %arg.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %real.qname;  EMPTY >
<!ATTLIST %real.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %imaginary.qname;  EMPTY >
<!ATTLIST %imaginary.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %conjugate.qname;  EMPTY >
<!ATTLIST %conjugate.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %factorial.qname;  EMPTY >
<!ATTLIST %factorial.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %floor.qname;  EMPTY >
<!ATTLIST %floor.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %ceiling.qname;  EMPTY >
<!ATTLIST %ceiling.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % carithop1or2ary          
     "%minus.qname;" >
<!ELEMENT %minus.qname;  EMPTY >
<!ATTLIST %minus.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % carithop2ary             
     "%quotient.qname; | %divide.qname; | %power.qname; | %rem.qname;" >
<!ELEMENT %quotient.qname;  EMPTY >
<!ATTLIST %quotient.qname;       
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %divide.qname;  EMPTY >
<!ATTLIST %divide.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %power.qname;  EMPTY >
<!ATTLIST %power.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %rem.qname;  EMPTY >
<!ATTLIST %rem.qname;       
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % carithopnary             
     "%plus.qname; | %times.qname; | %max.qname; 
      | %min.qname; | %gcd.qname; | %lcm.qname;" >
<!ELEMENT %plus.qname;  EMPTY >
<!ATTLIST %plus.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %max.qname;  EMPTY >
<!ATTLIST %max.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %min.qname;  EMPTY >
<!ATTLIST %min.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %times.qname;  EMPTY >
<!ATTLIST %times.qname;      
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %gcd.qname;  EMPTY >
<!ATTLIST %gcd.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %lcm.qname;  EMPTY >
<!ATTLIST %lcm.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % carithoproot             
     "%root.qname;" >
<!ELEMENT %root.qname;  EMPTY >
<!ATTLIST %root.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % clogicopquant            
     "%exists.qname; | %forall.qname;" >
<!ELEMENT %exists.qname;  EMPTY >
<!ATTLIST %exists.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %forall.qname;  EMPTY >
<!ATTLIST %forall.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % clogicopnary             
     "%and.qname; | %or.qname; | %xor.qname;" >
<!ELEMENT %and.qname;  EMPTY >
<!ATTLIST %and.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %or.qname;  EMPTY >
<!ATTLIST %or.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %xor.qname;  EMPTY >
<!ATTLIST %xor.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % clogicop1ary             
     "%not.qname;" >
<!ELEMENT %not.qname;  EMPTY >
<!ATTLIST %not.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % clogicop2ary             
     "%implies.qname;" >
<!ELEMENT %implies.qname;  EMPTY >
<!ATTLIST %implies.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % ccalcop                  
     "%log.qname; | %int.qname; | %diff.qname; | %partialdiff.qname; |
      %divergence.qname; | %grad.qname; | %curl.qname; | %laplacian.qname;" >
<!ELEMENT %divergence.qname;  EMPTY >
<!ATTLIST %divergence.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %grad.qname;  EMPTY >
<!ATTLIST %grad.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %curl.qname;  EMPTY >
<!ATTLIST %curl.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %laplacian.qname;  EMPTY >
<!ATTLIST %laplacian.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %log.qname;  EMPTY >
<!ATTLIST %log.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %int.qname;  EMPTY >
<!ATTLIST %int.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %diff.qname;  EMPTY >
<!ATTLIST %diff.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %partialdiff.qname;  EMPTY >
<!ATTLIST %partialdiff.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % ccalcop1ary              
     "%ln.qname;" >
<!ELEMENT %ln.qname;  EMPTY >
<!ATTLIST %ln.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % csetop1ary               
     "%card.qname;" >
<!ELEMENT %card.qname;  EMPTY >
<!ATTLIST %card.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % csetop2ary               
     "%setdiff.qname;" >
<!ELEMENT %setdiff.qname;  EMPTY >
<!ATTLIST %setdiff.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % csetopnary               
     "%union.qname; | %intersect.qname; | %cartesianproduct.qname; " >
<!ELEMENT %union.qname;  EMPTY >
<!ATTLIST %union.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %intersect.qname;  EMPTY >
<!ATTLIST %intersect.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %cartesianproduct.qname;  EMPTY >
<!ATTLIST %cartesianproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % cseqop                   
     "%sum.qname; | %product.qname; | %limit.qname;" >
<!ELEMENT %sum.qname;  EMPTY >
<!ATTLIST %sum.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %product.qname;  EMPTY >
<!ATTLIST %product.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %limit.qname;  EMPTY >
<!ATTLIST %limit.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % ctrigop                  
     "%sin.qname; | %cos.qname; | %tan.qname; 
      | %sec.qname; | %csc.qname; | %cot.qname; 
      | %sinh.qname; | %cosh.qname; | %tanh.qname; 
      | %sech.qname; | %csch.qname; | %coth.qname; 
      | %arcsin.qname; | %arccos.qname; | %arctan.qname;
      | %arccosh.qname; | %arccot.qname; | %arccoth.qname;
      | %arccsc.qname; | %arccsch.qname; | %arcsec.qname;
      | %arcsech.qname; | %arcsinh.qname; | %arctanh.qname;
      " >
<!ELEMENT %sin.qname;  EMPTY >
<!ATTLIST %sin.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %cos.qname;  EMPTY >
<!ATTLIST %cos.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %tan.qname;  EMPTY >
<!ATTLIST %tan.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %sec.qname;  EMPTY >
<!ATTLIST %sec.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %csc.qname;  EMPTY >
<!ATTLIST %csc.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %cot.qname;  EMPTY >
<!ATTLIST %cot.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %sinh.qname;  EMPTY >
<!ATTLIST %sinh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %cosh.qname;  EMPTY >
<!ATTLIST %cosh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %tanh.qname;  EMPTY >
<!ATTLIST %tanh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %sech.qname;  EMPTY >
<!ATTLIST %sech.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %csch.qname;  EMPTY >
<!ATTLIST %csch.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %coth.qname;  EMPTY >
<!ATTLIST %coth.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arcsin.qname;  EMPTY >
<!ATTLIST %arcsin.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arccos.qname;  EMPTY >
<!ATTLIST %arccos.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arctan.qname;  EMPTY >
<!ATTLIST %arctan.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arccosh.qname;  EMPTY >
<!ATTLIST %arccosh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arccot.qname;  EMPTY >
<!ATTLIST %arccot.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arccoth.qname;  EMPTY >
<!ATTLIST %arccoth.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arccsc.qname;  EMPTY >
<!ATTLIST %arccsc.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arccsch.qname;  EMPTY >
<!ATTLIST %arccsch.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arcsec.qname;  EMPTY >
<!ATTLIST %arcsec.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arcsech.qname;  EMPTY >
<!ATTLIST %arcsech.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arcsinh.qname;  EMPTY >
<!ATTLIST %arcsinh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %arctanh.qname;  EMPTY >
<!ATTLIST %arctanh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % cstatopnary              
     "%mean.qname; | %sdev.qname; |
      %variance.qname; | %median.qname; |
      %mode.qname;" >
<!ELEMENT %mean.qname;  EMPTY >
<!ATTLIST %mean.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %sdev.qname;  EMPTY >
<!ATTLIST %sdev.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %variance.qname;  EMPTY >
<!ATTLIST %variance.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %median.qname;  EMPTY >
<!ATTLIST %median.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %mode.qname;  EMPTY >
<!ATTLIST %mode.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % cstatopmoment            
     "%moment.qname;" >
<!ELEMENT %moment.qname;  EMPTY >
<!ATTLIST %moment.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % clalgop1ary              
     "%determinant.qname; |
      %transpose.qname;" >
<!ELEMENT %determinant.qname;  EMPTY >
<!ATTLIST %determinant.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %transpose.qname;  EMPTY >
<!ATTLIST %transpose.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % clalgop2ary              
     "%vectorproduct.qname; 
      | %scalarproduct.qname; 
      | %outerproduct.qname;" >
<!ELEMENT %vectorproduct.qname;  EMPTY >
<!ATTLIST %vectorproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %scalarproduct.qname;  EMPTY >
<!ATTLIST %scalarproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %outerproduct.qname;  EMPTY >
<!ATTLIST %outerproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % clalgopnary              
     "%selector.qname;" >
<!ELEMENT %selector.qname;  EMPTY >
<!ATTLIST %selector.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!-- Content elements: relations -->
<!ENTITY % cgenrel2ary             
     "%neq.qname; | %factorof.qname;" >
<!ELEMENT %neq.qname;  EMPTY >
<!ATTLIST %neq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %factorof.qname;  EMPTY >
<!ATTLIST %factorof.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % cgenrelnary              
     "%eq.qname; | %leq.qname; | %lt.qname; | %geq.qname; 
      | %gt.qname;| %equivalent.qname; | %approx.qname;" >
<!ELEMENT %eq.qname;  EMPTY >
<!ATTLIST %eq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %equivalent.qname;  EMPTY >
<!ATTLIST %equivalent.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %approx.qname;  EMPTY >
<!ATTLIST %approx.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %gt.qname;  EMPTY >
<!ATTLIST %gt.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %lt.qname;  EMPTY >
<!ATTLIST %lt.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %geq.qname;  EMPTY >
<!ATTLIST %geq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %leq.qname;  EMPTY >
<!ATTLIST %leq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % csetrel2ary              
     "%in.qname; | %notin.qname; | %notsubset.qname; | %notprsubset.qname;" >
<!ELEMENT %in.qname;  EMPTY >
<!ATTLIST %in.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %notin.qname;  EMPTY >
<!ATTLIST %notin.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %notsubset.qname;  EMPTY >
<!ATTLIST %notsubset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %notprsubset.qname;  EMPTY >
<!ATTLIST %notprsubset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % csetrelnary       
     "%subset.qname; | %prsubset.qname;" >
<!ELEMENT %subset.qname;  EMPTY >
<!ATTLIST %subset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ELEMENT %prsubset.qname;  EMPTY >
<!ATTLIST %prsubset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % cseqrel2ary              
     "%tendsto.qname;" >
<!ELEMENT %tendsto.qname;  EMPTY >
<!ATTLIST %tendsto.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
      %att-type;
>
<!-- Content elements: quantifiers -->
<!ENTITY % cquantifier            
     "%lowlimit.qname; | %uplimit.qname; | %bvar.qname; 
      | %degree.qname; | %logbase.qname;
      | %momentabout.qname; | %domainofapplication.qname; " >
<!ATTLIST %lowlimit.qname;
      %MATHML.Common.attrib;
>
<!ATTLIST %uplimit.qname;
      %MATHML.Common.attrib;
>
<!ATTLIST %bvar.qname;
      %MATHML.Common.attrib;
>
<!ATTLIST %degree.qname;
      %MATHML.Common.attrib;
>
<!ATTLIST %logbase.qname;
      %MATHML.Common.attrib;
>
<!ATTLIST %momentabout.qname;
      %MATHML.Common.attrib;
>
<!ATTLIST %domainofapplication.qname;
      %MATHML.Common.attrib;
>
<!-- Operator groups -->
<!ENTITY % cop1ary                  
     "%cfuncop1ary; | %carithop1ary; | %clogicop1ary; |
      %ccalcop1ary; | %ctrigop; | %clalgop1ary; |
      %csetop1ary;" >
<!ENTITY % cop2ary                  
     "%carithop2ary; | %clogicop2ary;| %clalgop2ary; | %csetop2ary;" >
<!ENTITY % copnary                  
     "%cfuncopnary; | %carithopnary; | %clogicopnary; |
      %csetopnary; | %cstatopnary; | %clalgopnary;" >
<!ENTITY % copmisc                  
     "%carithoproot; | %carithop1or2ary; | %ccalcop; |
      %cseqop; | %cstatopmoment; | %clogicopquant;" >
<!-- Relation groups -->
<!ENTITY % crel2ary                 
     "%cgenrel2ary; | %csetrel2ary; | %cseqrel2ary;" >
<!ENTITY % crelnary                 
     "%cgenrelnary; | %csetrelnary;" >
<!-- Content constructs: all -->
<!ENTITY % Content                  
     "%ctoken; | %cspecial; | %cother; | %csemantics; | %c0ary;
      | %cconstructor; | %cquantifier; | %cop1ary; | %cop2ary; 
      | %copnary; |%copmisc; | %crel2ary; | %crelnary;" >
<!-- Content constructs for substitution in presentation structures -->
<!ENTITY % ContInPres               
     "%ci.qname; |%csymbol.qname;| %cn.qname; | %c0ary; |
      %apply.qname; | %fn.qname; |
      %lambda.qname; | %reln.qname; |
      %cconstructor; |
      %semantics.qname; |%declare.qname;" >
<!-- ............................................................. -->
<!-- Recursive definition for content of expressions. Include
     presentation constructs at lowest level so presentation
     layout schemata hold presentation or content elements.
     Include content constructs at lowest level so content
     elements hold PCDATA or presentation elements at leaf
     level (for permitted substitutable elements in context)
-->
<![%MathMLstrict;[
<!-- in strict mode don't allow presentation in content
     except where allowed by chapter 5:
     ci, cn, csymbol, semantics
-->
  <!ENTITY % ContentExpression  "(%Content;)*" >
  <!ENTITY % semanticsContentExpression        
       "(%Content; | %PresInCont; |
         %annotation.qname; | %annotation-xml.qname;)*" >
]]>
<!ENTITY % ContentExpression        
     "(%Content; | %PresInCont;)*" >
<!ENTITY % semanticsContentExpression    "%ContentExpression;">    
<!ENTITY % PresExpression      
     "(%Presentation; | %ContInPres;)*" >
<!ENTITY % MathExpression           
     "(%PresInCont; | %ContInPres;)*" >
<!-- PCDATA or MathML character elements -->
<!ENTITY % MathMLCharacters         
     "#PCDATA | %mglyph.qname; " >
<!-- Content elements: tokens                       -->
<!-- (may contain embedded presentation constructs) -->
<!ELEMENT %ci.qname;                 (%MathMLCharacters; | %PresInCont;)* >
<!ELEMENT %csymbol.qname;            (%MathMLCharacters; | %PresInCont;)* >
<!ELEMENT %cn.qname;                 (%MathMLCharacters; | %sep.qname; | %PresInCont;)* >
<!-- Content elements: special -->
<!ELEMENT %apply.qname;              (%ContentExpression;) >
<!ELEMENT %reln.qname;               (%ContentExpression;) >
<!ELEMENT %lambda.qname;             (%ContentExpression;) >
<!-- Content elements: other -->
<!ELEMENT %condition.qname;          (%ContentExpression;) >
<!ELEMENT %declare.qname;            (%ContentExpression;) >
<!-- Content elements: semantics -->
<!ELEMENT %semantics.qname;          (%semanticsContentExpression;) >
<!ENTITY % Annotation.content  "( #PCDATA )" >
<!ELEMENT %annotation.qname;         %Annotation.content; >
<!ENTITY % Annotation-xml.content "ANY" >
<!ELEMENT %annotation-xml.qname;     %Annotation-xml.content; >
<!-- Content elements: constructors -->
<!ELEMENT %interval.qname;           (%ContentExpression;) >
<!ELEMENT %set.qname;                (%ContentExpression;) >
<!ELEMENT %list.qname;               (%ContentExpression;) >
<!ELEMENT %vector.qname;             (%ContentExpression;) >
<!ELEMENT %matrix.qname;             (%ContentExpression;) >
<!ELEMENT %matrixrow.qname;          (%ContentExpression;) >
<!ELEMENT %piecewise.qname;          ((%piece.qname;)*, (%otherwise.qname;)? ) >
<!ELEMENT %piece.qname;              (%ContentExpression;) >
<!ELEMENT %otherwise.qname;          (%ContentExpression;) >
<!-- Content elements: operator (user-defined) -->
<!ELEMENT %fn.qname;                 (%ContentExpression;) >
<!-- Content elements: quantifiers -->
<!ELEMENT %lowlimit.qname;           (%ContentExpression;) >
<!ELEMENT %uplimit.qname;            (%ContentExpression;) >
<!ELEMENT %bvar.qname;               (%ContentExpression;) >
<!ELEMENT %degree.qname;             (%ContentExpression;) >
<!ELEMENT %logbase.qname;            (%ContentExpression;) >
<!ELEMENT %momentabout.qname;        (%ContentExpression;) >
<!ELEMENT %domainofapplication.qname; (%ContentExpression;) >
<!-- ............................................................. -->
<!-- Presentation layout schemata contain tokens,
     layout and content schemata.
-->
<![%MathMLstrict;[
<!-- In strict mode enforce mfrac has exactly two children
      same for msub etc -->
  <!ENTITY % onePresExpression
       "(%Presentation; | %ContInPres;)" >
  <!ENTITY % twoPresExpression
       "(%onePresExpression;,%onePresExpression;)" >
  <!ENTITY % threePresExpression
       "(%onePresExpression;,%onePresExpression;,%onePresExpression;)" >
  <!ENTITY % mtrPresExpression
       "(%mtr.qname;|%mlabeledtr.qname;)*" >
  <!ENTITY % mtdPresExpression
       "(%mtd.qname;)*" >
  <!ENTITY % prscrPresExpression " (%onePresExpression;,
  ((%onePresExpression;|%none.qname;),(%onePresExpression;|%none.qname;))*,
  (%mprescripts.qname;,
  ((%onePresExpression;|%none.qname;),(%onePresExpression;|%none.qname;))*)?
  )">
]]>
<!-- By default keep them as they were in MathML 2.0  -->
<!ENTITY % onePresExpression   "%PresExpression;">
<!ENTITY % twoPresExpression   "%PresExpression;">
<!ENTITY % threePresExpression "%PresExpression;">
<!ENTITY % mtrPresExpression   "%PresExpression;">
<!ENTITY % mtdPresExpression   "%PresExpression;">
<!ENTITY % prscrPresExpression "%PresExpression;">
<!ELEMENT %mstyle.qname;             (%PresExpression;) >
<!ELEMENT %merror.qname;             (%PresExpression;) >
<!ELEMENT %mphantom.qname;           (%PresExpression;) >
<!ELEMENT %mrow.qname;               (%PresExpression;) >
<!ELEMENT %mfrac.qname;              (%twoPresExpression;) >
<!ELEMENT %msqrt.qname;              (%PresExpression;) >
<!ELEMENT %menclose.qname;           (%PresExpression;) >
<!ELEMENT %mroot.qname;              (%twoPresExpression;) >
<!ELEMENT %msub.qname;               (%twoPresExpression;) >
<!ELEMENT %msup.qname;               (%twoPresExpression;) >
<!ELEMENT %msubsup.qname;            (%threePresExpression;) >
<!ELEMENT %mmultiscripts.qname;      (%prscrPresExpression;) >
<!ELEMENT %munder.qname;             (%twoPresExpression;) >
<!ELEMENT %mover.qname;              (%twoPresExpression;) >
<!ELEMENT %munderover.qname;         (%threePresExpression;) >
<!ELEMENT %mtable.qname;             (%mtrPresExpression;) >
<!ELEMENT %mtr.qname;                (%mtdPresExpression;) >
<!ELEMENT %mlabeledtr.qname;         (%mtdPresExpression;) >
<!ELEMENT %mtd.qname;                (%PresExpression;) >
<!ELEMENT %maction.qname;            (%PresExpression;) >
<!ELEMENT %mfenced.qname;            (%PresExpression;) >
<!ELEMENT %mpadded.qname;            (%PresExpression;) >
<!-- Presentation elements contain PCDATA or malignmark constructs. -->
<!ELEMENT %mi.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %mn.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %mo.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %mtext.qname;              (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %ms.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >
<!-- Browser interface definition  ............................... -->
<!-- Attributes for top-level element "math" -->
<!ENTITY % att-macros               
     "macros       CDATA                    #IMPLIED" >
<!ENTITY % att-mode                 
     "mode         CDATA                    #IMPLIED" >
<![%MathMLstrict;[
  <!ENTITY % att-display
     "display      ( block | inline )                    'inline'" >
]]>
<!ENTITY % att-display                
     "display      CDATA                    #IMPLIED" >
<!ENTITY % att-schemalocation               
     "%Schema.prefix;:schemaLocation CDATA  #IMPLIED">
<!ENTITY % att-topinfo          
     "%MATHML.Common.attrib;
      %att-schemalocation;
      %att-macros;
      %att-mode;
      %att-display;" >
<!-- Attributes for browser interface element -->
<!ENTITY % att-baseline             
     "baseline     CDATA                    #IMPLIED" >
<!ENTITY % att-overflow            
     "overflow  ( scroll | elide | truncate | scale ) 'scroll'" >
<!ENTITY % att-altimg               
     "altimg       CDATA                    #IMPLIED" >
<!ENTITY % att-alttext           
     "alttext      CDATA                    #IMPLIED" >
<!ENTITY % att-browif           
     "%att-type;
      %att-name;
      %att-height;
      %att-width;
      %att-baseline;
      %att-overflow;
      %att-altimg;
      %att-alttext;" >
<!-- ............................................................. -->
<!-- The top-level element "math" contains MathML encoded
     mathematics. The "math" element has the browser info
     attributes iff it is also the browser interface element.
-->
<!ELEMENT %math.qname;               (%MathExpression;) >
<!ATTLIST %math.qname;
      %att-topinfo;
      %att-browif; >
<!-- MathML Character Entities .............................................. -->
<!ENTITY % mathml-charent.module "INCLUDE" >
<![%mathml-charent.module;[
<!-- Entity sets from ISO Technical Report 9573-13 ..... -->
<!ENTITY % ent-isoamsa
      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Arrow Relations for MathML 2.0//EN"
             "iso9573-13/isoamsa.ent" >
%ent-isoamsa;
<!ENTITY % ent-isoamsb
      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Binary Operators for MathML 2.0//EN"
             "iso9573-13/isoamsb.ent" >
%ent-isoamsb;
<!ENTITY % ent-isoamsc
      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Delimiters for MathML 2.0//EN"
             "iso9573-13/isoamsc.ent" >
%ent-isoamsc;
<!ENTITY % ent-isoamsn
      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Negated Relations for MathML 2.0//EN"
             "iso9573-13/isoamsn.ent" >
%ent-isoamsn;
<!ENTITY % ent-isoamso
      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Ordinary for MathML 2.0//EN"
             "iso9573-13/isoamso.ent" >
%ent-isoamso;
<!ENTITY % ent-isoamsr
      PUBLIC "-//W3C//ENTITIES Added Math Symbols: Relations for MathML 2.0//EN"
             "iso9573-13/isoamsr.ent" >
%ent-isoamsr;
<!ENTITY % ent-isogrk3
      PUBLIC "-//W3C//ENTITIES Greek Symbols for MathML 2.0//EN"
             "iso9573-13/isogrk3.ent" >
%ent-isogrk3;
<!ENTITY % ent-isomfrk
      PUBLIC "-//W3C//ENTITIES Math Alphabets: Fraktur for MathML 2.0//EN"
             "iso9573-13/isomfrk.ent" >
%ent-isomfrk;
<!ENTITY % ent-isomopf
      PUBLIC "-//W3C//ENTITIES Math Alphabets: Open Face for MathML 2.0//EN"
             "iso9573-13/isomopf.ent" >
%ent-isomopf;
<!ENTITY % ent-isomscr
      PUBLIC "-//W3C//ENTITIES Math Alphabets: Script for MathML 2.0//EN"
             "iso9573-13/isomscr.ent" >
%ent-isomscr;
<!ENTITY % ent-isotech
      PUBLIC "-//W3C//ENTITIES General Technical for MathML 2.0//EN"
             "iso9573-13/isotech.ent" >
%ent-isotech;
<!-- Entity sets from informative annex to ISO 8879:1986 (SGML) ....... -->
<!ENTITY % ent-isobox
      PUBLIC "-//W3C//ENTITIES Box and Line Drawing for MathML 2.0//EN"
             "iso8879/isobox.ent" >
%ent-isobox;
<!ENTITY % ent-isocyr1
      PUBLIC "-//W3C//ENTITIES Russian Cyrillic for MathML 2.0//EN"
             "iso8879/isocyr1.ent" >
%ent-isocyr1;
<!ENTITY % ent-isocyr2
      PUBLIC "-//W3C//ENTITIES Non-Russian Cyrillic for MathML 2.0//EN"
             "iso8879/isocyr2.ent" >
%ent-isocyr2;
<!ENTITY % ent-isodia
      PUBLIC "-//W3C//ENTITIES Diacritical Marks for MathML 2.0//EN"
             "iso8879/isodia.ent" >
%ent-isodia;
<!ENTITY % ent-isolat1
      PUBLIC "-//W3C//ENTITIES Added Latin 1 for MathML 2.0//EN"
             "iso8879/isolat1.ent" >
%ent-isolat1;
<!ENTITY % ent-isolat2
      PUBLIC "-//W3C//ENTITIES Added Latin 2 for MathML 2.0//EN"
             "iso8879/isolat2.ent" >
%ent-isolat2;
<!ENTITY % ent-isonum
      PUBLIC "-//W3C//ENTITIES Numeric and Special Graphic for MathML 2.0//EN"
             "iso8879/isonum.ent" >
%ent-isonum;
<!ENTITY % ent-isopub
      PUBLIC "-//W3C//ENTITIES Publishing for MathML 2.0//EN"
             "iso8879/isopub.ent" >
%ent-isopub;
<!-- New characters defined by MathML ............................ -->
<!ENTITY % ent-mmlextra
      PUBLIC "-//W3C//ENTITIES Extra for MathML 2.0//EN"
             "mathml/mmlextra.ent" >
%ent-mmlextra;
<!-- MathML aliases for characters defined above ................. -->
<!ENTITY % ent-mmlalias
      PUBLIC "-//W3C//ENTITIES Aliases for MathML 2.0//EN"
             "mathml/mmlalias.ent" >
%ent-mmlalias;
<!-- end of MathML Character Entity section -->]]>
<!-- Revision History:
       Initial draft (syntax = XML) 1997-05-09
          Stephen Buswell
       Revised 1997-05-14
          Robert Miner
       Revised 1997-06-29 and 1997-07-02
          Stephen Buswell
       Revised 1997-12-15
          Stephen Buswell
       Revised 1998-02-08
          Stephen Buswell
       Revised 1998-04-04
          Stephen Buswell
       Entities and small revisions 1999-02-21
          David Carlisle
       Added attribute definitionURL to ci and cn 1999-10-11
          Nico Poppelier
       Additions for MathML 2  1999-12-16
          David Carlisle
       Namespace support 2000-01-14
          David Carlisle
       XHTML Compatibility 2000-02-23
          Murray Altheim
       New content elements 2000-03-26
          David Carlisle
       Further revisions for MathML2 CR draft 2000-07-11
          David Carlisle
       Further revisions for MathML2 CR draft 2000-10-31
          David Carlisle
       Revisions for Unicode 3.2  2002-05-21
          David Carlisle
       Add width and side attributes to mtable (to align with the specification)  2002-06-05
          David Carlisle
       Use %XLINK.prefix rather than hardwired xlink:, add xlink:type 2002-06-12
          David Carlisle
       Add missing numalign and denomalign attributes for mfrac 2002-07-05
          David Carlisle
       Add MathMLstrict entity and related extra constraints 2002-12-05
          David Carlisle
       Add support for xi:schemaLocation 2003-04-05
          David Carlisle
       Removed actiontype from mstyle (to match spec) 2003-04-07
          David Carlisle
       Additional constraints for MathMLstrict code (From Simon
       Pepping on www-math list) 2003-05-22
          David Carlisle
       Add missing minlabelspacing attribute (From Simon
       Pepping on www-math list) 2003-05-22
          David Carlisle
       Add missing height and depth attributes to mstyle (From Simon
       Pepping on www-math list) 2003-06-30
          David Carlisle
-->
<!-- end of MathML 2.0 DTD  ................................................ -->
<!-- ....................................................................... -->
MathML fragments can be validated using the XML Schema for MathML,
               located at http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd. The
               provided schema allows checking a MathML fragment in a stricter way
               than by performing DTD validation, in particular constrained attribute
               values such as linethickness are enforced by
               the schema. Additionally, XML Schemas have the advantage over DTDs of
               supporting the XML namespaces mechanism.  Thus a MathML fragment can
               declare any namespace prefix (and possibly more than one), without the
               requirement that the author indicate it using a parameter entity, as
               described above.
            
In its current version the schema does not declare deprecated
               markup such as the fn element, so documents using such
               deprecated features will be declared invalid.
            
Similarly to the DOCTYPE Declaration used in documents, it is possible to link a MathML fragment to the XML Schema, as shown below.
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.w3.org/1998/Math/MathML
            http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd">
...
</mml:math>The xsi:schemaLocation attribute belongs to the XML Schema
                  instance namespace, defined in [XMLSchemas].  The value
                  of the attribute is a pair of URIs: the first is the MathML namespace
                  URI and the second is the location of the schema for that
                  namespace. The second URI may be changed to that of a local copy if
                  required.
               
As the XML Schema specification indicates, the use of the
                  schemaLocation attribute is only a hint for schema
                  processors: validation by a MathML-aware processor can be performed
                  without requiring that the schemaLocation attribute be
                  declared in the instance. Moreover, a processor can even ignore or
                  override the specified schema URI, if it is directed to.
               
Note that the file mathml.xsd at the URI given above
                  is only the main body of the schema, and is one of many files that
                  constitute the MathML XML Schema. However the complete set of files is
                  available as a gzipped tar archive
                  for local use.
               
Although validating a MathML fragment with the XML Schema provided
                  performs more checks regarding the structure of the fragment than the
                  DTD, DTD processing is still necessary if the MathML markup contains
                  entity references for characters and symbols, as XML Schema does not
                  provide a mechanism for expanding named entities.  Therefore the
                  MathML DOCTYPE declaration must still be present if one wishes to use
                  entities for mathematical symbols, such as
                  ⅆ. An example of a MathML document
                  linking to both the MathML DTD and the XML Schema is shown below.
               
<!DOCTYPE mml:math 
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" [
    <!ENTITY % MATHML.prefixed "INCLUDE">
    <!ENTITY % MATHML.prefix "mml">
]>
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1998/Math/MathML
            http://www.w3.org/Math/XMLSchema/mathml2/mathml2.xsd">
...
    <mml:mo> ⅆ </mml:mo>
...
</mml:math>The use of character references to represent characters and
                  symbols, such as ⅆ (which is equivalent
                  to ⅆ) does not necessitate the use of a
                  DOCTYPE declaration.