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 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/01 15:22:55 hugo 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                                                         -->
<!-- Became W3C Recommendation 7 April 1998                                   -->
<!-- ************************************************************************ -->

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

<!ENTITY  % att-global               '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-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-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|
                          mstyle|merror|mpadded| mphantom|mfenced' >

<!ATTLIST mrow           %att-global; >

<!ATTLIST mfrac          %att-linethickness;
                         %att-global; >
                                     
<!ATTLIST msqrt          %att-global; >
                                     
<!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 >
<!ATTLIST mprescripts    %att-global; >

<!ELEMENT none           EMPTY >
<!ATTLIST none           %att-global; >

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

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

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

<!ATTLIST mtr            %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;
                         %att-global; >

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

<!ATTLIST ci                %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-global; >

<!ELEMENT sep               EMPTY >
<!ATTLIST sep               %att-global; >

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

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

<!ATTLIST semantics         %att-definition;
                            %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' >

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

<!ELEMENT abs               EMPTY >
<!ATTLIST abs               %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' >

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

<!ELEMENT eq                EMPTY >
<!ATTLIST eq                %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;' >

<!ENTITY  % cop2ary         '%carithop2ary; | %clogicop2ary;| %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 | cn | apply | fn | lambda | reln |
                             interval | list | matrix | matrixrow |
                             set | vector | semantics' > 

<!-- ************************************************************************ -->
<!-- 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 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       (%ContentExpression;) >

<!-- 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 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 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
    "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN">
    "isoamsa.ent" >
%ent-isoamsa;

<!ENTITY  % ent-isoamsb PUBLIC
    "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN">
    "isoamsb.ent" >
%ent-isoamsb;

<!ENTITY  % ent-isoamsc PUBLIC
    "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN">
    "isoamsc.ent" >
%ent-isoamsc;

<!ENTITY  % ent-isoamsn PUBLIC 
    "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN">
    "isoamsn.ent" >
%ent-isoamsn;

<!ENTITY  % ent-isoamso PUBLIC 
    "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN">
    "isoamso.ent" >
%ent-isoamso;

<!ENTITY  % ent-isoamsr PUBLIC
    "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN">
    "isoamsr.ent" >
%ent-isoamsr;

<!ENTITY  % ent-isogrk3 PUBLIC 
    "ISO 8879:1986//ENTITIES Greek Symbols//EN">
    "isogrk3.ent" >
%ent-isogrk3;

<!ENTITY  % ent-isogrk4 PUBLIC 
    "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN">
    "isogrk4.ent" >
%ent-isogrk4;

<!ENTITY  % ent-isomfrk PUBLIC 
    "ISO 9573-13:1991//ENTITIES Math Alphabets: Fraktur//EN">
    "isomfrk.ent" >
%ent-isomfrk;

<!ENTITY  % ent-isomopf PUBLIC 
    "ISO 9573-13:1991//ENTITIES Math Alphabets: Open Face//EN">
    "isomopf.ent" >
%ent-isomopf;

<!ENTITY  % ent-isomscr PUBLIC 
    "ISO 9573-13:1991//ENTITIES Math Alphabets: Script//EN">
    "isomscr.ent" >
%ent-isomscr;

<!ENTITY  % ent-isotech PUBLIC 
    "ISO 8879:1986//ENTITIES General Technical//EN">
    "isotech.ent" >
%ent-isotech;

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

<!ENTITY  % ent-isobox  PUBLIC 
    "ISO 8879:1986//ENTITIES Box and Line Drawing//EN">
    "isobox.ent" >
%ent-isobox;

<!ENTITY  % ent-isocyr1 PUBLIC 
    "ISO 8879:1986//ENTITIES Russian Cyrillic//EN">
    "isocyr1.ent" >
%ent-isocyr1;

<!ENTITY  % ent-isocyr2 PUBLIC 
    "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN">
    "isocyr2.ent" >
%ent-isocyr2;

<!ENTITY  % ent-isodia  PUBLIC 
    "ISO 8879:1986//ENTITIES Diacritical Marks//EN">
    "isodia.ent" >
%ent-isodia;

<!ENTITY  % ent-isogrk1 PUBLIC 
    "ISO 8879:1986//ENTITIES Greek Letters//EN">
    "isogrk1.ent" >
%ent-isogrk1;

<!ENTITY  % ent-isogrk2 PUBLIC 
    "ISO 8879:1986//ENTITIES Monotoniko Greek//EN">
    "isogrk2.ent" >
%ent-isogrk2;

<!ENTITY  % ent-isolat1 PUBLIC 
    "ISO 8879:1986//ENTITIES Added Latin 1//EN">
    "isolat1.ent" >
%ent-isolat1;

<!ENTITY  % ent-isolat2 PUBLIC 
    "ISO 8879:1986//ENTITIES Added Latin 2//EN">
    "isolat2.ent" >
%ent-isolat2;

<!ENTITY  % ent-isonum PUBLIC 
    "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN">
    "isonum.ent" >
%ent-isonum;

<!ENTITY  % ent-isopub PUBLIC 
    "ISO 8879:1986//ENTITIES Publishing//EN">
    "isopub.ent" >
%ent-isopub;

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

<!ENTITY  % ent-mmlalias SYSTEM "mmlalias.ent" >
%ent-mmlalias;

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

<!ENTITY  % ent-mmlextra SYSTEM "mmlextra.ent" >
%ent-mmlextra;

<!-- end of DTD fragment -->