Lisez-moi S.V.P. 

4 Le balisage de contenu

Table des matières : Le langage de balisage mathématique (MathML) version 2.0
Chapitre précédent : 3 Le balisage de présentation
Chapitre suivant : 5 La combinaison des balisages de présentation et de contenu

4.1 Introduction

4.1.1 Les visées du balisage de contenu

Comme indiqué en introduction de cette recommandation, on peut différencier les mathématiques par leur utilisation d'un langage (relativement) formel : la notation mathématique. Toutefois, on ne devrait pas assimiler les mathématiques et leur présentation à une seule et même chose. Les sommes ou les produits mathématiques ont une existence et une signification pour nombre d'applications qui est entièrement indépendante de leurs rendus sonores ou visuels. Dans le langage de balisage mathématique, l'objectif du balisage de contenu est de fournir un codage explicite de la structure mathématique sous-jacente d'une expression plutôt qu'un rendu particulier de celle-ci.

Il y a beaucoup de raisons de fournir un codage spécifique du contenu. Même l'usage discipliné et systématique de balises de présentation ne peut pas saisir exactement ces informations sémantiques. Car, sans d'autres informations, il est impossible de décider si une présentation particulière a été délibérément choisie pour coder la structure mathématique ou juste pour obtenir un effet visuel ou sonore particuliers. En outre, un auteur utilisant le même codage pour gérer à la fois la présentation et la structure mathématique pourrait être privé d'un certain codage de présentation simplement parce qu'une convention le réserve à un autre usage sémantique.

Les difficultés proviennent de ce qu'il existe des correspondances de plusieurs à un entre la présentation et la sémantique, et vice versa. Par exemple, le concept mathématique H multiplié par e est souvent codé en se servant d'un opérateur explicite comme dans H × e. Dans d'autres contextes de présentation, l'opérateur de multiplication peut être invisible H e, ou rendu parlé par fois. Généralement, plusieurs présentations différentes sont possibles selon le contexte et les préférences de style de l'auteur ou du lecteur. Ainsi, il peut être impossible de décider si l'expression H e hors contexte représente le nom d'un élément chimique ou le produit mathématique des deux variables H et e.

La présentation mathématique change également avec la culture et dans le temps : certaines expressions des mathématiques combinatoires ont aujourd'hui une signification très différente pour un mathématicien russe et un mathématicien français (cf. la section 5.4.1 Les feuilles de style de notation pour un exemple). Les notations peuvent ne plus avoir cours, par exemple, l'utilisation des symboles musicaux dièse et bémol pour indiquer un maximum et un minimum [Chaundy1954]. Une notation en usage en 1644 pour la multiplication mentionnée précédemment était la suivante :
\blacksquare H e [Cajori1928].

Lorsqu'on code explicitement la structure mathématique sous-jacente, sans se préoccuper de sa représentation auditive ou visuelle, on peut échanger des informations de manière plus précise avec les systèmes capables de manipuler des mathématiques. Dans l'exemple trivial précédent, un tel système pourrait remplacer les variables H et e par des valeurs et évaluer le résultat. D'autres domaines d'application intéressants comprennent les livres électroniques interactifs et autres matériels didactiques.

4.1.2 La portée du balisage de contenu

La sémantique de la notation mathématique générale ne fait pas l'objet d'un consensus. La codification systématique de la plupart des mathématiques serait un travail gigantesque, une tâche sans fin. Au lieu de cela, MathML rend explicite un nombre relativement faible de concepts mathématiques courants, soigneusement choisis pour suffire dans beaucoup d'applications. En outre, il offre un mécanisme permettant d'associer une sémantique à une nouvelle structure de notation. De cette façon, on pourra toujours coder les concepts mathématiques qui n'appartiennent pas à l'ensemble des éléments de base (section 4.2.6 La syntaxe et la sémantique).

Le jeu de base des éléments de contenu est choisi pour convenir au codage simple de la plupart des formules utilisées des classes primaires aux classes secondaires aux États-Unis, et probablement au-delà jusqu'au deux premières années d'enseignement supérieur, c'est-à-dire jusqu'au niveau A aux Étas-Unis et au niveau baccalauréat en Europe. Les domaines couverts dans une certaine mesure dans MathML sont les suivants :

Nous ne prétendons ni même suggérons que le jeu des éléments proposés est complet dans ces domaines, mais les possibilités d'extension par l'auteur pallient grandement tous les problèmes qui auraient pu être le fait des omissions dans cette liste.

4.1.3 Les concepts de base du balisage de contenu

La conception des éléments de contenu MathML obéit aux principes suivants :

Le but principal du codage du contenu est d'établir des connexions explicites entre les structures mathématiques et leurs significations. Les éléments de contenu correspondent directement aux parties de l'arbre de l'expression mathématique sous-jacente. Chaque structure a une sémantique par défaut associée et un mécanisme permet l'association de définitions mathématiques nouvelles à des structures nouvelles.

Les avantages significatifs procurés par l'introduction de balises spécifiques au contenu sont les suivants :

Les expressions décrites comme éléments de contenu doivent toujours être rendues. Pour les expressions communes, les présentations visuelles par défaut sont habituellement claires. Lewis Carroll a écrit : Occupez-vous du sens et les sons s'occuperont d'eux-mêmes [Carroll1871]. La description détaillée de chaque élément comprend une présentation par défaut (cf. la section 4.4 Les éléments de balisage du contenu).

Pour atteindre ces objectifs, le codage de contenu MathML repose sur le concept d'arbre de l'expression. L'arbre du contenu de l'expression se construit d'après un ensemble d'objets plus primitifs, désignés ici par conteneurs et opérateurs. MathML est riche d'un jeu d'objets conteneurs et opérateurs prédéfinis, ainsi que de structures pour combiner les conteneurs et les opérateurs selon un sens mathématique. La syntaxe et l'utilisation de ces éléments de contenu et de ces structures sont décrites dans la section suivante.

4.2 Le guide d'utilisation des éléments de contenu

Puisque le motif présidant au balisage du contenu MathML est le codage des expressions mathématiques, avec une structure mathématique de l'expression qui soit claire, la syntaxe et l'utilisation du balisage du contenu doivent être assez cohérentes pour faciliter une interprétation sémantique automatisée. Il ne doit pas y avoir de doute quand, par exemple, on attend l'application réelle d'une somme, d'un produit ou d'une fonction et, si présence de nombres spécifiques, les informations fournies doivent être suffisantes afin de reconstituer le nombre exact pour les besoins du calcul. Bien sûr, c'est toujours le processeur MathML conforme qui décide de ce qui doit advenir d'une telle expression basée sur un contenu, et le calcul ne représente qu'une option parmi beaucoup d'autres. Un moteur de rendu (ou un éditeur structuré) pourrait simplement utiliser les données et sa connaissance intégrée propre de la structure mathématique pour rendre l'objet. Il pourrait aussi manipuler l'objet pour construire un nouvel objet mathématique. Un système plus axé sur le calcul pourrait essayer d'effectuer l'opération indiquée ou d'évaluer sa fonction.

Le but de cette section est de décrire une utilisation cohérente attendue. Les exigences dépassent la simple satisfaction de la structure syntaxique définie par une définition DTD XML. Le non-respect d'une utilisation décrite ci-dessous entraînera une condition d'erreur MathML, même si l'expression est valide du point de vue de la syntaxe vis-à-vis de la définition DTD.

Outre les informations d'utilisation contenues dans cette section, la section 4.4 Les éléments de balisage du contenu donne la liste complète de chaque élément de contenu, en fournissant des informations de référence concernant leurs attributs, leur syntaxe, des exemples, leurs sémantiques et leurs rendus par défaut suggérés. Les règles d'utilisation d'un balisage de présentation dans un balisage de contenu sont expliquées dans la section 5.2.3 Le balisage de présentation dans un balisage de contenu. On donne une grammaire EBNF informelle décrivant la syntaxe du balisage de contenu dans l'Annexe B [La grammaire de validation du balisage de contenu].

4.2.1 Vue d'ensemble de la syntaxe et de l'utilisation

Le codage du contenu MathML repose sur le concept d'arbre de l'expression. En règle générale, les nœuds terminaux dans l'arbre représentent des objets mathématiques de base, tels que des nombres, des variables, des opérations arithmétiques, et ainsi de suite. Les nœuds internes dans l'arbre représentent généralement un type d'application de fonction ou une autre structure mathématique construisant un objet composite. L'application de fonction en fournit l'exemple le plus important : un nœud interne peut représenter l'application d'une fonction sur plusieurs arguments, eux-mêmes représentés par des nœuds terminaux en aval du nœud interne.

On peut ranger les éléments de contenu MathML dans les catégories suivantes, en fonction de leur utilisation :

Ce sont les unités élémentaires de structure qui constituent les expressions de contenu MathML. Chaque catégorie est expliquée dans une section distincte à suivre. Dans le reste de cette section, nous introduirons brièvement certains des éléments de chaque type parmi les plus courants et nous examinerons les structures générales qui permettent de les combiner selon un sens mathématique.

4.2.1.1 La construction des objets mathématiques

Les arbres d'expression de contenu se construisent à partir d'objets mathématiques de base. Au niveau le plus bas, les nœuds terminaux sont encapsulés dans des éléments non vides qui définissent leurs types. Les nombres et les symboles sont balisés par des éléments atomiques cn et ci. Les constructions plus élaborées, tels que les ensembles, les vecteurs et les matrices, se balisent aussi avec des éléments qui indiquent leurs types mais, au lieu de contenir directement des données, ces éléments conteneurs sont construits avec d'autres éléments. Les éléments servent dans l'ordre à identifier clairement les objets sous-jacents. On peut ainsi se servir d'une analyse XML normalisée pour définir les propriétés globales des objets.

Les conteneurs <cn>12345</cn> , <ci>x</ci> et <csymbol definitionURL="mySymbol.htm" encoding="text">S</csymbol> représentent un nombre mathématique, un identificateur et un symboles défini extérieurement. Plus loin, nous verrons les éléments opérateurs, tels que plus ou sin, qui offrent un accès aux opérations et aux fonctions mathématiques de base applicables à ces objets. D'autres conteneurs, tels que set pour les ensembles et matrix pour les matrices, permettent de représenter divers objets composites communs.

Par exemple, le nombre 12345 se code ainsi :

<cn>12345</cn>

Les attributs et le contenu de type PCDATA fournissent ensemble les données nécessaires à une application pour l'analyse du nombre. Par exemple, on suppose un nombre en base 10 par défaut, mais pour indiquer des données sous-jacentes écrites en fait en base 8, il suffit de donner la valeur "8" à l'attribut base :

<cn base="8">12345</cn>

Et on peut coder le nombre complexe 3 + 4i par :

<cn type="complex-cartesian">3<sep/>4</cn>

Ces informations permettent à une autre application d'analyser aisément ces expressions pour obtenir le nombre exact.

En autre exemple, on code le symbole scalaire v ainsi :

<ci>v</ci>

Par défaut, les éléments ci représentent les élément d'un champ commutatif (cf. l'Annexe C [Les définitions des éléments de contenu]). Si on attend un vecteur, on peut alors le coder comme ceci :

<ci type="vector">v</ci>

On invoque la sémantique par défaut associée à l'élément vector, à savoir un élément arbitraire d'un espace vectoriel de dimension finie.

En utilisant les éléments ci et csymbol, nous avons indiqué clairement que l'on se référait à un identificateur ou un symbole mathématiques, mais cela ne dit rien sur la manière de les rendre. Par défaut, un symbole est rendu comme si l'élément ci (ou l'élément csymbol) était en réalité l'élément de présentation mi (cf. la section 3.2.3 Les identificateurs (mi)). Le rendu réel d'un symbole mathématique peut être aussi élaboré que nécessaire en utilisant simplement des structures de présentation plus élaborées (comme décrit dans le chapitre 3 Le balisage de présentation) dans le corps de l'élément ci (ou de l'élément csymbol).

Le rendu par défaut d'un objet simple balisé avec l'élément cn est le même que celui de l'élément de présentation mn avec une certaine latitude pour forcer la présentation de la valeur de type PCDATA en fournissant des balises mn explicites. Cela est précisé dans la section 4.4 Les éléments de balisage du contenu.

Les problèmes concernant les objets composites, tels que les ensembles, les vecteurs et les matrices, sont tous similaires à ceux décrits précédemment pour les nombres et les symboles. Chacun de ces objets a des propriétés globales en tant qu'objet mathématique influant sur la façon dont on doit l'analyser. Tout peut être affecté, que ce soit l'interprétation des opérations qui lui sont appliquées jusqu'à la manière de rendre les symboles qui le représentent. Ces propriétés mathématiques se fixent en réglant les valeurs des attributs.

4.2.1.2 La construction des expressions générales

La notion de construction d'un arbre général de l'expression est essentiellement celle d'appliquer un opérateur à des sous-objets. Par exemple, on peut assimiler la somme a + b à l'application de l'opérateur addition aux deux arguments a et b. Dans MathML, on utilise les éléments comme des opérateurs en grande partie pour la même raison que l'on se sert d'éléments pour contenir des objets. Ils sont reconnus au niveau de l'analyse XML et leurs attributs peuvent servir pour enregistrer ou modifier la sémantique attendue. Par exemple, avec l'élément MathML plus, la définition des attributs definitionURL et encoding suivante :

<plus definitionURL="www.example.com/VectorCalculus.htm"
      encoding="text"/>

Celle-ci peut indiquer que l'opération attendue se base sur un vecteur.

Il existe aussi une autre raison de se servir d'éléments pour dénoter des opérateurs. Il y a une distinction sémantique cruciale entre la fonction en question et l'expression résultant de l'application de cette fonction sur zéro à plusieurs arguments qui doivent être saisis. On réalise cela en fabriquant les fonctions comme des objets auto-contenus avec leurs propriétés propres et en fournissant une structure apply explicite correspondant à l'application de la fonction. Nous étudierons la structure apply dans la section suivante.

MathML possède beaucoup d'éléments opérateurs prédéfinis couvrant une gamme de sujets mathématiques. Toutefois, une classe d'expressions importante implique des fonctions et des symboles inconnus, ou bien définis par l'utilisateur. Pour ces situations, MathML fournit un élément csymbol général abordé plus loin.

4.2.1.3 La structure apply

Le moyen le plus essentiel d'assembler une expression mathématique dans le balisage de contenu MathML est la structure apply. L'élément apply applique typiquement un opérateur à ses arguments. Il correspond à une expression mathématique complète. Approximativement parlant, cela veut dire un bout de mathématiques qui ne changerait pas de signification s'il était entouré par des parenthèses ou des crochets logiques.

Par exemple, on pourrait coder l'expression (x + y) par :

<apply>
  <plus/>
  <ci> x </ci>
  <ci> y </ci>
</apply>

Les balises ouvrante et fermante de l'élément apply définissent exactement la portée d'un opérateur ou d'une fonction. La manière la plus habituelle d'utiliser apply est simple et récursive. Symboliquement, on peut décrire le modèle de contenu ainsi :

<apply> 
  op 
  a 
  b
</apply>

Où les opérandes a et b sont des conteneurs ou d'autres éléments eux-mêmes à contenu, op est un opérateur ou une fonction. Remarquez que cela permet, puisque l'élément apply est un conteneur, l'imbrication des structures apply à une profondeur arbitraire.

Un élément apply peut en principes avoir un nombre quelconque d'opérandes :

<apply> op a b [c...] <apply>

Par exemple, on peut coder l'expression (x + y + z) par :

<apply>
  <plus/>
  <ci> x </ci>
  <ci> y </ci>
  <ci> z </ci>
</apply>

Les expressions mathématiques impliquant une composition d'opérations se traduisent par une imbrication d'éléments apply. Par exemple, le codage de l'expression ax + b serait :

<apply>
  <plus/>
  <apply>
    <times/>
    <ci> a </ci>
    <ci> x </ci>
  </apply>
  <ci> b </ci>
</apply>

Il n'est pas nécessaire d'introduire des parenthèses ou de recourir aux règles de priorité des opérateurs pour analyser l'expression correctement. Les balises apply fournissent un regroupement correct pour réutiliser les expressions dans d'autres structures. Toute expression englobée par un élément apply est vue comme un seul objet cohérent.

Une expression telle que (F + G)(x) pourrait être un produit, comme ici :

<apply>
  <times/>
  <apply>
    <plus/>
    <ci> F </ci>
    <ci> G </ci>
  </apply>
  <ci> x </ci>
</apply>

Ou elle pourrait indiquer l'application de la fonction F + G à l'argument x. On pourrait y parvenir en construisant la somme suivante :

<apply>
  <plus/>
  <ci> F </ci>
  <ci> G </ci>
</apply>

Qu'on appliquerait à l'argument x ainsi :

<apply>
  <apply>
    <plus/>
    <ci> F </ci>
    <ci> G </ci>
    </apply>
  <ci> x </ci>
</apply>

La fonction et les arguments peuvent être des identificateurs simples ou bien des expressions plus compliquées.

Dans MathML 1.0, il y avait une autre structure dont l'utilisation est très proche de celle de l'élément apply, avec des opérateurs et des arguments : l'élément reln. L'élément reln servait à indiquer l'existence d'une relation mathématique entre ses arguments, ce qui est à l'opposé de l'application d'un opérateur. Ainsi, le balisage de l'expression x < y dans MathML 1.0 était le suivant :

<reln>
  <lt/>
  <ci> x </ci>
  <ci> y </ci>
</reln>

Dans MathML 2.0, la structure apply s'utilise avec tous les opérateurs y compris les opérateurs logiques. En MathML 2.0, l'expression précédente devient :

<apply>
  <lt/>
  <ci> x </ci>
  <ci> y </ci>
</apply>

L'utilisation de l'élément reln avec des opérateurs de relation est conservée pour des raisons de rétrocompatibilité, mais elle est déconseillée. Nous encourageons les auteurs de nouveaux contenus à utiliser apply dans tous les cas.

4.2.1.4 Les fonctions et les opérateurs définis explicitement

Les opérations et fonctions les plus courantes telles que plus et sin sont prédéfinies explicitement comme des éléments vides (cf. la section 4.4 Les éléments de balisage du contenu). Elles ont les attributs type et definitionURL et l'auteur peut, en les changeant, enregistrer qu'un autre type d'opération arithmétique est attendu. Cela permet essentiellement de réutiliser la même notation dans une discussion déplacée dans un domaine algébrique différent.

En raison de leur nature, la notation des mathématiques doit être extensible. La clé de l'extensibilité est la capacité de l'utilisateur à définir des fonctions nouvelles et d'autres symboles pour augmenter le champs du discours mathématique.

Il est toujours possible de créer des expressions arbitraires puis de s'en servir comme symboles dans le langage. On peut alors inférer directement leurs propriétés de cet usage comme on l'a fait dans la section précédente. Toutefois, cette approche empêcherait de coder le fait que la structure était un symbole connu, ou de consigner ses propriétés mathématiques sauf à les utiliser réellement. L'élément csymbol sert de conteneur pour construire un nouveau symbole, un peu comme on utilise l'élément ci pour construire un identificateur. (Remarquez que le terme symbole est employé ici dans un sens abstrait et n'a aucun rapport avec une présentation quelconque de la structure à l'écran ou sur le papier). La différence d'utilisation tient au fait que l'élément csymbol devrait désigner un certain concept établi mathématiquement par une définition externe appelée via l'attribut definitionURL, tandis que l'élément ci sert pour les identificateurs, qui sont essentiellement locaux à l'expression MathML et qui n'utilisent pas de mécanisme de définition externe. La cible de l'attribut definitionURL sur l'élément csymbol peut coder la définition dans un format quelconque ; l'attribut encoding indique le codage particulier utilisé.

Par exemple, afin de décrire une fonction entièrement nouvelle avec l'élément csymbol, on écrit :

<csymbol definitionURL="www.example.com/VectorCalculus.htm"
         encoding="text">
  Christoffel
</csymbol>

L'attribut definitionURL donne une adresse URI fournissant une définition écrite du symbole Christoffel. Les définitions par défaut suggérées pour les éléments de contenu MathML, dans l'Annexe C [Les définitions des éléments de contenu], apparaissent dans un format basé sur OpenMath, quoique rien n'oblige à utiliser un format particulier. Le rôle de l'attribut definitionURL est très similaire au rôle des définitions incluses au début de beaucoup de publications mathématiques, qui souvent se rapporte juste à une définition utilisée par un livre particulier.

MathML 1.0 reconnaissait l'élément fn servant à coder le fait d'utiliser une structure comme une fonction ou un opérateur. Pour consigner l'utilisation sémantique de l'expression F + G comme fonction, on la codait ainsi :

<fn>
  <apply>
    <plus/>
    <ci>F</ci>
    <ci>G</ci>
  </apply>
</fn>

Même si elle est admise dans MathML 2.0 pour des raisons de rétrocompatibilité, cette utilisation est maintenant déconseillée. La position d'une structure comme premier sous-élément de apply l'établit clairement comme opérateur. S'il faut apporter d'autres informations à la structure, on devrait les envelopper dans un élément semantics, par exemple, comme ceci :

<semantics definitionURL="www.example.com/vectorfuncs/plus.htm"
           encoding="Mathematica">
  <apply>
    <plus/>
    <ci>F</ci>
    <ci>G</ci>
  </apply>
</semantics>

MathML 1.0 reconnaissait l'utilisation de l'attribut definitionURL avec l'élément fn pour désigner les définitions externes des fonctions définies par l'utilisateur. Même si elle est admise pour des raisons de rétrocompatibilité, cette utilisation est déconseillée dans MathML 2.0 en faveur de l'élément csymbol pour définir la fonction, l'élément apply servant ensuite à la relier à ses arguments. Par exemple :

  <apply>
    <csymbol definitionURL="http://www.example.org/function_spaces.html#my_def"
             encoding="text">
      BigK
    </csymbol>
    <ci>x</ci>
    <ci>y</ci>
  </apply>

4.2.1.5 La structure inverse

Les fonctions données, il y a naturellement les fonctions symétriques. C'est l'élément inverse qui s'en charge.

Les fonctions symétriques peuvent être problématiques d'un point de vue mathématique, dans la mesure où intervient implicitement la définition du symétrique d'une fonction arbitraire F. Même dans les niveaux scolaires secondaires, le concept de fonction symétrique F-1 de beaucoup de fonctions communes F n'est pas employé de manière uniforme. Par exemple, les définitions utilisées pour les fonctions trigonométriques symétriques peuvent différer légèrement selon l'ensemble et/ou la branche choisis.

MathML adopte la vue suivante : si F est une fonction de l'ensemble D vers l'ensemble D', alors G la fonction symétrique de F est une fonction de l'ensemble D', telle que G(F(x)) = x, x appartenant à D. Cette définition n'affirme pas qu'une telle fonction symétrique existe à chaque fois, ou en effet pour tout x dans D, ou qu'elle n'admette qu'une seule valeur en tout point. Également, selon les fonctions concernées, d'autres propriétés, telle que F(G(y)) = y, y appartenant à D', peuvent être vérifiées.

On applique l'élément inverse à une fonction chaque fois qu'une fonction symétrique est nécessaire. Par exemple, on code l'application de la fonction sinus symétrique sur x, c.à.d. sin-1(x), par :

<apply>
  <apply> <inverse/> <sin/> </apply>
  <ci> x </ci>
</apply>

Bien que l'élément arcsin soit une fonction prédéfinie de MathML, il peut se trouver une référence explicite sin-1(x) dans un document discutant des définitions possibles de arcsin.

4.2.1.6 La structure declare

Supposons un document discutant des vecteurs A = (abc) et B = (def), contenant plus loin l'expression V = A + B. Où que A et B apparaissent, il importe de pouvoir indiquer qu'ils représentent des vecteurs particuliers. Les propriétés de ces vecteurs peuvent déterminer l'aspect des opérateurs tel que plus.

On peut simplement indiquer la nature de vecteur de A avec le balisage suivant :

<ci type="vector">A</ci>

Mais cela ne dit pas, par exemple, quel vecteur est impliqué ni quelles sont ses coordonnées.

La structure declare sert à associer des propriétés ou des significations particulières à un objet. La déclaration réelle proprement dite n'a pas de rendu visuel (ou dans une autre forme). Par contre, elle influence indirectement la sémantique de toutes les utilisations affectées de l'objet déclaré.

Les déclarations doivent apparaître au début d'un élément math. La portée de la déclaration est l'élément math entier dans lequel elle est faite. L'attribut scope d'un élément declare peut être inclus mais il est sans effet, puisque les deux valeurs possibles "local" et "global" ont alors la même signification. La valeur d'attribut "global" est encore admise pour rétrocompatibilité avec MathML 1.0, mais elle est déconseillée dans MathML 2.0.

Les utilisations de l'élément declare s'étendent de la réinitialisation des valeurs d'attribut par défaut jusqu'à l'association d'une expression à une instance particulière d'une structure plus élaborée. Les utilisations successives de l'expression initiale (dans la portée de l'élément declare) jouent le même rôle sémantique que celui de l'objet accouplé.

Par exemple, cette déclaration :

<declare>
  <ci> A </ci>
  <vector>
    <ci> a </ci>
    <ci> b </ci>
    <ci> c </ci>
  </vector>
</declare>

Elle indique que A représente le vecteur particulier (abc), et donc que ses utilisations suivantes, comme dans V = A + B, peuvent en tenir compte. Lorsqu'on utilise l'élément declare de cette façon, le codage réel suivant :

<apply>
  <eq/>
  <ci> V </ci>
  <apply>
    <plus/>
    <ci> A </ci>
    <ci> B </ci>
  </apply>
</apply>

Celui-ci reste inchangé mais l'expression peut être interprétée comme une addition de vecteurs.

La déclaration d'une expression pour représenter un objet spécifique n'est pas obligatoire. Par exemple, cette déclaration :

<declare type="vector">
  <ci> A </ci>
</declare>

Elle annonce que A est un vecteur, sans indiquer le nombre des composants ou les valeurs des composants particuliers. Les valeurs possibles de l'attribut type comprennent tous les noms des éléments conteneurs prédéfinis, tels que vector, matrix ou set (cf. la section 4.3.2.9 type).

4.2.1.7 La structure lambda

Le lambda calcul permet à un utilisateur de construire une fonction à partir d'une variable et d'une expression. Par exemple, la structure lambda sous-tend la locution mathématique commune illustrée ici :

Soit f la fonction qui à x associe x2 + 2

On peut trouver diverses notations de ce concept dans les ouvrages mathématiques, telles que \lambda(xF(x)) = F ou \lambda(x, [F]) = F, où x est une variable libre dans F.

Ce concept est mis en œuvre dans MathML au moyen de l'élément lambda. Une structure lambda avec n variables internes est codée par un élément lambda avec n+1 sous-éléments. Tous sauf le dernier doivent être des éléments bvar qui sont les identificateurs des variables internes. Le dernier sous-élément est une expression définissant la fonction. Il s'agit typiquement d'un élément apply mais ça peut aussi être un élément conteneur quelconque.

L'expression \lambda (x, sin(x+1)) se construit ainsi :

<lambda>
  <bvar><ci> x </ci></bvar>
  <apply>
    <sin/>
    <apply>
      <plus/>
      <ci> x </ci>
      <cn> 1 </cn>
    </apply>
  </apply>
</lambda>

Pour utiliser les éléments declare et lambda afin de construire la fonction f telle que f(x) = x2 + x + 3, faites :

<declare type="fn">
  <ci> f </ci>
  <lambda>
    <bvar><ci> x </ci></bvar>
    <apply>
      <plus/>
      <apply>
        <power/>
        <ci> x </ci>
        <cn> 2 </cn>
      </apply>
      <ci> x </ci>
      <cn> 3 </cn>
    </apply>
  </lambda>
</declare>

Le balisage suivant déclare et construit la fonction J, telle que J(xy) est l'intégrale de x à y de t4 par rapport à t :

<declare type="fn">
  <ci> J </ci>
  <lambda>
    <bvar><ci> x </ci></bvar>
    <bvar><ci> y </ci></bvar>
    <apply> <int/>
      <bvar>
        <ci> t </ci>
      </bvar>
      <lowlimit>
        <ci> x </ci>
      </lowlimit>
      <uplimit>
        <ci> y </ci>
      </uplimit>
      <apply>   <power/>
        <ci>t</ci>
        <cn>4</cn>
      </apply>
    </apply>
  </lambda>
</declare>

La fonction J peut alors s'appliquer à son tour à un couple d'arguments.

4.2.1.8 L'utilisation des éléments qualificatifs et la structure condition

Le dernier exemple de la section précédente illustre l'utilisation des éléments qualificatifs lowlimit, uplimit et bvar, utilisés en conjonction avec l'élément int. Un certain nombre de structures mathématiques communes font intervenir des données supplémentaires soit implicites dans la notation conventionnelle, telle qu'une variable liée, soit considérées faire partie de l'opérateur au lieu d'un argument, comme c'est le cas pour les limites d'une intégrale définie.

Le balisage du contenu utilise les éléments qualificatifs en conjonction avec un certain nombre d'opérateurs, y compris les intégrales, les sommes, les séries et certains opérateurs différentiels. Les éléments qualificatifs apparaissent dans le même élément apply avec l'un de ces opérateurs. En général, ils doivent advenir dans un certain ordre et leur signification précise dépend des opérateurs employés. Pour des précisions, cf. la section 4.2.3.2 Les opérateurs admettant des qualificatifs.

L'élément qualificatif bvar s'utilise aussi dans une autre structure MathML importante. L'élément condition sert à exercer des conditions sur des variables liées dans d'autres expressions. Par exemple, cela permet au langage MathML de définir un ensemble par une règle plutôt que par énumération. Le balisage suivant code l'ensemble {x | x < 1} :

<set>
  <bvar><ci> x </ci></bvar>
  <condition>
    <apply>
      <lt/>
      <ci> x </ci>
      <cn> 1 </cn>
    </apply>
  </condition>
</set>

4.2.1.9 Le rendu des éléments de contenu

Bien que le rôle principal du jeu des éléments de contenu MathML soit de coder directement la structure mathématique des expressions, indépendamment de la notation employée pour présenter les objets, on ne peut pas ignorer les problèmes de rendu. Chaque élément de contenu a un rendu par défaut, indiqué dans la section 4.4 Les éléments de balisage du contenu, et plusieurs mécanismes (y compris ceux dans la section 4.3.3.2 Les attributs généraux) sont fournis afin d'associer un rendu particulier à un objet.

4.2.2 Les conteneurs

Les conteneurs fournissent les moyens permettant de construire des objets mathématiques d'un type donné.

Atomes ci, cn, csymbol
Constructeurs interval, list, matrix, matrixrow, set, vector, apply, reln, fn, lambda, piecewise, piece, otherwise
Structure spéciale declare

4.2.2.1 Les atomes

Les éléments atomiques sont typiquements les nœuds terminaux de l'arbre de l'expression MathML. On les utilise pour définir des identificateurs, des nombres et des symboles mathématiques.

Les éléments canoniquement vides, tels que exp, sin et cos, peuvent également être des nœuds terminaux dans l'arbre d'une expression. L'utilisation des éléments opérateurs est décrite dans la section 4.2.3 Les fonctions, les opérateurs et les qualificatifs.

cn
L'élément cn est l'élément atomique MathML servant à représenter des nombres. Les types de nombres reconnus comprennent : "real", "integer", "rational", "complex-cartesian" et "complex-polar", le type par défaut valant "real". On utilise un attribut base (dont la valeur par défaut est 10) pour indiquer comment le contenu doit être analysé. Le contenu en question est essentiellement une valeur de type PCDATA, et l'élément <sep/> définit une séparation lorsque deux parties sont nécessaires pour décrire entièrement un nombre. Par exemple, le nombre réel 3 est construit par <cn type="real"> 3 </cn>, tandis que le nombre rationnel 3/4 est construit par <cn type="rational"> 3<sep/>4 </cn>. Le détail de la structure et des définitions est donné dans la section 4.4.1.1 Les nombres (cn).
ci
L'élément ci (N.d.T. content identifier) sert à construire une variable ou un identificateur. Un attribut type indique le type de l'objet représenté par le symbole. Typiquement, l'élément ci représente un réel scalaire, mais aucune valeur par défaut n'est définie. Le contenu est soit une valeur de type PCDATA, soit une structure de présentation générale (cf. la section 3.1.6 Le sommaire des éléments de présentation). Par exemple :
<ci>
<msub>
  <mi>c</mi>
  <mn>1</mn>
</msub>
</ci>
Ce code représente un symbole atomique de rendu visuel c1 qui est traité, en tant que contenu, comme un seul symbole représentant un nombre réel. Le détail de la structure et des définitions est donné dans la section 4.4.1.2 Les identificateurs (ci).
csymbol
L'élément csymbol (N.d.T. content symbol) sert à construire un symbole dont la sémantique n'est pas définie dans le cœur des éléments de contenu fournis par MathML mais à l'extérieur. L'élément csymbol n'essaie pas de décrire comment s'appliquent les arguments intervenant dans une application de la fonction en une nouvelle expression MathML. C'est plutôt à son attribut definitionURL de pointer vers une signification particulière, et à son attribut encoding de donner la syntaxe de cette définition. Le contenu d'un élément csymbol est soit une valeur de type PCDATA, soit une structure de présentation générale (cf. la section 3.1.6 Le sommaire des éléments de présentation). Par exemple :
<csymbol definitionURL="www.example.com/ContDiffFuncs.htm"
         encoding="text">
<msup>
  <mi>C</mi>
  <mn>2</mn>
</msup>
</csymbol>
Ce code représente un symbole atomique de rendu visuel C2 qui est traité, en tant que contenu, comme un seul symbole représentant l'espace des fonctions continues bi-différentiables. Le détail de la structure et des définitions est donné dans la section 4.4.1.3 Les symboles à définition externe (csymbol).

4.2.2.2 Les constructeurs

MathML fournit un certain nombre d'éléments permettant de combiner des éléments dans des objets composés familiers. Les objets composés comprennent entre autres les listes et les ensembles. Chaque constructeur produit un nouveau type d'objet.

interval
L'élément interval est décrit en détails dans la section 4.4.2.4 Les intervalles (interval). Il indique un intervalle dans l'ensemble des réels, les valeurs de ses sous-éléments en représentant les points limites. On utilise l'attribut closure pour qualifier le type de l'intervalle représenté. Par exemple :
<interval closure="open-closed">
  <ci> a </ci>
  <ci> b </ci>
</interval>
C'est un intervalle ouvert-fermé qu'on écrit habituellement (ab].
set et list
Les éléments set et list sont décrits en détails dans la section 4.4.6.1 Les ensembles (set) et la section 4.4.6.2 Les listes (list). Typiquement, les sous-éléments de list (éventuellement vide) sont les composants effectifs d'une liste ordonnée. Par exemple, on code la liste ordonnée des trois symboles a, b et c par :
<list> <ci> a </ci> <ci> b </ci> <ci> c </ci> </list>
Sinon on peut utiliser les éléments bvar et condition pour définir les listes, et en font partie les éléments qui satisfont à certaines conditions. On peut utiliser l'attribut order pour indiquer l'ordre à utiliser. Lorsque la nature des sous-éléments le permet, l'ordre par défaut est numérique ou lexicographique. Les ensembles sont structurés presque de la même façon que les listes, hormis l'absence d'ordre implicite et les valeurs de l'attribut type qui peuvent être "normal" ou "multiset", la valeur "multiset" autorisant les répétitions. Pour les ensembles comme pour les listes, leurs sous-éléments doivent être des éléments de contenu MathML valides. Le type des sous-éléments n'est pas restreint. Par exemple, on pourrait construire une liste d'équations ou d'inégalités.
matrix et matrixrow
L'élément matrix sert à représenter une matrice mathématique. Cela est décrit en détails dans la section 4.4.10.2 Les matrices (matrix). Il peut y avoir zéro à plusieurs sous-éléments tous étant des éléments matrixrow. Ceux-ci admettent, à leur tour, zéro à plusieurs sous-éléments qui se réduisent à des expressions algébriques ou des nombres. Ce sont souvent des nombres réels ou des symboles comme dans :
<matrix>
  <matrixrow> <cn> 1 </cn> <cn> 2 </cn> </matrixrow>
  <matrixrow> <cn> 3 </cn> <cn> 4 </cn> </matrixrow>
</matrix>
Les éléments matrixrow doivent toujours être contenus dans une matrice et toutes les lignes d'une matrice donnée doivent avoir le même nombre d'éléments. Remarquez que le comportement des éléments matrix et matrixrow est très différent de celui des éléments de présentation mtable et mtr.
vector
L'élément vector est décrit en détails dans la section 4.4.10.1 Les vecteurs (vector). Il construit des vecteurs dans un espace vectoriel à n dimensions de sorte que leurs n sous-éléments représentent habituellement des scalaires de valeur réelle ou complexe, comme dans le vecteur à trois éléments suivant :
<vector>
  <apply>
    <plus/>
    <ci> x </ci>
    <ci> y </ci>
  </apply>
  <cn> 3 </cn>
  <cn> 7 </cn>
</vector>
apply
L'élément apply est décrit en détails dans la section 4.4.2.1 Les applications (apply). Son but est d'appliquer une fonction ou un opérateur à ses arguments afin de produire une expression qui représente un élément de l'ensemble d'arrivée de la fonction. Il intervient partout, dans la formation des sommes telle que a + b :
<apply>
  <plus/>
  <ci> a </ci>
  <ci> b </ci>
</apply>
En passant par l'utilisation de la fonction sinus pour construire sin(a) :
<apply>
  <sin/>
  <ci> a </ci>
</apply>
Ou pour construire des intégrales. Son utilisation dans une situation particulière est largement déterminée par les propriétés de la fonction (le premier sous-élément) et, de ce fait, elle est détaillée avec les fonctions et les opérateurs dans la section 4.2.3 Les fonctions, les opérateurs et les qualificatifs.
reln
L'élément reln est décrit en détails dans la section 4.4.2.2 Les relations (reln). Dans MathML 1.0, il servait à construire des expressions, telle que a = b :
<reln><eq/>
  <ci> a </ci>
  <ci> b </ci>
</reln>
Elle indique une comparaison attendue entre deux valeurs mathématiques. Le point de vue de MathML 2.0 est d'y voir l'application d'une fonction booléenne laquelle devrait donc se construire en utilisant l'élément apply. L'utilisation de l'élément reln avec les opérateurs logiques est admise pour des raisons de rétrocompatibilité, mais elle est déconseillée en faveur de l'élément apply.
fn
L'élément fn était utilisé dans MathML 1.0 pour rendre explicite l'utilisation d'une expression comme une fonction ou un opérateur. MathML 2.0 admet cette utilisation pour des raisons de rétrocompatibilité, mais elle est déconseillé, car la nature de fonction ou d'opérateur d'une expression se détermine clairement de sa position de premier sous-élément de apply. L'élément fn est abordé en détails dans la Section 4.4.2.3 [Les fonctions (fn)].
lambda
L'élément lambda sert à construire une fonction définie par l'utilisateur à partir d'une expression et d'une ou de plusieurs variables libres. Une structure lambda à n variables internes admet n+1 sous-éléments. Le premier (puis le deuxième jusqu'au nème) est un élément bvar contenant les identificateurs des variables internes. Le dernier est une expression définissant la fonction. C'est habituellement un élément apply, mais ça peut être aussi n'importe quel élément conteneur. Cette expression \lambda (x, sin x) est construite par :
<lambda>
  <bvar><ci> x </ci></bvar>
  <apply>
    <sin/>
    <ci> x </ci>
  </apply>
</lambda>
La fonction constante \lambda (x, 3) est construite par :
<lambda>
  <bvar><ci> x </ci></bvar>
  <cn> 3 </cn>
</lambda>
piecewise, piece, otherwise
Les éléments piecewise, piece, otherwise servent à gérer les déclarations en morceaux de la forme H(x) = 0 si x inférieur à 0, sinon H(x) = 1.
<piecewise>
  <piece>
      <cn> 0 </cn>
      <apply><lt/><ci> x </ci> <cn> 0 </cn></apply>
  </piece>
    <otherwise>
      <ci> x </ci>
    </otherwise>
</piecewise>
Les éléments piecewise sont abordés en détails dans la section 4.4.2.16 Les déclarations en morceaux (piecewise, piece, otherwise).

4.2.2.3 Les structures spéciales

La structure declare est décrite en détails dans la section 4.4.2.8 Les déclarations (declare). Elle est spéciale car sa seule utilisation est de modifier la sémantique des autres objets. Elle n'a aucun rendu visuel ni sonore.

Les déclarations sont nécessaires à chaque fois qu'on utilise un symbole (y compris les présentations plus générales) pour représenter une instance d'un objet de type particulier. Par exemple, on peut vouloir déclarer que l'identificateur symbolique V représente un vecteur. La forme à un seul argument peut servir à fixer les propriétés des objets en donnant une valeur spécifique aux attributs dont la valeur est implicite.

Ainsi, la déclaration :

<declare type="vector"><ci>V</ci></declare>

Elle réinitialise la valeur par défaut de l'attribut type de <ci>V</ci> à "vector" pour toutes les utilisations affectées de <ci>V</ci>. Cela permet d'éviter de récrire <ci type="vector">V</ci> à chaque fois que l'on utilise ce symbole.

Plus généralement, on peut utiliser l'élément declare pour associer des expressions à un contenu spécifique. Par exemple, cette déclaration :

<declare>
  <ci>F</ci>
  <lambda>
    <bvar><ci> U </ci></bvar>
    <apply>
      <int/>
      <bvar><ci> x </ci></bvar>
      <lowlimit><cn> 0 </cn></lowlimit>
      <uplimit><ci> a </ci></uplimit>
      <ci> U </ci>
    </apply>
  </lambda>
</declare>

Elle associe le symbole F à une nouvelle fonction définie par la structure lambda. Dans la portée de la déclaration, cette expression :

<apply>
  <ci>F</ci>
  <ci> U </ci>
</apply>

Elle signifie l'intégrale de U de 0 à a.

On peut aussi utiliser l'élément declare pour changer la définition d'une fonction ou d'un opérateur. Par exemple, si l'adresse URL http://.../MathML:noncommutplus décrivait une opération plus non commutative codée dans la syntaxe Maple, alors cette déclaration :

<declare definitionURL="http://.../MathML:noncommutplus"
         encoding="Maple">
  <plus/>
</declare>

Elle indique que toutes les utilisations affectées de l'élément plus devraient être interprétées selon cette définition de plus.

4.2.3 Les fonctions, les opérateurs et les qualificatifs

On peut classer les opérateurs et les fonctions définis par MathML dans les catégories du tableau suivant.

arithmétique unaire factorial, minus, abs, conjugate, arg, real, imaginary, floor, ceiling
logique unaire not
fonctionnel unaire inverse, ident, domain, codomain, image
fonctions classiques élémentaires unaires sin, cos, tan, sec, csc, cot, sinh, cosh, tanh, sech, csch, coth, arcsin, arccos, arctan, arccosh, arccot, arccoth, arccsc, arccsch, arcsec, arcsech, arcsinh, arctanh, exp, ln, log
algèbre linéaire unaire determinant, transpose
calcul unaire et calcul vectoriel divergence, grad, curl, laplacian
théorique des ensembles unaire card
arithmétique binaire quotient, divide, minus, power, rem
logique binaire implies, equivalent, approx
opérateur d'ensemble binaire setdiff
algèbre linéaire binaire vectorproduct, scalarproduct, outerproduct
arithmétique n-aire plus, times, max, min, gcd, lcm
statistique n-aire mean, sdev, variance, median, mode
logique n-aire and, or, xor
algèbre linéaire n-aire selector
opérateur d'ensemble n-aire union, intersect, cartesianproduct
fonctionnel n-aire fn, compose
opérateurs intégrale, somme, produit int, sum, product
opérateur différentiel diff, partialdiff
quantificateur forall, exists

Du point de vue de l'utilisation, MathML considère les fonctions (par exemple, sin et cos) et les opérateurs (par exemple, plus et times) de la même façon. Les fonctions et les opérateurs MathML prédéfinis sont tous des éléments canoniquement vides.

Remarquez que l'élément csymbol peut servir à construire un symbole défini par l'utilisateur pouvant être utilisé comme une fonction ou un opérateur.

4.2.3.1 Les fonctions et les opérateurs prédéfinis

Les fonctions MathML peuvent être employées de deux façons. On peut les utiliser comme opérateur au sein d'un élément apply, auquel cas elles se rapportent à une fonction évaluée sur une valeur spécifique. Par exemple :

<apply>
  <sin/>
  <cn>5</cn>
</apply>

Ce code indique un nombre réel, à savoir sin(5).

Les fonctions MathML peuvent aussi servir d'arguments pour d'autres opérateurs, par exemple :

<apply>
  <plus/><sin/><cos/>
</apply>

Ce code indique une fonction, à savoir le résultat de l'addition des fonctions sinus et cosinus dans un certain espace de fonctions. (La définition sémantique par défaut de l'élément plus lui permet d'inférer le type d'opération attendu d'après le type de ses arguments).

Le nombre des sous-éléments dans apply est déterminé par l'élément en première position (c.à.d. l'opérateur).

Les opérateurs unaires sont suivis par un autre sous-élément exactement dans l'élément apply.

Les opérateurs binaires sont suivis par deux sous-éléments exactement.

Les opérateurs n-aires sont suivis par deux sous-éléments ou plus.

Les éléments declare constituent l'exception à ces règles, ils peuvent s'insérer à n'importe quelle position sauf la première. Les éléments declare ne sont pas compris dans le compte des sous-éléments d'un élément apply contenant un élément opérateur unaire ou binaire.

Les opérateurs intégrale, somme, produit et différentiels sont abordés ci-dessous dans la section 4.2.3.2 Les opérateurs admettant des qualificatifs.

4.2.3.2 Les opérateurs admettant des qualificatifs

Le tableau ci-dessous contient les qualificatifs et les opérateurs qui les admettent dans MathML.

qualificatifs lowlimit, uplimit, bvar, degree, logbase, interval, condition, domainofapplication, momentabout
opérateurs int, sum, product, root, diff, partialdiff, limit, log, moment, min, max, forall, exists

Les opérateurs acceptant des qualificatifs sont des fonctions canoniquement vides qui diffèrent des fonctions vides ordinaires par l'utilisation d'éléments qualificatifs spéciaux pour définir plus complètement leur signification. On les utilise exactement de la même façon que les opérateurs ordinaires, sauf que certains éléments qualificatifs sont admis à l'intérieur de l'élément apply englobant lorsqu'ils sont employées comme opérateurs. Les qualificatifs suivent toujours l'opérateur et, le cas échéant, précèdent l'argument. Si plusieurs qualificatif sont présents, leur ordre d'apparition est le suivant : bvar, lowlimit, uplimit, interval, condition, domainofapplication, degree, momentabout, logbase. Voici un exemple typique :

<apply>
  <int/>
  <bvar><ci>x</ci></bvar>
  <interval><cn>0</cn><cn>1</cn></interval>
  <apply>
      <power/>
    <ci>x</ci>
    <cn>2</cn>
  </apply>
</apply>

L'utilisation d'un schéma qualificatif avec une fonction non appliquée à un argument est également valide. Par exemple, une fonction agissant sur des fonctions intégrables dans l'intervalle [0,1] pourrait se noter :

<fn>
  <apply>
    <int/>
    <bvar><ci>x</ci></bvar>
    <lowlimit><cn>0</cn></lowlimit>
    <uplimit><cn>1</cn></uplimit>
  </apply>
</fn>

Outre l'utilisation définie dans MathML, on peut utiliser un schéma qualificatif avec n'importe quel symbole (par exemple, en utilisant l'élément csymbol) ou n'importe quelle construction définis par l'utilisateur. La signification d'une telle utilisation n'est pas définie dans MathML ; l'utilisateur l'aurait normalement établie avec un attribut definitionURL.

La signification et l'utilisation d'un schéma qualificatif varient d'une fonction à l'autre. La liste suivante résume l'utilisation des schémas qualificatifs avec les fonctions MathML admettant des qualificatifs.

int
La fonction int accepte les schémas lowlimit, uplimit, bvar, interval, condition et domainofapplication. Si les schémas lowlimit et uplimit sont tous deux présents, ils indiquent les limites d'une intégrale définie. On peut définir le domaine d'intégration autrement en utilisant les qualificatifs interval, condition ou domainofapplication. Le schéma bvar indique la variable d'intégration. Dans une utilisation avec int, chaque schéma qualificatif est censé contenir un seul sous-schéma ; sinon une erreur est générée.
diff
La fonction diff accepte le schéma bvar. Le schéma bvar définit la variable selon laquelle la dérivation a lieu. Le schéma bvar peut lui-même contenir un schéma degree servant à indiquer l'ordre de la dérivée, c'est-à-dire une dérivée première, seconde, etc. Par exemple, la dérivée seconde de f par rapport à x est :
<apply>
  <diff/>
  <bvar>
    <ci> x </ci>
    <degree>
      <cn> 2 </cn>
    </degree>
  </bvar>
  <apply><fn><ci>f</ci></fn>
    <ci> x </ci>
  </apply>
</apply>
partialdiff
La fonction partialdiff accepte zéro à plusieurs schémas bvar et un schéma qualificatif degree optionnel. Le schéma bvar définit, dans l'ordre, les variables selon lesquelles la dérivation a lieu. Chaque élément bvar peut contenir un schéma degree servant à indiquer l'ordre de la dérivation effectuée sur cette variable. Le schéma qualificatif degree optionnel, associé à l'élément partialdiff en question (c'est-à-dire, celui qui apparaît comme sous-élément de l'élément apply englobant et pas comme sous-élément de l'un des qualificatifs bvar), sert à représenter le degré total de la différentiation. Dans une utilisation avec partialdiff, chaque schéma degree est censé contenir un seul sous-schéma. Par exemple :
<apply>
  <partialdiff/>
  <bvar>
    <degree><cn>2</cn></degree>
    <ci>x</ci>
  </bvar>
  <bvar><ci>y</ci></bvar>
  <bvar><ci>x</ci></bvar>
  <degree><cn>4</cn></degree>
  <ci type="fn">f</ci>
</apply>
Ce code indique la dérivée partielle mixte ( d4 / d2x dy dx ) f.
sum, product
Les fonctions sum et product acceptent les schémas bvar, lowlimit, uplimit, interval, condition et domainofapplication. Si les schémas lowlimit et uplimit sont tous deux présents, ils indiquent les limites de la somme ou du produit. On peut définir les limites autrement en utilisant les schémas interval, condition ou domainofapplication. Le schéma bvar indique la variable interne de la somme ou du produit. Voici un exemple typique :
<apply>
  <sum/>
  <bvar><ci>i</ci></bvar>
  <lowlimit><cn>0</cn></lowlimit>
  <uplimit><cn>100</cn></uplimit>
  <apply>
    <power/>
    <ci>x</ci>
    <ci>i</ci>
  </apply>
</apply>
Dans une utilisation avec sum ou product, chaque schéma qualificatif est censé contenir un seul sous-schéma ; sinon une erreur est générée.
limit
La fonction limit accepte zéro à plusieurs schémas bvar et des schémas condition et lowlimit optionnels. On peut utiliser un schéma condition pour placer des contraintes sur bvar. Le schéma bvar définit la variable selon laquelle la limite est prise. Le schéma lowlimit indique le point limite. Dans une utilisation avec limit, les schémas bvar et lowlimit sont censés contenir un seul sous-schéma ; sinon une erreur est générée.
log
La fonction log accepte uniquement le schéma logbase. Si présent, il définit la base du logarithme. Sinon le logarithme est censé être en base 10. Dans une utilisation avec log, le schéma logbase est censé contenir un seul sous-schéma ; sinon une erreur est générée.
moment
La fonction moment accepte les schémas degree et momentabout. Si présent, le schéma degree indique l'ordre du moment. Sinon le moment est censé être le moment de premier ordre. Dans une utilisation avec moment, le schéma degree est censé contenir un seul sous-schéma ; sinon une erreur est générée. Si présent, le schéma momentabout définit le point par rapport auquel le moment est pris. Sinon le moment est censé être par rapport à zéro.
min, max
Les fonctions min et max acceptent un schéma bvar lorsqu'on effectue un minimum ou un maximum sur un ensemble de valeurs défini par un schéma condition en même temps que l'expression à évaluer sur cet ensemble. Dans MathML 1.0, l'élément bvar était optionnel quand on utilisait condition ; si un élément condition contenant une seule variable suivait un opérateur min (ou max), la variable était supposée implicitement liée, et elle était censée constituer l'expression à maximiser ou à minimiser (en l'absence d'expression). Cette utilisation est déconseillée dans MathML 2.0 en faveur de la déclaration explicite dans tous les cas de la variable liée (ou des variables) et de l'expression à maximiser ou à minimiser. On peut aussi appliquer les éléments min et max à une liste de valeurs, auquel cas aucun schéma qualificatif n'est employé. Comme exemple contenant toutes les trois utilisations, cf. la section 4.4.3.4 Le maximum et le minimum (max, min).
forall, exists
Les opérateurs quantificateurs universel forall et existentiel exists s'utilisent en conjonction avec un ou plusieurs schémas bvar pour représenter des assertions logiques simples. Il y a deux façons d'utiliser les opérateurs quantificateurs logiques. La première utilisation sert à représenter une assertion quantifiée simple. Par exemple, on représenterait la déclaration il existe x < 9 par :
<apply>
  <exists/>
  <bvar><ci> x </ci></bvar>
  <apply><lt/>
    <ci> x </ci><cn> 9 </cn>
  </apply>
</apply>
La seconde utilisation sert à représenter des implications. Les hypothèses sont données par un élément condition suivi par les variables liées. Par exemple, on représenterait la déclaration pour tout x < 9, x < 10 par :
<apply>
  <forall/>
  <bvar><ci> x </ci></bvar>
  <condition>
    <apply><lt/>
      <ci> x </ci><cn> 9 </cn>
    </apply>
  </condition>
  <apply><lt/>
    <ci> x </ci><cn> 10 </cn>
  </apply>
</apply>
Remarquez qu'un ou plusieurs qualificatifs bvar sont obligatoires dans ces deux utilisations.

4.2.4 Les relations

relation binaire neq, equivalent, approx, factorof
relation logique binaire implies
relation d'ensemble binaire in, notin, notsubset, notprsubset
relation de série binaire tendsto
relation n-aire eq, leq, lt, geq, gt
relation d'ensemble n-aire subset, prsubset

Les balises de contenu MathML comprennent un certain nombre d'éléments canoniques vides qui indiquent des relations arithmétiques et logiques. Les relations sont caractérisées par le fait que, si une application externe devait les évaluer (MathML ne définit pas comment évaluer les expressions), elles renverraient typiquement une valeur de vérité. Par contraste, les opérateurs renvoient généralement une valeur de même type que les opérandes. Par exemple, le résultat de l'évaluation de a < b est soit vrai, soit faux (par constraste, 1 + 2 est encore un nombre).

On associe les relations à leurs arguments en utilisant l'élément apply de la même façon que pour les autres fonctions. Dans MathML 1.0, les opérateurs de relation étaient associés en utilisant un élément reln. Cette utilisation quoique toujours admise est maintenant déconseillé en faveur de l'élément apply. Le premier sous-élément de apply est l'opérateur de relation. Ainsi, on balise correctement l'exemple du paragraphe précédent par :

<apply>
  <lt/>
  <ci>a</ci>
  <ci>b</ci>
</apply>

Une relation englobée dans un autre élément que apply ou reln constitue une erreur.

Le nombre des sous-éléments de apply est défini par l'élément en première position (c.à.d., la relation).

Les relations unaires sont suivies par un autre sous-élément exactement dans l'élément apply.

Les relations binaires sont suivies par deux sous-éléments exactement.

Les relations n-aires sont suivies par zéro à plusieurs sous-éléments.

Les éléments declare constituent l'exception à ces règles, ils peuvent s'insérer à n'importe quelle position sauf la première. Les éléments declare ne sont pas compris dans le compte des sous-éléments d'un élément apply contenant un opérateur unaire ou binaire.

4.2.5 Les conditions

condition condition

L'élément condition sert à définir la structure tel que dans les expressions mathématiques. Les éléments condition servent dans un certain nombre de contextes dans MathML. On les utilise pour construire des objets comme des ensembles et des listes d'après une règle au lieu d'une énumération. On peut les utiliser avec les opérateurs forall et exists pour former des expressions logiques. Et enfin, on peut les utiliser de plusieurs façons en conjonction avec certains opérateurs. Par exemple, on peut les utiliser pour définir les domaines d'intégration avec l'élément int, ou pour définir les listes d'arguments des opérateurs comme min et max.

L'élément condition accompagne toujours un ou plusieurs éléments bvar.

L'interprétation exacte dépend du contexte mais, généralement parlant, l'élément condition sert à restreindre les valeurs admissibles d'une variable liée, qui apparaît dans une autre expression, aux valeurs satisfaisant aux relations qu'il contient. De la même façon, lorsque l'élément condition contient un élément set, les valeurs des variables liées se restreignent à l'ensemble ainsi désigné.

Un élément condition contient un seul élément, soit un élément apply, soit un élément reln (déconseillé). On construit des conditions composées en appliquant des relations, telle que and, au sein du sous-élément de condition.

4.2.5.1 Exemples

L'expression il existe x tel que x5 < 3 se code ainsi :

<apply>
  <exists/>
  <bvar><ci> x </ci></bvar>
  <condition>
    <apply><lt/>
      <apply>
        <power/>
        <ci>x</ci>
        <cn>5</cn>
      </apply>
      <cn>3</cn>
    </apply>
  </condition>
</apply>

Dans l'exemple suivant, on code l'expression pour tout x dans N il existe les nombres premiers pq tels que p+q = 2x :

<apply>
  <forall/>
  <bvar><ci>x</ci></bvar>
  <condition>
    <apply><in/>
          <ci>x</ci>
          <csymbol encoding="OpenMath" 
            definitionURL="http://www.openmath.org/cd/setname1.ocd">
            N
          </csymbol>
        </apply>
  </condition>

  <apply><exists/>
     <bvar><ci>p</ci></bvar>
     <bvar><ci>q</ci></bvar>
     <condition>
       <apply><and/>
          <apply><in/><ci>p</ci>
            <csymbol encoding="OpenMath" 
              definitionURL="http://www.openmath.org/cd/setname1.ocd">
             P
            </csymbol>
          </apply>
          <apply><in/><ci>q</ci>
            <csymbol encoding="OpenMath" 
              definitionURL="http://www.openmath.org/cd/setname1.ocd">
              P
            </csymbol>
          </apply>
          <apply><eq/>
              <apply><plus/><ci>p</ci><ci>q</ci></apply>
              <apply><times/><cn>2</cn><ci>x</ci></apply>
          </apply>
        </apply>
      </condition>
  </apply>
</apply>

Ce troisième exemple montre l'utilisation de qualificatifs avec l'élément condition. Le balisage suivant code l'expression il existe x < 3 tel que x2 = 4 :

<apply>
  <exists/>
  <bvar><ci> x </ci></bvar>
  <condition>
    <apply><lt/><ci>x</ci><cn>3</cn></apply>
  </condition>
  <apply>
    <eq/>
    <apply>
      <power/><ci>x</ci><cn>2</cn>
    </apply>
    <cn>4</cn>
  </apply>
</apply>

4.2.6 La syntaxe et la sémantique

mappages semantics, annotation, annotation-xml

L'emploi pour les mathématiques d'un balisage de contenu plutôt que d'un balisage de présentation est parfois désigné par le terme de balisage sémantique [Buswell1996]. L'arbre d'analyse de la structure d'un élément valide en se servant des éléments de contenu MathML correspond directement à l'arbre de l'expression mathématique sous-jacente. De ce fait, nous voyons le balisage du contenu en question comme un codage de la syntaxe de l'expression mathématique. En général, cela suffit pour obtenir un rendu et même une manipulation symbolique (par exemple, une factorisation polynomiale).

Toutefois, même dans des expressions apparemment simples comme X + Y, d'autres informations seront peut-être nécessaires aux applications comme celles provenant d'un calcul algébrique. Les symboles X et Y sont-ils des entiers, ou des fonctions, etc. ? Dans quel domaine l'opérateur plus représente-t-il une addition ? On appelle mappage sémantique ces informations supplémentaires. Dans MathML, ce mappage est le fait des éléments semantics, annotation et annotation-xml.

L'élément semantics est l'élément conteneur de l'expression MathML avec ses mappages sémantiques. L'élément semantics admet un nombre variable de sous-éléments. Le premier est l'élément (qui peut être une structure d'élément complexe) pour lequel ces informations sémantiques supplémentaire sont définies. Le deuxième et, le cas échéant, les suivants sont des instances d'éléments annotation et/ou annotation-xml.

L'élément semantics accepte aussi les attributs definitionURL et encoding à utiliser par des applications de traitement externes. Par exemple, une utilisation serait celle d'une adresse URI pointant sur un dictionnaire de contenu sémantique. Dans la mesure où l'attribut definitionURL est susceptible parfois de fournir les informations de mappage sémantique, les éléments annotation ou annotation-xml sont optionnels.

L'élément annotation est un conteneur de données arbitraires. Ces donnés peuvent prendre la forme d'un texte, de codages d'algèbre automatique, d'un programme en C, ou quelle que soit la forme attendue par une application de traitement. L'attribut encoding de l'élément annotation définit la forme utilisée. Remarquez que le modèle de contenu de l'élément annotation admet des valeurs de type PCDATA, et il faut donc faire attention que le codage en question n'entre pas en conflit avec les règles d'analyse XML.

L'élément annotation-xml est un conteneur d'informations sémantiques en XML bien formé. Par exemple, on pourrait donner une forme XML de la sémantique OpenMath. Une autre utilisation possible ici serait, par exemple, d'imbriquer le format à balises de présentation d'une construction donnée dans un format à balises de contenu (ou vice versa) dans le premier sous-élément semantics. L'attribut encoding de l'élément annotation-xml définit la forme utilisée.

Par exemple :

<semantics>
  <apply>
  <divide/>
    <cn>123</cn>
    <cn>456</cn>
  </apply>
  <annotation encoding="Mathematica">
    N[123/456, 39]
  </annotation>
  <annotation encoding="TeX">
    $0.269736842105263157894736842105263157894\ldots$
  </annotation>
  <annotation encoding="Maple">
    evalf(123/456, 39);
  </annotation>
  <annotation-xml encoding="MathML-Presentation">
    <mrow>
      <mn> 0.269736842105263157894 </mn>
      <mover accent='true'>
        <mn> 736842105263157894 </mn>
        <mo> &OverBar; </mo>
      </mover>
    </mrow>
  </annotation-xml>
  <annotation-xml encoding="OpenMath">
    <OMA xmlns="http://www.openmath.org/OpenMath">
	  <OMS cd="arith1" name="divide"/>
	  <OMI>123</OMI>
	  <OMI>456</OMI>
    </OMA>
  </annotation-xml>
</semantics>

Dans cette expression, l'élément OMA définit les informations sémantiques supplémentaires.

La fourniture d'un mappage sémantique explicite est bien sûr optionnelle et, en général, elle devrait seulement intervenir quand il y a lieu de traiter ou de manipuler les mathématiques sous-jacentes.

4.2.7 Les mappages sémantiques

Quoique divers codages propriétaires ou très spécialisés puissent aisément fournir des mappages sémantiques, il n'existe aucun standard non spécialisé de mappage sémantique largement répandu. Afin de répondre en partie à ce besoin, l'effort OpenMath vise à offrir une norme, indépendante vis-à-vis d'un fournisseur et d'une plateforme, permettant l'échange d'objets mathématiques entre des applications. Ces objets mathématiques contiennent des informations de mappage sémantique. Le groupe OpenMath a défini une syntaxe XML pour coder ces informations [OpenMath2000]. Ce jeu d'éléments pourrait constituer la base d'un jeu d'éléments annotation-xml.

Un aspect attractif de ce mécanisme tient au fait que la syntaxe OpenMath est spécifiée en XML, de sorte qu'on peut valider une expression MathML comme ses annotations sémantiques en utilisant des processeurs XML.

4.2.8 Les constantes et les symboles

MathML fournit un ensemble de constantes et de symboles prédéfinis représentant des concepts mathématiques rencontrés fréquemment en milieu scolaire. On y trouve les symboles d'ensembles bien connus, tels que celui des entiers (integers) et celui des rationnels (rationals), et aussi les symboles de constantes très répandues, tels que false, true et exponentiale.

4.2.9 Les types des éléments MathML

Les fonctions, les opérateurs et les relations MathML peuvent tous être assimilés à des fonctions mathématiques quand on les regarde avec suffisamment d'abstraction. Par exemple, on peut voir l'opérateur d'addition standard comme une fonction qui fait correspondre un couple de nombres réels à un nombre réel. De même, on peut voir une relation comme une fonction d'un certain espace de couples ordonnés à l'ensemble de valeurs {truefalse}. Pour avoir une signification mathématique, le domaine et l'ensemble d'arrivée d'une fonction doivent être définis exactement. En pratique, cela veut dire que les fonctions n'ont de sens que si on les applique à certains types d'opérandes. Par exemple, pour l'opérateur d'addition standard, ajouter un ensemble à une fonction ne veut rien dire. Puisque le balisage de contenu MathML cherche à coder les expressions mathématique pour les évaluer sans ambiguïté, il n'est pas surprenant que la question du type des opérandes soit importante.

MathML définit le type des arguments de deux façons. La première consiste à fournir des instructions précises aux applications de traitement sur le type des arguments attendus par les éléments de contenu MathML représentant des fonctions, des opérateurs et des relations. Ces types d'opérandes sont définis dans un dictionnaire des mappages sémantiques par défaut pour les éléments de contenu, cf. l'Annexe C [Les définitions des éléments de contenu]. Par exemple, le dictionnaire de contenu MathML indique que, pour les arguments scalaires réels, l'opérateur plus correspond à l'opérateur d'addition commutative standard sur un champ. L'élément cn a un attribut type dont la valeur par défaut est "real". Certains processeurs pourront donc utiliser cette information pour vérifier la validité des opérations indiquées.

Bien que MathML définisse les types des arguments des fonctions, des opérateurs et des relations, et fournisse un mécanisme de typage des arguments, un processeur MathML conforme n'est pas tenu de vérifier le type. En d'autres termes, un processeur MathML ne générera aucune d'erreur si les types des arguments sont inexacts. Si le processeur est un système d'algèbre automatique, il sera peut-être incapable d'évaluer une expression mais aucune erreur MathML ne sera générée.

4.3 Les attributs des éléments de contenu

4.3.1 Les valeurs des attributs des éléments de contenu

Les attributs des éléments de contenu sont tous de type CDATA, c'est-à-dire que n'importe quelle chaîne de caractères sera acceptée comme valide. En outre, chaque attribut comprend une liste de valeurs prédéfinies qu'un processeur de contenu est censé reconnaître et traiter. La raison pour laquelle les valeurs des attributs ne sont pas restreintes formellement à cette liste de valeurs prédéfinies est pour en permettre l'extension. Un processeur rencontrant une valeur non reconnue (absente de la liste prédéfinie) peut la traiter de manière valide comme étant la valeur par défaut de cet attribut.

4.3.2 Les attributs modifiant la sémantique du balisage de contenu

Chaque attribut est suivi des éléments sur lesquels il peut s'appliquer.

4.3.2.1 L'attribut base

cn
Il indique la base numérique du nombre. Valeurs prédéfinies : toute chaîne numérique. La valeur par défaut est 10

4.3.2.2 L'attribut closure

interval
Il indique la fermeture de l'intervalle. Valeurs prédéfinies : "open", "closed", "open-closed", "closed-open". La valeur par défaut est "closed"

4.3.2.3 L'attribut definitionURL

csymbol, declare, semantics, et tous les éléments opérateurs
Il pointe vers une définition externe de la sémantique du symbole ou de la structure déclarés. La valeur est une adresse URL, ou une adresse URI, qui devrait pointer vers un certain type de définition. Cette définition remplace la sémantique MathML par défaut. Pour l'instant, MathML ne définit pas le format dans lequel il faudrait donner les définitions sémantiques externes. En particulier, la cible de l'adresse URI n'est pas obligée d'être chargeable et analysable. Par exemple, une définition externe pourrait donner la sémantique dans une forme lisible par un humain. Idéalement, dans la plupart des situations, la définition pointée par definitionURL devrait avoir un format lisible par une machine. Toutefois, MathML n'impose pas un tel format pour plusieurs raisons : L'attribut definitionURL n'a pas de valeur par défaut, c'est-à-dire que la sémantique est définie dans le fragment MathML et/ou par celle par défaut de MathML.

4.3.2.4 L'attribut encoding

annotation, annotation-xml, csymbol, semantics, tous les éléments opérateurs
Il indique le codage de l'annotation ou, dans le cas de csymbol, semantics et des éléments opérateurs, la syntaxe de la cible désignée par l'attribut definitionURL. Les valeurs prédéfinies sont "MathML-Presentation", "MathML-Content". D'autres valeurs typiques : "TeX", "OpenMath". La valeur par défaut est "", c.à.d. non définie.

4.3.2.5 L'attribut nargs

declare
Il indique le nombre d'arguments des déclarations de fonctions. Valeurs prédéfinies : "nary" ou toute chaîne numérique. La valeur par défaut est "1".

4.3.2.6 L'attribut occurrence

declare
Il indique l'occurence des déclarations des opérateurs. Valeurs prédéfinies : "prefix", "infix", "function-model". La valeur par défaut est "function-model".

4.3.2.7 L'attribut order

list
Il indique l'ordre dans la liste. Valeurs prédéfinies : "lexicographic", "numeric". La valeur par défaut est "numeric".

4.3.2.8 L'attribut scope

declare
Il indique le champ d'application de la déclaration. Valeurs prédéfinies : "local", "global" (déconseillée). Dans MathML 2.0, l'apparition de l'élément declare est restreinte au début de l'élément math. Il n'y a donc aucune différence entre les deux valeurs possibles de l'attribut scope et il peut être ignoré sans risques. La valeur d'attribut "global" est déconseillée pour ce rôle car la valeur "local" représente mieux le concept. Dans l'idéal, on aimerait faire des déclarations pour le document entier avec une valeur d'attribut scope qui serait global-document. Toutefois, le mécanisme exact des déclarations portant sur tout le document dépend beaucoup de la façon dont XML sera incorporé dans HTML, des futurs mécanismes de feuille de style XML et du modèle objet de document sous-jacent. Puisque ces technologies d'appoint sont actuellement toujours en cours de développement, la spécification MathML n'inclut pas global-document comme valeur prédéfinie de l'attribut scope. Par contre, il est prévu de revoir cette question dans d'autres versions de MathML lorsque ces technologies d'appoint seront stabilisées. À court terme, les développeurs MathML qui souhaitent simuler l'effet d'une déclaration pour tout le document sont encouragés à prétraiter les documents afin de distribuer des déclarations pour tout le document à chaque élément math individuel du document.

4.3.2.9 L'attribut type

cn
Il indique le type du nombre. Valeurs prédéfinies : "e-notation", "integer", "rational", "real", "float", "complex-polar", "complex-cartesian", "constant". La valeur par défaut est "real". Remarque : chaque type de données implique l'adhésion des données à certaines conventions de formatage, détaillées ci-dessous. Si les données ne sont pas conformes au format attendu, une erreur est générée. Voici le détail des formats individuels :
real
Un nombre réel se présente dans une notation décimale. Cette notation se compose d'un signe optionnel (+ ou -) suivi par une chaîne de chiffres, divisée le cas échéant en une partie entière et une partie fractionnaire par un point décimal. Quelques exemples : 0.3, 1 et -31.56. Si l'attribut base indique une valeur différente, alors les chiffres doivent s'interpréter comme étant calculés dans cette base.
e-notation
On peut aussi représenter un nombre réel en notation scientifique. Ces nombres se composent de deux parties (une mantisse et un exposant) séparées par la lettre e ou E un élément <sep/>. La première partie est un nombre réel, tandis que la seconde est un exposant entier indiquant une puissance de la base. Par exemple, 12.3e5 12.3<sep/> représente 12.3 fois 105. La représentation par défaut de cet exemple est 12.3e5.
integer
Un entier est représenté par un signe optionnel suivi par une chaîne d'un ou plusieurs chiffres. Ces chiffres dépendent de l'attribut base. Si l'attribut base est présent, il définit la base du codage des chiffres, et il le spécifie en base 10. Ainsi, la définition base="16" définit un codage hexadécimal. Lorsque la valeur de l'attribut base est supérieure à 10, on ajoute des lettres dans l'ordre alphabétique comme chiffres. Les valeurs légitimes de l'attribut base sont donc comprises entre 2 et 36.
rational
Un nombre rationnel est représenté par deux entiers séparés par un élément <sep/>. Si l'attribut base est présent, il indique la base utilisée pour coder les chiffres des deux entiers.
complex-cartesian
Un nombre complexe prend la forme de deux nombres réels séparés par un élément <sep/>.
complex-polar
Un nombre complexe est défini sous la forme d'une magnitude et d'un angle (en radians). Les données brutes se présentent sous la forme de deux nombre réels séparés par un élément <sep/>.
constant
Le type "constant" sert à indiquer des constantes nommées. Par exemple, on devrait interpréter l'instance <cn type="constant">&pi;</cn> selon la sémantique de la constante mathématique Pi. Les données d'une balise de constante cn peuvent être l'une des constantes communes suivantes :
Symbole Valeur
&pi; Le Pi habituel de la trigonométrie valant approximativement 3.141592653...
&ExponentialE; (ou &ee;) La base des logarithmes naturels valant approximativement 2.718281828...
&ImaginaryI; (ou &ii;) La racine carrée de -1
&gamma; La constante d'Euler valant approximativement 0.5772156649...
&infin; (ou &infty;) L'infini. L'interprétation exacte varie selon le contexte.
&true; La constante logique true
&false; La constante logique false
&NotANumber; (ou &NaN;) Le résultat d'une division en virgule flottante mal définie
ci
Il indique le type de l'identificateur. Valeurs prédéfinies : "integer", "rational", "real", "float", "complex", "complex-polar", "complex-cartesian", "constant" ou le nom d'un élément de contenu. Les significations des valeurs des attributs communs avec l'élément cn sont les mêmes que celles listées pour ce dernier. L'utilisation de la valeur d'attribut "complex" est prévue au cas où l'identificateur représente un nombre complexe dont la représentation particulière (polaire ou cartésienne) est inconnue ou bien non pertinente. La valeur par défaut est "", c.à.d. non définie.
declare
Il indique le type de l'identificateur déclaré. Valeurs prédéfinies : le nom d'un élément de contenu. La valeur par défaut est "ci", c.à.d. un identificateur générique.
set
Il indique le type de l'ensemble. Valeurs prédéfinies : "normal", "multiset". La valeur "multiset" permet les répétitions. La valeur par défaut est "normal".
tendsto
Il sert à indiquer la notion d'une quantité approchant d'une autre. Il se présente comme un conteneur ce qui en facilite l'utilisation dans la construction d'une expression avec une limite. Valeurs prédéfinies : "above", "below", "two-sided". La valeur par défaut est "above".

4.3.3 Les attributs modifiant le rendu du balisage de contenu

4.3.3.1 type

Outre l'apport d'informations sémantiques, l'interprétation de l'attribut type peut fournir des informations de rendu. Par exemple, dans ce code :

<ci type="vector">V</ci>

Un moteur de rendu pourrait afficher le vecteur V en caractère gras.

4.3.3.2 Les attributs généraux

Tous les éléments de contenu gèrent les attributs généraux suivants, lesquels peuvent servir à modifier le rendu du balisage :

Les attributs class, style et id sont prévus pour compatibilité avec les feuilles de style en cascade (CSS), comme décrit dans la section 2.4.5 Les attributs communs à tous les éléments MathML.

Le balisage de contenu ou sémantique est lié à la prémisse (souvent implicite) selon laquelle on peut toujours obtenir une forme de présentation si la sémantique est connue. Si le but principal de l'auteur est de baliser des expressions mathématiques évaluables et réutilisables, le rendu exact de l'expression n'est probablement pas critique, tant qu'il est aisément compréhensible. Par contre, si l'auteur se préoccupe davantage de fournir assez d'informations sémantiques en plus pour augmenter l'accessibilité d'un document en facilitant de meilleurs rendu visuel, rendu sonore ou traitement spécialisé, le contrôle exact de la notation employée devient alors indispensable.

Les éléments MathML acceptent un attribut other (cf. la section 7.2.3 Les attributs de données non définies), qui peut servir à définir des choses non documentées spécifiquement dans MathML. L'auteur peut utiliser cet attribut sur les balises de contenu pour exprimer une préférence entre des formes équivalentes de la structure d'un élément de contenu particulier, là où la sélection de la présentation n'a rien à voir avec la sémantique. Comme exemples :

Ainsi, à supposer qu'un moteur de rendu particulier reconnaisse un attribut display permettant une sélection entre une fraction en mode écrit et une fraction en mode affiché (N.d.T. display-style), un auteur pourrait écrire :

<apply other='display="scriptstyle"'>
  <divide/>
  <mn> 1 </mn>
  <mi> x </mi>
</apply>

Afin d'indiquer une préférence pour le rendu 1/x.

Les informations fournies dans l'attribut other sont destinées à des moteurs de rendu ou processeurs spécifiques, et les valeurs permises sont donc déterminées par le moteur de rendu utilisé. Un moteur de rendu peut légalement ignorer ces informations. Volontairement, comme dans le cas d'un éditeur imposant le style de la maison, ou simplement parce que le moteur de rendu ne les comprend pas, ou qu'il est incapable de les utiliser.

4.4 Les éléments de balisage du contenu

Cette section contient les descriptions détaillées des balises de contenu MathML. Elles sont rangées en catégories qui reflètent généralement les domaines des mathématiques dont elles sont issues, et aussi le regroupement dans la définition DTD de MathML. Dans MathML, le discours ne différencie pas les opérateurs et les fonctions. Cette distinction ici et dans la définition DTD est maintenue pour des raisons d'utilisation historiques.

Lorsqu'on travaille avec les éléments de contenu, il peut être utile de rappeler les points suivants :

Les éléments de contenu disponibles sont les suivants :

4.4.1 Les éléments atomiques

4.4.1.1 Les nombres (cn)

Discussion

L'élément cn sert à définir des constantes numériques effectives. Le modèle de contenu doit fournir suffisamment d'informations pour que l'entrée d'un nombre comme données dans un système de calcul soit possible. Par défaut, ce nombre est un réel signé en base 10. Ainsi, le contenu se compose normalement d'une valeur de type PCDATA réduite à un signe, d'une chaîne de chiffres décimaux et éventuellement un point décimal, ou sinon, de l'une des constantes symboliques prédéfinies telle que &pi;.

L'élément cn utilise l'attribut type pour représenter d'autres types de nombres tels que, par exemple, un entier, un rationnel, un réel ou un complexe, et l'attribut base pour indiquer la base numérique.

En plus d'une valeur