- = eXtensible Markup Language
- značkovací jazyk, definovaný konsorciem W3C, podobný HTML (dokonce máme XHTML)
- je hierarchický (Co je hierarchický formát?), dodržuje stromovou strukturu
- tagy nejsou definované (jako v HTML), ale dá se do nich napsat cokoliv
Účel
- primárně pro ukládání a přenos dat
- ukládání v XML databázích
- přenos např. v rámci SOAP
- je samopopisující (spolu s daty je v tagu uložena informace o tom, co je to za data)
- má velký ekosystém a dobré standardy - proto se narozdíl od JSONu používá v kritických systémech (vládní systémy, korporátní systémy)
- JSON se používá spíš na webu
- důležitá je deklarace specifikující verzi XML a kódování dokumentu
<?xml version="1.0" encoding="UTF-8"?>
- existuje i verze
1.1
, ale moc se nepoužívá
- musí se začít jedním root elementem, který obaluje zbytek
- specifický formát XML je např. SVG
- máme
- dokumentově orientované XML
- lidsky čitelný text, důležité části jsou otagované
- datově orientované XML
- strukturované uspořádání dat
- typicky vytvářený a konzumovaný různými aplikacemi
- už není tak dobře lidsky čitelný
- = pokud splňuje pravidla daná XML (specifikace stanovené W3C)
- pouze jeden kořenový element
- každý otevírací tag musí mít svůj uzavírací tag (a to ve správném pořadí otevírání)
- jmenné prostory musí být korektně deklarovány a konzistentní v dokumentu
- atributy v rámci jednoho tagu se nesmí opakovat (např. 2x
id
)
- atributy musí být v uvozovkách
- speciální znaky musí být zakódované (např.
&
místo &
)
- kontroluje se XML Parserem
Namespaces
- díky namespaces se můžeme vyhnout problémům s duplicitními tagy
- když např. kombinujeme XML z různých zdrojů/aplikací do sebe
- definují se pomocí
xmlns
atributu (dostáváme tzv. “kvalifikovaný namespace”)
- syntax:
xmlns:prefix="URI"
- velmi často se všechny namespaces definují v root elementu
<root>
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="https://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
Valid XML
- validní XML je Well-formed XML a k tomu splňuje pravidla definovaná ve schématu (např. XSD Schema, RELAX NG nebo DTD (Document Type Definition))
- ve schématu specifikujeme pravidla, elementy a atributy, které se mohou v dokumentu používat
XSD Schema
- používá se na specifikování struktury a datových typů pro XML dokumenty
- můžu definovat jaké elementy mají v dokumentu být
- a jaké datové typy mají obsahovat
- při validaci parser ověří, že je dokument well-formed a zároveň splňuje pravidla schématu
XSD Schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="kniha">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="titul" type="xsd:string"/>
<xsd:element name="autor" type="xsd:string"/>
<xsd:element name="rokVydani" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Dokument
<?xml version="1.0" encoding="UTF-8"?>
<kniha xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="kniha.xsd">
<titul>Moje kniha</titul>
<autor>Jan Novak</autor>
<rokVydani>2020</rokVydani>
</kniha>
XPath
- umí vybírat části XML dokumentu na základě hierarchické cesty
- např.
//autor
vybere všechny elementy <autor>
v dokumentu
/kniha/titul
vybere elementy <titul>
, které jsou nepřímým potomkem elementu <kniha>
- je to stavební kámen pro XQuery a XSLT
XQuery
- dotazovací jazyk pro XML
- umožňuje vybírat části XML (pomocí XPath)
- umí dělat transformace a výpočty nad XML daty
- umí vytvářet nové XML dokumenty (podle dotazu či transformace)
- používá se v XML databázích
XSLT
- používá se k transformaci XML dokumentů do jiných formátů (může být i do XML, ale i HTML, JSON, prostý text atd.)
- např. mám XML se seznamem knih a chci vytvořit HTML tabulku s formátovaným výpisem dat z XML
- pomocí XPath se vybírá na jaké uzly se transformace vztahuje