Interaktivní typová kontrola XML a ladění XML transformací



Podobné dokumenty
Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

24. 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.

APLIKACE XML PRO INTERNET

Obsah prezentace. Co je to XML? Vlastnosti. Validita

XML schémata XML teorie a praxe značkovacích jazyků (IZI238)

Teoretické a pokročilé aspekty XML technologií

Prezentace XML. XML popisuje strukturu dat, neřeší vzhled definice vzhledu:

Elektronické publikování. doc. RNDr. Petr Šaloun, Ph.D. katedra informatiky FEI VŠB TU Ostrava

SCHÉMOVÉ JAZYKY. Přednáška z předmětu KMA/POK. Otakar ČERBA Západočeská univerzita v Plzni

Inovace výuky prostřednictvím šablon pro SŠ

Pokročilé techniky tvorby sestav v Caché. ZENové Reporty

XML schémata. Jiří Kosek

XML schémata. Jiří Kosek

HTML Hypertext Markup Language

Správnost XML dokumentu

XML a XSLT. Kapitola seznamuje s šablonami XSLT a jejich použití při transformaci z XML do HTML

XML a DTD. <!DOCTYPE kořenový_element [deklarace definující vlastnosti jednotlivých elementů a atributů]> externí deklarace:

Jazyky pro popis dat

XML schémata. Agenda. Přínosy použití schématu. Proč potřebujeme schéma dokumentů XML. Tutoriál. Agenda. proč a nač jsou schémata

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

Uspořádání klient-server. Standardy pro Web

Programy pro psaní textů. textové editory, textové procesory

Distanční opora předmětu: Databázové systémy Tématický blok č. 4: XML, DTD, XML v SQL Autor: RNDr. Jan Lánský, Ph.D.

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

Systém elektronického rádce v životních situacích portálu

MBI - technologická realizace modelu

Elektronické publikování. Základní pojmy. B žné systémy. Publika ní nástroje. doc. RNDr. Petr Šaloun, Ph.D. FEI VŠB TU Ostrava

Předmluva k druhému vydání 13. Úvod 17. ČÁST 2 Vytváření dokumentů XML 65

Výukový materiál KA č.4 Spolupráce se ZŠ

HTML XHTML JavaScript PHP ASP.Net Zajímavé odkazy

Kaskádové styly základy grafiky

Značkovací jazyky a spol. HTML/XHTML XML JSON YAML Markdown, Texy!

Syntaxe XML XML teorie a praxe značkovacích jazyků (4IZ238)

Jak psát bakalářskou práci v DocBooku

VY_32_INOVACE_INF3_18. Textové formáty PDF, TXT, RTF, HTML, ODT

Tvorba informačních systémů

XSLT a jmenné prostory

HTML - Úvod. Zpracoval: Petr Lasák

X L M L v v Of O f f i f ce XML OBECNĚ VBA pro Excel Petr Blaha XML v MS Office Michal Theodor

Kartografická webová aplikace. Přednáška z předmětu Počítačová kartografie (KMA/POK) Otakar Čerba Západočeská univerzita

Vývoj Internetových Aplikací

Mgr. Stěpan Stěpanov, 2013

Obsah přednášky. XML DOM SAX XPath XSL transformace 1/46

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. Dokumentace k programu MMDoc

Analýza dat a modelování. Speciální struktury

Alena Malovaná, MAL305

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

Rozšiřitelný editor XML dokumentů. Tomáš Diviš

13. Vytváření webových stránek

Základy XML struktura dokumentu (včetně testových otázek)

Tvorba webu. Úvod a základní principy. Martin Urza

Název modulu: Tvorba webu pomocí XHTML a CSS začátečníci

Publikování map na webu - WMS

1 Webový server, instalace PHP a MySQL 13

Úvod do databázových systémů B

22. Tvorba webových stránek

M4 PDF rozšíření. Modul pro PrestaShop.

Základy HTML. Autor: Palito

Příklad buňka tabulky

Základy WWW publikování

Další XML technologie

XSLT pomocí JavaScriptu v Mozille (... Opeře a Safari)

Dotazování nad XML daty a jazyk XPath

XML snadno a rychle Martin Kuba, ÚVT MU

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT

Validace souborů DS3

Vstupní data pro program Deformace ve formátu XML

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Dnešní téma. Oblasti standardizace v ICT. Oblasti standardizace v ICT. Oblasti standardizace v ICT

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Co je HTML. 1. Párový tag má začátek a konec: 2. Nepárový tag nemá ukončovací značku:

Tvorba webových stránek

2 PŘÍKLAD IMPORTU ZATÍŽENÍ Z XML

ANOTACE vytvořených/inovovaných materiálů

3 MOŽNÉ PŘÍSTUPY K TVORBĚ APLIKACÍ NAD SVG DOKUMENTY

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Pokyny k vypracování závěrečné maturitní práce

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Tvorba informačních systémů

Software602 Form Designer

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

TÉMATICKÝ OKRUH Softwarové inženýrství

Příprava dokumentů textovým procesorem II.

Tvorba WWW stránek. Mojmír Volf

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

O projektu Nasazení OpenOffice.org v praxi

(X)HTML, CSS a jquery

Formátování pomocí stylů

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Microsoft Office Word 2003

14. Jazyk HTML (vývoj, principy, funkce, kostra stránky). Jazyk XML, XHTML. Algoritmizace - cyklus for, while a do while, implementace v jazyce

Obecný popis struktury souborů a rozhraní pro třetí strany společného technického zařízení správců daně (Podatelny EPO)

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Zadání maturitní práce ve školním roce 2016/2017

Transkript:

MASARYKOVA UNIVERZITA V BRNĚ FAKULTA INFORMATIKY Interaktivní typová kontrola XML a ladění XML transformací BAKALÁŘSKÁ PRÁCE Marek Posolda Brno, jaro 2005

Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Vedoucí práce: RNDr. Petr Sojka 11

Shrnutí XML jako univerzální formát nám poskytuje ideální možnost pro konverzi dat do jiných formátů. V některých případech však bývá obtížné transformovat data z jiných formátů právě do XML. Rovněž je nutné zabezpečit, aby XML data byla ve správném formátu. Právě těmito problémy jsem se zabýval ve své bakalářské práci. m

Klíčová slova XML, XML Schema, Relax NG, XSLT, Word XML, OpenOffice XML, parser, XSLT procesor

Obsah 1 Úvod 1 2 Základy práce s XML schématy 2 3 Jazyky pro popis schématu XML dokumentu 4 3.1 DTD 4 3.2 XML Data 7 3.3 XML Schema 7 3.4 Relax NG 10 3.5 Schematron 13 4 Stylové jazyky pro konverze XML 14 4.1 CSS 14 4.2 DSSSL 15 4.3 XSL 16 4.3.1 XSL FO 16 4.3.2 XSLT ŠABLONY 16 5 Formáty XML 20 5.1 XML formát programu Microsoft Word 20 5.2 OpenOffice XML formát 22 6 Software pro práci s XML 25 6.1 XSLT procesory 25 6.2 Parsery 26 6.3 Další programy 26 7 Transformace a typová kontrola bibliografických údajů 28 7.1 Transformace z PDF do XML 28 7.2 Transformace z Word XML do logického XML značkování 29 7.3 Tvorba programu pro konečné zpracování bibliografických údajů 30 7.4 Typová kontrola bibliografických údajů 30 8 Závěr 31 Bibliografie 32 A Seznam použitých odkazů 33 B Obsah přiloženého CD 34 v

Kapitola 1 Úvod V posledních letech došlo k velkému rozšíření značkovacích jazyků, především pak jazyka XML (extensible Markup Language). Tento jazyk nalezl použití v mnoha oblastech dnešních informačních technologií. Nejčastější příklady použití jsou konverze dat do jiných formátů a vyhledávání v dokumentech. Jazyk XML nám umožňuje používat v našich dokumentech libovolné značkování, které si sami vytvoříme a nijak nás v tomto neomezuje (jako např. jazyk HTML). Pro lepší komunikaci s ostatními uživateli, sdílení dokumentů mezi různými organizacemi či podporu práce s různými aplikacemi se však jeví jako nejvýš vhodné vytvořit určitá omezení a pravidla pro značkování určitého typu dokumentu. Definici těchto pravidel pro určitý dokument nám umožňuje DTD (Document Type Definition). Ukázalo se však, že DTD zdaleka nedostačuje všem potřebám pro tvorbu dokumentů. Neumožňovalo definovat datové typy jednotlivých entit a nepodporovalo jmenné prostory. Především z těchto důvodů se jevilo vhodné pouze k vytváření textově orientovaných dokumentů. Bylo proto potřeba vytvořit jazyk, který by stejně jako DTD umožňoval přehledně definovat strukturu dokumentu a zároveň i definovat datové typy pro jednotlivé elementy či atributy. Proto vznikly tzv XML schémata. Jazyků pro podporu XML schémat vzniklo hned několik a ve své práci jsem se zabýval těmi nejdůležitějšími z nich. Popsal jsem také některé stylové jazyky pro převod z XML do jiných formátů, neboť některé z nich jsem ve své práci použil. Zabýval jsem se i formáty XML dokumentů, jež je možno vygenerovat z programů Microsoft Word a OpenOffice Writer. V praktické části své práce jsem popsal použití XSLT šablon a XML schémat pro ověření správnosti formátu bibliografických údajů matematických časopisů. 1

Kapitola 2 Základy práce s XML schématy Značkovací jazyky, především pak jazyk XML, nalézají v dnešních aplikacích stále větší podporu. Jazyk XML můžeme použít například k napsání dokumentu, který pak můžeme jednoduše převést do mnoha dalších formátů. Můžeme z něj tedy vytvořit HTML, PDF, TpX či další formáty. Díky tomu se XML nabízí jako vhodný univerzální formát pro elektronickou výměnu informací. XML značkování nachází rovněž vhodné použití při vyhledávání slov v dokumentu či v programování. Univerzálnost XML spočívá v tom, že můžeme vytvořit dokument s libovolnými značkami, které si sami vymyslíme. Zároveň se však ukazuje, že příliš volnosti škodí, neboťpro lepší práci s dokumentem a pro převod do jiných formátů by měl XML dokument obsahovat pouze několik typů značek. Pokud například vytváříme firemní katalog výrobků, je velmi vhodné pevně definovat značky pro hlavičku katalogu i samotný seznam výrobků. U každého výrobku bychom pak měli používat stejné značky pro název výrobku, datum výroby, trvanlivost, cenu atd. Právě z tohoto důvodu přišly na řadu jazyky pro definici schématu XML dokumentu. Ke každému dokumentu můžeme s jejich pomocí definovat jeho přípustnou strukturu. V definici schématu katalogu tedy například použijeme element CENA pro cenu výrobku a když už jsme si jednou takto element definovali, nemůžeme už v dokumentu pro cenu výrobku použít např. element CENAVYROBKU. Velmi vhodné je používat jednotný formát pro určitý typ dokumentu nejen v rámci svých vlastních aplikací. Například pro katalogy cen mezi dvěma podobnými firmami je nevhodné, aby jedna z firem měla pro cenu definován element CENA a druhá firma element CENAVYROBKU. Z tohoto důvodu vznikla spousta definovaných schémat, které jsou používány mnoha firmami a organizacemi. Nejznámější z těchto schémat jsou WML (wapové stránky pro mobilní telefony), XHTML (nástupce jazyka HTML pro tvorbu webových stránek), DocBook (vytváření dokumentace) či MathML (matematické vzorce). Ověření správné struktury dokumentu se nazývá validace a používají se k ní tzv.parsery Parser je vlastně program, jehož prioritním účelem je samotná validace dokumentů. V dnešní době již existují programy, jež jsou používány jednak jako parsery pro validaci a zároveň také jako konvertory XML dokumentů do jiných formátů. Ve své práci se těmito programy rovněž budu zabývat. Některé jazyky pro popis schématu umožňují definovat formát jednotlivých elementů. Obsah elementu tedy musí mít přípustnou strukturu a nesmí se od ní v ničem odlišovat. Moderní jazyky pro tvorbu XML schémat umožňují definovat datový typ elementu, což je 2

2. ZÁKLADY PRÁCE S XML SCHÉMATY poměrně mocný způsob, jak kontrolovat správný obsah elementu či atributu. Schéma může sloužit i programátorům k vytvoření objektového modelu včetně kódu, který jej implementuje. Pomocí vygenerovaného kódu ze schématu můžeme v aplikaci manipulovat s dokumenty XML, které budou reprezentovány jako sada objektů v paměti. Konečně poslední účel XML schémat, který stojí za zmínku, je použití XML schémat k vytvoření dokumentace. Dnes již existují nástroje, které umožňují vytvořit z daného XML schématu sadu hypertextově provázaných stránek sloužících jako dokumentace. XML schema se neustále velmi rychle vyvíjí. Nyní považuji za nanejvýš vhodné nastínit základní historii XML schémat a seznámit čtenáře s nejdůležitějšími jazyky pro tvorbu XML schémat. 3

Kapitola 3 Jazyky pro popis schématu XML dokumentu 3.1 DTD Historicky první jazyk popisující schéma XML dokumentu je jazyk DTD (Document Type Definition). Tento jazyk pochází ještě z doby SGML (SGML je značkovací jazyk, jenž byl předchůdce XML a byl pomocí něho kromě samotného XML vytvořen například i jazyk HTML). Jazyk DTD patří ke standardům XML a je proto podporován všemi aplikacemi, které podporují XML. Toto je obrovská výhoda DTD oproti novějším jazykům XML schémat. Jinak ovšem DTD příliš mnoho výhod nenabízejí. Přesto jsou zatím nejrozšířenějším jazykem pro popis schématu XML dokumentu, a proto se hodí popsat jejich syntaxi. Nyní tedy krátký příklad toho, co nám XML umožňuje. Představme si krátký XML dokument pro popis firmy. Tento dokument by mohl vypadat např. takto <! FIRMA.XML > <?xml version="l.0" encoding="windows-1250"?> <!DOCTYPE FIRMA SYSTEM "firma.dtd"> <FIRMA> <NAZEV>Pekařství Novák a syn, s.r.o.</nazev> <ADRESA> <ULICE>Fajmonova 10</ULICE> <PSC>628 00</PSC> </ADRESA> <ZAMESTNANCI> <ZAMESTNANEC id="il"> <SEF/> <JMENO>Jan</JMENO> <PRIJMENI>Novák</PRIJMENI> <PLAT>95 0 0 0</PLAT> <DATUMNAROZENI>1964-10-6</DATUMNAROZENI> <TELEFON>54 4 8 87196</TELEFON> </ZAMESTNANEC> <ZAMESTNANEC id="i2"> <PODRIZENY/> <JMENO>Daniel</JMENO> <PRIJMENI>Novák</PRIJMENI> <PLAT>2 0 0 0</PLAT> 4

3.1. DTD <DATUMNAROZENI>1985-5-3K/DATUMNAROZENI> </ZAMESTNANEC> </ZAMESTNANCI> </FIRMA> Na první pohled vidíme, že dokument obsahuje informace o firmě. A nyní si například můžeme představit, že jsme z úřadu pro správu firem a musíme udělat podobný dokument o každé firmě ve městě. Na první pohled je zřejmé, že bude velmi vhodné, když údaje o jednotlivých firmách budou v jednotném formátu (například kvůli hromadnému zpracování dokumentů atd.). Chceme tedy nějakým způsobem zajistit, aby se element ADRESA skládal z elementů ULICE a PSC a ty už se skládali jen z textu. Podobně chceme v elementu ZAMESTNANCI povolit libovolný počet zaměstnanců (jednoho nebo více) a chceme aby každý zaměstnanec měl svoje jednoznačné číslo, představené atributem id. Podobně zde jsou ještě další podmínky. Způsob vyjádření formátu dokumentu a formátu jeho jednotlivých elementů nám nabízí právě DTD. První řádek našeho XML schématu obsahuje standardní deklarace o verzi, použitém kódování atd. Pro nás je již mnohem zajímavější druhý řádek <!DOCTYPE FIRMA SYSTEM "firma.dtd"> Na tomto řádku je informace o připojení DTD, jehož URL-adresa je FIRMA.DTD, s naším XML dokumentem, jenž má kořenový element FIRMA. Soubor FIRMA.DTD vypadá takto: <! FIRMA.DTD > ELEMENT FIRMA (NÁZEV,ADRESA,ZAMESTNANCI)> ELEMENT NÁZEV (#PCDATA)> ELEMENT ADRESA (ULICE,PSC)> ELEMENT ULICE (#PCDATA)> ELEMENT PSC (#PCDATA)> ELEMENT ZAMESTNANCI (ZAMESTNANEC+)> ELEMENT ZAMESTNANEC ((SEF PODŘÍZENY),JMÉNO,PRIJMENI,PLAT, DATUMNAROZENI,TELEFON?)> ELEMENT SEF EMPTY> ELEMENT PODŘÍZENY EMPTY> ELEMENT JMÉNO (#PCDATA)> ELEMENT PŘÍJMENÍ (#PCDATA)> ELEMENT PLAT (#PCDATA)> ELEMENT DATUMNAROZENI (#PCDATA)> ELEMENT TELEFON (#PCDATA)> ATTLIST ZAMESTNANEC id ID #REQUIRED> Vidíme, že DTD je poměrně krátké a přehledné, a přesto nám poskytuje mnoho informací o formátu dokumentu FIRMA.XML. Nyní tedy krátké vysvětlení. 5

3.1. DTD Kořenový element FIRMA se podle DTD musí skládat z elementů NÁZEV, ADRESA, ZA MESTNANCI. Pořadí elementů není zaměnitelné a každý se v elementu FIRMA vyskytuje právě jednou. U elementu NÁZEV vidíme deklaraci (#PCDATA) což znamená, že v tomto elementu se vyskytuje již jen libovolný text, ale nemohou zde být žádné další elementy (element může být klidně i prázdný). Další zajímavá deklarace je u elementu ZAMESTNANCI. Text (ZAMESTNANEC+) nám sděluje, že v elementu ZAMESTNANCI je libovolný počet elementů ZAMESTNANEC avšak nejméně jeden. Kdyby bylo v deklaraci (ZAMESTNANEC*) znamenalo by to úplně to stejné jako (ZAMESTNANEC+), ale byl by povolen i nulový počet elementů ZAMESTNANEC (tedy prázdný element ZAMESTNANCI). Na dalším řádku nám deklarace TELEFON? sděluje, že počet elementů TELEFON je 0 nebo 1 tzn.element TELEFON je jakoby nepovinný, ale může se vyskytnout maximálně jednou. Deklarace (SEF PODŘÍZENY} sděluje, že v elementu ZAMESTNANEC je přítomen právě jeden z elementů SEF či PODŘÍZENY (jedná se tedy o informaci o statutu zaměstnance). Na dalších řádcích vidíme u elementů SEF a PODŘÍZENY deklaraci EMPTY, jež sděluje, že tyto elementy musí být prázdné. Poslední věcí, která stojí u našeho DTD za zmínku, je řádek s deklarací <!ATTLIST ZAMESTNANEC>, za kterým následuje seznam atributů pro element ZAMESTNANEC. V našem případě je to pouze atribut id, jenž je typu ID (typ ID zaručuje jedinečnost dané hodnoty. Nesmí ovšem začínat číslicí, proto hodnoty il,i2 u našich zaměstnanců.) Další typy u atributů jsou CD ATA (libovolná hodnota), IDREF (atribut musí obsahovat hodnoty nějakého dříve uvedeného atributu ID) a výčtový typ. Např.atribut POHLAVÍ (muz,zena) #IMPLIED "muz" má povoleny jen hodnoty muz,zena. Na závěr ještě poslední nepovinný parametr u atributu může mít hodnotu #REQUIRED pokud je atribut vždy povinný nebo #IMPLIED pokud povinný není. Pokud u našeho příkladu atribut POHLAVÍ vynecháme, automaticky se doplní pohlaví muz. Na první pohled tedy vidíme, že DTD je velmi užitečný nástroj pro popis schématu dokumentu. Ukázalo se však, že DTD zdaleka nedostačuje pro popis schématu složitějších dokumentů. Prvním nedostatkem DTD je nemožnost určení datového typu jednotlivých elementů a atributů. V dřívějších dobách sloužila technologie XML především pro popis a tvorbu textově orientovaných dokumentů jako například knihy, dokumentace, články, webové stránky atd. Později se však ukázalo, že u některých elementů v dokumentu je nezbytné určit jejich datový typ. Druhá nevýhoda DTD je nulová podpora jmenných prostorů. U dokumentu definovaného pomocí DTD nemůžeme kombinovat více různých jmenných prostorů, což je v dnešní době rovněž velká ztráta. Třetí nevýhoda je ta, že samotné DTD není ve formátu XML. To se může jevit spíše jako výhoda a skutečně to z hlediska přehlednosti výhoda je, neboťzápis pomocí DTD je většinou velice stručný oproti novějším jazykům, které zapisují schéma dokumentu v XML formátu. Na schéma zapsané v DTD však nemůžeme použít mnohé technologie vážící se k XML. 6

3.2. XML DATA Nemůžeme ho například nijak zpracovávat nebo k němu generovat dokumentaci pomocí XSLT šablon atd. Poslední nevýhoda je poměrně malá podpora pro složitější strukturu dokumentu. Pokud by nám například u našeho elementu ZAMESTNANEC bylo lhostejné, zda deklarace začne elementem JMÉNO a po něm PŘÍJMENÍ nebo elementem PŘÍJMENÍ a po něm JMÉNO (nezáleželo by tedy na pořadí elementů JMENO,PRIJMENI) nemohli bychom tuto skutečnost pomocí DTD nijak vyjádřit. Nemůžeme také například deklarovat dva stejné elementy JMÉNO v různých významech. Proto musíme u naší firmy použít pro její jméno element NÁZEV a nikoliv JMÉNO neboť element JMÉNO již v dokumentu je pro určení křestního jména zaměstnance. Ze zmíněných důvodů začaly vznikat jazyky, které by umožnily lépe definovat strukturu dokumentu než DTD. Žádný z nich však dlouhou dobu nebyl natolik dokonalý, aby jej konzorcium W3C (významná organizace ve světě XML, viz. [AI]) přijalo jako standard. 3.2 XML Data Poměrně významnou roli hrál jazyk XML Data [A2] vyvinutý v roce 1998. Několik firem jej poslalo do konzorcia W3C jako návrh na standardní jazyk pro definování XML schémat. Návrh tohoto jazyka byl však příliš složitý k ověření použitelnosti. Větší roli proto hrála jeho zjednodušená verze XDR (XML Data Reduced). Ani tento jazyk však nebyl přijat jako všeobecně uznávaný standard, i když našel v mnoha aplikacích použití (ve své době jej používal dokonce i Microsoft). 3.3 XML Schema Prvním jazykem přijatým jako standard se stal v květnu 2001 jazyk XML Schema [A3]. Tento jazyk se velmi často označuje také zkratkou WXS (W3C XML Schema) a vyvinul se z výše zmíněných jazyků XD a XDR. XML Schema eliminuje všechny výše zmíněné nevýhody DTD (umožňuje definovat datové typy elementů a atributů a jmenné prostory. Samotná definice v tomto jazyce je XML dokumentem.) Jedinou nevýhodou tohoto jazyka je na první pohled složitější definice schématu. Jako nepříjemné se může jevit i to, že jej nepodporují všechny parsery a aplikace. Tato nevýhoda však zřejmě nebude trvat dlouho. Nové verze parserů by již měly XML Schema podporovat. Nyní tedy ukázka schématu v jazyce XML Schema, jež validuje náš dokument FIRMA.XML mnohem přesněji, než výše ukázané DTD. <! FIRMA.XSD > <?xml version="l.0" encoding="windows-1250"?> <xs:schema xmlns:xs="http://www.w3.org/2 0 01/XMLSchema"> <xs:simpletype name="psctype"> <xs:restriction base="xs:string"> 7

3.3. XML SCHEMA <xs:pattern value="\d{3} \d{2}"/> </xs:restriction> </xs:simpletype> <xs:simpletype name="plattype"> <xs:restriction base="xs:decimal"> <xs:minexclusive value="0"/> </xs:restriction> </xs:simpletype> <xs:element name="firma"> <xs:complextype> <xs:sequence> <xs:element name="nazev" type="xs:string"/> <xs:element name="adresa"> <xs:complextype> <xs:sequence> <xs:element name="ulice" type="xs:string"/> <xs:element name="psc" type="psctype"/> </xs:sequence> </xs:complextype> </xs:element> <xs:element name="zamestnanci"> <xs:complextype> <xs:sequence> <xs:element name="zamestnanec" maxoccurs="unbounded"> <xs:complextype> <xs:sequence> <xs:choice> <xs:element name="sef"> <xs : complextypexxs : sequencex/xs : sequencex/xs : complextype> </xs:element> <xs:element name="podrizeny"> <xs : complextypexxs : sequencex/xs : sequencex/xs : complextype> </xs:element> </xs:choice> <xs:choice> <xs:sequence> <xs:element name="jmeno" type="xs:string"/> <xs:element name="prijmeni" type="xs:string"/> </xs:sequence> <xs:sequence> <xs:element name="prijmeni" type="xs:string"/> <xs:element name="jmeno" type="xs:string"/> </xs:sequence> </xs:choice> <xs:element name="plat" type="plattype"/> <xs:element name="datumnarozeni" type="xs:date"/> 8

<xs:element name="telefon </xs:sequence> <xs:attribute name="id" </xs:complextype> </xs:element> </xs:sequence> </xs:complextype> </xs:element> </xs:sequence> </xs:complextype> </xs:element> </xs:schema> type="xs:int" type="xs:id" 3.3. XML SCHEMA minoccurs="0"/> use="required"/> Na první pohled vidíme, že samotné schéma je dlouhý a nepříliš přehledný dokument. Jeho délka je ovšem pochopitelná, neboťumožňuje validovat mnohem přesněji a určuje pro data v naší firmě nové datové typy. Na druhém řádku dokumentu je deklarace jmenného prostoru schématu, který musíme používat pro všechny elementy s výjimkou vlastních definovaných typů. Neustálé používání jmenného prostoru je jednou z věcí, jež činí XML Schema dokument méně přehledný než DTD nebo třeba Relax NG. V dalším odstavci schématu vidíme definici vlastního datového typu psctype, který později použijeme pro PSC. Definice vlastních datových typů je velkou zbraní XML Schema. Tento typ je definován restrikcí (omezením, element xs:restriction) předdefinovaného datového typu xs:string (xs:string může obsahovat libovolný řetězec). Restrikce je definována vzorem (xs:patern) pomocí regulárních výrazů jazyka Perl. Tyto regulární výrazy jsou vskutku velmi mocný prostředek k vyjádření omezení řetězce. V našem případě výraz \d{3} \d{2} znamená 3 číslice+ mezera + 2 číslice. Jakýkoliv jiný výraz nebude jako psctype uznán. Další definice plattype je restrikce typu xs:decimal (reálná čísla), která určuje, že číslo musí být větší než 0. (Podobně existují i omezení jako xs:mininclusive,xs:maxexclusive atd.) Další datové typy jež můžeme použít jsou například xs:int, xs:integer(celá čísla), xs:positiveinteger(kladná celá čísla), xs:nonnegativeinteger (nezáporná celá čísla) a další. Důležitý je typ xs:date pro datum (musí být ve formátu rrrr-mm-dd), xs:time pro čas či xs:datetime pro datum i čas. Datových typů pro datum a čas je však mnohem více. Z dalších datových typů stojí za zmínku boolean (logická hodnota), token (řetězec bez bílých míst na okrajích), anyuri (odkaz), anytype(jakýkoliv typ), či ID,IDREF(podobně jako DTD). Vidíme, že každý element v XML dokumentuje definován pomocí elementu xs:element. Pokud tento element není jednoduchý, ale obsahuje další podelementy a atributy, musí mít podelement xs:complextype (složený typ). V xs:complextype pak můžeme libovolně používat podelementy xs:sequence,xs:choice a xs:all. Element xs:sequence uvnitř sebe obsahuje posloupnost dalších podelementů, které jsou přítomny v daném pořadí, zatímco xs:choice obsahuje seznam elementů z nichž si vybereme právě jeden. Elementy xs:choice a xs: sequence můžeme mezi sebou libovolně kombinovat a vytvářet tak poměrně složité struktury. Využít můžeme toho, že narozdíl od DTD zde 9

3.4. RELAX NG element s určitým jménem můžeme použít víckrát. Tak je naše schéma definované tak, že ve výsledném XML dokumentu můžeme zaměnit pořadí podelementů JMÉNO a PŘÍJMENÍ u elementu ZAMESTNANEC. Použití xs:all uvnitř xs:complextype říká, že elementy v xs:all můžeme ve výsledném XML dokumentu libovolně přeházet, avšak xs:all nemůžeme kombinovat s xs:choice ani xs:sequence. Definice prázdného elementu je proti DTD poněkud složitější a je definována jako prázdná sekvence (viz.elementy SEF,PODRIZENY). Atributy typu xs:element mohou být kromě name a type také minoccurs a maxoccurs udávající v čísle minimální a maximální počet výskytů daného elementu v dokumentu. Toto je další velké vylepšení oproti DTD, neboťdtd nám umožňovalo pomocí znaků *, +,? pouze nepřesně určovat počty jednotlivých elementů. Pokud chceme, aby byl počet daného elementu libovolný použijeme maxoccurs="unbounded" místo přesného čísla. Pokud atributy minoccurs a maxoccurs nepoužijeme, je element povinný a musí se vyskytovat právě jednou. XML Schema nám umožňuje ještě další věci jako používání jmenných prostoru v dokumentu, nástroje pro automatickou tvorbu dokumentace, možnost vkládání výrazů jazyka XPath (například pro definici jedinečných hodnot) a další. Více informací naleznete např.na [A6] nebo v češtině například na [A7]. 3.4 Relax NG Dalším jazykem XML schémat, který stojí za zmínku, je jazyk RelaxNG [A4]. Tento jazyk vznikl spojením jazyků Relax (autor Murata Makoto) a Trex 0ames Clark). Cílem bylo vytvořit jazyk, jenž by byl jednodušší než XML Schema, ale měl by stejné možnosti. Tento jazyk byl standardizován na půdě sdružení OASIS a je rovněž hojně rozšířen a oblíben pro svou jednoduchost. Počet jeho implementací se v současnosti rozšiřuje. Nyní tedy ukázka Relax NG schématu pro naši firmu z dokumentu FIRMA.XML <! FIRMA.RNG > <element xmlns="http://relaxng.org/ns/structure/1.0" name="firma" datatypelibrary="http://www.w3.org/2 0 01/XMLSchema-datatypes"> <element name="nazev"> <text/> </element> <element name="adresa"> <element name="ulice"> <text/> </element> <element name="psc"> <data type="string"> <param name="pattern">\d{3} \d{2}</param> </data> 10

3.4. RELAX NG </element> </element> <element name="zamestnanci"> <oneormore> <element name="zamestnanec"> <choice> <element name="sef"> <empty/> </element> <element name="podrizeny"> <empty/> </element> </choice> <attribute name="id"> <data type="id"/> </attribute> <interleave> <element name="jmeno"> <text/> </element> <element name="prijmeni"> <text/> </element> </interleave> <element name="plat"> <data type="decimal"> <param name="minexclusive">0</param> </data> </element> <element name="datumnarozeni"> <data type="date"/> </element> <optional> <element name="telefon"> <data type="positiveinteger"/> </element> </optional> </element> </oneormore> </element> </element> Schéma je na první pohled stejně složité jako XML Schema. Hlavní výhodou RelaxNG je však množnost vytvářet schéma v kompaktní syntaxi, jež sice není XML dokumentem, ale je podobná DTD a nabízí stejné možnosti jako XML Schema. Dnes již existují nástroje pro převod dokumentu z kompaktní syntaxe do XML syntaxe a naopak. Pravděpodobně nejznámější z nich je Trang dostupný zdarma na [A14]. 11

3.4. RELAX NG Jazyk Relax NG sám o sobě nepodporuje datové typy, ale můžeme jej o podporu datových typů rozšířit. Na druhém řádku souboru FIRMA.RNG vidíme deklaraci, která k tomuto souboru připojuje knihovnu datových typů jazyka XML Schema. Vidíme, že například deklarace PSC je stručnější než u jazyka XML Schema, neboť Relax NG umožňuje vkládání parametrů přímo v deklaraci datového typu. Další viditelnou výhodou je element interleave, který umožňuje použít v něm deklarované elementy v libovolném pořadí. To nám umožňuje mnohem větší pohodlí při deklaraci elementů, než je tomu u XML Schémat. Velká výhoda je, že nemusíme používat jmenný prostor u všech deklarací. Díky tomu je Relax NG schéma o něco přehlednější než XML Schema. Narozdíl od XML schémat však u Relax NG nemáme možnost přesně určit počet výskytů daného elementu. Pokud bychom například chtěli, aby se element TELEFON vyskytoval v dokumentu dvakrát, musíme tuto skutečnost vyřešit tak, že ho dvakrát deklarujeme. Schéma v kompaktní syntaxi Relax NG, jež odpovídá našemu složitějšímu, vypadá takto <! FIRMA.RNC > element FIRMA { element NÁZEV { text } element ADRESA { element ULICE { text } element PSC { xsd:decimal { pattern="\d{3} \d{2}"} } } element ZAMESTNANCI { ( element ZAMESTNANEC { ( element SEF { empty } element PODŘÍZENY { empty } )(element JMÉNO { text } & element PŘÍJMENÍ { text } ),attribute id { xsd:id },element PLAT { xsd:decimal { minexclusive="0" } },element DATUMNAROZENI { xsd:date },element TELEFON { xsd:positiveinteger }? } + ) } } Toto schéma připomíná spíše DTD, avšak definuje obsah dokumentu mnohem přesněji. Z kompaktní syntaxe lze schéma samozřejmě převést zpět do XML syntaxe například pomocí výše zmíněného programu Trang [A14]. Více o převáděcím programu Trang se dočtete v kapitole 6. 12

3.5. SCHEMATRON 3.5 Schematron Výše zmíněné jazyky pro popis schématu umožňovaly postihnout schéma systematicky. Někdy však může být výhodné použít poněkud jiný přístup k návrhu schématu dookumentu. Proto bych chtěl připomenout například jazyk Schematron, který umožňuje definovat schéma jako sadu podmínek nutných k přijetí a má tedy poněkud odlišný přístup k návrhu schématu než ostatní jazyky. Pomocí jazyka Schematron můžeme definovat například podmínku, že některý element obsahuje číslo větší než číslo uvnitř jiného elementu. To předchozí jazyky vůbec neumožňovaly. Schematron však bývá používán spíš jen jako doplněk ke klasickým schématům. XML Schema i Relax NG umožňují do svých schémat vložit kód ve Schematronu. Existence několika konkurenčních jazyků ukazuje, že každý se hodina něco trochu jiného. V současnosti vzniká projekt DSDL (Document Schema Definition Languages). Hlavním úkolem tohoto projektu je umožnit definici dokumentu, který by byl validní proti několika schématům v různých jazycích. Při rozhodování který jazyk použít je stále pro většinu vývojářů výhodnější použít jazyk XML Schema, neboť jej podporuje více aplikací než Relax NG. Pokud však váš oblíbený parser či jiný program podporuje Relax NG, pak není důvod jej nepoužít. 13

Kapitola 4 Stylové jazyky pro konverze XML Vysvětlili jsme si pojem XML a možnost definice struktury dokumentu pomocí XML schématu. V této kapitole se budeme zabývat konverzí (převodem) XML dokumentu do jiných formátů. Možnost převodu XML dokumentu do jiných formátů jako je např. HTML, HTML Help, RTF, PDF, JavaHelp a další je největší výhodou XML. Jeden XML dokument si tedy můžeme zobrazit v HTML prohlížeči a stejně tak z něj vzápětí vygenerovat černobílý PDF dokument s úplně jiným formátováním písma. Toto samozřejmě není úplně jednoduchý proces. Musíme mít k dispozici technologii, která jednotlivé elementy z XML dokumentu zformátuje podle určitých pravidel. Například podelement NÁZEV elementu FIRMA bude zobrazen v HTML jako velký červený nadpis, zatímco v PDF například jako velký nadpis kurzívou. První podmínka pro tuto konverzi je určitý pevně definovaný formát XML dokumentu, ze kterého budeme konverzi provádět. Právě pro tyto účely můžeme použít XML Schémata. Další podmínka je vytvoření určitých pravidel, které z XML souboru vytvoří PDF soubor, HTML, či jiný formát. Tato pravidla jsou napsaná ve zvláštních souborech, kterým se říká šablony. Kromě převodu do výše zmíněných formátů nám šablony umožňují i konverzi do samotného XML formátu, tzn.dokument XML je zkonvertován na jiný dokument XML s pozměněnou strukturou (např. element PSC je přejmenován na PO- STOVNI_SMEROVACI_CISLO). Pro psaní převodních pravidel používáme stylové jazyky. Mezi nejznámější z nich patří XSL, CSS, DSSSL a FOSI. 4.1 CSS Prvním ze stylových jazyků je CSS, jenž je známý jako jazyk kaskádových stylů. Tento jazyk je hojně rozšířen především v oblasti tvorby HTML stránek. Pomocí CSS můžeme při psaní HTML dokumentu upravovat vzhled jednotlivých tagů v daleko větší míře než nám umožňuje pouze jazyk HTML. A stejně tak je v dnešní době možné definovat pomocí CSS i vzhled jednotlivých XML tagů. CSS tedy není jazyk, který by XML dokument převáděl do jiných formátů. Umožňuje však zobrazit XML dokument jako HTML stránku v prohlížečích jako je Internet Explorer. První krok pro použití CSS na XML dokument je připojení určitého stylu k XML dokumentu. Můžeme si to ukázat na našem XML dokumentu FIRMA.XML. Na jeho druhý řádek 14

4.2. DSSSL napíšeme <?xml-stylesheet href="mujstyl.ess" type="text/css"?> čímž k němu připojíme CSS styl. Poté vytvoříme soubor FIRMACSS.CSS, který může vypadat takto : <!-FIRMACSS.CSS-> NÁZEV { font-size:20pt; text-align:center; color:red; display:block; } ULICE,PSC { font-size:10pt; text-align:center; color:blue; display:block; } ZAMESTNANCI { display:table; text-align:center; } ZAMESTNANEC { background-color:gray; display:table-row; text-align:center;} JMENO,PRIJMENI,PLAT,DATUMNAROZENI,TELEFON { display:table-cell; color:black; text-align:center; } Pro každý element jsou definovány určité vlastnosti, podle kterých bude zobrazen v prohlížeči. Výsledek však nebude vypadat nijak oslnivě, neboťpomocí CSS lze vytvářet akorát poměrně jednoduché formátování. 4.2 DSSSL Dalším stylovým jazykem je DSSSL. Tento jazyk je mnohem vhodnější než CSS neboťumožňuje převádět XML dokument do jiných formátů a nikoliv pouze vytvořit způsob jeho zobrazení v prohlížeči. Autorem DSSSL je Norman Walsh. Tento jazyk byl původně vytvořen především pro převod SGML dokumentů. Nakonec však došlo i na jeho rozšíření pro XML, avšak není používán tak často jako například jazyk XSLT. DSSSL umožňuje konvertovat XML dokument do HTML, ale především do RTF což je jeho největší výhoda. Formát RTF programu Microsoft Word lze pak například pomocí programu Adobe acrobat distiller převést i do PDF. K používání DSSSL stylů potřebujeme ještě procesor, který umožní jejich použití na převod do jiných formátů. Nejznámější z procesorů pro převod DSSSL stylů je Jade, jenž je dostupný na Internetu [A15]. 15

4.3. XSL Na závěr se ještě hodí podotknout, že DSSSL styly nejsou tak populární jako například XSLT, ale práce s nimi je dost podobná. 4.3 XSL XSL vznikl původně jako jazyk podobný CSS. Umožňoval definovat vzhled jednotlivých XML elementů v prohlížečích. Postupně se však ukázalo, že větší uplatnění XSL styly najdou při převodu XML formátu do jiných formátů. XSL tedy vlastně slouží ke dvěma různým věcem. První způsob využití, jež umožňuje definovat formát jednotlivých XML elementů v prohlížečích, nám nabízejí tzv XSL FO (XSL formátovací objekty). 4.3.1 XSLFO Kromě věcí, které dokáží CSS, nám XSL FO umožňují definovat i pár věcí navíc. Pomocí XSL FO můžeme definovat přesný vzhled stránky pomocí vlastností jako je větší počet sloupců, hlavičky, patičky apod. Přesto XSL FO nejsou zdaleka tak rozšířené jako jejich bratříček XSLT. XSLT je druhý způsob využití XSL, který nám umožňuje převod XML dokumentů do jiných formátů. 4.3.2 XSLT ŠABLONY XSLT jazyk byl přijat konzorciem W3C jako standard už v roce 2000. To je nejspíš hlavní důvod jeho většího rozšíření ve srovnání s DSSSL. K dispozici je spousta procesorů, které nám umožňují transformovat XML dokument pomocí XSLT šablon do jiných formátů. Většina procesorů je naprogramovaná v Jávě, některé i v C++. Každý procesor má většinou oproti ostatním nějaké výhody či nevýhody. Podrobnější popis různých XSLT procesorů naleznete v kapitole 6. Populární XSLT procesor Saxon můžeme spustit z příkazové řádky příkazem saxon -o FIRMA.HTML FIRMA.XML FIRMA.XSL Tímto příkazem vygenerujeme z šablony FIRMA.XSL a vstupního souboru FIRMA.XML výstupní soubor FIRMA.HTML. Samozřejmě je nutné, aby vstupní soubory FIRMA.XSL a FIRMA.XML byly ve správném formátu bez syntaktických chyb. Jinak se HTML soubor nevygeneruje a vypíše se chybové hlášení. XSLT šablony nám kromě HTML formátu umožňují generovat i dokument v obecném textovém formátu. To můžeme využít dokonce například k tvorbě zdrojového kódu programu z XML souboru nebo častěji k tvorbě textového souboru s SQL dotazy pro správu databází. V poslední řadě nám XSLT šablony umožňují definovat z XML dokumentu jiný XML dokument. Právě tato varianta nám otvírá největší možnosti, i když to tak na první pohled nevypadá. Existují totiž programy, které z XML dokumentu o určitém přesně definovaném 16

4.3. XSL formátu vytvoří jiný typ dokumentu. Programů pro převod z XML do jiných formátů je skutečně bezpočet. Například můžeme z našeho dokumentu FIRMA.XML vytvořit dokument FIRMA2.XML, který bude XML dokumentem ve formátu XSL FO. Z tohoto XML dokumentu FIRMA2.XML pak můžeme pomocí FO procesorů jako FOP, XEP či PassiveTech vytvořit PDF soubor. Z výše zmíněných FO procesorů je zřejmě nejlepší FOP, neboť tento procesor je Open-source. Podobně existují i programy pro převod z XML do jiných formátů. Tak můžeme XML dokument převádět do formátů jako například WML, XHTML Basic, JavaHelp atd. Nyní už tedy jen zbývá vysvětlit, jak tyto XSLT šablony pro převod z XML dokumentu do jiných formátů mají vypadat. K tomu bude pravděpodobně nejvhodnější použít příklad. Následující ukázková XSLT šablona slouží k transformaci našeho dokumentu FIRMA.XML do HTML. <?xml version="l.0" encoding="utf-8"?> <xsl:stylesheet version="l.0" xmlns:xsl= "http://www.w3.org/1999/xsl/transform"> <xsl:output method="html" encoding="windows-1250"/> <xsl:template match="/"> <html> <head> <title> <xsl:value-of select="/firma/nazev"/> </title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="//nazev"> <center><hl> <xsl:value-of select="."/> </Hlx/center> </xsl:template> <xsl:template match="//adresa"> <xsl:apply-templates/> <HR/> </xsl:template> <xsl:template match="//ulice //PSC"> <center> <H5> 17

4.3. XSL <xsl:apply-templates/> <xsl:text> </xsl:text> </H5> </center> </xsl:tempiate> <xsl:template match="zamestnanci"> <table width="100%"> <tr> <xsl:for-each select="zamestnanec"> <td><table> <xsl:for-each select="jmeno PRIJMENI PLAT TELEFON"> <trxtd><xsl :value-of select="name (.) "/></td> <td><xsl: value-of select=". "/></tdx/tr> </xsl:for-each> <xsl:for-each select="datumnarozeni"> <tr><td>datum NAROZENK/td> <td> <xsl:value-of select="concat(substring(.,9,2), '.',substring(.,6,2),'.',substring(.,1,4))"/> </td> </tr> </xsl:for-each> <xsl:for-each select="@id"> <tr><td>ico</td> <td><xsl: value-of select=". "/></tdx/tr> </xsl:for-each> </table></td> </xsl:for-each> </tr> </table> </xsl:tempiate> </xsl:stylesheet> První zajímavý element v naší šabloně je xsl: stylesheet. Tento element je kořenový element celé šablony. Kromě atributu version obsahuje atribut s deklarací jmenného prostoru xsl. V URL nesmíme udělat překlep, protože jinak bude XSLT šablona nepoužitelná. Další důležitý element xsl: output nás informuje o formátu výstupního dokumentu (v našem případě HTML) a o jeho kódování (windows-1250). Dále už následuje kolekce elementů xsktemplate. Každý z těchto elementů nás informuje o zpracování určitého XML elementu ze vstupního souboru. Atribut match u našeho elementu xsktemplate obsahuje tzv. XPath výraz, který nás informuje o elementech vstupního dokumentu, které budeme zpracovávat. XPath je jazyk, který slouží k adresaci elementů vstupního dokumentu a k výpočtu 18

4.3. XSL různých výrazů ze vstupního XML dokumentu. V našem příkladě je adresace elementů v atributu match u xsktemplate poměrně jednoduchá. Nyní tedy vysvětlení jednotlivých XPath výrazů použitých v příkladě / Kořenový element celého dokumentu (v našem případě FIRMA) /FIRMA/NAZEV Všechny podelementy NÁZEV kořenového elementu FIRMA //NÁZEV Všechny elementy NÁZEV v celém dokumentu //ADRESA //PSC Všechny elementy ADRESA a elementy PSC v dokumentu ZAMESTNANCI Všechny el. ZAMESTNANCI, jenž jsou děti aktuálního elementu Hodnota aktuálního (právě zpracovávaného) elementu name(.) Jméno aktuálního elementu @id Hodnota atributu id, jenž je atributem aktuálního elementu concat(substring...) Řetězcový výraz. Zobrazí datum narození v přehledném formátu XPath je poměrně složitý jazyk a k jeho pochopení doporučuji navštívit [A7] či [A8]. První element xsktemplate nám vytváří kostru HTML dokumentu. Elementy bez prefixu xsl, které sem vkládáme, jsou vlastně HTML tágy, které budou vloženy do výstupního HTML dokumentu. Elementy s prefixem xsl jsou pak zpracovány XSLT procesorem. Jako hodnota TITLE v hlavičce HTML dokumentu je použita hodnota elementu NÁZEV Hodnotu určitého elementu či XPath výrazu vkládá element xsl:value-of a tato hodnota odpovídá atributu select. V tomto atributu je rovněž použit XPath výraz. Element xskvalueof by měl být vždy prázdný. Element xskapply-templates označuje zpracování všech podelementů zpracovávaného elementu. Pokud u těchto podelementů není definováno jejich zpracování pomocí elementu xsktemplate, pak se zobrazí hodnota těchto podelementů. Element xskapply-templates by také měl být vždy prázdný. Element xsl:for-each zpracovává všechny elementy, které odpovídají zadanému XPath výrazu. Element xsktext pak umožňuje vložit do elementů text či textové entity. XSLT šablony toho umožňují mnohem více. Podrobnější informace v češtině naleznete na [A7] a na [A8] pak naleznete spoustu příkladů na XSLT a XPath. 19

Kapitola 5 Formáty XML 5.1 XML formát programu Microsoft Word Program Microsoft Word v novějších verzích (od MS Word 2000) umožňuje uložit dokument ve formátu XML. Výsledný XML dokument v sobě obsahuje informace o podrobném stavu MS Word dokumentu. V tomto XML dokumentu jsou informace o formátování jednotlivých stránek, odstavců, řezech písma a všech dalších věcech, které se tohoto týkají. Z hlediska pozdějšího zpracování takto vytvořeného XML dokumentu je velmi vhodné znát strukturu a formát XML dokumentu, který je programem MS Word vytvořen. Ve své práci jsem se zabýval formátem z MS Word 2003. Kořenovým elementem celého XML dokumentu je element w:worddocument. Tento element obsahuje deklarace jmenných prostorů. Nejdůležitější z nich jsou prefixy w a wx. Informace o struktuře XML dokumentu můžeme vidět na následujícím obrázku Obrázek 5.1: Kostra MS Word XML formátu Obrázek obsahuje nejdůležitější a základní informace o formátu XML dokumentu. Obsa- 20

5.1. XML FORMÁT PROGRAMU MICROSOFT WORD huje však všechny elementy, které jsou nutné ke znalosti struktury dokumentu a následnému formátování tohoto XML dokumentu do jiného dokumentu. Elementy s hvězdičkou se mohou vyskytovat víckrát než jednou. První dva potomci kořenového elementu (elementy w:docpr a w:lists) nejsou příliš významné pro pozdější formátování dokumentu. Většinou jsou poměrně krátké a obsahují hlavičku dokumentu. Element w:body je však mnohem významnější, neboť v sobě obsahuje tělo celého dokumentu. Element wx:sect obsahuje jednu stránku wordovského dokumentu. Tento element se skládá z několika odstavců, přičemž jeden odstavec je představován elementem w:p. První element w:p každé stránky obsahuje informace o hlavičce stránky. Pro pozdější zpracování stránky se tento element většinou ignoruje. Jinak by se totiž mohlo stát, že bychom v pozdějším zformátovaném dokumentu měli navíc některé informace, které tvořily hlavičku stránky a nemají tedy v dokumentu co dělat. Podobným způsobem by se měl ignorovat i poslední element w:p každé stránky, neboť obsahuje pouze informace o přechodu na další stránku. Element w:ppr, jenž je vždy prvním podelementem z w:p, obsahuje informace o formátování odstavce. Pro ilustraci zde ukážu, jak element w:ppr vypadá <w:ppr> <w:jc w:val="left" /> <w:ind w:left="240" w:right="0" w:first-line="0" /> <w:spacing w:before="230" w:after="0" /> <w:tabs /> <w:shd w:val="clear" w:color="auto" w:fill="ffffff" /> </w:ppr> Vidíme tedy, že w:ppr obsahuje informace o zarovnání, barvě a podobných věcech. Jako nejdůležitější podelement bych vyzdvihl především w:spacing, jehož atributy určují vynechané místo před a za daným odstavcem. Element w:r pak v sobě obsahuje informace o jednom určitém řezu písma. Typicky se element w:r skládá z dvou podelementů. První podelement w:rpr obsahuje informace o řezu písma a druhý podelement w:t obsahuje samotný text tohoto řezu. Pro ilustraci ještě příklad elementu w:rpr <w:rpr> <w:rfonts w:ascii="arial" w:h-ansi="arial" w:cs="arial" /> <wx:font wx:val="arial" /> <w:b w:val="off" /> <w:i w:val="on" /> <w:smallcaps w:val="off" /> <w:strike w:val="off" /> <w:color w:val="000000" /> <w:sz w:val="16" /> <w:spacing w:val="l" /> <w:lang w:val="0405" w:fareast="0405" /> </w:rpr> 21

Vysvětlení jednotlivých podelementů w:rfonts wx:font w:b w:i w:smallcaps w:spacing w:color w:sz w:lang 5.2. OPENOFFICE XML FORMÁT Informace o fontu daného řezu písma Podobné jako w:rfonts Atribut má hodnotu on pro tučné písmo Atribut má hodnotu on pro kurzívu Atribut má hodnotu on pro kapitálky Element je nepovinný. Informace o formátování Barva písma Velikost písma Jazyk Je vidět, že pro každý odstavec a každý řez písma je v dokumentu deklarovaná nepříliš krátká hlavička. V typickém wordovském dokumentu se vyskytuje poměrně značný počet řezů písma. Elementy w:rpr a w:ppr tvoří značnou část celého dokumentu (asi 80 % u průměrného dokumentu). Tento fakt způsobuje, že velikost výsledného XML dokumentu je poměrně značná, typicky mnohem větší než velikost příslušného DOC či RTF souboru. Pro šestnáctistránkový wordovský dokument, jehož velikost v RTF je 181 KB měl výsledný XML formát velikost 1353 KB. Značná velikost XML dokumentu je však nejspíš jedinou nevýhodou XML formátu programu Microsoft Word. Díky množství informací se tento dokument dobře formátuje. Kromě výše popsaných elementů obsahuje XML formát programu Microsoft Word i několik dalších elementů (jedním z nich je například element w:pict pro obrázek). Význam těchto elementů je však poměrně malý. 5.2 OpenOffíce XML formát OpenOffice je sada programů, které lze získat z Internetu zdarma [A12]. Je dostupný v několika verzích. Ve své práci jsem použil verzi 1.1.3 z roku 2004. Mezi OpenOffice programy patří např. Calc, Draw či Math, ale především Writer, který je pro naše účely nejdůležitější. V programu OpenOffice Writer si totiž můžeme otevřít libovolný DOC či RTF soubor a uložit ho v jiném formátu. Jedním z nabízených formátů uložení je SXW Pokud soubor uložíme ve formátu SXW a pak tento SXW soubor rozbalíme programem Winzip, obdržíme archiv několika XML souborů. Z těchto souborů je nejdůležitější CONTENT.XML, neboť v sobě obsahuje informace o obsahu dokumentu a má tedy podobný význam jako XML dokument vytvořený z programu Microsoft Word. Mezi MS Word XML formátem a OpenOffice XML formátem je poměrně velký rozdíl. MS Word XML formát totiž v hlavičce nemá skoro žádné informace a obsahuje všechny informace o formátování přímo v těle dokumentu. Každý odstavec či řez písma zde má svou vlastní obsáhlou hlavičku, kde je všechno popsáno. Naproti tomu OpenOffice XML formát má o poznání větší hlavičku dokumentu, neboťv této hlavičce obsahuje výčet všech možných typů odstavců a řezů písma, které se v dokumentu vyskytují. V samotném těle dokumentu pak nejsou žádné informace o formátování dokumentu, ale pouze odkaz na 22

5.2. OPENOFFICE XML FORMÁT číslo odstavce či řezu písma. Nyní tedy stručný popis OpenOffice XML formátu. Kořenový element je office documentcontent. Tento element obsahuje mimo jiné deklarace jmenných prostorů, z nichž nejdůležitější jsou office, style a text. Následující obrázek ukazuje kostru OpenOffice XML dokumentu s nejdůležitějšími elementy offic e: do curnent- c ontent office font-de cis office: automatic - style s office:body style:style * text: s e quenc e - de cis texfcp * text: span* Obrázek 5.2: Kostra OpenOffice XML formátu Element office:font-decls obsahuje seznam fontů použitých v dokumentu. Mnohem zajímavější je následující element office:automatic-styles. V tomto elementu je seznam stylů všech odstavců a řezů písma, které se vyskytují v dokumentu. Obsah elementu vypadá přibližně takto <office:automatic-styles> <style:style style:name="pl" style:family="paragraph" style:parent-style-name="standard"> <style:properties fo:margin-left="0.0571inch" fo:margin-right="oinch" fo:margin-top="0.0866inch" fo:margin-bottom="oinch" fo:text-indent="oinch" style:auto-text-indent="false" fo:background-color="#ffffff"> <style:tab-stops /> <style:background-image /> </style:properties> </style:style> <style:style style:name="t5" style:family="text"> <style:properties fo:color="#000000" fo:font-size="9pt" fo:language= fo:country="us" fo:font-style="italic" style:font-size-asian="9pt" style:font-style-asian="italic" style:font-size-complex="9pt" style:font-style-complex="italic" /> </style:style> </office:automatic-styles> 23

5.2. OPENOFFICE XML FORMÁT Z ukázky je vidět, že pro deklaraci stylu odstavce se používá u atributu name prefix P, zatímco u vlastností řezu písma je to prefix T. Ostatní vlastnosti jednotlivých elementů v deklaraci stylu lze vyčíst z ukázky. Podobně jako u MS Word XML formátu jsou významné pouze některé z těchto elementů a atributů. Poslední podelement kořene, element office:body, obsahuje tělo dokumentu. Jeho první podelement textsequence-decls je poměrně bezvýznamný. Nyní drobná ukázka podelementů z těla dokumentu <text:p text:style-name="pl">references</text:p> <text:p text:style-name="p2"> <text:span text:style-name="tl">[1] ArhangeFskii A.V., </text:span> <text:span text:style-name="t2">topological function spaces, </text:span> <text:span text:style-name="tl">moskov. Gos. Univ. Publ., Moscow, 1989 </text:span> </text:p> <text:p text:style-name="p3">(in Russian); English translation in: Mathematics and its Applications (Soviet Series) 78,</text:p> Vidíme, že v dokumentu už nejsou žádné hlavičky o formátování dokumentu. U každého z elementů textp, textspan je atribut se jménem příslušného odstavce či řezu písma. Element textp obsahuje odstavec, zatímco text: span představuje řez písma. Narozdíl od MS Word XML formátu zde existují odstavce, které nemají žádný podelement s řezem písma. Informace o písmu je totiž většinou uvedena už ve vlastnostech odstavce. Ve srovnání s MS Word XML formátem je OpenOffice XML formát ekonomičtější z hlediska úspory místa. Oba formáty lze dobře formátovat na jiné XML dokumenty, neboťjejich struktura není nijak složitá. OpenOffice formát má však jednu velkou nevýhodu. Abychom získali obsah v XML, musíme dokument otevřít v OpenOffice Writeru, uložit do SXW a poté ještě rozbalit Winzipem, což je poměrně dost kroků a z hlediska hromadného zpracování dokumentů je to dost nepohodlné. Nehledě k tomu, že MS Word formát má i větší podporu v aplikacích a některé aplikace (například ABBYY Finereader) umožňují uložit dokument přímo v MS Word XML formátu, takže získáme dokument v XML, aniž bychom museli spouštět MS Word. 24

Kapitola 6 Software pro práci s XML 6.1 XSLT procesory XSLT procesory už byly zmíněny v souvislosti s XSLT šablonami. Tyto procesory slouží k transformaci XML souboru do HTML, XML či jiných formátů. K transformaci kromě XML souboru potřebujeme ještě soubor s XSLT šablonou. Většina procesorů se spouští z příkazové řádky se třemi parametry, jež většinou tvoří Jméno souboru s XSLT šablonou Jméno vstupního XML dokumentu Jméno výsledného souboru ve formátu HTML, XML či TXT Dejme tomu, že pomocí šablony FIRMA.XSL chceme z našeho dokumentu FIRMA.XML vytvořit HTML stránku FIRMA.HTML. Pokud tak budeme chtít učinit pomocí procesoru libxslt/xsltproc spustíme jej z příkazové řádky příkazem xsltproc -O FIRMA.HTML FIRMA.XSL FIRMA.XML Populární XSLT procesor Saxon pak spouštíme příkazem saxon -o FIRMA.HTML FIRMA.XML FIRMA.XSL Pokud jsou XSLT šablona i XML soubor ve správném formátu bez syntaktických chyb, pak se nám v adresáři vytvoří výstupní soubor FIRMA.HTML. V opačném případě se vypíše chybové hlášení, které zřejmě bude u obou procesorů podobné. Většina procesorů je napsána v Jávě či C++. Jejich podrobný seznam i s odkazy k jejich stažení naleznete na [A10]. Nyní stručný komentář alespoň k těm nejdůležitějším XSLT procesorům. Z procesorů napsaných v Jávě stojí za zmínku procesor XT, který je šířen zdarma. Tento procesor nabízí užitečná rozšíření jako například možnost generování více výstupních dokumentů. Vývoj tohoto procesoru je však již zastaven. Zajímavějším a poměrně známým procesorem je Xalan, který existuje ve verzi pro Javu i C++. Rovněž umožňuje definovat více výstupních dokumentů a navíc i definovat vlastní funkce v jazycích Java, JavaScript, Perl, Python... 25

6.2. PARSERY Poměrně významným procesorem napsaným v jazyce C je procesor libxslt/xsltproc, který je dostupný podobně jako většina ostatních procesorů na Internetu zdarma. Tento procesor můžete získat z [AI 6] odkud můžete získat i další aplikace jako například parser xmllint. Procesor podporuje spolu s knihovnou iconv velké množství kódování. Můžeme si v něm definovat i rozšiřující funkce v C. Jedním z nejvýznamějších XSLT procesorů je bezesporu Saxon, který jsem používal i v praktické části své práce (verze 6.5.3). Procesor je napsaný v Jávě a je dostupný včetně zdrojového kódu. Proti jiným XSLT procesorům umožňuje například měnit proměnné v XSLT šabloně, kombinovat jejich kód s Javovým kódem, definovat vlastní funkce atd. Saxon podporuje na výstupu i kódování jako windows-1250 či iso-8859-2. Navíc se velmi rychle vyvíjí a transformace pomocí něj je poměrně rychlá (například ve srovnání s procesorem libxslt/xsltproc). 6.2 Parsery Parser je program, který kontroluje syntaktickou správnost XML dokumentu a validitu oproti DTD. Lepší parsery by také měli umožňovat kontrolu XML dokumentu vůči schématům v jazycích XML Schema či Relax NG. Některé parsery ve svých distribucích obsahují i zdrojové kódy knihoven v Jávě nebo C++, takže umožňují programátorům vložit kontrolu správnosti přímo do zdrojového kódu svých programů. Většina producentů parserů používá standardizovaná rozhraní pro práci s dokumentem. Používají se především rozhraní DOM (stromová struktura, vhodné pro náročnější aplikace) a SAX (událostmi řízené, časově i paměťově nenáročné). Mezi nejznámější parsery patří Xerces, který podporuje kromě rozhraní DOM i SAX především jazyk XML Schema 1.0. XML Schema je implementováno kompletně celé. Velká Výhoda parseru Xerces je především v rychlosti s jakou reaguje na doporučení W3C. Je napsán v Jávě, takže je nezávislý na platformě. Parser Xerces je sesterský program procesoru Xalan (oba od Apache Software [A17]) Další významný parser xmllint je součástí distribuce libxml spolu s procesorem libxslt/xsltproc a dalšími programy. (Ve své práci jsem používal distribuci libxml2-2.6.15 pro Windows, naleznete na přiloženém CD). Parser umožňuje validovat proti DTD, XML Schema i Relax NG. 6.3 Další programy Mezi další významné programy týkající se XML použijeme především program Trang, jež je převaděč mezi různými formáty XML schémat. Trang je vytvořen v Jávě společností Thai Open Source Software [A 14] Pomocí Trangu můžeme převádět schémata mezi Relax NG 1.0 (kompletní i XML syntaxe), DTD 1.0 a XML Schema 1.0. XML Schema je podporováno jen jako výstupní formát. 26