Az alábbi folyamatábra bemutatja a DocBook forrásból generált outputok lehetséges skáláját:
Az XSL FO egy olyan XML domén, ami a dokumentumok megjelenítésének alacsony szintjét definiálja: lapok, margók, fejlécek, hasonlók definícióit. Az XSL FO elég alacsonyszintű és komplex, ezért nem szoktuk kézzel létrehozni, hanem generáljuk, típikusan XSLT segítségével. Ezután még "renderelni" kell az XSL FO-t, hogy a végső megjelenítést, pl. PS vagy PDF formátummá végrehajtsa.
Az XSL FO fájl egy XML dokument, tehát van gyökér eleme:
<?xml version="1.0" encoding="utf-8"?> <fo:root> ... </fo:root>
A maradék struktúra az alábbi:
Layout master set: Azon laptípusok leírása, melyek előfordulnak a dokumentumban és a lapformátumok sorozatának definíciója.
A lapok és tartalmuk.
A gyökérelem után a pagelayout-okat kell leírnunk. Elsőként leírjuk, hogy milyen formátumok léteznek. A lenti ábrán három fajta layout-ot látunk, melyekben különbözőek a bal- és jobboldali margók, illetve a fűzési terület. Ugyancsak definiáltunk egy területet a fejlécnek és a margónak.
Először a lapmáretekkel kezdünk. A méreteket meg lehet adni centiméterben, de más CSS egységben is, mint pl. px (pixel) vagy pt (point). Mindegyik elem simple-page-master típusú tag, és definiálnia kell egy master-name attribútumot.
<fo:layout-master-set> <fo:simple-page-master master-name="cover" page-height="12cm" page-width="12cm" margin-top="0.5cm" margin-bottom="0.5cm" margin-left="1cm" margin-right="0.5cm"> </fo:simple-page-master> <fo:simple-page-master master-name="leftPage" page-height="12cm" page-width="12cm" margin-left="0.5cm" margin-right="1cm" margin-top="0.5cm" margin-bottom="0.5cm"> </fo:simple-page-master> <fo:simple-page-master master-name="rightPage" page-height="12cm" page-width="12cm" margin-left="1cm" margin-right="0.5cm" margin-top="0.5cm" margin-bottom="0.5cm"> </fo:simple-page-master> <!-- more info will go here --> </fo:layout-master-set>
A margók nem tartalmaznak kiírandó adatokat. A margókon belüli adatok alkotják a tartalom számára fenntartott helyet, az un. page-reference-area-t.
A page-reference-area öt részre oszlik:
Region-before
Region-start
Region-body
Region-end
Region-after
Egy kis terminológia. A lapok kétféle tartalommal rendelkeznek: blokk elemekkel, melyek új sorban kezdődnek, és inline-elemekből, mint pl. bold vagy italic. Az ún. blokk feldolgozás haladási irány (blokk-progress-direction) a bekezdések lapra történő elhelyezésének sorrendjét adja meg. A megelőző él (before-edge) megelőzi az elemet, követő él (after-edge) pedig az elem után kerül megjelenítésre. Az soron belüli feldolgozási irány (inline-progress-direction) a karakterek megjelenését határozza meg a soron belül. Itt kezdő él (start edge) és záró él (end-edge) létezik.
Eltérő nyelvekben ezek a sorrendek akár eltérőek is lehetnek:
Ennek az egész bonyolult szakszövegnek az az értelme, hogy nyelvfüggetlen fogalmakat vezessünk be. Ha pl. a fejlécet a bal helyett a jobboldalon szeretnénk kezdeni, akkor elég a text-align="end" értéket beállítani.
Ha a szöveget, pl. arabra vagy japánra fordítják, akkor a fejléc ott is az ellentétes helyen fog megjelenni, akármi is az ellentétes jelentése.
A címlap számára szükségtelen fejléc és lábléc definiálására.
<fo:simple-page-master master-name="cover" page-height="12cm" page-width="12cm" margin-top="0.5cm" margin-bottom="0.5cm" margin-left="1cm" margin-right="0.5cm"> <fo:region-body margin-top="3cm" /> </fo:simple-page-master>
A címlap számára szükségtelen a fejléc és a lábléc definiálása.
<fo:simple-page-master master-name="cover" page-height="12cm" page-width="12cm" margin-top="0.5cm" margin-bottom="0.5cm" margin-left="1cm" margin-right="0.5cm"> <fo:region-body margin-top="3cm" /> </fo:simple-page-master>
A bal- és jobboldali lapok számára szükséges a fej- és lábléc létrehozása. Ezért definiáljuk az extent attribútumot a region-before és region-after számára.
<fo:simple-page-master master-name="leftPage" page-height="12cm" page-width="12cm" margin-left="0.5cm" margin-right="1cm" margin-top="0.5cm" margin-bottom="0.5cm"> <fo:region-before extent="1cm"/> <fo:region-after extent="1cm"/> <fo:region-body margin-top="1.1cm" margin-bottom="1.1cm" /> </fo:simple-page-master> <fo:simple-page-master master-name="rightPage" page-height="12cm" page-width="12cm" margin-left="1cm" margin-right="0.5cm" margin-top="0.5cm" margin-bottom="0.5cm"> <fo:region-before extent="1cm"/> <fo:region-after extent="1cm"/> <fo:region-body margin-top="1.1cm" margin-bottom="1.1cm" /> </fo:simple-page-master>
Miután definiáltuk a lapok szerkezetét, megadhatjuk, hogy milyen sorrendben lesznek használva a page-master-ek, amikor a lapokat generáljuk.