XML
Obsah boxu
Šablona:Infobox programovací jazyk
XML (zkratka z anglického Extensible Markup Language, česky rozšiřitelný značkovací jazyk) je značkovací jazyk a soubor pravidel, který byl vyvinut a standardizován konsorciem World Wide Web Consortium (W3C). Jeho hlavním účelem je umožnit jednoduché vytváření, zpracování a sdílení strukturovaných dat mezi různými aplikacemi a platformami. Na rozdíl od HTML, které má pevně danou sadu značek pro definici vzhledu webových stránek, XML umožňuje autorům definovat si vlastní značky (tagy) pro popis struktury a významu dat. Díky své flexibilitě, platformové nezávislosti a čitelnosti pro lidi i stroje se stal základem pro mnoho datových formátů a komunikačních protokolů.
XML vychází ze staršího a složitějšího jazyka SGML (Standard Generalized Markup Language), ale je navržen s důrazem na jednoduchost a použitelnost v prostředí internetu. Dokument ve formátu XML je textový soubor, který dodržuje přísná syntaktická pravidla, což zaručuje jeho snadné strojové zpracování.
📜 Historie a vývoj
Kořeny XML sahají až k jazyku SGML, který byl standardizován v roce 1986 jako nástroj pro definici struktury dokumentů nezávisle na jejich formátování. SGML byl však velmi komplexní a jeho implementace byla náročná. S masivním nástupem internetu a celosvětové sítě v 90. letech 20. století vznikla potřeba jednoduššího formátu pro výměnu strukturovaných dat.
Práce na XML začaly v roce 1996 pod záštitou W3C. Hlavními cíli návrhu byly:
- Musí být snadno použitelný přes internet.
- Musí podporovat širokou škálu aplikací.
- Musí být kompatibilní s SGML.
- Musí být snadné psát programy, které zpracovávají XML dokumenty.
- Počet volitelných vlastností v XML musí být absolutně minimální, ideálně nulový.
- XML dokumenty by měly být pro člověka čitelné a přiměřeně srozumitelné.
- Návrh XML by měl být připraven rychle.
- Návrh XML musí být formální a stručný.
- XML dokumenty se musí snadno vytvářet.
První verze, XML 1.0, byla publikována jako doporučení (W3C Recommendation) 10. února 1998. Tento standard se rychle ujal a stal se základem pro obrovské množství technologií. V roce 2004 byla vydána verze XML 1.1, která přinesla změny v podpoře znaků a konců řádků, aby lépe vyhovovala evoluci standardu Unicode. Verze 1.0 však zůstává nejpoužívanější.
⚙️ Základní principy a syntaxe
XML klade velký důraz na přísnou a jednoznačnou syntaxi. Dokument, který splňuje všechna syntaktická pravidla, se nazývá "dobře zformovaný" (well-formed).
🧱 Stavební kameny
Základními stavebními kameny XML dokumentu jsou:
- Elementy (Elements): Element je základní logická jednotka dokumentu. Skládá se z úvodní značky (start-tag), obsahu a ukončovací značky (end-tag). Například: `<kniha>Hobit</kniha>`. Element může být i prázdný, pak se zapisuje jako `<prebal />`.
- Atributy (Attributes): Atributy poskytují doplňující informace o elementu a jsou umístěny v úvodní značce. Skládají se ze jména a hodnoty uvedené v uvozovkách. Například: `<kniha zanr="fantasy">`.
- Obsah (Content): Data umístěná mezi úvodní a ukončovací značkou. Může to být text (tzv. PCDATA - Parsed Character Data) nebo další vnořené elementy.
📝 Pravidla syntaxe
Každý dobře zformovaný XML dokument musí splňovat následující pravidla:
- **Jeden kořenový element**: Celý dokument musí být uzavřen v jediném párovém elementu, který se nazývá kořenový element (root element).
- **Povinné uzavírání značek**: Každá úvodní značka musí mít odpovídající ukončovací značku (např. `
...
`). Prázdné elementy se uzavírají lomítkem na konci (např. `
`). - **Správné vnořování**: Elementy musí být správně vnořeny. Značky se nesmí křížit. Správně: `text`. Špatně: `text`.
- **Rozlišování velikosti písmen**: XML je case-sensitive, takže `<Kniha>` a `<kniha>` jsou dva různé elementy.
- **Hodnoty atributů v uvozovkách**: Hodnoty všech atributů musí být uzavřeny v jednoduchých (') nebo dvojitých (") uvozovkách.
📄 Prolog a deklarace
XML dokument obvykle začíná prologem, který obsahuje XML deklaraci. Ta specifikuje verzi XML a kódování znaků. ```xml <?xml version="1.0" encoding="UTF-8"?> ```
- `version`: Určuje verzi XML (obvykle "1.0" nebo "1.1").
- `encoding`: Definuje znakovou sadu použitou v dokumentu (např. UTF-8, ISO-8859-2).
- `standalone`: Volitelný atribut ("yes" nebo "no"), který indikuje, zda dokument závisí na externích definicích (např. DTD).
💬 Komentáře a speciální znaky
- **Komentáře**: Zapisují se mezi ``. Například: ``.
- **Speciální znaky**: Znaky jako `<`, `>` nebo `&`, které mají v XML speciální význam, musí být zapsány pomocí entit:
* `<` pro `<` (less than) * `>` pro `>` (greater than) * `&` pro `&` (ampersand) * `'` pro `'` (apostrophe) * `"` pro `"` (quotation mark)
🏛️ Struktura a validace
Kromě toho, že je dokument "dobře zformovaný", může být také "validní". Validní dokument je takový, který je nejen dobře zformovaný, ale navíc odpovídá předem definované struktuře a pravidlům. Tato pravidla se definují pomocí schématovacích jazyků.
DTD (Document Type Definition)
DTD je původní mechanismus pro definování struktury XML dokumentu, převzatý z SGML. DTD definuje, jaké elementy se mohou v dokumentu vyskytovat, jaké mohou mít atributy a jak mohou být vzájemně vnořeny. DTD může být součástí XML souboru nebo externím souborem. Jeho nevýhodou je omezená podpora datových typů (vše je v podstatě text) a méně flexibilní syntaxe.
XML Schema (XSD)
XML Schema, často označované jako XSD (XML Schema Definition), je modernější a mnohem mocnější nástupce DTD. XSD je samo o sobě napsáno v XML syntaxi. Mezi jeho hlavní výhody patří:
- Bohatá podpora datových typů (řetězec, číslo, datum, boolean atd.).
- Podpora jmenných prostorů (namespaces).
- Možnost definovat komplexní pravidla, omezení a vzory.
- Lepší rozšiřitelnost a modularita.
Další validační jazyky
Existují i další, méně rozšířené jazyky pro validaci, jako jsou RELAX NG nebo Schematron, které nabízejí alternativní přístupy k definici struktury dokumentů.
💡 Klíčové technologie a související standardy
Kolem XML vznikl rozsáhlý ekosystém technologií a standardů pro jeho zpracování a transformaci.
- **XPath**: Jazyk pro adresaci a výběr částí (uzlů) XML dokumentu. Používá se pro navigaci ve stromové struktuře dokumentu, podobně jako se cesty k souborům používají v souborovém systému.
- **XSLT** (Extensible Stylesheet Language Transformations): Jazyk pro transformaci XML dokumentů do jiných formátů, například do HTML, jiného XML schématu nebo prostého textu. XSLT procesor používá XPath k výběru částí vstupního dokumentu a na základě šablon generuje výstup.
- **XQuery**: Dotazovací jazyk navržený pro práci s kolekcemi XML dat. Je pro XML tím, čím je SQL pro relační databáze. Umožňuje filtrovat, třídit a transformovat data z XML zdrojů.
- **DOM** (Document Object Model): API, které reprezentuje XML dokument jako stromovou strukturu v paměti počítače. Umožňuje programátorům procházet a modifikovat dokument uzel po uzlu. Jeho nevýhodou je vysoká paměťová náročnost u velkých dokumentů.
- **SAX** (Simple API for XML): Událostně řízené API pro parsování XML. Místo načtení celého dokumentu do paměti prochází SAX parser dokument sekvenčně a při nalezení elementu, atributu nebo textu vyvolá událost, na kterou může program reagovat. Je paměťově efektivnější než DOM.
- **Jmenné prostory (Namespaces)**: Mechanismus, který umožňuje předejít konfliktům názvů elementů a atributů, pokud se v jednom dokumentu kombinují značky z různých "slovníků" (schémat). Jmenný prostor je identifikován pomocí URI.
🌍 Využití a aplikace
XML se díky své flexibilitě používá v široké škále oblastí:
- **Webové služby**: Bylo základem pro protokoly jako SOAP a WSDL pro komunikaci mezi aplikacemi.
- **Konfigurační soubory**: Mnoho aplikací a frameworků (např. v ekosystémech Java nebo .NET) používá XML pro ukládání konfiguračních nastavení.
- **Kancelářské formáty**: Moderní formáty dokumentů, jako je Office Open XML (používaný v Microsoft Office s příponami .docx, .xlsx) a OpenDocument (používaný v LibreOffice s příponami .odt, .ods), jsou ve skutečnosti ZIP archivy obsahující sadu XML souborů.
- **Vektorová grafika**: Formát SVG (Scalable Vector Graphics) je aplikace XML pro popis dvourozměrné vektorové grafiky.
- **Výměna dat**: Používá se pro B2B (business-to-business) komunikaci, například ve finančních standardech jako FIX (Financial Information eXchange).
- **Publikační systémy**: Standardy jako DocBook nebo DITA používají XML pro tvorbu a správu technické dokumentace.
👍 Výhody a nevýhody
Výhody
- **Čitelnost pro člověka**: Struktura a data jsou relativně snadno čitelné i bez specializovaných nástrojů.
- **Platformová a jazyková nezávislost**: Jako textový formát může být zpracován na jakémkoliv systému a v jakémkoliv programovacím jazyce.
- **Rozšiřitelnost**: Umožňuje definovat vlastní značky a struktury přizpůsobené konkrétní doméně.
- **Standardizace**: Široká podpora mezinárodních standardů (W3C) a nástrojů.
- **Validace**: Možnost striktně ověřit strukturu a obsah dokumentu pomocí schémat (DTD, XSD).
Nevýhody
- **Upovídanost (verbosity)**: XML syntaxe s párovými značkami vede k větším souborům ve srovnání s kompaktnějšími formáty jako JSON.
- **Náročnost na zpracování**: Parsování XML je obecně pomalejší a paměťově náročnější než zpracování jednodušších formátů.
- **Složitost ekosystému**: Související technologie jako XPath, XSLT nebo XSD mohou být pro začátečníky složité na naučení.
🆚 XML vs. JSON
V posledních letech je XML v některých oblastech, zejména ve webových API, nahrazováno formátem JSON (JavaScript Object Notation).
| Vlastnost | XML | JSON | |---|---|---| | **Syntaxe** | Značky (tagy) | Páry klíč-hodnota | | **Čitelnost** | Dobrá, ale "upovídaná" | Velmi dobrá, kompaktní | | **Datové typy** | Vše je text, typy se definují externě (XSD) | Přímá podpora pro řetězce, čísla, booleovské hodnoty, pole a objekty | | **Schéma/Validace** | Silná podpora (DTD, XSD, RELAX NG) | Omezenější, ale existuje JSON Schema | | **Komentáře** | Podporovány (``) | Oficiálně nepodporovány | | **Jmenné prostory** | Podporovány | Nepodporovány | | **Typické použití** | Dokumenty, konfigurace, podnikové systémy | Webová API, mobilní aplikace, jednoduchá výměna dat |
Obecně platí, že JSON je často preferován pro datově orientované aplikace, kde je důležitá rychlost a jednoduchost zpracování. XML si stále drží silnou pozici v dokumentově orientovaných aplikacích, kde je klíčová validace, struktura a metadata (např. v publikačních systémech nebo složitých B2B protokolech).
🧑🏫 Pro laiky: Co je XML?
Představte si, že máte spoustu informací o knihách a chcete si je zapsat do počítače tak, aby jim rozuměl nejen člověk, ale i jakýkoliv program.
- **Prostý text**: Můžete napsat: `Hobit, J. R. R. Tolkien, 1937`. To je pro člověka srozumitelné, ale počítač neví, co je název, co autor a co rok vydání.
- **XML**: Pomocí XML dáte každé informaci "štítek" (značku), který popisuje její význam. Stejná informace by v XML vypadala takto:
```xml <kniha>
<nazev>Hobit</nazev> <autor>J. R. R. Tolkien</autor> <rok_vydani>1937</rok_vydani>
</kniha> ```
Díky značkám `<nazev>`, `<autor>` a `<rok_vydani>` teď každý program přesně ví, která informace co znamená. XML je tedy jako velmi organizovaný systém kartotéčních lístků, kde každý údaj má své jasně označené políčko. Na rozdíl od HTML, které má předem dané štítky pro webové stránky (jako `
` pro nadpis nebo `
` pro odstavec), v XML si můžete vytvářet vlastní štítky pro cokoliv – od receptů přes faktury až po konfiguraci letadla. Šablona:Aktualizováno