V sobotu 2. listopadu proběhla mohutná oslava naší plnoletosti !!
Multimediaexpo.cz je již 18 let na českém internetu !!

Extensible Stylesheet Language - Formatting Objects

Z Multimediaexpo.cz

Verze z 22. 1. 2014, 09:55; Sysop (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

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.


Obsah

Základy XSL-FO

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ěkdo 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, zpravidla 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ů je distribuována. V tom se XSL-FO liší od HTML, které interpretuje každý prohlížeč sám. Uživatel, který chce vytvořit tištěný dokument, si může zvolit 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 nijak nevadí.

Koncepce jazyka

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

XSL-FO dokumenty jsou XML dokumenty, ale nemusí vyhovovat žádnému DTD či schématu. Místo toho odpovídají syntaxi definované ve specifikaci XSL-FO.

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

Návrh 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čitým návrhem 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ý.

Základní značkování obsahu je v XSL-FO odvozeno z CSS a jeho kaskádovacích pravidel. Díky tomu se řada atributů dědí z rodiče na potomky, pokud nejsou explicitně změněny.

Schopnosti XSL/FO v1.0

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ů

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

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í

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

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

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í řádek 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

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é

  • 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

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

Více sloupců a mapování toku textu

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

Ř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

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

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.

Protože se jedná o XML jazyk bez schématu, můžete v něm uložit 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.

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

Klíčovým nedostatkem FO je chybějící podpora. FO procesorů je málo a snad žádný z nich nenabízí 100% kompatibilitu se standardem jazyka. A to přesto, že specifikace existuje již roky. Obecnou příčinou tohoto stavu je malý zájem o XSL-FO. TeX a jeho příbuzní mají tradiční pozici jako typografické jazyky a většina jejich uživatelů nevidí potřebu přecházet na XSL-FO.

Méně podstatným záporem XSL-FO je, že jeho schopnosti umístit obsah do vymezených okrajů nejsou tak dobré, jak by mohly být. Schopnost ovládat sázená data je sice funkční, ale ne tak kompletní, jak by se nám líbilo.

Další 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ů.

Související články

Externí odkazy