[Mirrored from: http://www.w3.org/pub/WWW/TR/WD-math/appendixA.html]

Working Draft 15-May-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 (anticipated by July, 1997), this DTD fragment will 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 element 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                -->



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

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

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

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

<!-- presentation attribute definitions -->

<!ATTLIST mi        fontsize CDATA #IMPLIED
                    fontweight (plain | bold) "plain"
                    fontslant (upright | italic) "upright"
                    fontfamily CDATA   #IMPLIED
                    fontcolor CDATA   #IMPLIED
                    other CDATA   #IMPLIED
                                                   >

<!ATTLIST mn        fontsize CDATA #IMPLIED
                    fontweight (plain | bold) "plain"
                    fontslant (upright | italic) "upright"
                    fontfamily CDATA   #IMPLIED
                    fontcolor CDATA   #IMPLIED
                    other CDATA   #IMPLIED
                                                      >


<!ATTLIST mo        fontsize CDATA #IMPLIED
                    fontweight (plain | bold) "plain"
                    fontslant (upright | italic) "upright"
                    fontfamily CDATA   #IMPLIED
                    fontcolor CDATA   #IMPLIED
                    lspace CDATA  ".277777"
                    rspace CDATA   ".277777"
                    stretchy (true | false) "false"
                    symetric (sym | asym) "sym"
                    maxsize CDATA "infinity"
                    minsize CDATA "0"
                    form CDATA #IMPLIED
                    largeop CDATA "false"
                    movablelimits (movable | fixed) "fixed"
                    other CDATA   #IMPLIED
                                                      >

<!ATTLIST mf        fontsize CDATA #IMPLIED
                    fontweight (plain | bold) "plain"
                    fontslant (upright | italic) "upright"
                    fontfamily CDATA   #IMPLIED
                    lspace CDATA  "5/18"
                    rspace CDATA   "5/18"
                    stretchy (true | false) false
                    symetric (sym | asym) sym
                    maxsize CDATA "infinity"
                    minsize CDATA "0"
                    other CDATA   #IMPLIED
                                                     >

<!ATTLIST mtext     fontsize CDATA #IMPLIED
                    fontweight (plain | bold) "plain"
                    fontslant (upright | italic) "upright"
                    fontfamily CDATA   #IMPLIED
                    fontcolor CDATA   #IMPLIED
                    lspace CDATA  "5/18"
                    rspace CDATA   "5/18"
                    other CDATA   #IMPLIED
                                                     >

<!ATTLIST mspace    width CDATA "0"
                    height CDATA "0"
                    depth CDATA "0"
                    background CDATA #IMPLIED
                    other CDATA   #IMPLIED
                                                     >

<!ATTLIST ms        fontsize CDATA #IMPLIED
                    fontweight (plain | bold) "plain"
                    fontslant (upright | italic) "upright"
                    fontfamily CDATA   #IMPLIED
                    fontcolor CDATA   #IMPLIED
                    lquote CDATA '"'
                    rquote CDATA '"'
                    other CDATA   #IMPLIED
                                                     >

<!ATTLIST mstyle    fontsize CDATA #IMPLIED
                    fontweight (plain | bold) "plain"
                    fontslant (roman | italic) "roman"
                    fontfamily CDATA   #IMPLIED
                    fontcolor CDATA   #IMPLIED
                    lspace CDATA  ".277777"
                    rspace CDATA   ".277777"
                    stretchy CDATA "false"
                    symetric CDATA "true"
                    maxsize CDATA "infinity"
                    minsize CDATA "0"
                    largeop CDATA "false"
                    movablelimits CDATA "false"
                    form CDATA #IMPLIED
                    lquote CDATA '"'
                    rquote CDATA '"'
                    width CDATA "0"
                    height CDATA "0"
                    depth CDATA "0"
                    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"
                    rowalign CDATA "baseline"
                    columnalign CDATA "center"
                    rowspacing CDATA "1.0"
                    columnspacing CDATA "0.8"
                    rowlines CDATA ""
                    columnlines CDATA ""
                    frame (none | solid | dashed) "none"
                    framespacing CDATA "0.4 0.5"
                    equalrows CDATA "true"
                    equalcolumns CDATA "true"
                    rowspan CDATA "1"
                    columnspan CDATA "1"
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST           merror other CDATA   #IMPLIED   >
<!ATTLIST           mrow   other CDATA   #IMPLIED   >
<!ATTLIST           msqrt  other CDATA   #IMPLIED   >

<!ATTLIST mphantom  width CDATA "0"
                    height CDATA "0"
                    depth CDATA "0"
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST mfrac     linethickness CDATA "1"
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST msub      subscriptshift CDATA #IMPLIED
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST msup      superscriptshift CDATA #IMPLIED
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST msubsup
                    subscriptshift CDATA #IMPLIED
                    superscriptshift CDATA #IMPLIED
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST mmultiscripts
                    subscriptshift CDATA #IMPLIED
                    superscriptshift CDATA #IMPLIED
                    other CDATA   #IMPLIED
                                                       >


<!ATTLIST munder    accentunder CDATA "false"
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST mover     accent CDATA "false"
                    other CDATA   #IMPLIED
                                                       >
           
<!ATTLIST munderover
                    accent CDATA "false"
                    accentunder CDATA "false"
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST mtable    align (top | bottom | center | baseline | axis) "axis"
                    rowalign CDATA "baseline"
                    columnalign CDATA "center"
                    rowspacing CDATA "1.0"
                    columnspacing CDATA "0.8"
                    rowlines CDATA ""
                    columnlines CDATA ""
                    frame (none | solid | dashed) "none"
                    framespacing CDATA "0.4 0.5"
                    equalrows CDATA "true"
                    equalcolumns CDATA "true"
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST mtr       rowalign (top | bottom | center | baseline | axis) "axis"
                    columnalign CDATA "center"
                    other CDATA   #IMPLIED
                                                       >

<!ATTLIST mtd      rowalign (top | bottom | center | baseline | axis) "axis"
                    columnalign CDATA "center"
                    rowspan CDATA "1"
                    columnspan CDATA "1"
                    other CDATA   #IMPLIED
                                                       >


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

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

<!-- Define generic separators   -->

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

<!-- Define general functions   -->

<!ENTITY % FnGen "PARTDIFF| TOTALDIFF|DIFF|INVERSE|
               MATRIXINVERSE |DETERMINANT"   >

<!ELEMENT PARTDIFF         EMPTY                >
<!ELEMENT TOTALDIFF        EMPTY                >
<!ELEMENT DIFF             EMPTY                >
<!ELEMENT INVERSE          EMPTY                >
<!ELEMENT MATRIXINVERSE    EMPTY                >
<!ELEMENT DETERMINANT      EMPTY                >

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

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

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

<!ENTITY % Fnc "MATRIXROW|VECTOR|INTERVAL|SET|
                INT|SUM|PRODUCT|LIMIT|MEDIAN|
                MODE|MOMENT|MEAN|SDIV|VAR|
                LOG|LN|MIN|MAX|DIV|REM"                 >
                                              
<!-- Define Placeholder for the Semantic Mapping Tag Set -->

<!ENTITY % SemMap "SEMINFO"  >
<!ELEMENT SEMINFO - O EMPTY  >


<!-- recursive definition for content of expressions                 -->
<!-- include presentation tag constructs at lowest level             -->
<!-- so presentation tag constructs can be anywhere valid for PCDATA -->

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

<!ENTITY % MathExpression "(%MathExp;|%Fnc;)*"     >


<!-- elements with content                       -->

<!ELEMENT MATRIX      (MATRIXROW)*          >

<!ELEMENT INT         (%MathExp;)*          >
<!ELEMENT SUM         (%MathExp;)*          >
<!ELEMENT PRODUCT     (%MathExp;)*          >
<!ELEMENT LIMIT       (%MathExp;)*          >

<!ELEMENT MATRIXROW   (%MathExp;|SEP)*      >
<!ELEMENT VECTOR      (%MathExp;|SEP)*      >
<!ELEMENT INTERVAL    (%MathExp;|SEP)*      >

<!ELEMENT SET         (%MathExp;|ST)*       >

<!ELEMENT DIV         (%MathExp;|MOD)*      >
<!ELEMENT REM         (%MathExp;|MOD)*      >

<!ELEMENT MEDIAN      (%MathExp;)           >
<!ELEMENT MODE        (%MathExp;)           >
<!ELEMENT MEAN        (%MathExp;)           >
<!ELEMENT SDIV        (%MathExp;)           >
<!ELEMENT VAR         (%MathExp;)           >
<!ELEMENT LOG         (%MathExp;)           >
<!ELEMENT LN          (%MathExp;)           >
<!ELEMENT MIN         (%MathExp;)           >
<!ELEMENT MAX         (%MathExp;)           >

<!ATTLIST INTERVAL       Closure     CDATA   #IMPLIED     >
<!ATTLIST INT            Type        CDATA   #IMPLIED     >

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

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

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


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

<!ELEMENT SEMANTICS   - - ((%MathContent;),ST?, SEMINFO?) >
<!ATTLIST SEMANTICS        SemType CDATA #IMPLIED         >


<!--Define Equations and Equation Arrays -->

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

<!ATTLIST E     EqNoType (Number|NoNumber) Number
                id        ID               #IMPLIED       >
  
<!ELEMENT EA    - - (E*|EA*)+                             >

<!ATTLIST EA    EqNoType (NoNumber|One|All) "All"
                id       ID                 #IMPLIED      >


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

<!ELEMENT FN        - O EMPTY                             >

<!ATTLIST FN       Name     CDATA   #REQUIRED
                   Layout   CDATA   #IMPLIED              >


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

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

<!ATTLIST EXPR        Layout CDATA #IMPLIED               >


<!-- 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 msuper          (%MathContent;)*                      >
<!ELEMENT msubsup         (%MathContent;)*                      >
<!ELEMENT mmultiscripts   (%MathContent;)*                      >
<!ELEMENT munder          (%MathContent;)*                      >
<!ELEMENT mover           (%MathContent;)*                      >
<!ELEMENT munderover      (%MathContent;)*                      >
<!ELEMENT mtable          (%MathContent;)*                      >
<!ELEMENT mtr             (%MathContent;)*                      >

<!-- the MATH element itself.                                 -->
<!-- Note MathContent includes presentation tag 
     constructs, so they are here at the highest level        -->

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

<!-- end of DTD fragment -->