2 Fondamenti del MathML

Descrizione sommaria: Linguaggio di marcatura matematica (MathML) Versione 2.0
Precedente: 1 Introduzione
Successivo: 3 Marcatura di presentazione
 
2 Fondamenti del MathML
2.1 Descrizione sommaria del MathML
   2.1.1 Tassonomia degli elementi del MathML
   2.1.2 Marcatura di presentazione
   2.1.3 Marcatura di contenuto
   2.1.4 Mescolare presentazione e contenuto
2.2 Alcuni esempi di MathML
   2.2.1 Esempi di presentazione
   2.2.2 Esempi di contenuto
   2.2.3 Esempi di marcatura mista
2.3 Sintassi e grammatica del MathML
   2.3.1 Sintassi e grammatica del MathML
   2.3.2 Una breve introduzione della sintassi dell'XML
   2.3.3 Figli rispetto ad argomenti
   2.3.4 Valori degli attributi del MathML
   2.3.5 Attributi condivisi da tutti gli elementi del MathML
   2.3.6 Collassare gli spazi bianchi in entrata

2.1 Descrizione sommaria del MathML

Questo capitolo presenta le idee fondamentali del MathML. La prima sezione descrive il progetto globale del MathML. La seconda sezione presenta una serie di esempi per le motivazioni, per dare al lettore qualcosa di concreto a cui fare riferimento leggendo i capitoli successivi delle specifiche del MathML. L'ultima sezione descrive le caratteristiche fondamentali della sintassi e della grammatica del MathML, che si applicano a tutta la marcatura MathML. In particolare, la Sezione 2.3 [Sintassi e grammatica del MathML] dovrebbe essere letta prima del Capitolo 3 [Marcatura di presentazione], del Capitolo 4 [Marcatura di contenuto] e del Capitolo 5 [Combinare marcatura di presentazione e di contenuto].

Una sfida fondamentale nella definizione di un linguaggio di marcatura per la matematica in rete è riconciliare il bisogno di codificare sia la presentazione di una notazione matematica che il contenuto dell'idea matematica o dell'oggetto che essa rappresenta.

La relazione tra una notazione matematica e un'idea matematica è sottile e profonda. A livello formale, il risultato della logica matematica fa sorgere sconvolgenti domande sulla corrispondenza tra i sistemi di logica simbolica e i fenomeni per cui essi sono modelli. Ad un livello più intuitivo, chiunque usi la notazione matematica conosce la differenza che può fare una buona scelta della notazione; la struttura simbolica della notazione suggerisce la struttura logica. Per esempio, la notazione di Leibnitz per le derivate `suggerisce' la regola a catena dell'analisi matematica tramite la cancellazione simbolica delle frazioni: \frac{d f}{d x}\frac{d x}{d t}=\frac{d f}{d
t}.

I matematici e gli insegnanti lo comprendono intuitivamente molto bene; parte della loro esperienza sta nello scegliere la notazione che enfatizzi gli aspetti chiave di un problema nascondendo o portando in secondo piano gli aspetti estranei. E' diffuso nella matematica e nella scienza scrivere una cosa quando a livello strettamente tecnico si intende qualcos'altro, perché una lunga esperienza dimostra che questo in realtà a livelli più alti comunica meglio l'idea dei dettagli rigorosi.

In molte altre occasioni, tuttavia, la notazione matematica è usata per codificare il senso pieno e preciso di un oggetto matematico. La notazione matematica è capace di una rigorosità prodigiosa, e se usata attentamente può essere virtualmente libera da ambiguità. Inoltre, è esattamente questa mancanza di ambiguità che rende possibile descrivere oggetti matematici in modo che essi possano essere usati da applicazioni di software come sistemi di computer algebra e riproduttori vocali. In situazioni dove una tale comunicazione tra applicazioni è di importanza fondamentale, le sfumature della presentazione visuale assumono generalmente un ruolo minimo.

Il MathML permette agli autori di codificare sia la notazione che rappresenta un oggetto matematico che la struttura dell'oggetto stesso. Inoltre, gli autori possono mescolare entrambi i tipi di codifica per specificare sia la presentazione che il contenuto di un'idea matematica. Il resto di questa sezione dà una descrizione sommaria di come può essere usato il MathML in ciascuno di questi modi.

2.1.1 Tassonomia degli elementi del MathML

Tutti gli elementi del MathML cadono in una di tre categorie: elementi di presentazione, elementi di contenuto ed elementi di interfaccia. Ciascuna di queste categorie è descritta nei dettagli rispettivamente nel Capitolo 3 [Marcatura di presentazione], nel Capitolo 4 [Marcatura di contenuto] e nel Capitolo 7 [L'interfaccia del MathML].

Gli elementi di presentazione descrivono la struttura bidimensionale orientata visivamente della notazione matematica. Esempi tipici sono l'elemento mrow, che è generalmente impiegato per indicare una riga orizzontale di pezzi di espressioni, e l'elemento msup, che è usato per marcare un'espressione come base ed aggiungerle un apice. Come regola generale, ogni elemento di presentazione corrisponde ad un singolo tipo di `???' come cifre, lettere o altri simboli.

Sebbene questo esempio particolare coinvolga la notazione matematica, e quindi la marcatura di presentazione, la stessa osservazione sulla decomposizione si applica altrettanto bene agli oggetti matematici astratti, e quindi alla marcatura di contenuto. Per esempio, nel contesto della marcatura di contenuto il nostro esempio dell'apice sarebbe tipicamente denotato da un'operazione di elevamento a potenza che richiederebbe due operandi: una `base' e un `esponente'. Non è una coincidenza, poiché come regola generale la disposizione della notazione matematica segue strettamente la struttura logica degli oggetti matematici sottostanti.

La natura ricorsiva degli oggetti e della notazione matematica si riflette fortemente nella marcatura MathML. Nella pratica, quasi tutti gli elementi di presentazione o di contenuto contengono altri elementi MathML che corrispondono ai pezzi costituenti con i quali è costruito ricorsivamente l'oggetto originario. Lo schema originario è detto comunemente lo schema padre, e i pezzi costituenti sono detti schemi figli. Più generalmente, le espressioni MathML possono essere viste come alberi, dove ogni nodo corrisponde ad un elemento MathML, i rami sotto un nodo `padre' corrispondono ai suoi `figli' e le foglie nell'albero corrispondono ad unità atomiche di notazione o di contenuto come numeri, caratteri, ecc.

La maggior parte dei nodi foglia in un albero di espressione MathML sono o elementi canonicamente vuoti senza corpo o elementi token. Gli elementi canonicamente vuoti rappresentano direttamente i simboli nel MathML, per esempio, questo vale per l'elemento di contenuto <plus/>. Gli elementi token del MathML sono i soli elementi del MathML che possono contenere dati di caratteri MathML. I dati di caratteri MathML possono consistere di caratteri Unicode e di elementi MathML <mchar/>. Questi elementi <mchar/>, come <mchar name="alpha" /> e <mchar name="rightarrow" />, denotano tipicamente caratteri Unicode non nel codice ASCII e l'attributo name contiene l'informazione di quale simbolo speciale si rappresenta. La costruzione <mchar/> sostituisce l'uso di entità MathML speciali come &alpha; per codificare simboli speciali specificato nel MathML 1 per compatibilità con i meccanismi generici dell'XML. Un terzo tipo di nodo foglia permesso nel MathML è l'elemento annotation, che è usato per contenere dati che non sono in formato MathML.

Gli elementi token di presentazione più importanti sono mi, mn e mo per rappresentare rispettivamente identificatori, numeri e operatori. Tipicamente un riproduttore impiegherà stili tipografici leggermente diversi per ciascuno di questi tipi di dati: i numeri sono normalmente in caratteri diritti, gli identificatori in corsivo, e gli operatori hanno più spazio intorno ad essi. Nella marcatura di contenuto, ci sono solo tre elementi token, ci, cn e csymbol, rispettivamente per identificatori, numeri e nuovi simboli introdotti nel documento stesso. Nella marcatura di contenuto sono forniti elementi separati per funzioni ed operatori comunemente usati. E' fornito l'elemento fn per estensioni definite dall'utente all'insieme fondamentale.

In termini di marcatura, la maggior parte degli elementi MathML sono denotati da un'etichetta iniziale e da un'etichetta finale, che contengono la marcatura per il loro contenuto. Nel caso degli elementi token, il contenuto sono dati di caratteri, e nella maggior parte degli altri casi, il contenuto è la marcatura per gli elementi figli. Una terza categoria di elementi, detti elementi canonicamente vuoti, non richiedono contenuto, e sono denotati da una singola etichetta della forma <nome/>. Un esempio di questo tipo di marcatura è <plus/> nella marcatura di contenuto.

Tornando all'esempio di (a + b)2, possiamo ora vedere come i principi discussi in precedenza abbiano applicazione pratica. Una forma di marcatura di presentazione per quest'esempio è:

   <msup>
     <mfenced>
       <mrow>
         <mi>a</mi>
         <mo>+</mo>
         <mi>b</mi>
       </mrow>
     </mfenced>
     <mn>2</mn>
   </msup>

Questo esempio dimostra vari elementi di presentazione. Il primo elemento, uno che è usato molto, è mrow. Questo elemento si usa per denotare una riga di materiale allineato orizzontalmente. Il materiale contenuto tra i tag <mrow> e </mrow> è considerato un argomento dell'elemento mrow. Perciò l'intera espressione qui è contenuta in un elemento mrow. Come notato in precedenza, quasi tutte le espressioni matematiche si decompongono in sottoespressioni. Anche queste sottoespressioni possono, a loro volta, essere contenute in un elemento mrow. Per esempio, a+b è a sua volta contenuta in un elemento mrow.

L'elemento mfenced è usato per mettere parentesi (graffe, quadre e tonde) intorno a formule. Il suo comportamento predefinito è usare parentesi tonde.

Si noti l'uso dell'elemento mi per visualizzare le variabili a e b e dell'elemento mo per marcare l'operatore +.

L'elemento msup è per espressioni che coinvolgono gli apici e richiede due argomenti, nell'ordine, l'espressione base (qui, (a+b)) e l'espressione esponente (qui, 2).

La marcatura di contenuto per lo stesso esempio è:

   <apply>
     <power/>
     <apply>
       <plus/>
       <ci>a</ci>
       <ci>b</ci>
     </apply>
     <cn>2</cn>
   </apply>

Qui, l'elemento di contenuto apply significa applicare un'operazione ad un'espressione. In questo esempio, sono applicati sia l'elemento power (per l'elevamento a potenza), che non richiede un corpo, che l'elemento simile plus (per l'addizione). Si osservi che entrambi gli operatori richiedono due argomenti, con l'ordine che è particolarmente significativo nel caso dell'elevamento a potenza.

Si noti l'uso dell'elemento ci per denotare le variabili a e b, e dell'elemento cn per denotare il numero 2.

2.1.2 Marcatura di presentazione

La marcatura di presentazione del MathML consiste di circa 30 elementi che accettano oltre 50 attributi. La maggior parte degli elementi corrispondono a schemi di disposizione, che contengono altri elementi di presentazione. Ogni schema di disposizione corrisponde ad un dispositivo notazionale bidimensionale, come un pedice o un apice, una frazione o una tabella. Inoltre, ci sono gli elementi token di presentazione mi, mn e mo presentati in precedenza, come pure vari altri elementi token usati meno comunemente. I pochi restanti elementi di presentazione sono elementi vuoti, e sono usati per lo più in congiunzione con l'allineamento.

Gli schemi di disposizione cadono in diverse classi. Un gruppo di elementi riguarda gli apici e i pedici, e contiene elementi come msub, munder e mmultiscripts. Un altro gruppo si concentra su una disposizione più generale e comprende mrow, mstyle e mfrac. Un terzo gruppo tratta le tabelle. L'elemento maction è in una categoria da solo, e permette la codifica di vari tipi di azioni sulla notazione, come occorrere in un'espressione che commuta tra due notazioni.

Una caratteristica importante di molti schemi di disposizione è che l'ordine degli schemi figli è significativo. Per esempio, il primo figlio di un elemento mfrac è il numeratore e il secondo figlio è il denominatore. Poiché l'ordine degli schemi figli non è imposto a livello XML dalla DTD del MathML, l'informazione aggiunta dall'ordinamento è disponibile solo ad un elaboratore MathML, rispetto ad un generico elaboratore XML. Quando vogliamo enfatizzare che un elemento MathML come mfrac richiede i figli in un ordine preciso, ci riferiremo ad essi come argomenti, e penseremo all'elemento mfrac come ad un `costruttore' notazionale.

2.1.3 Marcatura di contenuto

La marcatura di contenuto consiste di circa 100 elementi che accettano circa una dozzina di attributi. La maggioranza di questi elementi sono elementi vuoti che corrispondono ad un'ampia varietà di operatori, relazioni e funzioni con un nome. Esempi di questo tipo comprendono partialdiff, leq e tan. Altri come matrix e set sono usati per codificare vari tipi di dati matematici, e una terza, importante categoria di elementi di contenuto come apply si usa per applicare operazioni ad espressioni e anche per creare nuovi oggetti matematici partendo da altri.

L'elemento apply è forse l'elemento di contenuto più importante. E' usato per applicare una funzione o un'operazione ad una collezione di argomenti. Le posizioni degli schemi figli sono anche qui significative, con il primo figlio che denota la funzione da applicare, e gli altri figli che denotano gli argomenti della funzione in ordine. Si noti che il costrutto apply usa sempre la notazione prefissa, come il linguaggio programmativo LISP. In particolare, anche operazioni binarie come la sottrazione sono marcate applicando un operatore di sottrazione prefisso a due argomenti. Per esempio, a - b sarebbe marcato come

<apply>
   <minus/>
   <ci>a</ci>
   <ci>b</ci>
</apply>

Alcune funzioni e operazioni richiedono uno o più quantificatori per essere ben definite. Per esempio, oltre ad un integrando, un integrale definito deve specificare i limiti di integrazione e la variabile legata. Per questa ragione, ci sono vari schemi qualificatori come bvar e lowlimit. Sono usati con operatori come diff e int.

Il costrutto declare è particolarmente importante per la marcatura di contenuto che potrebbe essere valutata da un sistema di computer algebra. L'elemento declare fornisce un meccanismo fondamentale di assegnamento, dove una variabile può essere dichiarata di un certo tipo, con un certo valore.

2.1.4 Mescolare presentazione e contenuto

Diversi tipi di marcatura saranno più adatti per diversi tipi di compiti. I documenti scritti prima che il web diventasse importante erano più spesso intesi solo per la comunicazione visiva delle informazioni, così questi dati sono probabilmente tradotti meglio in marcatura di presentazione pura, poiché le informazioni semantiche su cosa intendeva l'autore possono solo essere intuite euristicamente. Per contrasto, alcune applicazioni matematiche e strumenti di creazione orientati pedagogicamente sceglieranno probabilmente di essere basati interamente sul contenuto. La maggioranza delle applicazioni cade in un punto tra questi estremi. Per queste applicazioni, la marcatura più appropriata è un misto di marcatura di presentazione e di contenuto.

Le regole per mescolare la marcatura di presentazione e di contenuto derivano dal principio generale che il contenuto misto deve essere permesso solo in luoghi dove esso ha senso. Per la marcatura di contenuto incorporata nella marcatura di presentazione questo significa fondamentalmente che ogni frammento di contenuto deve essere semanticamente significativo, e non deve richiedere che siano specificati interamente quantificatori o argomenti aggiuntivi. Per la marcatura di presentazione incorporata nella marcatura di contenuto, questo di solito significa che la marcatura di presentazione deve essere contenuta in un elemento token di contenuto, in modo che possa essere trattata come un'unità notazionale indivisibile usata come nome di funzione o di variabile.

Un'altra opzione è usare un elemento semantics. L'elemento semantics è usato per associare espressioni MathML a vari tipi di annotazioni. Un uso comune per l'elemento semantics è associare un pezzo di marcatura di contenuto a della marcatura di presentazione come annotazione semantica. In questo modo, un autore può specificare una notazione non standard da usare quando si visualizza una particolare espressione di contenuto. Un altro uso dell'elemento semantics è associare qualche altro tipo di specificazione semantica, come un'espressione in OpenMath, ad un'espressione MathML. In questo modo, l'elemento semantics può essere usato per estendere l'ambito della marcatura di contenuto del MathML.

2.2 Alcuni esempi di MathML

2.2.1 Esempi di presentazione

Notazione: x2 + 4x + 4 = 0.

Marcatura:

<mrow>
  <mrow>
    <msup>
      <mi>x</mi>
      <mn>2</mn>
    </msup>
    <mo>+</mo>
    <mrow>
      <mn>4</mn>
      <mo>&InvisibleTimes;</mo>
      <mi>x</mi>
    </mrow>
    <mo>+</mo>
    <mn>4</mn>
  </mrow>
  <mo>=</mo>
  <mn>0</mn>
</mrow>

Gli elementi mfrac e msqrt sono usati per generare rispettivamente frazioni e radici quadrate.

Si noti l'uso degli elementi mrow annidati per denotare termini, ad esempio, il lato sinistro dell'equazione valido come operando di `='. Marcare i termini facilita molto la spaziatura per la riproduzione visuale, la presentazione vocale e le interruzioni di linea. L'entità di carattere MathML InvisibleTimes è usata qui per indicare che ci sono regole speciali di spaziatura tra il 4 e la x, e che il 4 e la x non devono essere spezzati su linee separate. Infatti, l'uso di un'entità è ora esplicitamente disapprovato in favore dell'uso di <mchar name="InvisibleTimes" /> ma è stato introdotto nel MathML 1.0. Negli esempi seguenti sarà usata la nuova versione, che è stata menzionata in precedenza e che è discussa esplicitamente nella Sezione 4.4.1 [Elementi token].

Notazione: x = \frac{-b\pm\sqrt{b^2 - 4ac}}{2a}.

Marcatura:

<mrow>
  <mi>x</mi>
  <mo>=</mo>
  <mfrac>
    <mrow>
      <mrow>
        <mo>-</mo>
        <mi>b</mi>
      </mrow>
      <mo><mchar name="PlusMinus"/></mo>
      <msqrt>
        <mrow>
          <msup>
            <mi>b</mi>
            <mn>2</mn>
          </msup>
          <mo>-</mo>
          <mrow>
            <mn>4</mn>
            <mo><mchar name="InvisibleTimes"/></mo>
            <mi>a</mi>
            <mo><mchar name="InvisibleTimes"/></mo>
            <mi>c</mi>
          </mrow>
        </mrow>
      </msqrt>
    </mrow>
    <mrow>
      <mn>2</mn>
      <mo><mchar name="InvisibleTimes"/></mo>
      <mi>a</mi>
    </mrow>
  </mfrac>
</mrow>

Si noti che il segno `più o meno' è dato da un elemento speciale usato per il nome di simbolo specifico <mchar name="PlusMinus" />. Poi è usato lo stesso costrutto con <mchar name="InvisibleTimes" />, invece della vecchia forma nell'esempio precedente. Il MathML fornisce un elenco molto ampio di nomi di caratteri per i simboli matematici. In aggiunta ai simboli matematici necessari per la presentazione su schermo o stampata, il MathML fornisce simboli per facilitare la riproduzione acustica. Per riproduttori acustici, è importante poter determinare automaticamente se

<mrow>
  <mi>z</mi>
  <mfenced>
    <mrow>
      <mi>x</mi>
      <mo>+</mo>
      <mi>y</mi>
    </mrow>
  </mfenced>
</mrow>

deve essere letto come `z per la quantità x più y' o `z di x più y'. Gli elementi di marcatura <mchar name="InvisibleTimes" /> e <mchar name="ApplyFunction" /> forniscono agli autori un modo per codificare direttamente la distinzione per i riproduttori audio. Per esempio, nel primo caso si dovrebbe inserire <mchar name="InvisibleTimes" /> dopo la linea che contiene la z. Il MathML introduce anche entità come <mchar name="dd" /> che rappresenta una `d differenziale' che si riproduce con una spaziatura leggermente diversa nella stampa, e può essere presentata come `d' o `rispetto a' parlando. A meno che non si usino i tag di contenuto, o qualche altro meccanismo, per eliminare l'ambiguità, gli autori dovrebbero usare sempre queste entità, per rendere i loro documenti più accessibili.

Notazione: A=\left[\begin{array}{cc} x & y \\ z & w \end{array}\right].

Marcatura:

<mrow>
  <mi>A</mi>
  <mo>=</mo>
  <mfenced open="[" close="]">
    <mtable>
      <mtr>
         <mtd><mi>x</mi></mtd>
         <mtd><mi>y</mi></mtd>
      </mtr>
      <mtr>
         <mtd><mi>z</mi></mtd>
         <mtd><mi>w</mi></mtd>
      </mtr>
    </mtable>
  </mfenced>
</mrow>

La maggior parte degli elementi ha attributi che controllano i dettagli delle loro riproduzioni su schermo e su stampa. Per esempio, ci sono vari attributi per l'elemento mfenced che controllano che parentesi devono essere usate all'inizio e alla fine dell'espressione raggruppata in precedenza. Gli attributi per elementi operatori dati usando <mo> sono impostati a valori predefiniti determinati da un dizionario. Per il dizionario degli operatori MathML consigliato, si veda l'Appendice D [Dizionario degli operatori].

2.2.2 Esempi di contenuto

Notazione: x2 + 4x + 4 = 0.

Marcatura:

<apply>
  <eq/>
  <apply>
    <plus/>
    <apply>
      <power/>
      <ci>x</ci>
      <cn>2</cn>
    </apply>
    <apply>
      <times/>
      <cn>4</cn>
      <ci>x</ci>
    </apply>
    <cn>4</cn>
  </apply>
  <cn>0</cn>
</apply>

Si noti che l'elemento apply si usa per relazioni, operatori e funzioni.

Notazione: x = \frac{-b\pm\sqrt{b^2 - 4ac}}{2a}.

Marcatura:

<apply>
  <eq/>
  <ci>x</ci>
  <apply>
    <divide/>
    <apply>
      <fn><mo><mchar name='PlusMinus'/></mo></fn>
      <apply>
        <minus/>
        <ci>b</ci>
      </apply>
      <apply>
        <root/>
        <apply>
          <minus/>
          <apply>
            <power/>
            <ci>b</ci>
            <cn>2</cn>
          </apply>
          <apply>
            <times/>
            <cn>4</cn>
            <ci>a</ci>
            <ci>c</ci>
          </apply>
        </apply>
        <cn>2</cn>
      </apply>
    </apply>
    <apply>
      <times/>
      <cn>2</cn>
      <ci>a</ci>
    </apply>
  </apply>
</apply>

La marcatura di contenuto del MathML non contiene direttamente un elemento per l'operazione `più o meno'. Perciò, usiamo l'elemento fn per dichiarare che vogliamo che la marcatura di presentazione per questo operatore agisca come un operatore di contenuto. Questo è un esempio semplice di come si possono mescolare marcatura di presentazione e di contenuto per estendere la marcatura di contenuto.

Notazione: A=\left(\begin{array}{cc} x & y \\ z & w \end{array}\right).

Marcatura:

<apply>
  <eq/>
  <ci>A</ci>
  <matrix>
    <matrixrow>
      <ci>x</ci>
      <ci>y</ci>
    </matrixrow>
    <matrixrow>
      <ci>z</ci>
      <ci>w</ci>
    </matrixrow>
  </matrix>
</apply>

Si noti che, di default, la riproduzione dell'elemento di contenuto matrix comprende le parentesi, perciò non abbiamo bisogno di codificarle direttamente. Questo è piuttosto diverso dall'elemento di presentazione mtable che può riferirsi o meno ad una matrice, e quindi richiede la codifica esplicita delle parentesi se esse sono desiderate.

2.2.3 Esempi di marcatura mista

Notazione: \displaystyle \int_0^t \frac{\diffd x}{x}.

Marcatura:

<semantics>
  <mrow>
    <msubsup>
      <mo><mchar name='int'/></mo>
      <mn>0</mn>
      <mi>t</mi>
    </msubsup>
    <mfrac>
      <mrow>
        <mo><mchar name='dd'/></mo>
        <mi>x</mi>
      </mrow>
      <mi>x</mi>
    </mfrac>
  </mrow>
  <annotation-xml encoding="MathML-Content">
    <apply>
      <int/>
      <bvar><ci>x</ci></bvar>
      <lowlimit><cn>0</cn></lowlimit>
      <uplimit><ci>t</ci></uplimit>
      <apply>
        <divide/>
        <cn>1</cn>
        <ci>x</ci>
      </apply>
    </apply>
  </annotation-xml>
</semantics>

In questo esempio, usiamo l'elemento semantics per fornire un'espressione di contenuto MathML che serve come `annotazione semantica' per un'espressione di presentazione. L'elemento semantics ha come primo figlio l'espressione annotata, e i figli successivi sono le annotazioni. Non ci sono restrizioni sul tipo di annotazioni che possono essere allegate usando l'elemento semantics. Per esempio, si può dare una codifica TEX, o dati in ingresso per computer algebra in un'annotazione. Il tipo di annotazione è specificata dall'attributo encoding e dagli elementi annotation e annotation-xml.

Un altro uso comune dell'elemento semantics nasce quando si vuole usare una codifica di contenuto, e fornire un suggerimento per la sua presentazione. In un caso simile, applicata alla formula precedente avremmo la marcatura:

<semantics>
  <apply>
    <int/>
    <bvar><ci>x</ci></bvar>
    <lowlimit><cn>0</cn></lowlimit>
    <uplimit><ci>t</ci></uplimit>
    <apply>
      <divide/>
      <cn>1</cn>
      <ci>x</ci>
    </apply>
  </apply>
  <annotation-xml encoding="MathML-Presentation">
    <mrow>
      <msubsup>
        <mo><mchar name='int'/></mo>
        <mn>0</mn>
        <mi>t</mi>
      </msubsup>
      <mfrac>
        <mrow>
          <mo><mchar name='dd'/></mo>
          <mi>x</mi>
        </mrow>
        <mi>x</mi>
      </mfrac>
    </mrow>
  </annotation-xml>
</semantics>

Questo tipo di annotazione è utile quando si desidera qualcosa di diverso dalla presentazione predefinita della codifica del contenuto. Per esempio, di default, alcuni riproduttori potrebbero disporre l'integrando come `(1/x)dx'. Specificare che l'integrando dovrebbe essere presentato invece preferibilmente come `dx/x' può essere fatto con l'uso di un'annotazione di Presentazione MathML come mostrato. Si tenga presente, comunque, che i riproduttori non hanno l'obbligo di tenere conto delle informazioni contenute nelle annotazioni, e l'uso che ne sarà fatto, se esse saranno usate, dipenderà dal riproduttore.

2.3 Sintassi e grammatica del MathML

2.3.1 Sintassi e grammatica del MathML

Il MathML è un'applicazione dell'XML, o Linguaggio di Marcatura Estensibile [Bray1998], e come tale la sua sintassi è governata dalle regole della sintassi dell'XML, e la sua grammatica è specificata in parte da una DTD, o Definizione di Tipo di un Documento. In altre parole, i dettagli sull'uso dei tag, degli attributi, dei riferimenti alle entità e così via sono definiti nelle specifiche del linguaggio XML, e i dettagli sugli elementi e sui nomi degli attributi del MathML, quali elementi possono essere annidati in quali altri, e così via sono specificati nella DTD del MathML. Questo è nell'Appendice A [Analisi del MathML].

Il W3C, cercando di aumentare la flessibilità dell'uso dell'XML per il Web, e di incoraggiare la modularizzazione di applicazioni costruite con l'XML, ha scoperto che la forma fondamentale di una DTD non è l'ideale. Perciò è stato creato un Gruppo di Lavoro W3C per sviluppare delle specifiche per gli Schemi XML [XMLSchemas], che sono documenti di specifica che eventualmente sostituiranno le DTD. Il MathML 2.0 è stato progettato in modo cosciente perché la matematica possa avvantaggiarsi delle ultime tecnologie del Web. Perciò deve esserci uno Schema per il MathML. Per maggiori informazioni su uno Schema MathML si veda l'Appendice A [Analisi del MathML] e la pagina principale del MathML ().

Comunque, il MathML specifica inoltre alcune regole di sintassi e di grammatica in aggiunta alle regole generali che eredita come applicazione XML. Queste regole permettono al MathML di codificare molte più informazioni di quanto sarebbe possibile normalmente con l'XML puro, senza introdurre molti più elementi, e usando una DTD o uno schema sostanzialmente più complesso. Nell'Appendice B [Grammatica di convalida della marcatura di contenuto] è data una grammatica per le espressioni della marcatura di contenuto. Ovviamente, uno svantaggio dell'uso di regole specifiche del MathML è che sono invisibili agli elaboratori e ai convalidatori XML generici.

Ci sono fondamentalmente due tipi di regole di grammatica e di sintassi del MathML aggiuntive. Un tipo coinvolge come porre criteri aggiuntivi sui valori degli attributi. Per esempio, non è possibile in XML puro richiedere che il valore di un attributo sia un intero positivo. Il secondo tipo di regola specifica restrizioni più dettagliate sugli elementi figli (per esempio sull'ordinamento) di quelle date nella DTD o anche in uno schema. Per esempio, non è possibile in XML specificare che il primo figlio debba essere interpretato in un modo, e il secondo in un altro.

Le seguenti sezioni discutono caratteristiche della sintassi e della grammatica sia dell'XML in generale che del MathML in particolare. Nel resto delle specifiche del MathML, faremo normalmente attenzione a distinguere tra l'uso richiesto dalla sintassi dell'XML e dalla DTD (e dallo schema) del MathML e l'uso richiesto da regole specifiche del MathML. Comunque, alluderemo spesso a `errori MathML' senza identificare quale parte delle specifiche è stata violata.

2.3.2 Una breve introduzione della sintassi dell'XML

Poiché il MathML è un'applicazione dell'XML, le specifiche del MathML usano la terminologia dell'XML per descriverlo. Brevemente, i dati XML sono composti da caratteri Unicode (che comprendono i normali caratteri ASCII), `riferimenti ad entità' (chiamati in modo informale `entità') come &lt; che rappresentano di solito `caratteri estesi', ed `elementi' come <mi fontstyle="normal"> x </mi>.

Molto spesso un elemento contiene altri dati XML detti il suo `contenuto', o `corpo', tra un `tag iniziale' (a volte detto `tag di apertura') e un `tag finale', come nell'HTML. Ci sono anche `elementi vuoti' come <plus/>, il cui tag iniziale finisce con /> per indicare che l'elemento non ha contenuto o tag finale. Il tag iniziale può contenere parametri con nomi detti `attributi', come fontstyle="normal" nell'esempio precedente. Per maggiori dettagli sull'XML, si consultino le specifiche dell'XML [Bray1998].

Poiché l'XML fa differenza tra maiuscole e minuscole, lo stesso vale per i nomi di elementi e di attributi del MathML. Per ragioni di leggibilità, il MathML li definisce quasi tutti in minuscolo.

Nelle discussioni formali sulla marcatura XML si mantiene una distinzione tra un elemento, come un elemento mrow, e i tag <mrow> e </mrow> che lo marcano. Ciò che si trova fra il tag iniziale <mrow> e il tag finale </mrow> è il contenuto o corpo dell'elemento mrow. Un `elemento vuoto' come none per definizione non ha un corpo e perciò ha un solo tag della forma <none/>. Di solito, la distinzione tra elementi e tag non sarà tracciata così nettamente in queste specifiche. Per esempio, a volte faremo riferimento agli elementi <mrow> e <none/>, intendendo in realtà gli elementi i cui tag sono questi, perché i riferimenti agli elementi siano visivamente distinguibili dai riferimenti agli attributi. Comunque, le parole `elemento' e `tag' saranno usate in stretto accordo con la terminologia XML.

2.3.3 Figli rispetto ad argomenti

Molti elementi MathML richiedono un numero specifico di elementi figli o aggiungono significati aggiuntivi ai figli in certe posizioni. Come notato in precedenza, richieste di questo tipo sono specifiche del MathML, e non possono essere date interamente usando la sintassi e la grammatica XML. Quando i figli di un dato elemento MathML sono soggetti a questo tipo di condizioni aggiuntive, spesso faremo riferimento ad essi come argomenti invece che semplicemente come figli in ordine di enfatizzare il loro utilizzo specifico del MathML. Si noti che specialmente nel Capitolo 3 [Marcatura di presentazione] il termine `argomento' si usa di solito in questo senso tecnico, a meno che non sia specificato altrimenti, e perciò si riferisce ad un elemento figlio.

Nelle discussioni dettagliate della sintassi degli elementi data con ogni elemento nelle specifiche del MathML, il numero di argomenti necessari e il loro ordine è indicato implicitamente dando nomi per gli argomenti alle varie posizioni. Queste informazioni sono date anche per gli elementi di presentazione nella tabella degli argomenti necessari nella Sezione 3.1.3 [Argomenti necessari], e per gli elementi di contenuto nell'Appendice B [Grammatica di convalida della marcatura di contenuto].

Pochi elementi hanno altri requisiti sul numero o sul tipo degli argomenti. Questi requisiti aggiuntivi sono descritti insieme con i singoli elementi.

2.3.4 Valori degli attributi del MathML

Secondo le specifiche del linguaggio XML, gli attributi dati agli elementi devono avere una delle forme

nome-attributo = "valore"

oppure

nome-attributo = 'valore'

dove gli spazi bianchi intorno al simbolo '=' sono opzionali.

I nomi degli attributi sono mostrati generalmente in un carattere a grandezza fissa all'interno di testo descrittivo in queste specifiche, come pure è usato il carattere a grandezza fissa per gli esempi.

Il valore di un attributo, che in generale nel MathML può essere una stringa di caratteri arbitrari, deve essere circondato da una coppia o di doppi apici (") o di apici singoli ('). Il tipo di carattere non usato per circondare il valore può farne parte.

Il MathML usa una sintassi più complicata per valori di attributi rispetto alla sintassi XML generica richiesta dalla DTD del MathML. Queste regole aggiuntive sono intese per l'uso da parte di applicazioni MathML, ed è un errore MathML violarle, anche se non possono essere imposte dall'elaborazione XML. La sintassi MathML di ogni valore di attributo è specificata nella tabella degli attributi fornita con la descrizione di ogni elemento, usando una notazione descritta in seguito. Nelle applicazioni MathML questi valori di attributi dovrebbero essere elaborati ulteriormente come segue, a meno che non sia specificato altrimenti: gli spazi bianchi devono essere ignorati tranne che per separare sequenze di lettere e cifre in parole o numeri; e i riferimenti numerici Unicode (elencati nel Capitolo 6 [Caratteri, entità e font]) che possono essere usati all'interno di elementi token per rappresentare caratteri possono essere usati per rappresentare quei caratteri nei valori degli attributi (quando quei caratteri sarebbero permessi dalla sintassi del valore dell'attributo). Si noti che l'uso dei riferimenti ad entità per la maggior parte dei simboli è ora disapprovato nel MathML 2. Perciò l'uso di un riferimento numerico a carattere Unicode è migliore, se la codifica di ingresso non permette di usarlo direttamente.

In particolare, i caratteri ", ', & e < possono essere inclusi nei valori degli attributi MathML (quando permesso dalla sintassi del valore dell'attributo) usando rispettivamente i riferimenti ad entità &quot;, &apos;, &amp; e &lt;.

La DTD del MathML fornita nell'Appendice A [Analisi del MathML] dichiara la maggior parte dei tipi di valori degli attributi come stringhe CDATA. Questo permette una maggiore interoperabilità con il software SGML e XML esistente e permette l'estensione degli elenchi dei valori predefiniti. Simili considerazioni valgono con gli schemi.

2.3.4.1 Notazioni sintattiche usate nelle specifiche MathML

Per descrivere la sintassi specifica del MathML dei valori permessi per gli attributi, si usano le seguenti convenzioni e notazioni per la maggior parte degli attributi nel presente documento.

Notazione A cosa corrisponde
numero numero decimale intero o razionale (una stringa di cifre con un punto decimale), che inizia opzionalmente con '-'
numero-senza-segno numero decimale intero o reale, senza segno
intero intero decimale, che inizia opzionalmente con '-'
intero-positivo numero decimale, senza segno, non 0
stringa stringa arbitraria (sempre l'intero valore dell'attributo)
carattere singolo carattere non di spaziatura, o riferimento a entità MathML; gli spazi bianchi di separazione sono opzionali
#rrggbb colore in formato RGB; le tre coppie di cifre esadecimali nell'esempio #5599dd definiscono proporzioni di rosso, verde e blu su una scala da x00 a xFF, che dà un blu cielo intenso.
h-unità unità di lunghezza orizzontale (le unità permesse sono elencate in seguito)
v-unità unità di lunghezza verticale (le unità permesse sono elencate in seguito)
famiglia-di-font-css spiegato nella sottosezione CSS, in seguito
nome-di-colore-css spiegato nella sottosezione CSS, in seguito
altre parole in corsivo spiegate nel testo per ogni attributo
forma + una o più istanze di 'forma'
forma * zero o più istanze di 'forma'
f1 f2 ... fn un'istanza di ciascuna forma, in sequenza, opzionalmente separate da spazi bianchi
f1 | f2 | ... | fn una qualunque delle forme specificate
[ forma ] un'istanza opzionale di 'forma'
( forma ) lo stesso che forma
parola in testo normale quella parola, presente letteralmente nel valore dell'attributo (a meno che non faccia ovviamente parte di una frase di spiegazioni)
simbolo tra apici quel simbolo, presente letteralmente nel valore dell'attributo (es. "+" or '+')

L'ordine di precedenza degli operatori per la notazione della sintassi è, dalla precedenza maggiore a quella minore:

Una stringa può contenere caratteri arbitrari specificabili all'interno dei valori degli attributi CDATA nell'XML; deve usare riferimenti alle entità per certi caratteri, come descritto in precedenza. Può contenere riferimenti a caratteri o a entità in formato XML per ciascuno dei caratteri elencati nel Capitolo 6 [Caratteri, entità e font]. Nessuna regola di sintassi nel MathML comprende una stringa come solo una parte del valore di un attributo, solo come l'intero valore.

Un carattere è un singolo carattere Unicode che non sia uno spazio bianco, o un riferimento ad entità carattere, o un'espressione che usa l'elemento mchar e dà il nome di un carattere. Esempi di quest'ultima forma sono dati dalle centinaia nel Capitolo 6 [Caratteri, entità e font].

Come semplice esempio, i valori permessi per gli attributi booleani sono specificati come true | false, che significa che l'intero valore dell'attributo deve essere o true o false.

Parole chiave e numeri adiacenti devono essere separati da uno spazio bianco nel valore reale dell'attributo, tranne per gli identificatori di unità (denotati dai simboli sintattici h-unità o v-unità) che seguono i numeri. Gli spazi bianchi non sono altrimenti necessari, ma sono permessi tra due qualunque dei token elencati in precedenza, tranne (per compatibilità con i CSS1) immediatamente prima degli identificatori di unità, tra il segno '-' e le cifre dei numeri negativi, o tra # e rrggbb o rgb.

Valori numerici di attributi per le dimensioni che devono dipendere dal font attuale possono essere dati in unità relative ai font, o in unità assolute con un nome (descritte in una sottosezione separata). Le dimensioni orizzontali sono date per convenzione in em, e le dimensioni verticali in ex, facendo seguire immediatamente un numero da uno degli identificatori di unità em o ex. Per esempio, lo spazio orizzontale intorno ad un operatore come `+' è dato per convenzione in em, anche se potrebbero essere usate altre unità. Usare unità relative ai font è generalmente preferibile all'uso di unità assolute, poiché permette alle riproduzioni di aumentare o diminuire in dimensione proporzionalmente alla dimensione attuale del font.

Per la maggior parte degli attributi numerici, solo quelli in un sottoinsieme dei valori esprimibili hanno senso; valori all'esterno di questo sottoinsieme non sono errori, a meno che non sia specificato diversamente, ma piuttosto sono arrotondati verso l'alto o verso il basso (a discrezione del riproduttore) al valore più vicino all'interno del sottoinsieme permesso. L'insieme dei valori permessi può dipendere dal riproduttore, e non è specificato dal MathML.

Se è dichiarato che un valore numerico all'interno della descrizione della sintassi del valore di un attributo permette un segno meno ('-'), es. numero o intero, non è un errore di sintassi che ce ne sia uno in casi dove un valore negativo non ha senso. Invece, il valore dovrebbe essere gestito dall'applicazione che elabora il documento come descritto nel paragrafo precedente. Un segno più esplicito ('+') non è permesso come parte di un valore numerico tranne quando è specificatamente elencato nella sintassi (come un '+' o "+" tra apici) e la sua presenza può modificare il significato del valore dell'attributo (come documentato con ogni attributo che lo permette).

I simboli h-unità, v-unità, famiglia-di-font-css e nome-di-colore-css sono spiegati nelle seguenti sottosezioni.

2.3.4.2 Attributi con unità

Alcuni attributi accettano lunghezze orizzontali o verticali come numeri seguiti da un `identificatore di unità' (spesso chiamato soltanto `unità'). I simboli di sintassi h-unità e v-unità si riferiscono rispettivamente ad un'unità per la lunghezza orizzontale o verticale. Le unità possibili e le lunghezze a cui si riferiscono sono mostrate nella tabella seguente; sono le stesse per lunghezze orizzontali e verticali, ma i simboli di sintassi sono distinti nella sintassi degli attributi per tenere presente la direzione nella quale sono usati.

Gli identificatori di unità e i loro significati sono presi dal CSS1. Comunque, la sintassi dei numeri seguiti da identificatori di unità nel MathML non è identica alla sintassi dei valori di lunghezza con unità nei fogli di stile CSS, poiché i numeri nel CSS non possono finire con virgole decimali, e possono iniziare con segni '+'.

Le unità orizzontali o verticali possibili nel MathML sono:

Identificatore di unità Descrizione di unità
em em (unità relativa ai font tradizionalmente usata per lunghezze orizzontali)
ex ex (unità relativa ai font tradizionalmente usata per lunghezze verticali)
px pixel, o dimensione in pixel del display attaule
in pollici (1 pollice = 2.54 centimetri)
cm centimetri
mm millimetri
pt punti (1 punto = 1/72 di pollice)
pc pica (1 pica = 12 punti)
% percentuale del valore predefinito

Le unità tipografiche em e ex sono definite nell'Appendice F [Glossario], e discusse ulteriormente sotto `Note aggiuntive' in seguito.

% è un'unità `relativa'; quando un valore di un attributo è dato come n% (per ogni valore numerico n), il valore specificato è il valore predefinito della proprietà che si intende controllare moltiplicato per n diviso 100. Il valore predefinito (o il modo nel quale esso è ottenuto, se non è costante) è elencato nella tabella degli attributi per ogni elemento, e il suo significato è descritto nella successiva documentazione dell'attributo. (L'elemento mpadded ha la sua sintassi per % e non lo permette come identificatore di unità.)

Per consistenza con i CSS, le unità di lunghezza nel MathML sono raramente opzionali. Quando lo sono, il simbolo di unità è racchiuso tra parentesi quadre nella sintassi dell'attributo, dopo il numero al quale si applica, es. numero [ h-unità ]. Il significato di non specificare nessuna unità è dato nella documentazione di ogni attributo; in generale è che il numero dato è un moltiplicatore per il valore predefinito dell'attributo. (In questi casi, specificare il numero nnn senza un'unità è equivalente a specificare il numero nnn per 100 seguito da %. Per esempio, <mo maxsize="2"> ( </mo> è equivalente a <mo maxsize="200%"> ( </mo>.)

Come eccezione speciale (anch'essa consistente con i CSS), non è necessario che un valore numerico uguale a 0 sia seguito da un identificatore di unità anche se la sintassi qui specificata ne richiede uno. In tali casi, l'identificatore di unità (o la sua mancanza) non importerebbe, poiché 0 per ogni unità fa 0.

Per la maggior parte degli attributi è scelta l'unità tipica che sarebbe usata per descriverli nell'impaginazione come quella usata nel valore predefinito di quell'attributo in queste specifiche; quando non è dato un valore predefinito specifico, l'unità tipica è di solito menzionata nella tabella della sintassi o nella documentazione per quell'attributo. Le unità più comuni sono em o ex. Comunque, può essere usata qualunque unità, a meno che non sia specificato diversamente per un dato attributo.

Note aggiuntive sulle unità

Si noti che alcuni attributi, es. framespacing in un elemento <mtable>, possono contenere più di un valore numerico, ciascuno seguito dalla sua unità.

E' convenzione usare l'unità relativa ai font ex principalmente per lunghezze verticali, e em principalmente per lunghezze orizzontali, ma non è necessario. Queste unità sono relative al font e alla dimensione del font usata per riprodurre l'elemento nel cui valore di attributo sono specificate, il che significa che devono essere interpretate dopo che sono elaborati attributi come fontfamily e fontsize, se ce ne sono sullo stesso elemento, poiché modificare il font corrente o la sua dimensione può alterare la lunghezza di una di queste unità.

La definizione della lunghezza di ogni unità (ma non la sintassi MathML per i valori di lunghezza) è quella specificata nei CSS1, tranne che se un font fornisce valori specifici per em e ex diversi dai valori definiti dai CSS1 (rispettivamente la dimensione del font e l'altezza `x'), devono essere usati questi valori.

2.3.4.3 Attributi compatibili con i CSS

Vari attributi del MathML, elencati in seguito, corrispondono strettamente alle proprietà di presentazione testuale definite dai Fogli di Stile a Cascata, Livello 1 (CSS1).

I nomi e i valori accettabili di questi attributi sono stati allineati con le direttive CSS1 dove possibile. In generale, la sintassi MathML per ogni attributo intende essere un sottoinsieme della sintassi CSS per la proprietà corrispondente. Differenze di dettagli, dove esistono, sono spiegate con la documentazione di ogni attributo, nelle sezioni di queste specifiche elencate nella tabella precedente.

La sintassi di certi attributi è parzialmente specificata, nelle tabelle della sintassi degli attributi in queste specifiche, usando uno dei simboli famiglia-di-font-css o nome-di-colore-css, come mostrato nella seguente tabella. Questi simboli si riferiscono a sintassi di altre Direttive W3C, e sono spiegati nelle sezioni di queste specifiche a cui si fa riferimento nella tabella.

Attributo MathML Proprietà CSS simbolo di sintassi Elementi MathML si riferisce a
fontsize font-size - token di presentazione; mstyle  
fontweight font-weight - token di presentazione; mstyle  
fontstyle font-style - token di presentazione; mstyle  
fontfamily font-family famiglia-di-font-css token di presentazione; mstyle  
color color nome-di-colore-css token di presentazione; mstyle  
background background nome-di-colore-css mstyle  

Si veda inoltre la Sezione 2.3.5 [Attributi condivisi da tutti gli elementi del MathML] in seguito per una discussione degli attributi class, style e id per l'uso con i fogli di stile.

Ordine di elaborazione degli attributi rispetto ai fogli di stile

I CSS o fogli di stile analoghi possono specificare modifiche alle proprietà di riproduzione degli elementi MathML selezionati; la selezione di tali elementi può avvenire in vari modi. Sia le proprietà elencate in precedenza che altri attributi di riproduzione del MathML o proprietà supportate da un meccanismo di fogli di stile possono essere influenzate, in principio, per ogni elemento. Poiché le proprietà di riproduzione possono anche essere modificate da attributi su un elemento o automaticamente è necessario specificare l'ordine nel quale sono applicate le modifiche da varie fonti. Un esempio di aggiustamento automatico è ciò che succede per fontsize, come spiegato nella discussione su scriptlevel nella Sezione 3.3.4 [Modifiche allo stile (mstyle)]. Nel caso di modifiche `assolute', ovvero impostare un nuovo valore della proprietà indipendente dal vecchio valore (opposte alle modifiche `relative', come incrementi o moltiplicazioni per un fattore), la modifica assoluta effettuata per ultima sarà l'unica modifica assoluta efficace, così le fonti di modifiche che dovrebbero avere la priorità più alta devono essere elaborate per ultime.

Nel caso dei CSS1, l'ordine di elaborazione delle modifiche da varie fonti che influenzano le proprietà di riproduzione di un elemento MathML deve essere il seguente:

(prime modifiche; priorità minore)

(ultime modifiche; priorità maggiore)

Si noti che l'ordine delle modifiche derivate dai fogli di stile CSS è specificato dai CSS stessi. La seguente spiegazione logica è legata solo al problema di dove in quest'ordine preesistente devono essere inserite le modifiche causate dall'impostazione esplicita di attributi MathML.

Spiegazione logica: gli attributi di riproduzione del MathML sono analoghi agli attributi di riproduzione dell'HTML come align, che secondo la sezione dei CSS1 sull'ordine di cascata devono essere elaborati con la stessa priorità. Inoltre, questa scelta di priorità permette ai lettori, dichiarando certi stili CSS `important', di decidere quali delle loro preferenze di stile devono sovrascrivere l'impostazione esplicita degli attributi nel MathML. Poiché le espressioni MathML, sia composte di elementi di `presentazione' che di `contenuto', sono intese principalmente per trasferire significato, con il loro `aspetto grafico' (se presente) inteso principalmente per aiutare a questo fine ma non per essere essenziale, è probabile che i lettori spesso vorranno che le loro preferenze di stile abbiano la priorità; l'eccezione principale sarà quando un attributo di riproduzione è inteso per alterare il significato contenuto in un'espressione, cosa che è generalmente scoraggiata negli attributi di presentazione del MathML.

2.3.4.4 Valori predefiniti degli attributi

I valori predefiniti degli attributi MathML sono dati in generale insieme alla descrizione degli elementi specifici nel testo. I valori predefiniti mostrati in testo normale nelle tabelle degli attributi per un elemento sono valori letterali (a meno che non siano ovviamente frasi esplicative), ma quando sono in corsivo sono la descrizione di come possono essere calcolati i valori predefiniti.

I valori predefiniti descritti come ereditati sono presi dall'ambiente di riproduzione, come descritto sotto mstyle, o in alcuni casi (descritti individualmente) dai valori di altri attributi di elementi circostanti, o da certe parti di quei valori. Il valore usato sarà sempre uno che potrebbe essere stato specificato espressamente, se fosse noto; non dipenderà mai dal contenuto o dagli attributi dello stesso elemento, solo dal suo ambiente. (Ciò che significa quando viene usato può, comunque, dipendere da questi attributi o dal contenuto.)

I valori predefiniti descritti come automatici devono essere calcolati da un riproduttore MathML in un modo che produca una presentazione di alta qualità; come fare questo non è generalmente specificato dalle specifiche del MathML. Il valore calcolato sarà sempre uno che potrebbe essere stato specificato espressamente, se fosse noto, ma dipenderà di solito dal contenuto dell'elemento e probabilmente dall'ambiente di riproduzione.

Altre descrizioni in corsivo di valori predefiniti che appaiono nelle tabelle degli attributi sono spiegate singolarmente per ogni attributo.

Gli apici semplici o doppi necessari attorno ai valori di attributi in un tag di apertura XML non sono mostrate nelle tabelle della sintassi dei valori degli attributi per ogni elemento, ma sono mostrate attorno ai valori degli attributi degli esempi nel testo.

Si noti che, in generale, non c'è un valore che possa essere dato esplicitamente per un attributo MathML che simuli l'effetto di non specificare affatto l'attributo per gli attributi ereditati o automatici. Dare espressamente le parole `ereditato' o `automatico' non funzionerà, e non è generalmente permesso. Inoltre, anche per gli attributi di presentazione per i quali è documentato qui un valore predefinito specifico, può essere usato l'elemento mstyle (Sezione 3.3.4 [Modifiche allo stile (mstyle)]) per cambiarlo per gli elementi che esso contiene. Perciò, la DTD del MathML dichiara la maggior parte dei valori predefiniti degli attributi di presentazione come #IMPLIED (impliciti), cosa che impedisce ai preelaboratori XML di aggiungere loro uno specifico valore predefinito. Questo punto di vista è portato attraverso lo schema del MathML.

2.3.4.5 Valori degli attributi nella DTD del MathML

In una DTD XML, i valori degli attributi permessi possono essere dichiarati come stringhe generiche, o possono essere vincolati in vari modi, sia enumerando i possibili valori, sia dichiarandoli di certi tipi di dati speciali. La scelta di un tipo di attributo XML influenza l'estensione nella quale possono essere eseguiti controlli di validità usando una DTD.

La DTD del MathML specifica i tipi formali di attributi XML per tutti gli attributi MathML, comprese le enumerazioni di valori legittimi in alcuni casi. In generale, comunque, la DTD del MathML è relativamente permissiva, dichiarando spesso i valori degli attributi come stringhe; questo è fatto per ragioni di interoperabilità con analizzatori SGML permettendo che attributi multipli di un elemento MathML accettino gli stessi valori (come true e false), e anche per permettere estensioni agli elenchi dei valori predefiniti.

Allo stesso tempo, anche se un valore di attributo può essere dichiarato come una stringa nella DTD, solo certi valori sono legittimi nel MathML, come descritto in precedenza e nel resto di queste specifiche. Per esempio, molti attributi si aspettano valori numerici. Nella sezione che segue sono descritti i valori permessi per gli attributi di ciascun elemento. Per determinare quando questi vincoli sono realmente imposti nella DTD del MathML, si consulti l'Appendice A [Analisi del MathML]. Comunque, la mancanza di imposizione di un requisito nella DTD non implica che il requisito stesso non faccia parte del linguaggio MathML, o che non sarà imposto da un particolare riproduttore MathML. (Si veda la Sezione 7.2.2 [Gestione degli errori] per una descrizione di come i riproduttori MathML dovrebbero reagire agli errori MathML.)

Inoltre, è fornita per comodità la DTD del MathML; anche se essa intende essere pienamente compatibile con il testo delle specifiche, il testo dovrebbe essere considerato definitivo se c'è una contraddizione. (Ogni contraddizione che può esistere tra vari capitoli del testo dovrebbe essere risolta a favore del Capitolo 6 [Caratteri, entità e font] in primo luogo, poi del Capitolo 3 [Marcatura di presentazione], del Capitolo 4 [Marcatura di contenuto], poi della Sezione 2.3 [Sintassi e grammatica del MathML], e poi di altre parti del testo.) Per lo Schema del MathML la situazione sarà la stessa: il testo delle Direttive pubblicate avrà la precedenza. Sebbene questo sia ciò che dovrebbe succedere, c'è una difficoltà pratica. Se il sistema che elabora il MathML usa un analizzatore di convalida, sia esso basato su una DTD o su uno Schema, il processo si limiterà probabilmente ad arrestarsi quando incontrerà qualcosa che è sintassi incorretta, sia che un'ulteriore elaborazione MathML in piena armonia con le specifiche riesca ad elaborare il pezzo nel modo corretto o meno.

2.3.5 Attributi condivisi da tutti gli elementi del MathML

Per agevolare la compatibilità con i Fogli di Stile a Cascata, Livello 1 (CSS1), tutti gli elementi del MathML accettano gli attributi class, style e id oltre agli attributi descritti specificamente per ogni elemento. I riproduttori MathML che non supportano i CSS possono ignorare questi attributi. Il MathML specifica i valori di questi attributi come stringhe generiche, anche se i meccanismi di fogli di stile hanno una sintassi più restrittiva per essi. Ovvero, ogni valore per essi è valido nel MathML.

I riproduttori che supportano i CSS (o analoghi meccanismi di fogli di stile) possono usare questi attributi per determinare meglio quali elementi MathML devono essere soggetti a quali modifiche indotte dai fogli di stile alle varie proprietà di riproduzione. Le proprietà che possono essere influenzate, e come queste modifiche le influenzano, sono discusse nella Sezione 2.3.4.3 [Attributi compatibili con i CSS] in precedenza.

Ogni elemento MathML, a causa di un'eredità dal MathML 1.0, accetta inoltre l'attributo disapprovato other (Sezione 7.2.3 [Attributi per dati non specificati]) che era stato concepito per passare attributi non standard senza violare la DTD del MathML. Ai riproduttori MathML è richiesto di elaborare questo attributo solo se reagiscono ad attributi non standard nel MathML. Comunque, l'uso di other è altamente disapprovato quando ci sono già altri modi nel MathML per passare informazioni specifiche.

Si veda inoltre la Sezione 3.2.1 [Attributi comuni agli elementi token] per un elenco di attributi MathML che possono essere usati sulla maggior parte degli elementi token di presentazione.

2.3.6 Collassare gli spazi bianchi in entrata

Il MathML ignora gli spazi bianchi che occorrono fuori dagli elementi token. I caratteri che non sono spazi bianchi non sono permessi qui. Gli spazi bianchi che occorrono nel contenuto degli elementi token sono `eleminati' dalle estremità, ovvero ogni spazio bianco all'inizio e alla fine del contenuto è rimosso. Gli spazi bianchi interni al contenuto degli elementi MathML sono `collassati' in modo canonico, ovvero ogni sequenza di 1 o più caratteri di spazio bianco è sostituita con un carattere di spaziatura (o carattere di spazio).

Nel MathML, come nell'XML, `spazi bianchi' vuol dire semplici spazi, caratteri di tabulazione, fine linea o ritorno del carrello, ovvero i caratteri con codici Unicode esadecimali rispettivamente U+0020, Uč0009, U+000a o U+000d.

Per esempio, <mo> ( </mo> è equivalente a <mo>(</mo>, e

<mtext>
  Teorema
  1:
</mtext>

è equivalente a <mtext>Teorema 1:</mtext>.

Gli autori che desiderano codificare caratteri di spazio bianco all'inizio o alla fine del contenuto di un token, o in sequenze diverse da quella di un singolo spazio, senza che essi siano ignorati, devono usare &nbsp; o altre entità `spazio bianco' non di marcatura come descritto nella Sezione 6.1.4 [Caratteri non di marcatura]. Per esempio, si confronti

<mtext>
 Teorema
  1:
</mtext>

con

<mtext>
&nbsp;Teorema&NewLine; &nbsp;1: 
</mtext> 

Quando viene presentato il primo esempio, non ci sono spazi bianchi prima di `Teorema', uno spazio tra `Teorema' e `1:' e nessuno spazio bianco dopo `1:'. Nel secondo esempio viene riprodotto un singolo spazio prima di `Teorema', un carattere di fine linea dopo `Teorema', due spazi prima di `1:' e nessuno spazio bianco dopo `1:'.

Si noti che l'attributo xml:space non si applica in questa situazione poiché gli elaboratori XML passano gli spazi bianchi nei token a un elaboratore MathML; sono le regole di elaborazione del MathML che specificano che gli spazi bianchi sono eliminati e collassati.

Per spazi bianchi che occorrono fuori dal contesto degli elementi token mi, mn, mo, ms, mtext, ci, cn e annotation, dovrebbe essere usato un elemento mspace, opposto ad un elemento mtext che contiene solo entità `spazi bianchi'.

Descrizione sommaria: Linguaggio di marcatura matematica (MathML) Versione 2.0
Precedente: 1 Introduzione
Successivo: 3 Marcatura di presentazione