<!-- This is the ISO12083:1993 document type definition for Mathematics    -->

<!-- Copyright: (C) International Organization for Standardization 1993.
Permission to copy in any form is granted for use with conforming SGML
systems and applications as defined in ISO 8879:1986, provided this notice
is included in all copies.                                                 -->

<!-- ===================================================================== -->
<!--  PUBLIC DOCUMENT TYPE DEFINITION SUBSET                            -->
<!-- ===================================================================== -->

<!--
This DTD is included by the Book and Article DTDs of ISO12083:1993.
As it is a separate entity it may also be included by other DTDs.

Since there is no consensus on how to describe the semantics of formulas,
it only describes their presentational or visual structure. Since, however,
there is a strong need for such description (especially within the
print-disabled community), it is the recommended that the following
declaration be added where there is a requirement for a consistent,
standardized mechanism to carry semantic meanings for the SGML
elements declared throughout this part of this International Standard:

<!ENTITY % SDAMAP "SDAMAP   NAME    #IMPLIED"           >

and that the attribute represented by %SDAMAP; be made available for
all elements which may require a semantic association, or, in the simpler
case, be added to all elements in this DTD.                                -->



<!-- ===================================================================== -->
<!--  Parameter entities describing the possible contents of formulas.     -->
<!-- ===================================================================== -->

<!ENTITY % p.trans "bold|italic|sansser|typewrit|smallcap|roman"
                   -- character transformations                            -->
<!ENTITY % m.math "fraction|subform|sup|inf|top|bottom|middle|fence|mark|
   post|box|overline|undrline|radical|array|hspace|vspace|break|markref|
   #PCDATA" -- mathematical formula elements                               -->



<!-- ===================================================================== -->
<!-- Accessible Document and other Parameter Entities        
     If this DTD is not imbedded by a ISO12083:1993 Book or Article,
     the comment delimiters should be removed.                             -->
<!-- ===================================================================== -->

<!--ENTITY % SDAFORM      "SDAFORM   CDATA    #FIXED"                      -->
<!--ENTITY % SDARULE      "SDARULE   CDATA    #FIXED"                      -->
<!--ENTITY % SDAPREF      "SDAPREF   CDATA    #FIXED"                      -->
<!--ENTITY % SDASUFF      "SDASUFF   CDATA    #FIXED"                      -->
<!--ENTITY % SDASUSP      "SDASUSP   NAME     #FIXED"                      -->


<!-- ===================================================================== -->
<!-- This entity is for an attribute to indicate which alphabet is 
     used in the element (formula, dformula). This may be changed to 
     a notation attribute, where the notation could describe a 
     keyboard mapping. Modify the set as necessary.                 
     If this DTD is not imbedded by a ISO12083:1993 Book or Article,
     the comment delimiters should be removed.                             -->
<!-- ===================================================================== -->

<!--ENTITY % a.types "(latin|greek|cyrillic|hebrew|kanji) latin"           -->


<!-- ===================================================================== -->
<!--   Character transformations                                           -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT              EXPLANATIONS      -->
<!ELEMENT bold                 - -  (%p.trans;|#PCDATA)* -- bold           -->
<!ELEMENT italic               - -  (%p.trans;|#PCDATA)* -- italic         -->
<!ELEMENT sansser              - -  (%p.trans;|#PCDATA)* -- sans serif     -->
<!ELEMENT typewrit             - -  (%p.trans;|#PCDATA)* -- typewriter     -->
<!ELEMENT smallcap             - -  (%p.trans;|#PCDATA)* -- small caps     -->
<!ELEMENT roman                - -  (%p.trans;|#PCDATA)* -- roman          -->


<!-- ===================================================================== -->
<!--   Fractions                                                           -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT fraction             - -  (num, den)            -- fraction      -->
<!ELEMENT num                  - -  (%p.trans;|%m.math;)* -- numerator     -->
<!ELEMENT den                  - -  (%p.trans;|%m.math;)* -- denominator   -->
<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST fraction  shape      (built|case) #IMPLIED
                    align      (left|center|right)   
                                                center
                    style      (single|double|triple|dash|dot|bold|blank|none)
                                                single                       >


<!-- ===================================================================== -->
<!--   Superiors, inferiors, accents, over and under                       -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT sup                  - -  (%p.trans;|%m.math;)* -- superior      -->
<!ELEMENT inf                  - -  (%p.trans;|%m.math;)* -- inferior      -->
<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST sup       location   (pre|post)       post
                    arrange    (compact|stagger)
                                                compact                      >
<!ATTLIST inf       location   (pre|post) post
                    arrange    (compact|stagger) compact                     >


<!-- ===================================================================== -->
<!--   Embellishments                                                      -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT top                  - -  (%p.trans;|%m.math;)* 
                                                    -- top embellishment   -->
<!ELEMENT middle               - -  (%p.trans;|%m.math;)* 
                                                   -- middle, or "through" -->  
<!ELEMENT bottom               - -  (%p.trans;|%m.math;)* 
                                                   -- bottom embellishment -->
<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST top       align      (left|center|right) 
                                                center
                    sizeid     ID               #IMPLIED 
                                                -- to pass on the height   -->
<!ATTLIST middle    align      (left|center|right) 
                                                center
                    sizeid     ID               #IMPLIED       
                                                -- to pass on the height   -->
<!ATTLIST bottom    align      (left|center|right) 
                                                center
                    sizeid    ID               #IMPLIED 
                                                -- to pass on the height   -->

<!-- The subform element is defined later                                  -->


<!-- ===================================================================== -->
<!--   Fences, boxes, overlines and underlines                             -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT mark                 - O  EMPTY                                    >
<!ELEMENT fence                - -  (%p.trans;|%m.math;)* -- fence         -->
<!ELEMENT post                 - O  EMPTY                 -- post          -->
<!ELEMENT box                  - -  (%p.trans;|%m.math;)* -- box           -->
<!ELEMENT overline             - -  (%p.trans;|%m.math;)* -- overline      -->
<!ELEMENT undrline             - -  (%p.trans;|%m.math;)* -- underline     -->
<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST mark      id         ID               #REQUIRED                    >
<!ATTLIST fence     lpost      CDATA            "|" -- left post           --
                    rpost      CDATA            "|" -- right post          --
                    style      (single|double|triple|dash|dot|bold|blank|none) 
                                                single
                    sizeid     ID               #IMPLIED 
                                                -- to pass on the height   --
                    sizeref    IDREF            #IMPLIED 
                                                -- to pick up a height     -->
<!ATTLIST post      post       CDATA            "|"
                    style      (single|double|triple|dash|dot|bold|blank|none) 
                                                single
                    sizeid     ID               #IMPLIED 
                                                -- to pass on the height   --
                    sizeref    IDREF            #IMPLIED 
                                                -- to pick up a height     -->
<!ATTLIST box       style      (single|double|triple|dash|dot|bold|blank|none) 
                                                single                       >
<!ATTLIST overline  type       CDATA            "-" -- embellishment type --
                    style      (single|double|triple|dash|dot|bold|blank|none) 
                                                single
                    start      IDREF            #IMPLIED
                    end        IDREF            #IMPLIED                     >

<!ATTLIST undrline  type       CDATA            "_" -- embellishment type --
                    style      (single|double|triple|dash|dot|bold|blank|none) 
                                                single
                    start      IDREF            #IMPLIED
                    end        IDREF            #IMPLIED                     >


<!-- ===================================================================== -->
<!--   Labelled arrows                                                     -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT subform              - -  (%p.trans;|%m.math;)* -- base element  -->
<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST subform   sizeid     ID               #IMPLIED
                                                -- to pass on a width, or
                                                a height                   --
                    sizeref    IDREF            #IMPLIED
                                                -- to pick up a width      -->


<!-- ===================================================================== -->
<!--   Roots                                                               -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT radical              - -  (radix?, radicand) -- root or radical  -->
<!ELEMENT radix                - -  (%p.trans;|%m.math;)* -- radix         -->
<!ELEMENT radicand             O O  (%p.trans;|%m.math;)* -- radicand      -->


<!-- ===================================================================== -->
<!--   Arrays                                                              -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT array                - -  (arrayrow+|arraycol+) -- array         -->
<!ELEMENT arrayrow             - O  (arraycel+)      -- array row          -->
<!ELEMENT arraycol             - O  (arraycel+)      -- array column       -->
<!ELEMENT arraycel             - O  (%p.trans;|%m.math;)* -- array cell    -->

<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST array     rowalign   NMTOKENS         #IMPLIED -- row alignment  --
                    colalign   NMTOKENS         #IMPLIED -- column 
                                                                 alignment --
                    rowsep     NMTOKENS         #IMPLIED -- row separators --
                    colsep     NMTOKENS         #IMPLIED -- column 
                                                                separators -->


<!-- ===================================================================== -->
<!--   Spacing                                                             -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT hspace               - O EMPTY            -- horizontal spacing  -->
<!ELEMENT vspace               - O EMPTY            -- vertical spacing    -->
<!ELEMENT break                - O EMPTY            -- turn line, break    -->
<!ELEMENT markref              - O EMPTY            -- hmark reference     -->

<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST hspace    space      CDATA            "1 mm" 
                                                    -- units as required   -->
<!ATTLIST vspace    space      CDATA            "1 mm" 
                                                    -- units as required   -->
<!ATTLIST markref   refid      IDREF            #REQUIRED
                    direct     (hor|ver)        hor 
                                                 -- horizontal or vertical -->


<!-- ===================================================================== -->
<!--   Formula elements                                                    -->
<!-- ===================================================================== -->

<!--      ELEMENT              MIN  CONTENT               EXPLANATIONS     -->
<!ELEMENT formula              - -  (%p.trans;|%m.math;)* 
                                                        -- in-line formula -->
<!ELEMENT dformula             - -  (%p.trans;|%m.math;)* 
                                                        -- display formula -->
<!ELEMENT dformgrp             - -  (formula|dformula)+ 
                                                  -- display formula group -->

<!--      ELEMENT   NAME       VALUE            DEFAULT                    -->
<!ATTLIST formula   id         ID               #IMPLIED
                    alphabet   %a.types;
                    %SDAPREF;      "<?SDATRANS>Inline formula"  
                    %SDASUSP;       "SUSPEND"                                > 
<!ATTLIST dformula  id         ID               #IMPLIED
                    num        CDATA            #IMPLIED
                    align      (left|center|right) 
                                                center
                    alphabet   %a.types;
                    %SDAPREF;      "<?SDATRANS>Display formula"  
                    %SDASUSP;       "SUSPEND"                                >
<!ATTLIST dformgrp  id         ID               #IMPLIED
                    num        CDATA            #IMPLIED
                    align      (left|center|right) 
                                                center
                    %SDAPREF;      "<?SDATRANS>Display formula group"        >
