A Parsing MathML

Mathematical Markup Language (MathML) Version 2.0
8 Document Object Model for MathML
A Parsing MathML
A.1 The MathML DTD
B Operator Dictionary

MathML documents should be validated using the XML DTD below. Note in particular that the xml attribute xml:space is not used, so whitespace characters in element content (that is, outside the presentation token elements mi, mo, mn, mtext, mspace, mtext, ms, the content token elements ci, cn and annotation) are not significant.

If the MathML is parsed without a DTD, in other words as a well-formed XML fragment, it is the responsibility of the processing application to treat these whitespace characters as not significant.

An SGML parser (such as nsgmls) can be used to validate MathML. In this case an SGML declaration defining the constraints of XML applicable to an SGML parser must be used. See the note on SGML and XML.

A.1 The MathML DTD

A zip file of the full DTD including entity declarations is provided for reference. Here we give the main body of the DTD, without including the entity declarations. See chapter 6 [Entities, Characters and Fonts] for a list of entity names ordered by name or by Unicode value.

<!-- ************************************************************************ -->
<!-- Content model definition for content, presentation                       -->
<!-- and browser interface elements of MathML                                 -->
<!--                                                                          -->
<!-- $Id: appendixa.html,v 1.1 1999/12/22 21:48:41 ijacobs Exp $                 -->
<!--                                                                          -->
<!-- Initial draft (syntax = XML) 1997-05-09                                  -->
<!--   Stephen Buswell                                                        -->
<!-- Revised 1997-05-14  by Robert Miner                                      -->
<!--   Robert Miner                                                           -->
<!-- Revised 1997-06-29 and 1997-07-02                                        -->
<!--   Stephen Buswell                                                        -->
<!-- Revised 1997-12-15d                                                      -->
<!--   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                                                         -->
<!--                                                                          -->
<!-- Became W3C Recommendation 7 April 1998                                   -->
<!-- ************************************************************************ -->

<!-- ************************************************************************ -->
<!-- Attributes shared by all elements                                        -->
<!-- ************************************************************************ -->

<!ENTITY  % att-global               'xmlns CDATA #IMPLIED
                                      xmlns:xlink CDATA #IMPLIED
                                      xlink:href 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' >
          
<!ENTITY  % att-fontinfo             '%att-fontsize;
                                      %att-fontweight;
                                      %att-fontstyle;
                                      %att-fontfamily;
                                      %att-color;' >
          
<!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-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-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' >
<!ENTITY  % att-rowalign             'rowalign CDATA #IMPLIED' >
<!ENTITY  % att-columnalign          'columnalign CDATA #IMPLIED' >
<!ENTITY  % att-columnwidth          'columnwidth CDATA #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-framespacing         'framespacing CDATA #IMPLIED' >
<!ENTITY  % att-equalrows            'equalrows CDATA #IMPLIED' >
<!ENTITY  % att-equalcolumns         'equalcolumns CDATA #IMPLIED' >

<!ENTITY  % att-tableinfo            '%att-align;
                                      %att-rowalign;
                                      %att-columnalign;
                                      %att-columnwidth;
                                      %att-groupalign;
                                      %att-alignmentscope;
                                      %att-rowspacing;
                                      %att-columnspacing;
                                      %att-rowlines;
                                      %att-columnlines;
                                      %att-frame;
                                      %att-framespacing;
                                      %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' >

<!-- Presentation schemata with content -->

<!ENTITY  % ptoken       'mi | mn | mo | mtext | ms' >

<!ATTLIST mi             %att-fontinfo;
                         %att-global; >

<!ATTLIST mn             %att-fontinfo;
                         %att-global; >

<!ATTLIST mo             %att-fontinfo;
                         %att-opinfo;
                         %att-global; >
                                     
<!ATTLIST mtext          %att-fontinfo;
                         %att-global; >
                                     
<!ATTLIST ms             %att-fontinfo;
                         %att-lquote;
                         %att-rquote;
                         %att-global; >

<!-- Empty presentation schemata -->

<!ENTITY  % petoken      'mspace' >
<!ELEMENT mspace         EMPTY >

<!ATTLIST mspace         %att-sizeinfo;
                         %att-global; >

<!-- Presentation: general layout schemata -->

<!ENTITY % pgenschema    'mrow|mfrac|msqrt|mroot|menclose|
                          mstyle|merror|mpadded| mphantom|mfenced' >

<!ATTLIST mrow           %att-global; >

<!ATTLIST mfrac          %att-linethickness;
                         %att-global; >
                                     
<!ATTLIST msqrt          %att-global; >
<!ATTLIST menclose       %att-global; notation CDATA "longdiv" >
                                     
<!ATTLIST mroot          %att-global; >
                                     
<!ATTLIST mstyle         %att-fontinfo;
                         %att-opinfo;
                         %att-lquote;
                         %att-rquote;
                         %att-linethickness;
                         %att-scriptlevel;
                         %att-scriptsizemultiplier;
                         %att-scriptminsize;
                         %att-background;
                         %att-open;
                         %att-close;
                         %att-separators;
                         %att-subscriptshift;
                         %att-superscriptshift;
                         %att-accentunder;
                         %att-tableinfo;
                         %att-rowspan;
                         %att-columnspan;
                         %att-edge;
                         %att-actiontype;
                         %att-selection;
                         %att-global; >
                                     
<!ATTLIST merror         %att-global; >
                                     
<!ATTLIST mpadded        %att-sizeinfo;
                         %att-lspace;
                         %att-global; >
                                     
<!ATTLIST mphantom       %att-global; >
                                     
<!ATTLIST mfenced        %att-open;
                         %att-close;
                         %att-separators;
                         %att-global; >

<!-- Presentation layout schemata: scripts and limits -->

<!ENTITY  % pscrschema   'msub|msup|msubsup|
                          munder|mover|munderover|mmultiscripts' >

<!ATTLIST msub           %att-subscriptshift;
                         %att-global; >
                                     
<!ATTLIST msup           %att-superscriptshift;
                         %att-global; >
                                     
<!ATTLIST msubsup        %att-subscriptshift;
                         %att-superscriptshift;
                         %att-global; >
                                     
<!ATTLIST munder         %att-accentunder;
                         %att-global; >
                                     
<!ATTLIST mover          %att-accent;
                         %att-global; >

<!ATTLIST munderover     %att-accent;
                         %att-accentunder;
                         %att-global; >

<!ATTLIST mmultiscripts  %att-subscriptshift;
                         %att-superscriptshift;
                         %att-global; >

<!-- Presentation layout schemata: empty elements for scripts -->

<!ENTITY  % pscreschema  'mprescripts|none' >

<!ELEMENT mprescripts    EMPTY >

<!ELEMENT none           EMPTY >

<!-- Presentation layout schemata: tables -->

<!ENTITY  % ptabschema   'mtable|mtr|mlabeledtr|mtd' >

<!ATTLIST mtable         %att-tableinfo;
                         %att-global; >

<!ATTLIST mtr            %att-rowalign;
                         %att-columnalign;
                         %att-groupalign;
                         %att-global; >

<!ATTLIST mlabeledtr     %att-rowalign;
                         %att-columnalign;
                         %att-groupalign;
                         %att-global; >
                                    
<!ATTLIST mtd            %att-rowalign;
                         %att-columnalign;
                         %att-groupalign;
                         %att-rowspan;
                         %att-columnspan;
                         %att-global; >

<!ENTITY  % plschema     '%pgenschema;|%pscrschema;|%ptabschema;' >

<!-- Empty presentation layout schemata -->

<!ENTITY  % peschema     'maligngroup | malignmark' >

<!ELEMENT malignmark     EMPTY >

<!ATTLIST malignmark     %att-edge; >

<!ELEMENT maligngroup    EMPTY >
<!ATTLIST maligngroup    %att-groupalign;
                         %att-global; >

<!-- Presentation action schemata -->

<!ENTITY  % pactions     'maction' >
<!ATTLIST maction        %att-actiontype;
                         %att-selection;
                         %att-global; >

<!-- 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 -->

<!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|ci | cn' >

<!ATTLIST ci                %att-type;
                            %att-definition;
                            %att-global; >
                                  
<!ATTLIST csymbol           %att-encoding;
                            %att-type;
                            %att-definition;
                            %att-global; >
                                  
<!ATTLIST cn                %att-type;
                            %att-base;
                            %att-definition;
                            %att-global; >

<!-- Content elements: specials -->

<!ENTITY  % cspecial        'apply | reln | lambda' >

<!ATTLIST apply             %att-global; >

<!ATTLIST reln              %att-global; >

<!ATTLIST lambda            %att-global; >

<!-- Content elements: others -->

<!ENTITY  % cother          'condition | declare | sep' >

<!ATTLIST condition         %att-global; >

<!ATTLIST declare           %att-type;
                            %att-scope;
                            %att-nargs;
                            %att-occurrence;
                            %att-definition;
                            %att-encoding;
                            %att-global; >

<!ELEMENT sep               EMPTY >

<!-- Content elements: semantic mapping -->

<!ENTITY  % csemantics      'semantics | annotation | annotation-xml' >

<!ATTLIST semantics         %att-definition;
                            %att-encoding;
                            %att-global; >

<!ATTLIST annotation        %att-encoding;
                            %att-global; >

<!ATTLIST annotation-xml    %att-encoding;
                            %att-global; >

<!-- Content elements: constructors -->

<!ENTITY  % cconstructor    'interval | list | matrix | matrixrow | 
                             set | vector' >

<!ATTLIST interval          %att-closure;
                            %att-global; >

<!ATTLIST set               %att-global; >

<!ATTLIST list              %att-order;
                            %att-global; >

<!ATTLIST vector            %att-global; >

<!ATTLIST matrix            %att-global; >

<!ATTLIST matrixrow         %att-global; >

<!-- Content elements: operators -->

<!ENTITY  % cfuncop1ary     'inverse | ident' >

<!ELEMENT inverse           EMPTY >
<!ATTLIST inverse           %att-definition;
                            %att-global; >

<!ENTITY  % cfuncopnary     'fn | compose' >

<!ATTLIST fn                %att-definition;
                            %att-global; >

<!ELEMENT ident             EMPTY >
<!ATTLIST ident             %att-definition;
                            %att-global; >

<!ELEMENT compose           EMPTY >
<!ATTLIST compose           %att-definition;
                            %att-global; >

<!ENTITY  % carithop1ary    'abs | conjugate | exp | factorial | arg |
                             real | imaginary' >

<!ELEMENT exp               EMPTY >
<!ATTLIST exp               %att-definition;
                            %att-global; >

<!ELEMENT abs               EMPTY >
<!ATTLIST abs               %att-definition;
                            %att-global; >

<!ELEMENT arg               EMPTY >
<!ATTLIST arg               %att-definition;
                            %att-global; >

<!ELEMENT real              EMPTY >
<!ATTLIST real              %att-definition;
                            %att-global; >

<!ELEMENT imaginary         EMPTY >
<!ATTLIST imaginary         %att-definition;
                            %att-global; >

<!ELEMENT conjugate         EMPTY >
<!ATTLIST conjugate         %att-definition;
                            %att-global; >

<!ELEMENT factorial         EMPTY >
<!ATTLIST factorial         %att-definition;
                            %att-global; >

<!ENTITY  % carithop1or2ary 'minus' >

<!ELEMENT minus             EMPTY >
<!ATTLIST minus             %att-definition;
                            %att-global; >

<!ENTITY  % carithop2ary    'quotient | divide | power | rem' >

<!ELEMENT quotient          EMPTY >
<!ATTLIST quotient          %att-definition;
                            %att-global; >

<!ELEMENT divide            EMPTY >
<!ATTLIST divide            %att-definition;
                            %att-global; >

<!ELEMENT power             EMPTY >
<!ATTLIST power             %att-definition;
                            %att-global; >

<!ELEMENT rem               EMPTY >
<!ATTLIST rem               %att-definition;
                            %att-global; >

<!ENTITY  % carithopnary    'plus | times | max | min | gcd' >

<!ELEMENT plus              EMPTY >
<!ATTLIST plus              %att-definition;
                            %att-global; >

<!ELEMENT max               EMPTY >
<!ATTLIST max               %att-definition;
                            %att-global; >

<!ELEMENT min               EMPTY >
<!ATTLIST min               %att-definition;
                            %att-global; >

<!ELEMENT times             EMPTY >
<!ATTLIST times             %att-definition;
                            %att-global; >

<!ELEMENT gcd               EMPTY >
<!ATTLIST gcd               %att-definition;
                            %att-global; >

<!ENTITY  % carithoproot    'root' >

<!ELEMENT root              EMPTY >
<!ATTLIST root              %att-definition;
                            %att-global; >

<!ENTITY  % clogicopquant   'exists | forall' >

<!ELEMENT exists            EMPTY >
<!ATTLIST exists            %att-definition;
                            %att-global; >

<!ELEMENT forall            EMPTY >
<!ATTLIST forall            %att-definition;
                            %att-global; >

<!ENTITY  % clogicopnary    'and | or | xor' >

<!ELEMENT and               EMPTY >
<!ATTLIST and               %att-definition;
                            %att-global; >

<!ELEMENT or                EMPTY >
<!ATTLIST or                %att-definition;
                            %att-global; >

<!ELEMENT xor               EMPTY >
<!ATTLIST xor               %att-definition;
                            %att-global; >

<!ENTITY  % clogicop1ary    'not' >

<!ELEMENT not               EMPTY >
<!ATTLIST not               %att-definition;
                            %att-global; >

<!ENTITY  % clogicop2ary    'implies' >

<!ELEMENT implies           EMPTY >
<!ATTLIST implies           %att-definition;
                            %att-global; >

<!ENTITY  % ccalcop         'log | int | diff | partialdiff | divergence |
                             grad | curl | laplacian' >


<!ELEMENT divergence        EMPTY >
<!ATTLIST divergence        %att-definition;
                            %att-global; >

<!ELEMENT grad              EMPTY >
<!ATTLIST grad              %att-definition;
                            %att-global; >

<!ELEMENT curl              EMPTY >
<!ATTLIST curl              %att-definition;
                            %att-global; >

<!ELEMENT laplacian         EMPTY >
<!ATTLIST laplacian         %att-definition;
                            %att-global; >

<!ELEMENT log               EMPTY >
<!ATTLIST log               %att-definition;
                            %att-global; >

<!ELEMENT int               EMPTY >
<!ATTLIST int               %att-definition;
                            %att-global; >

<!ELEMENT diff              EMPTY >
<!ATTLIST diff              %att-definition;
                            %att-global; >

<!ELEMENT partialdiff       EMPTY >
<!ATTLIST partialdiff       %att-definition;
                            %att-global; >

<!ENTITY  % ccalcop1ary 'ln' >

<!ELEMENT ln                EMPTY >
<!ATTLIST ln                %att-definition;
                            %att-global; >

<!ENTITY  % csetop1ary      'card' >


<!ELEMENT card              EMPTY >
<!ATTLIST card              %att-definition;
                            %att-global; >

<!ENTITY  % csetop2ary      'setdiff' >

<!ELEMENT setdiff           EMPTY >
<!ATTLIST setdiff           %att-definition;
                            %att-global; >

<!ENTITY  % csetopnary      'union | intersect' >

<!ELEMENT union             EMPTY >
<!ATTLIST union             %att-definition;
                            %att-global; >

<!ELEMENT intersect         EMPTY >
<!ATTLIST intersect         %att-definition;
                            %att-global; >

<!ENTITY  % cseqop          'sum | product | limit' >

<!ELEMENT sum               EMPTY >
<!ATTLIST sum               %att-definition;
                            %att-global; >

<!ELEMENT product           EMPTY >
<!ATTLIST product           %att-definition;
                            %att-global; >

<!ELEMENT limit             EMPTY >
<!ATTLIST limit             %att-definition;
                            %att-global; >

<!ENTITY  % ctrigop         'sin | cos | tan | sec | csc | cot | sinh |
                             cosh | tanh | sech | csch | coth |
                             arcsin | arccos | arctan' >

<!ELEMENT sin               EMPTY >
<!ATTLIST sin               %att-definition;
                            %att-global; >

<!ELEMENT cos               EMPTY >
<!ATTLIST cos               %att-definition;
                            %att-global; >

<!ELEMENT tan               EMPTY >
<!ATTLIST tan               %att-definition;
                            %att-global; >

<!ELEMENT sec               EMPTY >
<!ATTLIST sec               %att-definition;
                            %att-global; >

<!ELEMENT csc               EMPTY >
<!ATTLIST csc               %att-definition;
                            %att-global; >

<!ELEMENT cot               EMPTY >
<!ATTLIST cot               %att-definition;
                            %att-global; >

<!ELEMENT sinh              EMPTY >
<!ATTLIST sinh              %att-definition;
                            %att-global; >

<!ELEMENT cosh              EMPTY >
<!ATTLIST cosh              %att-definition;
                            %att-global; >

<!ELEMENT tanh              EMPTY >
<!ATTLIST tanh              %att-definition;
                            %att-global; >

<!ELEMENT sech              EMPTY >
<!ATTLIST sech              %att-definition;
                            %att-global; >

<!ELEMENT csch              EMPTY >
<!ATTLIST csch              %att-definition;
                            %att-global; >

<!ELEMENT coth              EMPTY >
<!ATTLIST coth              %att-definition;
                            %att-global; >

<!ELEMENT arcsin            EMPTY >
<!ATTLIST arcsin            %att-definition;
                            %att-global; >

<!ELEMENT arccos            EMPTY >
<!ATTLIST arccos            %att-definition;
                            %att-global; >

<!ELEMENT arctan            EMPTY >
<!ATTLIST arctan            %att-definition;
                            %att-global; >

<!ENTITY  % cstatopnary     'mean | sdev | variance | median | mode' >

<!ELEMENT mean              EMPTY >
<!ATTLIST mean              %att-definition;
                            %att-global; >

<!ELEMENT sdev              EMPTY >
<!ATTLIST sdev              %att-definition;
                            %att-global; >

<!ELEMENT variance          EMPTY >
<!ATTLIST variance          %att-definition;
                            %att-global; >

<!ELEMENT median            EMPTY >
<!ATTLIST median            %att-definition;
                            %att-global; >

<!ELEMENT mode              EMPTY >
<!ATTLIST mode              %att-definition;
                            %att-global; >

<!ENTITY  % cstatopmoment   'moment' >

<!ELEMENT moment            EMPTY >
<!ATTLIST moment            %att-definition;
                            %att-global; >

<!ENTITY  % clalgop1ary     'determinant | transpose' >

<!ELEMENT determinant       EMPTY >
<!ATTLIST determinant       %att-definition;
                            %att-global; >

<!ELEMENT transpose         EMPTY >
<!ATTLIST transpose         %att-definition;
                            %att-global; >

<!ENTITY  % clalgop2ary     'vectorproduct | scalarproduct | outerproduct' >

<!ELEMENT vectorproduct     EMPTY >
<!ATTLIST vectorproduct     %att-definition;
                            %att-global; >

<!ELEMENT scalarproduct     EMPTY >
<!ATTLIST scalarproduct     %att-definition;
                            %att-global; >

<!ELEMENT outerproduct      EMPTY >
<!ATTLIST outerproduct      %att-definition;
                            %att-global; >

<!ENTITY  % clalgopnary     'selector' >

<!ELEMENT selector          EMPTY >
<!ATTLIST selector          %att-definition;
                            %att-global; >

<!-- Content elements: relations -->

<!ENTITY  % cgenrel2ary     'neq' >

<!ELEMENT neq               EMPTY >
<!ATTLIST neq               %att-definition;
                            %att-global; >

<!ENTITY  % cgenrelnary     'eq | leq | lt | geq | gt| equivalent | approx' >

<!ELEMENT eq                EMPTY >
<!ATTLIST eq                %att-definition;
                            %att-global; >

<!ELEMENT equivalent        EMPTY >
<!ATTLIST equivalent        %att-definition;
                            %att-global; >

<!ELEMENT approx            EMPTY >
<!ATTLIST approx            %att-definition;
                            %att-global; >

<!ELEMENT gt                EMPTY >
<!ATTLIST gt                %att-definition;
                            %att-global; >

<!ELEMENT lt                EMPTY >
<!ATTLIST lt                %att-definition;
                            %att-global; >

<!ELEMENT geq               EMPTY >
<!ATTLIST geq               %att-definition;
                            %att-global; >

<!ELEMENT leq               EMPTY >
<!ATTLIST leq               %att-definition;
                            %att-global; >

<!ENTITY  % csetrel2ary     'in | notin | notsubset | notprsubset' >

<!ELEMENT in                EMPTY >
<!ATTLIST in                %att-definition;
                            %att-global; >

<!ELEMENT notin             EMPTY >
<!ATTLIST notin             %att-definition;
                            %att-global; >

<!ELEMENT notsubset         EMPTY >
<!ATTLIST notsubset         %att-definition;
                            %att-global; >

<!ELEMENT notprsubset       EMPTY >
<!ATTLIST notprsubset       %att-definition;
                            %att-global; >

<!ENTITY  % csetrelnary     'subset | prsubset' >

<!ELEMENT subset            EMPTY >
<!ATTLIST subset            %att-definition;
                            %att-global; >

<!ELEMENT prsubset          EMPTY >
<!ATTLIST prsubset          %att-definition;
                            %att-global; >

<!ENTITY  % cseqrel2ary     'tendsto' >

<!ELEMENT tendsto           EMPTY >
<!ATTLIST tendsto           %att-definition;
                            %att-type;
                            %att-global; >

<!-- Content elements: quantifiers -->

<!ENTITY  % cquantifier     'lowlimit | uplimit | bvar | degree | logbase' >

<!ATTLIST lowlimit          %att-global; >

<!ATTLIST uplimit           %att-global; >

<!ATTLIST bvar              %att-global; >

<!ATTLIST degree            %att-global; >

<!ATTLIST logbase           %att-global; >

<!-- 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; |
                             %cconstructor; | %cquantifier; |
                             %cop1ary; |%cop2ary; |%copnary; |%copmisc; |
                             %crel2ary; |%crelnary;' >

<!-- Content constructs for substitution in presentation structures -->

<!ENTITY  % ContInPres      'ci |csymbol| cn | apply | fn | lambda | reln |
                             interval | list | matrix | matrixrow |
                             set | vector | semantics |declare' > 

<!-- ************************************************************************ -->
<!-- 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)          -->
<!-- ************************************************************************ -->

<!ENTITY  % ContentExpression  '(%Content; | %PresInCont;)*' >
<!ENTITY  % PresExpression     '(%Presentation; | %ContInPres;)*' >
<!ENTITY  % MathExpression     '(%PresInCont; | %ContInPres;)*' >

<!-- Content elements: tokens                       -->
<!-- (may contain embedded presentation constructs) -->

<!ELEMENT ci                   (#PCDATA | %PresInCont;)* >
<!ELEMENT csymbol                   (#PCDATA | %PresInCont;|ci)* > <!-- ci ? -->
<!ELEMENT cn                   (#PCDATA | sep | %PresInCont;)* >

<!-- Content elements: special -->

<!ELEMENT apply                (%ContentExpression;) >
<!ELEMENT reln                 (%ContentExpression;) >
<!ELEMENT lambda               (%ContentExpression;) >

<!-- Content elements: other -->

<!ELEMENT condition            (%ContentExpression;) >
<!ELEMENT declare              (%ContentExpression;) >

<!-- Content elements: semantics -->

<!ELEMENT semantics            (%ContentExpression;) >
<!ELEMENT annotation           (#PCDATA) >
<!ELEMENT annotation-xml       ANY >

<!-- Content elements: constructors -->

<!ELEMENT interval             (%ContentExpression;) >
<!ELEMENT set                  (%ContentExpression;) >
<!ELEMENT list                 (%ContentExpression;) >
<!ELEMENT vector               (%ContentExpression;) >
<!ELEMENT matrix               (%ContentExpression;) >
<!ELEMENT matrixrow            (%ContentExpression;) >

<!-- Content elements: operator (user-defined) -->

<!ELEMENT fn                   (%ContentExpression;) >

<!-- Content elements: quantifiers -->

<!ELEMENT lowlimit             (%ContentExpression;) >
<!ELEMENT uplimit              (%ContentExpression;) >
<!ELEMENT bvar                 (%ContentExpression;) >
<!ELEMENT degree               (%ContentExpression;) >
<!ELEMENT logbase              (%ContentExpression;) > 

<!-- ************************************************************************ -->
<!-- Presentation layout schemata contain tokens,                             -->
<!-- layout and content schemata.                                             -->
<!-- ************************************************************************ -->

<!ELEMENT mstyle               (%PresExpression;) >
<!ELEMENT merror               (%PresExpression;) >
<!ELEMENT mphantom             (%PresExpression;) >
<!ELEMENT mrow                 (%PresExpression;) >
<!ELEMENT mfrac                (%PresExpression;) >
<!ELEMENT msqrt                (%PresExpression;) >
<!ELEMENT menclose             (%PresExpression;) >
<!ELEMENT mroot                (%PresExpression;) >
<!ELEMENT msub                 (%PresExpression;) >
<!ELEMENT msup                 (%PresExpression;) >
<!ELEMENT msubsup              (%PresExpression;) >
<!ELEMENT mmultiscripts        (%PresExpression;) >
<!ELEMENT munder               (%PresExpression;) >
<!ELEMENT mover                (%PresExpression;) >
<!ELEMENT munderover           (%PresExpression;) >
<!ELEMENT mtable               (%PresExpression;) >
<!ELEMENT mtr                  (%PresExpression;) >
<!ELEMENT mlabeledtr           (%PresExpression;) >
<!ELEMENT mtd                  (%PresExpression;) >
<!ELEMENT maction              (%PresExpression;) >
<!ELEMENT mfenced              (%PresExpression;) >
<!ELEMENT mpadded              (%PresExpression;) >

<!-- Presentation elements contain PCDATA or malignmark constructs. -->

<!ELEMENT mi                   (#PCDATA | malignmark)* >
<!ELEMENT mn                   (#PCDATA | malignmark)* >
<!ELEMENT mo                   (#PCDATA | malignmark)* >
<!ELEMENT mtext                (#PCDATA | malignmark)* >
<!ELEMENT ms                   (#PCDATA | malignmark)* >

<!-- ************************************************************************ -->
<!-- Browser interface definition                                             -->
<!-- ************************************************************************ -->

<!-- Attributes for top-level element 'math' -->

<!ENTITY  % att-macros      'macros CDATA #IMPLIED' >
<!ENTITY  % att-mode        'mode   CDATA #IMPLIED' >

<!ENTITY  % att-topinfo     '%att-global;
                             %att-macros;
                             %att-mode;' >

<!-- Attributes for browser interface element -->

<!ENTITY  % att-name        'name CDATA #IMPLIED' >
<!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              (%MathExpression;) >

<!ATTLIST math              %att-topinfo;
                            %att-browif; >

<!-- ************************************************************************ -->
<!-- Entity sets from ISO Technical Report 9573-13                            -->
<!-- ************************************************************************ -->

<!ENTITY  % ent-isoamsa PUBLIC
    "-//W3C//ENTITIES Added Math Symbols: Arrow Relations for MathML 2.0//EN"
    "isoamsa.ent" >
%ent-isoamsa;

<!ENTITY  % ent-isoamsb PUBLIC
    "-//W3C//ENTITIES Added Math Symbols: Binary Operators for MathML 2.0//EN"
    "isoamsb.ent" >
%ent-isoamsb;

<!ENTITY  % ent-isoamsc PUBLIC
    "-//W3C//ENTITIES Added Math Symbols: Delimiters for MathML 2.0//EN"
    "isoamsc.ent" >
%ent-isoamsc;

<!ENTITY  % ent-isoamsn PUBLIC 
    "-//W3C//ENTITIES Added Math Symbols: Negated Relations for MathML 2.0//EN"
    "isoamsn.ent" >
%ent-isoamsn;

<!ENTITY  % ent-isoamso PUBLIC 
    "-//W3C//ENTITIES Added Math Symbols: Ordinary for MathML 2.0//EN"
    "isoamso.ent" >
%ent-isoamso;

<!ENTITY  % ent-isoamsr PUBLIC
    "-//W3C//ENTITIES Added Math Symbols: Relations for MathML 2.0//EN"
    "isoamsr.ent" >
%ent-isoamsr;

<!ENTITY  % ent-isogrk3 PUBLIC 
    "-//W3C//ENTITIES Greek Symbols for MathML 2.0//EN"
    "isogrk3.ent" >
%ent-isogrk3;

<!ENTITY  % ent-isomfrk PUBLIC 
    "-//W3C//ENTITIES Math Alphabets: Fraktur for MathML 2.0//EN"
    "isomfrk.ent" >
%ent-isomfrk;

<!ENTITY  % ent-isomopf PUBLIC 
    "-//W3C//ENTITIES Math Alphabets: Open Face for MathML 2.0//EN"
    "isomopf.ent" >
%ent-isomopf;

<!ENTITY  % ent-isomscr PUBLIC 
    "-//W3C//ENTITIES Math Alphabets: Script for MathML 2.0//EN"
    "isomscr.ent" >
%ent-isomscr;

<!ENTITY  % ent-isotech PUBLIC 
    "-//W3C//ENTITIES General Technical for MathML 2.0//EN"
    "isotech.ent" >
%ent-isotech;

<!-- ************************************************************************ -->
<!-- Entity sets from informative annex to                                    -->
<!-- ISO Standard 8879:1986 (the SGML standard)                               -->
<!-- ************************************************************************ -->

<!ENTITY  % ent-isobox  PUBLIC 
    "-//W3C//ENTITIES Box and Line Drawing for MathML 2.0//EN"
    "isobox.ent" >
%ent-isobox;

<!ENTITY  % ent-isocyr1 PUBLIC 
    "-//W3C//ENTITIES Russian Cyrillic for MathML 2.0//EN"
    "isocyr1.ent" >
%ent-isocyr1;

<!ENTITY  % ent-isocyr2 PUBLIC 
    "-//W3C//ENTITIES Non-Russian Cyrillic for MathML 2.0//EN"
    "isocyr2.ent" >
%ent-isocyr2;

<!ENTITY  % ent-isodia  PUBLIC 
    "-//W3C//ENTITIES Diacritical Marks for MathML 2.0//EN"
    "isodia.ent" >
%ent-isodia;


<!ENTITY  % ent-isolat1 PUBLIC 
    "-//W3C//ENTITIES Added Latin 1 for MathML 2.0//EN"
    "isolat1.ent" >
%ent-isolat1;

<!ENTITY  % ent-isolat2 PUBLIC 
    "-//W3C//ENTITIES Added Latin 2 for MathML 2.0//EN"
    "isolat2.ent" >
%ent-isolat2;

<!ENTITY  % ent-isonum PUBLIC 
    "-//W3C//ENTITIES Numeric and Special Graphic for MathML 2.0//EN"
    "isonum.ent" >
%ent-isonum;

<!ENTITY  % ent-isopub PUBLIC 
    "-//W3C//ENTITIES Publishing for MathML 2.0//EN"
    "isopub.ent" >
%ent-isopub;

<!-- ************************************************************************ -->
<!-- MathML aliases for characters defined above                              -->
<!-- ************************************************************************ -->

<!ENTITY  % ent-mmlalias  PUBLIC 
    "-//W3C//ENTITIES Aiases for MathML 2.0//EN"
    "mmlalias.ent" >
%ent-mmlalias;

<!-- ************************************************************************ -->
<!-- New characters defined by MathML                                         -->
<!-- ************************************************************************ -->

<!ENTITY  % ent-mmlextra PUBLIC 
    "-//W3C//ENTITIES Extra for MathML 2.0//EN"
    "mmlextra.ent" >
%ent-mmlextra;

<!-- end of DTD fragment -->