A Analisi del MathML

Descrizione sommaria: Linguaggio di marcatura matematica (MathML) Versione 2.0
Precedente: 8 Modello a oggetti dei documenti per il MathML
Successivo: B Grammatica di convalida della marcatura di contenuto
 
A Analisi del MathML
A.1 La DTD del MathML

I documenti MathML devono essere convalidati usando la DTD XML per il MathML, che viene mostrata anche di seguito nella Sezione A.1 [La DTD del MathML].

Di regola, comunque, un'espressione MathML non costituisce un documento XML completo. Il MathML è progettato per essere usato come il frammento di matematica di linguaggi di marcatura più ampi. In particolare è ideato per essere usato come un modulo in documenti contrassegnati con la famiglia XHTML dei linguaggi di marcatura, come definito in [Modularization]. Per comodità, viene fornita, come esempio concreto, anche una versione della DTD XHTML, ampliata con questo modulo MathML. Questa versione include tutte le dichiarazioni necessarie in un unico file. (Al contrario della versione autonoma della DTD del MathML che pone in relazione molti file per le dichiarazioni delle entità ecc.)

In alcune circostanze, quando si incorpora il MathML nei documenti è necessario, o conveniente, usare il meccanismo descritto nel Capitolo 7 [L'interfaccia del MathML] che fornisce un prefisso per lo spazio di nomi sui nomi degli elementi del MathML. La DTD seguente è ideata per consentire questo utilizzo. Se l'entità parametro MATHML.prefixed è dichiarata come INCLUDE, usando una dichiarazione come

<!ENTITY % MATHML.prefixed "INCLUDE" >

sia nel sottoinsieme locale della dichiarazione DOCTYPE che nel file DTD che deve includere la DTD del MathML, allora tutti gli elementi MathML dovrebbero essere usati con un prefisso, per esempio <m:mrow>, <m:apply>, ecc. Il prefisso predefinito è m: ma può essere aggiunto un altro prefisso dichiarando l'entità parametro MathML.prefix. Per esempio,

<!ENTITY % MATHML.prefix   "math" >

imposterebbe il prefisso per lo spazio di nomi MathML a math:.

Si noti che sebbene le Direttive [Namespaces] forniscano meccanismi per cambiare il prefisso in punti arbitrari nel documento, questa flessibilità non è fornita in questa DTD (ed è probabile che non sia possibile specificarla in alcuna DTD).

Se un frammento MathML è analizzato senza una DTD, in altre parole come un frammento ben fatto di XML, è responsabilità dell'applicazione che effettua l'analisi trattare i caratteri di spazio bianco presenti al di fuori degli elementi token come non significativi.

Un analizzatore SGML, come nsgmls, può essere usato per convalidare il MathML. In questo caso deve essere impiegata una dichiarazione SGML che definisce i vincoli dell'XML applicabili ad un analizzatore SGML. Si veda la nota sull'SGML e sull'XML.

Le dichiarazioni di entità per i caratteri sono riportate alla fine della DTD. Queste sono collegate alle tavole dei caratteri nel Capitolo 6 [Caratteri, entità e font] per ciascun insieme di entità.

Sono disponibili anche le liste degli insiemi combinati dei nomi di carattere del MathML, ordinate per nome o per valore Unicode.

Al fine di utilizzare i prefissi dello spazio di nomi dell'XML, la DTD non si riferisce direttamente al nome di un elemento come mrow ma invece fa sempre riferimento al nome attraverso un'entità parametro quale %mrow.qname;. Le definizioni di queste entità parametro si trovano nel file ma non vengono illustrate qui. Esse sono semplicemente dichiarazioni come la seguente, una per ogni elemento MathML.

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

A.1 La DTD del MathML

Di seguito diamo il corpo principale della DTD. La DTD completa, come anche la DTD dell'XHTML-Math, è disponibile in formato zip.

<!-- MathML 2.0 DTD  ....................................................... -->
<!-- file: mathml2.dtd
-->

<!-- MathML 2.0 DTD

     Questo è il Linguaggio di marcatura matematica (MathML) 2.0,
     un'applicazione XML per descrivere la notazione matematica e
     rappresentare la sua struttura e il suo contenuto.

     Copyright 1998-2000 World Wide Web Consortium
        (Massachusetts Institute of Technology, Institut National de
         Recherche en Informatique et en Automatique, Keio University).
         Tutti i diritti riservati.

     Con la presente è garantito in perpetuo il permesso di usare,
     modificare e distribuire la DTD dell'XHTML 1.1 e la documentazione
     che l'accompagna per qualsiasi scopo e senza provvigione, a
     condizione che le informazioni sul diritto d'autore precedenti e
     questo paragrafo appaiano in tutte le copie. I titolari del
     diritto d'autore non hanno rappresentanza sull'idoneità della DTD
     a qualsiasi scopo.

     E' fornita "in quanto tale" senza garanzia implicita o espressa.

        Revisione:   $Id: parsing.xml,v 1.22 2000/03/28 09:53:02 davidc Exp $

     Questa entità può essere identificata mediante gli identificatori
     PUBLIC e SYSTEM:

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

     Revisioni: la storia dell'editore e della revisione è alla fine del
     file (EOF)
-->


<!-- Modulo dei nomi abilitati 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;]]>

<!-- se %NS.prefixed; è INCLUDE, include tutti gli attributi NS, 
     altrimenti solo quelli associati con il MathML
-->
<![%NS.prefixed;[
<!ENTITY % MATHML.NamespaceDecl.attrib
     %NamespaceDecl.attrib; >
]]>
<!ENTITY % MATHML.NamespaceDecl.attrib 
     "%MATHML.xmlns.attrib;"
>

<!-- Attributi condivisi da tutti gli elementi .......................... -->

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

<!-- Insieme degli elementi di presentazione ............................. -->

<!-- Definizioni degli attributi -->

<!ENTITY % att-fontsize
     "fontsize     CDATA                    #IMPLIED" >
<!ENTITY % att-fontweight
     "fontweight   ( normal | bold )        #IMPLIED" >
<!ENTITY % att-fontstyle
     "fontstyle    ( normal | italic )      #IMPLIED" >
<!ENTITY % att-fontfamily
     "fontfamily   CDATA                    #IMPLIED" >
<!ENTITY % att-color
     "color        CDATA                    #IMPLIED" >

<!ENTITY % att-fontinfo
     "%att-fontsize;
      %att-fontweight;
      %att-fontstyle;
      %att-fontfamily;
      %att-color;"
>

<!ENTITY % att-form
     "form         ( prefix | infix | postfix )  #IMPLIED" >
<!ENTITY % att-fence
     "fence        ( true | false )         #IMPLIED" >
<!ENTITY % att-separator
     "separator    ( true | false )         #IMPLIED" >
<!ENTITY % att-lspace
     "lspace       CDATA                    #IMPLIED" >
<!ENTITY % att-rspace
     "rspace       CDATA                    #IMPLIED" >
<!ENTITY % att-stretchy
     "stretchy     ( true | false )         #IMPLIED" >
<!ENTITY % att-symmetric
     "symmetric    ( true | false )         #IMPLIED" >
<!ENTITY % att-maxsize
     "maxsize      CDATA                    #IMPLIED" >
<!ENTITY % att-minsize
     "minsize      CDATA                    #IMPLIED" >
<!ENTITY % att-largeop
     "largeop      ( true | false)          #IMPLIED" >
<!ENTITY % att-movablelimits
     "movablelimits ( true | false )        #IMPLIED" >
<!ENTITY % att-accent
     "accent       ( true | false )         #IMPLIED" >

<!ENTITY % att-opinfo
     "%att-form;
      %att-fence;
      %att-separator;
      %att-lspace;
      %att-rspace;
      %att-stretchy;
      %att-symmetric;
      %att-maxsize;
      %att-minsize;
      %att-largeop;
      %att-movablelimits;
      %att-accent;"
>
<!ENTITY % att-width
     "width        CDATA                    #IMPLIED" >
<!ENTITY % att-height
     "height       CDATA                    #IMPLIED" >
<!ENTITY % att-depth
     "depth        CDATA                    #IMPLIED" >
<!ENTITY % att-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-open                 
     "open         CDATA                    #IMPLIED" >
<!ENTITY % att-close                
     "close        CDATA                    #IMPLIED" >
<!ENTITY % att-separators          
     "separators   CDATA                    #IMPLIED" >
<!ENTITY % att-subscriptshift       
     "subscriptshift CDATA                  #IMPLIED" >
<!ENTITY % att-superscriptshift     
     "superscriptshift CDATA                #IMPLIED" >
<!ENTITY % att-accentunder          
     "accentunder  ( true | false )         #IMPLIED" >
<!ENTITY % att-align       
     "align        CDATA                    #IMPLIED" >
<!ENTITY % att-rowalign      
     "rowalign     CDATA                    #IMPLIED" >
<!ENTITY % att-columnalign     
     "columnalign  CDATA                    #IMPLIED" >
<!ENTITY % att-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-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-rowspacing;
      %att-columnspacing;
      %att-rowlines;
      %att-columnlines;
      %att-frame;
      %att-framespacing;
      %att-equalrows;
      %att-equalcolumns;
      %att-displaystyle;" 
>

<!ENTITY % att-rowspan              
     "rowspan      CDATA                    #IMPLIED" >
<!ENTITY % att-columnspan           
     "columnspan   CDATA                    #IMPLIED" >
<!ENTITY % att-edge        
     "edge         ( left | right )         #IMPLIED" >
<!ENTITY % att-actiontype          
     "actiontype   CDATA                    #IMPLIED" >
<!ENTITY % att-selection       
     "selection    CDATA                    #IMPLIED" >

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

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

<!-- Schemi di presentazione con contenuto -->

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

<!-- Schemi di presentazione vuoti -->

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

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

<!-- Presentazione: schemi generali di disposizione -->

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

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

<!-- Schemi di disposizione di presentazione: apici, pedici e limiti -->

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

<!-- Schemi di disposizione di presentazione: elementi vuoti per apici
     e pedici -->

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

<!-- Schemi di disposizione di presentazione: tabelle -->

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

<!-- Schemi di disposizione di presentazione vuoti -->

<!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 %mchar.qname;  EMPTY >
<!ATTLIST %mchar.qname;    
      %att-name; >

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

<!-- Schemi di azione di presentazione -->

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

<!-- La seguente entità per la sostituzione nei costrutti
     di contenuto esclude gli elementi che non sono
     validi come espressioni.
-->

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

<!-- Entità di presentazione: tutti i costrutti di presentazione -->

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

<!-- Insieme degli elementi di contenuto ............................. -->

<!-- Definizione degli attributi -->

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

<!-- Elementi di contenuto: nodi foglia -->

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

<!-- Elementi di contenuto: particolari -->

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

<!-- Elementi di contenuto: altri -->

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

<!-- Elementi di contenuto: mappatura semantica -->

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

<!-- Elementi di contenuto: costruttori -->

<!ENTITY % cconstructor             
     "%interval.qname; | %list.qname; | %matrix.qname; 
      | %matrixrow.qname; | %set.qname; | %vector.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;
>

<!-- Elementi di contenuto: simboli -->

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

<!-- Elementi di contenuto: operatori -->

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

<!ELEMENT %inverse.qname;  EMPTY >
<!ATTLIST %inverse.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;" >

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

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

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

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

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

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

<!-- Elementi di contenuto: relazioni -->

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

<!ELEMENT %neq.qname;  EMPTY >
<!ATTLIST %neq.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;
>

<!-- Elementi di contenuto: quantificatori -->

<!ENTITY % cquantifier            
     "%lowlimit.qname; | %uplimit.qname; | %bvar.qname; 
      | %degree.qname; | %logbase.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;
>

<!-- Gruppi di operatori -->

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

<!-- Gruppi di relazioni -->

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

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

<!-- Costrutti di contenuto: tutti -->

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

<!-- Costrutti di contenuto per la sostituzione in strutture di
     presentazione -->

<!ENTITY % ContInPres               
     "%ci.qname; |%csymbol.qname;| %cn.qname;|
      %apply.qname; | %fn.qname; |
      %lambda.qname; | %reln.qname; |
      %interval.qname; | %list.qname; |
      %matrix.qname; | %matrixrow.qname; |
      %set.qname; | %vector.qname; |
      %semantics.qname; |%declare.qname;" >

<!-- ............................................................. -->
<!-- Definizione ricorsiva per il contenuto delle espressioni. Include
     costrutti di presentazione al livello più basso così gli
     schemi di disposizione di presentazione hanno gli elementi
     di contenuto o di presentazione. Include costrutti
     di contenuto al livello più basso così gli elementi di
     contenuto hanno PCDATA o elementi di presentazione a livello
     di foglia (per elementi che si possono sostituire nel contesto)
-->

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

<!-- PCDATA o elementi caratteri del MathML -->
<!ENTITY % MathMLCharacters         
     "#PCDATA | %mchar.qname; | %mglyph.qname; " >

<!-- Elementi di contenuto: token                               -->
<!-- (possono contenere costrutti di presentazione incorporati) -->

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

<!-- Elementi di contenuto: speciali -->

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

<!-- Elementi di contenuto: altro -->

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

<!-- Elementi di contenuto: semantica -->

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

<!-- Elementi di contenuto: costruttori -->

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

<!-- Elementi di contenuto: operatore (definito dall'utente) -->

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

<!-- Elementi di contenuto: quantificatori -->

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

<!-- ............................................................. -->
<!-- Gli schemi di disposizione di presentazione contengono
     token, schemi di disposizione e di contenuto.
-->

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

<!-- Gli elementi di presentazione contengono PCDATA o costrutti
     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;)* >

<!-- Definizione dell'interfaccia del browser  ........................... -->

<!-- Attributi dell'elemento "math" di livello principale -->

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

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

<!-- Attributi per l'elemento di interfaccia del browser -->

<!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'elemento "math" di livello principale contiene la codifica
     matematica del MathML. L'elemento "math" contiene gli attributi di
     informazione del browser se è anche l'elemento di interfaccia del browser.
-->

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

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

<!-- Entità carattere del MathML ....................................... -->
<!ENTITY % mathml-charent.module "INCLUDE" >
<![%mathml-charent.module;[
<!-- Insiemi di entità dal Rapporto Tecnico 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;


<!-- Insiemi di entità dall'informativa annessa all'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;


<!-- Alias in MathML per i caratteri definiti sopra ................. -->

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

<!-- Nuovi caratteri definiti dal MathML ............................ -->

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

<!-- fine della sezione delle entità caratteri del MathML -->]]>

<!-- Cronologia delle revisioni:

       Bozza iniziale (sintassi = XML) 1997-05-09
          Stephen Buswell
       Corretta 1997-05-14
          Robert Miner
       Corretta 1997-06-29 e 1997-07-02
          Stephen Buswell
       Corretta 1997-12-15
          Stephen Buswell
       Corretta 1998-02-08
          Stephen Buswell
       Corretta 1998-04-04
          Stephen Buswell
       Entità e piccole revisioni 1999-02-21
          David Carlisle
       Aggiunto l'attributo definitionURL a ci e cn 1999-10-11
          Nico Poppelier
       Aggiunte per il MathML 2  1999-12-16
          David Carlisle
       Supporto per lo spazio di nomi 2000-01-14
          David Carlisle
       Compatibilità XHTML 2000-02-23
          Murray Altheim
       Nuovi elementi di contenuto 2000-03-26
          David Carlisle

-->

<!-- fine della DTD del MathML 2.0 ........................................ -->
<!-- ...................................................................... -->

Descrizione sommaria: Linguaggio di marcatura matematica (MathML) Versione 2.0
Precedente: 8 Modello a oggetti dei documenti per il MathML
Successivo: B Grammatica di convalida della marcatura di contenuto