**XML** znamená **eXtensible Markup Language**, v preklade rozšíriteľný značkovací jazyk, ktorý bol vyvinutý a štandardizovaný konzorciom W3C (World Wide Web Consortium) ako pokračovanie jazyka SGML a zovšeobecnenie jazyka HTML. Umožňuje jednoduché vytváranie konkrétnych značkovacích jazykov na rôzne účely a široké spektrum rôznych typov údajov.

Jazyk je určený predovšetkým na výmenu údajov medzi aplikáciami a na zverejňovanie dokumentov. Jazyk umožňuje opísať štruktúru dokumentu z hľadiska vecného obsahu jednotlivých častí a nezaoberá sa sám osebe vzhľadom dokumentu alebo jeho časti. Vzhľad dokumentu sa potom definuje pripojeným štýlom. Ďalšou možnosťou je pomocou rôznych štýlov vykonať transformáciu do iného typu dokumentu alebo do inej štruktúry XML.

Jazyk XML nemá žiadne preddefinované značky (tagy, názvy jednotlivých elementov) a tiež jeho syntax je podstatne prísnejšia (a jednoduchšia) ako syntax HTML.

Použitie
--------

Sila XML je najmä v jeho hierarchickej štruktúre a pomerne jednoduchom spôsobe zápisu. Umožňuje opisovať – označovať ľubovoľné dáta a prenášať ich medzi rôznymi aplikáciami a platformami. Hlavnou ideou XML je oddelenie obsahu a vzhľadu dát. Spojovacím mostom je XSL, ktorý umožňuje vytvárať množstvo výstupných formátov.

XML je formát súboru obsahujúci dáta. Zvláštnym ho robí to, že je široko prijímaný ako štandard so schopnosťou existencie na akejkoľvek platforme a používaný veľkým a stále rastúcim počtom aplikácií a programovacích jazykov.

Špecifikácia XML je opísaná odporučením konzorcia World Wide Web Consortium. Jazyk XML nám dovoľuje vytvárať štruktúrované dokumenty veľmi flexibilným spôsobom. Dá sa použiť k vytváraniu dokumentov, ktoré sa zdanlivo podobajú dokumentom HTML; jazyk XML sa však od HTML líši a používa sa k zásadne iným účelom. Táto podobnosť pochádza od rovnakých rodičov – obidva jazyky sú odvodené od štandardu definície jazyka SGML. Ten sám osebe nie je žiadny jazyk, ale iba spôsob definovania jazykov vyvinutých podľa jeho obecných princípov. Existuje tu však dôležitý rozdiel v tom, akým spôsobom sú jazyky XML a HTML odvodené od SGML. XML je podmnožina SGML – ľahšia verzia, ktorá bola oproti SGML zjednodušená, aby umožňovala použitie na sieti WWW, ale aj ako formát výmeny dát. Toto zjednodušenie robí zápis dokumentov vychádzajúcich z XML jednoduchším. Oproti tomu jazyk HTML je aplikáciou SGML – je to teda konkrétny jazyk, ktorý dodržuje štandard SGML.

XML a HTML v skutočnosti slúžia veľmi odlišným účelom. Dokument HTML obsahuje značky indikujúce, ako má byť dokument naformátovaný, neobsahuje však žiadne informácie o vlastnom obsahu. Inými slovami HTML obsahuje iba informácie o zobrazení dát a neobsahuje údaje o tom, o aké dáta ide. XML sa pokúša oddeliť obsah a jeho reprezentáciu. Dokumenty XML obsahujú informácie v štruktúrovanej forme, ktorá sa zdanlivo podobá HTML. Dôležitým rozdielom je fakt, že môžeme definovať svoje vlastné značky, ktoré určujú štruktúru dát.

Dokumenty XML sa dajú previesť do HTML tým, že sa k dokumentu priradí štýl v jazyku XSL (Extensible Stylesheet Language – rozšíriteľný jazyk štýlov). Štýl bude obsahovať informácie o tom, ako túto stránku zobraziť. XSL sa však dá použiť aj na prevod do iného formátu XML.

Jazyk XML
---------

Každý dokument XML sa skladá z kombinácie dát značiek a znakov. Značky dávajú dokumentu XML štruktúru, zatiaľ čo znaky predstavujú vlastný obsah. Všetky XML dokumenty spĺňajúce špecifikáciu XML musia dodržiavať isté pravidlá – potom sú považované za správne štruktúrované (well-formed).

* I. Každý element XML musí mať začiatočnú aj koncovú značku. „Prázdne" elementy bez koncovej značky (ako napríklad <IMG> alebo <HR> v jazyku HTML) nie sú v XML povolené. Je tu však skrátený zápis, ktorý sa dá použiť v prípade, keď daný element neobsahuje žiadne dáta. Namiesto <empty></empty> môžeme použiť alternatívu <empty />. Tieto dve možnosti sa považujú za zhodné.
* II. Dokument XML musí obsahovať jediný pár značiek (skladajúci sa zo začiatočnej a koncovej značky), tzv. koreňový element dokumentu, v ktorom sú všetky ostatné elementy vložené. Na koreni nemôže byť viac elementov.
* III. Počiatočné a koncové značky každého elementu musia byť riadne vnorené – vnorený element musí byť celý obsiahnutý vo svojom nadradenom elemente. Inými slovami, počiatočné a koncové značky vložených elementov sa nesmú prekrývať, ako to bolo povolené v HTML. To zaisťuje hierarchickú štruktúru dokumentu XML.

Ak dokument XML spĺňa tieto pravidlá, potom je správne štruktúrovaný. Dokument XML sa označuje za platný, keď je správne štruktúrovaný a zároveň spĺňa požiadavky DTD. (7)

Jednoduchý príklad XML súboru sa dá reprezentovať hierarchicky, napr.:

```
<?xml version="1.0"?>
<zamestnanci>
<priezvisko>Kutny</priezvisko>
<priezvisko>Kolar</priezvisko>
<priezvisko>Hala</priezvisko>
</zamestnanci>

```

Podpora XML v jazyku PHP
------------------------

PHP podporuje sadu funkcií, ktoré sa používajú pre programovanie aplikácií pracujúcich s XML. Funkcie sa dajú používať na čítanie XML dokumentov. XML parser v PHP spracováva tok dát. Ešte pred začatím načítavania dokumentu sa parseru zaregistrujú obslužné funkcie. XML dokument sa parseru odovzdáva po častiach a parser priebežne volá príslušné zaregistrované funkcie ako rozpoznáva jednotlivé uzly. Pokiaľ je dokument správne štruktúrovaný ale neplatný, nezobrazí parser žiadne chyby ani varovania.

Doplnok XML v PHP podporuje znakovú sadu Unicode. Nastavujú sa dve kódovania znakov: kódovanie vstupu a kódovanie výstupu. Kódovanie vstupu sa používa pri čítaní dokumentov. Predvoleným kódovaním vstupu používaným v PHP je ISO-8859-1. Kódovanie výstupu sa používa, keď PHP odovzdáva dáta zaregistrovaným funkciám. Kódovanie výstupu ovplyvňuje textové dáta aj názvy značiek a ciele inštrukcií pre spracovanie. 

Hneď ako parser narazí na znaky mimo rozsah, ktorý dokáže kódovanie vstupu reprezentovať, vráti chybu. Pokiaľ PHP nájde v rozparsovanom dokumente XML znaky, ktoré sa nedajú reprezentovať vo vybranom výstupnom kódovaní, nahradí ich otáznikmi.
Podpora XML v PHP je implementovaná pomocou knižnice expad. Expad je knižnica napísaná v jazyku C, slúžiaca pre spracovanie dokumentov XML.