10.8. Tabulky

Tvorba tabulek v DocBooku se o mnoho neliší od tabulek v HTML. V současné době se používá standardní XML standard CALS, ovšem má být do budoucna nahrazen modelem OASIS Exchange Table Model. V této kapitole popíšeme tvorbu tabulek z hlediska tohoto standardu, abychom se vyhnuli věcem které budou v budoucnu odstraněny.

Pro vložení tabulek máme dva elementy - table a informaltable. První je pojmenovaná tabulka, tedy tabulka obsahující titulek (title) a druhá je tabulka bez titulku. Zatímco table se automaticky začleňuje do „seznamu tabulek“ v obsahu, informaltable tam nebude.

ikona
Příklad 10.8: Jednoduchá tabulka
<table frame="all">
 <title>Jednoduchá tabulka</title>
 <tgroup cols="2">
  <colspec colwidth="3cm" align="center"/>
  <colspec colwidth="5cm" align="center"/>
  <thead>
   <row>
    <entry>Nadpis sloupce 1</entry>
    <entry>Nadpis sloupce 2</entry>
   </row>
  </thead>
  <tbody>
   <row>
    <entry>buňka 1-1</entry>
    <entry>buňka 1-2</entry>
   </row>
   <row>
    <entry>buňka 2-1</entry>
    <entry>buňka 2-2</entry>
   </row>
  </tbody>
 </tgroup>
</table>

Jak vidíme názorně z příkladu, tabulka vždy obsahuje element tgroup, který obsahuje atribut cols udávající počet sloupců tabulky. Element colspec udává definuje vlastnosti sloupců. Jeho atribut colwidth stanovuje šířku sloupce, align, valign způsob zarovnání a colname obsahuje identifikátor sloupce.

Poté následuje záhlaví tabulky obsahující nadpisy sloupců, uvozené do elementu thead. Každý řádek tabulky uvozuje element row a sloupec v řádku pak vnořený element entry. Tělo tabulky je uvozeno pomocí tbody. Zápatí tabulky můžeme uvést do tfoot.

Všechny uvedené elementy mohou obsahovat celou řadu atributů, určených pro různé formátování. Lze tak snadno upravit vzhled tabulky přesně podle představ. např. přiřadit sloupci zarovnání textu vlevo (<colspec align="left"/>) a pak pouze jedné buňce přiřadit zarovnání na střed (<entry align="center">).

Atributem frame, náležícímu elementu table definujeme typ okrajů kolem tabulky, což se ovšem projevuje spíše při generování PDF. Podobně lze vykreslovat čáry pomocí atributů rowsep a colsep. Možností je celá řada, viz dokumentace.

Pokud potřebujeme sloučit buňky horizontálně, provedeme to tak, že sloupcům přiřadíme identifikátory zmiňovaným atributem colname v elementu colspec. Tyto pak použijeme v atributech elementu entry, které se nazývají namest (identifikátor počátečního sloupce) a nameend (identifikátor koncového sloupce). Buňky v tomto rozsahu pak budou sloučeny.

ikona
Příklad 10.9: Tabulka se sloučenými buňkami
<informaltable>
 <tgroup cols="2">
  <colspec colname="c1" align="center"/>
  <colspec colname="c2" align="center"/>
  <thead>
   <row>
    <entry namest="c1" nameend="c2" align="center">Nadpis</entry>
   </row>
  </thead>
  <tbody>
   <row>
    <entry>buňka 1-1</entry>
    <entry morerows="1">buňka 1-2</entry>
   </row>
   <row>
    <entry>buňka 2-1</entry>
   </row>
  </tbody>
 </tgroup>
</informaltable>
Nadpis
buňka 1-1buňka 1-2
buňka 1-1

Vertikálně buňky sloučíme atributem morerows, tak jak je vidět z předchozího příkladu.