Vypracoval: Václav Tunka, V4C
24. XML
Úvod Značkovací jazyk XML (eXtensible Markup Language) vznikl ze staršího a obecnějšího jazyku SGML (Standard Generalized Markup Language). XML byl vyvinut konsorciem W3C, aby poskytl standardní formát pro zpracování a výměnu informací. Pomocí XML lze popsat téměř jakákoli data a je ho tedy možno využít jako obecný formát pro mnoho aplikací různého druhu. Tento formát byl navržen, aby splňoval následující kritéria:
je možno ho číst a upravovat v libovolném textovém editoru nezávislém na platformě je rozšiřitelný, tzn. umožňuje vytvářet vlastní formáty má jednoduchou syntaxi implementace parserů a dalších nástrojů na jeho zpracování je velice snadná
Jazyk je určen především pro výměnu dat mezi aplikacemi a pro publikování dokumentů. Jazyk umožňuje popsat strukturu dokumentu z hlediska obsahu jednotlivých částí, nezabývá se však vzhledem dokumentu nebo jeho částí. Vzhled dokumentu se definuje připojeným stylem. Je zde i možnost transformovat XML dokument pomocí XSLT do jiného dokumentu nebo jiné struktury XML. Pomocí značek (tagů) vyznačujeme v dokumentu význam jednotlivých částí textu. XML neobsahuje žádné předdefinované tagy. Tyto značky můžeme definovat v definičním souboru DTD (Dokument Type Definition). Potom nám parser bude automaticky kontrolovat jestli dokument odpovídá této definici.
Syntaxe XML Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.
Každý XML dokument musí obsahovat alespoň jeden element XML dokumenty mohou a měly by začínat XML deklarací, která určuje, jaké verze XML bylo použito. Implicitním kódováním dokumentů je Unicode, je zde však možnost určit jakékoliv jiné kódování v XML deklaraci. Existuje přesně jeden element, který se nazývá root (kořenový element), přičemž žádná jeho část se nenachází uvnitř jiného elementu. Jméno v koncovém tagu se musí shodovat se jménem v počátečním tagu. Záleží na tom, zda jsou použita velká nebo malá písmena. Konec každého elementu, který začíná počátečním tagem musí být označen koncovým tagem, který nese stejné jméno jako tag počáteční. Text mezi počátečním a koncovým tagem se nazývá obsah elementu. Element, který nemá žádný obsah, může být uveden ve speciální formě: <jméno/>. Lomítko před > nahrazuje koncový tag. Pokud se počáteční tag nachází v obsahu nějakého elementu, koncový tag se musí nacházet ve stejném elementu.
Vypracoval: Václav Tunka, V4C
Název elementu může obsahovat písmena, číslice, podtržítko, oddělovník, dvojtečku nebo tečku. Dvojtečka může být použita pouze ve speciálním případě, kdy odděluje tzv. jmenný prostor. Název elementu může začínat pouze písmenem, podtržítkem nebo dvojtečkou. Názvy elementů začínající na xml, XML nebo jinou kombinaci velikostí těchto písmen jsou vyhrazeny pro standard. Element může mít žádný, jeden nebo několik atributů. Pro jejich názvy platí stejná pravidla jako pro názvy elementů. Jméno atributu je odděleno od jeho hodnoty rovnítkem = . Hodnota atributu musí být uvedena uvnitř apostrofů '...' nebo uvozovek "..." . Pokud jsou apostrofy nebo uvozovky použity v hodnotě atributu, musí být použit opačný oddělovač. Znaky < a & nemohou být použity v textu, neboť jsou určeny pro značkování. Pokud jsou potřeba, < musí být použito místo < a & místo & Znaky >, " a ' mohou být rovněž nahrazeny > , " a ' Komentáře se mohou vyskytovat na libovolném místě v dokumentu mimo vlastní značkování. Řetězec "--" se nesmí objevit uvnitř komentáře.
Příklad:
Definiční soubory DTD DTD neboli definice typu dokumentu nám umožňuje určit pravidla, kterými se XML dokument musí řídit. V DTD souborech se definují elementy, atributy, entity a notace. DTD můžeme umístit přímo do dokumentu:
Lepší je však umístit DTD do externího souboru s příponou .dtd a z dokumentu XML se na ni odkázat takto:
Každý DTD soubor by měl obsahovat XML deklaraci.
Deklarace elementu:
Vypracoval: Václav Tunka, V4C Místo obsahElementu lze použít modifikátor EMPTY (prázdný element), ANY (může obsahovat cokoliv), (#PCDATA) - obsahuje pouze text. Nebo uvést přesný obsah elementu do kulatých závorek: Odděleno čárkami = elementy následují v daném pořadí Odděleno | = jeden z elementů Uzavřít víc elementů do závorek = skupina elementů Výskyt elementů = ? jednou nebo vůbec; + jednou nebo vícekrát; * vůbec nebo vícekrát
Příklad:
Deklarace atributů elementu:
modifikátor1 modifikátor2 ... >
Typ atributu: CDATA - řetězec znaků ENTITY - název externí entity ID – jedinečný identifikátor elementu IDREF – odkaz na element s daným ID NMTOKEN - jméno, slovo bez mezer, může obsahovat pouze specifické znaky NMTOKENS – více NMTOKEN oddělených mezerou NOTATION – povolený datový typ Možnosti atributu = možnosti oddělené | implicitní možnost v uvozovkách
hodnocení
(dobrý |normální|
Modifikátor atributu: #REQUIRED - atribut je povinný #IMPLIED – v dokumentu můžeme tento atribut vynechat #FIXED “hodnota” - atribut musí mít právě tuto hodnotu
Příklad:
Deklarace entit:
Entita je v podstatě XML proměnná. Používá se když se určitý výraz nebo hodnota často opakuje, nebo pokud chceme vložit do XML dokumentu externí data. Určitě znáte entity < > a &. Entity se dělí na interní a externí. Neparametrické interní entity – jejich obsah je uveden přímo v dokumentu, lze je použít jak v DTD, tak v XML dokumentu.
Vypracoval: Václav Tunka, V4C Příklad: - deklarace v DTD:
- použití v XML:
<skola>
&nazev; Purkyňova 97 SOŠ
Externí entity – jejich obsah je uveden mimo DTD soubor. Dělí se na binární (neanalyzovatelné) a textové (analyzovatelné) podle obsahu, který zastupují. Binární entita musí mít narozdíl od textové určený typ binárních dat. Typ se definuje v notaci. Externí entita se definuje pomocí klíčového slova SYSTEM. Příklad:
Parametrické entity – dělí se také na interní a externí, lze je však použít pouze v DTD souboru. Příklad: - deklarace v DTD:
- použití v DTD:
Deklarace notací:
nazev
SYSTEM
“MIME typ dat /nebo přidružená
Notace se používají ve spojení s externími binárními (neanalyzovatelnými) entitami, přičemž určují typ dat. Příklad: - deklarace v DTD:
- použití v XML:
<skola>
Vypracoval: Václav Tunka, V4C
XSLT Pomocí jazyku XSLT můžeme transformovat XML dokument do zcela jiného dokumentu s odlišnou strukturou (např.: HTML, TeX, txt, atd.). Transformace se provádí pomocí XSLT stylů, které jsou vlastně sami o sobě xml dokumenty se speciálními elementy. K navigaci ve struktuře uzlů se používá jazyk XPath, který má podobnou syntaxi jako souborový systém. Připojení XSLT stylu k dokumentu se provádí následujícím příkazem:
Definice stylu: Každý XSLT styl musí začínat kořenovým elementem xml:stylesheet. <xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
Definice šablon: Základní prvek stylu, je šablona (xsl:template). Každá šablona má určené uzly XML dokumentu, na které se aplikuje. Tyto uzly jsou podle šablony přeměněny na nové uzly ve výsledném dokumentu. Pomocí atributu match specifikujeme na jaké uzly se má šablona aplikovat. <xsl:template match='výraz'>
Popis zpracování: XSL procesor prochází hierarchií uzlů vstupního dokumentu a pro každý uzel hledá odpovídající šablonu. Pokud šablona není nalezena, použije se interní šablona procesoru, která zkopíruje obsah uzlu do výstupního dokumentu a zahájí zpracování podřízených (vnořených) uzlů. Pokud nadefinujete vlastní šablony, přebíráte úplnou kontrolu nad zpracováním.
Řízení zpracování: Pomocí následujícího příkazu oznamujeme XSL procesoru, že má začít zpracovávat kořenový uzel se všemi jeho podřízenými uzly. Pokud vynecháme nepovinný atribut select, budou zpracovány všechny podřízené uzly aktuálního uzlu. Do select můžeme dosadit libovolný uzel. <xsl:apply-templates select="/" />
Vypracoval: Václav Tunka, V4C Příkaz value-of slouží k vkládání obsahu uzlů, aniž by byla použita šablona. Pomocí atributu select můžeme vybrat jakýkoliv uzel, tečka vybírá aktuální uzel. Jestliže umístíme do select @ říkáme tím, že chceme vybrat obsah atributu, nikoliv uzlu. <xsl:value-of select="."/>
Příkaz for-each slouží k hromadnému zpracování všech uzlů stejného jména. <xsl:for-each select="uzel">
Shrnující příklad: -XML:
<polozka nazev="Klávesnice"> <polozka nazev="Myš"> -XSLT: <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:template match='/katalog'>
<xsl:value-of select="@sekce" /> <xsl:apply-templates select="polozka" /> <xsl:template match='polozka'>
<xsl:value-of select="@nazev" />
<xsl:apply-templates select="varianta/@barva" /> <xsl:apply-templates select="varianta/@typ" />
<xsl:template match='@barva | @typ'>
<xsl:value-of select="." />
Vypracoval: Václav Tunka, V4C