Hlavní navigace

XML - editace, kontrola a transformace XML dokumentů

22. 2. 2001
Doba čtení: 5 minut

Sdílet

Dnešní díl seriálu o XML bude zaměřen poněkud praktičtěji. Povíme si, jak XML editovat, kontrolovat a převádět do jiných formátů a na závěr se zmíníme o zobrazování XML, například v prohlížeči.

Editace

Jak jsme si již řekli v prvním dílu tohoto seriálu, lze XML dokument editovat v jakémkoli textovém editoru. Různé editory však obsahují různou úroveň nadstandardní podpory XML. Klasikou je např. zvýraznění syntaxe, které je ve většině editorů k dispozici pro různé programovací jazyky a formáty a u XML slouží převážně k odlišení značek a samotného textu. Při čtení XML dokumentu ve zdrojové podobě je to rozhodně příjemné a text to značně zpřehledňuje. Některé editory však poskytují kromě této možnosti ještě o mnoho více.

Protože pro editaci XML používám Emacs, zaměřím se právě na tento editor. Doporučuji stáhnout si PSGML, což je major mode pro editaci SGML se specifickou podporou pro XML. Kromě již zmíněného umí také např. automatické ukončení otevřeného tagu a v případě, že máte v dokumentu odkaz na DTD, umožňuje vkládat také počáteční tagy přípustné na daném místě dokumentu, atributy tagů, popřípadě jejich hodnoty – podle DTD. Detailní informace o možnostech tohoto módu získáte (jako u všech ostatních) pomocí C-h m. A co je to vlastně to DTD?

Kontrola

Pro XML dokument existují dvě úrovně kontroly jeho „správnosti“. První jsou tzv. well-formedness constraints = požadavky správného zformování dokumentu. Tyto požadavky jsou společné pro všechny XML dokumenty a jde vlastně o obecná pravidla psaní XML dokumentů, která jsme si uvedli v prvním dílu. Dokument, který tato pravidla splňuje je well-formed = správně zformovaný.

Druhou úrovní kontroly jsou pak validity constraints = požadavky platnosti. Aby mohl dokument splnit tyto požadavky, musí vyhovovat pravidlům popsaným v tzv. DTD = Document Type Definition = Definice Typu Dokumentu. DTD je již pro každý typ XML dokumentu různé a umožňuje definovat např. jaký subelement může být vnořen do jakého elementu, jestli daný element může či musí obsahovat daný subelement, jaké jsou přípustné atributy daného elementu apod. Tento standardní nástroj spojený s XML je mocnou pomůckou při psaní i kontrole XML dokumentů.

Následuje krátký příklad.

<!ELEMENT dokument (autor+, titul, kapitola*)>

<!ELEMENT autor (#PCDATA)>
  <!ATTLIST autor
       email   CDATA  #IMPLIED>

<!ELEMENT titul (#PCDATA)>
  <!ATTLIST titul
       uroven   CDATA  #REQUIRED>

<!ELEMENT kapitola (titul, odstavec*)>

<!ELEMENT odstavec (#PCDATA)>

Tento kousek DTD obsahuje většinu možností, které nám DTD poskytuje. Klíčové slovo <!ELEMENT označuje začátek deklarace daného elementu. Za ním následuje jméno tohoto elementu a seznam elementů, které do něj mohou být vnořeny uzavřený v závorkách. Počet výskytů daného elementu lze vyjádřit několika značkami.

  • samotné jméno elementu znamená právě jeden výskyt
  • znak + znamená jeden nebo více výskytů
  • znak * znamená libovolné (i nulové) množství elementů daného jména
  • znak ? znamená žádný nebo jeden výskyt

Pro potřeby seskupování elementů je možno využít závorky – např. (titulek, (odstavec | obrazek)*). Znak | znamená nebo.

Když potom svůj XML dokument spojíte s daným DTD pomocí

<!DOCTYPE jmeno_root_elementu SYSTEM "moje_dtd.dtd" >

vloženého na jeho začátek, můžete jej pomocí validačního programu zkontrolovat a snadno tak zjistit případné nesrovnalosti a snadno zabránit chybám při pozdějším zpracování daného dokumentu. Jako validační program můžete použít např. NSGMLS, které je součástí SP.

Další možnost kontroly XML dokumentů, která umožňuje vytvoření jemnějších pravidel pro jeho strukturu je XML Schema. Tato metoda kontroly zatím není tak rozšířená jako DTD, vzhledem ke svým možnostem se však pravděpodobně rozšíří – zejména do oblastí kde jen s DTD nevystačí. (Základní podporu XML Schema obsahuje například XML parser Xerces z projektu Apache XML – poznámka redakce).

Transformace pomocí XSLT

XSL je zkratkou anglického eXtensible Stylesheet Language = Rozšiřitelný jazyk pro tabulky stylů (ohavný překlad). Jde o jazyk založený na XML a určený pro popis transformací a zobrazení XML dokumentů. Protože jde o velice rozsáhlý formát, který si klade za cíl umožnit libovolnou transformaci XML dokumentů a zároveň i popis jeho výsledného zobrazení, vyčlenila se z něj během vývoje právě ona část určená pro transformace, která byla nazvána XSLT (T = Transformation).

XSLT je tedy určen pro transformaci XML dokumentů do jiných (zejména XML) podob. Jeho základem jsou templáty (předlohy) pro jednotlivé elementy. Každý element, který má být transformován má svůj templát, který říká jak má být přeložen. Např.

<xsl:template match="duraz">
  <i>
    <xsl:apply-templates />
  </i>
</xsl:template>

lze v XSLT využít pro převod všech elementů jménem „duraz“ (tedy něčeho na co má být položen důraz) na „i“ – tedy na kurzívu např. při převodu do XHTML. Vidíte zde rovněž použití namespacu (prostoru jmen) v XML. Všechny „příkazy“ XSLT mají namespace xsl. Atribut match je použit pro výběr elementu na který se daný templát vztahuje a jeho hodnotou může být jakýkoli XPath výraz.

A tím se dostáváme k dalšímu záhadnému výrazu – XPath. Jde o syntaxi, která popisuje polohu elementů v XML souboru podobně jako např. polohu souboru ve filesystému. Např. „/“ označuje root element, „p/duraz“ jakýkoli „duraz“, který je přímo vnořen do „p“, „p//duraz“ jakýkoli „duraz“, který má „p“ mezi svými předky. Lze také použít „*“ místo libovolného elementu.

<xsl:apply-templates />

slouží pro aplikaci templátů na vnořené elementy. Protože XSLT obsahuje defaultní templáty pro textové elementy (tedy kusy textu, které jsou vloženy přímo do elementu) dojde tak ke zkopírování textu, který tento element obsahuje. Můžete si také selektivně vybrat vnořené elementy, na které chcete templáty aplikovat. Obsah elementu, na který templát neaplikujete se ve výstupním souboru samozřejmě neobjeví.

Pro konverzi XML pomocí XSLT budete potřebovat nějaký XSLT procesor. Kvůli nedostatku místa pouze odkazuji na tuto W3C stránku, kde potřebné odkazy najdete.

XSLT je velmi mocným nástrojem pro konverzi XML souborů a lze ho velmi dobře využít pro zobrazení jejich obsahu, např. převedením na XHTML. Pokud však nepotřebujete měnit strukturu a uspořádání dokumentu můžete často vystačit pouze s použitím CSS stylesheetu na XML dokument pomocí

ict ve školství 24

<?xml-stylesheet href="muj_templat.css" type="text/css" ?>

vloženého do XML dokumentu. O syntaxi a použití CSS např. zde.

A to je pro dnešek vše. Pro příští díl bych rád vyhlásil hlasování o jeho obsahu. Může být buď věnován XSLT, na který se dnes dostalo jen velmi málo – tedy příkladům, možnostem, jednotlivým XSLT procesorům apod., nebo může být věnován nástrojům programátorským – jak zapisovat a číst XML ze svého programu a nebo už také žádný další díl být nemusí. Samozřejmě je možné také cokoli jiného z této oblasti. (Pokud nikdo hlasovat nebude tak se rozhodnu sám :)).

Autor článku

Bedřich Košata je vedoucím Laboratoří CZ.NIC, výzkumného a vývojového centra sdružení CZ.NIC, správce české národní domény.