• Nie Znaleziono Wyników

XML byl vytvoˇren skupinou XML working group a standartizov´an pod z´aˇstitem konsor-cia W3C 10.ledna 1998 ve verzi 1.0. XML byl vyd´an celkem ve dvou verz´ıch. Druh´a verze 1.1 byla vyd´ana v 4. ´unora 2004. Z´asadn´ı rozd´ıl oproti starˇs´ı verzi 1.0 tkv´ı v poˇzadavc´ıch na korektn´ı n´azvy element ˚u a atribut ˚u. ˇC´asteˇcnˇe se t´ımto probl´emem detailnˇeji zab ´yv´a jedna z dalˇs´ıch podkapitol.

XML byl navrˇzen k ˇreˇsen´ı probl´em ˚u elektronick´eho publikov´an´ı a v souˇcasnosti hraje velice d ˚uleˇzitou roli pˇri v ´ymˇenˇe nejr ˚uznˇejˇs´ıch ´udaj ˚u na webu i jinde. V dneˇsn´ı dobˇe je z´akladem velmi popul´arn´ıch webov ´ych sluˇzeb, SOAP protokolu a tak´e slouˇz´ı pro ukl´ad´an´ı informac´ı datab´azov´eho typu.

XML vych´az´ı ze znaˇckovac´ıho jazyka SGML. Z´akladn´ı rozd´ıl mezi SGML a XML spoˇc´ıv´a ve zpracov´an´ı dan´eho dokumentu.XML pouze specifikuje, co se nach´az´ı v do-kumentu. Oproti HTML neˇr´ık´a nic o tom, jak m´a dan ´y dokument vypadat. Nicm´enˇe, tyto znaˇckovac´ı jazyky spolu ´uzce souvis´ı.

Obr´azek 1: Znaˇckovac´ı jazyky vych´azej´ıc´ı z SGML

2.1.2 V ´yhody a nev ´yhody

Z velk´e ˇc´asti byla n´apln´ı m´e bakal´aˇrsk´e pr´ace manipulace s daty v textov´em form´atu.

Tento fakt hr´al kl´ıˇcovou roli ve v ´ybˇeru textov´eho form´atu pro iplementaci. XML m´a

mnoho v ´yhod, nicm´enˇe j´a zde budu popisovat pouze ty v ´yhody, kter´e byly d ˚uleˇzit´e pro dosaˇzen´ı c´ıle bakal´aˇrsk´e pr´ace.

XML je velice rozˇs´ıˇren´e s ˇsirokou podporou v mnoha programovac´ıch jazyc´ıch a v ´yvojov ´ych prostˇred´ıch. V ´yhodou je moˇznost pouˇzit´ı tˇr´ıdy XmlTextWriter, kter ´y je souˇc´ast´ı .NET frameworku uˇz od verze 1.0. XmlTextWriter pˇredstavuje tˇr´ıdu k rychl´emu sov´an´ı dat do XML form´atu. Bˇehem z´apisu se data neukl´ad´aj´ı do pamˇeti, coˇz dˇel´a zapi-sov´an´ı rychl´e. Dalˇs´ı v ´yhodou, kter´a mˇe pˇresvˇedˇcila k v ´ybˇeru toho form´atu k dalˇs´ı iple-mentaci, je moˇznost vytvoˇren´ı si vlastn´ıch tag ˚u.

Nutno podotknout, ˇze XML m´a i stinn´e str´anky. Mezi jeho nev ´yhody z hlediska t´eto pr´ace patˇr´ı zejm´ena nˇekolikan´asobnˇe vˇetˇs´ı velikost neˇz u ostatn´ıch form´at ˚u.

2.1.3 Z ´aklady syntaxe

Pˇri otevˇren´ı XML dokumentu se m ˚uˇzeme potkat s r ˚uzn ´ymi prvky. XML dokument m ˚uˇze zaˇc´ınat prologem. Prolog specifikuje verzi XML a pouˇzit´e k ´odov´an´ı. Nicm´enˇe pˇr´ıtomnost prologu v dokumentu nen´ı nutn´a.

<?xml version="1.0" encoding="UTF-8" ?>

Z´akladn´ım stavebn´ım prvkem kaˇzd´eho XML dokumentu jsou tagy. Rozezn´av´ame nˇekolik druh ˚u.

Mezi poˇc´ateˇcn´ım a koncov ´ym tagem se nach´az´ı obsah. Dohromady tyto 3 ˇc´asti tvoˇr´ı ele-ment. Ovˇsem element je tak´e pr´azdn ´y tag s´am o sobˇe. Elementy se mohou vnoˇrovat i do jin ´ych element ˚u a t´ım m ˚uˇze vzniknout pomˇernˇe rozs´ahl ´y dokument. Uk´azku podobn´e struktury dokumentu m ˚uˇzete vidˇet v dalˇs´ıch podkapitol´ach t´eto pr´ace.

Dalˇs´ım prvkem XML jsou atributy. Atributy slouˇz´ı pro oddˇelen´ı dat. Atributy se za-pisuj´ı do poˇc´ateˇcn´ıch nebo pr´azdn ´ych tag ˚u. V jednom tagu jich m ˚uˇze b ´yt i v´ıce za sebou.

Obvykle se pouˇz´ıv´aj´ı pro uloˇzen´ı informac´ı, kter´e nejsou pro ˇcten´aˇre aˇz tak d ˚uleˇzit´e.

Nutno podotknout, ˇze pˇri implementaci nebyly atributy v t´eto bakal´aˇrsk´e pr´aci pouˇzity.

Pˇr´ıkladem atributu m ˚uˇze b ´yt tˇreba nˇejak´e identifikaˇcn´ı ˇc´ıslo.

<Jmeno id="buc0022">Martin</Jmeno>

<Jmeno id="buc0022" />

Posledn´ım prvkem syntaxe XML dokumentu jsou koment´aˇre. Koment´aˇre se mohou ob-jevit kdekoliv v dokumentu mimo tagy. Tak´e nesm´ı b ´yt pˇred XML prologem.

<!-- Toto je nov´y koment´aˇr -->

2.1.4 Spr ´avn ˇe strukturovan ´y dokument

Znalost jednotliv ´ych konstrukˇcn´ıch prvk ˚u ´uplnˇe nestaˇc´ı. XML dokument mus´ı spl ˇnovat nˇekolik pravidel, aby se dal oznaˇcit na spr´avnˇe strukturovan ´y nebo-li

”well-formed“ do-kument. Spr´avnˇe strukturovan ´y dokument znamen´a, ˇze spl ˇnuje vˇsechny poˇzadavky kla-den´e na syntaxi, kter´e jsou definov´any ve specifikaci XML 1.0.

• XML dokument mus´ı obsahovat pr´avˇe jeden koˇrenov ´y element, do kter´eho jsou vnoˇreny vˇsechny ostatn´ı elementy.

• Kaˇzd ´y zaˇc´ınaj´ıc´ı tag mus´ı m´ıt odpov´ıdaj´ıc´ı koncov ´y tag.

• Elementy se nesm´ı kˇr´ıˇzit. Typick ´y pˇr´ıklad kˇr´ıˇzen´ı m ˚uˇze b ´yt tˇreba tento:

<Jmeno><Prijmeni></Jmeno></Prijmeni>

• Hodnoty vˇsech atribut ˚u mus´ı b ´yt uzavˇreny v ´uvozovk´ach.

• Vˇsechny znaky, kter´e se v dokumentu vyskytuj´ı mus´ı podl´ehat ˇr´adn´emu Unicode k ´odov´an´ı.

XML nab´ız´ı moˇznost vytvoˇren´ı vlastn´ıch tag ˚u. Nicm´enˇe je d ˚uleˇzit´e zn´at p´ar pravidel pro vytvoˇren´ı korektn´ıho elementu. N´azev elementu nesm´ı obsahovat ˇz´adn´e mezery a tak´e r ˚uzn´e speci´aln´ı znaky. N´azvy element ˚u jsou tak´e case-sensitive. To znamen´a, ˇze ro-zezn´av´a mal´a a velk´a p´ısmena. Napˇr´ıklad n´asleduj´ıc´ı z´apis by vy ´ustil v chybu.

<Jmeno>Martin</jmeno>

Spr´avn ´y z´apis tˇechto element ˚u bude vypadat n´asledovnˇe.

<Jmeno>Martin</Jmeno>

Ruˇcn´ı kontrola validace m´enˇe rozs´ahl´eho XML dokumentu nemus´ı b ´yt nˇejak zdlouh´av´a.

Ovˇsem u vˇetˇs´ıch dokument ˚u uˇz by to mohl b ´yt probl´em. Pro tyto situace existuj´ı r ˚uzn´e online n´astroje. Odkaz na jeden z nich najdete v pouˇzit´e literatuˇre na konci t´eto ba-kal´aˇrsk´e pr´ace.

login jm´eno pˇr´ıjmen´ı email

buc0022 Martin Buˇcek martinbucek@seznam.cz

nov0011 Jan Nov´ak jannovak@gmail.com

Tabulka 1: SQL tabulka uˇzivatel

2.1.5 Pˇr´ıklad dokumentu

Uvaˇzme pro tento pˇr´ıklad tuto jednoduchou tabulku uˇzivatel ˚u, kter´a se nach´az´ı v relaˇcn´ı datab´azi na Microsoft SQL Serveru. Pro serializaci pouˇzijeme jiˇz v ´yˇse zm´ınˇen ´y XmlTex-tWriter.

Na v ´ystupu dostaneme tento XML dokument. M ˚uˇzeme si vˇsimnout lehce upraven´e struktury dokumentu. Do cel´e struktury dokumentu jsou pˇrid´any jeˇstˇe ´urovnˇe pro oddˇelen´ı jednotliv ´ych z´aznam ˚u v tabulce, ˇcehoˇz pozdˇeji vyuˇzijeme u obnovy dat. Nav´ıc vˇsechny poˇzadovan´e data urˇcen´e k z´alohov´an´ı jsou uvnitˇr koˇrenov´eho elementu s n´azvem Data-baze. To spl ˇnuje jeden z poˇzadavk ˚u na korektnˇe vytvoˇren ´y XML dokument.

V pˇredeˇsl´e podkapitole je zm´ı ˇnka o online n´astroj´ıch urˇcen´e k validaci XML doku-ment ˚u. M ˚uˇzete si zkusit zkop´ırovat tento XML dokudoku-ment a pouˇz´ıt ho jako demonstraˇcn´ı pˇr´ıklad k ovˇeˇren´ı. Pouze chci upozornit, ˇze pˇri kop´ırov´an´ı z PDF to vynech´av´a podtrˇz´ıtka v n´azvech element ˚u id uˇzivatele. Proto je nutn´e je dopsat ruˇcnˇe.

1 <Databaze> Funkce pro serializaci do XML form´atu vypad´a n´asledovnˇe.

1 using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8))

2 {

3 writer .Formatting = System.Xml.Formatting.Indented;

4 writer .WriteStartElement(”Databaze”);

5 command = new SqlCommand();

6 foreach ( string tableName in list )

7 {

8 command = new SqlCommand(”Select ∗ from ”+tableName, connection);

9 adapter = new SqlDataAdapter(command);

10 DataTable tableOfContents = new DataTable();

11 adapter. Fill (tableOfContents);

12 string tableName2 = tableName.Replace(” ”, ”−−”);

13 writer .WriteStartElement(tableName2);

14 foreach (DataRow row in tableOfContents.Rows)

15 {

16 writer .WriteStartElement(”Radek”);

17 foreach (DataColumn column in tableOfContents.Columns)

18 {

V ´ypis 2: Serializace do XML form´atu

K z´apisu pouˇzijeme v ´yˇse zm´ınˇen ´y XmlTextWriter, kter ´y jako parametr pˇr´ıj´ım´a FileStream ke specifikaci cesty k souboru. Standartnˇe je v ´ystup XmlTextWriteru nezform´atovan ´y.

Vˇsechny elementy se zapisuj´ı za sebe do jednoho ˇr´adku, coˇz nep ˚usob´ı v ˚ubec pˇeknˇe a u vˇetˇs´ıch XML soubor ˚u je to dosti nepˇrehledn´e. K pˇredejit´ı t´eto situace m´a XmlTextWriter vlastnost Formatting, kterou pouˇzijeme na ˇr´adku 3 v ´ypisu zdrojov´eho k ´odu.

Funkce z´alohuje v cyklu vˇsechny tabulky z relaˇcn´ı datab´aze. To znamen´a, ˇze koˇrenov ´y element se mus´ı zapsat jeˇstˇe pˇred t´ımto cyklem. Jinak by se zapsal pˇri z´apisu kaˇzd´e ta-bulky z relaˇcn´ı datab´aze a v ´ysledn ´y XML dokument by nebyl validn´ı. Toto oˇsetˇren´ı lze vidˇet na ˇr´adku 4. Pot´e se zap´ıˇsou veˇsker´e poˇzadovan´e data. K z´apisu elementu pouˇzijeme funkci WriteStartElement() a WriteEndElement(). T´ımto oˇsetˇr´ıme pouze z´apis zaˇc´ınaj´ıc´ıch a koncov ´ych tag ˚u, ale nikoliv samotn ´ych dat. K tomuto ´uˇcelu slouˇz´ı funkce WriteString().

Pokud je dan´a bu ˇnka tabulky pr´azdn´a, zap´ıˇse se pouze pr´azdn ´y element.

Powiązane dokumenty