XML a stylové jazyky

V několika předchozích číslech Computerworldu jsme se seznámili s jazykem XML a s tím jak v něm vytvářet dokumenty. Jazyk XML je výborný formát pro přenos dat mezi různými systémy. V určitém okamžiku však vždy do procesu zpracování dokumentů a dat vstupuje člověk. V tomto okamžiku je potřeba dokument prezentovat ve formě, která je pro člověka nejsrozumitelnější.

Jazyk XML definuje pouze strukturu dokumentů. Chceme-li však dokument přehledně zobrazit, musíme nějakým způsobem definovat, jak se jednotlivé elementy zobrazí -- jakou barvou, jakým písmem, jak budou zarovnané apod. Pro definici vzhledu dokumentů se dnes používají tzv. stylové jazyky. Mezi tři nejznámější a nejpoužívanější patří jazyky CSS, XSL a DSSSL. V dnešním tématu týdne se na ně podíváme podrobněji a ukážeme si, jak vytvořit XML dokument a odpovídající styl tak, aby se dokument dal zobrazit v prohlížečích, které podporují XML (konkrétně tedy v Internet Exploreru 5.0 a ve vývojové verzi Netscape Navigatoru známé pod názvem Gecko).

Malé historické ohlédnutí

Zpočátku se počítače používaly jen jako inteligentní psací stroje. S rozvojem techniky se však stále zdokonalovaly i tiskárny. Stalo se tak, že počítačové tiskárny začaly zvládat tisk několika variantami písma, posléze i různými velikostmi písma a nyní pro ně díky práci v grafickém režimu není problém vytisknout cokoliv.

Programy pro zpracování textových dokumentů se s možnostmi tiskáren vypořádávaly různě. První z přístupů spočíval v tom, že do textového dokumentu se přímo vkládaly řídící kódy tiskárny, které ovlivňovaly použitý druh písma. Toto řešení nebylo pro autory dokumentů moc příjemné a navíc nebylo ani praktické a elegantní. Nové typy tiskáren nebo tiskárny od jiných výrobců měly odlišné řídící kódy, a tudíž nebylo možné jeden dokument vytisknout na více různých tiskárnách.

Tento problém odstranily až různé formátovací programy jako troff nebo TeX. Formátování dokumentu se vyznačilo pomocí speciálních značek, které pak formátovací program převedl do jazyka srozumitelného pro jednotlivé druhy tiskáren.

Nerozvíjely se však jen tiskárny, ale celá oblast výpočetní techniky. Díky velkokapacitním záznamovým médiiím a rychlejším počítačům bylo možné textové dokumenty uchovávat, vyhledávat v nich informace, sdílet je se spolupracovníky, modifikovat atd. Tištěný výstup už také nebyl jediným druhem výstupu, který musel být kvalitní. Dokumenty se začaly prezentovat přímo na obrazovkách počítačů, šlo je získavat i ze vzdálených míst pomocí počítačových sítí. Ukázalo se, že použití formátovacích jazyků zaměřených na tištěný výstup není pro dokumenty ten správný formát.

Většina dokumentů jednoho druhu měla podobnou strukturu. Například kniha má kapitoly, podkapitoly a odstavce. Vývoj vedl až k jazyku SGML, který umožňoval vytvářet dokumenty a definovat jejich strukturu. Jednou z nejznámějších aplikací SGML je jazyk HTML používaný pro tvorbu webových stránek. Zjednodušením poměrně složitého a komplexního jazyka SGML vzniklo XML.

Použitím jazyků jako SGML a XML vyřešilo problémy s výměnou dokumentů mezi různými aplikacemi. Tyto jazyky však postihují pouze strukturu dokumentu, nikoliv jeho vzhled. Chceme-li SGML/XML dokument vytisknout nebo zobrazit, musíme nějak definovat, jak se mají jednotlivé elementy zobrazit.

Většina výrobců nástrojů pro práci s SGML/XML dokumenty měla vlastní způsob, jak definovat vzhled jednotlivých elementů. Postupem času se však ukázalo, že by bylo celkem praktické, kdyby i definice vzhledu dokumentu byla nějakým způsobem standardizována. Výsledkem této snahy bylo několik stylových jazyků.

Mezi nejstarší patří FOSI (Formatting Output Specification Instance), jehož autorem je americké ministerstvo obrany. FOSI je podporováno mnoha SGML aplikacemi. Výhodou je to, že FOSI styl je sám o sobě SGML dokumentem, takže pro jeho editování lze využívat stávající nástroje. Jazyk je to pouze deklarativní, nelze v něm provádět nějaké výpočty nebo přeskupování dokumentu pro potřeby výstupu.

Nástupcem FOSI byl jazyk DSSSL (Document Style Semantics and Specification Language), který byl v roce 1995 přijat jako ISO/IEC norma s číslem 10 179. Syntaxe DSSSL vychází z jazyků pro operaci se seznamy jako je Lisp nebo Schema. DSSSL je kompletní programovací jazyk. Kromě specifikování vzhledu jednotlivých elementů tak můžeme provádět různé úpravy dokumentu před jeho výsledným zformátováním. Typickým příkladem je například generování obsahu dokumentu nebo změna struktury a pořadí elementů před jejich vytištěním.

FOSI a DSSSL byly úzce spjaty s jazykem SGML. DSSSL lze bez problémů používat i s jazykem XML. Další ze stylových jazyků vznikl pro potřeby jazyka HTML. Ano, máme na mysli kaskádové styly dokumentů CSS (Cascading Stylesheets). V polovině 90. let již zasáhl Web do komerční sféry a výrobci prohlížečů rozšiřovali HTML o nestandardní prvky umožňující různé grafické efekty a lepší kontrolu layoutu. Kaskádové styly měly být nástrojem, který umožní návrat k čistšímu HTML kódu, který se nepodřizuje pouze požadavkům na grafický design. Bohužel, po dvou a půl letech od shválení finální verze standardu CSS konsorciem W3C musíme říci, že kaskádové styly se zatím nevyužívají tak, jak by mohly. Vinu nesou zejména výrobci prohlížečů, kteří do prohlížečů přidávají podporu CSS pomalu a poměrně nekvalitně. Uspokojivou podporu kaskádových stylů měl až Internet Explorer 4.0. Netsacape Navigator na ní teprve čeká, Navigator 4.0 byl jen hodně nedokonalým pokusem dobré implementace CSS.

V loňském roce byla schválena nová verze kaskádových stylů -- CSS2. Ta mimo jiné obsahuje zlepšenou podporu jazyka XML -- styl lze nyní přiřadit i na základě hodnot atributů. CSS jsou dnes asi nejpoužívanějším stylovým jazykem pro XML dokumenty. Podporují je i Internet Explorer 5.0 a vývojová verze Netscape Navigatoru 5.0. Pokud budeme dnes vytvářet XML dokumenty, které mají být přístupné na Webu, použijeme pro definici jejich vzhledu nejspíše CSS. Kaskádové styly jsou velice jednoduchý jazyk, který neumožňuje nijak měnit strukturu dokumentu nebo například generovat obsah dokumentu. Pro jednoduché dokumenty jsou však většinou zcela postačující.

V mnoha aplikacích je však vhodné, pokud můžeme před zobrazením (vytištěním) dokument nějak modifikovat -- například vygenerovat obsah, přeorganizovat informace apod. V tomto případě své uplatnění nalezne jazyk XSL (eXtensible Stylesheet Language). Jazyk XSL, jak ostatně napovídá i jeho název, vznikl až speciálně pro potřeby jazyka XML. Pro zápis stylu se využívá jazyk XML, takže lze použít běžné XML editory. XSL umožňuje dvě základní věci: (1) transformovat jeden XML dokument do jiného XML dokumentu; (2) specifikovat formátovací vlastnosti jednotlivých částí dokumentu.

Možnost transformovat jeden dokument do druhého se dnes využívá nejčastěji. Jednotlivé XML elementy se mapují na fragmenty HTML kódu, který specifikuje výsledné zobrazení. Tento způsob práce s XML již dnes podporuje IE 5.0 a existuje i ActiveX komponenta, která umožňuje použít XML+XSL v IE 4.0. Doufejme, že podpora XSL bude zahrnuta i v Netscape Navigatoru 5.0.

Formátovací model XSL vychází z DSSSL a je poměrně komplexní. To je také asi jeden z důvodů, proč dodnes neexistuje jeho pořádná implementace. Objevují se sice první testovací implementace, ale dokud nepřijde s podporou Microsoft nebo jiná velká softwarová firma, bude potenciál této části jazyka XSL nevyužit. Pro úplnost nesmíme zapomenout na to, že narozdíl od ostatních stylových jazyků, není XSL dosud standardizováno. Zatím se jedná pouze o pracovní návrh konsorcia W3C. Implementace od Microsoftu z velké části návrhu vyhovuje a přináší některá rozšíření. V dalších verzích Internet Exploreru hodlá Microsoft implementaci přizpůsobit standardu W3C.

Společně s XML využijeme zejména CSS a XSL. CSS je plně postačující pro jednoduché aplikace, pro složitější a náročnější formátování se bude využívat XSL. Do té doby než se rozšíří podpora XSL v aplikacích bude především pro kvalitní tištěný výstup používáno i DSSSL.

Připojení stylu k dokumentu

Kaskádové styly mohly být zapisovány přímo do HTML dokumentu. V XML tuto možnost nemáme, styl musí být definován v externím souboru. To má tu výhodu, že jeden styl můžeme aplikovat na větší množství dokumentů stejného typu. Připojení stylu k dokumentu je nezávislé na použitém stylovém jazyce a provádí se pomocí speciální instrukce pro zpracování xml-stylesheet. Připojení stylu tak může vypadat například takto:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="styl.css" type="text/css"?>
<dokument>
   ...
</dokument>

Pomocí atributu href určujeme URL adresu (může být i relativní jako v našem příkladě), na které je uložen soubor se stylem. Atribut type určuje MIME typ použitého stylového jazyka. Pokud používáme XSL, použijeme type="text/xsl".

Budete-li s XML a styly experimentovat, je důležité dát si pozor na kódování češtiny v dokumentech. XML za standardní kódování považuje utf-8. V tomto kódování jsou české znaky zapsány jako dvojice na první pohled nesrozumitelných bajtů. Bohužel ne všechny editory jsou schopné zapisovat soubory v kódování UTF-8. Já sám vím pouze o nadstavbě do editoru Emacs a o WordPerfectu 9, který umí XML a podporuje UTF-8 i UTF-16. Pokud víte o dalších editorech, dejte mi vědět.

XML dokumenty můžeme samozřejmě vytvářet v libovolném kódování -- např. CP1250 ve Windows a ISO 8859-2 v Unixu. Kódování musíme určit pomocí atributu encoding v XML deklaraci:

<?xml version="1.0" encoding="windows-1250"?>

V IE 5.0 nebudou s takovými dokumenty problémy. Ty nastanou až v Gecku. To zatím nepodporuje různá vstupní kódování dokumentu. Musíme proto použít buď UTF-8 nebo diakritiku oželet a použít ASCII. Pokud použijeme jiné kódování a české znaky, patrně nám při načítání dokumentu Gecko zhavaruje.

Pojďme se však podrobněji podívat na jednotlivé stylové jazyky a jejich syntaxi.

Zdroje na Internetu

http://www.w3.org/Style/XSL/
Stránka konsorcia W3C. Specifikace XSL a XSLT a další zajímavé odkazy
http://www.w3.org/Style/CSS/
Stránka konsorcia W3C. Specifikace CSS1, CSS2 a další zajímavé odkazy
http://www.xml.com
Server věnovaný XML. Mimo jiného na něm naleznete mnoho zajímavých článků o XSL a CSS.
http://www.xml.org
Nově vznikající server, který by měl v budoucnu sloužit především jako repozitář standardních DTD a stylů.
http://zvon.vscht.cz/ZvonHTML/Downloads/convert_en.html
Program pro konverzi souboru mezi různými kódováními. Mimo jiné zvládá i UTF-8.
http://www.mozilla.org/
Mozilla -- vývojová verze nového Netscape Navigatoru s podporou XML a CSS.
http://www.emwac.cz/
Z tohoto serveru si můžete stáhnout Internet Explorer 5.0 s podporou XML, CSS a XSL.
© Jiří Kosek 1999