MathML - MathML

MathML
Tipo de mídia da Internet aplicativo / mathml + xml, aplicativo / mathml-apresentação + xml, aplicativo / mathml-content + xml, math / mml
Desenvolvido por World Wide Web Consortium
Tipo de formato Linguagem de marcação
Estendido de XML
Padrão W3C MathML
MathML
Linguagem de marcação matemática
Nome nativo
Status Recomendação W3C
Publicado pela primeira vez Abril de 1998 ( 1998-04 )
Última versão 3.0
, 10 de abril de 2014 ; 7 anos atrás ( 10/04/2014 )
Organização W3C , ISO , IEC
Comitê
Editores
Autores
Autores principais
    • Ron Ausbrooks
    • Stephen Buswell
    • David Carlisle
    • Giorgi Chavchanidze
    • Stéphane Dalmas
    • Stan Devitt
    • Angel Diaz
    • Sam Dooley
    • Roger Hunter
    • Patrick Ion
    • Michael Kohlhase
    • Azzeddine Lazrek
    • Paul Libbrecht
    • Bruce Miller
    • Robert Miner
    • Chris Rowley
    • Murray Sargent
    • Bruce Smith
    • Neil Soiffer
    • Robert Sutor
    • Stephen Watt
Padrões básicos XML
Padrões relacionados OpenMath , Office Open XML , OMDoc
Abreviação MathML
Local na rede Internet

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

História

MathML 1 foi lançado como uma recomendação do W3C em abril de 1998 como a primeira linguagem XML a ser recomendada pelo W3C . A versão 1.01 do formato foi lançada em julho de 1999 e a versão 2.0 apareceu em fevereiro de 2001.

Em outubro de 2003, a segunda edição do MathML Versão 2.0 foi publicada como a versão final do W3C Math Working Group.

MathML foi originalmente projetado antes da finalização dos namespaces XML . No entanto, foi atribuído um namespace imediatamente após a recomendação de namespace ter sido concluída e, para uso em XML, os elementos devem estar no namespace com o URL do namespace http://www.w3.org/1998/Math/MathML. Quando MathML é usado em HTML (em oposição a XML), esse namespace é inferido automaticamente pelo analisador HTML e não precisa ser especificado no documento.

MathML versão 3

A versão 3 da especificação MathML foi lançada como uma recomendação W3C em 20 de outubro de 2010. Uma recomendação de A MathML para perfil CSS foi lançada posteriormente em 7 de junho de 2011; este é um subconjunto de MathML adequado para formatação CSS. Outro subconjunto, Strict Content MathML , fornece um subconjunto de conteúdo MathML com uma estrutura uniforme e é projetado para ser compatível com OpenMath . Outros elementos de conteúdo são definidos em termos de uma transformação para o subconjunto estrito. Novos elementos de conteúdo incluem o <bind>que associa variáveis ​​associadas ( <bvar>) a expressões, por exemplo, um índice de soma. O novo <share>elemento permite o compartilhamento de estrutura.

O desenvolvimento do MathML 3.0 passou por vários estágios. Em junho de 2006, o W3C reformulou o MathML Working Group para produzir uma Recomendação do MathML 3 até fevereiro de 2008 e em novembro de 2008 estendeu a carta até abril de 2010. Um sexto Working Draft da revisão do MathML 3 foi publicado em junho de 2009. Em 10 de agosto de 2010, a versão 3 graduou-se para se tornar uma "Recomendação Proposta" em vez de um rascunho.

A segunda edição do MathML 3.0 foi publicada como uma recomendação do 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

MathML lida não apenas com a apresentação, mas também com o significado dos componentes da fórmula (a última parte do MathML é conhecida como "Conteúdo MathML"). Como o significado da equação é preservado separado da apresentação, a forma como o conteúdo é comunicado pode ser deixada para o usuário. Por exemplo, páginas da web com MathML embutido nelas podem ser visualizadas como páginas normais da web com muitos navegadores, mas usuários com deficiência visual também podem ter o mesmo MathML lido para eles através do uso de leitores de tela (por exemplo, usando o plugin MathPlayer para Internet Explorer ou Firefox , Opera 9.50 build 9656+ ou a extensão Fire Vox para Firefox). As versões mais recentes do JAWS suportam voz MathML, bem como saída em braille.

Apresentação MathML

Apresentação MathML se concentra na exibição de uma equação e tem cerca de 30 elementos. Todos os nomes dos elementos começam com m. Uma expressão Presentation MathML é construída a partir de tokens que são combinados usando elementos de nível superior, que controlam seu layout (também há cerca de 50 atributos, que controlam principalmente detalhes finos).

Os elementos token geralmente contêm apenas caracteres (não outros elementos). Eles incluem:

  • <mi>x</mi> - identificadores;
  • <mo>+</mo> - operadores;
  • <mn>2</mn> - números.
  • <mtext>non zero</mtext> - texto.

Observe, no entanto, que esses elementos de token podem ser usados ​​como pontos de extensão, permitindo a marcação em linguagens de host. MathML em HTML5 permite a maioria das marcações HTML embutidas em mtext, e <mtext><b>non</b> zero</mtext>está em conformidade, com a marcação HTML sendo usada dentro da MathML para marcar o texto embutido (deixando a primeira palavra em negrito neste exemplo).

Eles são combinados usando elementos de layout, que geralmente contêm apenas elementos. Eles incluem:

  • <mrow> - uma linha horizontal de itens;
  • <msup>, <munderover>, E outros - sobrescritos, limites acima e abaixo dos operadores como somas, etc .;
  • <mfrac> - frações;
  • <msqrt>e <mroot>- raízes;
  • <mfenced> - cercar o conteúdo com cercas, como parênteses.

Como de costume em HTML e XML, muitas entidades estão disponíveis para especificar símbolos especiais por nome, como &pi;e &RightArrow;. Um recurso interessante do MathML é que as entidades também existem para expressar operadores normalmente invisíveis, como &InvisibleTimes;(ou a abreviação &it;) para multiplicação implícita. Eles são:

  • U + 2061 FUNÇÃO DE APLICAÇÃO;
  • U + 2062 TEMPOS INVISÍVEIS;
  • U + 2063 SEPARADOR INVISÍVEL;
  • U + 2064 INVISIBLE PLUS.

A especificação completa das entidades MathML é estreitamente coordenada com as especificações correspondentes para uso com HTML e XML em geral.

Portanto, a expressão 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 nus (ainda não marcados), a estrutura é semelhante a esta:

  <mrow>
    a &InvisibleTimes; <msup>x 2</msup>
    + b &InvisibleTimes; x
    + c
  </mrow>

No entanto, os tokens individuais também devem ser identificados como identificadores (mi), operadores (mo) ou números (mn). Adicionando a marcação de token, o formulário completo termina como:

  <mrow>
    <mi>a</mi> <mo>&InvisibleTimes;</mo> <msup><mi>x</mi><mn>2</mn></msup>
    <mo>+</mo><mi>b</mi><mo>&InvisibleTimes;</mo><mi>x</mi>
    <mo>+</mo><mi>c</mi>
  </mrow>

Um documento MathML válido normalmente consiste na declaração XML, declaração DOCTYPE e elemento de documento. O corpo do documento contém então expressões MathML que aparecem nos elementos <math> conforme necessário no documento. Freqüentemente, o MathML será incorporado em documentos mais gerais, como HTML , DocBook ou outros esquemas XML . Um documento completo que consiste apenas no exemplo MathML acima é mostrado aqui:

<?xml version="1.0" encoding="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>&InvisibleTimes;</mo> <msup><mi>x</mi><mn>2</mn></msup>
    <mo>+</mo><mi>b</mi><mo>&InvisibleTimes;</mo><mi>x</mi>
    <mo>+</mo><mi>c</mi>
  </mrow>
</math>

Conteúdo MathML

Conteúdo MathML enfoca a semântica, ou significado, da expressão em vez de seu layout. Central para o conteúdo MathML é o <apply>elemento que representa a aplicação da função. A função que está sendo aplicada é o primeiro elemento filho abaixo <apply>, e seus operandos ou parâmetros são os elementos filhos restantes. O conteúdo MathML usa apenas alguns atributos.

Tokens como identificadores e números são marcados individualmente, da mesma forma que no Presentation MathML, mas com elementos como cie cn. Em vez de serem meramente um outro tipo de sinal, os operadores são representados por elementos específicos, cujas semântica matemático são conhecidos para MathML: times, power, etc. Há mais de uma centena de elementos diferentes para diferentes funções e operadores.

Por exemplo, representa e representa . Os elementos que representam operadores e funções são elementos vazios, porque seus operandos são os outros elementos sob o contêiner . <apply><sin/><ci>x</ci></apply><apply><plus/><ci>x</ci><cn>5</cn></apply><apply>

A expressão pode ser representada como

<math>
    <apply>
        <plus/>
        <apply>
            <times/>
            <ci>a</ci>
            <apply>
                <power/>
                <ci>x</ci>
                <cn>2</cn>
            </apply>
        </apply>
        <apply>
            <times/>
            <ci>b</ci>
            <ci>x</ci>
        </apply>
        <ci>c</ci>
    </apply>
</math>

Conteúdo MathML é quase isomórfico a expressões em uma linguagem funcional como Scheme . <apply>...</apply>equivale a Scheme's (...), e os muitos operadores e elementos de função equivalem a funções de Scheme. Com essa transformação literal trivial, além de desmarcar os tokens individuais, o exemplo acima se torna:

(plus
  (times a (power x 2))
  (times b x)
  c)

Isso reflete o relacionamento próximo há muito conhecido entre estruturas de elementos XML e LISP ou expressões S do Esquema .

Anotação de Wikidata no conteúdo MathML

De acordo com a OM Society, os dicionários de conteúdo OpenMath podem ser empregados como coleções de símbolos e identificadores com declarações de sua semântica - nomes, descrições e regras. Um artigo de 2018 apresentado na conferência SIGIR propôs que a base de conhecimento semântico Wikidata pudesse ser usada como um dicionário de conteúdo OpenMath para vincular elementos semânticos de uma fórmula matemática a itens únicos e independentes de linguagem do Wikidata.

Exemplo e comparação com outros formatos

A conhecida fórmula quadrática :

seria marcado usando a sintaxe LaTeX como esta:

x=\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

em troff / eqn assim:

x={-b +- sqrt{b sup 2 – 4ac}} over 2a

no Apache OpenOffice Math e no LibreOffice Math assim (todos os três são válidos):

x={-b plusminus sqrt {b^2 – 4 ac}} over {2 a}
x={-b +- sqrt {b^2 – 4ac}} over {2a}
x={-b ± sqrt {b^2 – 4ac}} over {2a}

em AsciiMath assim:

x=(-b +- sqrt(b^2 - 4ac))/(2a)

A equação acima pode ser representada no Presentation MathML como uma árvore de expressão composta de elementos de layout como elementos mfrac ou msqrt :

<math mode="display" xmlns="http://www.w3.org/1998/Math/MathML">
 <semantics>
  <mrow>
    <mi>x</mi>
    <mo>=</mo>
    <mfrac>
      <mrow>
        <mo form="prefix">&minus;</mo>
        <mi>b</mi>
        <mo>&pm;</mo>
        <msqrt>
          <msup><mi>b</mi><mn>2</mn></msup>
          <mo>&minus;</mo>
          <mn>4</mn><mo>&it;</mo><mi>a</mi><mo>&it;</mo><mi>c</mi>
        </msqrt>
      </mrow>
      <mrow>
        <mn>2</mn>
        <mo>&it;</mo>
        <mi>a</mi>
      </mrow>
    </mfrac>
  </mrow>
  <annotation encoding="application/x-tex"><!-- TeX -->
     x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
  </annotation>
  <annotation encoding="StarMath 5.0">
     x={-b plusminus sqrt {b^2 - 4 ac}} over {2 a}
  </annotation>
  <!-- More annotations can be written: application/x-troff-eqn for eqn, application/x-asciimath for AsciiMath... -->
  <!-- Semantic MathML go under <annotation-xml encoding="MathML-Content">. -->
 </semantics>
</math>

Este exemplo usa o <annotation>elemento, que pode ser usado para incorporar uma anotação semântica em formato não XML, por exemplo, para armazenar a fórmula no formato usado por um editor de equação como StarMath ou a marcação usando a sintaxe LaTeX . O encodingcampo é geralmente um tipo MIME , embora a maioria das codificações de equação não tenha tal registro; texto de forma livre pode ser usado nesse caso.

Embora menos compacto que o TeX, a estrutura XML promete torná-lo amplamente utilizável e permite a exibição instantânea em aplicativos como navegadores da Web e facilita uma interpretação de seu significado em produtos de software matemático. MathML não se destina a ser escrito ou editado diretamente por humanos.

Incorporando MathML em arquivos HTML / XHTML

MathML, sendo XML, pode ser embutido em outros arquivos XML, como arquivos XHTML, usando namespaces XML. Navegadores como Firefox 3+ e Opera 9.6+ (suporte incompleto) podem exibir o Presentation MathML embutido em XHTML.

<?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>Example of MathML embedded in an XHTML file</title>
    <meta name="description" content="Example of MathML embedded in an XHTML file"/>
  </head>
  <body>
    <h1>Example of MathML embedded in an XHTML file</h1>
    <p>
      The area of a circle is 
      <math xmlns="http://www.w3.org/1998/Math/MathML">
        <mi>&#x03C0;<!-- π --></mi>
        <mo>&#x2062;<!-- &InvisibleTimes; --></mo>
        <msup>
          <mi>r</mi>
          <mn>2</mn>
        </msup>
      </math>.
    </p>
  </body>
</html>
não flutuante
Uma renderização da fórmula para um círculo em MathML + XHTML usando Firefox 22 no Mac OS X

MathML embutido também é compatível com arquivos HTML5 nas versões atuais do WebKit ( Safari e JavaFX / WebView ), Gecko ( Firefox ). Não há necessidade de especificar namespaces como no XHTML.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Example of MathML embedded in an HTML5 file</title>
  </head>
  <body>
    <h1>Example of MathML embedded in an HTML5 file</h1>
    <p>
      The area of a circle is 
      <math>
        <mi>&pi;</mi>
        <mo>&InvisibleTimes;</mo>
        <msup>
          <mi>r</mi>
          <mn>2</mn>
        </msup>
      </math>.
    </p>
  </body>
</html>

Suporte de navegador

Dos principais navegadores da web , os navegadores baseados no Gecko (por exemplo, Firefox ) têm o suporte nativo mais completo para MathML.

Embora o mecanismo de layout WebKit tenha uma versão de desenvolvimento do MathML, esse recurso está disponível apenas na versão 5.1 e superior do Safari , Chrome 24, mas não nas versões posteriores do Chrome. O Google removeu o suporte ao MathML alegando que os problemas de segurança arquitetônica e o baixo uso não justificavam seu tempo de engenharia. Em outubro de 2013, a implementação do WebKit / Safari tinha vários bugs.

JavaFX / WebView . Também baseado no WebKit, o navegador da web integrado JavaFX oferece suporte a MathML começando com as versões JavaFX 8 Update 192 e JavaFX 11. O suporte foi quebrado, nas versões anteriores do JavaFX 8, JavaFX 9 e JavaFX 10.

O Opera , entre as versões 9.5 e 12, suporta MathML para perfil CSS, mas não consegue posicionar as marcas diacríticas corretamente. Antes da versão 9.5, ele exigia o JavaScript do usuário ou folhas de estilo personalizadas para emular o suporte a MathML. A partir do Opera 14, o Opera abandona o suporte para MathML mudando para o mecanismo Chromium 25.

O Microsoft Edge não oferece suporte a MathML, nem há planos para adicionar suporte.

O Internet Explorer não oferece suporte nativo ao MathML. Suporte para IE6 até IE9 pode ser adicionado instalando o plugin MathPlayer . O IE10 tem alguns bugs de travamento com o MathPlayer e a Microsoft decidiu desabilitar completamente no IE11 a interface de plug-in binária de que o MathPlayer precisa. MathPlayer tem uma licença que pode limitar seu uso ou distribuição em páginas da 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.

O Konqueror baseado em KHTML atualmente não oferece suporte para MathML.

A qualidade da renderização do MathML em um navegador depende das fontes instaladas. O projeto STIX Fonts lançou um conjunto abrangente de fontes matemáticas sob uma licença aberta. A fonte Cambria Math fornecida com o Microsoft Windows tinha um suporte um pouco mais limitado.

De acordo com um membro da equipe do MathJax, nenhum dos principais fabricantes de navegadores pagou a nenhum de seus desenvolvedores por qualquer trabalho de renderização do MathML; qualquer apoio existente é, em grande parte, o resultado de tempo / trabalho voluntário não remunerado.

Em 2015, a MathML Association foi fundada para apoiar a adoção do padrão MathML.

Navegador MathML
Amaya sim
AOL Explorer Não 
Avant Não
Arora sim
Basilisk sim
Camino sim
Chromium , Chrome Não
Dillo Não
Dooble sim
ELinks Não
Falkon Não
Rebanho sim
Galeon sim
iCab Não
Internet Explorer Não 
Internet Explorer para Mac Não
K-Meleon sim
Konqueror Não
Links Não
Lunascape sim 
Lince Não
Maxthon Não
Microsoft borda sim
Midori Não
mosaico Não
Mozilla sim
Mozilla Firefox sim
Netscape sim
Navegador Netscape Depende 
Netscape Navigator Não
Netscape Navigator 9 sim
NetSurf Não
OmniWeb Não
Ópera sim
Otter Browser sim
Lua pálida sim
Polaridade Não
Qutebrowser Não
Safári Não
SeaMonkey sim
Shiira Não
Sleipnir Não 
surfar Não
Navegador de tocha Não
Rede sim
Rede mundial de computadores Não
w3m Não

Outros padrões

Outro padrão chamado OpenMath que foi projetado (em grande parte pelas mesmas pessoas que criaram o Content MathML) mais especificamente para armazenar fórmulas semanticamente também pode ser usado para complementar o MathML. Os dados do OpenMath podem ser incorporados ao MathML usando o <annotation-xml encoding="OpenMath">elemento. Os dicionários de conteúdo OpenMath podem ser usados ​​para definir o significado dos <csymbol>elementos. O seguinte definiria P 1 ( x ) como o primeiro polinômio de Legendre

<apply>
  <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>
</apply>

O formato OMDoc foi criado para marcação de estruturas matemáticas maiores do que fórmulas, de afirmações como definições, teoremas, provas ou exemplos a teorias e livros de texto. As fórmulas em documentos OMDoc podem ser escritas em Content MathML ou em OpenMath; para apresentação, eles são convertidos para Presentation MathML.

A ISO / IEC padrão Office Open XML (OOXML) define uma sintaxe matemática XML diferente, derivado do Microsoft Office produtos. No entanto, é parcialmente compatível por meio de transformações XSL relativamente simples .

Veja também

Notas

Referências

Leitura adicional

Especificações

links externos

  • W3C Math Home - contém as especificações, perguntas frequentes e uma lista de softwares de suporte.
  • Pavi, Sandhu (12 de dezembro de 2002). "The Mathml Handbook" . Charles River Media . Retirado em 2 de outubro de 2015 .
  • web-xslt , uma coleção de programas XSLT para lidar com MathML (por exemplo, conversão de Content MathML em Presentation MathML, conversão de Presentation MathML em TeX)