Hlavní navigace

Specifikace MathML 3.0: tabulky, matice a determinanty

Martin Smola

Další článek, ve kterém budeme pokračovat ve výkladu specifikace MathML 3.0, která, jak už bylo řečeno v minulých dílech, slouží pro zobrazování matematických vzorců ve webovém dokumentu. Minule jsme si vysvětlili pár základních tagů, pro zápis jednodušších rovnic. Dnes se podíváme na zápis matic.

Pokud již máme definovaný jmenný prostor, můžeme začít se zápisem do tagů <math></math>. Jako v každém matematickém zápisu v jazyce MathML, i při zápisu matic je potřeba nejprve použít tag <mrow>.

Nyní, pokud chceme obalit náš zápis závorkami, zapíšeme před vlastní hodnotu matice do tagu Math Operator <mo> ( </mo>.

Pro definování matice má tento jazyk tagy <mtable></mtable>. Samozřejmě jde o zápis matematické tabulky, díky níž můžeme zapisovat nejen již zmíněné matice, ale i determinanty, nebo třeba jen názorné tabulky při určování vlastností funkcí apod.

Po definování matematické tabulky, vytváříme nejprve řádky tabulky pomocí tagů <mtr></mtr>, a následně do nich jednotlivé buňky na řádce pomocí <mtd></mtd>. Číselnou hodnotu samozřejmě obalujeme ještě do Math Number, neboli <mn></mn>.

Pro větší názornost následuje ukázka jednoduché matice.

<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
  <mo> ( </mo>
  <mtable>
    <mtr>
      <mtd> <mn>3</mn> </mtd>
      <mtd> <mn>1</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>6</mn> </mtd>
      <mtd> <mn>3</mn> </mtd>
      <mtd> <mn>0</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>6</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
    </mtr>
  </mtable>
  <mo> ) </mo>
</mrow>
</math>

( 1 3 8 0 1 0 0 0 1 )

Nyní, pokud bychom chtěli, můžeme podle znalostí z minulého dílu, jednoduše dopsat matici nějaké označení (identifikátor) pomocí Math Identifier <mi></mi> před závorku, která nám matici otvírá a pomocí Math Operator, do kterého zapíšeme rovnítko. Takto:

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

  <mo> ( </mo>
  <mtable>
    <mtr>
      <mtd> <mn>3</mn> </mtd>
      <mtd> <mn>1</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>6</mn> </mtd>
      <mtd> <mn>3</mn> </mtd>
      <mtd> <mn>0</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>6</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
    </mtr>
  </mtable>
  <mo> ) </mo>
</mrow>
</math>

E = ( 1 3 8 0 1 0 0 0 1 )

Pokud budeme chtít zapisovat determinanty, stačí změnit oblé závorky za svislé čáry |jako u zápisu absolutní hodnoty|. Ukázka je opět zde:

<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
	
<mi>Determinant A</mi>
<mo> = </mo>

  <mo> | </mo>
  <mtable>
    <mtr>
      <mtd> <mn>3</mn> </mtd>
      <mtd> <mn>1</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>6</mn> </mtd>
      <mtd> <mn>3</mn> </mtd>
      <mtd> <mn>0</mn> </mtd>
    </mtr>
    <mtr>
      <mtd> <mn>6</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
      <mtd> <mn>8</mn> </mtd>
    </mtr>
  </mtable>
  <mo> | </mo>
</mrow>
</math>

Determinant A = | 1 3 8 0 1 0 0 0 1 |

Pokud bychom chtěli vytvořit tabulku pro zjištění průběhu funkce, můžeme postupovat následujícím způsobem. Vytvoříme si první řádek s nulovými body. Vytvoříme oddělující čáru a pod čarou vytvoříme například dvě řádky pro zápis klesajících a rostoucích částí.

Y = | X - 1 |


1 | x - 1 | - | +
<math xmlns="http://www.w3.org/1998/Math/MathML">
    <mstyle scriptminsize="12pt">   
      <mrow>
      	<mtable>
        	<mtr>
            	<mtd>                 
                </mtd>
                <mtd>                 
                </mtd>
            	<mtd>
                 <mn> 1 </mn>
                </mtd>
            </mtr>
            <mtr>
            	<mtd>
                 <mo> | </mo>
                 <mi> x </mi>
                 <mo> - </mo>
                 <mn> 1 </mn>
                 <mo> | </mo>
                </mtd>
            	<mtd>
                 <mo> - </mo>
                </mtd>
                <mtd>
                 <mo> | </mo>
                </mtd>
                <mtd>
                 <mo> + </mo>
                </mtd>
            </mtr>
        </mtable>
      </mrow>
    </mstyle>
  </math>

Tímto bych završil dnešní díl o tabulkách, maticích a determinantech. Příště se podíváme na zápis elementárních matematických úkonů jako je sčítání, odečítání a násobení pod sebe.

Našli jste v článku chybu?
2. 12. 2012 22:28

Ve skutečnosti je toho vkládaného obsahu mnohem víc, a spousta z toho je spojena právě s HTML5 - mikroformáty, data-atributy, multimediální obsah... To vše se mohlo řešit standardy nezávislými na HTML a do HTML vkládat jednotně jako elementy z jiných jmenných prostorů. Místo toho se to všechno řeší jedním všeobjímajícím standardem, navíc se to řeší pokaždé jinak.

Ono se na to taky dá dívat opačně. Za těch "dvacet" let se toho víc nerozšířilo, protože to s uzavřeným HTML nebylo možné udělat jina…

2. 12. 2012 11:10

Díky. A to jsem tuhle část projížděl několikrát...

Ale nemůžu si pomoct, pořád v tomhle řešení nevidím jediný přínos, za to má fatální nedostatek -- pro podporu každé nové technologie bude nutné upravit standard. Přitom už se i ve světě webu minimálně 15 let ví, že standard, který nepočítá s dopřednou kompatibilitou, se nebude dodržovat. A 12 let je známé a standardizované alespoň nějaké řešení (XHTML). Nevím, zda za tím je zášť autorů standardu vůči XML, ale žádný racionální důvod mne nenapadá…