Article Index

Základ XSL:FO

Transformace jsou schopny vypisovat data z xml formátu do jiného. Například výpis evidence v XML formátu do HTML. Pokud je potřeba výstup formátovat, například pro tištěné materiály, musíme použít XSL:FO - formating object. XSL:FO vytvářejí stránkovaný výstup - vše se musí přizpůsobit oblasti, která je na daném rozměru určena pro obsah.

Příklad může být formát bakalářské práce - papír má mít formát A4 - tedy 297mm x 210mm, okraje jsou pak nahoře 30mm, dole 25mm, vlevo 35mm a vpravo 20mm. Plus musíme počítat s místem na záhlaví a zápatí - minimálně pro číslování stran. Pro obsah je tedy maximální plocha 242mm x 165mm.

Stejně jako u XSLT jsou základním stavebním kamenem šablony. Vzhledem k tomu, že u FO nedochází k manipulaci s elementy, ale s formátováním, jedná se o tyto složky:

  • page - stránka
  • region - dílčí části stránky
  • block - části obsahu (odstavec)
  • line - řádek
  • inline - část řádku

Hlavní složkou FO je deklarace stránky - její rozměry a okraje. Stanovují se základní rozměry pro další formátování. Stránka se dělí na jednotlivé složky - regiony:

  • region-body
  • region-before
  • region-after
  • region-start
  • region-end

Plus jednotlivé okraje.

Jednoduchý dokument

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set><!-- Zde definujeme vlastnosti stránky - od těchto rozměrů se bude odvíjet velikost a vzhled dokumentu -->
     <fo:simple-page-master master-name="A4"
                            page-height="297mm"
                            page-width="210mm"
                            margin="10mm"
>
      
     </fo:simple-page-master>
   </fo:layout-master-set>
   <fo:page-sequence master-reference="A4"> <!-- Posloupnost stránek, můžeme například definovat zvlášť liché a sudé stránky -->
     <fo:flow flow-name="xsl-region-body">
      <fo:block>Budoucí text na stránce</fo:block>
    </fo:flow>
    <fo:static-content flow-name="xsl-region-after"> <!-- Statický obsah je na každé straně stejný - zde vkládáme číslo stránky do prostoru pod obsah. -->
      <fo:block>
        <xsl:text>Strana </xsl:text> <fo:page-number/>
      </fo:block>
    </fo:static-content>

   </fo:page-sequence>
</fo:root>

Základní osnova dokumentu je hotová, máme připravenou stránku A4, jenom musíme doplnit obsah - tedy text pro zadání práce. Pomocí XSLT vybereme požadované texty a vložíme je na své místo v dokumentu pomocí dalších XSL:FO elementů.

Obsahová stránka

Seznam

<fo:list-block>
  <fo:list-item><!-- jednotlivá položka seznamu -->
    <fo:list-item-label>
      <fo:block>-</fo:block> <!-- uvození položky seznamu -->
    </fo:list-item-label>
    <fo:list-item-body><!-- položka seznamu - její text -->
      <fo:block>Spitfire I</fo:block> <!-- blok s textem položky -->
    </fo:list-item-body>
   </fo:list-item>
  <fo:list-item>
    <fo:list-item-label>
      <fo:block>-</fo:block>
    </fo:list-item-label>
    <fo:list-item-body>
      <fo:block>Spitfire II</fo:block>
    </fo:list-item-body>
   </fo:list-item>
</fo:list-block>

 Tabulka

<fo:table-and-caption> <!-- základní značka uvozující tabulku -->
   <fo:table><!-- tabulka -->
     <fo:table-column column-width="25mm"/><!-- minimální šířka prvního sloupce -->
     <fo:table-column column-width="25mm"/><!-- minimální šířka druhého sloupce -->
   <fo:table-header><!-- úvodní řádek tabulky - hlavička (popisky sloupců) -->
      <fo:table-row><!-- řádek tabulky -->
         <fo:table-cell><!-- buňka tabulky -->
           <fo:block font-weight="bold">Výrobce</fo:block><!-- blok s textem -->
         </fo:table-cell>
         <fo:table-cell>
           <fo:block font-weight="bold">Model</fo:block>
         </fo:table-cell>
      </fo:table-row>
   </fo:table-header>
  <fo:table-body><!-- tělo tabulky s hodnotami -->
    <fo:table-row>
      <fo:table-cell>
        <fo:block>Revell</fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block>Spitfire Mk. I</fo:block>
      </fo:table-cell>
    </fo:table-row>
    <fo:table-row>
      <fo:table-cell>
        <fo:block>Airfix</fo:block>
      </fo:table-cell>
      <fo:table-cell>
        <fo:block>JAS-39C Gripen</fo:block>
      </fo:table-cell>
    </fo:table-row>
   </fo:table-body>
  </fo:table>
</fo:table-and-caption>


Ukázky

Zde je několik ukázek použití XSL:FO pro "běžné" použití.

Zadání bakalářské práce

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE evidence SYSTEM "zadani.xsd">
<evidence>
  <prace id="001">
    <typ>bp</typ>
    <tema-cz>Antispamové řešení</tema-cz>
    <tema-cz>Antispam solution</tema-cz>
    <autor>
      <jmeno>Alexandr</jmeno>
      <prijmeni>Vasilenko</prijmeni>
      <obor>Informatika</obor>
    </autor>
    <termin_rok>2019</termin_rok>
    <termin_mesic>6</termin_mesic>
    <stav>schválená</stav>
    <vedouci>Ing. Alexandr Vasilenko, Ph.D.</vedouci>
    <cil>
    Diplomová práce na téma si klade za cíl, definovat nové přístupy týkající se ofenzivních přístupů proti spamu, založených na obstrukčních opatřeních, které ztíží masivní zneužívání emailové služby. Modelové řešení bude aplikováno na ukázkové síti, která bude reprezentovat spamery, příjemce elektronické pošty a servery zajišťující protiopatření.
    </cil>
    <metodika>
    Metodika práce je založena na studiu odborné literatury. Bude instalován emailový server s dostupnými nástroji na detekci spamu. Bude analyzován vzorek nevyžádaných zpráv. Na základě výstupu bude upravováno nastavení antispamových nástrojů a analyzováno hodnocení zpráv. Výstupy budou analyzovány pro nalezení skupin zpráv a statistických vzorů.
    </metodika>
    <harmonogram>
      <polozka>Příprava a studium odborných zdrojů <termin>10-2013</termin></polozka>
      <polozka>Zpracování přehledu řešené problematiky <termin>12-2013</termin></polozka>
      <polozka>Analýza získaných výstupů <termin>01-2014</termin></polozka>
      <polozka>Formulace závěrů a jejich analýza <termin>02-2014</termin></polozka>
      <polozka>Tvorba finálního dokumentu <termin>03-2014</termin></polozka>
      <polozka>Odevzdání diplomové práce a teze <termin>03-2014</termin></polozka>
    </harmonogram>
    <rozsah>
      60 - 80 stran textu + přílohy
    </rozsah>
    <klic>spam, ham, spamassassin, spf, greylist, vzorec, skupina zpráv</klic>
    <literatura>
      <zdroj>Kniha 1</zdroj>
      <zdroj>Kniha 2</zdroj>
      <zdroj>Kniha 3</zdroj>
      <zdroj>Kniha 4</zdroj>
      <zdroj>Web 1</zdroj>
      <zdroj>Web 2</zdroj>
    </literatura>
  </prace>
</evidence>

Potřebujeme vytvořit z tohoto souboru pdf dokument s dvěmi stranami.