MathML ( Mathematical Markup Language ) es un lenguaje de marcado matemático , una aplicación de XML para describir notaciones matemáticas y capturar tanto su estructura como su contenido, y es uno de varios lenguajes de marcado matemático . Su objetivo es integrar de forma nativa fórmulas matemáticas en páginas de la World Wide Web y otros documentos. Es parte de HTML5 y está estandarizado por ISO /IEC desde 2015. [1]
Tras algunos experimentos en el navegador Arena basados en propuestas de marcado matemático en HTML, [4] MathML 1 fue publicado como una recomendación del W3C en abril de 1998 como el primer lenguaje XML recomendado por el W3C . La versión 1.01 del formato fue publicada en julio de 1999 y la versión 2.0 apareció en febrero de 2001. Las implementaciones de la especificación aparecieron en Amaya 1.1 , Mozilla 1.0 y Opera 9.5 . [5] [6] En octubre de 2003, la segunda edición de MathML Versión 2.0 fue publicada como la versión final por el Grupo de Trabajo de Matemáticas del W3C .
MathML fue diseñado originalmente antes de la finalización de los espacios de nombres XML . Sin embargo, se le asignó un espacio de nombres inmediatamente después de que se completara la Recomendación de espacios de nombres y, para el uso de XML, los elementos deben estar en el espacio de nombres con la URL del espacio de nombres http://www.w3.org/1998/Math/MathML . Cuando se utiliza MathML en HTML (a diferencia de XML), el analizador HTML infiere automáticamente este espacio de nombres y no es necesario especificarlo en el documento. [7]
La versión 3 de la especificación MathML se publicó como recomendación del W3C el 20 de octubre de 2010. Posteriormente, el 7 de junio de 2011, se publicó una recomendación de A MathML for CSS Profile ; [8] se trata de un subconjunto de MathML adecuado para el formato CSS. Otro subconjunto, Strict Content MathML , proporciona un subconjunto de contenido MathML con una estructura uniforme y está diseñado para ser compatible con OpenMath . Otros elementos de contenido se definen en términos de una transformación al subconjunto estricto. Los nuevos elementos de contenido incluyen <bind>
el que asocia variables enlazadas ( <bvar>
) a expresiones, por ejemplo, un índice de suma. El nuevo <share>
elemento permite compartir la estructura. [9]
El desarrollo de MathML 3.0 pasó por varias etapas. En junio de 2006, el W3C renovó el mandato del Grupo de Trabajo de MathML para producir una Recomendación de MathML 3 hasta febrero de 2008, y en noviembre de 2008 extendió el mandato hasta abril de 2010. En junio de 2009 se publicó un sexto Borrador de Trabajo de la revisión de MathML 3. El 10 de agosto de 2010, la versión 3 pasó de ser un borrador a una "Recomendación Propuesta". [9] Una implementación de MathML 2 llegó a WebKit en esa misma época, [10] seguida por una implementación de Chromium un par de años después, [11] aunque esa implementación fue eliminada de Chromium menos de un año después. [12]
La segunda edición de MathML 3.0 se publicó como recomendación del W3C el 10 de abril de 2014. [2] La especificación se aprobó como estándar internacional ISO/IEC 40314:2015 el 23 de junio de 2015. [13] También en 2015, se fundó la MathML Association para apoyar la adopción del estándar MathML. [14] En ese momento, según un miembro del equipo MathJax , ninguno de los principales fabricantes de navegadores pagó a ninguno de sus desarrolladores por ningún trabajo de renderizado de MathML; cualquier apoyo que existiera era abrumadoramente el resultado de tiempo/trabajo voluntario no remunerado. [15]
En agosto de 2021, se publicó una nueva especificación llamada MathML Core, descrita como el “subconjunto central del lenguaje de marcado matemático, o MathML, que es adecuado para la implementación en navegadores”. [16] MathML Core se diferencia de MathML 3.0 al incluir reglas de renderizado detalladas e integración con CSS , recursos de prueba de compatibilidad con navegadores automatizados y centrarse en un subconjunto fundamental de MathML. Se agregó una implementación a Chromium a principios de 2023. [17]
MathML no sólo se ocupa de la presentación, sino también del significado de los componentes de la fórmula (la última parte de MathML se conoce como "Content MathML"). Debido a que el significado de la ecuación se conserva separado de la presentación, la forma en que se comunica el contenido puede dejarse en manos del usuario. Por ejemplo, las páginas web con MathML integrado en ellas se pueden ver como páginas web normales con muchos navegadores, pero los usuarios con discapacidad visual también pueden tener el mismo MathML leído a través del uso de lectores de pantalla (por ejemplo, utilizando VoiceOver en Safari ). JAWS a partir de la versión 16 en adelante admite la voz MathML, así como la salida en braille. [20]
La calidad de la representación de MathML en un navegador depende de las fuentes instaladas. El proyecto STIX Fonts ha publicado un conjunto completo de fuentes matemáticas bajo una licencia abierta. La fuente Cambria Math suministrada con Microsoft Windows tenía un soporte ligeramente más limitado. [21]
Un documento MathML válido normalmente consta de la declaración XML, la declaración DOCTYPE y el elemento de documento. El cuerpo del documento contiene expresiones MathML que aparecen en los elementos según sea necesario en el documento. A menudo, MathML se incrusta en documentos más generales, como HTML , DocBook u otros formatos basados en XML .<math>
Presentation MathML se centra en la visualización de una ecuación y tiene unos 30 elementos. Los nombres de los elementos comienzan con m
. Una expresión de Presentation MathML se construye a partir de tokens que se combinan mediante elementos de nivel superior, que controlan su diseño. Los detalles más finos de la presentación se ven afectados por cerca de 50 atributos.
Los elementos de token generalmente solo contienen caracteres (no otros elementos). Entre ellos se incluyen:
<mi>x</mi>
– identificadores;<mo>+</mo>
– operadores;<mn>2</mn>
– números;<mtext>such that</mtext>
- texto.Sin embargo, tenga en cuenta que estos elementos de token se pueden utilizar como puntos de extensión, lo que permite el marcado en lenguajes host. MathML en HTML5 permite la mayoría del marcado HTML en línea en mtext y es conforme, ya que el marcado HTML se utiliza dentro de MathML para marcar el texto incrustado (haciendo que la primera palabra esté en negrita en este ejemplo).<mtext><b>non</b> zero</mtext>
Estos se combinan mediante elementos de diseño, que generalmente contienen solo elementos. Entre ellos se incluyen:
<mrow>
– una fila horizontal de elementos;<msup>
, <munderover>
, y otros: superíndices, límites, operadores por encima y por debajo, como sumas, etc.;<mfrac>
– fracciones;<msqrt>
y <mroot>
– raíces;<mfenced>
– rodear el contenido con vallas, como paréntesis.Como es habitual en HTML y XML, existen muchas entidades disponibles para especificar símbolos especiales por nombre, como π
y →
. Una característica interesante de MathML es que también existen entidades para expresar operadores normalmente invisibles, como ⁢
(o la abreviatura ⁢
) para la multiplicación implícita. Son:
La especificación completa de las entidades MathML [22] está estrechamente coordinada con las especificaciones correspondientes para su uso con HTML y XML en general. [23]
Por lo tanto, la expresión requiere dos elementos de diseño: uno para crear la fila horizontal general y otro para el exponente superíndice. Sin embargo, los tokens individuales también deben identificarse como identificadores ( ), operadores ( ) o números ( ). Al agregar el marcado de token, la forma completa termina como<mi>
<mo>
<mn>
<mrow> <mi> a </mi> <mo> </mo> <msup><mi> x </mi><mn> 2 </mn></msup> <mo> + </mo><mi> b </mi><mo> </mo><mi> x </mi> <mo> + </mo><mi> c </mi> </mrow>
Aquí se muestra un documento completo que consta únicamente del ejemplo MathML anterior:
<?xml versión="1.0" codificación="UTF-8"?> <!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD /mathml2/mathml2.dtd"> <math xmlns= "http://www.w3.org/1998/Math/MathML" > <mrow> <mi> a </mi> <mo> </mo> <msup><mi> x </mi><mn> 2 </mn></msup> <mo> + </mo><mi> b </mi><mo> </mo><mi> x </mi> <mo> + </mo><mi> c </mi> </mrow> </math>
Content MathML se centra en la semántica, o el significado, de la expresión en lugar de en su diseño. El <apply>
elemento que representa la aplicación de la función es central para Content MathML. La función que se aplica es el primer elemento secundario bajo <apply>
, y sus operandos o parámetros son los elementos secundarios restantes. Content MathML utiliza solo unos pocos atributos.
Los tokens, como los identificadores y los números, se marcan individualmente, de forma muy similar a como se hace en Presentation MathML, pero con elementos como <ci>
y <cn>
. En lugar de ser simplemente otro tipo de token, los operadores se representan mediante elementos específicos, cuya semántica matemática es conocida por MathML: <times>
, <power>
, etc. Hay más de cien elementos diferentes para distintas funciones y operadores. [24]
Por ejemplo, representa y representa . Los elementos que representan operadores y funciones son elementos vacíos, porque sus operandos son los otros elementos debajo del contenedor .<apply><sin/><ci>x</ci></apply>
<apply><plus/><ci>x</ci><cn>5</cn></apply>
<apply>
La expresión podría representarse como
<matemáticas> <aplicar> <más/> <aplicar> <veces /> <ci> a </ci> <aplicar> <potencia/> <ci> x </ci> <cn> 2 </cn> </aplicar> </aplicar> <aplicar> <veces/> <ci> b </ci> <ci> x </ci> </aplicar> <ci> c </ci> </aplicar> < /matemáticas >
El contenido de MathML es casi isomorfo a las expresiones de un lenguaje funcional como Scheme y otros dialectos de Lisp . equivale a Scheme , y los numerosos elementos de operador y función equivalen a funciones de Scheme. Con esta transformación literal trivial, más la eliminación de las etiquetas de los tokens individuales, el ejemplo anterior se convierte en:<apply>...</apply>
(...)
( más ( por a ( potencia x 2 )) ( por b x ) c )
Esto refleja la estrecha relación conocida desde hace mucho tiempo entre las estructuras de elementos XML y las expresiones S de LISP o Scheme . [25] [26]
Según la Sociedad OM, [27] los diccionarios de contenido OpenMath pueden emplearse como colecciones de símbolos e identificadores con declaraciones de su semántica (nombres, descripciones y reglas). Un artículo de 2018 presentado en la conferencia SIGIR [28] propuso que la base de conocimiento semántico Wikidata podría usarse como un diccionario de contenido OpenMath para vincular elementos semánticos de una fórmula matemática a elementos Wikidata únicos e independientes del lenguaje.
La conocida fórmula cuadrática podría representarse en Presentation MathML como un árbol de expresión formado por elementos de diseño como <mfrac>
o <msqrt>
:
<modo matemático = "display" xmlns= "http://www.w3.org/1998/Math/MathML" > <semántica> <mrow> <mi> x </mi> <mo> = </mo> < mfrac> <mrow> <mo form= "prefijo" > − </mo> <mi> b </mi> <mo> ± </mo> <msqrt> <msup><mi> b </mi><mn> 2 </mn></msup> <mo> − </mo> <mn> 4 </mn><mo> </mo><mi> a </mi><mo> </mo><mi> c </mi> </msqrt> </mrow> <mrow> <mn> 2 </mn> <mo> </mo> <mi> a </mi> </mrow> </mfrac> </mrow> <anotación codificación= "application/x-tex" > <!-- TeX --> x = \frac{- b\pm\sqrt{b^2-4ac}}{2a} </annotation> <annotation encoding= "StarMath 5.0" > x = {-b más menos raíz cuadrada de {b^2 - 4 ac}} sobre {2 a} </annotation> <!-- Se pueden escribir más anotaciones: application/x-troff-eqn para eqn, application/x-asciimath para AsciiMath... --> <!-- MathML semántico va bajo la codificación <annotation-xml ="Contenido-MathML">. --> </ semántica> </math>
Este ejemplo utiliza el <annotation>
elemento, que se puede utilizar para incrustar una anotación semántica en formato no XML, por ejemplo, para almacenar la fórmula en el formato utilizado por un editor de ecuaciones como StarMath o el marcado utilizando la sintaxis LaTeX . El encoding
campo suele ser un tipo MIME , aunque la mayoría de las codificaciones de ecuaciones no tienen dicho registro; en tales casos, se puede utilizar texto de formato libre.
Aunque menos compacto que otros formatos, la estructura XML de MathML hace que su contenido sea ampliamente utilizable y accesible, permite una visualización casi instantánea en aplicaciones como navegadores web y facilita la interpretación de su significado en productos de software matemático. MathML no está destinado a ser escrito o editado directamente por humanos. [29]
MathML, al ser XML, se puede incorporar dentro de otros archivos XML, como archivos XHTML, utilizando espacios de nombres XML.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"> < html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" > < head > < title > Ejemplo de MathML incrustado en un archivo XHTML </ title > < meta name = "description" content = "Ejemplo de MathML incrustado en un archivo XHTML" /> </ head > < body > < h1 > Ejemplo de MathML incrustado en un archivo XHTML </ h1 > < p >El área de un círculo es< math xmlns = "http://www.w3.org/1998/Math/MathML" > < mi > π <!-- π --> </ mi > < mes > <!-- --> </ mo > < msup > < mi > r </ mi > < mn > 2 </ mn > </ msup > </ math > . </p> </body> </html>
Inline MathML también es compatible con archivos HTML5 . No es necesario especificar espacios de nombres como en XHTML .
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "utf-8" > < title > Ejemplo de MathML incrustado en un archivo HTML5 </ title > </ head > < body > < h1 > Ejemplo de MathML incrustado en un archivo HTML5 </ h1 > < p >El área de un círculo es< matemáticas > < mi > π </ mi > < mes > </ mo > < msup > < mi > r </ mi > < mn > 2 </ mn > </ msup > </ math > . </p> </body> </html>
Otro estándar llamado OpenMath , que ha sido diseñado más específicamente (en gran medida por las mismas personas que idearon Content MathML) para almacenar fórmulas semánticamente, se puede utilizar para complementar MathML. Los datos de OpenMath se pueden incrustar en MathML utilizando el elemento. Los diccionarios de contenido de OpenMath se pueden utilizar para definir el significado de los elementos. Lo siguiente definiría P 1 ( x ) como el primer polinomio de Legendre :<annotation-xml encoding="OpenMath">
<csymbol>
<aplicar> <csymbol encoding= "OpenMath" definitionURL= "http://www.openmath.org/cd/contrib/cd/orthpoly1.xhtml#legendreP" > <msub><mi> P </mi><mn> 1 </mn></msub> </csymbol> <ci> x </ci> </aplicar>
El formato OMDoc se ha creado para el marcado de estructuras matemáticas más grandes que las fórmulas, desde enunciados como definiciones, teoremas, pruebas y ejemplos hasta teorías completas e incluso libros de texto enteros. Las fórmulas en los documentos OMDoc se pueden escribir en Content MathML o en OpenMath; para su presentación, se convierten a Presentation MathML.
El estándar ISO / IEC Office Open XML (OOXML) define una sintaxis matemática XML diferente, derivada de los productos de Microsoft Office . Sin embargo, es parcialmente compatible [30] a través de las Transformaciones XSL .
El grupo de trabajo de matemáticas del W3C recomienda la extensión de archivo estándar
utilizada para el registro del navegador.
.mml
Si bien MathML es legible para humanos, se prevé que, en todos los casos, salvo en los más simples, los autores utilizarán editores de ecuaciones, programas de conversión y otras herramientas de software especializadas para generar MathML.