Programmation XML/MathML
MathML est l'utilisation du formalisme XML pour décrire des formules mathématiques.
Il s'agit bien de description de contenu et non pas de mise en forme ; cela permet de faire varier le rendu selon une feuille de style, et notamment selon des préférences nationales. Par exemple, le vecteur « V » sera noté <ci type="vector">V</ci>
, et pourra être rendu V pour un anglo-saxon et pour un français [1].
Enjeu
[modifier | modifier le wikicode]La notation mathématique est complexe. Il existe déjà des langages permettant de représenter les mathématiques, comme LaTeX. L'enjeu ici est, outre de permettre un rendu correct à l'affichage et à l'impression, de permettre d'utiliser les données par d'autres programmes.
Ainsi, une équation écrite en MathML pourrait être reprise par un solveur qui en donnerait les solutions, ou bien par un traceur qui en dessinerait le graphe, ou encore par un navigateur vocal pour malvoyant.
Format de fichier
[modifier | modifier le wikicode]Le fichier contenant le code MathML doit contenir la déclaration de type de document (DTD) suivante [2] :
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd" >
pour du MathML 2.0. Si le code est inclus dans du HTML, on peut utiliser une DTD HTML étendue au MathML :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd" >
Le code MathML est introduit par la balise <math>
et est conclu par la balise </math>
. Lorsque le code MathML est à l'intérieur d'un document XML contenant d'autres types de données, il faut s'assurer de la bonne gestion de l'espace des nom en utilisant la balise d'ouverture <math xmlns="http://www.w3.org/1998/Math/MathML">
.
Pour éviter les confusions de balises, on peut imposer un préfixe à toutes les balises MathML. Par exemple, si l'on veut imposer le préfixe m:
, on utilise (exemple de HTML) :
<body xmlns:m="http://www.w3.org/1998/Math/MathML"> <m:math> <m:mrow>…</m:mrow> </m:math> </body>
ou bien
<math xmlns:m="http://www.w3.org/1998/Math/MathML"> <m:mrow>…</m:mrow> </math>
Exemple élémentaire et balises de base
[modifier | modifier le wikicode]La formule
s'écrit de deux manières avec MathML :
- Description de présentation
<mrow> <msup> <mfenced> <mrow> <mi> a </mi> <mo> + </mo> <mi> b </mi> </mrow> </mfenced> <mn> 2 </mn> </msup> </mrow>
On a donc :
- les identifiants (par exemple les noms de variables, qui sont des textes et symboles devant être affichés tels quels), sont encadrés par les balises
<mi>…</mi>
(math identifier) [3] ; - les opérateurs sont encadrés par les balises
<mo>…</mo>
(math operator) [4] ; - les nombres sont encadrés par les balises
<mn>…</mn>
(math number) [5] ; - les expressions devant être considérées comme un groupe sont encadrées par
<mrow>…</mrow>
(math row) [6] ; mfenced
qui fournit un encadrement, des parenthèses en l'occurrence ;msup
qui accepte contient deux sous-éléments : la base (ici, « (a + b) ») et l'exposant (ici « 2 »).
On peut représenter la structure de la formule sous la forme d'un arbre :
- Description de contenu
<mrow> <apply> <power/> <apply> <plus/> <ci> a </ci> <ci> b </ci> </apply> <cn> 2 </cn> </apply> </mrow>
On remarque que l'on utilise ici la notation polonaise (notation préfixée), de type :
(^ (+ a b) 2)
On a :
- les balises
<apply>…</apply>
qui signifient « applique l'opérateur (le premier élément) aux éléments suivants » ; - les balises d'opérateur, qui sont des balises sans fermeture :
<power />
pour l'élévation à la puissance et<plus />
pour l'addition ; - les balises qui indiquent la fonction d'éléments :
<ci>…</ci>
pour les identifiants et<cn>…</cn>
pour les nombres.
La description de présentation est plus proche des langages orientés impression comme LaTeX ; cela permet de transposer facilement les formules. La description de contenu permet une interprétation facile de la formule en tant que telle. Si nécessaire, on peut mélanger les deux types de description, à condition d'être rigoureux :
- dans une description de présentation, un élément de contenu devrait être un fragment ayant un sens pris isolément ;
- dans une description de contenu, un élément de présentation devrait être à l'intérieur d'un élément de caractère (un « jeton ») de type variable ou nom de fonction.
Éléments
[modifier | modifier le wikicode]Comme en HTML, et en général en XML, ce qui est compris entre une balise d'ouverture et une balise de fermeture est appelé un « élément ». On distingue trois types d'éléments :
- les éléments de présentation, comme
mrow
,msup
,mi
,mo
etmn
; - les éléments de contenu, comme
partialdiff
,leq
ettan
; - les éléments d'interface.