Matematika vyjadřuje myšlenky pomocí vzorců, které se více podobají grafice než běžnému textu. S masivním rozšiřováním převážně textového webu však vyvstal problém jejich zápisu. Většinou se tento problém řeší bitmapovým obrázkem, což má ale mnoho nedostatků. V tomto článku se pokusím objasnit základy jazyka MathML, který je určen pro zápis vzorců.

Problémů, spojených se zápisem matematických vzorců prostřednictvím bitmapových obrázků, je celá řada:

  • datová velikost není zrovna ideální
  • složitá manipulace, tvorba grafickým editorem
  • nemožnost interpretace dat, žádná aplikace z obrázku nevyčte jeho význam
  • dynamická tvorba (závislá na datech uživatele) takových vzorců je nemožná – není možné měnit vzorec přímo v kódu

Již v době, kdy internet vůbec neexistoval, řešil se problém zápisu matematických vzorců. Nejen pro tento účel vznikl program TeX, který pomocí slov, čísel a operátorů vyjadřuje rovnice. Zápis se do značné míry podobá anglickému textovému zápisu. I přesto, že internet byl od počátku věnován vědcům, na matematické vzorce ve své roztržitosti nepamatovali. Proto se i nadále vzorce šířily prostřednictvím Texu.

Později se objevila možnost zapisovat vzorce do stránek pomocí Java-apletů WebEQ (Web EQuation). Vzorce je obsažen ve zdrojovém kódu (jako hodnota atributu „value“ elementu <param>) a jeho zápis vychází z TeXu. Dalším značkovacím jazykem je ISO 12083, vycházející z SGML. Jeho struktura je přísnější než struktura TeXu, nicméně obě technologie mají řadu společných vlastností.

Někdy kolem roku 1995 organizace W3C uznala, že nemožnost výměny matematických vzorců představuje vážný problém. Objevily se návrhy na rozšíření HTML (tehdy HTML 3.0) o nové elementy, umožňující formátování vzorců. Později se ujasnilo, že by měl vzniknout obecný mechanismus (XML) a zápis vzorců by měl být jednou z jeho podmnožin. Nakonec vznikl MathMLMathematical Markup Language – matematický značkovací jazyk, podmnožina XML. Jde o značkovací jazyk podobný svou strukturou HTML.

MathML bylo navrženo s několika základními cíli:

  • možnost konvertovat existující dokumenty do MathML (nejčastěji TeX a ISO 12083)
  • možnost připojit MathML k HTML a interpretovat ho prohlížeči (toho bylo dosáhnuto díky odvození z XML)
  • možnost získání vzorce ze zdrojového zápisu, který může být určeným programem interpretován a vyhodnocen

Prezentace MathML je do značné míry založena na stylech. Díky nim je sice možné zobrazit MathML v prohlížeči, ale je třeba rozšířit schopnosti prohlížečů pomocí elementů pro zobrazení MathML. Sám jazyk MathML však prostřednictvím elementů a atributů popisuje druh obsahu (číslo, proměnná, operátor…) a, v podstatě, i požadovaný vzhled, protože většina matematických konstrukcí má kodifikováno určité grafické spodobnění.

Základní popis MathML

MathML je založeno na XML, proto si při tvorbě matematických vzorců vystačíte jen s textovým editorem a vhodným prohlížečem. Struktura MathML je tvořena, stejně jako v případě XML, elementy, atributy a entitami pro zápis zvláštních znaků. MathML prvky lze rozdělit do několika kategorií:

  • prezentační prvky popisují strukturu vzorce (horní index, dolní index)
  • významové prvky přímo popisují matematický objekt (například „plus“ nebo „vector“)
  • prvky rozhraní jsou ty, které slouží k zapojení MathML do dokumentu HTML, XML a dalších

V několika následujících tabulkách uvádím výběr z prezentačních prvků MathML:

chápání prvků
<mtext> uzavírá v sobě normální text
<mspace/> mezera (ekvivalent entity &nbsp; v (X)HTML)
<mi> uzavírá identifikátory (proměnné)
<mn> uzavírá čísla
<mo> uzavírá operátory (+, -, /, *) a závorky

tabulky
<mtable> vyhrazuje obsah tabulky
<mrow> řádek tabulky
<mtd> buňka tabulky

schémata
<mfrac> element označující zlomek
<mrow> horizontální skupina prvků
<msqrt> druhá odmocnina
<mroot> obecná odmocnina

vzájemná poloha prvků
<msub> dolní index
<sup> horní index
<msubsup> přidá dolní i horní index přesně nad sebou
<munder> obsah pod vybraným prvkem
<mover> obsah nad vybraným prvkem
<munderover> obsah pod i nad prvkem

Pro lepší pochopení užití výše zmíněných prvků uvedu ukázku vzorce. Vytvoříme si XML dokument, který bude obsahovat zápis MathML:

<?xml version=“1.0″ encoding=“iso-8859-1″?>
<math xmlns=“http://www.w3.org/1998/Math/MathML“>
<msqrt>
  <mn>2</mn>
  <mo>+</mo>
  <mi>x</mi>
</msqrt>
<mo>-</mo>
<mfrac>
  <mn>2<mo>-</mo><mi>x</mi></mn>
  <mn>3</mn>
</mfrac>
<mo>+</mo>
<msubsup>
  <mn>X</mn>
  <mrow>
    <mn>i</mn>
  </mrow>
  <mrow>
    <mn>2</mn>
  </mrow>
</msubsup>
</math>

Příklad zobrazení vzorce v prohlížeči Amaya
Příklad zobrazení vzorce v prohlížeči Amaya

Povšimněte si zvláštního chápání zadaných hodnot. Zlomek <mfrac> může obsahovat dvě čísla (dva prvky <mn>), pokud ale chcete zapsat jako čitatel či jmenovatel další vzorec, musí být uzavřen v prvku <mn>, jinak by byla konstrukce neplatná. Za zajímavý lze bezpochyby pokládat také <mrow>, který definuje horizontální rozložení prvků. Důležité je členění do skupin pomocí elementů <mn> – číslo, <mi> – proměnná a <mo> – operátor.

Spíš než samostatné dokumenty MathML budete ale potřebovat nějakým způsobem integrovat MathML do dokumentu X(HTML). Jde to velmi snadno, stačí vložit požadovaný zápis na vybrané místo a uzavřít ho do elementu <math>. Pozor, MathML vychází z XML, takže pro něj platí různá pravidla XML, kupříkladu odkazy uvnitř vzorce je nutné provádět prostřednictvím technologie Xlink.

Sémantické MathML

XML dokument lze rozdělit na část obsahovou (vlastní XML) a část, udávající formu (CSS nebo jiný jazyk). V MathML je tomu podobně, ovšem s tím, že obsahová část se dělí na prezentační MathML, které slouží k vizualizaci vzorce pro „lidské“ potřeby, a sémantické MathML, sloužící strojům. Sémantické MathML je určeno pro matematické aplikace u kterých se předpokládá, že vzorec bude pochopen a vyhodnocen. Sémantické MathML popisuje přesné instrukce typu „aplikuj součet na čísla 2 a 3, výsledek vyděl 4 a odečti od něj 5“. Rozdíl mezi prezentačním a sémantickým MathML by se dal přirovnat k zápisu vzorce na papír (prezentace) a na kalkulačce (sémantika), i když to není zrovna nejlepší přirovnání. Sémantické MathML se od prezentačního liší syntaxí i významem.

Nejlepší bude uvést příklad. Mějme následující vzorec:

(2-x)/3

Zápis vzorce (2-x)/3 pomocí prezentačního MathML:

<math xmlns=“http://www.w3.org/1998/Math/MathML“>
<mfrac>
  <mn>2<mo>-</mo><mi>x</mi></mn>
  <mn>3</mn>
</mfrac>
</math>

Zápis vzorce (2-x)/3 pomocí sémantického MathML:

<apply>
  <divide />
    <apply>
      <plus />
      <cn>2</cn>
      <ci>x</ci>
    </apply>
  <cn>3</cn>
</apply>

Základním kamenem sémantického MathML je element <apply>, v němž jsou vnořeny operátory (<plus />, <minus />, <divide />), které určují, jak se má zacházet s následujícími čísly a identifikátory. Takto zapsaný vzorec se podobá stromu, který se větví prostřednictvím elementů <apply>. Významové MathML je tvořeno desítkami prvků s nespočtem atributů (každá matematická funkce – sin, cos, abs a další – má svou vlastní značku).

Podpora MathML

V současnosti, kdy podpora samotného XML v prohlížečích pokulhává, není ani podpora MathML příliš rozšířená. Částečně ovládá MathML Mozilla, která občas udělá nějakou tu chybu v zobrazení. Úplnou podporu poskytuje Amaya, což je prohlížeč vyvíjený W3C pro účely testování nových technologií a pro běžnou praxi se moc nehodí. Microsoft Internet Explorer i Opera vzorce opomíjejí (MSIE podporuje vkládání těchto vzorců do stránky prostřednictvím VML – Vector Markup Language).

Nepoužitelné?

Vytvořit vzorec v MathML je v mnoha ohledech jednodušší a efektivnější, než vytváření vzorce v nějaké speciální aplikaci a následný převod na obrázek. Bohužel, z obrázku toho v současné době vyčtete více, než ze sebelepší syntaxe MathML. Podpora MathML v prohlížečích je minimální, sice mohou být doplněny o přídavné moduly, ale ani ty nejsou dostatečně kvalitní. Snad se situace zlepší s postupným rozšiřováním XML a na něm založených technologií. Pravda je, že MathML existuje již od roku 1998.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět