# MathML

Mathematical Markup Language (MathML) é uma linguagem de marcação matemática, uma aplicação de XML para descrever noções matemáticas e capturar sua estrutura e conteúdo. Parte do HTML5 e ISO ISO / IEC DIS 40314 desde 2015, o MathML visa integrar de fórmulas matemáticas em páginas World Wide Web e outros documentos.

## História

A MathML 1 foi lançada como Recomendação W3C em abril de 1998 como a primeira linguagem XML recomendada pelo W3C. A versão 1.01 foi lançada em julho de 1999 e a versão 2.0 surgiu em fevereiro de 2001. Em outubro de 2003, a segunda ediçãode MathML versão 2.0 foi lançada com o último lançamento do MathML Working Group da W3C.MathML foi originalmente desenhada antes da finalização do namespaces XML. Entretanto, foi atribuído um namespace imediatamente após a conclusão da Namespace Recommendation (para o uso de XML, os elementos devem estar no namespace com namespace URI http://www.w3.org/1998/Math/MathML). Quando MathML é usada em HTML (em oposição a XML) este namespace é automaticamente inferido pelo analisador HTML e não precisa ser especificado no documento.

### MathML versão 3.0

A versão 3.0 da especificação MathML foi lançada como uma Recomendação W3C em 20 outubro de 2010. Uma recomendação de A MathML for CSS Profile foi posteriormente lançada em 7 de junho de 2011. Este é um subconjuntode MathML adaptável para o formato CSS. O outro conjunto Strict Content MathML fornece um subconjunto de Content MathML como uma estrutura uniforme e é desenhado para ser compatível como OpenMath. Outros elementos do conteúdo são definidos nos termos de uma transformação para o subconjunto estrito. Novos elementos de conteúdo incluem <bind>, que associam variáveis (<bvar>) a expressões. Por exemplo, um índice de somatório. O novo elemento <share> permite o compartilhamento de estruturas.
O desenvolvimentode MathML 3.0 passou por vários estágios. Em junho de 2006, o W3C reorientou o MathML Working Group para produzir uma Recomendação MathML 3 até fevereiro de 2008 e em novembro de 2008 estendeu a atividade até abril de 2010. Um sexto projeto da revisãode MathML 3 foi lançado em junho de 2009. Em 10 de agosto de 2010, a versão 3 se transformou em uma Recomendação Proposta em vez de um projecto. A segunda ediçãode MathML 3.0 foi lançada como uma Recomendação W3C em 10 de abril de 2014. A especificação foi aprovada como um padrão internacional ISO/IEC 40314:2015 em 23 de junho de 2015.

## Apresentação e semântica

A MathML lida não apenas com a apresentação como também com o significado dos componentes das fórmulas (a última parte do MathML é conhecida como Content MathML). Por o significado ser preservado separadamente da apresentação da equação, a forma como o conteúdo é comunicado pode ser deixada ao usuário. Por exemplo, páginas web como MathML embutido podem ser visualizadas como páginas web normais com muitos browsers. Entretanto, usuários com deficiência visual podem ter a mesma leitura de MathML por meio de leitores de tela. Por exemplo, usando o MathPlayes plugin para Internet Explore, o Opera 9.50 ou a extensão Fire Vox para Firefox.

### Presentation MathML

Presentation MathML foca na exibição de uma equação e possui cerca de 30 elementos. Todos os nomes dos elementos começam com m. Presentation MathML é construída a partir de tokes que são combinados usando elementos de alto nível, que controlam seu layout (há também cerca de 50 atributos, que controlam principalmente detalhes menores).
Os elementos tokem geralmente contêm apenas caracteres (não contêm outros elementos). Eles incluem:
* <mi>x</mi> – identificadores
* <mo>+</mo> – operadores
* <mn>2</mn> – números
* <mtext>non zero</mtext> – texto
No entanto, nota–se que estes elementos token podem ser usados como pontos de extensão, permitindo marcações nas linguagens do host.MathML em HTML5 permite a maioria das marcações HTML em mtext e
* <mtext><b>non</b> zero</mtext>
está em conformidade, com as marcações HTML sendo usadas dentrode MathML para marcar textos embutidos.
Estes são combinados usando elementos de layout, que geralmente contêm apenas elementos. Eles incluem:
* <mrow> – linha horizontal de itens
* <msup>, <munderover> , entre outros – sobrescritos, limites acima e abaixo de operadores como somas, entre outros
* <mfrac> – frações
* <msqrt> and <mroot> – raízes
* <mfenced> – cercam o conteúdo com parênteses, por exemplo
Como de costume em HTML e XML, muitas entidades estão disponíveis para especificar símbolos especiais por nome como &pi; e &RightArrow;. Uma característica interessantede MathML é que as entidades também existem para expressar operadores normalmente invisíveis como&InvisibleTimes; para multiplicação implícita. Eles são:
* U+2061 FUNCTION APPLICATION
* U+2062 INVISIBLE TIMES
* U+2063 INVISIBLE SEPARATOR
* U+2064 INVISIBLE PLUS
A especificação completa das entidades MathML é coordenada com as especificações correspondentes para uso com HTML e XML em geral.
Então, a expressão $ax^{2}+bx+c$ requer dois elementos de layout – um para criar a linha horizontal geral e outro para o expoente sobrescrito. Incluindo apenas os elementos de layout e os tokens (ainda não marcados), a estrutura se parece como:
Porém, os tokens individuais também precisam ser identificados como identificadores (mi), operadores (mo) ou números (mn). Com a marcação token, a forma completa termina como:
Um documento MathML válido consiste normalmente na declaração XML, na declaração DOCTYPE e no elemento do documento. O corpo do documento contém as expressões MathML, que aparecem nos elementos <math> conforme necessário. Geralmente, MathML será embutida em documentos mais gerais como HTML, DocBook ou outros esquemas XML. Um documento completo que consiste apenas no exemplo de MathMl acima é mostrado como:

### Content MathML

Content MathML foca na semântica ou no significado em vez do layout da expressão. É central para Content MathML o elemento <apply> que representa a função aplicação. A função aplicada é o primeiro elemento sob <apply> , e seus operadores e seus parâmetros são os elementos remanescentes. Content MathML usa apenas alguns atributos.
Tokens como identificadores e números são marcados individualmente muitos como Presentation MathML, mas com elementos como ci e cn. Em vez de serem simplesmente um outro tipo de token, os operadores são representados por elementos específicos, cuja semântica matemática é conhecida por MathML: times, power, entre outros. Existem mais de cem elementos diferentes para diferentes funções e operadores (ver ).
Por exemplo, <apply><sin/><ci>x</ci></apply> representa $\sin(x)$ e <apply><plus/><ci>x</ci><cn>5</cn></apply> representa $x+5$. os elementos representando operadores e funções são elementos vazios porque seus operandos são os outros elementos sob <apply> .
A expressão $ax^{2}+bx+c$ poderia ser representada como:
Content MathML é quase isomorfo para expressões em uma linguagem funcional como Scheme.<apply>...</apply> equivale a Scheme (...), e os muitos elementos de operador e de função são funções Scheme. Com esta transformação literal trivial, além de desmarcar os tokens individuais, o exemplo acima se torna:
Isto reflete a relação estreita conhecida entre as estruturas de elementos XML e LISP ou Scheme S–expressions.

## Exemplos e comparação com outros formatos

A fórmula quadrática:
$x={\frac {-b\pm {\sqrt {b^{2}-4ac}}}{2a}}$
poderia ser marcada usando a sintaxe LaTeX como:
em troff/eqn como:
em Apache OpenOffice Math e LibreOffice Math como:
em AsciiMath como:
A equação acima poderia ser representada como Presentation MathML como uma árvore de expressão feita a partir de elementos de layout como mfrac ou msqrt:
Este exemplo usa o elemento <annotation> , que pode ser usado para embutir uma notação semântica no formato non-XML format, por exemplo para arquivar a fórmula no formato usado por um editor de equação como StarMath ou pela marcação usando a sintaxe LaTeX.
Embora menos compacto que o TeX, a estrutura XML promete torná–lo amplamente utilizável, permite exibição instantânea em aplicações como web browsers e facilita uma interpretação do seu significado em softwares matemáticos. MathML não destina–se a ser escrita ou editada diretamente por seres humanos.

## Embutindo MathML em arquivos HTML/XHTML

MathML, sendo XML, pode ser incorporado dentro de outros arquivos XML como arquivos XHTML usando namespaces XML. Navegadores recentes como o Firefox 3+ e Opera 9.6+ (suporte incompleto) podem exibir Presentation MathML incorporado em XHTML.
    A rendering of the formula for a circle in MathML+XHTML using Firefox 22 on Mac OS X
MathML também é suportado em arquivos HTML5 nas versões atuais do WebKit (Safari), Gecko (Firefox). Não há necessidade de especificar namespaces como no XHTML.

## Suporte de software
### Web browsers

Dos principais web browsers, browsers baseados em Gecko (por exemplo, Firefox e Camino) têm o suporte nativo mais completo para MathML.
Embora o mecanismo de layout do WebKit tenha uma versão de desenvolvimento do MathML, este recurso está disponível somente a partir da versão 5.1 do Safari, Chrome 24, mas não em versões posteriores do Google Chrome. O Google removeu o suporte do MathML, reivindicando problemas de segurança arquitetônicos. Em outubro de 2013, a implementação do WebKit / Safari apresentava vários bugs.
Opera, entre as versões 9.5 e 12, tem suporte para MathML para CSS, mas é incapaz de posicionar marcas diacríticas corretamente. Antes da versão 9.5, era necessário JavaScript do usuário ou folhas de estilo personalizadas para emular o suporte MathML. A partir da versão 14, o Opera subtiuti o suporte de MathML para Chromium 25.
Internet Explorer não tem suporte nativo para MathML. O suporte para IE6 por meio do IE9 pode ser adicionado com a instalação do plugin MathPlayer. IE10 apresenta alguns bugs com MathPlayer, e a Microsoft decidiu desabilitar completamente no IE11 a interface de plugin binário necessária para o MathPlayer. O MathPlayer tem uma licença que pode limitar seu uso ou distribuição em páginas web comerciais e software. Usar ou distribuir o plugin MathPlayer para exibir conteúdo HTML por meio do controle WebBrowser em software comercial também pode ser proibido por esta licença.
Konqueror baseado em KHTML não tem suporte para MathML.
A qualidade da renderização de MathML em um navegador depende das fontes instaladas. O projeto STIX Fonts lançou um conjunto abrangente de fontes matemáticas sob licença aberta. A fonte Cambria Math fornecida com o Microsoft Windows tinha um suporte ligeiramente mais limitado.
De acordo com um membro da equipe MathJax, nenhum dos principais fabricantes de navegadores pagou qualquer seus desenvolvedores para trabalhos de renderização de MathML. Qualquer apoio existente é resultado trabalho voluntário (não remunerado)..
Em 2015, a Associação MathML foi fundada para apoiar a adoção do padrão MathML.

### Editores

Editores com suporte nativo MathML (incluindo copiar e colar para MathML) são MathFlow e MathType, do Design Science, MathMagic e Publicon, da Wolfram Research, e WIRIS. Uma lista completa de editores MathML está disponível no W3C.
MathML também conta com suporte dos principais pacotes office como Apache OpenOffice (via OpenOffice Math), LibreOffice (via LibreOffice Math), Calligra Suite (antigo KOffice), Apple's Pages e MS Office 2007, além de software matemáticos como Mathematica, Maple e a versão para Microsoft Windows da Casio ClassPad 300. O navegador W3C / editor Amaya também pode ser mencionado como um editor WYSIWYG MathML.
Firemath, um add-on para Firefox, fornece um editor WYSIWYG MathML.
A maioria dos editores apenas produzem Presentation MathML. O editor de fórmulas MathDox é um editor OpenMath que também fornece apresentação e conteúdo MathML. O Formulator MathML Weaver usa o estilo WYSIWYG para editar apresentação, conteúdo e marcações de MathML.

### Reconhecimento da caligrafia

Web Equation pode converter manuscritos para MathML. Windows 7 tem uma ferramenta interna chamada de Math Input Panel, que converte manuscrito para MathML (ao contrário do pacote do Microsoft Office, o Math Input Panel não usa o formato OMML, mas os aplicativos do Microsoft Office podem converter / colar do MathML em seu formato interno preferido). Embora a tecnologia subjacente também seja exposta para uso em outros aplicativos como um controle ActiveX chamado de Math Input Control, deve–se notar que o ActiveX está desativado e não terá necessariamente suporte em futuros softwares da Microsoft como seu navegador Microsoft Edge.

### Conversão

Há várias utilidades para conversão para e de MathML que estão disponíveis. W3.org mantém uma lista de softwares relacionado a MathML para download.

### Conversão web

ASCIIMathML fornece uma biblioteca JavaScript para reescrever uma sintaxe de texto parecida com wiki usada em páginas web em MathML, que funciona em navegadores baseados em Gecko e no Internet Explorer com MathPlayer. LaTeXMathML faz o mesmo para o subconjunto da sintaxe matemática LaTeX padrão. A sintaxe ASCIIMathML também poderia ser bastante familiar para qualquer pessoa acostumada às calculadoras científicas eletrônicas.
MathJax, uma biblioteca de JavaScript para renderização de fórmulas matemáticas expressas em LaTeX, AsciiMath ou MathML, também pode ser usada para traduzir LaTeX ou AsciiMath em MathML para interpretação direta pelo navegador.
Equation Server para .NET de soft4science pode ser usado no lado do servidor (ASP.NET) para TeX-Math (subconjunto da sintaxe matemática do LaTeX) para a conversão MathML e também pode criar imagens bitmap (png, jpg, gif, entre outras) a partir da entrada TeX-Math ou MathML.
JqMath é um módulo de JavaScript que converte dinamicamente uma sintaxe simples parecida com TeX para MathML se o navegador o suportar, senão para simples HTML e CSS.
LaTeXML é uma reimplementação completa do sistema de tipografia TeX, capaz de converter documentos LaTeX em HTML e em ePub, opcionalmente usando MathML ou convertendo expressões matemáticas em imagens png ou svg. Esta é uma das poucas ferramentas que também fornecem saída Content MathML de conteúdo opcional para as equações convertidas.

### Suporte para desenvolvedores de software

O suporte para o formato MathML acelera o desenvolvimento de aplicativos de software em vários tópicos como educação assistida por computador (ensino à distância, livros didáticos eletrônicos, entre outros materiais de sala de aula), a criação automatizada de relatórios, sistemas de álgebra computacional, ferramentas de criação, treinamento e publicação tanto para a web quanto para desktop, entre muitas outras aplicações para matemática, ciências, negócios, economia. Vários fornecedores de software propõem uma edição de componentes de seus editores MathML, fornecendo o caminho mais fácil para os desenvolvedores de software inserirem funcionalidades de renderização, edição e processamento matemáticas em suas aplicações. Por exemplo, o Formulator ActiveX Control do Laboratório Hermitech pode ser incorporado a um aplicativo como o editor MathML. A Design Science oferece um kit de ferramentas para a construção de páginas web que incluem matemática interativa (MathFlow Developers Suite).

## Outros padrões

Outro padrão chamado de OpenMath que foi projetado (principalmente pelas mesmas pessoas que criaram o Content MathML) mais especificamente para arquivar fórmulas semanticamente também pode ser usado para complementar MathML. Os dados do OpenMath podem ser embutidos em MathML usando o elemento <annotation-xml encoding="OpenMath"> . Os dicionários de conteúdo OpenMath podem ser usados ​​para definir o significado dos elementos <csymbol> . A expressão seguinte define P$_1$(x) como o primeiro polinômio de Legendre:
O formato OMDoc foi criado para marcação de estruturas matemáticas maiores que fórmulas, de declarações como definições, teoremas, provas ou exemplos a teorias e livros. As fórmulas em documentos OMDoc podem ser escritas em Content MathML ou em OpenMath. Elas são convertidos para Presentation MathML para apresentação.
O Office Open XML (OOXML) padrão SO/IEC define uma sintaxe de matemática XML diferente, derivada de produtos do Microsoft Office. Entretanto, ela é parcialmente compatível por meio de XSL Transformations relativamente simples.