Working Draft 10-Jul-97

MathML DTD Fragment

Warning: This DTD fragment should be regarded as a placeholder. Since the HTML-Math working group expects to incorporate revisions based on internal and external review in a subsequent working draft, this DTD fragment may be replaced by an authoritative one which finalizes the syntax of MathML. At present, in places where the usage described in the MathML working draft differs from that described in the DTD fragment, precedence should be given to the text.


<!-- Content model for content and presentation tags
     in MATH & MATHDISP elements of MathML              -->
<!-- status = draft. date = 9.May.1997 syntax = XML     -->
<!-- author = s.buswell sb@stilo.demon.co.uk            -->
<!-- revised 14.May.1997 by Robert Miner                -->
<!-- revised 29.June.1997 and 2.July.1997 by s.buswell  -->

<!-- Presentation tag element set                       -->

<!-- tokens -->

<!ENTITY % token "mi | mn | mo | mf | mtext | ms" >

<!ELEMENT mi     (#PCDATA)                        >
<!ELEMENT mn     (#PCDATA)                        >
<!ELEMENT mo     (#PCDATA)                        >
<!ELEMENT mf     (#PCDATA)                        >
<!ELEMENT mtext  (#PCDATA)                        >
<!ELEMENT ms     (#PCDATA)                        >

<!-- empty tokens -->

<!ENTITY % etoken  "mspace" >
<!ELEMENT mspace     EMPTY  >

<!-- layout schema -->

<!ENTITY % lschema "mstyle|merror|mphantom|mrow|mfrac|
                    msqrt|mroot|msub|msup|msubsup|mmultiscripts|
                    munder|mover|munderover|mtable|mtr|mtd" >

<!-- empty layout schema -->

<!ENTITY % eschema "mprescripts | none" >
<!ELEMENT mprescripts    EMPTY          >
<!ELEMENT  none  EMPTY          >

<!-- action schema -->
<!ENTITY % actions "maction" >

<!-- layout schema content models are given after the content
     definitions, since layout schema can contain content schema    -->

<!-- Presentation entity for substitution into content tag constructs -->

<!ENTITY % Presentation  "(%token; | %etoken; | %lschema; | %eschema; |
%actions;)*"
>

<!-- general attribute definitions for class & style & other -->

<!ENTITY % att-class-style      'class CDATA #IMPLIED
                                                                style
CDATA #IMPLIED
                                                                other
CDATA #IMPLIED'                  >

<!-- presentation attribute definitions -->

<!ENTITY % att-fontsize        'fontsize CDATA #IMPLIED'
>
<!ENTITY % att-fontweight      'fontweight (plain | bold) "plain"'
>
<!ENTITY % att-fontslant       'fontslant (upright | italic) "upright"' >
<!ENTITY % att-fontfamily      'fontfamily CDATA   #IMPLIED'      >
<!ENTITY % att-fontcolor       'fontcolor CDATA   #IMPLIED'       >

<!ENTITY % att-fontinfo      '%att-fontsize;
                                                                %att-fontweight;
                                                                %att-fontslant;
                                                                %att-fontfamily;

%att-fontcolor;'                 >

<!ENTITY % att-base                     'base CDATA  "10"'
>

 <!ENTITY % att-lspace                 'lspace CDATA  ".277777"'        >
 <!ENTITY % att-rspace                 'rspace CDATA   ".277777"'       >
 <!ENTITY % att-stretchy               'stretchy CDATA "false"' >
 <!ENTITY % att-symetric               'symetric CDATA "sym"'           >
 <!ENTITY % att-maxsize                'maxsize CDATA "infinity"'       >
 <!ENTITY % att-minsize               ' minsize CDATA "0"'
>
 <!ENTITY % att-form                   'form CDATA #IMPLIED'            >

 <!ENTITY % att-opinfo '%att-lspace;
                                                  %att-rspace;
                                                  %att-stretchy;
                                                  %att-symetric;
                                                  %att-maxsize;
                                                  %att-minsize;'
>


 <!ENTITY % att-largeop                'largeop CDATA "false"'
>
 <!ENTITY % att-movablelimits         ' movablelimits (movable | fixed)
"fixed"'         >

<!ENTITY % att-width               ' width CDATA "0"'   >
<!ENTITY % att-height               ' height CDATA "0"' >
<!ENTITY % att-depth                'depth CDATA "0"'   >

 <!ENTITY % att-sizeinfo '%att-width;
                                                  %att-height;
                                                  %att-depth;'          >

<!ENTITY % att-background           'background CDATA #IMPLIED' >

 <!--                   lquote CDATA '"'                -->
 <!--                   rquote CDATA '"'                -->

<!ENTITY % att-scriptlevel          'scriptlevel CDATA #IMPLIED'
>
<!ENTITY % att-displaystyle         'displaystyle CDATA #IMPLIED'
>
<!ENTITY % att-scriptsizemultiplier 'scriptsizemultiplier CDATA "0.71"'  >
<!ENTITY % att-scriptminsize         'scriptminsize CDATA "8"'
>
<!ENTITY % att-linethickness         'linethickness CDATA "1"'
>
<!ENTITY % att-subscriptshift      'subscriptshift CDATA #IMPLIED'
>
<!ENTITY % att-superscriptshift     'superscriptshift CDATA #IMPLIED'    >

<!ENTITY % att-accentunder              'accentunder CDATA "false"'
>
<!ENTITY % att-accent                        'accent CDATA "false"'
>

<!ENTITY % att-align                            'align CDATA "axis"'
>
<!ENTITY % att-rowalign           'rowalign CDATA "baseline"'              >
<!ENTITY % att-columnalign        'columnalign CDATA "center"'             >
<!ENTITY % att-rowspacing         'rowspacing CDATA "1.0"'
>
<!ENTITY % att-columnspacing      'columnspacing CDATA "0.8"'              >
<!ENTITY % att-rowlines           'rowlines CDATA ""'
>
<!ENTITY % att-columnlines        'columnlines CDATA ""'
>
<!ENTITY % att-frame              'frame (none | solid | dashed) "none"'  >
<!ENTITY % att-framespacing        'framespacing CDATA "0.4 0.5"'
>
<!ENTITY % att-equalrows           'equalrows CDATA "true"'
>
<!ENTITY % att-equalcolumns         'equalcolumns CDATA "true"'     >

<!ENTITY % att-tableinfo           '%att-align;
                                                           %att-rowalign;
                                                           %att-columnalign;
                                                           %att-rowspacing;
                                                           %att-columnspacing;
                                                           %att-rowlines;
                                                           %att-columnlines;
                                                           %att-frame;
                                                           %att-framespacing;
                                                           %att-equalrows;

%att-equalcolumns;'               >

<!ENTITY % att-rowspan              'rowspan CDATA "1"'                     >
<!ENTITY % att-columnspan           'columnspan CDATA "1"'
>

<!ENTITY % att-rowalign              'rowalign (top | bottom | center |
baseline | axis) #IMPLIED'                          >
<!ENTITY % att-columnalign           'columnalign CDATA  #IMPLIED'
>

<!ENTITY % att-actiontype              'actiontype CDATA #IMPLIED'
>

<!ATTLIST mi        %att-fontinfo;
                                        %att-class-style;     >

<!ATTLIST mn        %att-fontinfo;
                                        %att-base;
                                        %att-class-style;                     >


<!ATTLIST mo        %att-fontinfo;
                                                %att-opinfo;
                                                %att-largeop;
                                                %att-movablelimits;
                                        %att-class-style;            >

<!ATTLIST mf       %att-fontinfo;
                                                %att-opinfo;
                                        %att-class-style;       >

<!ATTLIST mtext     %att-fontinfo;
                                        %att-class-style;     >

<!ATTLIST mspace    %att-sizeinfo;
                    %att-background;
                                        %att-class-style;       >

<!ATTLIST ms       %att-fontinfo;
                    lquote CDATA '"'
                    rquote CDATA '"'
                                        %att-class-style;          >

<!ATTLIST mstyle    %att-fontinfo;
                    %att-opinfo;
                    largeop CDATA "false"
                    movablelimits CDATA "false"
                    form CDATA #IMPLIED
                    lquote CDATA '"'
                    rquote CDATA '"'
                    %att-sizeinfo;
                    background CDATA #IMPLIED
                    linethickness CDATA "1"
                    scriptlevel CDATA #IMPLIED
                    displaystyle CDATA #IMPLIED
                    subscriptshift CDATA #IMPLIED
                    superscriptshift CDATA #IMPLIED
                    scriptsizemultiplier CDATA "0.71"
                    scriptminsize CDATA "8"
                    accent CDATA "false"
                    accentunder CDATA "false"
                    %att-tableinfo;
                    rowspan CDATA "1"
                    columnspan CDATA "1"
                                        %att-class-style;                      >

<!ATTLIST           merror       %att-class-style;   >
<!ATTLIST           mrow         %att-class-style;   >
<!ATTLIST           msqrt        %att-class-style;   >
<!ATTLIST           mroot        %att-class-style;   >

<!ATTLIST mphantom  %att-sizeinfo;
                                        %att-class-style;     >

<!ATTLIST mfrac     %att-linethickness;
                                        %att-class-style; >

<!ATTLIST msub      %att-subscriptshift;
                                        %att-class-style;             >

<!ATTLIST msup      %att-superscriptshift;
                                        %att-class-style;          >

<!ATTLIST msubsup   %att-subscriptshift;
                    %att-superscriptshift;
                                        %att-class-style;     >

<!ATTLIST mmultiscripts
                    %att-subscriptshift;
                    %att-superscriptshift;
                                        %att-class-style;          >


<!ATTLIST munder    %att-accentunder;
                                        %att-class-style;            >

<!ATTLIST mover     %att-accent;           >

<!ATTLIST munderover             %att-accent;
                                %att-accentunder;
                                        %att-class-style;                >

<!ATTLIST mtable  %att-tableinfo;
                                        %att-class-style;      >

<!ATTLIST mtr       %att-rowalign;
                    %att-columnalign;
                                        %att-class-style;
>

<!ATTLIST mtd      %att-rowalign;
                    %att-columnalign;
                    %att-rowspan;
                    %att-columnspan;
                                        %att-class-style;                 >

<!ATTLIST maction   %att-actiontype;
                                        %att-class-style;     >


<!-- Content tag element set -->
<!-- Define relations etc  -->

<!ENTITY % Verb "EQ|NEQ|GT|LT|GEQ|LEQ|IN|NOTIN|
                 SUBSET|NOTSUBSET|PRSUBSET|NOTPRSUBSET"    >

<!ELEMENT EQ          EMPTY       >
<!ELEMENT NEQ         EMPTY       >
<!ELEMENT GT          EMPTY       >
<!ELEMENT LT          EMPTY       >
<!ELEMENT GEQ         EMPTY       >
<!ELEMENT LEQ         EMPTY       >
<!ELEMENT IN          EMPTY       >
<!ELEMENT NOTIN       EMPTY       >
<!ELEMENT SUBSET      EMPTY       >
<!ELEMENT NOTSUBSET   EMPTY       >
<!ELEMENT PRSUBSET    EMPTY       >
<!ELEMENT NOTPRSUBSET EMPTY       >

<!ATTLIST           EQ           %att-class-style;   >
<!ATTLIST           NEQ          %att-class-style;   >
<!ATTLIST           GT           %att-class-style;   >
<!ATTLIST           LT           %att-class-style;   >
<!ATTLIST           GEQ          %att-class-style;   >
<!ATTLIST           LEQ          %att-class-style;   >
<!ATTLIST           IN           %att-class-style;   >
<!ATTLIST           NOTIN        %att-class-style;   >
<!ATTLIST           NOTSUBSET    %att-class-style;   >
<!ATTLIST           PRSUBSET     %att-class-style;   >
<!ATTLIST           NOTPRSUBSET          %att-class-style;   >

<!-- Define operators   -->

<!ENTITY % Op "PLUS|MINUS|TIMES|OVER|EXP|POWER |UNION|
               INTERSECT|TENDSTO| APPLY"                   >

<!ELEMENT MINUS       EMPTY       >
<!ELEMENT PLUS        EMPTY       >
<!ELEMENT TIMES       EMPTY       >
<!ELEMENT OVER        EMPTY       >
<!ELEMENT EXP         EMPTY       >
<!ELEMENT POWER       EMPTY       >
<!ELEMENT UNION       EMPTY       >
<!ELEMENT INTERSECT   EMPTY       >
<!ELEMENT TENDSTO     EMPTY       >
<!ELEMENT APPLY       EMPTY       >
<!ELEMENT DIV         EMPTY       >
<!ELEMENT REM         EMPTY       >

<!ATTLIST           MINUS        %att-class-style;   >
<!ATTLIST           PLUS         %att-class-style;   >
<!ATTLIST           TIMES        %att-class-style;   >
<!ATTLIST           OVER         %att-class-style;   >
<!ATTLIST           EXP          %att-class-style;   >
<!ATTLIST           POWER        %att-class-style;   >
<!ATTLIST           UNION        %att-class-style;   >
<!ATTLIST           INTERSECT %att-class-style;   >
<!ATTLIST           TENDSTO  %att-class-style;   >
<!ATTLIST           APPLY    %att-class-style;   >
<!ATTLIST           DIV          %att-class-style;   >
<!ATTLIST           REM          %att-class-style;   >

<!-- Define generic separators   -->

<!ELEMENT SEP         EMPTY       >
<!ELEMENT ST          EMPTY       >

<!ATTLIST           SEP          %att-class-style;   >
<!ATTLIST           ST           %att-class-style;   >

<!-- Define general functions   -->

<!ENTITY % FnGen "INT|PARTDIFF| TOTALDIFF|DIFF|INVERSE|
               MATRIXINVERSE |DETERMINANT|SUM|PRODUCT|LIMIT"   >

<!ELEMENT INT              EMPTY                >
<!ELEMENT PARTDIFF         EMPTY                >
<!ELEMENT TOTALDIFF        EMPTY                >
<!ELEMENT DIFF             EMPTY                >
<!ELEMENT INVERSE          EMPTY                >
<!ELEMENT MATRIXINVERSE    EMPTY                >
<!ELEMENT DETERMINANT      EMPTY                >
<!ELEMENT SUM              EMPTY                >
<!ELEMENT PRODUCT          EMPTY                >
<!ELEMENT LIMIT            EMPTY                >

<!ATTLIST INT        Type        CDATA   #IMPLIED

%att-class-style;   >

<!ATTLIST           PARTDIFF     %att-class-style;   >
<!ATTLIST           TOTALDIFF    %att-class-style;   >
<!ATTLIST           DIFF                 %att-class-style;   >
<!ATTLIST           INVERSE      %att-class-style;   >
<!ATTLIST           MATRIXINVERSE        %att-class-style;   >
<!ATTLIST           DETERMINANT          %att-class-style;   >
<!ATTLIST           SUM                  %att-class-style;   >
<!ATTLIST           PRODUCT      %att-class-style;   >
<!ATTLIST           LIMIT                %att-class-style;   >

<!-- Define trig functions                    -->

<!ENTITY % FnTrig  "SIN|COS|TAN|
                    SEC| COSEC| COT|
                    SINH| COSH| TANH|
                    SECH| COSECH| COTANH|
                    ARCSIN| ARCCOS| ARCTAN"     >

<!ELEMENT SIN         EMPTY       >
<!ELEMENT COS         EMPTY       >
<!ELEMENT TAN         EMPTY       >
<!ELEMENT SEC         EMPTY       >
<!ELEMENT COSEC       EMPTY       >
<!ELEMENT COT         EMPTY       >
<!ELEMENT SINH        EMPTY       >
<!ELEMENT COSH        EMPTY       >
<!ELEMENT TANH        EMPTY       >
<!ELEMENT SECH        EMPTY       >
<!ELEMENT COSECH      EMPTY       >
<!ELEMENT COTANH      EMPTY       >
<!ELEMENT ARCSIN      EMPTY       >
<!ELEMENT ARCCOS      EMPTY       >
<!ELEMENT ARCTAN      EMPTY       >

<!ATTLIST           SIN                  %att-class-style;   >
<!ATTLIST           COS                  %att-class-style;   >
<!ATTLIST           TAN                  %att-class-style;   >
<!ATTLIST           SEC                  %att-class-style;   >
<!ATTLIST           COSEC                %att-class-style;   >
<!ATTLIST           COT                  %att-class-style;   >
<!ATTLIST           SINH                 %att-class-style;   >
<!ATTLIST           COSH                 %att-class-style;   >
<!ATTLIST           TANH                 %att-class-style;   >
<!ATTLIST           SECH                 %att-class-style;   >
<!ATTLIST           COSECH               %att-class-style;   >
<!ATTLIST           COTANH               %att-class-style;   >
<!ATTLIST           ARCSIN               %att-class-style;   >
<!ATTLIST           ARCCOS               %att-class-style;   >
<!ATTLIST           ARCTAN               %att-class-style;   >

<!-- Define qualifier elements                        -->
<!ENTITY % qualif "LOWLIMIT|UPLIMIT|BVAR|DEGREE"        >

<!-- Define expressions with content                  -->
<!-- content model defined below                      -->

<!ENTITY % Fnc "MATRIXROW|VECTOR|INTERVAL|SET|
                MEDIAN| MODE|MOMENT|MEAN|SDIV|VAR|
                LOG|LN|MIN|MAX|FACTORIAL"                 >

<!-- Define  Semantic Mapping Tag Set -->
<!-- NB definition of XML-ANNOTATION needs to be #OTHER -->
<!-- to include elements from other namespaces -->

<!ELEMENT ANNOTATION  (#PCDATA)  >
<!ELEMENT XML-ANNOTATION  (#PCDATA)  >

<!ATTLIST           ANNOTATION           %att-class-style;   >
<!ATTLIST           XML-ANNOTATION      %att-class-style;   >

<!-- recursive definition for content of expressions                 -->
<!-- include presentation tag constructs at lowest level             -->
<!-- so presentation tokens hold PCDATA at leaf level -->

<!ENTITY % MathExpression "(%Presentation; |%Op;|
                     %FnTrig;|%qualif;|FN|EXPR|MATRIX|
                     %FnGen;| %Fnc;|SEMANTICS)*"          >

<!-- elements with content                       -->

<!ELEMENT MATRIX      (MATRIXROW)*          >
<!ELEMENT MATRIXROW   (%MathExpression;|SEP)*      >
<!ELEMENT VECTOR      (%MathExpression;|SEP)*      >

<!ATTLIST           MATRIX              %att-class-style;   >
<!ATTLIST           MATRIXROW   %att-class-style;   >
<!ATTLIST           VECTOR              %att-class-style;   >

<!ELEMENT INTERVAL    (%MathExpression;|SEP)*      >

<!ATTLIST INTERVAL      Closure     CDATA   #IMPLIED
                                        %att-class-style;   >

<!ELEMENT SET       (%MathExpression;|SEP)*       >

<!ATTLIST SET           %att-class-style;   >

<!ELEMENT MOMENT      (%MathExpression;)*               >
<!ELEMENT MEDIAN      (%MathExpression;)           >
<!ELEMENT MODE        (%MathExpression;)           >
<!ELEMENT MEAN        (%MathExpression;)           >
<!ELEMENT SDIV        (%MathExpression;)           >
<!ELEMENT VAR         (%MathExpression;)           >

<!ATTLIST           MOMENT      %att-class-style;   >
<!ATTLIST           MEDIAN      %att-class-style;   >
<!ATTLIST           MODE        %att-class-style;   >
<!ATTLIST           MEAN        %att-class-style;   >
<!ATTLIST           SDIV        %att-class-style;   >
<!ATTLIST           VAR         %att-class-style;   >

<!ELEMENT LOG         (%MathExpression;)           >
<!ELEMENT LN          (%MathExpression;)           >
<!ELEMENT MIN         (%MathExpression;)           >
<!ELEMENT MAX         (%MathExpression;)           >
<!ELEMENT FACTORIAL   (%MathExpression;)           >

<!ATTLIST           LOG         %att-class-style;   >
<!ATTLIST           LN          %att-class-style;   >
<!ATTLIST           MIN         %att-class-style;   >
<!ATTLIST           MAX         %att-class-style;   >
<!ATTLIST           FACTORIAL   %att-class-style;   >

<!--MathContent is a piece of maths of maths notation   -->

<!ENTITY % MathContent  "(%MathExpression;|E)*"        >

<!ELEMENT LOWLIMIT      (%MathContent;)                   >
<!ELEMENT UPLIMIT       (%MathContent;)                   >
<!ELEMENT BVAR          (%MathContent;)                   >
<!ELEMENT DEGREE        (%MathContent;)                   >

<!ATTLIST           LOWLIMIT    %att-class-style;   >
<!ATTLIST           UPLIMIT     %att-class-style;   >
<!ATTLIST           BVAR                %att-class-style;   >
<!ATTLIST           DEGREE              %att-class-style;   >

<!-- Define top level semantic container element        -->

<!ELEMENT SEMANTICS   ((%MathContent;),ANNOTATION*, XML-ANNOTATION*) >
<!ATTLIST SEMANTICS        SemType CDATA #IMPLIED
                                                        %att-class-style;
>

<!--Define Equations -->

<!ELEMENT E      ((%MathExpression;)?,
                     ((%Verb;),(%MathExpression;))+,
                     ( ST, (%MathContent))? )             >

<!ATTLIST  E            %att-class-style;   >

<!-- Define user-specifiable element                    -->

<!ELEMENT FN        (%Presentation;)                             >

<!ATTLIST  FN           %att-class-style;   >

<!-- Define  the  expression scope (bracketing) element -->

<!ELEMENT EXPR         (%MathExpression;| SEP)*        >

<!ATTLIST  EXPR         %att-class-style;   >

<!-- layout schema contain tokens, layout and content schema  -->

<!ELEMENT mstyle          (%MathContent;)*                      >
<!ELEMENT merror          (%MathContent;)*                      >
<!ELEMENT mphantom        (%MathContent;)*                      >
<!ELEMENT mrow            (%MathContent;)*                      >
<!ELEMENT mfrac           (%MathContent;)*                      >
<!ELEMENT msqrt           (%MathContent;)*                      >
<!ELEMENT mroot           (%MathContent;)*                      >
<!ELEMENT msub            (%MathContent;)*                      >
<!ELEMENT msup            (%MathContent;)*                      >
<!ELEMENT msuper          (%MathContent;)*                      >
<!ELEMENT msubsup         (%MathContent;)*                      >
<!ELEMENT mmultiscripts   (%MathContent;)*                      >
<!ELEMENT munder          (%MathContent;)*                      >
<!ELEMENT mover           (%MathContent;)*                      >
<!ELEMENT munderover      (%MathContent;)*                      >
<!ELEMENT mtable          (%MathContent;)*                      >
<!ELEMENT mtr             (%MathContent;)*                      >
<!ELEMENT mtd             (%MathContent;)*                      >
<!ELEMENT maction         (%MathContent;)*                      >


<!-- browser interface definition -->

<!ENTITY  %     att-type        'type CDATA #IMPLIED' >
<!ENTITY  %     att-name        'name CDATA #IMPLIED' >
<!ENTITY  %     att-height      'height CDATA #IMPLIED' >
<!ENTITY  %     att-width       'width CDATA #IMPLIED' >
<!ENTITY  %     att-baseline    'baseline CDATA #IMPLIED' >
<!ENTITY  %     att-overflow    'overflow (pan|scroll|elide|truncate|scale)
"pan"' >
<!ENTITY  %     att-altimg      'altimg CDATA #IMPLIED' >
<!ENTITY  %     att-alttext     'alttext CDATA #IMPLIED' >
<!ENTITY  %     att-macros      'macros CDATA #IMPLIED' >

<!ENTITY  %     att-browif      '%att-type;
                                                %att-name;
                                                %att-height;
                                                %att-width;
                                                %att-baseline;
                                                %att-overflow;
                                                %att-altimg;
                                                %att-alttext;
                                                %att-macros;'     >

<!-- the top level MATH and MATHDISP elements      -->
<!-- MATH and MATHDISP contain MathML encoded mathematics -->

<!ELEMENT MATH       (%MathContent;)    >
<!ELEMENT MATHDISP   (%MathContent;)    >

<!ATTLIST  MATH         %att-browif;
                                        %att-class-style;   >

<!ATTLIST  MATHDISP     %att-browif;
                                        %att-class-style;   >

<!-- the top level F and FD elements      -->
<!-- F and FD contain non-MathML encodings      -->

<!ELEMENT F             (#PCDATA)    >
<!ELEMENT FD            (#PCDATA)    >

<!ATTLIST  F            %att-browif;
                                        %att-class-style;   >

<!ATTLIST  FD           %att-browif;
                                        %att-class-style;   >

<!-- end of DTD fragment -->