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
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 :
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.
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.
La conception des éléments de contenu MathML obéit aux principes suivants :
PCDATA, ou d'un autre traitement comme l'analyse de la priorité des opérateurs ;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.
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].
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.
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.
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.
applyLe 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.
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>
inverseLes 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.
declareSupposons un document discutant des vecteurs A = (a, b, c) et
B = (d, e, f), 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 (a, b, c), 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).
lambdaLe 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
(x, F(x)) = F
ou
(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
(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(x, y) 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.
conditionLe 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>
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.
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 |
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 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 3est construit par
<cn type="real"> 3 </cn>, tandis que le nombre rationnel 3/4est 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 (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 (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).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 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 (a, b].
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 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 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 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 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 é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 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>
<bvar><ci> x </ci></bvar>
<apply>
<sin/>
<ci> x </ci>
</apply>
</lambda>
La fonction constante <lambda> <bvar><ci> x </ci></bvar> <cn> 3 </cn> </lambda>
piecewise, piece, otherwise servent à gérer les déclarations
en morceauxde 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).
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.
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.
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.
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 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 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 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 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 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 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 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 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 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.| 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.
| 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.
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 p, q 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>
| 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> ‾ </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.
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.
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.
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 {true, false}.
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.
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.
Chaque attribut est suivi des éléments sur lesquels il peut s'appliquer.
base10closure"open", "closed", "open-closed",
"closed-open". La valeur par défaut est "closed"definitionURLdefinitionURL devrait avoir un format lisible par une machine.
Toutefois, MathML n'impose pas un tel format pour plusieurs raisons :definitionURL soit conçu pour une utilisation avec un langage de codage sémantique formel
comme OpenMath, il est prématuré d'exiger un format en particulier ;definitionURL :
definitionURL. Bien sûr, lorsque des codages sémantiques normalisés bien acceptés
seront disponibles, les définitions appelées pourront être remplacées sans modifier le document original. Quoiqu'il en soit,
ce sera vraisemblablement fastidieux.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.encodingcsymbol, 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.nargs"nary" ou toute chaîne numérique.
La valeur par défaut est "1".occurrence"prefix", "infix", "function-model". La valeur par défaut est "function-model".order"lexicographic", "numeric".
La valeur par défaut est "numeric".scope"local",
"global" (déconseillée).
"local" désigne l'élément MathML conteneur ;"global" désigne l'élément conteneur math.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.type"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 :
+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.
eou
E
12.3e5
12.3<sep/>représente 12.3 fois 105. La représentation par défaut de cet exemple est
12.3e5.
chiffres. Ces
chiffresdé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.<sep/>. Si l'attribut base
est présent, il indique la base utilisée pour coder les chiffres des deux entiers.<sep/>.<sep/>."constant" sert à indiquer des constantes nommées. Par exemple, on devrait interpréter l'instance
<cn type="constant">π</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 |
π |
Le Pi habituel de la trigonométrie valant approximativement 3.141592653... |
ⅇ (ou ⅇ) |
La base des logarithmes naturels valant approximativement 2.718281828... |
ⅈ (ou ⅈ) |
La racine carrée de -1 |
γ |
La constante d'Euler valant approximativement 0.5772156649... |
∞ (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 |
"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."ci", c.à.d. un identificateur générique."normal", "multiset".
La valeur "multiset" permet les répétitions. La valeur par défaut est "normal"."above", "below",
"two-sided". La valeur par défaut est "above".typeOutre 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.
Tous les éléments de contenu gèrent les attributs généraux suivants, lesquels peuvent servir à modifier le rendu du balisage :
classstyleidotherLes 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.
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 :
réalisentpas en eux-mêmes des évaluations ou des opérations mathématiques. Ils n'
évaluentpas dans un navigateur et toute
actionexercée ensuite sur ces objets est déterminée entièrement par l'application mathématique réceptrice. Par exemple, les programmes de création et les applications de calcul destinées aux classes scolaires primaires laisseront typiquement l'expression 3 + 4 telle quelle, tandis que les systèmes de calcul visant un public plus mature pourront l'évaluer à 7. De même, certains systèmes de calcul pourront évaluer sin(0) à 0, tandis que d'autres le garderont non évalué. D'autres systèmes encore pourront être incapables de traiter des expressions symboliques pures, comme sin(x) voire même les considérer comme des entrées de données erronnées. Cela n'a rien à voir avec l'exactitude de la représentation MathML originale. Si on donne une évaluation dans les descriptions suivantes, c'est simplement pour aider à comprendre la signification de l'opération sous-jacente ;
Les éléments de contenu disponibles sont les suivants :
applyreln (déconseillé)fn (déconseillé pour les fonctions définies extérieurement)intervalinversesepconditiondeclarelambdacomposeidentdomain (MathML 2.0)codomain (MathML 2.0)image (MathML 2.0)domainofapplication (MathML 2.0)piecewise (MathML 2.0)piece (MathML 2.0)otherwise (MathML 2.0)vectormatrixmatrixrowdeterminanttransposeselectorvectorproduct (MathML 2.0)scalarproduct (MathML 2.0)outerproduct (MathML 2.0)integers (MathML2.0)reals (MathML2.0)rationals (MathML2.0)naturalnumbers (MathML2.0)complexes (MathML2.0)primes (MathML2.0)exponentiale (MathML2.0)imaginaryi (MathML2.0)notanumber (MathML2.0)true (MathML2.0)false (MathML2.0)emptyset (MathML2.0)pi (MathML2.0)eulergamma (MathML2.0)infinity (MathML2.0)cn)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 π.
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