You are on page 1of 54

2.

RA
XML dokumentumok ltrehozsa
A kznsges szvegformtum tovbbra is l s virul, br sokan jsoltk mr a hallt. Bob Foster Hasonlan a HTML-hez az XML is olyan technolgia, amit leginkbb gy rthetnk meg, ha elkezdjk hasznlni. Persze mg oldalakon keresztl rhatnk a tma filozofikus vonatkozsairl, de a vgn gyis mindenki azt krdezn: s tessk mondani, mire j ez nekem? A munka legnagyobb rszben magukkal az XML dokumentumokkal, azok szerkesztsvel fogunk foglalkozni. Ez meglehetsen hasonl lesz a weblapok szerkesztshez, legalbbis ami a kd strukturlst illeti. Ugyanakkor mr most fontos megjegyezni, hogy az XML dokumentumok brmilyen informci trolsra alkalmasak. Miutn elkszltnk egy XML dokumentummal, nyilvn azonnal ltni szeretnnk majd, hogyan nz ki egy webbngszben, vagy miknt hasznlhat egy alkalmazs segtsgvel. Mivel az XML tartalmak rtelem szerinti megjelentsnek nincs ltalnosan bevett vagy szabvnyostott mdszere, vagy fejlesztennk kell egy olyan alkalmazst, amely a sajt adatainkat kezeli, vagy egy olyan stluslapot kell rendelnnk a doku-

18 I. rsz Alapok

mentumunkhoz, amely lehetv teszi, hogy jl formzottan megjelentsk egy webbngszvel. Ebben az rban ezt az utbbi megkzeltst fogjuk hasznlni. Rszletesen a kvetkezkrl esik majd sz: Az XML alapjai Hogyan vlasszunk XML szerkesztt Hogyan hozzunk ltre egy XML dokumentumot Hogyan jelentsk meg a tartalmt

Gyors bevezets az XML hasznlatba


Az elz rban megtanultuk, hogy az XML egy olyan jellnyelv, amely alapveten ms jellnyelvek ltrehozsra szolgl. Abbl a tnybl, hogy az XML maga is jellnyelv, viszonylag egyenesen kvetkezik, hogy szemre szmos hasonlsgot mutat a HTML-lel. Amint az elz rban lttuk, az egyetlen lnyeges eltrs els ltsra csupn annyi, hogy az XML-ben sajt cmkket (tag) is hasznlhatunk. A HTML-ben szoksos <head> s <body> helyett pldul lttunk <pet> s <friend> nev cmkket. sszessgben teht akinek van nmi gyakorlata a weblapok ltrehozsa tern, annak az egsz dolog nagyon ismers, s kifejezetten egyszer lesz. Persze azt is ltni fogjuk hamarosan, hogy az XML egyltaln nem olyan engedkeny nyelv, mint a HTML, teht megeshet, hogy egyes eddig alkalmazott szoksainktl meg kell vlnunk. Az igazat megvallva ezen a ponton taln kiss elnyben lesznek azok, akiknek nincs a HTML-lel kapcsolatos gyakorlata, k ugyanis szre sem fogjk venni az XML merevsgt.

Az XML ptkvei
Akrcsak szmos ms jellnyelv, az XML is hrom klnbz ptelemre tmaszkodik. Tartalmaz elemeket, attribtumokat s rtkeket. Az elem (element) olyan ptkocka, amely valamifle informcit r le, vagy tartalmaz. Alapveten valamennyi XML dokumentum elemekbl ll. Egy elemnek ktelezen tartalmaznia kell legalbb kt cmkt, egy nyitt, s egy zrt. A nyit cmkk kisebb nagyobb jelek (<>) kz zrt szavak, pldul <pet>, vagy <friend>. A zr cmkk ehhez nagyon hasonlak, de kzvetlenl a cmke neve eltt tartalmaznak egy perjelet (/) is. Az imnt emltett kt cmknek megfelel zrcmke a </pet> s a </friend>. Egy elem teht mindig a nyit cmkvel indul, az esetek tbbsgben tartalmaz valamilyen informcit, majd a zr cmkvel vgzdik.
<pet> </pet>

2. ra XML dokumentumok ltrehozsa 19

Ebben a pldban nincs semmifle adat a nyit s a zr cmke kztt annak demonstrlsra, hogy a kzbezrt adat megadsa opcionlis. Az XML nem trdik a nyit s zr cmke kztti res karakterekkel, vagyis teljesen megfelel a kvetkez rsmd is:
<pet></pet>

Persze fontos ehhez hozztenni azt is, hogy az XML-ben a cmkknek alapveten az a rendeltetsk, hogy informcidarabok elejt s vgt jelezzk. Ennek megfelelen meglehetsen ritka az ilyen plda, amikor az elem tnylegesen res. Az elemek ltalban szveget, vagy ms cmkket tartalmaznak. Lssunk erre is egy pldt. A <pet> elem tovbbi elemeket tartalmazhat, pldul a bartok felsorolst, vagyis <friend> tpus elemeket:
<pet> <friend /> <friend /> </pet>

Fontos megjegyezni, hogy az elem az XML-ben a trol informci egy logikai egysgt jelenti, mg a cmke az XML kdban alkalmazott jells. Ezrt van az, hogy az elemekre mindig a nevkkel hivatkozom (pet), mg a cmkket ugyangy rom, ahogy azok az XML kdban megjelennek. Az olvas most biztosan csodlkozik, mert az elz pldban azt ltta, hogy megszegtnk egy pp az imnt kimondott szablyt, mely szerint egy elemnek mindig rendelkeznie kell egy nyit s egy zr cmkvel. Lthat, hogy a friend elemek egyetlen klnleges cmke formjban jelentek meg. A magyarzat egyszer: az XML lehetsget ad az res elemek rvidtsre. res elemnek nevezzk az olyan elemet, amely semmit nem tartalmaz a nyit s a zr cmke kztt, vagyis sem szveget, sem egyb cmkket. A korbbi pldkban lthattunk mr ilyen elemeket, csak nem hasznltuk ezt a bizonyos rvidtsi lehetsget. res elemnl hasznlhatunk olyan specilis cmkt, amely a bezr kisebb nagyobb jel eltt egy perjelet (/) tartalmaz. Az res friend elemet teht br kznsgesen <friend></friend> formban rnnk le, lehetsgnk van arra, hogy a <friend /> jellst hasznljuk. A /> eltti szkz opcionlis, ugyanakkor hasznlata ltalnosan bevett szoks az XML fejlesztk krben. A nyit s zr cmkkkel kapcsolatos trgyals nem lehetne teljes egy a HTML dokumentumokban oly gyakran ltott hiba emltse nlkl. Igen, a bekezdsek jellsre hasznlatos a <p> cmkre gondolok, amelynek a fejlesztk elszeretettel hagyjk el a zr prjt. Br a HTML-ben a p nyilvn nem lehet res elem, a HTML fejlesztk mgis feltnen gyakran felejtik el a </p> zr cmkt. Ha ugyanezt a szabados szerkesztsi mdszert egy XML dokumentumban prbljuk meg hasznlni, villmgyorsan bajba kerlnk.

20 I. rsz Alapok

Most, hogy ilyen jl megbeszltk az res elemek llektant, taln tegynk fel egy logikus krdst. Mire j neknk egy res elem? A magyarzat egyszer: attl, hogy egy elemnek nincs tartalma, mg tartozhatnak hozz attribtumok, amelyek szintn hordozhatnak metainformcit. Az attribtumok olyan apr informcidarabok, amelyek az elemek nyit cmkjben bukkannak fel. Egy attribtumnak mindig van neve, s egy ehhez tartoz rtke, amelyeket egy egyenlsgjel vlaszt el. Az rtk mindig az egyenlsgjel jobb oldaln kell szerepeljen s mindig idzjelek kz kell zrni. me egy plda arra, miknt rendelhetnk egy friend tpus elemhez egy name nev attribtumot:
<friend name="Augustus" />

Az attribtumok hasznlata egy msik olyan terlet, ahol a HTML dokumentumokban gyakran fedezhetnk fel furcsasgokat. A HTML attribtumokat ltalban idzjelek nlkl hasznljk, ami nyilvnvalan ellentmond az XML szabvnynak. Aki teht szabadelv HTML fejlesztbl sikeres XML fejlesztv szeretne vlni, az srgsen szokjon le errl, s tanulja meg hasznlni az idzjeleket. Elz pldnkban a name attribtumot a friend elem nevnek meghatrozsra hasznltuk. Az attribtumok hasznlata termszetesen nem korltozdik az res elemekre, st egy elemhez tbb attribtum is tartozhat. Ha pldul egy llatkt rszletesen akarunk lerni, tbb attribtumra is szksgnk lesz a pet elemen bell:
<pet name="Maximillian" type="pot bellied pig" age="3">

sszefoglalva teht az attribtumok kivl lehetsget teremtenek arra, hogy egy elem tulajdonsgait anlkl hatrozzuk meg, hogy a tartalmt mdostannk.

Az elemek bellrl
Egy nem res elem rtelemszeren olyan elem, amely a nyit s a zr cmke kztt valamilyen informcit is tartalmaz. Amint azt korbban emltettem, ez a tartalom lehet szveg, vagy tovbbi elemek. Amikor elemen bell tallhatk elemek, egymsba gyazsrl, vagy egymsba gyazott elemekrl beszlnk. Az egymsba gyazott elemek mkdsnek megrtshez kpzeljnk el egy trsashzat. A hzon bell laksok vannak, a laksokon bell szobk. Brmelyik szobban lehetnek ezen kvl btorok, a btorokon pedig egyb holmik. Az XML terminolgia szerint a holmik a btor tpus elemekbe vannak gyazva, a btor tpus elemek a szobkba, a szobk a laksokba, a laksok pedig a hzba. A 2.1. listban azt lthatjuk, hogyan lehet ezt a logikai struktrt XML-ben megvalstani.

2. ra XML dokumentumok ltrehozsa 21

2.1. lista

Egy trsashz megvalstsa XML-ben

1: <apartmentbldg> 2: <apartment> 3: <room type="bedroom"> 4: <furniture type="armoire"> 5: <belonging type="t-shirt" color="navy" size="xl" /> 6: <belonging type="sock" color="white" /> 7: <belonging type="watch" /> 8: </furniture> 9: </room> 10: </apartment> 11: </apartmentbldg>

Ha figyelmesen olvassuk ezt a kdot, rjhetnk, hogy az egymsba gyazs a dolgok fizikai elrendezst kveti. Vegyk szre tovbb, hogy a tartozkok (belonging) (57. sorok) elem res, s ennek jelzsre a korbban emltett rvidtst hasznljuk. Ezek az elemek helyenknt azrt maradhatnak resen, mert a dolgok logikja nem kveteli meg flttlen, hogy tartalmuk legyen. Kicsit msknt fogalmazva akr az is elkpzelhet, hogy a tartozkok tulajdonsgait kizrlag attribtumok segtsgvel rjuk le. A msik oldalrl kzeltve a dolgokhoz fontos azt is megjegyezni, hogy a nem res elemeknek nem flttlen kell tartalmazniuk ms elemeket. A nyit s zr cmkk kztt lehet kznsges szveg is, mint tartalom. Lssunk egy pldt arra, hogyan adhatunk tartalmat a belonging elemnek.
<furniture type="desk"> <belonging type="letter"> Kedves Michael, rmmel rtestelek, hogy indulhatsz a nyeremnyjtkunkon. Egyike vagy ugyanis azoknak a szerencss kivlasztottaknak, akik ha t vagy annl tbb magazinra fizetnek el, akkor nyerhetnek nmi pnzt. Vagy nem. </belonging> </furniture>

Mint lthat, ebben a pldban a belonging elem korai nyugdjba vonulsom zlogt hordozza tartalom gyannt. Az elemek nhny specilis szimblumtl eltekintve brmilyen szveget tartalmazhatnak. Ezekrl a kivtelekrl egy kicsit ksbb esik majd sz, de mg ebben az rban.

22 I. rsz Alapok

Az XML t parancsolata
Most, hogy mr kezdjk rezni, mire is j az XML nyelv, ideje, hogy megtanuljuk a hasznlatval kapcsolatos legfontosabb szablyokat. Amint azt korbban emltettem, szablyait tekintve az XML sokkal merevebb nyelv, mint a HTML, ami azt jelenti, hogy bizonyos jtkszablyok betartsra sokkal jobban oda kell figyelnnk, amikor XMLben dolgozunk. Ami azt illeti, ez a merevsg, nemhogy nem htrny, hanem egyenesen elny. Az XML pp a kdolsi szablyok szigorsgn keresztl biztostja azt, hogy segtsgvel sokkal konzisztensebb s megbzhatbb formban troljuk a lerni kvnt informcit, mint HTML-ben. Az XML preczsgnek alapjt t olyan szably adja, amelyeket jmagam az XML t parancsolatnak szoktam hvni. 1. A cmkk neveiben a kis- s nagybetk klnbznek szmtanak 2. Minden nyit cmknek meg kell legyen a zr prjai is (kivve a rvidtett formban lert res elemeknl) 3. Egymsba gyazs esetn a cmkk nem lapoldhatnak t. 4. Az attribtumok rtknek mindig idzjelek kztt kell megjelennie. 5. Minden dokumentumnak kell legyen gykreleme (root element). Ksz vagyok elismerni, hogy az utols szablyban emltett fogalomrl eddig nem is volt sz, a tbbit azonban mr tudjuk. Az els szably nem egyebet llt, mint hogy az XML-ben a kis- s nagybetk klnbznek szmtanak. Ennek rtelmben a <pet>, <Pet> s <PET> mind klnbz jelek. A HTML vilgbl jvknek ez egy igen lnyeges eltrs, a weblapok esetben ugyanis nem ritka, hogy a fejleszt szabadon vltogatja pldul a <b> s <B> rsmdot a flkvr szveg jellsekor. XML esetben ez nem lehetsges, ott vagy az egyiket hasznljuk, vagy a msikat, de a kettt egyszerre nem lehet. Az XML szabvnyokban ltalban azt javasoljk, hogy hasznljunk vagy mindig kis, vagy mindig nagybets cmkket, br a kevert hasznlatnak sincs semmilyen mszaki vagy nyelvi akadlya. Ugyanez vonatkozik az attribtumokra is. Ha valamilen specilis, XML alap nyelvet hasznlunk, gy ennek a lersa egyrtelmen meghatrozza, hogy kis- vagy nagybetket kell hasznlnunk. A msodik szably csak megersti azt, amit mr eddig is tudtunk, nevezetesen, hogy ha mondjuk van a dokumentumunkban egy <pet> cmke, akkor valahol kell lennie egy hozz tartoz </pet>-nek is. Egy kivtel persze van ez all a szably all: az res elem, amelynl hasznlhatjuk a mr szintn emltett rvidtett rsmdot (<pet />). A harmadik szably szerint ezek a nyit s zr prok nem lapoldhatnak t, vagyis ha egy elemet egy msikba gyazunk, akkor a befoglal elemnek teljesen tartalmaznia kell a msikat. Ezen a ponton taln jl jhet egy plda:
<pets> <pet name="Maximillian" type="pot bellied pig" age="3"> </pet>

2. ra XML dokumentumok ltrehozsa 23


<pet name="Augustus" type="goat" age="2"> </pets> </pet>

Ugye lthat, mi a gond ezzel az rsmddal? Az a baj, hogy a pet nev elemet nem tartalmazza teljes egszben a pets nev, holott lthatlag ez volt a programoz szndka. A kd szerkesztsbl, vagyis az res helyek hasznlatnak mdjbl szmunkra ugyan nyilvnval a programoz elgondolsa, de ez azon a tnyen nem vltoztat, hogy a kd maga helytelen. Radsul elfordulhat az is, hogy mg a szerkesztsi forma sem teszi nyilvnvalv a hibt. Nzzk pldul a fenti kd egy msik vltozatt:
<pets> <pet name="Maximillian" type="pot bellied pig" age="3"> </pet> <pet name="Augustus" type="goat" age="2"> </pets> </pet>

Mivel az res helyek nem befolysoljk az XML kdok jelentst, ez a kd funkcionlisan ekvivalens a fentivel. Az egyetlen eltrs csak az, hogy a hibt nevezetesen a pet elem tllgst gy sokkal nehezebb felfedezni. A tllgsi effektussal egybknt az a gond, hogy a szerkezet tbbflekppen is rtelmezhet, az XML-nek pedig ppen az a clja, hogy az ilyen eseteket teljesen kizrja. A szerkezeti zavar feloldshoz vagy a </pets> zr cmkt kell elmozdtanunk, vagy a krdses pet elemet teljesen a pets elemen kvlre helyeznnk. Visszatrve az XML parancsolataihoz a negyedik egy az elzhz nagyon hasonl egyszer szably az attribtumokkal kapcsolatban: minden attribtum rtknek idzjelek kztt kell megjelennie. A kvetkez kd teht helytelen, hiszen a Maximilian nevt trol attribtumnl lefelejtettk az idzjeleket:
<friend name=Maximillian />

Amint azt korbban is emltettem azoknak, akik dolgoztak mr HTML-ben klnsen fontos, hogy szben tartsk ezt a szablyt, mivel a HTML ezen a tren is sokkal liberlisabb. Ami azt illeti a weblapok fejleszti nem alaktottak ki ezzel kapcsolatban semmifle szoksjogot, br az ltalnos tendencia az, hogy nem szeretik hasznlni az idzjeleket. Az XML-nl ez a dolog nem zls krdse, az idzjelek hasznlata ktelez s pont. Az utols parancsolat egy olyasfle kiktst tartalmaz, amire mg nem vagyunk felkszlve, mert ezidig nem esett sz a gykrelem (root element) fogalmrl. A gykrelem az XML dokumentumnak az az egyetlen eleme, amely minden ms elemet magban foglal. Minden dokumentumnak kell legyen gykreleme, s ebbl az elembl a szabvny szerint csak egy lehet. A kisllatokat ler pldinkban ebben s az elz ra anyagban a gykrelem mindig a pets nev elem volt. Ez volt az, ami mindig ma-

24 I. rsz Alapok

gban foglalta az sszes pet s friend tpus elemet. Ha visszagondolunk a HTML nyelvre, ott is mindig van gykrelem, mgpedig a html nev. E tekintetben teht a HTML eleve megfelel az XML szabvnyainak. Ugyanakkor a HTML szintaxisa lehetv teszi egynl tbb gykrelem alkalmazst, mg az XML-ben erre soha nincs lehetsg. Mivel a gykrelemnek tartalmaznia kell minden ms elemet, nyilvn trivilis, hogy ez soha nem lehet res elem. Ez egyben azt is jelenti, hogy a gykrelemnek mindig meg kell legyen a nyit s a zr cmkje is. Az res elemekkel kapcsolatban korbban tbbszr emltett rvidts itt garantltan nem hasznlhat.

Az XML specilis szimblumai


Van nhny olyan specilis jel, amelyeket klnleges mdon kell megadnunk, ha azok a szveges tartalom rszeknt bukkannak fel valahol. Ennek egyszeren az az oka, hogy ezek a jelek az XML szintaxis rszt kpezik, vagyis arra hasznljuk ket, hogy segtsgkkel a cmkket vagy az attribtumokat lerjuk. Specilisnak szmt teht a kisebb (<) s a nagyobb (>) jel, az idzjel ("), az aposztrf ('), valamint az & (ampersand). Az XML nyelven bell ezeknek a karaktereknek specilis jelentsk van, gy jeleznnk kell, ha nem ebben az rtelemben kvnjuk ket hasznlni. Ennek megfelelen a kvetkez plda helytelen, hiszen a nevet tartalmaz attribtum rtke maga is tartalmazza az aposztrf jelet, mgpedig annak literlis (bet szerinti) rtelmben.
<movie name="All the Kings Men" />

Persze a specilis jeleket is hasznlhatjuk a tartalom rszeknt, de specilis mdon, gynevezett egyedknt (entity) kell ket megadnunk. Az egyed olyan szimblum, amely valamilyen erforrst, pldul egy karaktert vagy akr egy fjlt azonost. Az XML-ben az egyedek neve mindig egy & jellel kezddik, s egy pontosvesszvel (;) vgzdik. Az egyed neve e kett kztt szerepel. A kvetkezkben felsoroljuk a specilis karaktereknek megfelel elre definilt egyedeket: Kisebb jel (<) &lt; Nagyobb jel (>) &gt; Idzjel (") &quot; Aposztrf (') &apos; s jel (& , ampersand) &amp;

Ennek megfelelen az elz helytelen plda javtott vltozata a kvetkezkppen fest:


<movie name="All the King&apos;s Men" />

me egy msik plda, csak hogy tisztzzuk, miknt hasznlhat a tbbi egyed:
<movie name="Pride &amp; Prejudice" />

2. ra XML dokumentumok ltrehozsa 25

Ebben a pldban az &amp; egyedet (entity) kellett hasznlnunk, ha helyesen akartuk lerni a film cmt (Pride & Prejudice). Kszsggel elismerem, hogy a specilis karaktereknek ez az rsmdja nem teszi ppen knnyv a szveg olvasst, ugyanakkor nagy elnye a mdszernek, hogy hasonlan az XML minden ms elemhez ez is teljesen egyrtelmv teszi a fejleszt szndkt. Szerencsre mindssze t olyan specilis karakter van, amire emlkeznnk kell, gy ez az egsz taln nem is akkora problma.

Az XML deklarci
Az utols lnyeges dolog, amit tisztznunk kell az XML deklarci, amit ugyan nem ktelez megadni a dokumentumok elejn, de kifejezetten hasznos lehet. Az XML deklarci egyetlen sornyi kd a dokumentum elejn, amely azt hatrozza meg, hogy a krdses dokumentum az XML mely szabvnya alapjn kszlt. Az XML-nek pillanatnyilag kt szabvnya ltezik, az XML 1.0 s az 1.1. Ezek elssorban abban trnek el egymstl, hogy miknt tmogatjk a klnleges karaktereket az elemek s attribtumok nevben. Az XML 1.1, amely e tekintetben viszonylag tgabb teret ad a programoznak elssorban a nagygpes felhasznlknak s fejlesztknek kszlt. Taln ppen ezzel magyarzhat, hogy tmogatottsga egyelre nem klnsebben szleskr. Ami azt illeti, az elre lthat jvben a legtbbnknek elegend lesz az 1.0-s szabvnnyal trdni. Az XML kzssg berkein bell egyesek sugdosnak valamit egy XML 2.0 szabvnyrl is, de ezt hivatalos forrsbl mg soha senki nem erstette meg.

Visszatrve az XML deklarcihoz ez a bizonyos kezd sor azt mondja meg az XML alkalmazsnak vagy webbngsznek, hogy a krdses dokumentum az XML melyik szabvny alapjn kszlt. XML 1.0 esetn a deklarci a kvetkezkppen fest.
<?xml version="1.0"?>

Els ltsra ez a kdrszlet meglehetsen hasonlt egy elem megadsra, m jobban megnzve nem errl van sz, hiszen itt nem egy cmkvel nylik a lers. Amit ltunk az egy gynevezett feldolgozsi utasts (processing instruction) amely nevnek megfelelen az XML dokumentumot hasznl alkalmazs szmra kzvett feldolgozsi utastsokat. Ebben a konkrt esetben azt kzljk az alkalmazssal, hogy dokumentumunk az XML 1.0 szabvny elrsainak megfelelen kszlt, teht ekknt kell azt rtelmezni. A feldolgozsi utastsokat minden esetben a <? s ?> jelek hatroljk. Az XML 1.1 szabvny szerint minden XML dokumentumnak tartalmaznia kell az XML deklarcit.

26 I. rsz Alapok

A megfelel XML szerkeszt kivlasztsa


Az XML dokumentumok ltrehozshoz s szerkesztshez szksgnk van valamilen szerkesztprogramra. Mivel ezek a dokumentumok alapveten kznsges szvegfjlok, termszetesen akr egy egyszer szvegszerkeszt is megteszi. Aki pldul Windows opercis rendszer alatt dolgozik, nyugodtan hasznlhatja a Notepad vagy a Wordpad nev alkalmazsokat. Macintosh gpen ugyanezt a clt szolglhatja a TextEdit alkalmazs. Ugyanakkor ha olyan az XML-re specifikus szolgltatsokat is szeretnnk hasznlni, mint az elemek vagy attribtumok szintaktika szerinti sznezse, akkor egy igazi XML szerkesztre lesz szksgnk. Mieltt azonban bemutatnk nhny npszer alkalmazst, egy kicsit mg visszatrek maghoz az XML nyelvhez, hogy bemutathassam, milyen elveket hasznlnak illetve valstanak meg ezeknek az alkalmazsoknak a fejleszti. Az XML szerkesztknek alapveten hrom tpusa ltezik. Vannak WYSIWYG, WYSIWYM s kznsges szvegszerkesztk. Akinek van nmi tapasztalata webfejlesztssel vagy nyomdai elksztssel kapcsolatban, annak a WYSIWYG (What You See Is What You Get) kifejezs ismersen cseng. Az ilyen elven mkd alkalmazsok alapelve egyszer: a dokumentumot pontosan olyan formban szerkeszthetjk, amilyen formban az meg fog jelenni a felhasznl kpernyjn, vagy a papron. J plda erre a megkzeltsre a Microsoft Word vagy a Macromedia Dreamweaver. Az egyikkel nyomtatni kvnt dokumentumokat, a msikkal weblapokat szerkeszthetnk leth formban. A WYSIWYG XML szerkesztk ugyanezt a megkzeltst kvetik, vagyis nem annyira az adattartalomra, hanem annak vgs megjelensre koncentrlnak. Ez nyilvn nem igazn igazodik az XML szellemisghez, gy akadhatnak olyanok, akiket a logikai struktra jobban rdekel fejleszts kzben. Nekik kszlnek a WYSIWYM (What you See Is What You Mean) szerkesztk, amelyek a dokumentum jelentst tartjk szem eltt, a megjelentst pedig a dokumentumot hasznl alkalmazsra bzzk. Az ilyen szerkesztprogramok gyakran eleve ismernek tbbfle XML alap jellnyelvet, ami azrt hasznos, mert gy kpesek helyfgg segtsget nyjtani szerkeszts kzben. Ezek a programok a megfelel ponton csak az adott nyelv ltal megengedett cmkket vagy attribtumokat ajnljk fel. Magt a ksz kdot a legtbb WYSIWYM szerkeszt olyan faszerkezetknt jelenti meg, mint a webbngszk (lsd az elz fejezet 1.1. s 1.2. brjt). A WYSIYM XML szerkesztket gyakran hvjk szemantikai szerkesztknek is, mivel az XML kd szemantikjra (jelentsre) koncentrlnak, nem annak megjelensre.

Az XML szerkesztk harmadik tpusba az olyan kznsges szvegszerkesztk tartoznak, amelyek azrt nyjtanak nmi XML-re specifikus tmogatst is. Az ezek ltal alkalmazott megkzelts teht se nem WYSIWYG, se nem WYSIWYM, mivel itt munka kzben sem a dokumentum megjelense, sem annak jelentsen nem derl ki. Itt a fej-

2. ra XML dokumentumok ltrehozsa 27

leszt teljesen magra van utalva, ami nem flttlen rossz dolog, hiszen a sprtai egyszersg klnsen egy kezdt arra ksztethet, hogy az XML-nek minden apr rszletre odafigyeljen. A piacon termszetesen szmos szoftver van jelen mindhrom kategribl, s ezek ra is teljesen vltoz. Br egy ilyen specilis alkalmazs beszerzse egy ponton mindenkppen clszer lesz azok szmra, akik komolyan foglalkoznak az XML-lel, n mgis azt javaslom, hogy egyszer pedaggiai megfontolsbl tltsnk el nmi idt egy kznsges szvegszerkeszt trsasgban. Ez lehetsget teremt arra, hogy azon a szinten dolgozzunk, hibzzunk s tanuljunk, ahol maga az XML ltezik s mkdik. Ebbl lehet a legtbbet tanulni. A 2.1. brn azt lthatjuk, miknt fest a korbban emlegetett talltales dokumentumunk, ha az XML-rl mit sem sejt Windows Notepad segtsgvel nyitjuk meg.

2.1. bra
XML dokumentumokat az olyan kznsges szvegszerkesztkkel is lehet kszteni, mint amilyen a Windows Notepad

Ha a Windows Wordpad-et, vagy brmilyen egyb szvegszerkesztt hasznlunk, amely tbbfle formtumban is kpes menteni a dokumentumokat, az XML dokumentumok mentshez akkor is a kznsges szveg (plain text) formtumot hasznljuk. Ez azt jelenti, hogy a munka befejeztvel a Ments msknt menpontot kell hasznlnunk, s ott fjltpusknt a Text Only (.txt) formtumot vlasztanunk. Ami a WYSIWYG szerkesztket illeti, a legjobb, amit valaha lttam a Vex, ami radsul szabad szoftver, s a vex.sourceforge.net cmrl tlthetjk le. A Vex egy a Microsoft Wordhz hasonl grafikus felhasznli felletet jelent meg. Ami azonban mg ennl is

28 I. rsz Alapok

fontosabb, ez a program elrejti az XML cmkket, vagyis valban a WYSIWYG elvnek megfelelen mkdik. gy a fejleszt kizrlag a kd megjelensre koncentrlhat. A Vex CSS-t hasznl az XML tartalom megjelentshez. Hogy miknt lehet stluslapokat XML dokumentumokra alkalmazni, arrl a 10. rban lesz rszletesen sz. Sajnos a Vex segtsgvel meglehetsen nehzkes a nagyobb projektek kezelse, gy azt javaslom, hogy ilyen esetben hasznljunk inkbb egy WYSIWYM vagy egy kznsges szvegszerkesztt, amg kell gyakorlatot nem szerznk. Ne felejtsk el azt sem, hogy egy kznsges szvegszerkesztvel ltrehozott XML dokumentum megjelentshez brmikor hasznlhatunk egy webbngszt, vagyis a WYSIWYG szolgltats nem is olyan igazn fontos. A legtbb XML dokumentumban a lnyeg radsul nem is a megjelens, hanem a logikai felpts. Ilyen esetekben sokkal hasznosabb lehet egy WYSIWYM szerkeszt. Ebbl a tpusbl a kedvencem a Butterfly XML, ami szintn szabadon hasznlhat, s a http://www.butterflyxml.org cmrl tlthetjk el. A Vex-szel ellenttben a Butterfly XML a dokumentumok logikai szerkezetre s nem azok megjelensre koncentrl. Ennek megfelelen a dokumentumot hierarchikus faszerkezetknt s kznsges szvegknt egyarnt kpes megjelenteni. Msknt fogalmazva ezzel a szerkesztvel dolgozva egyszerre lthatjuk a dokumentum logikai vzt, s azt, hogy a vz egyes pontjaihoz milyen tartalom tartozik. Ugyanakkor a program megkml bennnket attl, hogy kznsges szvegknt kelljen ezt a szerkezetet ltrehoznunk. A szveg bevitelhez szmos segdeszkzt kapunk. A Butterfly pldul helyi menk formjban kpes megjelenteni azoknak a cmkknek a listjt, amelyek az adott ponton szba jhetnek. Neknk csak vlasztanunk kell. A 2.2. brn lthatjuk, miknt segt bennnket a Butterfly XML abban, hogy a dokumentumot annak jelentse s logikai szerkezete alapjn szerkesszk.

2.2 bra
A Butterfly XML egy WYSIWYM XML szerkeszt, vagyis lehetv teszi, hogy fejleszts kzben a dokumentum jelentsre s logikai szerkezetre koncentrljunk.

2. ra XML dokumentumok ltrehozsa 29

Nos ami azt illeti, itt egy kicsit elreszaladtam, hiszen a kpen az a talltales.xml dokumentum ltszik, amit csak ksbb fogunk ltrehozni. Ez lesz letnk els XML dokumentuma, s grem, nem kell mr sokat vrni r. Mg ebben az rban sorra kerl. Nehogy valaki gy gondolja, hogy n amolyan sprols pasas vagyok, mert kizrlag ingyenes alkalmazsokat mutatok be, elrulom, hogy rengeteg kereskedelmi XML szerkeszt is ltezik. Ha teht valaki ezt az utat szeretn vlasztani, nos ennek semmi akadlya. A legtbb kereskedelmi alkalmazs ltalban a WYSIWYG s WYSIWYM megkzeltst is tmogatja, ami termszetesen nagy elny, hiszen a sokoldalsg egyben flexibilitst is jelent. Ezek kzl az alkalmazsok kzl az egyik legjobb, amivel valaha tallkoztam az <oXygen> XML Editor, mely Windows, Macintosh s Linux opercis rendszerek alatt egyarnt futtathat, st ltezik Eclipse modulknt is. Az <oXygen> ugyan pnzbe kerl, de aki komolyan foglalkozik XML-lel, annak pillanatok alatt behozza az rt. Aki tbbet akar tudni errl a programrl, ltogasson el a http://www.oxygenxml.com cmre. Egy msik kifejezetten gretes alkalmazs az XML Spy, amely viszont csak Windows alatt futtathat. Ez tulajdonkppen egy viszonylag rgta ltez szerkeszt, s ennek megfelelen szmos XML technolgit tmogat. Mindazonltal neknk kezdknek most a leglnyegesebb tulajdonsga taln az lehet, hogy ltezik egy ingyenesen hasznlhat Home kiadsa is. Van persze Enterprise Edition s Professional Edition is belle, amelyek pnzbe kerlnek, ugyanakkor a beljk fektetett sszeg szintn hamar megtrl azoknak, akik komoly munkhoz hasznlnak XML-t. Az XML Spy Home Edition a http://www.altova.com/download_spy_home.html cmrl tlthet le.

Els XML dokumentum unk


Immr birtokban vagyunk annak az alapvet tudsnak, amelyre ptve ltrehozhatjuk els XML dokumentumunkat. A legtbb olvasnak ezen a ponton valsznleg mr szmos nll tlete is van arra, hogyan hasznlhatn a megszerzett ismereteket sajt adatainak megformzsra. Ami azt illeti, csak btortani tudok mindenkit az effle nllsgra. Ugyanakkor itt s most maradjunk az n adataimnl, s hasznljuk ezeket az els plda ltrehozsa sorn. Amikor pp nem rok knyvet, egy Stalefish Labs-nek nevezett, hagyomnyos tbls jtkokat kszt cgnek dolgozom. Nhny ve Talltales nven elksztettk egy papr alap krdezzfelelek jtkot (http://www.talltalesgame.com) s jelenleg a szoftveres vltozaton dolgozunk. A krdseket s a helyes vlaszokat tartalmaz adatbzist mi sem termszetesebb XML-ben valstjuk meg. Az elkpzels szerint ezt a jtkot kznsges webbngszvel, st mobil eszkzkkel is lehet majd jtszani. Az XML-ben trtn megvalsts legfbb haszna a mi szempontunkbl az, hogy az adatbzis egyrszt garantltan konzisztens marad, msrszt egszen egyszer lesz a frisstsek kibocstsa.

30 I. rsz Alapok

Szmunkra most ebbl az egszbl csak annyi a lnyeg, hogy a krdsek s feleletek trolsa kivl plda lesz XML tanulmnyaink folytatshoz. A Tall Tales jtk tbbfle krdstpust tartalmaz. Kzlk az egyik olyan, hogy a krdshez hrom lehetsges vlasz tartozik, s ezek kzl kell a jtkosnak megjellnie a szerinte helyeset. Termszetesen az adatszerkezetnek csak gy lesz rtelme, ha tartalmazza valahol a helyes vlasz kdjt is. Eddigi tudsuk alapjn a legclszerbbnek az mutatkozik, ha ezt a krdst s a vlaszokat tartalmaz felem egyik attribtumaknt troljuk. Ne felejtsk el azt sem, hogy amint azt nem is olyan rgen megtanultuk valamennyi XML dokumentumnak kell legyen egy s csakis egy gykreleme. Esetnkben ez a talltales nev elem lesz, mr csak a jtk neve miatt is. A talltales elem teht szmos krdst fog tartalmazni, amelyek mindegyikhez hrom lehetsges vlasz tartozik majd. A krdseket tartalmaz elemet question-nek fogjuk nevezni, a vlaszok pedig rendre az a, b, s c nevet kapjk. Termszetese fontos, hogy a vlaszok a megfelel krdssel legyenek sszecsomagolva, vagyis valamennyien egy trolsi egysgbe tartozzanak. Ezt a befoglal elemet tt-nek fogjuk nevezni, megint csak a talltale sz utn. Mr csak a helyes vlasz trolsrl kell gondoskodnunk, ami a tt elem egyik attribtuma lesz. Legyen ennek az attribtumnak a neve answer. Azoknak, akiknek ez a lers kicsit gyors volt s tmr, sszefoglalom a hasznlni tervezett elemeket, s azok rendeltetst:
talltales A dokumentum gykreleme tt Egy konkrt krds, s a hozz tartoz hrom vlasz question Egy krds a Az els lehetsges vlasz b A msodik lehetsges vlasz c A harmadik lehetsges vlasz

Ezen kvl a tt nev elemnek lesz egy answer nev attribtuma, amelyben a helyes vlasz betjelt (a, b vagy c) fogjuk trolni. Azt se felejtsk el, hogy a dokumentumnak egy megfelel XML deklarcival kell kezddnie. Mindezeket szem eltt tartva egy teljes tt elem a kvetkezkppen fog kinzni:
<tt answer="a"> <question> 1994-ben az Ohio llamban tallhat Akronban egy bnzt klns baleset rt, mikzben egy pizzrit akart kirabolni. Mi trtnt vele? </question> <a>Elcsszott egy a padln lev zsrfolton, s az tstl eljult.</a> <b>Kifel menet beletolatott egy rendrautba.</b> <c>Majdnem megfulladt egy kenyrdarabtl, amit menekls kzben flrenyelt.</c> </tt>

2. ra XML dokumentumok ltrehozsa 31

A fenti kdbl vilgosan ltszik, miknt kpeztnk egyetlen logikai csoportot a krdsbl s a hozz tartoz hrom lehetsges vlaszbl. Az answer nev attribtum tartalmbl az is ltszik, hogy a helyes vlasz jelen esetben az (a). Pldnkban nem fordul el res elem, hiszen minden egysg vagy szveget tartalmaz, vagy ms elemeket. Figyeljk meg azt is, miknt vannak egymsba gyazva az egyes elemek. Most, hogy lttuk a teljes adatbzis egyetlen elemt, vessnk egy pillantst a 2.2. listra, amely egy hrom krdsbl ll teljes adatbzist tartalmaz.

2.2. lista

Egy a Tall Tales jtkhoz tartoz XML dokumentum

1: <?xml version="1.0"?> 2: 3: <talltales> 4: <tt answer="a"> 5: <question> 6: 1994-ben az Ohio llamban tallhat Akronban egy bnzt klns baleset rt, mikzben egy pizzrit akart kirabolni. 7: Mi trtnt vele? 8: </question> 9: <a>Elcsszott egy a padln lev zsrfolton, s az tstl eljult.</a> 10: <b>Kifel menet beletolatott egy rendrautba.</b> 11: <c>Majdnem megfulladt egy kenyrdarabtl, amit menekls kzben flrenyelt.</c> 12: </tt> 13: 14: <tt answer="c"> 15: <question> 16: 1993-ban az Indiana llamban tallhat Martinswille-ben egy embert letartztattak betrs vdjval, miutn a lakk 17: felfedeztk, s feljelentettk a rendrsgen. 18: Hogyan jttek r a lakk a betrsre? 19: </question> 20: <a>Mieltt bement volna valahova, illedelmesen becsngetett.</a> 21: <b>Embernk vegekkel s ednyekkel csrmplve nekillt a konyhban, hogy egy kenyeret kenjen magnak.</b> 22: <c>Az illet az egyik hzban lelt a zongorhoz, s jtszani kezdett.</c> 23: </tt> 24: 25: <tt answer="a"> 26: <question> 27: 1994-ben az angliai Yorkban tallhat Nestle UK lelmiszeripari cget az egyik 36 ves dolgozja beperelte, 28: mert zemi balesetet szenvedett. 29: Mi trtnt az illetvel? 30: </question> 31: <a>Beleesett az egyik nagy mret keverbe, s vagy egy percig kavargott a masszban.</a>

32 I. rsz Alapok
32: <b>Gyomorfeklye keletkezett a sok nyalktl, ugyanis hivatsos kstolknt dolgozott a cgnek.</b> 33: <c>Fejbevgta egy nagy mret csokold, ami valahonnan elreplt.</c> 34: </tt> 35: </talltales>

Br els rnzsre ez egy meglehetsen hossz kdnak tnik, a jelents rszt valjban a krdsek s a vlaszok teszik ki. Az elz magyarzat alapjn a cmkk jelentse s hasznlatnak mdja mr nyilvn vilgos. Ezzel teht el is kszltnk els XML dokumentumunkkal. Mieltt tovbblpnnk, vessnk egy pillantst a 2.2. brra, amelyen az ltszik, miknt fest dokumentumunk a WYSIWYM tulajdonsgokkal rendelkez Butterfly XML szerkesztben.

XML dokumentumok megjelentse


Ha nekilltunk egy projekt megvalstsnak, s ltni szeretnnk, hogyan fest az az XML dokumentum, amin eddig dolgoztunk, annak legjobb mdja, ha egy megfelelen kialaktott stluslapot rendelnk hozz. A stluslapok olyan formzsi lersok, amelyek azt hatrozzk meg, hogy az XML dokumentum egyes elemei hogyan jelenjenek meg egy webbngszben. A mdszer termszetesen nem j, hiszen a stluslapokat eredetileg HTML oldalak formzsra talltk ki. Ugyanakkor a mdszer egy az egyben tvihet XML dokumentumokra is. Ez utbbi esetben a formzs explicit megadsa klnsen fontos, hiszen a bngszprogramoknak fogalmuk sincs, mit kellene kezdenik az ltalunk bevezetett egyedi cmkkkel. A stluslapokrl s az XML dokumentumok formzsrl a knyv harmadik rszben rszletesen esik majd sz. Ugyanakkor itt s most mgis szeretnk bemutatni egy olyan stluslapot, amivel az imnt ltrehozott Tall Tales dokumentumot lehet szpen formzva megjelenteni egy bngszben. Ne felejtsk el, hogy a stluslapok clja alapveten az adatok megjelensnek a szablyozsa, azok jelentsre azonban nincs hatsuk. Segtsgkkel megadhatjuk a bettpusokat, a szneket, a szvegrszek, bekezdsek s kpek elhelyezkedst. A stluselemeket mindig az egyes elemtpusokra lehet alkalmazni, vagyis esetnkben minden egyes elemhez (tt, question, a, b, c) meg kell adnunk a megjelents mdjt. A 16. rban azt is be fogom mutatni, hogy szkriptek segtsgvel miknt rendelhetnk interaktivitst a Tall Tales jtk tartalmi elemeihez, most azonban csak a szp megjelens a cl. Az alapelkpzels az, hogy a lehetsges vlaszoknak a krds utn, valamivel kisebb betkkel s ms sznnel kell megjelennik. A formzshoz hasznlt talltales.css stluslap tartalma a 2.3. listban olvashat.

2. ra XML dokumentumok ltrehozsa 33

2.3. lista
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:

A Tall Tales XML dokumentum megjelentshez hasznlt stluslap

tt { display: block; width: 750px; padding: 10px; margin-bottom: 10px; border: 4px double black; background-color: silver; } question { display: block; color: black; font-family: Times, serif; font-size: 16pt; text-align: left; } a, b, c { display: block; color: brown; font-family: Times, serif; font-size: 12pt; text-indent: 15px; text-align: left; }

Ha ez gy elsre tlsgosan bonyolultnak tnik, semmi gond. Egyelre csak azt figyeljk meg, hogy a stluslap kdjban minden egyes XML elem neve feltnik. Mg ha valaki nem is ltott soha letben CSS stluslapot, a paramterek tanulmnyozsval akkor is szmos dolgot megrthet a fenti kdbl, hiszen a nevek meglehetsen beszdesek. A 12. sorban pldul a color: black kittel nyilvnvalan azt jelenti, hogy a question nev elem tartalmnak feketvel kell megjelennie. Ha egy kznsges szvegszerkesztvel ltrehozzuk ezt a stluslapot, s hozzcsatoljuk a talltales.xml dokumentumhoz, akkor azt a Mozilla Firefox bngsz a mr nem 2.3. hanem a 2.4. brn lthat mdon fogja megjelenteni. Amg a stluslapot nem csatoljuk a megfelel XML dokumentumhoz, addig a bngsz mit sem tud arrl, hogy az egyes elemeket hogyan kellene formznia (2.3. bra). A tartalom kznsges XML kdknt jelenik meg, a megadott formzsoknak pedig nyoma sincs sehol. A stluslap s a dokumentum sszerendelshez az XML deklarcit ki kell egsztennk a kvetkez mdon:
<?xml-stylesheet type="text/css" href="talltales.css"?>

34 I. rsz Alapok

2.3. bra
A talltales.xml fjl tartalma egyelre kznsges XML kdknt jelenik meg, mivel a stluslapot mg nem csatoltuk hozz.

A talltales.xml dokumentum eleje teht immr gy fog festeni:


<?xml version="1.0"?> <?xml-stylesheet type="text/css" href="talltales.css"?> <talltales> <tt answer="a"> ...

A figyelmes szemll felfedezheti, hogy a dokumentumban egy a feldolgoznak szl j utastssor jelent meg, melynek tartalma a mr ismert <? s ?> jelek kz van zrva. Ez a sor utastja az XML alkalmazst, esetnkben a webbngszt arra, hogy a megjelents sorn a talltales.css fjlban tallhat informcikra tmaszkodjon. Ennek a kiegszt informcinak a megadsa utn dokumentumunk mr a 2.4. brn lthat mdon fest, ha megnyitjuk a Mozilla Firefox bngsz segtsgvel.

2. ra XML dokumentumok ltrehozsa 35

2.4. bra
Egy egyszer stluslap hozzrendelsvel XML dokumentumunk tartalma sokkal ttekinthetbben jelenik meg egy webbngszben.

Nos, ez mr sokkal jobban fest. Amint lthat, mr egy egyszer stluslap is csodt tesz XML dokumentumunk megjelensvel. Elgedetten htradlhetnk: ltrehoztuk els XML dokumentumunkat, a hozz tartoz stluslappal egyetemben. Ha az olvas netn gy rzi, hogy a stluslapok ltrehozsnak krdst enyhn szlva elnagyoltam ebben a fejezetben, akkor kszsgesen egyetrtek. Azrt tettem gy, mert itt s most arra trekedtem, hogy gyors ttekintst adjak az XML dokumentumokkal kapcsolatos munkrl. Ami pedig a stluslapok hasznlatt illeti, arrl bven lesz sz a knyv harmadik rszben, teht nincs veszve semmi.

sszefoglals
Amint az a msodik ra anyagbl kiderlt, az XML alapvet szablyai nem klnsebben bonyolultak. Br az XML sokkal merevebb, mint a HTML, ha elsajttottuk a nyelv alapvet szerkesztsi szablyait, villmgyorsan ltrehozhatjuk els dokumentumunkat. Ami azt illeti, az XML erejt ppen a konzisztencija adja. Ez teszi kpess arra, hogy segtsgvel gyakorlatilag brmilyen adatokat kezeljnk. Mivel maga az XML sem bonyolult, a hasznlathoz szksges eszkzk is egszen egyszerek lehetnek. Els kzeltsben semmi egybre nincs szksgnk, csak egy olyan kznsges sz-

36 I. rsz Alapok

vegszerkesztre mint pldul a Windows Notepad nev alkalmazsa. Termszetesen lteznek specializlt alkalmazsok is, amelyeknek elssorban azok vehetik hasznt, akik komolyabb, nagyobb mret feladatokba vgnak bele az XML segtsgvel. Az ra elejn megtanultuk az XML alapelveit, majd megnztk, hogyan hozhatunk ltre mi magunk ilyen dokumentumokat, illetve milyen segdeszkzket hasznlhatunk ehhez. A bevezet utn ltrehoztunk egy nem tl bonyolult de a maga mdjn teljes XML dokumentumot, majd azt is megnztk, hogyan csatolhatunk ehhez egy megfelelen kialaktott stluslapot, amely a tartalom webbngszben val megjelentst teszi kiss bartsgosabb.

Krdsek s vlaszok
Krds: Honnan tudhatom meg, mi az XML legfrissebb vltozata? Vlasz: Az XML jelenleg legfrissebb vltozata az 1.1-es, br ezt egyelre meglehetsen kevs alkalmazs tmogatja. A legfrissebb ajnlsokat amgy a World Wode Web Consortion (W3C) hivatalos webhelyn, a http://www.w3c.org/ cmen tallhatjuk meg. Ugyanakkor fontos megjegyezni, hogy az XML pillanatnyilag meglehetsen stabil technolginak szmt, gy vele kapcsolatban nem vrhatak olyan gyors s drasztikus vltozsok, mint ms technolgik, pldul a Java vagy a HTML esetben. Gyakorlati szempontbl az XML aktulis vltozatnak tovbbra is tekinthetjk az 1.0-s szabvnyt. Krds: Mi trtnik, ha egy XML dokumentumban megsrtjk a nyelvvel kapcsolatos ajnlsok valamelyikt? Vlasz: Nos, a szmtgpnk azonnal le fog fagyni, majd kzvetlenl ez utn az egsz egy tzgolyv vltozik s flrobban. Viccet flretve egszen addig az gvilgon semmi nem fog trtnni, amg meg nem prbljuk a krdses dokumentumot fldolgozni valamilyen XML alkalmazssal. Ekkor sem lesz azonban semmifle katasztroflis kvetkezmnye a tvedsnek, egyszeren csak kapunk egy hibazenetet. Az XML alap alkalmazsok ltalban megvizsgljk, hogy a feldolgozni kvnt dokumentum megfelel-e bizonyos alapvet kdolsi szablyoknak, s ha nem, akkor ezt egy megfelel hibazenetben kzlik a felhasznlval. Szerencsre a webbngszk tbbsge is egsz gyesen kiszri az XML dokumentumok hibit, ami mr csak azrt is rdekes, mert a HTML dokumentumokat kztudottan mindegyik kicsit mshogy kezeli. Krds: Van a bemutatotton kvl ms mdja is annak, hogy egy XML dokumentum tartalmt megformzzuk? Vlasz: Igen. Ebben az rban a Tall Tales plda kapcsn a CSS (Cascading Style Sheets) technolgit hasznltuk, amit elssorban HTML s XML dokumentumok formzsra fejlesztettek ki. Ltezik ugyanakkor egy XSL (eXtensible Style Language) nev

2. ra XML dokumentumok ltrehozsa 37

technolgia is, amellyel szrhetjk, talakthatjuk s kezelhetjk az XML dokumentumok tartalmt. A stluslapokrl s errl a technolgirl is a knyv harmadik rszben lesz sz rszletesen.

Feladatok
A feladatokat gy alkottuk meg, hogy segtsenek a felmerl krdsek megvlaszolsban, a tanultak ttekintsben, s azok gyakorlatba val tltetsben.

Kvz
1. Mit neveznk res elemnek? 2. Mi a jelentsge a gykrelemnek? 3. Mit neveznk XML deklarcinak, s a dokumentum mely rszn kell ennek szerepelnie? 4. Hogyan valstana meg egy olyan movie nev res elemet, amelynek van egy format nev attribtuma, s ennek dvd azt rtke?

Vlaszok
1. Az res elem olyan elem, amely semmit sem tartalmaz a nyit s a zr cmke kztt. Az res elemeket megadhatjuk cmkeprokkal (<friend></friend>), de hasznlhatjuk az erre rendszerestett rvidtett formt is (<friend />). 2. A gykrelem az az elem, amely a dokumentum sszes ms elemt tartalmazza. Minden dokumentumnak pontosan egy gykrelemmel kell rendelkeznie. 3. Az XML deklarci egy olyan kdsor a dokumentum elejn, amely azt adja meg, hogy az adott anyag melyik XML szabvny alapjn kszlt. 4. <movie format="dvd" />

Gyakorlatok
1. Hozzunk ltre mg egy krds elemet a talltales.xml dokumentumban. Adjuk meg a hrom lehetsges vlaszt, valamint a helyes kdjt is. Ezutn nzzk meg egy webbngsz segtsgvel, hogyan fest az j dokumentum a talltales.css stluslappal formzva. 2. Mdostsuk gy a talltales.css stluslapot, hogy a krdsek s vlaszok eltr sznnel jelenjenek meg. A stluslapok ugyanolyan szveges dokumentumok, mint az XML fjlok, gy ezeket is szerkeszthetjk egy egyszer szvegszerkesztvel.

II. RSZ
Az XML adatok meghatrozsa
3. ra 4. ra 5. ra 6. ra 7. ra 8. ra Az adatok meghatrozsa DTD sma segtsgvel ssunk az XML dokumentumok mlyre! Nvterek hasznlata tmretezhet vektorgrafika ksztse SVG-vel Az XML Schema hasznlata XML dokumentumok rvnyessgnek ellenrzse

3. RA
Az adatok meghatrozsa DTD sma segtsgvel
A szmtgpek nem intelligensek, csak azt gondoljk magukrl. Ismeretlen Az XML nyelv megalkotsnak egyik oka az emberi hibk lehetsgnek kikszblse volt. Mivel az XML szerkezete meglehetsen merev, az XML fejlesztknek nem sok lehetsgk van arra, hogy hibzzanak. Akivel megtrtnt mr, hogy bankszmljn tvesen szmoltak el egy terhelst (vagyis a bank a sajt javra tvedett) az a sajt brn (zsebn) rezte, mekkora jelentsge van a hibk kizrsnak egy kritikus kldetst betlt szmtgpes rendszerben. Az XML hasznlata ennek megfelelen gyorsan terjed az effle rendszereket zemeltet vllalatokon bell, de klnsen a gazdasgi letben s a bankszektorban. Az XML merev szablyrendszere nyilvn nagyobb stabilitst klcsnz majd ezen szervezetek informatikai rendszereinek. Az XML dokumentumokban esetleg megbj hibk felfedezsnek alapja az gynevezett sma. Ez egy olyan logikai felptmny, vagy szerkezeti lers, amely segtsgvel az XML fejlesztk elre meghatrozhatjk, mifle adatok, milyen formtumban s milyen struktrval szerepelhetnek az adott dokumentumban.

42 II. rsz Az XML adatok meghatrozsa

Ebben az rban teht a smkrl lesz sz. A knyvben termszetesen rinteni fogjuk mindkt ma hasznlatos smanyelvet, de ebben az rban csak a DTD-rl lesz sz rszletesebben. A msik mdszerrl majd egy ksbbi rban ejtnk szt. Ebben az rban teht a DTD-k bels mkdst fogjuk boncolgatni, s megtanuljuk, hogyan hozhatunk ltre mi magunk is egy DTD smt sajt ignyeinknek megfelelen. Ebben az rban a kvetkezket fogjuk megtanulni: Miknt teszi lehetv az XML specilis nyelvek meghatrozst A smk szerepe az XML segtsgvel trtn adatmodellezsben Az XML smk kzti klnbsgek Mitl lesz egy dokumentum rvnyes, illetve jl formzott (well-formed) Hogyan hatrozhatunk meg elemeket s attribtumokat egy DTD-ben Hogyan hozhatunk ltre s hasznlhatunk egy DTD-t, ha sajt jellnyelvet akarunk definilni

Sajt jellnyelv ltrehozsa


Mieltt belevgnnk az ra tnyleges anyagba, hadd tegyek egy kis kitrt. Amikor ltrehozunk egy XML dokumentumot, annak kdolshoz valjban nem magt az XML nyelvet hasznljuk, hanem azt a sajt jellnyelvet, amit az XML segtsgvel definiltunk. Msknt fogalmazva az XML-t tnylegesen olyan jellnyelvek ltrehozsra hasznljuk, amelyek segtsgvel aztn XML dokumentumokat alkothatunk. Igazbl az XML dokumentum kifejezs flrevezet, hiszen ezeket a dokumentumokat nem XML nyelven, hanem egy az XML-lel ltrehozott nyelven fogalmazzuk meg. Ha mondjuk ltrehoznk magamnak egy klnbejrat jellnyelvet, teszem azt MML (Michael's Markup Language) nven, akkor az e nyelv segtsgvel megalkotott dokumentumokat sokkal helyesebb volna MML dokumentumoknak hvni, tekintve hogy a kdolsukhoz az n sajt jellnyelvemet hasznltuk. Ugyanakkor kicsit nagyobb v ltalnostst alkalmazva azt is llthatjuk, hogy ezek azrt mgis csak XML dokumentumok, hiszen egy XML alap jellnyelv segtsgvel jttek ltre. A fentiek miatt azonban az MML dokumentum kifejezs sem tekinthet helytelennek. Nomrmost ennek a szp eszmefuttatsnak nem az XML terminolgival kapcsolatos szrszlhasogats volt a clja, sokkal inkbb az, hogy rvilgtsak az XML tnyleges cljra. Ez a nyelv arra ad lehetsget, hogy segtsgvel sajt jellnyelveket alkossunk. Az az olvas, aki a HTML vilgbl rkezett egszen eddig nyilvn meg volt rla gyzdve, hogy jellnyelv csak egy van, spedig a HTML. Nos az XML vilgban jellnyelvek ezrei lteznek, s mindegyik ms s ms adattpusra alkalmazhat. Egy XML fejlesztnek alapveten kt vlasztsa van: hasznlhat egy ksz jellnyelvet, amit valaki ms mr ltrehozott az adott adattpus kezelshez, vagy definilhat magnak egy

3. ra Az adatok meghatrozsa DTD sma segtsgvel 43

sajt nyelvet. Egy ilyen XML alap jellnyelv lehet teljesen hivatalos. Ilyen pldul az XHTML, a HTML XML-alap kiterjesztse. Lehet ugyanakkor teljesen egyedi is, mint a korbban emltett Tall Tales jtk sajt jellnyelve. Amikor ltrehozunk egy sajt jellnyelvet, gyakorlatilag azt hatrozzuk meg, hogy az adott problmval s adattpussal kapcsolatban milyen cmkket s attribtumokat lehet hasznlni. Persze nyelvrl lvn sz nem csak az elemeket s attribtumokat kell pontosan lernunk, hanem azok egymshoz val viszonyt is. Ha pldul ltre akarunk hozni egy olyan XML-alap nyelvet, amellyel a helyi softball liga eredmnyeit kvnjuk nyilvntartani, feltehetleg olyan egyedi cmkket fogunk hasznlni, mint <schedule> (jtkterv), <game> (mrkzs), <team> (csapat), <player> (jtkos) s gy tovbb. Ami pedig az attribtumokat illeti, a player elemhez pldul a kvetkezket rendelhetjk: name (nv), hits (glok szma), rbis, s gy tovbb. Ha a pldn felbuzdulva valaki azon tri a fejt, hogy valban ltrehoz egy effle sportler nyelvet, annak azt hiszem megsprolok nmi idt ha elrulom, hogy a dolog SportsML (Sprts Markup Language) nven mr ltezik. Ebben a nyelvben az imnt emltetthez hasonl cmkk mr lteznek, st a lehetsgek trhza sokkal nagyobb, hiszen a SportsML szmos klnbz sportg lersra ad lehetsget. Aki tbbet szeretne megtudni errl a specilis jellnyelvrl, ltogasson el a SportsML hivatalos webhelyre (http://www.sportsml.org). Most nyilvn sokakban merlt fel a krds, miszerint hogyan is hozhatunk ltre egy sajt jellnyelvet? Hogyan hatrozhatjuk meg a hasznlhat elemek s attribtumok krt, illetve hogy ezek mifle viszonyban llhatnak egymssal? Br hasznlhatnnk sajt cmkket s attribtumneveket is, abbl a tnybl, hogy ez a nyelv mr ltezik egyenesen kvetkezik, hogy lennie kell valahol egy formlis lersnak is, ami megadja a dokumentumok felptst s formtumt. Nos, ez a szablyhalmaz valban ltezik, s ezt nevezzk rviden egy jellnyelv smjnak. A sma egyrszt megadja, hogy az adott nyelvben milyen cmkk s attribtumok lteznek, msrszt meghatrozza, hogy ezek mifle viszonyban llnak egymssal. A sma teht olyasmi, mint egy szerzds a nyelv megalkotja, s majdani hasznlja kztt. Br az imnt azt mondtam, hogy a sma olyan, mint egy szerzds, a dolognak a joghoz termszetesen semmi kze. Az sszehasonlts alapjt csak az a tny kpezi, hogy a sma akrcsak egy igazi jogi szerzds mindent nagyon pontosan ler, s semmifle ktsget nem hagy azzal kapcsolatban, hogy az adott nyelvet miknt kell hasznlni.

44 II. rsz Az XML adatok meghatrozsa

Smk s adatmodellezs XML-lel


Azt a folyamatot, amely sorn ltrehozunk egy smt egy XML dokumentumtpushoz adatmodellezsnek nevezzk. A nv onnan ered, hogy a sma ltrehozshoz fel kell mrnnk, milyen osztlyokba sorolhatk az adatok, ezeknek milyen elemek fognak megfelelni, az elemekhez pedig milyen attribtumok tartozhatnak. Ha elkszltnk egy a krdses adattpushoz tartoz adatmodellel (smval), elkezdhetnk ltrehozni olyan XML dokumentumokat, amelyek ehhez a struktrhoz igazodnak. A smk igazi jelentsge abban ll, hogy lehetv teszik az XML dokumentumok szerkezeti s logikai ellenrzst. Ez a gyakorlatban azt jelenti, hogy a sma alapjn maga a fejleszt, vagy akr egy XML alap alkalmazs ellenrizheti, hogy a neki tadott vagy ltala fejlesztett dokumentum szerkezetileg valban megfelel-e a smban megadott szablyoknak. Ha valahol eltrs van, mind a fejleszt, mind az alkalmazs biztos lehet benne, hogy a krdses dokumentum valahol hibs. Az XML dokumentum rvnyessge, vagyis a smnak val megfeleltethetsge olyan, mint egy hivatalos pecst, ami igazolja, hogy a krdses adatok szerkezetileg megfelelnek mindazon kritriumoknak, amelyek lehetv teszik, hogy az adott alkalmazssal kezelhetek legyenek. Az XML dokumentumok rvnyessgnek ellenrzsrl rszletesen majd csak a 8. rban esik sz. Hogy megvilgtsuk, milyen jelents szerepet tltenek be a smk az XML vilgban, nzznk egy a val letbl vett analgit. Tegyk fel, hogy tallkoztunk valakivel, akit mr vek ta nem lttunk, s az illet megadta neknk az e-mail cmt, hogy knnyebben elrhessk. Csakhogy az ltala lert cm a kvetkezkppen fest: lucy*stalefishlabs.com. Mi persze tudjuk, hogy az sszes e-mail cm egy felhasznlnvvel kezddik, amit egy at szimblum (@) kvet, majd pedig egy tartomnynvnek kell kvetkeznie. Mindez azt jelenti, hogy ebben a cmben valami biztosan nem stimmel. A nv@tartomnynv formtum tulajdonkppen nem ms, mint egy egyszer sma. Amikor megvizsgltuk a bartunktl kapott e-mail cmet, valjban ezt a smt hasznltuk arra, hogy eldntsk, rvnyes cmrl van-e sz, s arra jutottunk, hogy az bizony hibs. A hiba jelen esetben amgy egszen nyilvnval: a * karaktert @-ra cserlve mr rvnyes cmet kapunk. Nos, ez a plda taln rvilgtott, hogyan hasznlhatk a smk az XML dokumentumok rvnyessgnek ellenrzsre, az azonban taln mg nem teljesen vilgos, hogy egyltaln mirt kell az rvnyessget ellenrizni. Azt, hogy az XML vilgban smkat hasznlunk az magyarzza, hogy a fejlesztk lehetv akartk tenni a dokumentumok bels szerkezetnek szmtgppel trtn ellenrzst. Visszatrve az imnti pldhoz mi emberek egsz knnyen r tudtunk jnni arra, hogy hol a hiba azzal a bizonyos elrontott e-mail cmmel. Mit tehet azonban ilyen esetben egy levelezprogram? Itt nyilvn a fejlesztnek kell gondoskodnia a lehetsges hibk ellenrzsrl, vagyis rnia kell egy olyan kdrszletet, ami megvizsglja, hogy a felhasznl ltal begpelt cm megfelel-e a megadott szablyoknak. Nos, az XML dokumentumok esetben ugyanezt a szerepet

3. ra Az adatok meghatrozsa DTD sma segtsgvel 45

tlti be a sma, hiszen ez alapjn dntheti el az alkalmazs, hogy a neki tadott adatok szerkezetileg megfelelnek-e azoknak az elrsoknak, amelyeket a fejleszt felttelezett. Rviden teht a smk a dokumentumok szerkezeti ellenrzsnek segdeszkzei. Ha ltre kell hoznunk egy smt, alapveten a kvetkez kt technolgia kzl vlaszthatunk: DTD (Document Type Definition), XSD (XML Schema) E kt eltr technolgia tulajdonkppen ugyanazt a clt szolglja, nevezetesen XML alap jellnyelvek adatmodelljt kszthetjk el a segtsgkkel. A kvetkez kt szakaszban kicsit rszletesebben is bemutatom a kt megkzelts kzti klnbsgeket.

A DTD technolgia (Document Type Definition)


Figyelem, egy j rvidtst kszlk bevezetni. A DTD a Document Type Definition (Dokumentumtpus Meghatrozs) az XML dokumentumok logikai felptsnek lersra eredetileg alkalmazott megkzelts. Az eredetileg kifejezst itt azrt hasznltam, mert a DTD-k hasznlata valjban nem az XML-lel egytt szletett meg, hanem mg az XML eldjt jelent SGML (Standard General Markup Language) fejleszti dolgoztk ki. A DTD technolgia tulajdonkppen gy kerlt be az XML vilgba, hogy annak szletsekor mr szmos olyan eszkz ltezett, ami kpes volt DTD-ket kezelni. Persze azta sok minden vltozott, s ma mr egy sokkal hatkonyabb mdszer is ltezik ugyanerre a clra. Mindazonltal a DTD-ket a mai napig elszeretettel hasznljk a fejlesztk, gy nem tehetjk meg, hogy nem foglalkozunk ezzel a technolgival. Errl a fejlettebb, XML Schema nev technolgirl a kvetkez szakaszban lesz sz.

A DTD-vel a legnagyobb gond az, hogy egy kicsit misztikus szerkezet nyelven alapul. Mrmost jogosan krdezheti valaki, hogy ha az XML olyan kivl mdszert ad a dokumentumok bels szerkezetnek lersra, akkor ugyan minek kell egy msik nyelvet megtanulnunk az XML smkhoz? Erre a krdsre sajnos nem tudok semmifle frappns vlaszt adni, eltekintve persze attl, hogy trtneti okok miatt a DTD technolgia tllte az XML megjelenst, s a mai napig elterjedt a hasznlata. Egyszeren nincs ms vlasztsunk, mint hogy mi is megtanuljuk hasznlni. Azrt van j hr is: a legtbb XML alap jellnyelv DTD-vel val lersa meglehetsen egyszer. Ez alapveten annak ksznhet, hogy a DTD nyelve nagyon tmr s persze pont ezrt olyan rejtlyes. Ahelyett, hogy folytatnm a DTD-rl val elmlkedst, azt hiszem jobb lesz, ha mutatok egy konkrt pldt (3.1. lista).

46 II. rsz Az XML adatok meghatrozsa

3.1. lista
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:

A talltales.xml dokumentumnak megfelel sma DTD-vel megfogalmazva

<!ELEMENT talltales (tt)+> <!ELEMENT tt (question, a, b, c)> <!ATTLIST tt answer (a | b | c) #REQUIRED> <!ELEMENT question (#PCDATA)> <!ELEMENT a (#PCDATA)> <!ELEMENT b (#PCDATA)> <!ELEMENT c (#PCDATA)>

Nos, n mondtam elre, hogy olyan lesz, mint a titkosrs. Ha azonban flocsdva az els meglepetsbl kicsit kzelebbrl kezdjk vizsglni ezt a kdot, egy id utn egszen rtelmesnek tnik. Felfedezhetjk pldul, hogy a lers az elz rban bemutatott Tall Tales dokumentum szerkezetrl szl. Lthat az is, hogy a DTD-ben felbukkan az ott alkalmazott sszes elemtpus, s mindegyik eltt az ELEMENT kulcssz szerepel. A tt elem attribtumainak felsorolsa szintn felfedezhet. Ezeket az ATTLIST kulcssz (4. sor) elzi meg. Esetnkben tulajdonkppen csak egy attribtum, az answer nev szerepel a lersban, de termszetesen lehetne tbb is. Figyeljk meg azt is, hogy a krdses attribtum mellett fel van sorolva a hrom lehetsges vlasz (a, b s c) is (5. sor). Br ezeken az rtelmezhet rszeken kvl mg jcskn akadnak egyelre rthetetlen rszek pldul a minden sor elejn felbukkan <! kd, vagy a (#PCDATA) kulcssz, sszessgben azrt rezhet, hogy a DTD-k nem is annyira bonyolultak. Mivel ebben az rban mg jcskn esik sz a DTD technolgirl, itt s most nem is mennk tovbb a rszletek trgyalsval. Ehelyett inkbb bemutatok egy msik, elterjedten alkalmazott smatechnolgit, amelynek szintaxisa radsul sokkal bartsgosabbnak fog tnni.

Az XML Schema (XSD) technolgia


Az XML Schema a DTD-ket hivatott levltani. Br ugyanazt a clt szolglja, vagyis smkat hozhatunk ltre segtsgvel az XML alap nyelvekhez, ez a technolgia sokkal inkbb intuitv szintaktikval rendelkezik. Az XML Schema segtsgvel ltrehozott smk XSD (XML Schema Definition) nyelven kszlnek, ezrt XSD-k sszefoglal nven is szoks ket emlteni. Az XML Schema technolgit s az XSD nyelvet, amelyek egytt egy sokkal hatkonyabb s hajlkonyabb mdjt adjk a smk ltrehozsnak mint a DTD a W3C (World Wide Web Consortium) dolgozta ki. Az XML Schema alapt-

3. ra Az adatok meghatrozsa DTD sma segtsgvel 47

lete az, hogy az XML smk ltrehozshoz maga az XML nyelv is hasznlhat. Ahelyett teht, hogy meg kellene tanulnunk egy j nyelvet, mint a DTD estn, most a mr ismert XML szintaktikt, vagyis azokat az elemeket s attribtumokat hasznlhatjuk, amelyeket az XSD nyelv definil. Funkcijt tekintve egy XSD rendkvl hasonl egy DTD-hez, hiszen ezzel is az XML dokumentumok egy osztlynak a smjt rhatjuk le. A DTD-khez hasonlan az XSD-k is az elemeket, s azok tartalmi modelljeit rjk le, hogy az XML dokumentumok logikai szerkezete ez alapjn ellenrizhet legyen. Ugyanakkor az XSD-k bizonyos pontokon tl is lpnek a DTD technolgia kpessgein. Az XSD-ben pldul azt is megadhatjuk, hogy egy elem milyen tpus adatokat tartalmazhat, mg a DTD esetben az elemek tartalma csak szveg lehet. Az XSD segtsgvel az elemek tpust bizonyos tartalomtpusokra korltozhatjuk. Megadhatjuk pldul, hogy egy elem csak egsz szm, vagy csak dtum lehet. Az XSD-k legvonzbb tulajdonsga persze az, hogy az XML szkincsen (vocabulary) alapulnak, hiszen az XSD maga is XML alap nyelv. Egy XSD sma teht ugyangy XML dokumentum, mint azok, amelyeknek a szerkezett lerja. Egy XSD ltrehozshoz semmifle j megkzeltst nem kell alkalmaznunk, semmi mssal nem kell tisztban lennnk, csak a mr ismert elemek s attribtumok fogalmval. Az XSD nyelv specilis elemeinek s attribtumainak nevt persze meg kell tanulnunk, de ez egyrszt nem tlsgosan nehz, msrszt koncepcionlisan nem j. A mr ismert Tall Tales pldnl maradva a 3.2. listban azt lthatjuk, miknt rat le ennek a dokumentumosztlynak a smja XSD segtsgvel.

3.2. lista

A Tall Tales dokumentumosztly smja XSD nyelven megfogalmazva

1: <?xml version="1.0"?> 2: 3: <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"> 4: 5: <xsd:element name="talltales" minOccurs="1" maxOccurs="1"> 6: <xsd:complexType> 7: <xsd:element name="tt"> 8: <xsd:complexType> 9: <xsd:sequence> 10: <xsd:element name="question" type="xsd:string" maxOccurs="1" /> 11: <xsd:element name="a" type="xsd:string" maxOccurs="1" /> 12: <xsd:element name="b" type="xsd:string" maxOccurs="1" /> 13: <xsd:element name="c" type="xsd:string" maxOccurs="1" /> 14: </xsd:sequence> 15: <xsd:attribute name="answer" type="answerType" use="required" /> 16: <xsd:simpleType name="answerType"> 17: <xsd:restriction base="xsd:NMTOKEN">

48 II. rsz Az XML adatok meghatrozsa


18: <xsd:enumeration value="a" /> 19: <xsd:enumeration value="b" /> 20: <xsd:enumeration value="c" /> 21: </xsd:restriction> 22: </xsd:simpleType> 23: </xsd:complexType> 24: </xsd:element> 25: </xsd:complexType> 26: </xsd:element> 27: 28: </xsd:schema>

Amint lthat, az XSD-k nem olyan kompaktak, mint a DTD-k, s elsre taln tltni is nehezebb ket. Ennek azonban csupn az az oka, hogy ez a technolgia hajlkonyabb, tbbet nyjt, s a szolgltatsok szmnak nvekedsvel az sszetettsg is szksgszeren nagyobb. Az XSD-k ltrehozsrl mindent meg fogunk tanulni a 7. rban. A fenti kd tartalma akkorra teljesen vilgoss vlik. Itt s most elegend az XML Schema alapkoncepcijt megrtennk, vagyis azt, hogy ez a technolgia lehetv teszi magnak az XML-nek a hasznlatt az XML smk ltrehozsa kzben, illetve hogy az XSD-k hatkonyabb, rszletesebb lerst tesznek lehetv, mint a DTD. Az XSD pldul lehetv teszi annak meghatrozst, hogy egy adott elem hnyszor fordulhat el egy msik elemen bell. Valjban ltezik egy harmadik smatechnolgia is, amely az XSD-kkel egytt jr sszetettsget cskkenti. Ez a RELAX NG, amit sokan mg hatkonyabbnak, s ugyanakkor sszefogottabbnak, illetve knnyebben hasznlhatnak tartanak, mint az XML Schemt. Ugyanakkor ennek a technolginak a tmogatottsga egyelre egyltaln nem olyan ltalnos, mint a DTD- vagy az XSD-. Persze ez a helyzet idvel majd vltozhat. A RELAX NG-rl, illetve annak az XSD-hez val viszonyrl a 7. rban lesz sz.

A smatechnolgik sszehasonltsa
Br egyelre tulajdonkppen semmifle gyakorlati ismeretnk nincs sem a DTD-rl sem az XSD-rl, azt mr rtjk, hogy ezek a smk ltrehozsnak kt alapveten klnbz megkzeltst jelentik. Amint arra korbban utaltam, a DTD ugyan nem olyan hatkony technolgia, mint az XSD, de azrt megvannak a maga elnyei. Trtneti okokbl kifolylag viszonylag szles tmogatottsgnak rvend, s sokak szmra a hasznlata is egyszerbb. Ugyanakkor az XSD technolgiai szempontbl mindenkppen magasabb sznvonalat kpvisel, hiszen jval nagyobb szabadsgot, tbb lehetsget ad a fejlesztnek az XML adatmodell egyes rszleteinek meghatrozsval kapcsolatban. Ezen a ponton taln hasznos, ha ttelesen is sszefoglaljuk, milyen eltrsek vannak a DTD s XSD technolgia kztt, hiszen ez alapjn knnyebb lesz eldnteni, melyikre van inkbb szksgnk egy-egy adott problma kapcsn.

3. ra Az adatok meghatrozsa DTD sma segtsgvel 49

Lssuk teht a klnbsgek listjt: A DTD-ket egy specilis nyelven kell megfogalmazni, mg az XSD-knl tulajdonkppen magt az XML-t hasznljuk. Az XSD-ket ugyangy kezelhetjk, mint brmely ms XML dokumentumot. Az XSD nyelv szmos adattpus hasznlatt teszi lehetv (egszek, lebegpontos szmok, logikai rtkek (Boolean tpusok), dtumok s gy tovbb), mg a DTD-ben minden vagy karakterlnc, vagy karakterlncok listja. Az XSD egy nylt vg adatmodellt szolgltat, amely lehetv teszi egyedi jellnyelvek kidolgozst, illetve az elemek kzti sszetett kapcsolattpusok kiptst anlkl, hogy ezzel a dokumentumok rvnyket vesztenk. A DTD-k ezzel szemben zrt adatmodellt alkalmaznak, gy a kiegsztsre nem sok eslyt nyjtanak. Az eltrseknek e listja alapjn az ember azonnal az XSD javra dntene. Ugyanakkor termszetesen nem arrl van sz, hogy n, a szerz egyszeren beleszerettem az XML Schemba. Ne felejtsk el, hogy ez a technolgia jval a DTD utn jtt ltre, gy a fejleszti tanulhattak az eldk hibibl. s br felsorolsunk alapjn sokan gy gondolhatjk, hogy az XSD helyett a DTD-t vlasztani egyszeren esztelensg, azrt a DTD technolgia mg egyltaln nem tekinthet kihaltnak. Ennek pedig elssorban az az oka, hogy a DTD rgta ltez, illetve szles krben elterjedt s tmogatott technolgia. Ha valaki esetleg gy gondoln, hogy egy elavul technolgia nem lehet kpes tllni nmagt pusztn a szles kr elfogadottsgnak ksznheten, nos annak csak azt tudom javasolni, hogy gondolkodjon el a kzelmlt technikai fejlesztsein. Nem kell messzebbre tekintennk, csak a videlejtsznkig. Annak idejn mindenki pontosan tudta, hogy a Betamax technolgiailag jobb, mint a VHS szabvny, mgis valahogy az utbbi kerekedett fell. Persze nem kell, hogy a trtnelem ismtelje nmagt, gy egszen valszn, hogy az XML Schema s a RELAX NG idvel kiszortja a DTD-t. A DTD mellet szl legfbb rv az, hogy szmos XML alap jellnyelv lersa egyelre csak DTD formjban ltezik. Ha teht valaki azt tervezi, hogy munkjhoz ezek valamelyikt hasznlja, az knytelen lesz tisztba jnni a DTD technolgival is. A msik lnyeges szempont, hogy az XML jelenlegi alkalmazsi terletein a DTD tulajdonkppen egsz jl megllja a helyt, gy az a tny, hogy az XSD technolgiai szempontbl jobb, egyelre nem kellen ers rv a DTD levltsra.

50 II. rsz Az XML adatok meghatrozsa

Mirt fontos ellenrizni a dokumentumok rvnyessgt?


Mieltt belemerlnnk a DTD technolgia rszleteibe, azt hiszem tisztznom kell egy krdst, amit ugyan rintettnk mr, de nem trgyaltuk meg rszletesen. Ez pedig a dokumentumok ellenrzsnek (validlsnak) jelentsge. Amint azt korbban emltettem a smk alkalmazsnak legfbb oka az XML dokumentumok ellenrizhetv ttele. Amit azonban eddig nem mondtam, az az, hogy egy XML dokumentumnak nem kell felttlenl helyesnek lennie ahhoz, hogy hasznlni tudjuk. Szval a dokumentumok ellenrzsvel kapcsolatos trtnetnek mg nincs egszen vge, fejezzk teht be. A dokumentum rvnyessge (validity) mellet az XML megalkoti bevezettek egy j fogalmat is, mgpedig a jl formzottsgot (well-formedness). Egy dokumentum jl formzott akkor, ha szerkezetileg megfelel az XML szabvny minden egyes elrsnak. A jl formzott dokumentumok teht biztosan megfelelnek az elz rban emltett t felttelnek, viszont nem flttlenl minslnek rvnyesnek valamilyen szablyrendszer szempontjbl. Ez utbbi gy lehetsges, hogy a jl formzott dokumentumhoz nem flttlenl tartozik sma. Ha teht ezen j szempontok alapjn szemlljk az XML dokumentumokat, akkor gyorsan rjhetnk, hogy a helyessgnek az XML-ben kt foka van. Az els lpcsfok a jl formzottsg, ami mindssze annyit jelent, hogy dokumentumunk szerkezete megfelel az XML valamennyi, meglehetsen merev szablynak. A msodik lpcs a dokumentum rvnyes volta (validity), ami azt jelenti, hogy annak szerkezete nem csak az XML szablyrendszerhez igazodik, hanem egy DTD vagy XSD formjban ltez smban megadott, ennl mg szigorbb logikhoz is. A fentiekbl kvetkezleg valamennyi rvnyes (valid) dokumentum egyben jl formzott is (well-formed), viszont ennek a fordtottja nem flttlen igaz.

Az rvnyessg s a jl formzottsg fogalma rendkvl fontos az XML terminolgijban, gy mi is gyakran fogunk velk tallkozni a knyv htralev rszben. Azt, hogy egy XML dokumentum az adott krnyezetben rvnyes-e vagy sem, az alkalmazs mdja, vagyis az anyagot kezel XML alkalmazs ignyei dntik el. Ugyanakkor minden hasznlhat dokumentumnak jl formzottnak kell lennie, ellenkez esetben garantltan hibazenetet kapunk a feldolgozsa sorn. sszefoglalva teht a jl formzottsg elrshez magnak az XML nyelvnek a formai szablyait kell betartanunk, mg az rvnyessg egy smban rgztett szablyrendszer alapjn dl el. Hogy az XML dokumentumok miknt validlhatk egy DTD vagy XSD sma alapjn, arrl a 8. rban lesz rszletesen sz.

3. ra Az adatok meghatrozsa DTD sma segtsgvel 51

A DTD alapjai
Amint azt mr tudjuk a DTD technolgia jelenti az eredeti smatechnolgit, illetve arrl is volt mr sz, hogy a DTD logikailag szorosan sszepl azokkal az XML fjlokkal, amelyek lersra szolgl. Ahhoz teht, hogy megrthessnk, hogyan plnek fel a DTD smk, elbb az XML dokumentumokkal val viszonyukkal kell tisztban lennnk. Ahhoz, hogy egy XML dokumentum s egy DTD sma kztt kapcsolatot teremtsnk, a dokumentumban valahogyan hivatkoznunk kell a smra. Az sszerendelst a dokumentumtpus deklarcijn (document type declaration) keresztl valsthatjuk meg, amely a dokumentum elejn, kzvetlenl az XML deklarci utn szerepel:
<?xml version="1.0"?> <!DOCTYPE talltales SYSTEM "talltales.dtd">

Az ebben a pldban lthat msodik sor nem ms, mint a mr korbban ltott Tall Tales dokumentumtpus deklarcija. Szmunkra pillanatnyilag a legfontosabb annak megfigyelse, miknt hatrozhatjuk meg a smt tartalmaz DTD-t. Ami azt illeti, a DTD-k s a dokumentumtpus deklarcija krli terminolgia kiss flrevezet, teht nem rt, ha rgtn az elejn tisztzzuk, hogy melyik mit is jelent pontosan. A DTD A Document Type Definition rvidtse. Egy DTD fjl nem egyb, mint egy XML alap jellnyelv formlis lersa, defincija. A dokumentumtpus deklarcija (document type declaration) ezzel szemben egyetlen sornyi kd, amiben megadjuk, hogy az adott dokumentumban melyik DTD-ben lert jellnyelvet fogjuk hasznlni. sszefoglalva teht a definci magt a nyelvet rja le, mg a deklarciban csak azt kzljk, hogy melyik nyelvet fogjuk hasznlni. Ugye rthet? No, akkor haladjunk tovbb! A DTD a dokumentumok logikai szerkezetnek alapvet rszleteit rja le, vagyis az adott jellnyelvben hasznlhat elemeket, attribtumokat, valamint azok egymshoz val viszonyt. Egy DTD-n bell a kvetkez dolgokat adhatjuk meg: Az adott dokumentumtpusban megengedett elemek krt Az egyes elemekhez rendelhet attribtumokat A dokumentumban szerepeltethet egyedeket (entity) A kls egyedekkel kapcsolatban hasznlhat jellseket

Az elemeket s az attribtumokat mr ismerjk, viszont a kt utols dolog egyelre teljesen j terletet kpvisel. Semmi gond, az egyedekrl s a jellsekrl a kvetkez rban bven lesz majd sz. Egyelre maradjunk annyiban, hogy a DTD legfontosabb feladata annak biztostsa, hogy az XML dokumentumok helyessge ellenrizhet legyen.

52 II. rsz Az XML adatok meghatrozsa

Amikor sszerendelnk egy DTD-t s egy dokumentumot, a dokumentumtpus deklarcijban alapveten ktfle eljrst kvethetnk: Maga a deklarci tartalmazhat bizonyos lersokat. Ilyenkor bels DTD-rl (internal DTD) beszlnk. A deklarci hivatkozhat egy kls fjlra, ami a DTD-t tartalmazza. Az a kls DTD (external DTD). Ebbl a klnbsgttelbl egyelre annyi nyilvnval teht, hogy a DTD-nek alapveten kt rsze van, vagy legalbbis lehet: egy kls s egy bels. Amikor egyszeren egy dokumentum DTD-jrl beszlnk, akkor hallgatlagosan a kls s a bels rsz egyestsre gondolunk. Az, hogy a DTD az emltett mdon kt rszre tagoldik, alapveten a hajlkonysgot szolglja. A kls DTD rendszerint az adott dokumentumtpus tfog, soha nem vltoz szerkezett rja le, mg a bels DTD-ben olyan elrsok szerepelnek, amelyek az adott dokumentumra specifikusak. Az XML szabvny a bels DTD elrsait magasabb prioritsnak tekinti, vagyis a bels DTD a klsben megadott ltalnos szablyok fellbrlatra is hasznlhat. Akinek van nmi tapasztalata a CSS (Cascading Style Sheets) technolgival kapcsolatban, az valsznleg felfedezte, hogy a kls/bels viszony tekintetben a DTD-k ugyanazt a logikt kvetik, mint a stluslapok, vagyis a dokumentumhoz kzelebbi bels lers fellbrlja a klst.

A DTD rszei
Egy dokumentumtpus-deklarci ltalnos formja a kvetkez:
<!DOCTYPE RootElem SYSTEM ExternalDTDRef [InternalDTDDecl]>

Sokan gy gondolhatjk, hogy az XML hasznlathoz tulajdonkppen flsleges ismerni a DTD technolgia mkdst, s be kell valljam, ezeknek a ktelkedknek van is valami igazuk. Valjban az XML-lel gy is lehet rdekes dolgokat megvalstani, ha semmit sem tudunk a smkrl. Ugyanakkor magt az XML technolgit lehetetlen anlkl megrteni, hogy tltnnk, hogyan s mibl pl fel egy XML alap jellnyelv. s mivel ezeket a nyelveket DTD-vel s ms technolgikkal kszlt smk rjk le, ezek ismerete vgs soron nem sprolhat meg. A kls DTD-re az ExternalDTDRef rszben hivatkozunk, ami nem ms, mint a kls DTD-t tartalmaz fjl URI-ja (Unified Resource Identifier). A bels DTD lersait szimbolizlja az InternalDTDDecl, ami szgletes zrjelek kztt ([]) szerepel. A bels s kls DTD mellett van mg egy rendkvl fontos informci, amit szerepeltetni kell a dokumentumtpus-deklarciban, ez pedig az adott dokumentumtpusra jellemz

3. ra Az adatok meghatrozsa DTD sma segtsgvel 53

gykrelem (RootElem). A SYSTEM kulcssz azt jelzi, hogy a DTD-t egy kls fjl tartalmazza. A kvetkez pldban azt mutatom be, miknt lehet egy dokumentumban egyszerre bels s kls DTD-t hasznlni:
<!DOCTYPE talltales SYSTEM "TallTales.dtd"> [ <!ELEMENT question (#PCDATA)> ]>

Az URI (Uniform Resource Identifier) a sokak ltal ismert URL (Uniform Resource Locator) olyan ltalnostott vltozata, amellyel fjloktl klnbz hlzati erforrsokat is azonosthatunk. Az URL-eket mint kzismert a leggyakrabban weblapok cmeknt hasznljuk. Ez a kdrszlet azt mutatja, miknt hozhatunk ltre egy megfelel dokumentumtpusdeklarcit a korbban emltett Tall Tales jtk alapjt kpez XML dokumentumokban. Lthat, hogy a dokumentum gykreleme a talltales lesz, ami azt jelenti, hogy minden ilyen tpus dokumentumnak tartalmaznia kell egy s csakis egy ilyen elemet, s ennek a dokumentum teljes tartalmt magban kell foglalnia. A deklarci emlt egy kls DTD-t, amit a TallTales.dtd nev fjl tartalmaz. Az ebben tallhat formai s logikai lersok mellett maga a deklarci is ler egy question nev elemet a bels DTD rszeknt. Emlkezznk r, hogy a bels DTD elemei minden esetben fellbrljk a kls DTD azonos nev elemeinek deklarcijt. Ugyanakkor termszetesen nem ktelez minden esetben bels DTD-t hasznlni. Ami azt illeti, az esetek tbbsgben a kls DTD tkletesen elegend a formai kvetelmnyek lersra. A dokumentumtpus-deklarcinak az XML deklarci utn, de mg az els elem (cmke) eltt kell szerepelnie a dokumentumban.

Az elz rban tanultunk az XML deklarcirl, amelynek mindig a dokumentum els sorban kell szerepelnie, s feladata a hasznlt XML szabvny megadsa. Az XML deklarci azonban maga is tartalmazhat a DTD-re vonatkoz informcikat. Itt a dokumentum nll sttuszra (standalone) s az alkalmazott karakterkdolsi szabvnyra gondolok. Az nll sttusz (standalone status) azt jelzi, hogy a krdses dokumentum tmaszkodik-e valamilyen kls informciforrsra, pldul egy DTD-re. Ha van ilyen kls forrs, s ezt kifejezetten jelezni szeretnnk a dokumentum deklarcijban, azt a kvetkezkppen tehetjk meg:
<?xml version="1.0" standalone="no"?>

54 II. rsz Az XML adatok meghatrozsa

A dokumentumokban alkalmazhat karakterkdolsokrl a kvetkez rban fogunk tanulni.

Ha a fenti deklarciban a standalone kulcssz utn yes ll, az azt jelzi, hogy a dokumentum semmifle kls informciforrsra nem tmaszkodik. A no rtk ezzel szemben azt jelenti, hogy dokumentumunk nem nll, vagyis feldolgozsa sorn szksg lehet kls forrsokra is. Az olyan dokumentum, amely kls DTD-re tmaszkodik, nyilvnvalan nem lehet nll, gy ezekben az esetekben a standalone utn csak no llhat.

Elem vagy attribtum?


Egy DTD kt legfontosabb sszetevje az elem s az attribtum. Ezek az sszetevk attl olyan fontosak, hogy k kpezik egy XML dokumentum logikai szerkezett. Az elem nem ms, mint a trolt informci egy logikai egysge, az attribtum pedig ennek az egysgnek valamilyen kiegszt jellemzjt hordozza. Ez egy lnyeges klnbsgttel, ugyanis XML adatszerkezetek tervezse kzben gyakran talljuk majd szembe magunkat azzal a dilemmval, hogy egy adott informcitpust elemknt vagy attribtumknt rdemes-e trolni. Az ilyen esetekben a leghasznlhatbb megkzelts az, ha elgondolkodunk azon, mifle informcirl van sz pontosan, illetve milyen mdon fogjuk azt hasznlni. Ha attribtumot hasznlunk, azzal szkebb keretek kz szortjuk vagy szorthatjuk magunkat, ami nha hasznos lehet. Kicsit konkrtabban attribtumok esetn megadhatjuk a lehetsges rtkek listjt, illetve megadhatunk alaprtelmezett rtket is. Az elemek tartalma ezzel szemben sokkal kevsb kttt, s leginkbb hossz karakterlncok, vagy gyermekelemek trolsra alkalmas. A kvetkez listban sszefoglaltam, milyen elnykkel jrhat, ha elem helyett attribtumot hasznlunk: Az attribtumokhoz meghatrozhatjuk a lehetsges rtkek krt egy felsorols formjban. Az attribtumoknak lehet alaprtelmezett rtkk. Az attribtumoknak van adattpusa, br ktsgtelen, hogy viszonylag szk listbl vlogathatunk. Az attribtumok segtsgvel igen tmr formban trolhatunk informcit. Ugyanakkor ktsgtelen, hogy az attribtumok sem jelentenek megoldst minden problmra. me teht egy lista azokrl a htrnyokrl, amelyekkel az attribtumok hasznlata esetn szmolnunk kell: Az attribtumok nem alkalmasak hossz karakterlncok trolsra. Attribtumon bell nincs lehetsgnk az informcik egymsba gyazsra. Az attribtumok rtkben szmtanak a szkzk s egyb res karakterek is.

3. ra Az adatok meghatrozsa DTD sma segtsgvel 55

Tekintve hogy az attribtumok tmrebb s egyszerbb formban troljk az informcit, mint a gyermekelemek, clszer rjuk mindannyiszor tmaszkodni, ahnyszor ezt a krdses adatszerkezet s felhasznlsi md lehetv teszi. Szerencsre az emltett korltozsok meglehetsen egyrtelmv teszik, mikor kell gyermekelemet s mikor attribtumot hasznlnunk. Ha egy informci csak hossz karakterlncknt adhat meg, logikai szerkezete egymsba gyazst ignyel, vagy jelentssel nem br, de vltoz szm res karaktert tartalmaz, amelyeket a rendszernek majd figyelmen kvl kell hagynia, nyilvnvalan gyermekelemet kell hasznlnunk a trolsra. Minden egyb esetben tkletesen megfelel egy attribtum is, st valsznleg ez lesz a jobb vlaszts. Mindazonltal akrmennyire jl illeszkedik is a kezelni kvnt adatszerkezet az attribtumok kedvez tulajdonsgaihoz, egy elemnek, nevezetesen egy gykrelemnek mindenkppen lennie kell a dokumentumban.

ssunk az elemek mlyre!


Ahhoz, hogy egy DTD-ben megadjuk egy elem lerst, a kvetkez formtum elemdeklarcit (element declaration) kell hasznlnunk:
<!ELEMENT ElementName Type>

Az elem neve rtelemszeren annak a cmknek a nevt hatrozza meg, amit az XML dokumentumban az adott elemtpus azonostsra fogunk hasznlni. Az is magtl rtetd, hogy ennek a nvnek az adott DTD-n bell egyedinek kell lennie. Az elem tpust a Type mezben hatrozhatjuk meg. Az XML sszesen ngy elemtpust klnbztet meg, amelyeket az adott elemben trolt tartalom hatroz meg: Empty res elem, amelynek nincs semmifle tartalma. (Ugyanakkor attribtumai lehetnek). Element-only Olyan elem, amely csak gyermekelemeket tartalmaz. Mixed Kevert tartalm elem, vagyis gyermekelemeket s szveget egyarnt tartalmaz. Any Tetszleges tpus. Az ilyen elem brmit tartalmazhat, amit az adott DTD megenged. Az elemek neve nem tartalmazhat & (ampersand) jelet, illetve nem kezddhet az X, M s L betk ebben a sorrendben vett semmilyen kis- s nagybetkbl ll kombincijval (XML, xml, XmL s gy tovbb).

A kvetkez szakaszokban az egyes elemtpusokat vizsgljuk meg rszletesebben.

56 II. rsz Az XML adatok meghatrozsa

res elemek
Az res elemek rtelemszeren nem tartalmaznak sem szveget, sem gyermekelemeket, viszont informcitrols szempontjbl mgsem teljesen haszontalanok, hiszen lehetnek attribtumaik. Egy res elemet a kvetkez deklarcival adhatunk meg a DTD-ben:
<!ELEMENT ElementName EMPTY>

me egy ezzel a szintaxissal megadott elem:


<!ELEMENT clothing EMPTY>

Miutn a DTD-ben megadtunk egy res elemet, ktflekppen hasznlhatjuk azt egy dokumentumon bell: Hasznlhatunk nyit s zr cmkt Hasznlhatjuk az res elemek lersra rendszerestett rvidtst Elz pldnkkal kapcsolatban az els esetnek a
<clothing></clothing>

rsmd felel meg. Figyeljk meg, hogy a kt cmke kztt semmifle tartalom nem szerepel, mg egy szkz sem. Ellenkez esetben a dokumentum rvnytelen lenne. Az res elemek megadsnak jval tmrebb formja a mr ismert rvidtett alak hasznlata. Esetnkben ez a kvetkezkppen fest:
<clothing />

Amint mr emltettk, ez az rsmd a nyit s a zr cmke egyfajta kombincija, amely amellett, hogy tmrebb, formjval egyrszt vilgoss teszi az adott elem res voltt, msrszt meg is akadlyozza a tvedseket. Amint mr tbbszr hangslyoztam, az res elemekhez is tartozhatnak attribtumok. A pldnkban szerepl, ruhk lersra szolgl res elem pldul a kvetkez tulajdonsgokat hordozhatja:
<clothing type="t-shirt" color="navy" size="xl" />

3. ra Az adatok meghatrozsa DTD sma segtsgvel 57

Gyermekelemek egy csak elemeket tartalmaz (element-only) elemben


Egy csak elemeket tartalmaz (element-only) elem elnevezsnek megfelelen kizrlag ms elemeket tartalmazhat. Msknt fogalmazva egy ilyen elemben nem bukkanhat fel nll szveges tartalom, csak ms elemekbe gyazottan. A DTD-ben gy hozhatunk ltre egy ilyen trolelemet, hogy a deklarcijban felsoroljuk, milyen nev elemeket tartalmazhat. Ezt nevezzk a krdses elem tartalmi modelljnek (content model). Az ilyen deklarcik ltalnos formja a kvetkez:
<!ELEMENT ElementName ContentModel>

A tartalmi modell specilis elemdeklarcis szimblumokbl, s elemnevekbl ll ssze. A szimblumok az elemek egyms kzti, valamint a szlvel kapcsolatos logikai viszonyt rjk le. A gyermekelemekbl kerek zrjelekkel sorozatokat (sequence) vagy gynevezett vlasztsi csoportokat (choice group) hozhatunk ltre. A sorozat csupn a gyermekelemek sorrendjt rja el, mg a vlasztsi csoportok az elemek hasznlatnak alternatv mdozatait rjk le. A sorozatban a gyermekelemek neveit, vessz (,), mg a csoportban szrkarakter (|) vlasztja el egymstl. Lssuk az alkalmazhat szimblumok rvid sszefoglalst: Kerek zrjelek (()) Gyermekelemek sorozatt (sequence) vagy egy vlasztsi csoportot (choice group) zrnak kzre. Vessz (,) Egy sorozat elemeit vlasztja el egymstl. A sorozat az elemek ktelez sorrendjt rja el. Szrkarakter (|) Az alternatvkat vlasztja el egy vlasztsi csoportban. Nincs szimblum Azt jelzi, hogy egy gyermekelem pontosan egyszer fordulhat el. Krdjel (?) Azt jelzi, hogy a krdses gyermekelem pontosan egyszer fordulhat el, vagy egyszer sem. Pluszjel (+) Azt jelzi, hogy a gyermekelemnek legalbb egyszer el kell fordulnia. Csillag (*) Az adott gyermekelem tetszlegesen sokszor fordulhat el. Br ezeknek a jeleknek a pontos hasznlatrl most oldalakat rhatnk, azt gondolom egy viszonylag sszetett plda elemzse sokkal sokkal hasznosabb lesz. Lssuk teht egy resume (nletrajz) nev elem deklarcijt:
<!ELEMENT resume (intro, (education | experience+)+, hobbies?, references*)>

Ez a plda attl olyan kivl, hogy az sszes imnt emltett szimblum elfordul benne. A resume csak elemeket tartalmaz (element-only) elem, vagyis kizrlag gyermekelemek lehetnek benne. Az els ilyen az intro, amely pontosan egyszer fordulhat

58 II. rsz Az XML adatok meghatrozsa

el, hiszen semmifle specilis szimblum nem csatlakozik hozz. Az education s az experience elemeket magban foglal zrjelen kvl lthat pluszjel azt jelzi, hogy ennek a csoportnak legalbb egyszer szerepelnie kell. A zrjelen bell az education utn nincs semmifle minsts, teht ennek pontosan egyszer szabad elfordulnia. Az experience ezzel szemben legalbb egyszer kell szerepeljen, de tbb elfordulsa is megengedett. Nyilvn megeshet, hogy valaki tbb helyen is dolgozott, s tbbfle munkakrrel kapcsolatban szerzett tapasztalatot. A hobby elemnek legfeljebb egyszer szabad szerepelnie, vagy egyszer sem, ami azt jelenti, hogy ha adunk meg magunkrl ilyen informcit, akkor ezt egyetlen elem formjban kell lernunk. Vgezetl a references elem akrhnyszor szerepelhet az nletrajzban. Hogy legyen valami fogalmunk arrl, mifle gyakorlati felhasznlsa lehet a csak elemeket tartalmaz elemeknek, vessnk egy pillantst a kvetkez, az RSS nyelv DTDjbl szrmaz sorra:
<!ELEMENT item (title | link | description)*>

Az RSS egy olyan XML alap jellnyelv, amely lehetv teszi, hogy a webes portlokon megjelen friss hrekrl s egyb tartalmakrl a klnbz alkalmazsok rvid sszefoglalt tltsenek le. A Sports Illustrated webhely (http://sortsillustrated.cnn.com) pldul valamennyi jelentsebb sportg hreivel kapcsolatban szolgltat RSS tartalmat. A tbbi sporthrekkel kapcsolatos webhely ez alapjn frisstheti a sajt hivatkozsait, illetve hasznlhatunk valamilyen specilis RSS aggregtort is. Ilyen pldul a http://www.feeddemon.com cmen elrhet FeedDemon. Az aggregtorok segtsgvel az RSS tartalmakat krlbell gy jelenthetjk meg, mint a leveleket egy levlolvas alkalmazssal. Visszatrve az imnti DTD-bl szrmaz sorhoz lthat, hogy az item elem a title, link s description elemek tetszleges kombincijt tartalmazhatja, de egyikbl sem lehet egynl tbb. Lssuk, hogyan valsul meg mindez magban az XML kdban. A kvetkez kdrszlet a Sports Illustrated NFL hranyagbl szrmazik:
<item> <title>Titans trio of young WRs showing promise</title> <link>http://sportsillustrated.cnn.com/rssclick/2005/football/nfl/06/22/ bc.fbn.titans.receivers.ap/index.html?section=si_nfl</link> <description>Read full story for latest details.</description> </item>

Ha ltni szeretnnk a Sports Illustrated valamelyik hrhez tartoz XML kdot, menjnk a webhely nyitlapjra, majd kattintsunk az oldal aljn lthat XML logra. Megjelenik a hrtartalmak listja, amelyben brmelyik sorra kattintva elbukkan a krdses RSS tartalom XML kdja.

3. ra Az adatok meghatrozsa DTD sma segtsgvel 59

Amint lthat, az item elem valban pontosan egy pldnyt tartalmaz mind a title, mind a link, mind pedig a description gyermekelembl. Aki ltni szeretn, hogyan mkdik mindez a gyakorlatban, ltogasson el az n weblapomra, s nzze meg az ott ezzel a mdszerrel gyjttt NFL hreket (3.1. bra).

NFL hrek

3.1. bra
Az NFL hrek megjelense sajt weblapomon.

A fenti bra azt mutatja, miknt jelenik meg az n weblapomon az imnti RSS kdban bemutatott, s a Tennessee Titansrl szl hranyag A kvetkez szakaszban azt fogom bemutatni, miknt hatrozza meg az RSS DTD-je az elbb emltett gyermekelemeket. A hrek tvtelrl, illetve az ezzel kapcsolatos technolgik sajt cljainkra val felhasznlsrl egybknt a 24. rban rszletesen is lesz sz.

A szveges tartalom s a gyermekelemek kombinlsa kevert elemekben


A kevert elemek (mixed elements) szveget s gyermekelemeket egyarnt tartalmazhatnak. A legegyszerbb kevert tartalm elem tulajdonkppen a csak szveget tartalmaz elemtpus. Az ilyen elemeket a kvetkezkppen deklarlhatjuk a DTD-ben:
<!ELEMENT ElementName (#PCDATA)>

60 II. rsz Az XML adatok meghatrozsa

A tisztn szveges elem tartalmi modellje kizrlag a kerek zrjelek kztt szerepeltetett #PCDATA szimblumbl ll, amely azt jelzi, hogy ez az elem kizrlag rtelmezett (parsed) szveget tartalmaz (PCDATA = Parsed Character DATA). me egy ilyen tisztn szveges elem deklarcija:
<!ELEMENT hobbies (#PCDATA)>

A PCDATA, vagyis Parsed Character DATA kifejezsben a parsed (rtelmezett) sz arra utal, hogy a dokumentumnak azt a rszt az XML alkalmazs a feldolgozs sorn rtelmezni fogja. Az XML dokumentumok szveges tartalmnak jelents rsze ilyen rtelmezett tartalom, belertve a karakteregyedeket is. Az rtelmezsi folyamat sorn az alkalmazs elszr eldobja az sszes flsleges res karaktert (szkz, tabultor), majd a karakteregyedeket azok megfeleljvel helyettesti. A PCDATA ellentte a CDATA (Character DATA), ami az XML alkalmazs ltal fel nem dolgozand szveget jell. Ksbb megtanuljuk, pontosan mire is j ez az utbbi adattpus. Ez az elem nevnek megfelelen a hobbik felsorolst tartalmazhatja egy XML dokumentumon bell. me egy plda ennek a lehetsgnek a hasznlatra:
<hobbies>juggling, unicycling, tight-rope walking</hobbies>

Ha mr a pldknl tartunk, a kvetkez hrom sor a mr emltett RSS jellnyelv smjbl a title, a link s a description elemek DTD deklarcijt tartalmazza:
<!ELEMENT title (#PCDATA)> <!ELEMENT link (#PCDATA)> <!ELEMENT description (#PCDATA)>

Amint lthat, mindhrom tisztn szveges elem, amin tulajdonkppen nincs is mit csodlkozni, ismerve a felhasznlsi mdjukat. A tisztn szveges elemek valjban olyan kevert elemek, amelyek nem tartalmaznak gyermekelemeket. Az olyan elemeket, amelyeken bell a szveg mellett tovbbi elemek is elfordulhatnak, egszen hasonlan kell megadni. Mindssze nhny apr eltrs van. Kicsit konkrtabban egy kevert tartalm elem tartalmi modelljben lennie kell egy a kvetkez ltalnos formnak megfelel ismtld vlasztsi listnak:
<!ELEMENT ElementName (#PCDATA | ElementList)*>

Ha elsre meglehetsen zavarosnak tnik a dolog, semmi gond. Nzzk rszekre bontva. A lista elejn szerepl #PCDATA szimblum azt jelzi, hogy elemnk maga is tartalmazhat szveget. A lista tovbbi tagjait az elemek felsorolsa kpezi, a felpts

3. ra Az adatok meghatrozsa DTD sma segtsgvel 61

pedig ersen hasonlt a csak elemeket tartalmaz elemek tartalmi modelljre. Itt helyenknt jabb #PCDATA szimblumok is felbukkanhatnak, jelezvn, hogy a gyermekelemek is hordozhatnak szveges tartalmat. A tartalmi modellt egy csillag (*) kell zrja, amely azt jelzi, hogy a teljes vlasztsi csoport opcionlis. Ez utbbi alapkvetelmny a kevert tartalm elemek esetben. Szintn lnyeges kiemelni, hogy br a kevert tartalm elem deklarcija korltozza a gyermekelemek tpust, azt nem adja meg, hogy ezek milyen sorrendben, illetve hnyszor szerepelhetnek. A kevert tartalm elemek tartalmi modelljben a karakteres adatokat azonost (#PCDATA) szimblumnak mindig a lista elejn, a vlasztsi csoport els tagjaknt kell szerepelnie. Magt a csoportot egy utna rt csillaggal minden esetben opcionliss kell tenni. Br a kevert tartalm elemek szmottev mrtkben nvelik az adatszerkezet hajlkonysgt, nem rendelkeznek azzal a kttt struktrval, mint a csak gyermekelemeket tartalmazak. Ennek megfelelen eltekintve a tisztn szveges elemektl clszer kerlni a kevert tartalm elemek hasznlatt, amennyire az lehetsges. Szmos esetben egybknt az elkerl megoldst az jelenti, ha a kiegszt informcikat egy tisztn szveges elem attribtumaiknt adjuk meg.

Tetszleges tartalm (ANY) elemek


A tetszleges tartalm (any) elemek jelentik a leginkbb flexibilis szerkezeti egysget, hiszen gyakorlatilag semmifle bels szerkezettel nem rendelkeznek. Ezt az elemtpust az ANY kulcsszval deklarlhatjuk, s nevnek megfelelen brmit tartalmazhat, amit az adott DTD lehetv tesz: szveget, gyermekelemeket, vagy ezek tetszleges kombincijt. Az ANY elemet olyan kevert tartalm elemnek kpzelhetjk, amelynl a tartalommal kapcsolatos megktseket kiiktattuk. Deklarcijnak ltalnos alakja a kvetkez:
<!ELEMENT ElementName ANY>

Gondolom nem okozok nagy meglepetst, amikor azt mondom, hogy az ANY az az elemtpus, amit brmi ron el kell kerlnnk egy DTD-ben. Mivel nincs bels szerkezete, ez az elemfajta tulajdonkppen ellenttes az XML alaptrekvsvel. Az is igaz ugyanakkor, hogy az imnti kittel csak a vgleges DTD-kre alkalmazhat szigoran. A tesztelsi fzisban az ANY elemek hasznlata nha kifejezetten jl jhet.

62 II. rsz Az XML adatok meghatrozsa

Hasznljunk attribtumokat
Az attribtumok amelyek az esetek tbbsgben kz a kzben jrnak az elemekkel hasznlata igen fontos rsze a DTD-k ltrehozsnak. Egy attribtumot ltalban arra hasznlunk, hogy egy elemmel kapcsolatban valamilyen kiegszt informcit adjuk meg. Kicsit konkrtabban az attribtum tulajdonkppen egy nv/rtk pros, amely az elem valamilyen tulajdonsgt rja le. Egy DTD-ben az attribtumokat attribtumlista formjban adhatjuk meg, amelynek ltalnos alakja a kvetkez:
<!ATTLIST ElementName AttrName AttrType Default>

Lthat, hogy egy attribtumnak minden esetben van neve (AttrName), tpusa (AttrType), valamint lehet alaprtelmezett rtke (Default). Az alaprtelmezett rtk lehet egy szmrtk vagy egy szimblum, amely az attribtum hasznlatra utal. Az alaprtelmezett rtkeknek ngy tpusa ltezik, vagyis a Default helyn a kvetkez ngy kulcssz szerepelhet:
#REQUIRED Az attribtum megadsa ktelez #IMPLIED Az attribtum megadsa opcionlis #FIXED Az attribtum kttt rtkkel rendelkezik default Az attribtum alaprtelmezett rtke

A #REQUIRED kulcssz ktelezen hasznland attribtumot jell, vagyis amikor egy ilyen elemet hasznlunk, annak mindenkppen be kell lltanunk ezt a tulajdonsgt. Az #IMPLIED ezzel szemnem opcionlis attribtumot takar, amit tetszs szerint vagy megadunk, vagy nem. A #FIXED attribtumnak kttt rtke van, ami gyakorlatilag azt jelenti, hogy az gy megadott tulajdonsg valamifle konstans. Az rtket a #FIXED kulcssz utn, magban a deklarciban kell megadnunk. A negyedik lehetsg nem ms, mint az alaprtelmezett rtk listjban trtn megadsa. Ez az rtk akkor jut rvnyre, ha a felhasznl nem ad meg explicit mdon semmit az elem ltrehozsakor. Nzznk egy pldt a dolog gyakorlati megvalstsra. Legyen distance egy olyan elem, amely valamilyen tvolsgot hordoz. A tvolsgnak nyilvn kell legyen mrtkegysge is, mgpedig a kvetkezk szerint:
<!ELEMENT distance (#PCDATA)> <!ATTLIST distance units (miles | kilometers | laps) "miles">

Lthat, hogy a distance-nak pldnkban mindssze egyetlen attribtuma van, mgpedig units. Ez utbbi sszesen hromfle rtket vehet fel: miles, kilometers, laps. Az alaprtelmezett rtke miles, vagyis ha a felhasznl nem ad meg mrtkegysget, akkor mrfldet kell rteni.

3. ra Az adatok meghatrozsa DTD sma segtsgvel 63

Br az attribtumlistk megadsnak helye a DTD-n bell nem kttt, a fejlesztk krben ltalnosan elfogadott, hogy azt annak az elemnek a deklarcija utn szerepeltetik, amelyhez tartozik. Az alaprtelmezett rtk mellett az attribtumlista deklarcijnak tartalmaznia kell az attribtumok tpust is. sszesen 10 klnfle tpust hasznlhatunk:
CDATA Nem rtelmezett (unparsed) szveges adat Enumerated Karakterlncok sorozata NOTATION Egy a DTD ms pontjn megadott jells ENTITY Kls binris egyed ENTITIES Tbb klnfle kls binris egyes res karakterekkel elvlasztva ID Egyedi azonost IDREF Egy a DTD ms pontjn deklarlt ID-ra mutat hivatkozs IDREFS Tbb klnbz, mshol deklarlt ID-ra mutat hivatkozs NMTOKEN XML tokenekbl (szmok, betk, pontok, ktjelek, kettspontok s

alhzsjelek) felptett nv NMTOKENS Tbb XML tokenekbl felptett nv Ahhoz, hogy megrthessk az attribtumtpusok kztti klnbsgeket, clszer azokat hrom csoportra osztani. Vannak karakterlncok, felsorolt tpusok s tokenizlt tpusok. A karakterlncok jelentik az attribtumok legkznsgesebb s leggyakrabban hasznlt tpust. Ide tartozik a CDATA tpus, amely egy karakterlncbl ll attribtumot takar. A kvetkez plda azt mutatja, hogyan deklarlhatunk egy a korbban emltett education elemhez tartoz CDATA tpus attribtumot:
<!ATTLIST education school CDATA #REQUIRED>

Ebben a pldban annak az iskolnak a nevt, amelyben az illet a tanulmnyait vgezte az education elem egy ktelezen megadand attribtuma (school) hordozza. Ha az attribtum megadst opcionliss akarjuk tenni, az #IMPLIED szimblumot kell hasznlnunk:
<!ATTLIST education school CDATA #IMPLIED>

A felsorolt tpushoz tartoz attribtumok rtke csak bizonyos elre meghatrozott halmazelemek kzl kerlhet ki. A felsorolt tpusok amgy hasonltanak a CDATA tpushoz, a klnbsg csak annyi, hogy a deklarci rszeknt lehetsges rtkeket is meg kell adnunk egy felsorols formjban. Korbbi pldnknl maradva nzzk, miknt adhatunk meg egy az illet vgzettsgnek tpust trol attribtumot (degree):
<!ATTLIST education degree (associate | bachelors | masters | doctorate) "bachelors">

64 II. rsz Az XML adatok meghatrozsa

Amikor egy dokumentumban a degree attribtumot hasznljuk, annak rtkt a fent lthat felsorolsbl kell vlasztanunk. Ha nem adunk meg semmit, mg az attribtum nevt sem, akkor annak alaprtelmezett rtke bachelors lesz. A tokenizlt attribtumokat az XML alkalmazsok nevknek megfelelen tokenekknt kezeik, vagyis eltvoltjk ellk s mglk az sszes res karaktert, a bennk elfordul tbb sszefgg res karakterbl ll rszeket pedig egyetlen szkzre cserlik. Az res rszek eltvoltsn tl az alkalmazs validlja is a tokenizlt attribtumot annak deklarlt tpusa alapjn. Ez utbbi lehet ENTITY, ENTITIES, ID, IDREF, IDREFS, NMTOKEN, vagy NMTOKENS. A token az informcinak az a legkisebb egysge, amit egy XML alkalmazs kpes feldolgozni. A tokenizlt attribtum ennek megfelelen olyan attribtum, amelynek rtkt az alkalmazs ilyen tokenekre bontja. Az res karakterek emltett eltvoltsa ennek a felbontsnak a mellkhatsa. (resnek szmt a szkz, a tabultor s az j sor.) A kznsges karakterlncok ezzel szemben feldolgozatlanul jutnak t a folyamaton, gy az sszes res karakter is megmarad bennk. Az ENTITY s ENTITIES tpusok egyedekre hivatkoznak. Az egyedekrl a kvetkez ra anyagban lesz sz rszletesen. Itt s most csak egy pldt emltek meg. A kpek tipikusan binris egyedekknt jelennek meg az XML dokumentumokban. Ilyen esetben az ENTITY kulcsszt hasznljuk a kp s az elem sszerendelsre:
<!ATTLIST photo image ENTITY #IMPLIED>

Az ENTITIES tpus hasonl az ENTITY-hez, de lehetv teszi tbb egyed felsorolst. Az ID, IDREF s IDREFS attribtumtpusok egyedi azonostkat jellnek. Az ID olyan egyedi azonost, amely segtsgvel egyedileg hivatkozhatunk a dokumentum valamely elemre:
<!ATTLIST part id ID #REQUIRED>

Egy adott elemtpushoz csak egyetlen ID tpus tartozhat. Az NMTOKEN s NMTOKENS tpusok olyan attribtumokkal kapcsolatban hasznlatosak, amelyek nv jelleg tokenrtkeket hordoznak. A nv jelleg tokenrtk egyetlen nevet tartalmaz, vagyis nem lehet benne szkz vagy brmely ms res karakter. Kicsit konkrtabban egy ilyen rtk betket, szmokat s a kvetkez karaktereket tartalmazhatja: . , - , _ s : .

Tbb attribtum egyidej hasznlata


Egszen eddig csak olyan pldkat mutattam, ahol egy elemhez legfeljebb egy attribtum tartozott. Ugyanakkor a val letben nyilvn gyakran fordulnak majd el olyan esetek is, amikor tbb ilyen kiegszt tulajdonsgot is kell valamilyen informcihoz

3. ra Az adatok meghatrozsa DTD sma segtsgvel 65

rendelnnk. Ilyenkor is hasznlhatunk egyetlen attribtumlistt a deklarciban, amelyben az egyes tulajdonsgokat egyms utn felsoroljuk. me egy plda erre a mdszerre:
<!ELEMENT photo (image, format)> <!ATTLIST photo image ENTITY #IMPLIED photo format NOTATION (gif | jpeg) #REQUIRED >

Lthat, hogy br a photo nev elemhez kt attribtum (image s photo) tartozik, mindkettt egyetlen attribtumlista rszeknt adhattuk meg.

Plda egy teljes DTD-re


Kszsggel elismerem, hogy ebben az rban meglehetsen sok volt az j, s ersen technikai jelleg informci. Bolond beszd, de van benne rendszer! Ideje, hogy ezt a gyakorlatban is kamatoztassuk. Alkossuk meg teht egy sporttal kapcsolatos jellnyelv teljes smjt DTD-ben. Ez kivl alkalmat teremt arra, hogy lssuk, hogyan mkdnek a gyakorlatban az elemek s attribtumok deklarlsra bemutatott mdszerek. Sajt jellnyelvnk, amit ETML-nek (Endurance Training Markup Language) fogunk hvni azoknak jhet jl, akik maratonra vagy triatlonra kszlnek, s szeretnk edzsi tervket szmtgp segtsgvel kialaktani, illetve nyomon kvetni. A nyelv az olyan sportgakkal kapcsolatos adatokat modellezi mint az szs, futs s kerkprozs. Elszr is foglaljuk ssze, hogy egy edzsi fzisban mifle adatok nyilvntartsra lehet szksgnk: Dtum Az edzs ideje Edzstpus Milyen edzsrl van sz (szs, futs vagy kerkprozs) Pulzusszm Mekkora lesz az tlagos pulzusszm az edzs sorn Idtartam Az adott edzsi szakasz idtartama Tvolsg A megtenni kvnt tvolsg (kilomterben vagy mrfldben) Hely Az edzs helye Megjegyzsek Mindennem egyb informci vagy megjegyzs

Tudvn, hogy mindennek egyetlen, az adott edzshez tartoz elemben kell elfrnie, prbljuk meghatrozni, hogy melyik informcit rdemes gyermekelemben, s melyiket attribtumban trolni. Ennek a feladatnak persze nincs egyetlen, ltalnosan elfogadott helyes megoldsa, viszont bizonyos logikai szempontok alapjn vgl is nem tl nehz a dnts. n magam a kvetkezkppen rendeznm el a dolgokat: Attribtumok dtum, tpus, pulzusszm Gyermekelemek idtartam, tvolsg, hely, megjegyzsek

66 II. rsz Az XML adatok meghatrozsa

A dtum, a tpus, s a pulzusszm egyszer, rviden kifejezhet rtkek, gy optimlisak az attribtumban trtn trolsra. A tpus esetben radsul mg a vlaszthat rtkek kre is kttt (futs, kerkprozs s gy tovbb). Az, hogy az edzs hossza s a megtett tvolsg gyermekelemben vagy attribtumban kerl rgztsre zls dolga. Ugyanakkor ha elemknt modellezzk ket, akkor meghagyjuk magunknak azt a lehetsget, hogy ksbb attribtumokat fzhessnk hozzjuk. Ilyen formban adhatjuk meg pldul egy mennyisg hasznlhat mrtkegysgeit. A hely s a megjegyzsek valsznleg szveget fognak tartalmazni, teht ezeket mindenkppen elemknt clszer megvalstani. Az XML egyik aranyszablya szerint minl tbb korltozst alkalmazunk egy dokumentum tartalmval kapcsolatban, annl jobb lesz a szerkezete. Msknt fogalmazva ez azt jelenti, hogy egy sma kialaktsa akkor j, ha a lehet legkevesebb ktsget hagyja az elemek s attribtumok hasznlatval kapcsolatban. Ezzel el is kszltnk az ETML nyelv koncepcitervvel Kszen llunk teht arra, hogy megrjuk a konkrt DTD-t. A ksz sma kdjt a 3.3. listban lthatjuk. 3.3. lista
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:

Az ETML nyelv dokumentumok validlsra hasznlhat DTD (etml.dtd)

<!ELEMENT trainlog (session)+> <!ELEMENT session (duration, distance, location, comments)> <!ATTLIST session date CDATA #IMPLIED type (running | swimming | cycling) "running" heartrate CDATA #IMPLIED > <!ELEMENT duration (#PCDATA)> <!ATTLIST duration units (seconds | minutes | hours) "minutes" > <!ELEMENT distance (#PCDATA)> <!ATTLIST distance units (miles | kilometers | laps) "miles" > <!ELEMENT location (#PCDATA)> <!ELEMENT comments (#PCDATA)>

Az eddig tanultak alapjn ennek a kdnak minden rszlett rtennk kell, ami pedig a koncepcit illeti, a fenti sma mindenben megfelel a korbban lert koncepcitervnek. Az ETML dokumentumok gykreleme a trainlog lesz (1. sor). Az egyes edzsek adatait session nev elemek troljk, amelyeknek duration, distance, location s comments nev gyermekelemeik lesznek (3. sor). A session elem ezen

3. ra Az adatok meghatrozsa DTD sma segtsgvel 67

kvl hrom, date, type s heartrate nev attribtummal rendelkezik (47. sorok). Figyeljk meg, hogy a session elem type (6. sor), s a duration illetve distance elemek units (12. s 17. sor) nev attribtumai csak egy lista szerint vehetnek fel rtkeket. Termszetesen egyetlen DTD bemutatsa sem lehet teljes anlkl, hogy kiprblnnk a gyakorlatban, vagyis ltrehoznnk egy neki megfelel XML dokumentumot. A 3.4. lista egy ETML nyelven kszlt edzsnaplt mutat be. 3.4. lista
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:

Egy ETML nyelven kszlt edzsnapl

<?xml version="1.0"?> <!DOCTYPE trainlog SYSTEM "etml.dtd"> <trainlog> <session date="11/19/05" type="running" heartrate="158"> <duration units="minutes">50</duration> <distance units="miles">5.5</distance> <location>Warner Park</location> <comments>Reggeli futs, vgig kicsit fullaszt volt.</comments> </session> <session date="11/21/05" type="cycling" heartrate="153"> <duration units="hours">1.5</duration> <distance units="miles">26.4</distance> <location>Natchez Trace Parkway</location> <comments>Hegymenet, llati hzs volt.</comments> </session> <session date="11/24/05" type="running" heartrate="156"> <duration units="hours">2.5</duration> <distance units="miles">16.8</distance> <location>Warner Park</location> <comments>Dlutni futs, elg kemny volt.</comments> </session> </trainlog>

Lthat, hogy ez a dokumentum mindenben szigoran ragaszkodik az ETML DTDjhez, akr a megadhat elemeket, akr azok egymsba gyazst tekintjk. A DTD-t a dokumentumtpus-deklarciban talljuk a fjl elejn (2. sor). Egy msik lnyeges dolog, amire rdemes odafigyelni a type s units attribtumok hasznlata (5., 12., s 19. sorok). Itt is csak olyan rtkek szerepelnek, amelyek benne voltak a DTD-ben megadott listban is. rdemes megjegyezni, hogy br ebben a pldban csak hrom edzs adatai szerepelnek, a dokumentumnak akrhny ilyen eleme lehet. Aki teht duzzad az energitl, s elg ersnek rzi magt egy maratoni tvhoz, nyugodtan kezdje el hasznlni ezt az jonnan megalkotott jellnyelvet sajt edzseinek nyilvntartsra. Hogy miknt lehet egy XML dokumentumot egy DTD alapjn validlni, arrl a 8. rban lesz sz.

68 II. rsz Az XML adatok meghatrozsa

sszefoglals
Az XML olyan jellnyelv, amely ms jellnyelvek ltrehozsra hasznlhat. Azt a folyamatot, amikor megalkotjuk egy ilyen XML alap jellnyelv logikai struktrjt sszefoglal nven adatmodellezsnek (data modeling) nevezzk. Az adatmodell defincija, formlis lersa a sma. Az XML alap nyelvek sminak lersra kt alapveten eltr technolgia ltezik, a DTD s az XSD. Mindkettnek megvannak a maga elnyei s htrnyai, de funkcionlisan mindkett tkletesen megfelel az XML smk ltrehozsra. Ebben az rban megtanultuk, mit jelent a dokumentumok rvnyessgnek ellenrzse (validlsa), illetve hogy mit takar a jl formzottsg (well-formedness). Megismerkedtnk ezen kvl a DTD technolgia alapjaival, s megvizsgltuk, hogyan hozhatjuk ltre ezzel a technolgival az XML dokumentumok egy osztlynak formlis lerst. Lttuk, hogyan adhatjuk meg egy teljesen j jellnyelv smjt az egyedi cmkkkel kapcsolatos lersokon keresztl. Amellett, hogy meghatrozzk egy adott jellnyelv formlis szablyait, a DTD-knek risi jelentsge van az XML dokumentumok validlsval kapcsolatban is. A smk legfbb jelentsge ppen abban ll, hogy segtsgkkel a dokumentumok helyessge gpileg is ellenrizhetv vlik. Az ra vgn ltrehoztuk egy ETML (Endurance Training Markup Language) nev nyelv smjt, s ki is prbltuk azt a gyakorlatban, egy ezen a nyelven megalkotott XML dokumentumon keresztl.

Krdsek s vlaszok
Krds: Egyltaln nem tervezem, hogy valaha is sajt jellnyelvet hozzak ltre. Kell-e ennek ellenre ismernem a DTD s XSD technolgia rszleteit? Vlasz: Igen. A jellnyelvek dokumentcija sajnos szmos esetben nem valami rszletes. Ilyenkor az egyetlen informciforrs az adott nyelv DTD-je vagy XSD-je. Csak ezekbl lesznk kpesek kitallni, hogy mit hogyan kell hasznlni. Krds: Elfordulhat-e olyan helyzet, amikor DTD-t s XSD-t is ltre kell hoznom egy jellnyelvhez? Vlasz: Nem nagyon. Az egyetlen elkpzelhet szituci az, ha kezdetben pusztn knyelmi szempontok alapjn DTD-ben dolgozunk, s csak a ksz smt alaktjuk t XSD-v. Megeshet persze az is, hogy a kezdetben figyelembe vett alkalmazsok mg tmogatjk a DTD-t, a ksbbi alkalmazsi terletek azonban mr megkvetelik az XSD sma hasznlatt.

3. ra Az adatok meghatrozsa DTD sma segtsgvel 69

Krds: Egyltaln mirt hasznl valaki bels DTD-t? Vlasz: A bels DTD-t maga az XML dokumentum tartalmazza, nem pedig egy kls fjl. Az ebben lertak ennek megfelelen csak erre az egy dokumentumra rvnyesek. Bels DTD-t teht akkor rdemes hasznlni, ha egy konkrt dokumentummal kapcsolatban akarunk valamit szablyozni. Minden ms smaelemet egy kls DTD-ben clszer rgzteni, hogy azokat brmely ms dokumentum is hasznlhassa. Krds: Mirt hasznlunk nha attribtumokat elemek helyett, amikor egy DTD-t terveznk? Vlasz: Az attribtumokkal kapcsolatban viszonylag szigorbb korltozsok alkalmazhatk, mint az elemeknl. Attribtum esetben megadhatjuk a felvehet rtkek listjt, illetve meghatrozhatunk alaprtelmezett rtket is. Az elemek tartalmra ezzel szemben sokkal kevesebb korltozs rvnyes. Ezek leginkbb hossz karakterlncok, illetve egyb elemek (gyermekelemek) trolsra alkalmasak. Az XML egyik alapszablya szerint minl tbb korltozst vezetnk be egy dokumentumtpus logikai szerkezetvel kapcsolatban, annl jobban strukturlt lesz a tartalom. Ennek megfelelen minden olyan esetben clszer attribtumot hasznlni elem helyett, amikor erre lehetsg nylik.

Feladatok
A feladatokat gy alkottuk meg, hogy segtsenek a felmerl krdsek megvlaszolsban, a tanultak ttekintsben, s azok gyakorlatba val tltetsben.

Kvz
1. Mi a rendeltetse egy smnak? 2. Milyen smatechnolgit kell hasznlnunk olyan sma ltrehozshoz, amelyben meg akarjuk hatrozni az adattpusokat, vagyis egszeket, dtumokat s egyb hasonl tpusokat akarunk elrni bizonyos helyeken? 3. Mi a klnbsg egy rvnyes (valid) s egy jl formzott (well-formed) dokumentum kztt?

Vlaszok
1. A sma az adott jellnyelvben hasznlhat elemeket s attribtumokat adja meg. Lerja ezen kvl, hogy mely attribtumok mely elemekhez tartoznak, illetve hogy ezek milyen logikai viszonyban llnak egymssal. 2. Ha specilis tpusokat, pldul egszeket vagy dtum tpusokat szeretnnk hasznlni a smban, akkor az XML Schema technolgit kell hasznlnunk.

70 II. rsz Az XML adatok meghatrozsa

3. A jl formzott (well-formed) dokumentumok megfelelnek az XML minden formai kvetelmnynek, mg az rvnyes dokumentumok ezen fell egy sma logikai szablyrendszernek is eleget tesznek.

Gyakorlatok
1. Mdostsuk az ra anyagban bemutatott ETML nyelv DTD-jt gy, hogy a session elemhez egy jabb, rating nev attribtum is tartozzon. Ennek az attribtumnak az adott edzssel kapcsolatos megelgedettsgnket kell tartalmaznia 1-tl 10-ig. Egy megfelel lista segtsgvel eleve gy alaktsuk ki az ezzel kapcsolatos smabejegyzst, hogy rating csak ilyen rtkeket vehessen fel. 2. Mdostsuk a trainlog.xml dokumentumot gy, hogy az a most bevezetett rating attribtumot is hasznlja.

You might also like