Extensible Stylesheet Language - Formatting Objects

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

eXtensible Stylesheet Language - Formatting Objects (český volný překlad: „formátovací objekty pro rozšiřitelný stylový jazyk“) je značkovací jazyk na bázi XML pro formátování dokumentů. XSL-FO je součástí XSL, sady W3C technologií určených pro transformaci a formátování XML dat.


Základy XSL-FO[editovat | editovat zdroj]

Na rozdíl od kombinace HTML a CSS je XSL-FO spojeným prezentačním jazykem. Neobsahuje žádné sémantické značkování jako HTML. A na rozdíl od CSS, které upravuje prezentaci externího XML nebo HTML dokumentu, v sobě obsahuje veškerá data dokumentu.

Základní myšlenkou je, že uživatel nepíše dokument v XSL-FO, ale v jiném XML jazyce. Může použít XHTML, DocBook, TEI, ale i jakýkoli jiný XML jazyk. Dokument následně převede pomocí XSLT předpisu (který si vytvoří nebo někde získá) na XSL-FO.

Když vznikne XSL-FO dokument, předá se specializované aplikaci označované jako FO procesor. Ta převede XSL-FO dokument do formátu, který je čitelný, tisknutelný či obojí. Nejobvyklejšími výstupními formáty FO procesorů jsou PDF a PostScript, ale můžete se setkat i s jinými typy výstupů, jako například RTF či dokonce přímé grafické zobrazení do okna na displeji.

Jazyk XSLT původně vznikl pouze pro převod dokumentů do formátu XSL-FO, později začal být využíván v širším měřítku pro libovolné transformace. Dodnes je však někdy s XSL-FO směšován a můžete se setkat s názory, že XSLT je součástí XSL-FO. Transformace pomocí XSLT je mimořádně silná. Může zahrnovat automatické generování obsahu, odkazů, rejstříku a řadu dalších operací.

XSL-FO dokument se nepodobá PDF ani PostScriptu. Nepředepisuje přesný vzhled textu rozloženého na stránkách. Místo toho popisuje, jaké jsou vlastnosti stránky a kam má být umístěn jejich jednotlivý obsah. Z toho FO procesor odvodí, jak text konkrétně umístit v rámci hranic předepsaných FO dokumentem. XSL-FO dokonce připouští, že různé FO procesory vytvoří odlišný výstup.

Například některé FO procesory mohou rozdělovat slova, zatímco jiné se rozhodnou je nedělit. Mohou také používat odlišné algoritmy dělení slov. Výsledkem může být v mezních případech i velmi odlišný vzhled jednotlivých stránek. Existují i další případy, kdy XSL-FO umožňuje FO procesorům určitou míru volnosti v rozvržení výstupu.

Rozdíly v chování FO procesorů, vedoucí k nekonzistentním výsledkům, často nepředstavují problém. Hlavním účelem XSL-FO je totiž vytvářet stránkovaná, tištěná média. XSL-FO dokumenty jsou zpravidla používány jen jako mezistupeň, nejčastěji pro vytvoření PDF souborů či tištěných dokumentů. Teprve tato finální podoba dokumentů bývá obvykle distribuována. V tom se XSL-FO liší od HTML, které interpretuje každý prohlížeč sám. Distribuování PDF místo XSL-FO umožňuje adresátovi vyhnout se nepředvídatelnosti výstupů FO procesorů, zároveň ale nemá možnost dalšího přizpůsobení dokumentu. Uživatel, který chce vytvářet FO dokumenty a následné tištěné dokumenty jen s pomocí jednoho FO procesoru, si může vybrat FO procesor vyhovující jeho nárokům na kvalitu výstupu a odlišnosti vzhledu jeho dokumentu při zpracování jinými procesory mu tak nemusí vadit.

Koncepce jazyka[editovat | editovat zdroj]

Jazyk XSL-FO byl navržen pro stránkovaná média, podobně jako bylo HTML a CSS navrženo pro souvislá média (prezentovaná na obrazovce). Díky tomu je koncept stránek integrální součástí struktury jazyka a FO poskytují uživateli silné nástroje určující rozložení informací na jednotlivých stránkách.

FO pracuje nejlépe pro tak zvaný obsahem řízený design. Ten je standardním způsobem sazby knih, článků, právních dokumentů a podobných textů. Vychází ze základního, víceméně souvislého toku textu, který je doplňován o různé opakující se informace, umisťované na okraje stránky. Jeho protipólem je vzhledem řízený design, používaný v novinách a časopisech. V něm má vzhled stránky přednost a pokud se obsah nevejde do určeného místa, bude zkrácen. XSL-FO zvládá vzhledem řízený design jen obtížně, protože nedokáže vyjádřit některé jeho prvky.

Bez ohledu na základní charakter jazyka jsou vyjadřovací schopnosti FO velmi široké. Zvládá tabulky, seznamy, plovoucí prvky a řadu dalších prvků. Tyto vlastnosti jsou srovnatelné se vzhledovými schopnostmi CSS, nicméně u některých z nich se očekává, že budou vestavěny do XSLT.


Struktura XSL-FO dokumentu[editovat | editovat zdroj]

XSL-FO dokumenty jsou XML dokumenty vyhovující syntaxi definované ve specifikaci XSL-FO.

Obsahují dvě povinné sekce. První definuje seznam pojmenovaných předloh stránek. Ve druhé sekci je seznam dat dokumentu (včetně značkování), který se odkazuje na předlohy stránek, aby určil, jak obsah vyplňuje jednotlivé stránky.

Předloha stránky definuje vlastnosti stránky. Může definovat směr toku textu, aby vyhověl konvencím použitého jazyka. Určuje rozměry stránky a její okraje. Umožňuje definovat sekvence stránek, v nichž se rozlišuje vzhled sudých a lichých stránek. Například lze definovat sekvenci stránek s větším vnitřním okrajem, který bude využit pro vazbu tištěné publikace.

Část s daty dokumentu je rozdělena do sekvence toků, kde každý tok je spojen s určitou předlohou stránky. Tok obsahuje seznam bloků, z nichž každý obsahuje seznam textových dat, řádkových značkovacích prvků, případně kombinací obojího. Lze také přidávat obsah do okrajů dokumentu, například čísla stránek, názvy kapitol a podobně.

Bloky a řádkové prvky fungují velmi podobně jako v CSS, ačkoli se některá konkrétní pravidla pro okraje a výplň liší. Lze plně určit směr navazování bloků a řádkových prvků, relativně vůči orientaci stránky. To umožňuje používat FO dokumenty pro jazyky, jež se čtou jinak než angličtina. Na rozdíl od CSS 2.1 používá FO jazyk k popisu směru pojmy nezávislé na směru, jako je začátek a konec místo levý a pravý.

Vlastnosti XSL-FO ovlivňující formátování vycházejí z CSS a podobně jako v CSS se většina vlastností dědí na vnořené formátovací objekty.

Schopnosti XSL/FO v1.0[editovat | editovat zdroj]

XSL/FO dokáže celou řadu textových funkcí. Kromě výše popsaných informací umožňuje XSL-FO definovat následující.

Více sloupců[editovat | editovat zdroj]

Stránka může obsahovat více sloupců. V takovém případě bloky implicitně pokračují z jednoho sloupce do dalšího. Konkrétním blokům (např. nadpisům) lze nastavit, že mají zabrat všechny sloupce a přerušit tak text na stránce. Sloupce nad tímto přerušením budou na sebe navazovat. stejně jako bloky pod ním. Textu ale není povoleno pokračovat z oblasti nad přerušením do oblasti pod ním.

XSL-FO svou podstatou umožňuje, aby stránky měly různé počty sloupců a odlišné šířky sloupců. Text tedy může bez problémů pokračovat ze stránky obsahující tři sloupce na stránku s pěti sloupci a následně na stránku s jediným sloupcem.

Všechny vlastnosti FO fungují s omezením na vícesloupcovou stránku.

Seznamy[editovat | editovat zdroj]

Seznam v XSL-FO je v podstatě tvořen dvěma sadami bloků, umístěnými vedle sebe. Položka se skládá z bloku „vlevo“ (resp. z bloku na začátku podle orientace řádku) a ze sekvence bloků „vpravo“ (na konci). Blok vlevo vyznačuje zahájení položky. Obsahuje odrážku, číslo, ale i textový řetězec (např. nadpis hesla ve slovníku). Blok vpravo obsahuje vlastní materiál dané položky seznamu. Oba bloky mohou být kontejnery, nebo lze mít v jedné položce několik bloků.

Pokud jsou položky seznamu číslovány, předpokládá se, že číslování obstará XSLT, nebo jiný mechanismus, který vygeneroval XSL-FO dokument. Proto musí být čísla položek explicitně uvedena.

Řízení stránkování[editovat | editovat zdroj]

Uživatel může blokům specifikovat vdovy a sirotky a nechat tyto atributy kaskádovitě zdědit do potomků. Navíc lze přikázat, že blok musí zůstat pohromadě na jedné stránce. Například lze nastavit, že obrázek a jeho popisek nesmí být od sebe odděleny. FO procesor se bude snažit co nejlépe vyhovět těmto omezením, i když tím vznikne řada prázdného místa na stránkách.

Poznámky pod čarou[editovat | editovat zdroj]

Uživatel může vytvářet poznámky, umístěné ve spodní části stránky. Zapisují se do FO dokumentu do toho místa v textu, které na ně odkazuje. Odkaz je reprezentován pomocí řádkové (inline) definice, nicméně není povinný. Tělem poznámky je jeden či více bloků, které FO procesor umístí na konec stránky. FO procesor zajistí, že poznámka bude na stejné stránce jako odkaz na ni, i kdyby v důsledku toho musel vkládat prázdné místo.

Tabulky[editovat | editovat zdroj]

Tabulkové funkce FO se podobají HTML/CSS. Uživatel zadá data pro jednotlivé buňky po řádcích. Uživatel také může předepsat styl jednotlivých sloupců, jako například barvu pozadí. Navíc lze specifikovat první řádky tabulky jako záhlaví s odlišným vzhledem.

FO procesoru lze explicitně předepsat velikost jednotlivých sloupců, nebo ji může určit automaticky podle obsahu.

Řízení směru textu[editovat | editovat zdroj]

FO poskytuje široké možnosti pro řízení orientace textových bloků. Uprostřed stránky můžete mít textový blok s odlišnou orientací. To lze využít pro citace z jazyků odlišných od jazyka dokumentu, nebo když prostě chcete text orientovat jinak kvůli vzhledu. Tyto bloky mohou obsahovat prakticky cokoli, od tabulek po seznamy, včetně odlišně orientovaných bloků.

Různé[editovat | editovat zdroj]

  • Odkazy na čísla stránek. Stránku obsahující speciální značky lze v textu citovat a FO procesor tuto citaci nahradí skutečným číslem stránky.
  • Okraj bloků s nejrůznějšími styly.
  • Barvy a obrázky v pozadí.
  • Barva a styl písma, podobně jako v CSS.
  • Obtékaný materiál.
  • Různé řádkové prvky.


Schopnosti XSL-FO v1.1[editovat | editovat zdroj]

Verze 1.1 přidává proti 1.0 řadu nových vlastností.

Více sloupců a mapování toku textu[editovat | editovat zdroj]

Jazyk XSL-FO v1.0 dost omezoval, co se může vyskytnout v jaké části stránky. Verze 1.1 tato omezení významně uvolnila a umožnila mapovat plynoucí text do více oblastí stránky. To umožňuje sazbu v novinovém stylu.

Záložky[editovat | editovat zdroj]

Řada výstupních formátů XSL-FO procesorů, například PDF, obsahuje záložky. Umožňují, aby se část textu na stránce stala aktivní a uživatel ji mohl vybrat. Když to udělá, dokument v okně se posune na příslušné místo.

XSL-FO v1.1 nyní poskytuje nástroje pro definici pojmenovaných záložek přímo v XSL-FO, které pak procesor může převést do výstupního formátu (pokud je podporuje).

Rejstřík[editovat | editovat zdroj]

XSL-FO v1.1 má vlastnosti pro vytvoření rejstříku, který bývá umístěn na konci knih. Slouží k tomu odkazy na patřičně označené prvky v FO dokumentu.

Výhody XSL-FO[editovat | editovat zdroj]

Jelikož se jedná o XML jazyk, stačí k jeho generování z libovolného XML jazyka XSLT transformace (a XSLT procesor). Snadno můžete napsat dokument v TEI či DocBooku a následně jej převést do HTML pro on-line čtení a do PDF (pomocí FO procesoru) pro tisk. Existuje řada XSLT předpisů pro TEI i DocBook, které můžete ihned použít.

Do XSL-FO lze pomocí elementu foreign-object vkládat libovolná XML data. Nejoblíbenějšími „přídavnými“ daty jsou obrázky ve formátu SVG, které řada FO procesorů dokáže zpracovat a vložit do výstupu. Některé procesory FO takto dokáží i přímo vykreslovat matematické vzorce zapsané v MathML či vykreslovat grafy.

Další předností XSL-FO je poměrně snadné použití. Velká část schopností jazyka pochází z CSS, takže uživatel CSS automaticky zná základy atributů XSL-FO. Pochopit, jak bude vypadat určitá konkrétní část XSL-FO dokumentu, je většinou lehké. Tím se XSL-FO liší od typografických balíků, jako je například TeX, které jsou považovány za tajemné.

Zápory XSL-FO[editovat | editovat zdroj]

Pro některé uživatele problém FO spočívá v tom, že je sice snadno pochopitelný, ale pro ruční vytváření nevhodný, protože obsahuje příliš mnoho značek. Ke snadnému vytváření XSL-FO slouží XSLT, takže jazyk postrádá motivaci k tomu, aby FO dokumenty byly stručné. To ale způsobuje, že nováček se musí učit nejen detaily vytváření FO dokumentů, ale zároveň i přípravy XSLT transformací. To samozřejmě platí jen v případě, kdy člověk nevyužívá některý z existujících transformačních předpisů pro standardní formáty dokumentů nebo vizuální návrhář výstupních sestav.

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]