por Pedro Morales

MathML

Este es un lenguaje para para describir expresiones matemáticas. Su utilidad es permitir escribir con símbolos y poder ponerlos en una página Web.

En más de alguna ocasión, como estudiantes e ingeniería, hemos querido revisar alguna página con una discusión matemática, para encontrarnos con que, debido a las limitaciones actuales, todas las formulas y la mayoría de la notación deben estar en imágenes, que o están tan optimizadas que entregan un pobre resultado visual, o al ser de calidad causan que la página tome mucho tiempo en cargar. Si uno lo piensa desde el punto de vista del autor, es aún por. De darse el trabajo de generar las mútiples imágenes para luego armar una página que se vea bien en la mayoría de los navegadores. Simplemente desanima a cualquier autor a publicar directo en el web. Para solucionar esto es que aparece MathML(Mathematical Markup Language), lanzado originalmente como recomendación por la W3C el 7 de abril de 1998. Actualmente se encuentra en su versión 2.0, lanzado como recomendación el 21 de febrero del 2001. El objetivo de MathML es permitir que las matemáticas sean servidas, recibidas y procesadas en la web al igual que lo es el texto HTML. El sistema de ecuaciones en imágenes que es actualmente el que predomina en la web es inadecuado debido a que la información matemática contenida en las imágenes no es útil para realizar búsquedas, indexar o reusar en otras aplicaciones.

El problema de cómo codificar las matemáticas en un formato digital para la comunicación electrónica es más antiguo que la web, sin embargo, debido al uso de la web como medio de difusión cobró gran importancia. Si bien en un inicio se escribía en ASCII, este formato es demasiado limitado. En 1986 apareció TEX, un lenguaje desarrollado por Donald Knuth que se volvió un método de marcado para las matemáticas usado ampliamente hasta la actualidad. El problema con TEX es que es un sistema tipográfico, es decir, es un sistema que fija un estándar para la calidad visual de la materialización en papel del documento. Además es muy intensivo en procesamiento en el renderizado de los documentos. TEX fue la influencia más grande para MathML, y un gran esfuerzo ha sido puesto para que MathML tenga la misma calidad de representación, pero en materializaciones diversas. Además de esto, se fijaron mútiples objetivos en la creación de MathML.

Lo primero es tener claro que se desea lograr con este lenguaje. Como el principal usuario de este lenguaje será la comunidad científica, entonces es a ellos a quienes hay que escuchar. Esto genera una larga lista de requisitos, entre los que se destacan:

  • Codificar material matemático útil para la enseñanza y la comunicación científica a todo nivel. Claramente este es el objetivo principal y originario de todo este esfuerzo.
  • Codificar tanto notación matemática como significado matemático. Si bien puede no quedar claro a que se refiere, en este informe se profundizará al respecto. Mientras diremos que parte de esto es fundamental en lo que mucha gente augura será el futuro: la web semántica.
  • Facilitar conversión desde y hacia otros formatos de presentación (por ejemplo: TEX). Esto resulta bastante evidente.
  • No tiene sentido inventar una notación nueva si se va a perder todo lo que se tiene actualmente.
  • Conveniente para la interacción con software externo. Esto se refiere en particular a generadores de código o posibles intérpretes e inclusive evaluadores de expresiones.
  • Ser extensible. No es posible definir toda la matemática, por lo que aquello que no quede definido y sea alguna vez necesario debe de ser posible de definirse.

Claramente este lenguaje no es para todos.

Es muy poco probable que todos deseen poner una expresión matemática en su sitio. Esta pensado para la comunidad científica, que lo utilizaría en la difusión de sus pensamientos y teorías. Además, producto de los requerimientos, este lenguaje de marcado presenta alguna complejidad para los usuarios. Por esto MathML no esta previsto para ser usado directamente por las personas que deseen publicar material, sino mediante editores de ecuaciones, programas de conversión, etc., que generen código MathML, es decir, muy similar a la situación que se experimenta actualmente con los editores de HTML, donde uno diseña la visualización que desea, y el editor genera el código respectivo.

Una de las cosas más importantes del lenguaje de marcado es el poder codificar la notación que representa a un objeto matemático y la estructura matemática del mismo. Es más, ambas codificaciones pueden ser usadas juntas para definir presentación y contenido de una idea matemática. Debido a esto es que se puede realizar una clasificación de los elementos de MathML, pudiéndose decir que todos caen en alguna de tres categorías: elementos de presentación, elementos de contenido y elementos de interfaz. Ahora se revisará cada uno de estos ítemes, revisando los fundamentos sobre los que se basan y formas básicas de uso.

1. Elementos de presentación

Corresponden a "constructores" de la notación matemática tradicional, es decir, los tipos básicos de símbolos y estructuras para la construcción de expresiones, a partir de los cuales cualquier parte de la notación tradicional de la matemática puede generarse. La descripción de las estructuras notacionales que los elementos representan se dan generalmente de una manera visualmente orientada. Sin embargo, los elementos son independientes de la materialización en el sentido de que han sido diseñados para contener suficiente información para, por ejemplo, una buena representación hablada (lectores automáticos). Los elementos de presentación sólo sugieren (no requieren) maneras específicas de representar, de forma de permitir una representación independiente del medio y para preferencias individuales de estilo. Esta especificación describe con algún detalle reglas de representación visual recomendadas, pero un renderizador de MathML es libre de usar sus propias reglas mientras la representación sea comprensible.

Están divididos en dos clases: elementos símbolo (token element), que representa símbolos, nombres, números, etc. Individuales. En general sólo tienen texto como contenido, salvo algunas excepciones.

La segunda clase son los esquemas de disposición (layout schemata), que construyen las expresiones de partes y sólo pueden tener elementos como contenido.

Los `símbolos' matemáticos deben ser representados por medio de elementos símbolo de MathML. Los principales son los identificadores (<mi>x</mi>), números (<mn>98</mn> y operadores (<mo>+</mo>).

En la notación tradicional matemática las expresiones se construyen a partir de expresiones más pequeñas, y finalmente a partir de simples símbolos, agrupados por usando otras estructuras notacionales (operadores, paréntesis, etc). En MathML las expresiones se construyen igual, siendo los esquemas de disposición lo que juegan el rol de constructores de expresiones. Dentro de estos tenemos por ejemplo a <mrow>...</mrow>, que dice que se despliegue en una fila la información dentro de los tags, y a <mfrac>...</mfrac>, que sirve para denotar fracciones. Es importante notar que en presentación el orden de los esquemas hijos si importa, pero no está forzado a nivel de la DTD de MathML. La idea de esta codificación es expresar la estructura sintáctica de la notación matemática. Por ejemplo para `a - db' seria representado como:

<mrow>
<mi> a </mi>
<mo> - </mo>
<mrow>
<mi> d </mi>
<mo> &InvisibleTimes; </mo>
<mi> b </mi>
</mrow>
</mrow>
2. Elementos de Contenido

La intención fundamental de la codificación de contenido en MathML es proveer una codificación específica de la estructura matemática subyacente de una expresión, más allá de cualquier representación particular para la expresión.

La principal razón para proveer esta codificación es que aún con el uso sistemático de tags de presentación no se puede capturar la información semántica entregada por este sistema. La dificultad se origina de que existen muchos caminos distintos desde representación hacia semántica y viceversa. Además la notación cambia con el tiempo y la cultura, por lo que si bien `*' se usa como multiplicación hoy, no quiere decir que sea usado así en unos años, o quizás en otros países.

Al codificar la información de esta forma se puede asegurar un intercambio de información mucho más preciso, incluso permitiendo la evaluación de las expresiones de una forma simple.

Debido a la falta de consenso en la semántica de la notación general, en MathML se optó por hacer explícito un número relativamente pequeño de construcciones matemáticas comunes, proveyendo de un mecanismo para asociar semánticas con nuevas construcciones notacionales. De esta manera el conjunto de construcciones puede ser extendido más allá del originalmente entregado.

El conjunto básico de construcciones se elige de manera de ser adecuado para la representación de formulas desde kinder hasta fines de media (equivalente) en EE.UU., y cubre en parte:

  • Aritmética, álgebra, lógica y relaciones.
  • Cálculo y cálculo vectorial.
  • Teoría de conjuntos.
  • Series y secuencias.
  • Funciones clásicas elementales.
  • Estadística.
  • Álgebra lineal.

El objetivo básico de la codificación de contenido es el establecimiento de relaciones explicitas entre las estructuras matemáticas y sus significados matemáticos. Cada estructura tiene una semántica predeterminadamente asociada y existe un mecanismo para asociar nuevos significados matemáticos con nuevas construcciones.

El uso de tags específicos de contenido nos reporta múltiples beneficios, como son la posibilidad de crear agente que procesen de manera mucho más precisa el contenido.

Finalmente, las expresiones descritas en términos de elementos de contenido deben ser llevadas a una representación también. Para esto existen visualizaciones claras para expresiones comunes. El resto se obtiene de la claridad de la definición.

La codificación de contenido de MathML esta basada en el concepto de árbol de expresión. En este árbol las hojas corresponden a objetos matemáticos básicos como son números (<cn>63</cn>), variables (<ci>p</ci>), etc. Los nodos intermedios generalmente representan algún tipo de función (<power/>) u otra construcción matemática que crea un objeto compuesto. Dado que no es la intención de este documento el enseñar a usar MathML, no profundizaré en las distintas clases de elementos de contenido que existen, pero si clarificare que el elemento <apply>...</apply> es quizás uno de los más importantes, ya que es el que se usa para efectivamente aplicar la función a sus argumentos. Nuevamente el orden de los hijos del elemento si importa, pero no esta forzado en la DTD de MathML.

Los elementos de contenido de MathML pueden ser agrupados en las siguientes categorías según su uso:

  • contenedores
  • operadores y funciones
  • calificadores
  • relaciones
  • condiciones
  • mapeos semánticos
  • constantes y símbolos

Estos son los bloques de construcción que componen las expresiones de contenido de MathML.

3. Elementos de interfaz

Los elementos de interfaz son aquellos relacionados en la generación y representación de MathML, siendo particularmente importantes los que respectan a insertar MathML en HTML y XHTML, puesto que la idea es codificar matemáticas en documentos web. Hay tres temas principales en lo que insertar MathML en otros documentos XML respecta. El primero es que MathML debe estar semánticamente integrado, es decir, debe ser reconocido como contenido XML válido insertado, y no como un error. Esto se soluciona mediante namespaces, y un tag particular que encapsula toda expresión MathML válida.

<math xmlns="http://www.w3.org/1998/Math/MathML">
.
.
.
</math>

Otro problema es, en el caso de HTML/XHTML, el renderizado de MathML debe estar integrado en el browser, y aún son muy pocos los browsers que soportan MathML.

El tercer problema es que las herramientas para generar y procesar MathML deben ser capaces de intercomunicarse. Hay un número de herramientas que ya han sido o están siendo desarrolladas, y dado que las expresiones suelen a ser largas y tendientes a ser ingresadas erróneamente a mano, se debe poner especial énfasis en asegurar que el código puede ser generado con herramientas fáciles de usar, que sean independientes de plataforma y marca. Un ejemplo de MathML. El código para generar la siguiente ecuación mediante notación de presentación y de contenido.


En elementos de representación:

<math>
<msup>
<mrow>
<mo> ( </mo>
<mrow>
  <mi> x </mi>
<mo> + </mo>
<mi> y </mi>
</mrow>
<mo> ) </mo>
</mrow>
<mn> 2 </mn>
</msup>
</math>

En elementos de contenido:

<math>
<apply>
<power/>
<apply>
  <plus/>
  <ci>x</ci>
 <ci>y</ci>
</apply>
<cn>3</cn>
</apply>
</math>

Actualmente, el soporte para MathML es todavía muy incipiente. En el área de Math Homede la W3Cexiste una lista de softwares que ya soportan MathML. En una rápida inspección, uno puede observar que el mayor soporte es para la edición y generación de código MathML, junto con la conversión desde y hacia varios formatos.

La representación aún no es suficientemente soportada. Es más, el poco soporte que existe para esta no está orientado al web, sino a ver documentos generados, pero no mientras uno navega (obviamente puedo guardarlo y verlo, pero esa no es la idea). Existen 2 browsers que soportan MathML: Mozilla y Amaya, el browser del W3C. Para ver como estaba el soporte actual bajé e instalé ambos navegadores. Como prueba utilicé la MathML Test Suite, provista por la W3C.

Mozila fue incapaz de renderizar ningun tipo de notación, ya sea de presentación o contenido. Lo más probable es que sea por problemas de mi instalación, pero eso fue lo que ocurrió.

Amaya, por su parte si pudo renderizar las ecuaciones, pero sólo las que se encuentran en notación de presentación. Luego de buscar información en el programa, pude constatar que el soporte para notación de contenido no está hecho aún. Esto es algo que yo considero particularmente malo, puesto que lo ideal sería lo antes posible ir convirtiéndo el contenido de la web en un contenido con algún grado de semántica. MathML trae esto incorporado en su idea de diseño, pero debido a que aún no hay muchas herramientas que renderizen esta notación, hace que sea dejada de lado para usar la notación de presentación, que si es renderizable. Con esto lo único que se logra es que la idea de la internet del futuro que múltiples gurúes de la web han planteado se demore más aún en convertirse en una realidad.

Otra observación es que no existe ningúna aplicación asociada a la semántica de MathML. Si bien es cierto que aún no se renderiza esta notación, sería interesante comenzar a ver indexaciones, categorizaciones, ideas sobre agentes que utilicen esta tecnología, pero no se menciona en ninguna parte. Lo más cercano a esto son menciones que se ralizan a softwares que pueden evaluar las expresiones.

Deberían existir más aplicaciones similares, ya que si bien no se puede ver, si se puede procesar. Sería interesante comenzar a oír sobre agentes que colectan esta infromación, comenzado a construir una web semántica matemática. Podrían ponerse sitios que tuvieran colecciones de teoremas, demostraciones, algoritmos, funciones, etc. categorizados, que pudieran ser consultados mediante interfaces web, pero a la vez, agentes que fueran a estos sitios y, siguiendo las instruciones que se le dieron, recopilara conjuntos de información y los trajera de vuleta.

Si bien MathML es, en palabras de Vincent Quint, líder del Dominio de las Interfaces de Usuario de la W3C, "un gran avance en representación de contenido en la web", aún no está teniendo la difusión que uno esperaría de tal declaración. El soporte es muy limitado, y no se está aprovechando su mayor atractivo,que es la posibilidad de definir estructura, semántica. Espero que el soporte para esta tecnología aumente en el tiempo que viene. Es cierto que no existe motivo para pensar que ocurrira, puesto que esto está totalmente orientado al ambiente científico, lo que por ejemplo hace pensar que de aqui a que microsoft agregue soporte para MathML en sus browsers falta realmente mucho. Es nuevamente la oportunidad de que la comunidad OpenSource tome esta poderosa herramienta, y comience a desarrollar ese interesante y poderoso lado que es la semántica.

ChaTo = Carlos Castillo, Ph.D.  :::  Acerca de este Sitio ChaTo = Carlos Castillo, Ph.D. ::: Acerca de este Sitio