Lisez-moi S.V.P. 

A L'interprétation MathML

Table des matières : Le langage de balisage mathématique (MathML) version 2.0
Chapitre précédent : 8 Le modèle objet de document de MathML
Chapitre suivant : B La grammaire de validation du balisage de contenu

A.1 La déclaration DOCTYPE de MathML

Les documents MathML devraient être validés en utilisant la définition DTD XML de MathML, présentée aussi plus loin dans la Section A.6 [La définition de type de document (DTD) de MathML].

La définition DTD MathML 2.0 située à http://www.w3.org/Math/DTD/mathml2/mathml2.dtd est une mise à jour normative de celle donnée dans cette annexe.

La définition DTD XHTML + MathML en exemple a également été mise à jour ; remarquez que cette définition DTD ne constitue pas une part normative de la recommandation MathML 2.0, mais c'est un exemple de combinaison de MathML et de modularisation XHTML (cf. http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd). Comme décrit dans la documentation de la page de caractères du groupe de travail http://www.w3.org/Math/characters, la définition DTD XHTML + MathML a été (temporairement) paramétrée afin de résoudre les problèmes rencontrés par les navigateurs actuels avec les caractères du Plan 1.

Les documents utilisant cette définition DTD devraient contenir une déclaration de type de document (DOCTYPE) de la forme suivante :

<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd"
>

Si nécessaire, on peut changer l'adresse URI de la définition DTD pour celle d'une copie locale.

Si on se sert d'un préfixe d'espace de nommage, par exemple, tel que l'élément représentant le document soit le suivant :

<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML">
...
</mml:math>

Alors, on doit déclarer le préfixe dans le sous-ensemble local de la définition DTD de la manière suivante :

<!DOCTYPE mml:math 
    PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd" [
    <!ENTITY % MATHML.prefixed "INCLUDE">
    <!ENTITY % MATHML.prefix "mml">
]>

Utiliser ainsi des entités paramètres pour contrôler les préfixes d'espaces de nommage obéit aux conventions définies dans la section [La modularisation].

A.2 MathML en module d'une définition DTD

Normalement, une expression MathML ne constitue toutefois pas un document XML entier. MathML est conçu pour servir comme le fragment mathématique de langages de balisage plus grands. En particulier, il est prévu pour servir comme un module dans les documents balisés de la famille XHTML, comme défini dans la section [La modularisation]. Par commodité, une version de la définition DTD XHTML étendue de ce module MathML est également fournie en exemple concret. Cette version comprend toutes les déclarations nécessaires concentrées en un seul fichier (contrastant avec la version autonome de la définition DTD de MathML, laquelle appelle plusieurs fichiers pour les déclarations des entités, etc.). Pour utiliser cette définition DTD, le document devrait contenir la déclaration de type de document suivante :

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
           "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd"
>

Et, comme précédemment, on peut modifier l'adresse URI de la définition DTD pour celle d'une copie locale et on peut contrôler les préfixes d'espaces de nommage utilisés pour XHTML et MathML avec des entités paramètres.

A.3 Les déclarations des préfixes d'espace de nommage

Comme indiqué précédemment, il est parfois nécessaire, ou commode, d'utiliser les mécanismes décrits dans la section [La modularisation], afin d'attribuer un préfixe d'espace de nommage aux noms des éléments MathML. La définition DTD à suivre est conçue de manière à permettre cette utilisation. Si l'entité paramètre MATHML.prefixed est déclarée avec une valeur INCLUDE, en utilisant une déclaration telle que :

<!ENTITY % MATHML.prefixed "INCLUDE" >

Cette déclaration se trouvant dans le sous-ensemble local de la déclaration DOCTYPE ou bien dans le fichier DTD qui appelle la définition DTD de MathML, alors on devrait utiliser tous les éléments MathML avec un préfixe, par exemple <m:mrow>, <m:apply>, etc. Le préfixe par défaut est m:, mais on peut déclarer, en outre, un autre préfixe avec l'entité paramètre MathML.prefix. Par exemple :

<!ENTITY % MATHML.prefix   "math" >

Cette déclaration établirait math: comme préfixe de l'espace de nommage MathML.

Quoique la recommandation des espaces de nommage (cf. la section [Les espaces de nommage] décrit des mécanismes pour changer le préfixe à des points arbitraires dans le document, cette définition DTD n'offre pas cette flexibilité (probablement impossible à définir dans une définition DTD quelconque).

A.4 L'utilisation de MathML sans définition DTD

Si un fragment MathML est analysé sans définition DTD, en d'autres termes, s'il est analysé en tant que fragment XML bien formé, l'application de traitement est alors chargée d'interpréter les caractères blancs à l'extérieur des éléments atomiques comme étant non significatifs.

Remarquez aussi que, si la déclaration DOCTYPE n'indique pas de définition DTD, on ne peut pas utiliser d'appels d'entités (par exemple, pour désigner des caractères MathML par leur nom).

A.5 SGML

Si nécessaire, on peut valider les documents MathML en recourant à un analyseur SGML, tel que nsgmls, au lieu d'un analyseur XML validant. Auquel cas, on doit utiliser une déclaration SGML pour définir les contraintes XML à appliquer à l'analyseur SGML. Cf. la note à propos de SGML et XML.

Certains systèmes SGML anciens peuvent être incapables de traiter des fichiers appelant des caractères du Plan 1 (ceux dont les valeurs Unicode sont au-delà du code hexadécimal FFFF).

A.6 La définition de type de document (DTD) de MathML

Les déclarations d'entités de caractères sont regroupées à la fin de la définition DTD. Elles sont reliées au tableau de caractères de chaque jeu d'entité dans le chapitre 6 Les caractères, les entités et les fontes.

Des listes de l'ensemble MathML combiné des noms de caractère, rangées par nom ou par valeur Unicode, sont également disponibles.

Pour tenir compte des préfixes d'espaces de nommage XML, la définition DTD ne se réfère pas directement au nom d'un élément, tel que mrow, mais se réfère plutôt toujours au nom via une entité paramètre, telle que %mrow.qname;. Les définitions de ces paramètres se trouvent dans le fichier mathml2-qname-1.mod et n'apparaissent pas ici. Ce sont des déclarations simple, comme celle qui suit, une pour chaque élément MathML :

<!ENTITY % mrow.qname           "%MATHML.pfx;mrow" >

Voici le corps principal de la définition DTD. La définition DTD complète, ainsi que la définition DTD XHTML MathML, sont disponibles sous forme d'une archive Zip.

<!-- DTD de MathML 2.0 ....................................................... -->
<!-- fichier : mathml2.dtd
-->

<!-- DTD de MathML 2.0

     Voici le langage de balisage mathématique (MathML) 2.0, une
     application XML permettant de décrire une notation mathématique
     et de saisir à la fois sa structure et son contenu.

     Copyright 1998-2000 World Wide Web Consortium
        (Massachusetts Institute of Technology, Institut National de
         Recherche en Informatique et en Automatique, Keio University).
         Tous droits réservés.

     Permission d'utiliser, de copier, de modifier et de distribuer
     la définition DTD de XHTML 1.1 et la documentation qui l'accompagne
     est accordée ici pour tout usage et sans rémunération, indéfiniment,
     tant que la notice de copyright ci-dessus et ce paragraphe
     sont présents dans toute les copies. Les détenteurs des droits
     ne revendiquent aucune adéquation de la définition DTD
     pour une utilisation quelconque.

     Elle est fournie "en état" sans garantie expresse ni implicite.

        Révision :   $Id: parsing.xml,v 1.34 2000/12/14 13:08:43 davidc Exp $

     Cette entité est identifiable par les identificateurs PUBLIC et SYSTEM :

       PUBLIC "-//W3C//DTD MathML 2.0//EN"
       SYSTEM "mathml2.dtd"

     Révisions : Rédacteur et historique de révision en fin de fichier.
-->


<!-- Module des noms qualifiés MathML ............................... -->
<!ENTITY % mathml-qname.module "INCLUDE" >
<![%mathml-qname.module;[
<!ENTITY % mathml-qname.mod
     PUBLIC "-//W3C//ENTITIES MathML 2.0 Qualified Names 1.0//EN"
            "mathml2-qname-1.mod" >
%mathml-qname.mod;]]>

<!-- si la valeur de %NS.prefixed; est INCLUDE, inclure tous les attributs
        de l'espace de nommage (NS), sinon juste ceux associés à MathML.
-->
<![%NS.prefixed;[
<!ENTITY % MATHML.NamespaceDecl.attrib 
     "%NamespaceDecl.attrib;"
>
]]>
<!ENTITY % MATHML.NamespaceDecl.attrib 
     "%MATHML.xmlns.attrib;"
>

<!-- Attributs communs à tous les éléments  .......................... -->

<!ENTITY % MATHML.Common.attrib
     "%MATHML.NamespaceDecl.attrib;
      xlink:href   CDATA                    #IMPLIED
      %XLINK.prefix;:href   CDATA           #IMPLIED
      %XLINK.prefix;:type   CDATA           #IMPLIED
      class        CDATA                    #IMPLIED
      style        CDATA                    #IMPLIED
      id           ID                       #IMPLIED
      xref         IDREF                    #IMPLIED
      other        CDATA                    #IMPLIED"
      errata-E10
>

<!-- Jeu des éléments de présentation  ................................... -->

<!-- Définitions des attributs -->

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

<!-- Attributs des symboles à typographie distincte MathML2 -->

<!ENTITY % att-mathvariant
     "mathvariant     CDATA                    #IMPLIED" >
<!ENTITY % att-mathsize
     "mathsize     CDATA                    #IMPLIED" >
<!ENTITY % att-mathcolor
     "mathcolor     CDATA                    #IMPLIED" >
<!ENTITY % att-mathbackground
     "mathbackground     CDATA                    #IMPLIED" >

<!ENTITY % att-fontinfo
     "%att-fontsize;
      %att-fontweight;
      %att-fontstyle;
      %att-fontfamily;
      %att-color;
      %att-mathvariant;
      %att-mathsize;
      %att-mathcolor;
      %att-mathbackground;"
>

<!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-linebreak
     "linebreak    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-veryverythinmathspace           
     "veryverythinmathspace   CDATA         #IMPLIED" >
<!ENTITY % att-verythinmathspace           
     "verythinmathspace   CDATA             #IMPLIED" >
<!ENTITY % att-thinmathspace           
     "thinmathspace   CDATA                 #IMPLIED" >
<!ENTITY % att-mediummathspace           
     "mediummathspace   CDATA               #IMPLIED" >
<!ENTITY % att-thickmathspace           
     "thickmathspace   CDATA                #IMPLIED" >
<!ENTITY % att-verythickmathspace           
     "verythickmathspace   CDATA            #IMPLIED" >
<!ENTITY % att-veryverythickmathspace           
     "veryverythickmathspace   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" >

<![%MathMLstrict;[
  <!ENTITY % att-numalign
     "numalign     ( left | center | right )         #IMPLIED" >
  <!ENTITY % att-denomalign
     "denomalign   ( left | center | right )         #IMPLIED" >
]]>

<!ENTITY % att-rowalign      
     "rowalign     CDATA                    #IMPLIED" >
<!ENTITY % att-columnalign     
     "columnalign  CDATA                    #IMPLIED" >
<!ENTITY % att-columnwidth   
     "columnwidth  CDATA                    #IMPLIED" >
<!ENTITY % att-groupalign      
     "groupalign   CDATA                    #IMPLIED" >
<!ENTITY % att-alignmentscope 
     "alignmentscope CDATA                  #IMPLIED" >
<!ENTITY % att-rowspacing           
     "rowspacing   CDATA                    #IMPLIED" >
<!ENTITY % att-columnspacing      
     "columnspacing CDATA                   #IMPLIED" >
<!ENTITY % att-rowlines            
     "rowlines     CDATA                    #IMPLIED" >
<!ENTITY % att-columnlines        
     "columnlines  CDATA                    #IMPLIED" >
<!ENTITY % att-frame            
     "frame       ( none | solid | dashed ) #IMPLIED" >

<!ENTITY % att-side
     "side        ( left | right | leftoverlap | rightoverlap ) #IMPLIED" >

<!ENTITY % att-framespacing         
     "framespacing CDATA                    #IMPLIED" >
<!ENTITY % att-equalrows        
     "equalrows    CDATA                    #IMPLIED" >
<!ENTITY % att-equalcolumns         
     "equalcolumns CDATA                    #IMPLIED" >

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

<!ENTITY % att-name                 
     "name         CDATA                    #IMPLIED" >
<!ENTITY % att-alt              
     "alt          CDATA                    #IMPLIED" >
<!ENTITY % att-index           
     "index        CDATA                    #IMPLIED" >

<!ENTITY % att-bevelled       
     "bevelled      CDATA                    #IMPLIED" >

<!-- Schémas de présentation et leur contenu -->

<!ENTITY % ptoken                   
     "%mi.qname; | %mn.qname; | %mo.qname;
      | %mtext.qname; | %ms.qname;" >

<!ATTLIST %mi.qname;
      %MATHML.Common.attrib;
      %att-fontinfo;
>

<!ATTLIST %mn.qname;      
      %MATHML.Common.attrib; 
      %att-fontinfo;
>

<!ATTLIST %mo.qname;     
      %MATHML.Common.attrib; 
      %att-fontinfo;
      %att-opinfo;
>

<!ATTLIST %mtext.qname;  
      %MATHML.Common.attrib;
      %att-fontinfo;
>

<!ATTLIST %ms.qname;     
      %MATHML.Common.attrib;
      %att-fontinfo;
      %att-lquote;
      %att-rquote;
>

<!-- Schémas de présentation vides -->

<!ENTITY % petoken                  
     "%mspace.qname;" >
<!ELEMENT %mspace.qname;  EMPTY >

<!ATTLIST %mspace.qname; 
      %att-sizeinfo;
      %att-linebreak;
      %MATHML.Common.attrib;
>

<!-- Présentation : schémas généraux de disposition -->

<!ENTITY % pgenschema               
     "%mrow.qname; | %mfrac.qname; | %msqrt.qname; | %mroot.qname; 
      | %menclose.qname; | %mstyle.qname; | %merror.qname; 
      | %mpadded.qname; | %mphantom.qname; | %mfenced.qname;" >

<!ATTLIST %mrow.qname;        
      %MATHML.Common.attrib;
>

<!ATTLIST %mfrac.qname;     
      %MATHML.Common.attrib;
      %att-bevelled;
      %att-linethickness;
      %att-numalign;
      %att-denomalign;
>

<!ATTLIST %msqrt.qname;     
      %MATHML.Common.attrib;
>

<!ATTLIST %menclose.qname;  
      %MATHML.Common.attrib;
      notation CDATA 'longdiv' >

<!ATTLIST %mroot.qname;    
      %MATHML.Common.attrib;
>

<!ATTLIST %mstyle.qname;  
      %MATHML.Common.attrib;
      %att-fontinfo;
      %att-opinfo;
      %att-lquote;
      %att-rquote;
      %att-linethickness;
      %att-scriptlevel;
      %att-scriptsizemultiplier;
      %att-scriptminsize;
      %att-background;
      %att-veryverythinmathspace;
      %att-verythinmathspace;
      %att-thinmathspace;
      %att-mediummathspace;
      %att-thickmathspace;
      %att-verythickmathspace;
      %att-veryverythickmathspace;
      %att-open;
      %att-close;
      %att-separators;
      %att-subscriptshift;
      %att-superscriptshift;
      %att-accentunder;
      %att-tableinfo;
      %att-rowspan;
      %att-columnspan;
      %att-edge;
      %att-actiontype;
      %att-selection;
>

<!ATTLIST %merror.qname;   
      %MATHML.Common.attrib;
>

<!ATTLIST %mpadded.qname;     
      %MATHML.Common.attrib;
      %att-sizeinfo;
      %att-lspace;
>

<!ATTLIST %mphantom.qname;      
      %MATHML.Common.attrib;
>

<!ATTLIST %mfenced.qname;     
      %MATHML.Common.attrib;
      %att-open;
      %att-close;
      %att-separators;
>

<!-- Schémas de diposition de présentation : écritures et limites -->

<!ENTITY % pscrschema               
     "%msub.qname; | %msup.qname; | %msubsup.qname; | %munder.qname; 
      | %mover.qname; | %munderover.qname; | %mmultiscripts.qname;" >

<!ATTLIST %msub.qname;      
      %MATHML.Common.attrib;
      %att-subscriptshift;
>

<!ATTLIST %msup.qname;         
      %MATHML.Common.attrib;
      %att-superscriptshift;
>

<!ATTLIST %msubsup.qname;    
      %MATHML.Common.attrib;
      %att-subscriptshift;
      %att-superscriptshift;
>

<!ATTLIST %munder.qname;   
      %MATHML.Common.attrib;
      %att-accentunder;
>

<!ATTLIST %mover.qname;   
      %MATHML.Common.attrib;
      %att-accent;
>

<!ATTLIST %munderover.qname;   
      %MATHML.Common.attrib;
      %att-accent;
      %att-accentunder;
>

<!ATTLIST %mmultiscripts.qname;   
      %MATHML.Common.attrib;
      %att-subscriptshift;
      %att-superscriptshift;
>

<!-- Schémas de disposition de présentation : éléments vides des écritures -->

<!ENTITY % pscreschema              
     "%mprescripts.qname; | %none.qname;" >

<!ELEMENT %mprescripts.qname;  EMPTY >
<!ATTLIST %mprescripts.qname;   
      %MATHML.xmlns.attrib; >

<!ELEMENT %none.qname;  EMPTY >
<!ATTLIST %none.qname;    
      %MATHML.xmlns.attrib; >

<!-- Schémas de disposition de présentation : tables -->

<!ENTITY % ptabschema               
     "%mtable.qname; | %mtr.qname; | %mlabeledtr.qname; | %mtd.qname;" >

<!ATTLIST %mtable.qname;
      %MATHML.Common.attrib;
      %att-tableinfo;
>

<!ATTLIST %mtr.qname;    
      %MATHML.Common.attrib;
      %att-rowalign;
      %att-columnalign;
      %att-groupalign;
>

<!ATTLIST %mlabeledtr.qname;  
      %MATHML.Common.attrib;
      %att-rowalign;
      %att-columnalign;
      %att-groupalign;
>

<!ATTLIST %mtd.qname;   
      %MATHML.Common.attrib;
      %att-rowalign;
      %att-columnalign;
      %att-groupalign;
      %att-rowspan;
      %att-columnspan;
>

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

<!-- Schémas de disposition de présentation vides -->

<!ENTITY % peschema                 
     "%maligngroup.qname; | %malignmark.qname;" >

<!ELEMENT %malignmark.qname;  EMPTY >

<!ATTLIST %malignmark.qname;  
      %att-edge; >

<!ELEMENT %maligngroup.qname;  EMPTY >
<!ATTLIST %maligngroup.qname;  
      %MATHML.Common.attrib;
      %att-groupalign;
>


<!ELEMENT %mglyph.qname;  EMPTY >
<!ATTLIST %mglyph.qname;    
      %att-alt;
      %att-fontfamily;
      %att-index; >

<!-- Schémas d'action de présentation -->

<!ENTITY % pactions                 
     "%maction.qname;" >
<!ATTLIST %maction.qname;    
      %MATHML.Common.attrib;
      %att-actiontype;
      %att-selection;
>

<!-- L'entité de substitution suivante dans des
        structures de contenu exclut les éléments
        non valides comme expressions.
-->

<!ENTITY % PresInCont               
     "%ptoken; | %petoken; |
      %plschema; | %peschema; | %pactions;" >

<!-- Entité de présentation : toutes les structures de présentation -->

<!ENTITY % Presentation             
     "%ptoken; | %petoken; | %pscreschema; |
      %plschema; | %peschema; | %pactions;">

<!-- Jeu des éléments de contenu  ........................................ -->

<!-- Définitions des attributs -->

<!ENTITY % att-base                 
     "base         CDATA                    '10'" >
<!ENTITY % att-closure              
     "closure      CDATA                    'closed'" >
<!ENTITY % att-definition           
     "definitionURL CDATA                   ''" >
<!ENTITY % att-encoding             
     "encoding     CDATA                    ''" >
<!ENTITY % att-nargs             
     "nargs        CDATA                    '1'" >
<!ENTITY % att-occurrence           
     "occurrence   CDATA                    'function-model'" >
<!ENTITY % att-order   
     "order        CDATA                    'numeric'" >
<!ENTITY % att-scope                
     "scope        CDATA                    'local'" >
<!ENTITY % att-type                 
     "type         CDATA                    #IMPLIED" >

<!-- Éléments de contenu : nœuds terminaux -->

<!ENTITY % ctoken               
     "%csymbol.qname; | %ci.qname; | %cn.qname;" >

<!ATTLIST %ci.qname;     
      %MATHML.Common.attrib;
      %att-type;
      %att-definition;
      %att-encoding;
>

<!ATTLIST %csymbol.qname;   
      %MATHML.Common.attrib;
      %att-encoding;
      %att-type;
      %att-definition;
>

<!ATTLIST %cn.qname;    
      %MATHML.Common.attrib;
      %att-type;
      %att-base;
      %att-definition;
      %att-encoding;
>

<!-- Éléments de contenu : spéciaux -->

<!ENTITY % cspecial                 
     "%apply.qname; | %reln.qname; |
      %lambda.qname;" >

<!ATTLIST %apply.qname;   
      %MATHML.Common.attrib;
>

<!ATTLIST %reln.qname;   
      %MATHML.Common.attrib;
>

<!ATTLIST %lambda.qname;      
      %MATHML.Common.attrib;
>

<!-- Éléments de contenu : autres -->

<!ENTITY % cother                   
     "%condition.qname; | %declare.qname; | %sep.qname;" >

<!ATTLIST %condition.qname;     
      %MATHML.Common.attrib;
>

<!ATTLIST %declare.qname;    
      %MATHML.Common.attrib;
      %att-type;
      %att-scope;
      %att-nargs;
      %att-occurrence;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %sep.qname;  EMPTY >
<!ATTLIST %sep.qname;         
      %MATHML.xmlns.attrib; >

<!-- Éléments de contenu : liaison sémantique -->

<!ENTITY % csemantics               
     "%semantics.qname; | %annotation.qname; |
      %annotation-xml.qname;" >

<!ATTLIST %semantics.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ATTLIST %annotation.qname;  
      %MATHML.Common.attrib;
      %att-encoding;
>

<!ATTLIST %annotation-xml.qname; 
      %MATHML.Common.attrib;
      %att-encoding;
>

<!-- Éléments de contenu : constructeurs -->

<!ENTITY % cconstructor             
     "%interval.qname; | %list.qname; | %matrix.qname; 
      | %matrixrow.qname; | %set.qname; | %vector.qname;
      | %piecewise.qname; " >

<!ATTLIST %interval.qname;   
      %MATHML.Common.attrib;
      %att-closure;
>

<!ATTLIST %set.qname;        
      %MATHML.Common.attrib;
      %att-type;
>

<!ATTLIST %list.qname;          
      %MATHML.Common.attrib;
      %att-order;
>

<!ATTLIST %vector.qname;    
      %MATHML.Common.attrib;
>

<!ATTLIST %matrix.qname;    
      %MATHML.Common.attrib;
>

<!ATTLIST %matrixrow.qname;     
      %MATHML.Common.attrib;
>

<!ATTLIST %piecewise.qname;   
      %MATHML.Common.attrib;
>

<!ATTLIST %piece.qname;   
      %MATHML.Common.attrib;
>

<!ATTLIST %otherwise.qname;   
      %MATHML.Common.attrib;
>


<!-- Éléments de contenu : symboles -->

<!ENTITY % c0ary              
    "%integers.qname; |
     %reals.qname; |
     %rationals.qname; |
     %naturalnumbers.qname; |
     %complexes.qname; |
     %primes.qname; |
     %exponentiale.qname; |
     %imaginaryi.qname; |
     %notanumber.qname; |
     %true.qname; |
     %false.qname; |
     %emptyset.qname; |
     %pi.qname; |
     %eulergamma.qname; |
     %infinity.qname;" >

<!ELEMENT %integers.qname;  EMPTY >
<!ATTLIST %integers.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %reals.qname;  EMPTY >
<!ATTLIST %reals.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %rationals.qname;  EMPTY >
<!ATTLIST %rationals.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %naturalnumbers.qname;  EMPTY >
<!ATTLIST %naturalnumbers.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %complexes.qname;  EMPTY >
<!ATTLIST %complexes.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %primes.qname;  EMPTY >
<!ATTLIST %primes.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %exponentiale.qname;  EMPTY >
<!ATTLIST %exponentiale.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %imaginaryi.qname;  EMPTY >
<!ATTLIST %imaginaryi.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %notanumber.qname;  EMPTY >
<!ATTLIST %notanumber.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %true.qname;  EMPTY >
<!ATTLIST %true.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %false.qname;  EMPTY >
<!ATTLIST %false.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %emptyset.qname;  EMPTY >
<!ATTLIST %emptyset.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %pi.qname;  EMPTY >
<!ATTLIST %pi.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %eulergamma.qname;  EMPTY >
<!ATTLIST %eulergamma.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %infinity.qname;  EMPTY >
<!ATTLIST %infinity.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!-- Éléments de contenu : opérateurs -->

<!ENTITY % cfuncop1ary              
     "%inverse.qname; | %ident.qname;|
      %domain.qname; |  %codomain.qname; | 
      %image.qname;  " >

<!ELEMENT %inverse.qname;  EMPTY >
<!ATTLIST %inverse.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %domain.qname;  EMPTY >
<!ATTLIST %domain.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %codomain.qname;  EMPTY >
<!ATTLIST %codomain.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %image.qname;  EMPTY >
<!ATTLIST %image.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>



<!ENTITY % cfuncopnary              
     "%fn.qname; | %compose.qname;" >

<!ATTLIST %fn.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %ident.qname;  EMPTY >
<!ATTLIST %ident.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %compose.qname;  EMPTY >
<!ATTLIST %compose.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % carithop1ary             
     "%abs.qname; | %conjugate.qname; | %exp.qname; | %factorial.qname; |
      %arg.qname; | %real.qname; | %imaginary.qname; |
      %floor.qname; | %ceiling.qname;" >

<!ELEMENT %exp.qname;  EMPTY >
<!ATTLIST %exp.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %abs.qname;  EMPTY >
<!ATTLIST %abs.qname;        
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arg.qname;  EMPTY >
<!ATTLIST %arg.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %real.qname;  EMPTY >
<!ATTLIST %real.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %imaginary.qname;  EMPTY >
<!ATTLIST %imaginary.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %conjugate.qname;  EMPTY >
<!ATTLIST %conjugate.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %factorial.qname;  EMPTY >
<!ATTLIST %factorial.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>


<!ELEMENT %floor.qname;  EMPTY >
<!ATTLIST %floor.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %ceiling.qname;  EMPTY >
<!ATTLIST %ceiling.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>
<!ENTITY % carithop1or2ary          
     "%minus.qname;" >

<!ELEMENT %minus.qname;  EMPTY >
<!ATTLIST %minus.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % carithop2ary             
     "%quotient.qname; | %divide.qname; | %power.qname; | %rem.qname;" >

<!ELEMENT %quotient.qname;  EMPTY >
<!ATTLIST %quotient.qname;       
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %divide.qname;  EMPTY >
<!ATTLIST %divide.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %power.qname;  EMPTY >
<!ATTLIST %power.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %rem.qname;  EMPTY >
<!ATTLIST %rem.qname;       
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % carithopnary             
     "%plus.qname; | %times.qname; | %max.qname; 
      | %min.qname; | %gcd.qname; | %lcm.qname;" >

<!ELEMENT %plus.qname;  EMPTY >
<!ATTLIST %plus.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %max.qname;  EMPTY >
<!ATTLIST %max.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %min.qname;  EMPTY >
<!ATTLIST %min.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %times.qname;  EMPTY >
<!ATTLIST %times.qname;      
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %gcd.qname;  EMPTY >
<!ATTLIST %gcd.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %lcm.qname;  EMPTY >
<!ATTLIST %lcm.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % carithoproot             
     "%root.qname;" >

<!ELEMENT %root.qname;  EMPTY >
<!ATTLIST %root.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % clogicopquant            
     "%exists.qname; | %forall.qname;" >

<!ELEMENT %exists.qname;  EMPTY >
<!ATTLIST %exists.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %forall.qname;  EMPTY >
<!ATTLIST %forall.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % clogicopnary             
     "%and.qname; | %or.qname; | %xor.qname;" >

<!ELEMENT %and.qname;  EMPTY >
<!ATTLIST %and.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %or.qname;  EMPTY >
<!ATTLIST %or.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %xor.qname;  EMPTY >
<!ATTLIST %xor.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % clogicop1ary             
     "%not.qname;" >

<!ELEMENT %not.qname;  EMPTY >
<!ATTLIST %not.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % clogicop2ary             
     "%implies.qname;" >

<!ELEMENT %implies.qname;  EMPTY >
<!ATTLIST %implies.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % ccalcop                  
     "%log.qname; | %int.qname; | %diff.qname; | %partialdiff.qname; |
      %divergence.qname; | %grad.qname; | %curl.qname; | %laplacian.qname;" >

<!ELEMENT %divergence.qname;  EMPTY >
<!ATTLIST %divergence.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %grad.qname;  EMPTY >
<!ATTLIST %grad.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %curl.qname;  EMPTY >
<!ATTLIST %curl.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %laplacian.qname;  EMPTY >
<!ATTLIST %laplacian.qname;     
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %log.qname;  EMPTY >
<!ATTLIST %log.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %int.qname;  EMPTY >
<!ATTLIST %int.qname;    
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %diff.qname;  EMPTY >
<!ATTLIST %diff.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %partialdiff.qname;  EMPTY >
<!ATTLIST %partialdiff.qname;  
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % ccalcop1ary              
     "%ln.qname;" >

<!ELEMENT %ln.qname;  EMPTY >
<!ATTLIST %ln.qname;   
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % csetop1ary               
     "%card.qname;" >

<!ELEMENT %card.qname;  EMPTY >
<!ATTLIST %card.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % csetop2ary               
     "%setdiff.qname;" >

<!ELEMENT %setdiff.qname;  EMPTY >
<!ATTLIST %setdiff.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % csetopnary               
     "%union.qname; | %intersect.qname; | %cartesianproduct.qname; " >

<!ELEMENT %union.qname;  EMPTY >
<!ATTLIST %union.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %intersect.qname;  EMPTY >
<!ATTLIST %intersect.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %cartesianproduct.qname;  EMPTY >
<!ATTLIST %cartesianproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % cseqop                   
     "%sum.qname; | %product.qname; | %limit.qname;" >

<!ELEMENT %sum.qname;  EMPTY >
<!ATTLIST %sum.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %product.qname;  EMPTY >
<!ATTLIST %product.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %limit.qname;  EMPTY >
<!ATTLIST %limit.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % ctrigop                  
     "%sin.qname; | %cos.qname; | %tan.qname; 
      | %sec.qname; | %csc.qname; | %cot.qname; 
      | %sinh.qname; | %cosh.qname; | %tanh.qname; 
      | %sech.qname; | %csch.qname; | %coth.qname; 
      | %arcsin.qname; | %arccos.qname; | %arctan.qname;
      | %arccosh.qname; | %arccot.qname; | %arccoth.qname;
      | %arccsc.qname; | %arccsch.qname; | %arcsec.qname;
      | %arcsech.qname; | %arcsinh.qname; | %arctanh.qname;
      " >

<!ELEMENT %sin.qname;  EMPTY >
<!ATTLIST %sin.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %cos.qname;  EMPTY >
<!ATTLIST %cos.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %tan.qname;  EMPTY >
<!ATTLIST %tan.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %sec.qname;  EMPTY >
<!ATTLIST %sec.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %csc.qname;  EMPTY >
<!ATTLIST %csc.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %cot.qname;  EMPTY >
<!ATTLIST %cot.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %sinh.qname;  EMPTY >
<!ATTLIST %sinh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %cosh.qname;  EMPTY >
<!ATTLIST %cosh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %tanh.qname;  EMPTY >
<!ATTLIST %tanh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %sech.qname;  EMPTY >
<!ATTLIST %sech.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %csch.qname;  EMPTY >
<!ATTLIST %csch.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %coth.qname;  EMPTY >
<!ATTLIST %coth.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arcsin.qname;  EMPTY >
<!ATTLIST %arcsin.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arccos.qname;  EMPTY >
<!ATTLIST %arccos.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arctan.qname;  EMPTY >
<!ATTLIST %arctan.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arccosh.qname;  EMPTY >
<!ATTLIST %arccosh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>


<!ELEMENT %arccot.qname;  EMPTY >
<!ATTLIST %arccot.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arccoth.qname;  EMPTY >
<!ATTLIST %arccoth.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>


<!ELEMENT %arccsc.qname;  EMPTY >
<!ATTLIST %arccsc.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arccsch.qname;  EMPTY >
<!ATTLIST %arccsch.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arcsec.qname;  EMPTY >
<!ATTLIST %arcsec.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arcsech.qname;  EMPTY >
<!ATTLIST %arcsech.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arcsinh.qname;  EMPTY >
<!ATTLIST %arcsinh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %arctanh.qname;  EMPTY >
<!ATTLIST %arctanh.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>



<!ENTITY % cstatopnary              
     "%mean.qname; | %sdev.qname; |
      %variance.qname; | %median.qname; |
      %mode.qname;" >

<!ELEMENT %mean.qname;  EMPTY >
<!ATTLIST %mean.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %sdev.qname;  EMPTY >
<!ATTLIST %sdev.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %variance.qname;  EMPTY >
<!ATTLIST %variance.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %median.qname;  EMPTY >
<!ATTLIST %median.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %mode.qname;  EMPTY >
<!ATTLIST %mode.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % cstatopmoment            
     "%moment.qname;" >

<!ELEMENT %moment.qname;  EMPTY >
<!ATTLIST %moment.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % clalgop1ary              
     "%determinant.qname; |
      %transpose.qname;" >

<!ELEMENT %determinant.qname;  EMPTY >
<!ATTLIST %determinant.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %transpose.qname;  EMPTY >
<!ATTLIST %transpose.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % clalgop2ary              
     "%vectorproduct.qname; 
      | %scalarproduct.qname; 
      | %outerproduct.qname;" >

<!ELEMENT %vectorproduct.qname;  EMPTY >
<!ATTLIST %vectorproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %scalarproduct.qname;  EMPTY >
<!ATTLIST %scalarproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %outerproduct.qname;  EMPTY >
<!ATTLIST %outerproduct.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % clalgopnary              
     "%selector.qname;" >

<!ELEMENT %selector.qname;  EMPTY >
<!ATTLIST %selector.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!-- Éléments de contenu : relations -->

<!ENTITY % cgenrel2ary             
     "%neq.qname; | %factorof.qname;" >

<!ELEMENT %neq.qname;  EMPTY >
<!ATTLIST %neq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %factorof.qname;  EMPTY >
<!ATTLIST %factorof.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % cgenrelnary              
     "%eq.qname; | %leq.qname; | %lt.qname; | %geq.qname; 
      | %gt.qname;| %equivalent.qname; | %approx.qname;" >

<!ELEMENT %eq.qname;  EMPTY >
<!ATTLIST %eq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %equivalent.qname;  EMPTY >
<!ATTLIST %equivalent.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %approx.qname;  EMPTY >
<!ATTLIST %approx.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %gt.qname;  EMPTY >
<!ATTLIST %gt.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %lt.qname;  EMPTY >
<!ATTLIST %lt.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %geq.qname;  EMPTY >
<!ATTLIST %geq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %leq.qname;  EMPTY >
<!ATTLIST %leq.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % csetrel2ary              
     "%in.qname; | %notin.qname; | %notsubset.qname; | %notprsubset.qname;" >

<!ELEMENT %in.qname;  EMPTY >
<!ATTLIST %in.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %notin.qname;  EMPTY >
<!ATTLIST %notin.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %notsubset.qname;  EMPTY >
<!ATTLIST %notsubset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %notprsubset.qname;  EMPTY >
<!ATTLIST %notprsubset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % csetrelnary       
     "%subset.qname; | %prsubset.qname;" >

<!ELEMENT %subset.qname;  EMPTY >
<!ATTLIST %subset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ELEMENT %prsubset.qname;  EMPTY >
<!ATTLIST %prsubset.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
>

<!ENTITY % cseqrel2ary              
     "%tendsto.qname;" >

<!ELEMENT %tendsto.qname;  EMPTY >
<!ATTLIST %tendsto.qname;
      %MATHML.Common.attrib;
      %att-definition;
      %att-encoding;
      %att-type;
>

<!-- Éléments de contenu : quantificateurs -->

<!ENTITY % cquantifier            
     "%lowlimit.qname; | %uplimit.qname; | %bvar.qname; 
      | %degree.qname; | %logbase.qname;
      | %momentabout.qname; | %domainofapplication.qname; " >

<!ATTLIST %lowlimit.qname;
      %MATHML.Common.attrib;
>

<!ATTLIST %uplimit.qname;
      %MATHML.Common.attrib;
>

<!ATTLIST %bvar.qname;
      %MATHML.Common.attrib;
>

<!ATTLIST %degree.qname;
      %MATHML.Common.attrib;
>

<!ATTLIST %logbase.qname;
      %MATHML.Common.attrib;
>

<!ATTLIST %momentabout.qname;
      %MATHML.Common.attrib;
>

<!ATTLIST %domainofapplication.qname;
      %MATHML.Common.attrib;
>

<!-- Groupes d'opérateurs -->

<!ENTITY % cop1ary                  
     "%cfuncop1ary; | %carithop1ary; | %clogicop1ary; |
      %ccalcop1ary; | %ctrigop; | %clalgop1ary; |
      %csetop1ary;" >

<!ENTITY % cop2ary                  
     "%carithop2ary; | %clogicop2ary;| %clalgop2ary; | %csetop2ary;" >

<!ENTITY % copnary                  
     "%cfuncopnary; | %carithopnary; | %clogicopnary; |
      %csetopnary; | %cstatopnary; | %clalgopnary;" >

<!ENTITY % copmisc                  
     "%carithoproot; | %carithop1or2ary; | %ccalcop; |
      %cseqop; | %cstatopmoment; | %clogicopquant;" >

<!-- Groupes de relation -->

<!ENTITY % crel2ary                 
     "%cgenrel2ary; | %csetrel2ary; | %cseqrel2ary;" >

<!ENTITY % crelnary                 
     "%cgenrelnary; | %csetrelnary;" >

<!-- Structures de contenu : toutes -->

<!ENTITY % Content                  
     "%ctoken; | %cspecial; | %cother; | %csemantics; | %c0ary;
      | %cconstructor; | %cquantifier; | %cop1ary; | %cop2ary; 
      | %copnary; |%copmisc; | %crel2ary; | %crelnary;" >

<!-- Structures de contenu de substitution dans les structures de présentation -->

<!ENTITY % ContInPres               
     "%ci.qname; |%csymbol.qname;| %cn.qname; | %c0ary; |
      %apply.qname; | %fn.qname; |
      %lambda.qname; | %reln.qname; |
      %cconstructor; |
      %semantics.qname; |%declare.qname;" >

<!-- ............................................................. -->
<!-- Définition récursive du contenu des expressions.
     Inclut les structures de présentation au niveau le plus bas,
     pour que les schémas de disposition de présentation
     contiennent les éléments de présentation ou de contenu.
     Inclut les structures de contenu au niveau le plus bas,
     afin que les éléments de contenu contiennent des valeurs
     de type PCDATA ou des éléments de présentation de niveau terminal
     (pour les éléments remplaçables admis dans le contexte)
-->

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

<!-- Éléments de type PCDATA ou caractère MathML -->
<!ENTITY % MathMLCharacters         
     "#PCDATA | %mglyph.qname; " >

<!-- Éléments de contenu : atomes                       -->
<!-- (peuvent contenir des structures de présentation incorporées) -->

<!ELEMENT %ci.qname;                 (%MathMLCharacters; | %PresInCont;)* >
<!ELEMENT %csymbol.qname;            (%MathMLCharacters; | %PresInCont;)* >
<!ELEMENT %cn.qname;                 (%MathMLCharacters; | %sep.qname; | %PresInCont;)* >

<!-- Éléments de contenu : spéciaux -->

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

<!-- Éléments de contenu : autres -->

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

<!-- Éléments de contenu : sémantiques -->

<!ELEMENT %semantics.qname;          (%ContentExpression;) >
<!ENTITY % Annotation.content  "( #PCDATA )" >
<!ELEMENT %annotation.qname;         %Annotation.content; >

<!ENTITY % Annotation-xml.content "ANY" >
<!ELEMENT %annotation-xml.qname;     %Annotation-xml.content; >

<!-- Éléments de contenu : constructeurs -->

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

<!ELEMENT %piecewise.qname;          ((%piece.qname;)*, (%otherwise.qname;)? ) >
<!ELEMENT %piece.qname;              (%ContentExpression;) >
<!ELEMENT %otherwise.qname;          (%ContentExpression;) >

<!-- Éléments de contenu : operateurs (définis par l'utilisateur) -->

<!ELEMENT %fn.qname;                 (%ContentExpression;) >

<!-- Éléments de contenu : quantificateurs -->

<!ELEMENT %lowlimit.qname;           (%ContentExpression;) >
<!ELEMENT %uplimit.qname;            (%ContentExpression;) >
<!ELEMENT %bvar.qname;               (%ContentExpression;) >
<!ELEMENT %degree.qname;             (%ContentExpression;) >
<!ELEMENT %logbase.qname;            (%ContentExpression;) >
<!ELEMENT %momentabout.qname;        (%ContentExpression;) >
<!ELEMENT %domainofapplication.qname; (%ContentExpression;) >

<!-- ............................................................. -->
<!-- Les schémas de disposition de présentation contiennent
        des atomes, des schémas de disposition et de contenu.
-->

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

<!-- Les éléments de présentation contiennent des valeurs
        de type PCDATA ou des structures malignmark. 
-->

<!ELEMENT %mi.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %mn.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %mo.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %mtext.qname;              (%MathMLCharacters; |
      %malignmark.qname;)* >
<!ELEMENT %ms.qname;                 (%MathMLCharacters; |
      %malignmark.qname;)* >

<!-- Définition de l'interface du navigateur  ............................... -->

<!-- Attributs de l'élément de premier niveau "math" -->

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

<!ENTITY % att-topinfo          
     "%MATHML.Common.attrib;
      %att-macros;
      %att-mode;
      %att-display;" >

<!-- Attributs de l'élément d'interface du navigateur -->

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

<!-- ............................................................. -->
<!-- L'élément de premier niveau "math" contient des
        mathématiques codées en MathML. L'élément "math"
        contient aussi les attributs d'informations du navigateur
        si et seulement si c'est l'élément d'interface du navigateur.
-->

<!ELEMENT %math.qname;               (%MathExpression;) >

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

<!-- Entités des caractères MathML ............................................ -->
<!ENTITY % mathml-charent.module "INCLUDE" >
<![%mathml-charent.module;[
<!-- Jeux d'entités provenant du rapport technique ISO 9573-13 ..... -->

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

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

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

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

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

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

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

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

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

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

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

<!-- Jeux d'entités provenant de l'annexe informative de ISO 8879:1986 (SGML) ....... -->

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

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

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

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

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

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

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

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

<!-- Nouveaux caractères définis par MathML ............................ -->

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

<!-- Alias MathML des caractères définis ci-dessus ................. -->

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

<!-- fin de la section Entités de caractères MathML -->]]>

<!-- Historique des révisions :

       Brouillon initial (syntaxe = XML) 1997-05-09
          Stephen Buswell
       Révisé 1997-05-14
          Robert Miner
       Révisé 1997-06-29 et 1997-07-02
          Stephen Buswell
       Révisé 1997-12-15
          Stephen Buswell
       Révisé 1998-02-08
          Stephen Buswell
       Révisé 1998-04-04
          Stephen Buswell
       Entités et petites révisions 1999-02-21
          David Carlisle
       Ajouté l'attribut definitionURL à ci et cn 1999-10-11
          Nico Poppelier
       Additions de MathML 2  1999-12-16
          David Carlisle
       Gestions des espaces de nommage 2000-01-14
          David Carlisle
       Compatibilité XHTML 2000-02-23
          Murray Altheim
       Nouveaux éléments de contenu 2000-03-26
          David Carlisle
       Révisions supplémentaires du brouillon MathML2 CR 2000-07-11
          David Carlisle
       Révisions supplémentaires du brouillon MathML2 CR 2000-10-31
          David Carlisle

-->

<!-- fin de la définition DTD de MathML 2.0  ................................................ -->
<!-- ....................................................................... -->

Table des matières : Le langage de balisage mathématique (MathML) version 2.0
Chapitre précédent : 8 Le modèle objet de document de MathML
Chapitre suivant : B La grammaire de validation du balisage de contenu