Programmation XML/MathML

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


Ébauche

Cette page est considérée comme une ébauche à compléter. Si vous possédez quelques connaissances sur le sujet, vous pouvez les partager en éditant dès à présent cette page (en cliquant sur le lien « modifier »).

Ressources suggérées : Aucune (vous pouvez indiquer les ressources que vous suggérez qui pourraient aider d'autres personnes à compléter cette page dans le paramètre « ressources » du modèle? engendrant ce cadre)

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 :

  (a+b)²xy
    │
  ┌┴──┐
 (…)    │
┌┴┬┐  │
│  ││  │
a + b  2 
                     <mrow>…</mrow><msup>…</msup>
                            │
                  ┌─────┴─────────┐
         <mfenced>…</mfenced>               │
    ┌────────┼────────┐          │
    │             │            │          │
<mi> a </mi> <mo> + </mo> <mi> b </mi> <mn> 2 </mn>
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.
(^ (+ a b) 2)(^…)
      ╽
   ┏━┵━┓
 (+…)     │
 ┏┹┓    ╽
 ┃  ╽   ╽
 a   b   2 
              <mrow>…</mrow><apply><power/>…</apply>
                     │
                 ┏━┵━━━━━━┓
       <apply><plus/>…</apply>  │
     ┏━━━━━┵─━━━┓        ╽
     ┃               ┃         ┃
<ci> a </ci> <ci> b </ci> <cn> 2 </cn>

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 et mn ;
  • les éléments de contenu, comme partialdiff, leq et tan ;
  • les éléments d'interface.

Voir aussi[modifier | modifier le wikicode]

Wikipedia-logo-v2.svg

Wikipédia propose un article sur : « MathML ».