XML

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(e úplně všechno)
Řádka 1: Řádka 1:
* obecný jazyk SGML  
+
* obecný jazyk SGML
* jak vypadá XML dokument, využití v praxi  
+
* jak vypadá XML dokument, využití v praxi
* XML a layout, co to je eXtensible Stylesheet Language (XSLT styl)  
+
* XML a layout, co to je eXtensible Stylesheet Language (XSLT styl)
 
* co to je definice typu dokumentu (DTD)
 
* co to je definice typu dokumentu (DTD)
== Úvod do XML ==
 
*pokud se chceme jako firma uplatnit na trhu, musíme umět rychle a levně získat informace
 
konkurenci, o trhu a preferencích spotřebitelů.
 
*jako spotřebitelé chceme bez námahy nalézt prodejce, který nám požadované zboží dodá
 
nejrychleji a nejlevněji.
 
*se svými zákazníky a dodavateli musíme rychle komunikovat, chceme, aby se objednávky a
 
faktury vyřizovaly téměř okamžitě a ne s několikadenním prodlením.
 
  
Aby to vše bylo možné, potřebujeme mít k dispozici efektivní způsoby sdílení a vyhledávání informací.
 
  
Dosud se pro výměnu dat stále ještě používají proprietární formáty, se kterými dovedou pracovat jen
 
úzké okruhy aplikací, výměna dat mezi informačními systémy jednotlivých firem je nákladná a
 
zdaleka ne elegantní záležitost.
 
  
Ani jazyk HTML se nestal dostatečně schopným lepidlem, které by dokázalo celý svět informačně
+
== Obecný jazyk SGML ==
propojit. HTML již vyčerpalo svůj potenciál a současnosti už má poměrně omezené vyjadřovací
+
[[Soubor:Sgml-vs-xml-a-html.png|thumb|right|Vztah mezi SGML, XML a HTML]]
schopnosti. Internet je dnes informacemi přehlcen a hledaná informace je často skryta ve velkém
+
XML patří do skupiny tzv. '''značkovacích jazyků'''. Tyto jazyky umožňují označovat části textu '''značkami''' (tagy).
množství dalších pro nás nepotřebných informací.
+
 
Podívejme se na to, jak může vypadat zdrojový kód části webové stránky, která obsahuje ceník:
+
Předchůdcem XML byl jeden z prvních značkovací jazyků '''SGML''' (Standard Generalized Markup Language). Ten byl přijat v roce 1986 jako ISO norma. Asi prvním známých značkovacím jazykem byl jazyk GML, který byl vytvořen při práci na systému pro uchovávání a následné využití právních textů pro IBM. Autoři se museli vypořádat s nekompatibilitou jednotlivých systémů a programů a nejsnazší cesta vedla právě přes vytvoření nějakého obecného značkovacího jazyka. Tak vzniklo SGML.
V prohlížeči pak na stránce uvidíme přehlednou tabulku s ceníkem.
+
 
Dnešní, často na pohled skvělé webové stránky, jsou jen soubory obsahující mnohdy nepřehledný
+
=== Vlastnosti ===
balast. O tom, že v takovýchto datech se těžko něco hledá, není potřeba nikoho přesvědčovat.
+
* umožňuje definovat vlastní '''značkovací jazyky''' (pomocí DTD viz dále)
Výše nastíněný problém se snaží odstranit nový jazyk XML (eXtensible Markup Language). Největší
+
* umožňuje nastavit spoustu volitelných parametrů (maximální délku názvů značek, určit znaky sloužící jako oddělovače značek od textu a '''mnohem mnohem''' víc)
přínos XML spočívá v tom, že v dokumentech můžeme používat vlastní značky (tagy). Pokud tedy
+
* velice obecný a složitý/komplexní
vytváříme například ceník, můžeme v něm přehledně označit, co je název výrobku, jeho popis a cena.
+
 
Vše bude přehlednější a kratší:
+
Na jeho základech stojí mnoho dalších značkovacích jazyků (HTML, XML, atd.).
Na první pohled vidíme, že v takto strukturovaných datech se bude vyhledávat mnohem snáze.
+
 
Inteligentní vyhledávací službě zadáme název výrobku a maximální cenu, za pár sekund se nám
+
Po letech používání jazyka SGML se ukázalo, že se ve skutečnosti používá jen část jeho skutečných možností. Tato část byla v roce 1996 vybrána jako základ pro nově vznikající jazyk XML.
na monitoru objeví seznam prodejen, kde mají k dostání zboží, které sháníme.
+
 
XML však není určeno jen pro webové stránky, uplatnění nalezne i v elektronickém publikování nebo
+
 
při výměně dat mezi různými systémy.
+
== Jak vypadá XML dokument ==
Něco málo z historie značkovacích jazyků
+
 
S rozmachem Internetu a dalších médií (např. CD-ROM) vznikla potřeba jedny a tytéž informace
+
Na začátku každého XML dokumentu se může nacházet (''měla by, je to slušnost'') tzv. '''XML deklarace'''. V základu vypadá takto:
prezentovat mnoha způsoby kvalitním tiskem na papíře, jako hypertextovou příručku na CD-ROMu či
+
 
jako sadu provázaných webových stránek.
+
<pre>
Pro tyto účely je však potřeba znát logickou strukturu dokumentu. Musíme vědět, že tohle je nadpis a
+
<?xml version="1.0" ?>
tohle zase popis obrázku. Konkrétní velikost písma a způsob formátování záleží až na tom,
+
</pre>
zda chceme produkovat tištěnou knihu nebo multimediální CD-ROM.
+
 
Potřebujeme tedy jazyk, který umožní označit význam jednotlivých částí textu, a ne jejich vzhled.
+
Deklarace sděluje programu, který bude dokument zpracovávat, některé důležité informace. V uvedeném případě se jedná o informaci, že dokument je zapsán podle XML verze 1.0 (aktuální je verze 1.1). Deklarace '''musí''' obsahovat alespoň informaci  o použité verzi XML. Poté je možné ještě určit použité kódování:
Takovýmto samopopisným jazykem je právě XML. Nejde však zdaleka o první jazyk svého druhu.
+
 
Jazykům, které umožňují vyznačovat části textu, se říká značkovací jazyky (markup languages).
+
<pre>
Asi prvním známým značkovacím jazykem byl GML (Generalized Markup Language), který byl
+
<?xml version="1.0" encoding="UTF-8" ?>
vytvořen při práci na systému pro uchovávání a následné využití právních textů pro IBM. Autoři se
+
</pre>
museli se tehdy vypořádat s nekompatibilitou jednotlivých systémů a programů a nejsnazší cesta
+
 
vedla právě přes vytvoření nějakého obecného značkovacího jazyka.
+
Uvedené informace musí být uvedeny přesně v tomto pořadí. Když není hodnota <code>encoding</code> uvedena, je předpokládano použití výchozího kódování '''ISO 10646'''. Jedná se o 32-bitovou znakovou sadu, která je schopná pojmout všechny znaky dnes používaných jazyků. Je téměř shodná se standardem Unicode ([http://unicode.org/faq/unicode_iso.html zdroj]).
A tak byl vyvinut jazyk SGML (Standard Generalized Markup Language), který je definován v ISO
+
 
normě 8879 z roku 1986. Jazyk SGML je skutečně hodně obecný a samozřejmě umožňuje definici
+
Za XML deklarací se nechází '''kořenový element'''. Kořenový element je nejvyšším elementem dokumentu, všechny ostatní elementy jsou do něj vnořeny. XML dokument musí obsahovat alespoň jeden element (třeba jenom kořenový). Kořenový element je '''jenom jeden'''.
vlastních značkovacích jazyků (sad značek a jejich vzájemných vztahů) pomocí tzv. definic typu
+
 
dokumentu (DTD). Navíc má spoustu volitelných parametrů počínaje maximální délkou názvů značek
+
<pre>
a konče určením znaků použitelných jako oddělovače značek od textu. Komplexnost standardu SGML
+
<?xml version="1.0" encoding="UTF-8" ?>
poněkud zbrzdila jeho praktické využití.
+
<trida name="it4" startYear="2008" endYear="2012">
Asi nejznámější aplikací SGML je jazyk HTML (Hypertext Markup Language), který se používá
+
<tridniUcitel name="Ivana Šmejkalová" alias="SJ" />
pro tvorbu webových stránek. Značky, které můžeme na stránkách používat, určuje příslušné DTD,
+
<zaci>
které je pro každou verzi HTML trošku jiné.
+
<zak>
V polovině 90. let došlo k paradoxní situaci. Jazyk HTML si získal velkou oblibu díky své jednoduchosti,
+
<jmeno>Mirek</jmeno>
která byla v ostrém kontrastu s komplexností SGML. Ukázalo se však, že pevně daná skupina značek,
+
<prijmeni>Balog</prijmeni>
které HTML používá, už nestačí. Pro účely vyhledávání a vůbec efektivnější výměny dat by bylo lepší
+
<cislo>1</cislo>
mít možnost používat vlastní značky, které by přesně vymezily význam textu.
+
<znamky year="2008">
Nový jazyk dostal jméno XML (eXtensible Markup Language). Jedná se o podmnožinu SGML, která si
+
<znamka lesson="tev" grade="1">
zachovává možnost definování vlastních DTD, a tedy i vlastních značek, pro jednotlivé skupiny
+
<znamka lesson="cjl" grade="2">
dokumentů. Na rozdíl od SGML je mnoho parametrů předem určeno např. použité oddělovače a
+
<znamka lesson="pvy" grade="1">
speciální znaky. XML už rovnou počítá s podporou všech možných jazyků, takže není tak úzce svázáno
+
</znamky>
s angličtinou jako většina předchozích počítačových technologií. Navíc je syntaxe zápisu dokumentů
+
 
v XML oproti SGML poměrně přísná, což umožní mnohem snazší a levnější vývoj aplikací, které
+
<znamky year="2009">
umožňují s tímto jazykem pracovat.
+
<znamka lesson="tev" grade="1">
XML je standardní formát pro výměnu a sdílení informací
+
<znamka lesson="cjl" grade="2">
Dnešní doba přeje komunikaci. Komunikace není nic jiného, než výměna informací. V dnešním
+
<znamka lesson="pvy" grade="1">
globálním světě není možné pro výměnu dat používat nějaké proprietární formáty, které jsou svázány
+
</znamky>
s konkrétním softwarem nebo hardwarem. Nesluší se posílat informace ve wordovém formátu DOC,
+
</zak>
protože někdo s unixovým počítačem si je těžko přečte.
+
 
Je potřeba používat nějaký jednoduchý otevřený formát, který není úzce svázán s nějakou platformou
+
<zak>
nebo proprietární technologií.
+
<jmeno>Jakub</jmeno>
Takovým formátem je například XML. Otevřený formát je to proto, že jeho specifikace je každému
+
<prijmeni>Beneš</prijmeni>
zdarma k dispozici na serveru konsorcia W3C, které se stará i o mnoho dalších technologií
+
<cislo>2</cislo>
souvisejících s webem. Každý tak může bez problémů do svých aplikací implementovat podporu XML.
+
<znamky year="2008">
To představuje velký rozdíl oproti firemním formátům, k nimž není k dispozici žádná dokumentace a
+
<znamka lesson="tev" grade="1">
navíc se jedná v porovnání s XML o velice složité formáty, často binární.
+
<znamka lesson="cjl" grade="2">
Práci s XML usnadňuje i to, že celý formát je založen na obyčejném textu. I když pro většinu lidí
+
<znamka lesson="pvy" grade="1">
zůstane kód XML skryt a budou ho používat pouze aplikace pro vzájemnou komunikaci, není problém
+
</znamky>
kdykoliv otevřít XML dokument v libovolném textovém editoru a pár potřebných úprav provést
+
</zak>
ručně. Použití textového formátu může někomu připadat jako zbytečné plýtvání místem. Dnes se
+
<!-- atd. -->
však mnohem větší důraz klade na srozumitelnost a snadnou práci s daty jestli ušetříme pár kilobajtů
+
</zaci>
paměti, již nikoho příliš netrápí.
+
</trida>
Mezinárodní podpora
+
</pre>
XML je asi vůbec první formát, který hned od samého počátku dbá na potřeby jiných jazyků než je
+
 
angličtina. Jako znaková sada se používá ISO 10646. Pod tím si asi nepředstavíte nic konkrétního.
+
Kořenovým elementem je zde element <code>trida</code>. Ten obsahuje '''atributy''' <code>name</code>, <code>startYear</code> a <code>endYear</code>. Do kořenového elementu jsou vnořeny další elementy - element <code>tridniUcitel</code> a element <code>zaci</code>.
ISO 10646 je 32bitová znaková sada (Unicode), která dokáže pojmout všechny znaky dnes
+
 
používaných jazyků.
+
Každý element je tvořen '''uvozovací''' a '''koncovou značkou''' (tagem) a svým obsahem. Koncový tag obsahuje před jménem tagu lomítko (<code></tag></code>). Uvozovací tag může obsahovat atributy (<code>name="it4"</code>, <code>startYear="2008"</code>, apod.)
V XML proto můžeme vytvářet dokumenty, které obsahují texty v mnoha jazycích, najednou
+
 
můžeme míchat např. češtinu, angličtinu, ruštinu, arabštinu a korejštinu zcela dle libosti. Pokud by
+
<pre>
dokumenty obsahovaly pouze český text, znamenalo by ukládání přímo v ISO 10646 zbytečné
+
<mujTag>Obsah elementu</mujTag>
plýtvání místem.
+
</pre>
XML dokument proto může být v libovolném kódování (např. windows-1250, ISO 8859-2). Kódování
+
 
je však v každém dokumentu přesně určeno, takže odpadají problémy s konverzí z jednoho kódování
+
Element nemusí obsahovat žádný obsah.
do druhého. Každému je hned jasné, v jakém kódování je dokument.
+
 
Vysoký informační obsah
+
<pre>
 +
<mujTag></mujTag>
 +
</pre>
 +
 
 +
Tento zápis je ale zbytečně zdlouhavý a komplikovaný, proto nám XML umožňuje zapsat element bez obsahu tímto způsobem:
 +
 
 +
<pre>
 +
<mujTag />
 +
</pre>
 +
 
 +
Zde je uvozovací a koncový tag spojen do jednoho. Třída bez žáků by se tak zapsala takto:
 +
 
 +
<pre>
 +
<trida name="Prázdná třída" />
 +
</pre>
 +
 
 +
Tagy se '''nesmí''' křížit. Toto je špatný zápis:
 +
 
 +
<pre>
 +
<a><b></a></b>
 +
</pre>
 +
 
 +
Správně má být:
 +
 
 +
<pre>
 +
<a><b></b></a>
 +
</pre>
 +
 
 +
Jazyk XML je velice přísný v oblasti správného zápisu. Stačí jedna drobná chyba v zápisu a zpracování dokumentu skončí chybovou zprávou. Tímto se liší např. od HTML, kde prohlížeče spoustu chyb ignorují a snaží se uhodnout, jak to mělo být správně. Pokud je dokument správně napsán (odpovídá syntaxi (správnému XML zápisu)), říkáme, že se jedná o '''well-formed''' dokument.
 +
 
 +
Součástí dokumentu můžou být také instrukce pro nějaký jiný program. Můžeme tak do dokumentu zařadit odkaz na styl definující zobrazení v prohlížeči, formátovacímu programu můžeme naznačit, kde má zalomit stránku, nebo vložit do dokumentu kód některého skriptovacího jazyka. Tyto instrukce XML parser ignoruje, předá je nadřazené aplikaci záleží na ní, zda je nějak využije. Syntaxe je následující:
 +
 
 +
<pre>
 +
<?«identifikátor» «data»?>
 +
</pre>
 +
 
 +
Identifikátor je identifikátor externího programu, např. <code>php</code>. Můžeme tak do dokumentu vložit kód jazyka PHP, který nám do dokumentu vypíše dnešní datum.
 +
 
 +
<pre>
 +
<dokument>
 +
    <datum>Dnešní datum je <?php echo date("d.m.Y");?></datum>
 +
    <para>Nějaké další informace</para>
 +
</document>
 +
</pre>
 +
 
 +
Pomocí instrukcí je možno připojit k XML dokumentu i externí styl:
 +
<pre>
 +
<?xml-stylesheet tref="styl.css" type="text/css"?>
 +
</pre>
 +
 
 +
Do dokumentu také můžeme vložit libovolný znak pomocí tzv. entit. Znaková entita má tvar
 +
<code>&#x«kód znaku»;</code>, kde «kódznaku» je kód znaku ze znakové sady ISO 10646 (Unicode – UCS) zapsaný
 +
v šestnáctkové soustavě. Můžeme použít i tvar <code>&#«kód znaku»;</code>, kde je «kód znaku» zapsán
 +
v desítkové soustavě.
 +
 
 +
 
 +
== Využití v praxi ==
 +
 
 +
XML lze považovat za poměrně univerzální formát, který nalézá uplatnění v mnoha oblastech.
 +
 
 +
* '''B2B‚ business-to-business aplikace''' (výměna informací mezi obchodními partnery v elektronickém formátu)
 +
 
 +
* '''Inteligentní webové stránky''' (Možnost definice vlastních značek, které přesně vyznačí význam jednotlivých částí stránky, má pozitivní efekt na přesnost a rychlost vyhledávání informací. Obecný model umožňuje vývoj stránek pro mnoho zařízení s rozdílnými schopnostmi PC, mobilní telefony, WebTV nebo třeba herní konzole.)
 +
 
 +
* '''Metadata''' (Pro vyhledávání, ale hlavně pro klasifikaci dokumentů, je užitečné o nich znát co nejvíce metadat.)
 +
 
 +
* '''Elektronické publikování''' (Často potřebujeme jeden dokument v několika různých formátech jako tištěnou knihu, sadu provázaných webových stránek nebo hypertextovou příručku na CD-ROMu. Flexibilita stylových jazyků také umožňuje, aby se z jednoho zdroje generovalo několik druhů dokumentů s různým obsahem, některé údaje v technické dokumentaci jsou například tajné a vytisknou se pouze pro potřeby firmy, přičemž zákazníkům se ze stejného XML dokumentu vygeneruje okleštěná verze.)
 +
 
 +
* '''Univerzální datový formát''' (Pro ukládání složitějších parametrů programu se nehodí jednoduché způsoby typu INI soubor. Navíc je poměrně komplikované psát program, který bude načítat jednotlivé parametry z konfiguračního souboru. Pokud by si program ukládal data v XML, mohl by je programátor velice snadno číst pomocí některé z knihoven pro práci s XML.)
 +
 
 +
 
 +
Konkrétní použití XML:
 +
 
 +
* '''XHTML''' – XML alternativa jazyka HTML.
 +
* '''RSS''' – Rodina XML formátů, sloužící pro čtení novinek na webových stránkách.
 +
* '''SMIL''' – Synchronized Multimedia Integration Language, popisuje multimedia pomocí XML.
 +
* '''MathML''' – Mathematical Markup Language je značkovací jazyk pro popis matematických vzorců a symbolů pro použití na webu.
 +
* '''SVG''' – Scalable Vector Graphics je jazyk pro popis dvourozměrné vektorové grafiky, statické i dynamické (animace).
 +
* '''Jabber''' – Protokol pro Instant messaging.
 +
* '''SOAP''' – Protokol pro komunikaci mezi Webovými službami.
 +
* '''Office Open XML, OpenDocument''' – Souborový formát určený pro ukládání a výměnu dokumentů vytvořených kancelářskými aplikacemi.
 +
* '''a mnoho dalších''' (formát pro ukládání TV programu, formáty pro popis 3D scén, popis editace 2D grafiky, konfigurační soubory atd.)
 +
 
 +
 
 +
== XML a layout ==
 
Pomocí XML značek vyznačujeme v dokumentu význam jednotlivých částí textu. Říkáme toto je název
 
Pomocí XML značek vyznačujeme v dokumentu význam jednotlivých částí textu. Říkáme toto je název
 
výrobku, tohle zase telefonní číslo a tohle je číslo našeho účtu. Dokumenty obsahují mnohem více
 
výrobku, tohle zase telefonní číslo a tohle je číslo našeho účtu. Dokumenty obsahují mnohem více
 
informací, než kdyby se používalo prezentační značkovaní tohle je tučným písmem Arial o velikosti
 
informací, než kdyby se používalo prezentační značkovaní tohle je tučným písmem Arial o velikosti
 
12 bodů zarovnané vlevo.
 
12 bodů zarovnané vlevo.
XML dokumenty jsou informačně bohatší. To lze samozřejmě s výhodou využít v mnoha oblastech.
+
 
Největší přínos to bude znamenat samozřejmě pro prohledávání. Dnešní internetové vyhledávací
+
služby jako Google podporují fulltextové vyhledávání. Zadáme hledaná slova a doufáme, že se nám
+
vrátí dokumenty, které chceme. Pokud bychom mohli určit, že např. hledané slovo nás zajímá jako
+
název firmy, bylo by při použití XML a vhodném označkování hledání mnohem přesnější.
+
Snadná konverze do dalších formátů
+
 
V mnoha případech potřebujeme XML dokument zobrazit na nějakém běžném médiu na obrazovce,
 
V mnoha případech potřebujeme XML dokument zobrazit na nějakém běžném médiu na obrazovce,
 
na papíře. V tomto případě už samozřejmě chceme přesně ovlivnit, jak se obsah jednotlivých značek
 
na papíře. V tomto případě už samozřejmě chceme přesně ovlivnit, jak se obsah jednotlivých značek
 
zobrazí. XML samo o sobě žádné takové prostředky nenabízí. Existuje však naštěstí hned několik
 
zobrazí. XML samo o sobě žádné takové prostředky nenabízí. Existuje však naštěstí hned několik
 
stylových jazyků, které umožňují definovat, jak se mají jednotlivé elementy zobrazit. Souboru pravidel
 
stylových jazyků, které umožňují definovat, jak se mají jednotlivé elementy zobrazit. Souboru pravidel
nebo příkazů, které definují, jak se dokument převede do jiného formátu, se říká styl.
+
nebo příkazů, které definují, jak se dokument převede do jiného formátu, se říká '''styl'''.
 +
 
 
Výhodou je, že jeden styl můžeme aplikovat na mnoho dokumentů stejného typu. Dosáhneme tak
 
Výhodou je, že jeden styl můžeme aplikovat na mnoho dokumentů stejného typu. Dosáhneme tak
jednotného formátování. Zároveň můžeme na jeden dokument aplikovat několik různých stylů.
+
jednotného formátování. Zároveň můžeme na jeden dokument aplikovat několik různých stylů. Jedním stylem vygenerujeme postscriptový soubor pro naše DTP studio, druhým HTML kód
Jedním stylem vygenerujeme postscriptový soubor pro naše DTP studio, druhým HTML kód
+
 
pro zařazení na naše webové stránky a třetím třeba jen obsah dokumentu, který pošleme mailem
 
pro zařazení na naše webové stránky a třetím třeba jen obsah dokumentu, který pošleme mailem
 
šéfovi.
 
šéfovi.
Stylových jazyků existuje dnes několik. Mezi nejznámější patří asi kaskádové styly (CSS). Ty lze použít
+
 
 +
Stylových jazyků je mnoho, mezi nejznámější patří asi kaskádové styly (CSS). Ty lze použít
 
pouze pro jednoduché formátování, které dobře poslouží pro zobrazení dokumentu na obrazovce
 
pouze pro jednoduché formátování, které dobře poslouží pro zobrazení dokumentu na obrazovce
v XML editoru nebo v prohlížeči.
+
v XML editoru nebo v prohlížeči. Pro náročnější aplikace slouží jazyk '''XSL''' (eXtensible Stylesheet Language).
Pro náročnější aplikace slouží jazyk XSL (eXtensible Stylesheet Language).
+
 
Automatická kontrola struktury dokumentu
+
 
XML nám umožňuje definovat vlastní sadu značek, které chceme v dokumentu používat.
+
== Co to je eXtensible Stylesheet Language (XSLT styl) ==
Tuto možnost samozřejmě využít nemusíme, můžeme používat libovolné značky. Pokud si však
+
XSL zahrnuje 3 jazyky:
předem pomocí DTD definujeme, jaké značky může dokument obsahovat, bude náš další život
+
# XSL Transformace (XSLT): XML jazyk k převádění XML dokumentů,
mnohem lehčí. Zcela automaticky můžeme kontrolovat, zda dokument obsahuje pouze povolené
+
# XSL Formátovací Objekty (XSL-FO): XML jazyk pro specifikaci vizuálního formátování XML dokumentů,
značky.
+
# XML Path jazyk (XPath, česky „jazyk pro cesty v XML“): jazyk k adresování částí XML dokumentu, který ale sám není XML jazykem. Je používán například v XSLT.
Programu, který kontroluje správnost XML dokumentů, se říká parser . Tento fakt má velký význam i
+
 
při vývoji aplikací. Pro čtení dat můžeme použít parser, který za nás detekuje většinu chyb v datech.
+
Transformace '''XSLT''' (eXtensible Stylesheet Language Transformations) slouží k převodům zdrojových dat ve formátu XML do libovolného jiného požadovaného formátu, nejčastěji HTML, jiného XML nebo libovolných jiných datových struktur.
Obrovsky nám to ušetří práci. Kdo programuje, sám nejlépe ví, že většina kódu stejně ošetřuje různé
+
 
chybové stavy a chyby ve vstupních datech.
+
K provedení transformace jsou potřeba dva soubory:
DTD není jediný jazyk, který umožňuje definovat značky použitelné v dokumentech. DTD se hodí
+
* První soubor obsahuje zdrojová data, která budou transformována. Struktura tohoto souboru vyjma obecných vlastností XML není blíže specifikována.
pro popis formátů, které se používají především pro textové dokumenty. Neobsahuje však nástroje
+
* Druhý soubor obsahuje vzorec pro transformaci a musí být napsán v jazyce XSL.
pro kontrolu různých typů dat jako čísla, měnové údaje, údaje o datu a čase. To je přitom velice
+
 
důležité pro aplikace, které si pomocí XML posílají data spíše databázového charakteru. Pro tyto
+
 
potřeby existuje několik dalších jazyků, umožňujících určit správné schéma dokumentu.
+
== Odkazování v XML dokumentu ==
Hypertext a odkazy
+
XML umožňuje vytváření odkazů v rámci jednoho dokumentu i mezi dokumenty
XML samozřejmě umožňuje vytváření odkazů v rámci jednoho dokumentu i mezi dokumenty
+
 
navzájem. Nabízí však mnoho možností nad rámec odkazů, které známe z HTML.
 
navzájem. Nabízí však mnoho možností nad rámec odkazů, které známe z HTML.
 
Můžeme vytvářet i vícesměrné odkazy, které spojují několik dokumentů dohromady. Užitečná je i
 
Můžeme vytvářet i vícesměrné odkazy, které spojují několik dokumentů dohromady. Užitečná je i
 
možnost uložení odkazů zcela mimo dokumenty, kterých se týkají. Tímto způsobem lze vytvářet
 
možnost uložení odkazů zcela mimo dokumenty, kterých se týkají. Tímto způsobem lze vytvářet
 
různé anotace a komentáře k již existujícím stránkám.
 
různé anotace a komentáře k již existujícím stránkám.
K čemu všemu můžeme XML použít
+
 
· B2B‚ business-to-business aplikace (výměna informací mezi obchodními partnery
+
 
v elektronickém formátu)
+
== Co to je definice typu dokumentu (DTD) ==
· Inteligentní webové stránky (Možnost definice vlastních značek, které přesně vyznačí
+
<del>DTD (Document Type Definition) je jedna z důležitých vlastností, které převzalo XML z jazyka SGML. Umožňuje definovat vlastní sadu značek (elementy a atributy), které budou XML dokumentu k dispozici. V definici můžeme určit, kde se dané elementy a atributy mohou nacházet a jaký mohou mít obsah či hodnotu. Jestliže XML dokument odpovídá všem pravidlům v určitém DTD, říkáme, že je dokument '''validní'''.</del>
význam jednotlivých částí stránky, má pozitivní efekt na přesnost a rychlost vyhledávání
+
 
informací. Obecný model umožňuje vývoj stránek pro mnoho zařízení s rozdílnými
+
<del>DTD např. umožňuje určit, že element <code>trida</code> smí obsahovat pouze elementy <code>tridniUcitel</code> a <code>zaci</code> a že jeho jedinými povolenými atributy jsou <code>name</code>, <code>startYear</code> a <code>endYear</code>. Dále můžeme určit povolené atributy pro element <code>tridniUcitel</code> a také říct že se v elementu <code>trida</code> může vyskytovat pouze jednou. A nakonec určíme, co smí obsahovat element <code>zaci</code>.</del>
schopnostmi PC, mobilní telefony, WebTV nebo třeba herní konzole.)
+
 
· Metadata (Pro vyhledávání, ale hlavně pro klasifikaci dokumentů, je užitečné o nich znát
+
<del>Jedná se v podstatě o pravidla pro daný XML dokument. DTD nám umožňuje říct, co smí XML dokument obsahovat a v jaké podobě.</del>
co nejvíce metadat.)
+
 
· Elektronické publikování (Často potřebujeme jeden dokument v několika různých formátech
+
jako tištěnou knihu, sadu provázaných webových stránek nebo hypertextovou příručku
+
na CD-ROMu. Flexibilita stylových jazyků také umožňuje, aby se z jednoho zdroje generovalo
+
několik druhů dokumentů s různým obsahem, některé údaje v technické dokumentaci jsou
+
například tajné a vytisknou se pouze pro potřeby firmy, přičemž zákazníkům se ze stejného
+
XML dokumentu vygeneruje okleštěná verze.)
+
· Univerzální datový formát (Pro ukládání složitějších parametrů programu se nehodí
+
jednoduché způsoby typu INI soubor. Navíc je poměrně komplikované psát program, který
+
bude načítat jednotlivé parametry z konfiguračního souboru. Pokud by si program ukládal
+
data v XML, mohl by je programátor velice snadno číst pomocí některé z knihoven pro práci
+
s XML.)
+
Syntaxe XML
+
Na rozdíl od jazyka HTML, kde můžeme udělat spoustu chyb, se kterými si prohlížeče většinou poradí,
+
je správný zápis XML dokumentů předpokladem pro jejich další zpracování.
+
Každý XML dokument se skládá z elementů, které jsou do sebe navzájem vnořené. Elementy se
+
v textu vyznačují pomocí tzv. tagů. Většině elementů odpovídají dva tagy - počáteční a ukončovací.
+
<para>Toto je obsah elmentu para.</para>
+
Ukázka obsahuje jeden element para. Jeho obsah je vyznačen pomocí tagů <para> (počáteční tag) a
+
</para> (ukončovací tag).
+
Názvy tagů se zapisují mezi znaky ‘<’ a ‘>’. Ukončovací tag má před svým názvem ještě znak ‘/’, aby se
+
snadno odlišil od počátečního.
+
Některé elementy nemusejí mít žádný obsah. Můžeme je samozřejmě zapisovat tak,
+
že za počátečním tagem uvedeme hned ten ukončovací.
+
<par>Toto je obsah elmentu par.<br></br>A tohle taky.</par>
+
Není to však příliš pohodlné, a proto můžeme v XML použít ještě jednu variantu tagu, která říká,
+
že element nemá žádný obsah. Za jméno elementu v počátečním tagu se uvede znak ‘/’. Ukončovací
+
tag se pak už nepoužije.
+
<par>Toto je obsah elmentu par.<br/>A tohle taky.</par>
+
Elementy jsou základním stavebním kamenem každého dokumentu. U každého počátečního tagu
+
můžeme použít ještě atributy. Atributy se obvykle používají k upřesnění významu elementu.
+
<par zabezpeceni="důvěrné">Nějaká tajná informace.</par>
+
Sekce CDATA
+
Pokud potřebujeme do dokumentu vložit větší kus textu, kde se hojně používají znaky se speciálním
+
významem jako ‘<’, ‘>’ a ‘&’, je nepohodlné je zapisovat pomocí znakových entit. Sekce CDATA
+
oceníme zejména v případech, kdy je součástí XML dokumentu kód nějakého programu nebo HTML
+
či XML kód.
+
<script language="JavaScript">
+
<![CDATA[
+
for (i=0; i<10; i++) document.writeln("&lt;p&gt;Ahoj&lt;/p&gt;");
+
]]>
+
</script>
+
Bez použití sekce CDATA by byl zápis přece jen krkolomný:
+
<script language="JavaScript">
+
<![CDATA[
+
for (i=0; i<10; i++) document.writeln("<p>Ahoj</p>");
+
]]>
+
</script>
+
Určení kódování použitého v dokumentu
+
Pokud v dokumentu používáme jiné kódování než UTF-8 nebo UTF-16, musíme ho specifikovat
+
pomocí XML deklarace, která musí představovat první řádku dokumentu.
+
Nejjednodušší XML deklarace má následující tvar.
+
<?xml version="1.0" encoding="windows-1250"?>
+
<dokument>
+
Dokument si vesele píši ve starém dobrém NotePadu.
+
</dokument>
+
Zápis znaku s libovolným kódem
+
Může se stát, že náš editor nepodporuje všechny znaky, které potřebujeme použít. Proto můžeme
+
do XML dokumentu vložit libovolný znak pomocí znakové entity. Znaková entita má tvar
+
&#x«kód znaku»;, kde «kódznaku» je kód znaku ze znakové sady ISO 10646 (Unicode – UCS) zapsaný
+
v šestnáctkové soustavě. Můžeme použít i tvar &#«kód znaku»;, kde je «kód znaku» zapsán
+
v desítkové soustavě.
+
Instrukce pro zpracování
+
XML dokumenty mohou být zpracovávány různými programy. Někdy může být užitečné
+
do dokumentu uložit řídící informace, které jsou určeny pouze pro některý program. Můžeme tak
+
do dokumentu zařadit odkaz na styl definující zobrazení v prohlížeči, formátovacímu programu
+
můžeme naznačit, kde má zalomit stránku. Moderní skriptovací jazyky pro generování dynamických
+
webových stránek se také zapisují přímo do těla dokumentů. Pro všechny tyto účely má XML
+
k dispozici standardní způsob pro zařazení nestandardních informací. Tyto instrukce XML parser
+
ignoruje, předá je nadřazené aplikaci záleží na ní, zda je nějak využije.
+
Syntaxe instrukcí je velice jednoduchá:
+
<?«identifikátor» «data»?>
+
Pomocí instrukcí pro zpracování lze do dokumentů zařadit například příkazy jazyka PHP:
+
<dokument>
+
<datum> Dnešní datum je <?php echo Date("d.m.Y")?></datum>
+
<para>Nějaké další informace</para>
+
</document>
+
Pomocí instrukcí pro zpracování se k XML dokumentu připojují i styly, definující zobrazení prohlížeči:
+
<?xml version="1.0" encoding="utf-8"?>
+
<?xml-stylesheet tref="styl.css" type="text/css"?>
+
<clanek>
+
<zahlavi>
+
<rubrika>Téma týdne</rubrika>
+
<nazev>XML a kaskádové styly</nazev>
+
<autor>Jiří Kosek</autor>
+
</zahlavi>
+
...
+
</clanek>
+
Definice typu dokumentu (DTD)
+
 
Definice typu dokumentu (DTD) říká, které elementy a atributy můžeme v dokumentu použít. Navíc
 
Definice typu dokumentu (DTD) říká, které elementy a atributy můžeme v dokumentu použít. Navíc
 
je zde definováno, v jakých vzájemných vztazích mohou být jednotlivé elementy použity. DTD je tedy
 
je zde definováno, v jakých vzájemných vztazích mohou být jednotlivé elementy použity. DTD je tedy
Řádka 246: Řádka 226:
 
používá mnoho DTD, které vyhovují různým požadavkům. Mezi jedno z nejznámějších patří například
 
používá mnoho DTD, které vyhovují různým požadavkům. Mezi jedno z nejznámějších patří například
 
DTD DocBook, které definuje elementy a atributy vhodné pro značkování technické dokumentace.
 
DTD DocBook, které definuje elementy a atributy vhodné pro značkování technické dokumentace.
Tím, že naše dokumenty založíme na určitém DTD, získáme hned dvě výhody. Jednak můžeme
+
 
pomocí parseru kontrolovat, zda má náš dokument strukturu odpovídající danému DTD. Druhá
+
DTD se hodí pro popis formátů, které se používají především pro textové dokumenty. Neobsahuje však nástroje
výhoda je patrná při použití standardních DTD jako HTML nebo DocBook k dispozici budeme mít
+
pro kontrolu různých typů dat jako čísla, měnové údaje, údaje o datu a čase. To je přitom velice
mnoho užitečných a jednoúčelových nástrojů navržených pro konkrétní DTD. Například není problém
+
důležité pro aplikace, které si pomocí XML posílají data spíše databázového charakteru. Pro tyto
sehnat pro DocBook definici stylů vhodných pro formátování dokumentace či programy, které umí
+
potřeby existuje několik dalších jazyků, umožňujících určit správné schéma dokumentu.
dokumenty DocBooku konvertovat do HTML a dalších formátů.
+
 
Pokud chceme využít výhody DTD, musíme použité DTD určit pomocí deklarace typu dokumentu
+
K jakému DTD se náš XML dokument hlásí oznámíme použitím tzv. '''DOCTYPE''', hned za XML deklarací. Pro opakované použití bývá DTD uloženo v samostatném souboru.
(DOCTYPE), která se umísťuje na samotný začátek dokumentu, ihned za XML deklaraci. Obvykle je
+
 
DTD uloženo v samostatném souboru, aby mohlo být opakovaně využíváno mnoha dokumenty.
+
<pre>
V tomto případě má deklarace tvar:
+
<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE «kořenový element» SYSTEM "«URL»">
 
<!DOCTYPE «kořenový element» SYSTEM "«URL»">
«URL» přitom udává adresu nebo jméno souboru, ve kterém je uloženo DTD. «Kořenový element» je
+
</pre>
jméno elementu, ve kterém bude obsažen celý document (instance DTD).
+
 
<!DOCTYPE kniha SYSTEM "kniha.dtd">
+
* kořenový element - jméno elementu, ve kterém bude obsažen celý document, v našem případě <code>trida</code>
Jinou možností je umístit DTD přímo do dokumentu. Není to ale příliš častý způsob, protože ztrácíme
+
* URL - adresa nebo jméno souboru, ve kterém je DTD uloženo
možnost sdílení jednoho DTD mezi několika dokumenty.
+
 
 +
<pre>
 +
<?xml version="1.0" encoding="UTF-8" ?>
 +
<!DOCTYPE trida SYSTEM "denifinice-tridy.dtd">
 +
</pre>
 +
 
 +
Můžeme také DTD zapsat přímo do XML dokumentu:
 +
 
 +
<pre>
 +
<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE kniha [
 
<!DOCTYPE kniha [
 
« ... DTD ... »
 
« ... DTD ... »
 
]>
 
]>
Když víme, jak připojit DTD k dokumentu, můžeme se podívat na to, jak samotné DTD vypadá.
+
</pre>
 +
 
 +
=== Syntaxe DTD ===
 +
 
 
DTD obsahuje:
 
DTD obsahuje:
· deklarace elementů
+
* deklarace elementů
· deklarace atributů
+
* deklarace atributů
· deklarace entit
+
* deklarace entit
Deklarace elementů
+
 
Nejjednodušší je prázdný element, který nemůže obsahovat žádné další elementy nebo text.
+
==== Deklarace elementů ====
Příkladem takového elementu mohou být například elementy br a hr, které známe z HTML.
+
 
Jejich deklarace by vypadala následovně:
+
* '''prázdný element''' - nemůže obsahovat text ani další elementy
<!ELEMENT br EMPTY>
+
** v HTML např. <code>br</code> pro nový řádek a <code>hr</code> pro vložení horizontální čáry <pre><!ELEMENT br EMPTY>&#13;<!ELEMENT hr EMPTY></pre>
<!ELEMENT hr EMPTY>
+
* '''element obsahující další elementy''' - např. HTML element <code><html></code> může obsahovat elementy <code>head</code> a <code>body</code> <pre><!ELEMENT html (head, body)></pre>
Pokud má tedy element html obsahovat záhlaví (head) a tělo (body), použijeme deklaraci:
+
** pokud chceme vyjádřit, že element může obsahovat jenom jeden z uvedených použijeme <code>|</code> <pre><!ELEMENT potomek (dcera | syn)></pre>
<!ELEMENT html (head, body)>
+
** článek vždy obsahuje název, ale nemusí obsahovat autora <pre><!ELEMENT clanek (nazev, autor?)></pre>
Pokud naopak elementy oddělíme znakem ‘|’, může být v dokumentu uveden pouze jeden z nich:
+
** chceme vyjádřit, že se nějaký element může vyskytovat opakovaně, minimálně však jednou (např. kniha obsahuje minimálně jednu kapitolu) <pre><!ELEMENT kniha (kapitola+)></pre>
<!ELEMENT potomek (dcera | syn)>
+
** vraťme se k příkladu se článkem - nyní může článek obsahovat více autorů, nebo také žádného (tj. 0 až N autorů) - použijeme hvězdičku <pre><!ELEMENT clanek (nazev, autor*)></pre>
Pokud například článek obsahuje vždy název, ale autora obsahovat nemusí, můžeme použít
+
*  '''element smí obsahovat pouze text a ne další elementy''' - použijeme speciální slovo <code>#PCDATA</code> <pre><!ELEMENT em (#PCDATA)></pre>
následující deklaraci:
+
 
<!ELEMENT clanek (nazev, autor?)>
+
==== Deklarace atributů ====
Další obvyklou situací je, že nějaký element se může opakovat, ale musí být přítomen alespoň jednou.
+
Například kniha se skládá z několika kapitol a musí obsahovat alespoň jednu kapitolu:
+
<!ELEMENT kniha (kapitola+)>
+
Vraťme se k předchozímu příkladu a předpokládejme, že článek může mít více autorů, ale nemusí mít
+
i autora žádného. V tomto případě s výhodou využijeme znak ‘*’, který indikuje libovolný počet
+
opakování.
+
<!ELEMENT clanek (nazev, autor*)>
+
Speciální pozornost si zaslouží případ, kdy je obsahem elementu již samotný text. To vyjádříme
+
pomocí slova #PCDATA. Pokud by například element em obsahoval již pouze text, a ne další
+
elementy, použili bychom pro jeho deklaraci zápis:
+
<!ELEMENT em (#PCDATA)>
+
Deklarace atributů
+
 
V XML může mít každý element libovolné množství atributů. Atributy se většinou používají
 
V XML může mít každý element libovolné množství atributů. Atributy se většinou používají
 
pro připojení různých metainformací k elementům. Deklarace atributů pro element má poměrně
 
pro připojení různých metainformací k elementům. Deklarace atributů pro element má poměrně
 
jednoduchý tvar:
 
jednoduchý tvar:
<!ATTLIST «jméno elementu» «deklarace atributů»>
+
 
Po deklaraci:
+
<pre><!ATTLIST «jméno elementu» «deklarace atributů»></pre>
<!ATTLIST kniha autor CDATA ...>
+
 
Můžeme v dokumentu používat atribut následovně:
+
Deklarace:
<kniha autor="Čapek">
+
 
Deklarace entit
+
<pre><!ATTLIST kniha autor CDATA ...></pre>
 +
 
 +
Nám umožní používat u elementu <code>kniha</code> atribut <code>autor</code>:
 +
 
 +
<pre><kniha autor="Čapek"></pre>
 +
 
 +
==== Deklarace entit ====
 +
 
 
V XML můžeme předdefinovat libovolné množství entit. Každá bude mít vyhrazen svůj identifikátor.
 
V XML můžeme předdefinovat libovolné množství entit. Každá bude mít vyhrazen svůj identifikátor.
Např.: <!ENTITY quot "&#34;">
+
 
<!ENTITY logo SYSTEM "/obr/logo.eps" NDATA "EPS">
+
Např.
 +
<pre><!ENTITY quot "&amp;#34;"></pre>
 +
 
 +
nebo
 +
 
 +
<pre><!ENTITY logo SYSTEM "/obr/logo.eps" NDATA "EPS"></pre>
 +
 
 
Takto definovanou entitu nemůžeme přímo vložit do textu dokumentu a ani by to nemělo smysl.
 
Takto definovanou entitu nemůžeme přímo vložit do textu dokumentu a ani by to nemělo smysl.
Můžeme na ní však odkázat pomocí atributu, který má typ ENTITY nebo ENTITIES.
+
Můžeme na ní však odkázat pomocí atributu, který má typ <code>ENTITY</code> nebo <code>ENTITIES</code>.
Od roku 1999 má naše firma logo, které je na obrázku <picture
+
Od roku 1999 má naše firma logo, které je na obrázku <code><picture name="logo"/></code>
name="logo"/>
+
 
Kontrola dokumentu podle DTD
+
=== Kontrola dokumentu podle DTD ===
Výhoda ukládání dokumentů v XML spočívá především v možnosti zachytit pomocí elementů
+
 
strukturu dokumentu. Už víme, že základním nástrojem, který se při práci s XML dokumenty používá,
+
Jak už bylo řečeno, pokud XML dokument odpovídá struktuře popsané pomocí DTD, říkáme o XML dokument, že je '''validní''', jinak je '''invalidní'''. Validita dokumentu je tzv. 2 stupeň správnosti dokumentu. Prvním stupněm je tzv. syntaktická správnost, tj. zda-li je dokument napsán bez syntaktických chyb (neuzavřené tagy a hodnoty, překřížené tagy, překlepy v názvech elementů, atributů, apod.). Pokud je dokument syntakticky správný, říkáme, že je tzv. '''well-formed'''.
je parser. Parser je program, který kontroluje, zda je dokument správně strukturovaný (well-formed).
+
 
Lepší parsery zároveň kontrolují, zda dokument odpovídá danému DTD (samozřejmě jen pokud DTD
+
[[Soubor:Xml-kontrola-spravnosti.png|center]]
pro dokument existuje). Vznikají i další způsoby, jak popsat pravidla pro určitou skupinu dokumentů
+
 
(např. XML schémata). Pro ně samozřejmě také existují parsery.
+
 
Specifikace XML definuje několik úrovní správnosti dokumentu. Pokud dokument splňuje základní
+
Pro zpracování XML dokumentu se používá tzv. '''parser'''. Ten načítá XML dokument a poskytuje nám snadný způsob, jak přečíst data z XML dokumentu, a zároveň kontroluje jeho syntaktickou správnost a v případě přítomnosti DTD i validitu dokumentu. Parser bývá k dispozici ve dvou provedeních:
syntaktická pravidla, jako párové tagy apod., je správně strukturovaný. Pokud dokument obsahuje
+
* knihovny pro různé programovací jazyky, které můžeme použít v našich programech
DTD nebo je na něj odkaz v deklaraci typu dokumentu, parser kontroluje, zda dokument odpovídá
+
* jednoduché programy, kterým na vstup předáme XML dokument a na výstupu obdržíme případný přehled chyb v dokumentu.
DTD. Pokud ano, říkáme, že dokument je validní. Pokud dokument porušuje pravidla daná v DTD, je
+
 
invalidní. To, že je dokument invalidní, se nevylučuje s tím, že je správně strukturovaný. Zároveň také
+
Můžeme také využít parser zabudovaný v prohlížeči, který XML podporuje (většina webových prohlížečů, apod.).
platí, že validní dokument musí být správně strukturovaný.
+
Parsery dnes existují ve dvou podobách. Tou první jsou knihovny pro různé programovací jazyky,
+
které můžeme využívat v našich programech. Parser nám pak kromě detekce chyb v dokumentu
+
umožní velmi snadné čtení dat z XML dokumentů.
+
Druhá skupina jsou parsery v podobě jednoduchých programů, na jejichž vstup předáme XML
+
dokument a na výstupu obdržíme případný přehled chyb v dokumentu. Můžeme také využít parser
+
zabudovaný přímo v prohlížeči s podporou XML.
+
Zdroj informací:
+
1. XML pro úplné začátečníky, Lucie Grusová, COMPUTER PRESS
+
2. XML pro každého, Jiří Kosek, Grada Publishing
+

Verze z 22. 4. 2012, 14:33

  • obecný jazyk SGML
  • jak vypadá XML dokument, využití v praxi
  • XML a layout, co to je eXtensible Stylesheet Language (XSLT styl)
  • co to je definice typu dokumentu (DTD)


Obsah

Obecný jazyk SGML

Vztah mezi SGML, XML a HTML

XML patří do skupiny tzv. značkovacích jazyků. Tyto jazyky umožňují označovat části textu značkami (tagy).

Předchůdcem XML byl jeden z prvních značkovací jazyků SGML (Standard Generalized Markup Language). Ten byl přijat v roce 1986 jako ISO norma. Asi prvním známých značkovacím jazykem byl jazyk GML, který byl vytvořen při práci na systému pro uchovávání a následné využití právních textů pro IBM. Autoři se museli vypořádat s nekompatibilitou jednotlivých systémů a programů a nejsnazší cesta vedla právě přes vytvoření nějakého obecného značkovacího jazyka. Tak vzniklo SGML.

Vlastnosti

  • umožňuje definovat vlastní značkovací jazyky (pomocí DTD viz dále)
  • umožňuje nastavit spoustu volitelných parametrů (maximální délku názvů značek, určit znaky sloužící jako oddělovače značek od textu a mnohem mnohem víc)
  • velice obecný a složitý/komplexní

Na jeho základech stojí mnoho dalších značkovacích jazyků (HTML, XML, atd.).

Po letech používání jazyka SGML se ukázalo, že se ve skutečnosti používá jen část jeho skutečných možností. Tato část byla v roce 1996 vybrána jako základ pro nově vznikající jazyk XML.


Jak vypadá XML dokument

Na začátku každého XML dokumentu se může nacházet (měla by, je to slušnost) tzv. XML deklarace. V základu vypadá takto:

<?xml version="1.0" ?>

Deklarace sděluje programu, který bude dokument zpracovávat, některé důležité informace. V uvedeném případě se jedná o informaci, že dokument je zapsán podle XML verze 1.0 (aktuální je verze 1.1). Deklarace musí obsahovat alespoň informaci o použité verzi XML. Poté je možné ještě určit použité kódování:

<?xml version="1.0" encoding="UTF-8" ?>

Uvedené informace musí být uvedeny přesně v tomto pořadí. Když není hodnota encoding uvedena, je předpokládano použití výchozího kódování ISO 10646. Jedná se o 32-bitovou znakovou sadu, která je schopná pojmout všechny znaky dnes používaných jazyků. Je téměř shodná se standardem Unicode (zdroj).

Za XML deklarací se nechází kořenový element. Kořenový element je nejvyšším elementem dokumentu, všechny ostatní elementy jsou do něj vnořeny. XML dokument musí obsahovat alespoň jeden element (třeba jenom kořenový). Kořenový element je jenom jeden.

<?xml version="1.0" encoding="UTF-8" ?>
<trida name="it4" startYear="2008" endYear="2012">
	<tridniUcitel name="Ivana Šmejkalová" alias="SJ" />
	<zaci>
		<zak>
			<jmeno>Mirek</jmeno>
			<prijmeni>Balog</prijmeni>
			<cislo>1</cislo>
			<znamky year="2008">
				<znamka lesson="tev" grade="1">
				<znamka lesson="cjl" grade="2">
				<znamka lesson="pvy" grade="1">
			</znamky>

			<znamky year="2009">
				<znamka lesson="tev" grade="1">
				<znamka lesson="cjl" grade="2">
				<znamka lesson="pvy" grade="1">
			</znamky>
		</zak>

		<zak>
			<jmeno>Jakub</jmeno>
			<prijmeni>Beneš</prijmeni>
			<cislo>2</cislo>
			<znamky year="2008">
				<znamka lesson="tev" grade="1">
				<znamka lesson="cjl" grade="2">
				<znamka lesson="pvy" grade="1">
			</znamky>
		</zak>
		<!-- atd. -->
	</zaci>
</trida>

Kořenovým elementem je zde element trida. Ten obsahuje atributy name, startYear a endYear. Do kořenového elementu jsou vnořeny další elementy - element tridniUcitel a element zaci.

Každý element je tvořen uvozovací a koncovou značkou (tagem) a svým obsahem. Koncový tag obsahuje před jménem tagu lomítko (</tag>). Uvozovací tag může obsahovat atributy (name="it4", startYear="2008", apod.)

<mujTag>Obsah elementu</mujTag>

Element nemusí obsahovat žádný obsah.

<mujTag></mujTag>

Tento zápis je ale zbytečně zdlouhavý a komplikovaný, proto nám XML umožňuje zapsat element bez obsahu tímto způsobem:

<mujTag />

Zde je uvozovací a koncový tag spojen do jednoho. Třída bez žáků by se tak zapsala takto:

<trida name="Prázdná třída" />

Tagy se nesmí křížit. Toto je špatný zápis:

<a><b></a></b>

Správně má být:

<a><b></b></a>

Jazyk XML je velice přísný v oblasti správného zápisu. Stačí jedna drobná chyba v zápisu a zpracování dokumentu skončí chybovou zprávou. Tímto se liší např. od HTML, kde prohlížeče spoustu chyb ignorují a snaží se uhodnout, jak to mělo být správně. Pokud je dokument správně napsán (odpovídá syntaxi (správnému XML zápisu)), říkáme, že se jedná o well-formed dokument.

Součástí dokumentu můžou být také instrukce pro nějaký jiný program. Můžeme tak do dokumentu zařadit odkaz na styl definující zobrazení v prohlížeči, formátovacímu programu můžeme naznačit, kde má zalomit stránku, nebo vložit do dokumentu kód některého skriptovacího jazyka. Tyto instrukce XML parser ignoruje, předá je nadřazené aplikaci záleží na ní, zda je nějak využije. Syntaxe je následující:

<?«identifikátor» «data»?>

Identifikátor je identifikátor externího programu, např. php. Můžeme tak do dokumentu vložit kód jazyka PHP, který nám do dokumentu vypíše dnešní datum.

<dokument>
    <datum>Dnešní datum je <?php echo date("d.m.Y");?></datum>
    <para>Nějaké další informace</para>
</document>

Pomocí instrukcí je možno připojit k XML dokumentu i externí styl:

<?xml-stylesheet tref="styl.css" type="text/css"?>

Do dokumentu také můžeme vložit libovolný znak pomocí tzv. entit. Znaková entita má tvar &#x«kód znaku»;, kde «kódznaku» je kód znaku ze znakové sady ISO 10646 (Unicode – UCS) zapsaný v šestnáctkové soustavě. Můžeme použít i tvar &#«kód znaku»;, kde je «kód znaku» zapsán v desítkové soustavě.


Využití v praxi

XML lze považovat za poměrně univerzální formát, který nalézá uplatnění v mnoha oblastech.

  • B2B‚ business-to-business aplikace (výměna informací mezi obchodními partnery v elektronickém formátu)
  • Inteligentní webové stránky (Možnost definice vlastních značek, které přesně vyznačí význam jednotlivých částí stránky, má pozitivní efekt na přesnost a rychlost vyhledávání informací. Obecný model umožňuje vývoj stránek pro mnoho zařízení s rozdílnými schopnostmi PC, mobilní telefony, WebTV nebo třeba herní konzole.)
  • Metadata (Pro vyhledávání, ale hlavně pro klasifikaci dokumentů, je užitečné o nich znát co nejvíce metadat.)
  • Elektronické publikování (Často potřebujeme jeden dokument v několika různých formátech jako tištěnou knihu, sadu provázaných webových stránek nebo hypertextovou příručku na CD-ROMu. Flexibilita stylových jazyků také umožňuje, aby se z jednoho zdroje generovalo několik druhů dokumentů s různým obsahem, některé údaje v technické dokumentaci jsou například tajné a vytisknou se pouze pro potřeby firmy, přičemž zákazníkům se ze stejného XML dokumentu vygeneruje okleštěná verze.)
  • Univerzální datový formát (Pro ukládání složitějších parametrů programu se nehodí jednoduché způsoby typu INI soubor. Navíc je poměrně komplikované psát program, který bude načítat jednotlivé parametry z konfiguračního souboru. Pokud by si program ukládal data v XML, mohl by je programátor velice snadno číst pomocí některé z knihoven pro práci s XML.)


Konkrétní použití XML:

  • XHTML – XML alternativa jazyka HTML.
  • RSS – Rodina XML formátů, sloužící pro čtení novinek na webových stránkách.
  • SMIL – Synchronized Multimedia Integration Language, popisuje multimedia pomocí XML.
  • MathML – Mathematical Markup Language je značkovací jazyk pro popis matematických vzorců a symbolů pro použití na webu.
  • SVG – Scalable Vector Graphics je jazyk pro popis dvourozměrné vektorové grafiky, statické i dynamické (animace).
  • Jabber – Protokol pro Instant messaging.
  • SOAP – Protokol pro komunikaci mezi Webovými službami.
  • Office Open XML, OpenDocument – Souborový formát určený pro ukládání a výměnu dokumentů vytvořených kancelářskými aplikacemi.
  • a mnoho dalších (formát pro ukládání TV programu, formáty pro popis 3D scén, popis editace 2D grafiky, konfigurační soubory atd.)


XML a layout

Pomocí XML značek vyznačujeme v dokumentu význam jednotlivých částí textu. Říkáme toto je název výrobku, tohle zase telefonní číslo a tohle je číslo našeho účtu. Dokumenty obsahují mnohem více informací, než kdyby se používalo prezentační značkovaní tohle je tučným písmem Arial o velikosti 12 bodů zarovnané vlevo.

V mnoha případech potřebujeme XML dokument zobrazit na nějakém běžném médiu na obrazovce, na papíře. V tomto případě už samozřejmě chceme přesně ovlivnit, jak se obsah jednotlivých značek zobrazí. XML samo o sobě žádné takové prostředky nenabízí. Existuje však naštěstí hned několik stylových jazyků, které umožňují definovat, jak se mají jednotlivé elementy zobrazit. Souboru pravidel nebo příkazů, které definují, jak se dokument převede do jiného formátu, se říká styl.

Výhodou je, že jeden styl můžeme aplikovat na mnoho dokumentů stejného typu. Dosáhneme tak jednotného formátování. Zároveň můžeme na jeden dokument aplikovat několik různých stylů. Jedním stylem vygenerujeme postscriptový soubor pro naše DTP studio, druhým HTML kód pro zařazení na naše webové stránky a třetím třeba jen obsah dokumentu, který pošleme mailem šéfovi.

Stylových jazyků je mnoho, mezi nejznámější patří asi kaskádové styly (CSS). Ty lze použít pouze pro jednoduché formátování, které dobře poslouží pro zobrazení dokumentu na obrazovce v XML editoru nebo v prohlížeči. Pro náročnější aplikace slouží jazyk XSL (eXtensible Stylesheet Language).


Co to je eXtensible Stylesheet Language (XSLT styl)

XSL zahrnuje 3 jazyky:

  1. XSL Transformace (XSLT): XML jazyk k převádění XML dokumentů,
  2. XSL Formátovací Objekty (XSL-FO): XML jazyk pro specifikaci vizuálního formátování XML dokumentů,
  3. XML Path jazyk (XPath, česky „jazyk pro cesty v XML“): jazyk k adresování částí XML dokumentu, který ale sám není XML jazykem. Je používán například v XSLT.

Transformace XSLT (eXtensible Stylesheet Language Transformations) slouží k převodům zdrojových dat ve formátu XML do libovolného jiného požadovaného formátu, nejčastěji HTML, jiného XML nebo libovolných jiných datových struktur.

K provedení transformace jsou potřeba dva soubory:

  • První soubor obsahuje zdrojová data, která budou transformována. Struktura tohoto souboru vyjma obecných vlastností XML není blíže specifikována.
  • Druhý soubor obsahuje vzorec pro transformaci a musí být napsán v jazyce XSL.


Odkazování v XML dokumentu

XML umožňuje vytváření odkazů v rámci jednoho dokumentu i mezi dokumenty navzájem. Nabízí však mnoho možností nad rámec odkazů, které známe z HTML. Můžeme vytvářet i vícesměrné odkazy, které spojují několik dokumentů dohromady. Užitečná je i možnost uložení odkazů zcela mimo dokumenty, kterých se týkají. Tímto způsobem lze vytvářet různé anotace a komentáře k již existujícím stránkám.


Co to je definice typu dokumentu (DTD)

DTD (Document Type Definition) je jedna z důležitých vlastností, které převzalo XML z jazyka SGML. Umožňuje definovat vlastní sadu značek (elementy a atributy), které budou XML dokumentu k dispozici. V definici můžeme určit, kde se dané elementy a atributy mohou nacházet a jaký mohou mít obsah či hodnotu. Jestliže XML dokument odpovídá všem pravidlům v určitém DTD, říkáme, že je dokument validní.

DTD např. umožňuje určit, že element trida smí obsahovat pouze elementy tridniUcitel a zaci a že jeho jedinými povolenými atributy jsou name, startYear a endYear. Dále můžeme určit povolené atributy pro element tridniUcitel a také říct že se v elementu trida může vyskytovat pouze jednou. A nakonec určíme, co smí obsahovat element zaci.

Jedná se v podstatě o pravidla pro daný XML dokument. DTD nám umožňuje říct, co smí XML dokument obsahovat a v jaké podobě.

Definice typu dokumentu (DTD) říká, které elementy a atributy můžeme v dokumentu použít. Navíc je zde definováno, v jakých vzájemných vztazích mohou být jednotlivé elementy použity. DTD je tedy užitečný nástroj, který nám umožní hlídat, zda mají naše dokumenty správnou strukturu. Ve světě se používá mnoho DTD, které vyhovují různým požadavkům. Mezi jedno z nejznámějších patří například DTD DocBook, které definuje elementy a atributy vhodné pro značkování technické dokumentace.

DTD se hodí pro popis formátů, které se používají především pro textové dokumenty. Neobsahuje však nástroje pro kontrolu různých typů dat jako čísla, měnové údaje, údaje o datu a čase. To je přitom velice důležité pro aplikace, které si pomocí XML posílají data spíše databázového charakteru. Pro tyto potřeby existuje několik dalších jazyků, umožňujících určit správné schéma dokumentu.

K jakému DTD se náš XML dokument hlásí oznámíme použitím tzv. DOCTYPE, hned za XML deklarací. Pro opakované použití bývá DTD uloženo v samostatném souboru.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE «kořenový element» SYSTEM "«URL»">
  • kořenový element - jméno elementu, ve kterém bude obsažen celý document, v našem případě trida
  • URL - adresa nebo jméno souboru, ve kterém je DTD uloženo
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE trida SYSTEM "denifinice-tridy.dtd">

Můžeme také DTD zapsat přímo do XML dokumentu:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE kniha [
« ... DTD ... »
]>

Syntaxe DTD

DTD obsahuje:

  • deklarace elementů
  • deklarace atributů
  • deklarace entit

Deklarace elementů

  • prázdný element - nemůže obsahovat text ani další elementy
    • v HTML např. br pro nový řádek a hr pro vložení horizontální čáry
      <!ELEMENT br EMPTY>
<!ELEMENT hr EMPTY>
  • element obsahující další elementy - např. HTML element <html> může obsahovat elementy head a body
    <!ELEMENT html (head, body)>
    • pokud chceme vyjádřit, že element může obsahovat jenom jeden z uvedených použijeme |
      <!ELEMENT potomek (dcera | syn)>
    • článek vždy obsahuje název, ale nemusí obsahovat autora
      <!ELEMENT clanek (nazev, autor?)>
    • chceme vyjádřit, že se nějaký element může vyskytovat opakovaně, minimálně však jednou (např. kniha obsahuje minimálně jednu kapitolu)
      <!ELEMENT kniha (kapitola+)>
    • vraťme se k příkladu se článkem - nyní může článek obsahovat více autorů, nebo také žádného (tj. 0 až N autorů) - použijeme hvězdičku
      <!ELEMENT clanek (nazev, autor*)>
  • element smí obsahovat pouze text a ne další elementy - použijeme speciální slovo #PCDATA
    <!ELEMENT em (#PCDATA)>

Deklarace atributů

V XML může mít každý element libovolné množství atributů. Atributy se většinou používají pro připojení různých metainformací k elementům. Deklarace atributů pro element má poměrně jednoduchý tvar:

<!ATTLIST «jméno elementu» «deklarace atributů»>

Deklarace:

<!ATTLIST kniha autor CDATA ...>

Nám umožní používat u elementu kniha atribut autor:

<kniha autor="Čapek">

Deklarace entit

V XML můžeme předdefinovat libovolné množství entit. Každá bude mít vyhrazen svůj identifikátor.

Např.

<!ENTITY quot "&#34;">

nebo

<!ENTITY logo SYSTEM "/obr/logo.eps" NDATA "EPS">

Takto definovanou entitu nemůžeme přímo vložit do textu dokumentu a ani by to nemělo smysl. Můžeme na ní však odkázat pomocí atributu, který má typ ENTITY nebo ENTITIES. Od roku 1999 má naše firma logo, které je na obrázku <picture name="logo"/>

Kontrola dokumentu podle DTD

Jak už bylo řečeno, pokud XML dokument odpovídá struktuře popsané pomocí DTD, říkáme o XML dokument, že je validní, jinak je invalidní. Validita dokumentu je tzv. 2 stupeň správnosti dokumentu. Prvním stupněm je tzv. syntaktická správnost, tj. zda-li je dokument napsán bez syntaktických chyb (neuzavřené tagy a hodnoty, překřížené tagy, překlepy v názvech elementů, atributů, apod.). Pokud je dokument syntakticky správný, říkáme, že je tzv. well-formed.

Xml-kontrola-spravnosti.png


Pro zpracování XML dokumentu se používá tzv. parser. Ten načítá XML dokument a poskytuje nám snadný způsob, jak přečíst data z XML dokumentu, a zároveň kontroluje jeho syntaktickou správnost a v případě přítomnosti DTD i validitu dokumentu. Parser bývá k dispozici ve dvou provedeních:

  • knihovny pro různé programovací jazyky, které můžeme použít v našich programech
  • jednoduché programy, kterým na vstup předáme XML dokument a na výstupu obdržíme případný přehled chyb v dokumentu.

Můžeme také využít parser zabudovaný v prohlížeči, který XML podporuje (většina webových prohlížečů, apod.).

Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje