MathML - Mathematical Markup Language

MathML é uma linguagem de marcação, baseada em XML, para criar fórmulas matemáticas. Ela está dividida em duas partes: Presentation e Content Markup. Esse artigo vai tratar apenas da Presentation Markup.

[ Hits: 8.180 ]

Por: Paulo Dias em 19/07/2013 | Blog: http://www.prminformatica.com.br


Entendendo o básico



MathML é uma linguagem de marcação, baseada em XML, para criar fórmulas matemáticas. Ela está dividida em duas partes:
  1. Presentation
  2. Content Markup

Esse artigo vai tratar apenas da Presentation Markup.

A maioria dos navegadores atuais já oferecem algum suporte nativo para às instruções MathML, e com o tempo, esse suporte deve ficar ainda mais completo, pois a MathML está incluída na especificação do HTML5.

Os exemplos que vou utilizar foram testados no Firefox 22. É interessante utilizar um navegador atualizado para visualizar o resultado gerado pelos códigos.

Vou iniciar mostrando os principais elementos da MathML e depois vou mostrar exemplos completos. Veja um exemplo bem simples:

<math>
      <msqrt>
            <mn>2</mn>
      </msqrt>
</math>

Essa marcação deve apresentar a raiz quadrada de 2, assim:


      
            2
      


Perceba que o elemento raiz do MathML é o "math", e que a raiz quadrada é representada pelo elemento "msqrt" (para outras raízes existe o elemento "mroot", veja os exemplos na próxima página) e o elemento "mn" representa um número.

Os elementos mais usados em MathML são "mn", "mi" e "mo". Eles servem para representar respectivamente números (ex.: 1, 0.235), variáveis/constantes (ex.: x, π) e operadores (ex. +, =).

Veja um exemplo usando esses 3 elementos:

<math>
      <mi> y </mi>
      <mo> = </mo>
      <mi> x </mi>
      <mo> - </mo>
      <mn> 3 </mn>
</math>

Esse código gera a seguinte informação:


       y 
       = 
       x 
       - 
       3 


Outro elemento usado com frequência é o "mrow". Esse elemento tem a função de agrupar outros elementos em linha. A princípio, pode parecer um elemento sem muita utilidade, mas em MathML existem elementos com um número específico de filhos. Dessa forma "mrow" se torna muito útil.

Por exemplo, o elemento "mfenced" serve para colocar parênteses ao redor de outro elemento, mas se for colocado mais de um elemento filho dentro dele, esses elementos são separados por vírgula, veja:

<math>
      <mfenced>
            <mi> x </mi>
            <mo> - </mo>
            <mn> 3 </mn>
      </mfenced>
</math>

Esse código gera a seguinte saída:


      
             x 
             - 
             3 
      


Essa característica pode ser útil em alguns casos, mas nesse exemplo, eu não quero essa separação. Para evitar isso, vou usar o "mrow":

<math>
      <mfenced>
            <mrow>
                  <mi> x </mi>
                  <mo> - </mo>
                  <mn> 3 </mn>
            </mrow>
      </mfenced>
</math>

E consigo a seguinte saída:


      
            
                   x 
                   - 
                   3 
            
      


Obs.: é possível especificar quais caracteres serão utilizados como parênteses e separadores do "mfenced". Isso é possível através dos atributos open, close e separators.

<math>
      <mfenced open="[" close="]" separators="|">

                  <mn> 2 </mn>
                  <mn> 5 </mn>
                  <mn> 8 </mn>

      </mfenced>
</math>

Outro elemento que tem o número de filhos predefinido é "mfrac", que serve para criar frações, o primeiro filho é o numerador e o segundo é o denominador. Segue um exemplo:

<math>
      <mfrac>
            <mrow>
                  <mn> 2 </mn>
                  <mo> + </mo>
                  <mn> 5 </mn>
            </mrow>
            <mn>2</mn>
      </mfrac>
</math>

Saída:


      
            
                   2 
                   + 
                   5 
            
            2
      


Os elementos "msub" e "msup" também têm o número de filhos predefinidos:

<math>
      <msub>
            <mn> 2 </mn>
            <mn> 5 </mn>
      </msub>

      <mo>+</mo>

      <msup>
            <mn> 1 </mn>
            <mn> 4 </mn>
      </msup>
</math>



      
             2 
             5 
      

      +

      
             1 
             4 
      


Com MathML, é possível criar matrizes com uma sintaxe semelhante às tabelas HTML. O elemento pai é o "mtable". Dentro dele temos elementos de linha "mtr", e dentro desses, elementos de coluna "mtd". Veja:

<math>
      <mfenced><mtable>
            <mtr>
                  <mtd> <mn> 1 </mn> </mtd>
                  <mtd> <mn> 0 </mn> </mtd>
            </mtr>
            <mtr>
                  <mtd> <mn> 0 </mn> </mtd>
                  <mtd> <mn> 1 </mn> </mtd>
            </mtr>
       </mtable></mfenced>
</math>

Saída:

Linux: MathML - Mathematical Markup Language

    Próxima página

Páginas do artigo
   1. Entendendo o básico
   2. Praticando com exemplos
Outros artigos deste autor

Programação com Shell Script

AWK - Manipulação de arquivos de texto

JavaScript - Programação orientada a objetos

Zoneminder: Substituindo um Unifi NVR

Bitwise - Escovando os bits

Leitura recomendada

Google Maps API - Criando e interagindo com seus próprios mapas

Jakarta JMeter - Testando o desempenho de seus sites

Web sites dinâmicos com Ajax + JSP + MySQL

Como camuflar seu WhatsApp Web usando Snippets JavaScript

W3C - World Wide Web Consortium

  
Comentários
[1] Comentário enviado por eldermarco em 20/07/2013 - 20:34h

Rapaz, que interessante! Eu sempre ouço falar sobre o MathML, mas nunca tinha pesquisado sobre como ele funciona. Em geral, costumo escrever equações matemáticas utilizand a sintaxe do LaTeX, mas em páginas da web essa forma pode ser mais interessante e fácil de lidar.

Muito bom!


Contribuir com comentário