XML

Jiří Kosek ml.

V počítačové branži můžeme stále častěji slyšet o jazyku XML (eXtensible Markup Language). Všichni přisuzují XML velice slibnou budoucnost a mluví o něm jen v superlativech. Pravdou ovšem je, že přesnou představu o tom, co XML je, má jen velice málo počítačových odborníků. V dnešním tématu týdne rozptýlíme mlhu, která XML zahaluje. Po jeho přečtení budete sami schopni posoudit, zda si XML pozornost zaslouží oprávněně.

V současné době se o XML hovoří nejčastěji v souvislosti s Webem a považuje se za nástupce dnes používaného jazyka HTML. Výhoda XML spočívá v tom, že autor stránky může používat vlastní tagy, které dokáží mnohem přesněji označit význam prezentovaných informací. To má velký význam především pro vyhledávání informací. Dnešní Web je informacemi přehlcen a nalézt konkrétní informací je stále obtížnější a mnohdy i nemožné. Tento problém nevyřeší sebelepší prohledávací servery, pokud jim nepomohou autoři stránek, kteří pomocí XML uloží do stránek mnohem více metainformací.

V jazyce HTML musíme z větší části definovat, jak se má daný text zobrazit, a ne co znamená. Představme si nyní, že by část ceníku na webové stránce byla zapsána pomocí XML následujícím způsobem:

<výrobek>
    <název>Hifi věž SuperSound PX 537</název>
    <cena>8356</cena>
    <měna>Kč</měna>
</výrobek>

Nyní víme, jaký význam mají jednotlivé části stránky. Víme, že "Hifi věž SuperSound PX 537" je název výrobku a že stojí 8356 korun. S těmito znalostmi není problém zadat vyhledávacímu serveru příkaz k nalezení všech stránek, které obsahují informace o dané hifi věži, a jejich seřazení podle ceny. Vidíme obrovský posun oproti HTML -- v něm jsme nanejvýš mohli hledat všechny stránky, které obsahují název hifi věže.

Dokumenty nejen prohledáváme, ale v konečné fázi i zobrazujeme. V jazyce HTML je vše jednoduché -- jednotlivé tagy určují, jak se má daná část stránky zobrazit. V XML žádná podobná přímá vazba neexistuje, a proto musíme způsob zobrazení jednotlivých elementů dokumentu definovat jiným způsobem -- pomocí stylů. Ve stylu pak můžeme pro každý element určit, jak se má zobrazit (řez a velikost písma, barva, zarovnání, umístění apod.). Podle našeho přání tak můžeme výše uvedenou část ceníku zobrazit třeba v přehledné tabulce nebo pěkně pod sebou jako v nějakém katalogu.

Velká výhoda stylů spočívá v tom, že jsou od samotného dokumentu odděleny a jsou v samostatném souboru. Jeden styl můžeme využívat v mnoha XML-dokumentech a dosáhnout tak jednotného vzhledu mnoha stránek. Na druhou stranu, pokud potřebujeme změnit design stránky, stačí drobně opravit styl a změna se promítne na všech stránkách, které styl používají.

Kaskádové styly (CSS) bylo možné používat i v HTML. Jejich použití však bylo pouze doplňkem, kterým jsme mohli modifikovat vzhled některých elementů. Autoři stránek mohli zcela beztrestně "zneužívat" jednotlivé HTML tagy pro dosažení požadovaného vzhledu stránky. XML-dokument bez stylu nelze zobrazit, autoři tak ztratí důvod pro vytváření špatně strukturovaných stránek, které však dosahují požadovaného vzhledu.

Využití XML

Na následujících řádkách se pokusíme nastínit oblasti, kde je vhodné XML nasadit a kde může použití XML přinést něco nového. V žádném případě však nepůjde o kompletní výčet. XML je nový jazyk, a tak dnes všechny jeho aplikace neznají ani ti největší vizionáři.

O XML se nejčastěji hovoří jako o novém jazyku pro tvorbu webových stránek. Situace se dnes vyvíjí tak, že nám XML umožní rozšiřovat množinu elementů, které nám při tvorbě stránek nabízí HTML. Stránky v XML jsou zároveň snazší pro čtení než ty současné v HTML, které obsahují mnoho chyb. To umožní vývoj nových jednoduchých prohlížečů určených zejména pro různá kapesní mobilní zařízení. Více informací o budoucnosti HTML naleznete v článku XHTML -- nová budoucnost pro jazyk HTML, který je součástí dnešního tématu týdne.

XML však nezůstává pouze technologií určenou pro Web. Využití nalezne všude, kde je potřeba jedny informace prezentovat v několika formátech -- v tištěné podobě na papíře, jako publikaci na CD-ROM a na Webu. Výhoda XML spočívá v tom, že kromě samotného textu nese i informaci o jeho významu. Konverze do libovolného formátu je pak snadná a může probíhat zcela automaticky. XML proto nalézá uplatnění při tvorbě technické dokumentace, což v některých oblastech průmyslu znamená práci s tisícistránkovými dokumenty, které je potřeba několikrát ročně aktualizovat a distribuovat uživatelům v různých formách. Příspěvky do různých vědeckých a odborných časopisů je dnes rovněž potřeba publikovat i elektronicky kromě tradiční papírové podoby. XML se nabízí jako otevřený standard pro uchovávání a výměnu tohoto typu dat.

XML dokumenty v sobě mají "nejvíce energie"
XML dokumenty v sobě mají "nejvíce
         energie"

Využití XML může být výhodné i při klasickém publikování na papír. Pokud budou rukopisy odevzdávány v XML, bude jejich import a zalomení v nějakém sázecím systému mnohem jednodušší, než když import provedeme z textového editoru, kde může autor zcela neodborně měnit vzhled dokumentu. Práce se ušetří sazeči, který nemusí opravovat chyby autora, a autor se může soustředit na vlastní psaní textu, na jeho obsah a výslednou grafickou úpravu ponechá na odbornících.

Hovoříme-li o XML-dokumentech, může to v nás vyvolat dojem, že se XML hodí pouze pro textové dokumenty -- webové stránky, dopisy, knihy apod. Opak je však pravdou. Největší objem dat, který bude v podobě XML přenášen, budou strukturovaná data, která se dnes ukládají do relačních databází. XML poslouží jako vhodný přenosový formát při komunikaci mezi aplikacemi různých výrobců, mezi webovým serverem a prohlížečem apod.

V USA se připravuje pilotní projekt, který umožňuje odeslat daňové přiznání ve formátu XML bernímu úřadu. Díky tomu, že je definován požadovaný datový formát, může být k odeslání daňového přiznání použita libovolná aplikace -- stačí když zvládne vyexportovat data do XML. Někdo si daňové přiznání vyplní ručně v obyčejném textovém editoru, někdo si může vygenerovat daňové přiznání přímo z účetního programu, který používá.

XML může obrovským způsobem pomoci při rozvoji elektronického obchodování. Při virtuálních nákupech je potřeba přenášet data mezi uživatelem, internetovým obchodním domem, bankou a certifikačními autoritami. Pro výměnu těchto dat může být použit formát založený na XML. Tím odpadne použití nekompatibilních proprietárních a drahých řešení.

Již několik let se úspěšně používá EDI (Electronic Data Interchange), které umožňuje elektronické zprostředkování objednávek a plateb mezi obchodními partnery. Problémem EDI je jeho složitost a nekompatibilita. Každá velká firma měla svoje vlastní řešení EDI. Pokud nějaký dodavatel spolupracoval s více velkými odběrateli, musel si za velké peníze pořídit tolik EDI aplikací, kolik měl odběratelů. Pokud by se jako formát pro výměnu dat mezi EDI aplikacemi používalo XML, odpadly by problémy s kompatibilitou a EDI by se mohlo masově rozšířit do oblasti malého a středního podnikání.

Třívrstvá webová aplikace -- XML slouží jako formát pro výměnu dat
Třívrstvá webová aplikace -- XML slouží
jako formát pro výměnu dat

Poslední oblastí, ve které se XML dnes používá, je pro přenos metadat. Všichni asi známe formát CDF, který slouží k definici kanálů pro prohlížeč Internet Explorer 4.0. Zcela obecně pak problém metadat řeší nový standard RDF (Resource Description Framework) konsorcia W3C.

Syntaktické minimum

Pro toho, kdo má nějaké zkušenosti s HTML nebo SGML, nebude práce s XML žádný problém. Nutno ovšem podotknout, že oproti HTML musí XML-dokument splňovat mnohem přísnější pravidla. Pokud tato pravidla splňuje, říkáme, že dokument je správně strukturovaný (well-formed). Takovýto dokument pak mohou zpracovávat různé aplikace. Každá aplikace obsahuje tzv. parser, který XML-dokument načte a pomocí předem daného rozhranní ho zpřístupní aplikaci k dalšímu zpracování.

Základním požadavkem na správně strukturovaný XML-dokument je, aby byl celý uzavřen v jednom elementu -- celý dokument tedy musí být uzavřen mezi nějaký počáteční a ukončovací tag:

<dokument>
   ...tělo dokumentu
</dokument>

Všechny tagy musí být párové, to znamená, že pro počáteční tag <tag> musí vždy existovat i ukončovací tag </tag>. Výjimku tvoří prázdné elementy, které nemají žádný obsah. Jim odpovídající tag však musí být ukončen znaky `/>' místo pouhého `>'. To umožní parseru snadné rozpoznání prázdných elementů. Příkladem prázdného elementu může být například <br/>.

V XML můžeme používat atributy podobně, jak je známe z HTML. Narozdíl od HTML však musíme vždy obsah atributu uzavřít do uvozovek nebo apostrofů:

<para security="public">...veřejně přístupný text...</para>

V XML jsou jména všech elementů a atributů citlivá na velikost písmen. Na to musíme dávat pozor, zejména pokud dokumenty připravujeme ručně. Zvykem bývá psát všechna jména malými písmeny, abychom si nemuseli pamatovat, kde je náhodou velké písmeno.

Počítače nejsou dnes již jen záležitostí anglicky hovořících zemí, a tak bylo v XML hned od začátku pamatováno na potřeby ostatních jazyků. Jako standardní znaková sada se v XML-dokumentu používá Unicode (ISO 10646), která obsahuje všechny dnes používané znaky. Zajímavostí je, že různé národní znaky můžeme používat i v názvech elementů a atributů. Nic tedy nebrání tomu, aby si Japonci své elementy pojmenovali v Japonštině.

Standardně se předpokládá, že dokument bude uložen v kódování UTF-8, které má prvních 128 znaků shodných s ASCII. Pokud v dokumentu použijeme jiné kódování, musíme to uvést v XML deklaraci:

<?xml version="1.0" encoding="iso-8859-2"?>
<dokument>
 ...
</dokument>

Pokud dodržíme výše popsaná pravidla, můžeme vytvářet XML-dokumenty. Velká výhoda XML však spočívá v tom, že u dokumentu můžeme určit jeho typ. Typ dokumentu může být např. webová stránka, dopis, kapitola knihy, databáze zákazníků apod. Typ dokumentu určíme v deklaraci typu dokumentu (DOCTYPE):

<?xml version="1.0"?>
<!DOCTYPE dopis SYSTEM "dopis.dtd">
<dopis>
  <adresát>
    <jméno>Jan Novák</jméno>
    <adresa>...</adresa>
    ...
  </adresát>
  <předmět>Pozvánka na besedu o XML</předmět>
  <tělo>
    <para>Vážený pane,</para>
    <para>rád bych Vás jménem naší...</para>
    ...
  </tělo>
</dopis>

Druhá řádka ukázkového XML-dokumentu nám říká, že definice typu dokumentu (DTD -- Document Type Definition) je uložena v souboru dopis.dtd. DTD definuje elementy a atributy, které můžeme v dokumentu daného typu použít. Naše DTD pro psaní dopisů by nadefinovalo, že dopis se skládá z informaci o adresátovi, z předmětu dopisu a z jeho těla. U adresáta můžeme zadat jméno a adresu. Tělo dopisu se skládá z jednotlivých odstavců textu.

V DTD definujeme jaké jsou přípustné vzájemné kombinace elementů, které elementy mohou být vynechány, které se mohou opakovat atd. Pokud je XML-dokument spojen s nějakým DTD, můžeme snadno pomocí parseru zjistit, zda dokument splňuje požadavky definované v DTD.

DTD je "malý hlídací pes", který donutí autora do dokumentu zadat všechny údaje, které musí daný typ dokumentu obsahovat. DTD tu slouží jako šablona, jak ji známe z dnešních textových editorů. Schopnosti DTD jsou však mnohem větší. Pokud XML-dokument editujeme v editoru, který obsahuje parser a umí načíst DTD, editor nám neumožní vytvořit špatný dokument a dokonce nám napoví, které elementy můžeme v jednotlivých místech dokumentu použít.

Pro efektivní výměnu a sdílení informací je potřeba, aby se používala standardizovaná DTD. Přehled nejčastěji používaných DTD naleznete v článku Nejběžnější DTD.

Pěkný kabát pro dokumenty

V úvodu článku jsme naznačili, že vzhled jednotlivých elementů a tím i celého dokumentu je potřeba definovat pomocí stylu. Pro definici vzhledu XML-dokumentů se dnes používají tři stylové jazyky CSS, XSL a DSSSL.

CSS (Cascading Style Sheets) není nic jiného než kaskádové styly používané v HTML. Tento stylový jazyk bude ze začátku podporovat nejvíce aplikací, protože je velmi jednoduchý a dnešní "čtyřkové" verze prohlížečů jej umí. Kaskádové styly byly původně určeny pouze pro prezentování informací na obrazovce. Další parametry formátování, které je potřeba zadat pro tištěný výstup, byly přidány do nové verze kaskádových stylů CSS2. Pro potřeby XML byly do CSS2 přidána i další rozšíření, která umožňují konkrétní styl aplikovat i na základě hodnoty atributu. CSS1 umožňovalo styl aplikovat pouze na určitý element bez návaznosti na obsah jeho atributů.

Protipólem k CSS je jazyk DSSSL (Document Style Semantics and Specification Language). DSSSL je rozsáhlý jazyk, který byl původně vyvinut pro použití s SGML. Jeho použití s XML však nic nebrání. DSSSL je tak komplexní jazyk, že jej zatím nepodporuje příliš mnoho aplikací. Pro potřebu elektronického publikování byla definována jeho podmnožina DSSSL-O, která se hodí pro méně náročné aplikace.

Zlatou střední cestou mezi oběma jazyky je XSL (eXtensible Stylesheet Language). Tento jazyk má možnosti srovnatelné s DSSSL, jeho syntaxe je však mnohem jednodušší. Zajímavostí je, že XSL se zapisuje v jazyce XML. Pro tvorbu stylů můžeme tedy použít stejný editor, který používáme pro tvorbu dokumentů.

Jednoduchá manipulace s dokumentem a jeho elementy může být v XSL prováděna přímo. Pokud máme nějaké náročnější požadavky, můžeme je vyřešit pomocí ECMAScriptu. ECMAScript je standardizovaná verze JavaScriptu a v XSL jej můžeme použít pro manipulaci s dokumentem -- například můžeme automaticky vygenerovat obsah dokumentu apod.

XLink a XPointer -- hypertextové odkazy pro třetí tisíciletí

Hypertextové odkazy tak, jak je známe z HTML, byly v době svého vzniku převratnou technologií, která se dnes dostala na stoly miliónů uživatelů. Po deseti letech jejich používání se však objevily nové požadavky, které bylo potřeba řešit. Problematiku odkazů v XML-dokumentech řeší samostatné jazyky XLink a XPointer, které někdy bývají souhrně označovány jako XLL.

XLL samozřejmě umožňuje vytváření jednoduchých odkazů, které známe z HTML. Přichází však s velkou novinkou. Odkaz nyní může vést i na tu část stránky, která neobsahuje žádné návěstí. Odkazy v XLL mohou být definovány mnohem flexibilnějším způsobem. Můžeme se například odkázat na třetí odstavec, který následuje po kapitole, jež se jmenuje "Ze života hmyzu". Tímto způsobem můžeme vytvářet odkazy i na ta místa dokumentu, kam autor neumístil žádné návěstí.

Další novinkou je možnost vytvářet obousměrné odkazy, které jasně vyjadřují souvislost dvou stránek. Problémem nejsou ani odkazy, kdy jeden odkaz ukazuje najednou na několik dalších zdrojů. Uživatel pak má možnost vybrat si zdroj, který jej nejvíce zajímá.

Odkazy lze pomocí XLL ukládat i zcela mimo dokumenty, kterých se týkají. Tímto způsobem můžeme vytvářet například anotace ke stránkám, ke kterým nemáme jinak přístup pro zápis. Na svém počítači nebo na firemním serveru můžeme mít databázi odkazů, se kterou bude spolupracovat náš prohlížeč, a budeme pak mít na cizích stránkách přístupné anotace vlastní i našich kolegů. Není vyloučeno, že se najdou provozovatelé serverů, které budou spravovat veřejné databáze odkazů. Stránky tak půjde snadno doplňovat o další informace, které mohou být užitečné pro všechny uživatele Webu.


Po tomto stručném úvodu do problematiky XML na vás čekají další, mnohem podrobnější, informace. Tímto tématem týdne se pro čtenáře Computerworldu problematika XML neuzavírá. Na stránkách našeho týdeníku se od nynějška jednou za čtrnáct dní setkáte se stránkou věnovanou XML a elektronickému publikování vůbec. Na tomto prostoru naleznete popis zajímavého software, který pracuje s XML, podrobněji se seznámíte se syntaxí XML, XLL a stylových jazyků. Nevyhneme se ani seznámení s nejběžněji používanými DTD, jako je například MathML, CDF, RDF, DocBook apod. Na své si přijdou i programátoři, kterým přineseme popis použití knihoven, s jejichž pomocí mohou číst a zapisovat XML-dokumenty v jejich oblíbeném prostředí, ať je to C++, JavaScript, PHP či Perl. Aby náš seriál nebyl odtržen od reality, bude obsahovat příklady vhodného použití XML a případové studie popisující systémy, které jsou založeny na XML.

Jazyk XML je poměrně nový, a proto vás jistě napadá spoustu otázek, jejichž zodpovězení by vám pomohlo celou problematiku XML lépe pochopit. Nestyďte se a dotazy nám zašlete do redakce nebo na e-mailovou adresu xml@kosek.cz. Pokud to bude v našich silách, pokusíme se odpověď na váš dotaz přinést na stránkách našeho týdeníku.

© Jiří Kosek 1999