# Programmation XML/MathML

* Introduction
* Structure d'un document XML
* Espace de nom
* Définition de Type Document
* Interprétation du XML
** SAX
** DOM
* XPath
Applications fondamentales
* XSLT
* XML Schema
* XLink
* XPointer
* XForms
* XQuery
Applications finales
* WML
* XSL-FO
* SOAP
* XML Signature
* SMIL
* SVG
* MusicXML
* SyncML
* MathML
* VoiceXML
* X3D
* XMI
* XUL
* Introduction
* Structure d'un document XML
* Espace de nom
* Définition de Type Document
* Interprétation du XML
** SAX
** DOM
* XPath
Applications fondamentales
* XSLT
* XML Schema
* XLink
* XPointer
* XForms
* XQuery
Applications finales
* WML
* XSL-FO
* SOAP
* XML Signature
* SMIL
* SVG
* MusicXML
* SyncML
* MathML
* VoiceXML
* X3D
* XMI
* XUL
[ Modifier le sommaire ]
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 « »).
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 ${\vec {V}}$ pour un français .

## Enjeu

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

Le fichier contenant le code MathML doit contenir la déclaration de type de document (DTD) suivante :
pour du MathML 2.0. Si le code est inclus dans du HTML, on peut utiliser une DTD HTML étendue au MathML :
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) :
ou bien

## Exemple élémentaire et balises de base

La formule
    $(a+b)^{2}$
s'écrit de deux manières avec MathML :

### Description de présentation

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) ;
* les opérateurs sont encadrés par les balises <mo>…</mo> (math operator) ;
* les nombres sont encadrés par les balises <mn>…</mn> (math number) ;
* les expressions devant être considérées comme un groupe sont encadrées par <mrow>…</mrow> (math row) ;
* 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

On remarque que l'on utilise ici la notation polonaise (notation préfixée), de type :
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

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

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