Ábrajegyzék 1. ábra: A 0x3282A3BD hexidecimális érték big-endian (a) és little-endian (b) bájtsorrend használata esetében ......................................................................................................... 11 2. ábra: Példa adatbázisra: gyógyszerek................................................................................... 16 3. ábra: Gyógyszeradatbázis fix szélességű fájlként ................................................................ 17 4. ábra: Gyógyszeradatbázis CSV fájlként............................................................................... 19 5. ábra: CSV fájl többsoros rekorddal...................................................................................... 19 6. ábra: Jelölőnyelvek evolúciója ............................................................................................. 21 7. ábra: Gyógyszeradatbázis XML fájlként.............................................................................. 23 8. ábra: Többrésze (multipart) MIME üzenet........................................................................... 30 9. ábra: Talpas betűk (felül, Times New Roman) és talpatlan betűk (alul, Verdana) .............. 69 10. ábra: A background-repat tulajdonság lehetséges értékei: repeat (balra fent), repeat-x (jobbra fent), repeat-y (balra lent), no-repeat (jobbra lent)............................................. 73 11. ábra: A background-position tulajdonság lehetséges értékei: left center (balra), right bottom (jobbra) ............................................................................................................... 73 12. ábra: A doboz modell ......................................................................................................... 77 13. ábra: Keret stílusok............................................................................................................. 79 14. ábra: z-index használata ..................................................................................................... 84 15. ábra: A float stílus használata............................................................................................. 85 16. ábra Példa hibaüzenetre hibás XML megnyitásakor (Firefox böngésző) .......................... 93 17. ábra: A HTML validátor kezdőoldala ................................................................................ 95 18. ábra: A HTML validátor kimenete hibás dokumentum esetében....................................... 97 19. ábra: A HTML validátor kimenete valid dokumentum esetében ....................................... 98 20. ábra: A CSS validátor kezdőoldala .................................................................................. 100 21. ábra: A CSS validátor kimenete ....................................................................................... 101 22. ábra Ciklusok folyamatábrája........................................................................................... 121
5
Táblázatok jegyzéke 1. táblázat: Az ISO-8859 szabvány néhány eleme ................................................................... 13 2. táblázat: UTF-8 karakterkódok bináris ábrázolása............................................................... 13 3. táblázat: Szöveges adatformátumok összehasonlítása ......................................................... 24 4. táblázat: Gyakran használt MIME típusok........................................................................... 28 5. táblázat: Speciális karaktereket helyettesítő entitások ......................................................... 39 6. táblázat: Target attribútum értékei ....................................................................................... 55 7. táblázat: Szerver-oldali szkript nyelvek összehasonlítása.................................................. 104 8. táblázat: PHP speciális karakterek ..................................................................................... 109 9. táblázat: A PHP operátorai ................................................................................................. 113 10. táblázat: Ciklus típusok .................................................................................................... 117
6
Dokumentumleíró nyelvek
Előszó
1 Előszó
Az emberi tudás, illetve a napi munkához és a mindennapi élethez szükséges adatok jelentős része ma már digitális formában áll rendelkezésre. Egyre kevesebben lapozzák fel a lexikonokat, könyveket, ha valamire kíváncsiak, és a szervezetek – köztük a kórházak, egészségügyi intézmények – működése során keletkező adatokat is számítógépes programok segítségével rögzítik. Ezen adatok, információk jelentős része szöveges dokumentumok formájában áll rendelkezésre. Jelen könyv az ezen szöveges dokumentumok készítéséhez, tárolásához, feldolgozásához szükséges szabványokat, technológiákat mutatja be. A 2. fejezetből megtudhatod, hogyan tárolják a számítógépek a szöveges információkat, és miért látsz a böngésződben néha furcsa karaktereket. Továbbá bemutatunk néhány elterjedt adatformátumot, mint a CSV vagy az XML. Utóbbival részletesen is foglalkozunk a 3. fejezetben.
Az utóbbi években egyre szélesebb körben terjed az Internet használata, egyre több eszköz segítségével elérhetjük a tartalmakat. A hagyományos szoftverek egy részét is felváltották a különféle webes, böngészőben futó alkalmazások, például akár szöveget szerkeszthetünk vagy prezentációt készíthetünk a segítségükkel. Mind a megszokott weboldalak, mind az újfajta webes szolgáltatások ugyanazokra az alapokra épülnek: a HTML-re, amely az oldalak szerkezetét és tartalmát írja le és a CSS-re, amelynek segítségével a megjelenésüket szabályozhatjuk. Ezen szabványok legfontosabb elemeit ismerheted meg a 4. és az 5. fejezetben, ezáltal Te is képessé válsz egyszerű, statikus weboldalak elkészítésére. Célszerű a tökéletességre, azaz a szabványoknak megfelelő weboldalak készítésére törekedni. Ebben nyújtanak segítséget a különböző validátor eszközök, amelyekről a 6. fejezetben olvashatsz. 7
Dokumentumleíró nyelvek
Előszó
Összetettebb weboldalak, webes alkalmazások készítéséhez azonban további eszközökre, technológiákra is szükség van. Ilyenek például a szerver-oldali szkript nyelvek, amelyek alapjaival – a PHP példáján keresztül – a 7. fejezetben ismerkedhetsz meg.
A keretes részekben megjegyzéseket, érdekességeket, kiegészítő információkat olvashatsz.
8
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
2 Szöveges adatok reprezentációja
2.1 Karakterkódolások 2.1.1 Karakterek digitális tárolása
A számítógépek minden digitálisan, azaz egyesek és nullák sorozataként tárolnak. Az emberi kommunikációban azonban ennél jóval összetettebb szimbólumkészletet (betűket, számokat, írásjeleket és egyéb karaktereket) használunk. Ezért az ábécé betűihez (bináris) számokat kell rendelni. Ebben a fejezetben ezzel, azaz a karakterkódolásokkal foglalkozunk.
Karakterkódolások már a számítógépek kora előtt is léteztek, gondoljunk csak a Morze-kódra, amely a betűket és számokat rövid és hosszú jelek sorozatává alakította. A számítógépes karakterkódolás is ugyanerre a sémára épül, csak itt nullákat és egyeseket (azaz biteket) használunk.
A korai karakterkódolások 7, ill. később 8 bites karakterekkel dolgoztak, azaz egy karaktert ennyi biten tároltak. A kettes számrendszerbeli bitsorozat tízes számrendszerbeli ábrázolását az adott karakter kódjának is szokás nevezni. Például a 0001 1011 bináris szám a 27-es decimális számnak felel meg. Ennek megfelelően a 7 bites kódolás 0-tól 127-ig, a 8 bites kódolás 255-ig terjedő számértékeket képes tárolni.
9
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
Könnyen belátható, hogy még a 256 karakter sem elegendő az összes ábécé összes betűjének tárolására, nem beszélve az egyéb speciális jelekről. Ez a probléma vezetett a Unicode szabvány kidolgozásához, amely a különböző írásrendszerek egységes kódolását és használatát szabályozza. A Unicode szabvány minden karakterhez meghatároz egy pozitív egész számot. Az elvi felső határ 231, azaz több mint 2 milliárd. A becslések szerint már ennek a tizedrésze is elegendő az összes létező és valaha létezett írásjel ábrázolására.
A számítástechnika alapegysége, a bájt 8 bitből áll, azaz a 7 és 8 bites karakterkódolások esetén egy karakter egy bájton ábrázolható. Az ennél hosszabb kódok esetében már karakterenként több bájt szükséges. A legmagasabb számú Unicode karakterek csak 4 bájton férnek el. Ha minden karaktert 4 bájton ábrázolunk, akkor egy egymillió karaktert tartalmazó szövegfájl 4MB helyet foglal, szemben az 1 bájtos kódolások 1MB-jával. A magasabb kódú Unicode karakterek azonban ritkán használatosak, mivel ezek különféle egzotikus nyelvek betűit tartalmazzák. Az Európában általánosan használt ábécék betűi a Unicode kódtábla alsó részén találhatók. Ezért dolgozták ki a változó hosszúságú karakterkódolásokat, amelyek az alacsonyabb Unicode kódú karaktereket egy bájton, a magasabb kódú karaktereket kettő vagy még több bájton ábrázolják.
A több bájtos karakterkódolások kapcsán érdemes még megemlíteni a bájtsorrend, vagyis angolul „endianness” fogalmát. Ez azt jelöli, hogy egy több bájtos adatszekvencia elemei milyen sorrendben kerülnek tárolásra vagy továbbításra. Big endian bájtsorrend esetében a legnagyobb helyiértékű bájt kerül az első helyre (legalacsonyabb címre). A little endian bájtsorrend ennek ellentéte, azaz a legkisebb helyiértékű bájt kerül az első helyre.
10
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
Az endianness kifejezés Jonathan Swift Gulliver utazásai c. regényéből származik, melyben a lilliputiak két pártja között háború dúl: az egyik fél szerint a lágy tojást a nagyobb végén (big endian), a másik szerint a kisebbik végén (little endian) kell feltörni.
34
82
A3
BD
0
1
2
3
a) Big-endian tárolás BD
A3
82
34
0
1
2
3
b) Little-endian tárolás 1. ábra: A 0x3282A3BD hexidecimális érték big-endian (a) és little-endian (b) bájtsorrend használata esetében
A bájtsorrend nem csak a számítástechnikában van jelen, hanem a mindennapi életben is, még ha ezt nem is tudatosítjuk. Gondoljunk csak például a dátumokra: a hagyományos magyar dátumozás big endian, azaz év, hónap, nap sorrendet használ. Az angol nap, hónap, év formátum little endian kódolásnak felel meg. Ugyanígy a számoknál big endian sorrendet használunk, ha például azt mondjuk, hogy négyezerhatszázhuszonnyolc. A német nyelv 21 és 99 között little endian sorrendet használ: vierundsiebzig, azaz négy és hetven (74).
11
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
2.1.2 Gyakori karakterkódolások
A legrégebbi, széles körben elterjedt karakterkódolás az ASCII volt. Ezt az 1960-as években dolgozták ki, telex gépeken való felhasználás céljára. Az ASCII 7 biten kódolja a karaktereket, a bájt 8. bitjét paritásbitnek használták. A 7 bites tárolás 128 karakter (0-127) kódolását tette lehetővé. A 0-tól 31-ig terjedő kódok, valamint a 127 speciális vezérlőkaraktereket kódolnak, amelyek eredetileg a telex működéséhez kapcsolódtak. A többi karakter kódolja az angol ábécé kis- és nagybetűit, a számokat valamint az írásjeleket.
Az ASCII kódolás nem teszi lehetővé az egyes nyelvek ábécéiben szereplő speciális szimbólumok, mint például a magyar ékezetes karakterek vagy a német ß ábrázolását. Ezért dolgozták ki az ISO-8859 szabványcsaládot, amely lényegében az ASCII kódolás kibővítése a 8. bit kihasználásával. A szabványnak számos része van, néhány fontosabbat az alábbi táblázat sorol fel. A magyar nyelv ékezetes betűinek helyes megjelenítéséhez az ISO-8859-2es, azaz Latin2 kódolást kell használni. A betűk egy részét a Latin1 kódolás is tartalmazza, de az ő és ű betűk hiányoznak, az ű helyén például az û („kalapos ű”) szimbólum szerepel.
Hivatalos név
Nem hivatalos/rövid név
ISO-8859-1
Latin1, nyugat-európai
Tartalom A legtöbb
nyugat-európai
nyelv
betűit
tartalmazza ISO-8859-2
Latin2, közép-európai
A latin betűket használó közép- és keleteurópai nyelvek szimbólumait tartalmazza
ISO-8859-5
Cirill
A cirill ábécét használó európai nyelvek többségét lefedi 12
Dokumentumleíró nyelvek
ISO-8859-7
Szöveges adatok reprezentációja
Görög
Görög betűket tartalmaz 1. táblázat: Az ISO-8859 szabvány néhány eleme
Létezik még számos egyéb, többé-kevésbé elterjedt karakterkódolás, mint például a Windows-1250, amely a kelet- és közép-európai ábécéket tartalmazza, azaz nagyrészt megegyezik az ISO-8859-2-vel.
A Unicode szabvány által definiált karakterek kódolására többféle szabvány is létezik. A legelterjedtebb az UTF-8, amely változó hosszúságú kódokat használ. Az ASCII karakterek kódolására egy bájtot használ, amely megegyezik az ASCII kódokkal. Ezek bináris reprezentációja 0-val kezdődik. A több bájtos kódok első eleme mindig 11xxxxxx, ahol a kezdő egyesek száma megegyezik a kód hosszával. A sorozat későbbi bájtjai mindig 10xxxxxx formátumúak. Az UTF-8 akár 6 bájtos karaktereket is kódolhat.
Egyes Windowsos programok úgy jelzik, hogy egy fájl UTF-8 kódolású, hogy a fájl elejére egy 0xEF, 0xBB, 0xBF bájtsorozatot írnak. Ez a bájtsorozat a „bájtsorrend-jel” (angolul byte order mark, BOM) Unicode karakter kódja. Ezt a karaktert az UTF-16 használja, amely fix 2 bájton kódolja a Unicode karaktereket, ezért felmerül a bájtsorrend (endianness) problémája. A BOM karakter fordítottja ugyanis érvénytelen UTF-16 kód, vagyis ezzel jelezhető a bájtsorrend. UTF-8 esetében ennek a karakternek nincs jelentése, ezért használható a kódolás jelzésére. Azonban nem minden program ismeri fel, ezért ezek megpróbálják karakterekként értelmezni. Az eredmény a fájl elején megjelenő  karaktersorozat.
Nagyon
fontos,
hogy
egy
rendszer
fejlesztése
során
mindenhol
a
megfelelő
karakterkódolásokat alkalmazzuk. Ez azt jelenti, hogy mind az adatbázis kezelő rendszerben, mind a forrásfájlokban, mind a HTML kódban konzisztensen kell használni a karakterkódolásokat, ellenkező esetben hibás karakterek jelenhetnek meg. Ha például UTF-8 kódolású szöveget ISO-8859-es kódolásúként próbálunk értelmezni, akkor ilyesmi eredményt kapunk: Hibás kĂłdolás. (Tovább bonyolítja a helyzetet, ha különleges betűtípusokat – azaz fontokat – szeretnénk használni, mivel ezek nem mindegyike tartalmazza az összes szükséges karaktert. Vagyis lehetséges, hogy a kódolás megfelelő, csak épp a használt betűtípussal nem jelenik meg jól). Ma már általánosan elterjedt az UTF-8 kódolás használata, mivel ez lehetővé teszi az összes szóba jöhető karakter eltárolását. A legtöbb modern szoftvereszköz támogatja ennek használatát.
A karakterkódolás megfelelőségének ellenőrzésére gyakran használják az ún. pangrammákat, amelyek olyan mondatok, amelyek egy adott nyelv összes betűjét tartalmazzák. Ilyen angolul például a „The quick brown fox jumps over the lazy dog”. („A fürge barna róka átugrik a lusta kutyán.”) mondat. A magyar nyelv esetében az 14
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
összes ékezetes betűt tartalmazó mondatok vagy kifejezések lehetnek érdekesek, mint pl. a leggyakrabban használt „Árvíztűrő tükörfúrógép”. Ha beírjuk ezt a mondatot, akkor ellenőrizhetjük, hogy minden karakter megfelelően jelenik-e meg a használt kódolással (vagy betűtípussal). Hasonló kifejezések még például: -
Gyümölcsvédő ágyúfűnyíró
-
Háztűznézőügynök-búsító
-
Nyúlfülvágó térközsűrítő
-
Úszójárműkürt-vészöblítő
-
Zártkörű nőújító ülés
2.2 Szöveges adatformátumok
Számos programnak van szüksége strukturált adatokra a megfelelő működéséhez. Ilyenek például egy egészségügyi rendszerben a betegek személyes adatai, az elvégzett vizsgálatok, az rendelkezésre álló gyógyszerek és még sok más. Ezek az adatok tárolhatók többek között adatbázis-kezelő rendszerekben vagy egyszerű szöveges fájlokban. Ebben a fejezetben utóbbival ismerkedhetsz meg. A következő alfejezetek a strukturált szöveges fájlok három alaptípusát mutatják be: a fix szélességű fájlokat, a tagolt szöveges fájlokat és a jelölőnyelveket. A szövegszerkesztéshez használt fájlformátunmok, mint például a DOC vagy ODT, illetve a PDF nem csak a szöveges információkat, hanem a formázási utasításokat is tárolják, hiszen ezen formátumok célja, hogy egy elkészített dokumentum más 15
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
számítógépeken is ugyanolyan formában (színekkel, betűméretekkel, elrendezéssel stb.) jelenjen meg. Emiatt ezek (még ha strukturált információt tartalmaznak is), alkalmatlanok az automatikus feldolgozásra, vagy legalábbis bonyolult programozást igényelnek.
A részletes ismertetés előtt érdemes definiálni néhány fogalmat: • Adatbázis: ebben a fejezetben adatbázis alatt egy strukturált adathalmazt értünk, függetlenül attól, hogy milyen formában van tárolva. A legtöbb esetben elképzelhető egy táblázatként. Példa: egy gyógyszeradatbázis. • Rekord: egy összetartozó adathalmaz, az adatbázis egy sora. Az adatbázis egyforma felépítésű rekordokból áll. Példa: a gyógyszeradatbázisban egy gyógyszer adatai. • Mező: az adatbázis egy oszlopa, az adatbázisban tárolt entitás valamilyen tulajdonsága. Példa: a gyógyszer neve, hatóanyaga stb.
A továbbiakban a 2. ábra látható egyszerű adatbázis példáján mutatjuk be a különböző adattárolási módszereket.
Név
Hatóanyag
Forma
Kiszerelés
ibuprofen
filmtabletta
10 db
Nasivin
oxymetazoline
oldatos orrcsepp
5 ml
Coldrex
paracetamol
tabletta
12 db
rekord Algoflex
mező 2. ábra: Példa adatbázisra: gyógyszerek
16
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
2.2.1 Fix szélességű fájlok
A fix szélességű fájlok elnevezése onnan ered, hogy minden mezőnek van egy karakterszámban meghatározott szélessége, azaz minden rekord esetén ugyanannyi karakterből áll. Ha valamelyik rekordban az adott mező tartalma ennél kevesebb karakterből áll, akkor valamilyen kitöltő karakterrel (általában szóköz) töltik fel az üres helyeket. A kitöltő karakterek lehetnek az adat előtt és után is, ezzel megvalósítva a jobbra ill. balra igazítást.
(Jobbra
igazítást
általában
számok
esetében
szokás
használni.)
A
gyógyszeradatbázisunk esetében dönthetünk úgy, hogy a nevet 15 karakteren, a hatóanyagot 20, a gyógyszerformát 18, a kiszerelést pedig 8 karaktereken tároljuk. A rekordokat minden esetben új sor választja el. Ekkor az adatbázisunk a következő formát ölti:
Ennek a tárolási módnak a fő előnye az egyszerűsége: könnyen kiszámolható, hogy egy-egy mező hol kezdődik és meddig tart. Ha például a hatóanyagokat szeretnénk kilistázni, akkor 16. karaktertől a 35. karakterig kell beolvasni minden egyes sort. Az egyes mezők ideális hosszának meghatározása azonban nem mindig egyszerű feladat. A példánkban a leghosszabb gyógyszernév 8 karakterből áll, így a 15 karakter is soknak tűnik. De ha például a SALMETEROL/FLUTICASONE PROPIONATE PHAROS nevű készítmény eltárolására lenne szükség a későbbiekben, akkor 40 karakterre lenne szükség. Bármikor előfordulhat 17
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
tehát, hogy alulbecsüljük a szükséges hosszt, és egy jövőbeli adat nem fér bele az adatbázisunkba. Ekkor vagy rövidíteni kell vagy levágni az utolsó néhány karaktert, vagy pedig a mező hosszát megváltoztatni. Utóbbinak azonban az lehet a következménye, hogy a feldolgozó programot is át kell írni az új hosszok használatára.
A fix szélesség használatának másik hátránya, hogy amennyiben a mezőhosszokat túl nagyra állapítjuk meg, az adataink többsége viszont ennél jóval rövidebb, akkor a fájl nagyon sok felesleges szóközt fog tartalmazni, ami megnöveli a fájl méretét. (Bár ez a mai tárolókapacitások fényében már nem szokott problémát jelenteni.) Továbbá egyetlen hiba egy rekord elején (pl. a szükségesnél kevesebb kitöltő szóköz) az egész rekord „elcsúszását” okozhatja.
Ezt a fájltípust előszeretettel alkalmazták a régebbi szoftverekben, ma azonban már elavultnak tekinthető, és a használata visszaszorulóban van. Néhány esetben, mint például az OEP számára küldendő havi jelentésekben még ezt az adatformátumot alkalmazzák.
2.2.2 Tagolt szöveges fájlok
A tagolt fájlok esetében a mezők változó szélességűek, a mezőhatárokat valamilyen elválasztó karakter jelöli. A gyakran használt elválasztó karakterek közé tartozik a vessző, a pontosvessző vagy a tabulátor. Ezt a fájltípust CSV (comma-separated values) névvel szokták jelölni, habár az elválasztó karakter nem mindig a vessző (comma). Precízebb elnevezés lenne a „delimiter-separated values” (DSV), de a továbbiakban a jobban elterjedt CSV elnevezést használjuk. A gyógyszeradatbázis CSV formátumban, vesszővel elválasztva: 18
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
Név,Hatóanyag,Forma,Kiszerelés Algoflex,ibuprofen,filmtabletta,10 db Nasivin,oxymetazoline,oldatos orrcsepp,5 ml Coldrex,paracetamol,tabletta,12 db 4. ábra: Gyógyszeradatbázis CSV fájlként
A vessző használata elválasztó karakterként felvet néhány problémát, pl. számos nyelv (köztük a magyar is) vesszőt használ tizedes jelként. Tovább a vessző gyakran előfordulhat szöveges mezők tartalmában is. Emiatt jobb választás lehet a pontosvessző használata. A rekordokat ebben a formátumban is új sor választja el.
Bármilyen körültekintően választjuk is ki az elválasztó karaktert, előfordulhat, hogy annak szerepelnie kell egy mező értékében. Ebben az esetben a mező tartalmát idézőjelbe kell tenni. Ezzel a módszerrel több soros mezők is létrehozhatók.
Név;Leírás Algoflex;"Ellenjavallatok: - súlyos szív-, máj- és veseműködési zavar; - súlyos magasvérnyomás-betegség; - véralvadást csökkentő (antikoaguláns) kezelés" 5. ábra: CSV fájl többsoros rekorddal
A CSV fájlformátum takarékosabb, mint a fix szélességű, mivel nem tartalmaz felesleges kitöltő karaktereket, csak mezőnként egy elválasztó karaktert. A CSV viszonylag elterjedt 19
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
formátum, egyszerűsége miatt előszeretettel használják eltérő formátumot használó alkalmazások közötti adatcserére. A legtöbb táblázatkezelő és adatbázis-kezelő rendszer támogatja a használatát, köztük a Microsoft Office is.
2.2.3 Jelölőnyelvek
A jelölőnyelvek (angolul: markup language) olyan mesterséges nyelvek, amelyek segítségével a szövegeket valamilyen jelölésrendszerrel láthatunk el, például számítógépes értelmezés, strukturálás vagy megjelenítés céljából. A megjelölés lényegében meta-adatokkal történő ellátást jelent. Jelöléseket már a számítógépek kora előtt is alkalmaztak: a nyomdászok, szedők jelzésekkel látták el a kéziratot, amelyek jelezték a kiadvány végső formáját (betűstílusok, margók stb.).
A jelölőnyelvben használt jelöléseket tag-nek nevezzük. A legtöbb esetben az egyes adatelemeket egy nyitó és egy záró tag veszi körül. Az általános célú jelölőnyelvekben a tageknek csak a szintaktikájuk van meghatározva. A kötött szintaktika lehetővé teszi általános célú értelmezők, azaz parserek kifejlesztését, miközben a jelölések értelmét, azaz szemantikáját a konkrét alkalmazás szabja meg.
Az egyik legelső általános jelölőnyelvet az IBM-nél fejlesztették ki az 1960-as években, és a GML (Generalized Markup Language) nevet kapta. Ezt később továbbfejlesztették és 1986ban szabványba foglalták, így alakult ki az SGML (Standard Generalized Markup Language). Az SGML egy absztrakt, általános szintaxist biztosít, melynek segítségével bármilyen dokumentum leírható. Az SGML használata eléggé bonyolult, speciális szaktudást igényel, 20
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
ezért széles körben nem terjedt el. Azonban a ma használt jelölőnyelvek többsége az SGMLből származik, annak valamilyen leszármazottja vagy konkrét alkalmazása. A jelölőnyelvek evolúcióját és kapcsolatait a 6. ábra mutatja.
6. ábra: Jelölőnyelvek evolúciója1
Fontosabb jelölőnyelvek: • HTML: az SGML egy konkrét alkalmazása, weboldalak leírására fejlesztették ki.
1
BRADLEY, Neil: Az XML-kézikönyv. Bp.: Szak Kiadó, 2005. p. 585.
21
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
• XML: az SGML leszármazottja (részhalmaza), tehát általános célú leíró nyelv. Számos egyszerűsítést és megkötést tartalmaz az elődjéhez képest, ezáltal egyszerűbben feldolgozható. Manapság a szöveges adattárolás és rendszerek közti adatcsere legnépszerűbb formátuma. • XHTML: a HTML XML-alapú változata, az egyszerű HTML-hez képest több megkötést tartalmaz. • Számos XML alapú speciális jelölőnyelv létezik, mint például a matematikai formulák leírására szolgáló MathML
Az XML-ről és a HTML nyelvek különböző változatairól a későbbi fejezetekben részletesen is lesz szó.
Az SGML/XML alapú nyelvek nagyon rugalmasak, jóval többfajta adat tárolására alkalmasak, mint a fix szélességű vagy tagolt fájlok. Például nem feltétel, hogy minden rekord ugyanolyan mezőkből álljon. Ezen kívül nem csak kétdimenziós (táblázatszerű) adatok tárolására alkalmasak, hanem összetettebb, többszintű adatokat is le lehet írni a használatukkal. Mivel minden mező esetében meg kell ismételni a nyitó és záró taget, a fájl mérete jelentősen megnő pl. a CSV-hez képest, ez azonban a jelenlegi tárolókapacitásokat figyelembe véve nem jelent nagy hátrányt. A legtöbb programozási nyelvhez létezik legalább egy, de jellemzően akár több parser is, így a feldolgozásuk egyszerű. Fontos azonban, hogy a fájl jól formázott („well-formed”) legyen, azaz pontosan kövesse a nyelv szintaktikáját (pl. nyitó és záró tagek), ellenkező esetben nem lehet feldolgozni.
A példaként használt gyógyszeradatbázis XML formája a következő ábrán látható.
22
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
Algoflexibuprofenfilmtabletta10 dbNasivinoxymetazolineoldatos orrcsepp5 mlColdrexparacetamoltabletta12 db 7. ábra: Gyógyszeradatbázis XML fájlként
2.2.4 A szöveges adatformátumok összehasonlítása
23
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
Az előző fejezetekben láthattuk, hogy számos lehetőség kínálkozik a szöveges adatok strukturált tárolására. Fontos megismerni mindegyik jellemzőit, előnyeit és hátrányait, hogy egy konkrét alkalmazás tervezésénél mindig a legmegfelelőbb tárolási módot választhassuk ki. Nagy bonyolultságú rendszereknél elsősorban adatbázis-kezelő rendszereket használnak az adatok tárolására, de a fájl alapú tárolásnak is megvan a maga létjogosultsága. Elsősorban rendszerek közötti adatkommunikáció vagy adatkonverzió esetében lehetnek hasznosak egyszerűségük, könnyű feldolgozhatóságuk és szabványosságuk miatt. A 3. táblázat a megismert formátumok legfontosabb jellemzőit foglalja össze még egyszer.
Jellemző Méretnövekedés Elterjedtség Tárolható adatok Bonyolultság Hibalehetőségek
A MIME (Multipurpose Internet Mail Extensions) internetes szabványt eredetileg az emailek továbbításához fejlesztették ki, hogy lehetővé váljon 24
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
• az ASCII-tól eltérő karakterkódolások használata, • csatolmányok továbbítása, • többrészes üzenettörzsek létrehozása. A szabványt később más protokollok is átvették, a legfontosabb ezek közül a HTTP.
Az emailek továbbítására szolgáló SMTP, valamint a HTTP üzenetei is egy fejlécből (header) és egy törzsből (body) állnak. A fejléc típus: érték típusú párokból áll, a MIME szabvány ilyen fejléctípusokat definiál.
A MIME fejlécek a következők:
MIME-version A használt MIME szabvány verzióját jelöli. Bár többször módosítottak a szabványon, a verziószámot nem növelték, így értéke mindig 1.0: MIME-version: 1.0
Content-ID Az elküldött tartalom egyedi azonosítója, elsősorban többrészes üzentek esetében használják. Az azonosítónak globálisan egyedinek kell lennie, de a generáló algoritmus nincs megszabva. Egy tipikus példa a következőképpen néz ki: Content-ID: [email protected]
A @ karakter után az üzenetet generáló számítógép host neve áll, míg az előtte lévő számok valamilyen azonosítók sorozata, pl: az aktuális üzenet részeinek száma, a 25
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
program által eddig generált üzenet száma, a folyamat azonosítója, linux időbélyeg (azaz az 1970. január 1. óta eltelt másodpercek száma).
Megjegyzés: Az egész üzenetnek is van egy egyedi azonosítója, ezt azonban nem a MIME definiálja.
Content-Description Az üzenet tartalmának természetes nyelvű leírása, ritkán használt.
Content-Disposition Ez a fejléc az üzenet tartalmának megjelenítését szabályozza: • inline érték esetében automatikusan megjelenik az üzenetben • attachment érték esetében csak a felhasználó beavatkozására nyílik meg HTTP üzenetek esetében az inline tartalom megjelenik a böngészőben (amennyiben az adott fájltípust meg tudja jeleníteni), míg attachment esetében általában egy „Mentés másként” párbeszédablak jelenik meg, vagy egyes böngészőknél külső programmal lehet megnyitni a fájlt. A fejléchez lehetőség van fájlnév megadására is. Például: Content-Disposition: attachment; filename=file.pdf
A felhasználói programok (böngészők, email kliensek) nem mindig veszik figyelembe a fejléc tartalmát.
26
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
Content-Type A legfontosabb MIME fejléc, az üzenet típusát és szöveges tartalom esetén a karakterkódolást adja meg. A MIME típusok típus/altípus formájúak. A típus általában a következők egyike: • text: szöveg – ember által is olvasható szöveges formátum, • image: kép, • audio: hang, • video: mozgókép, • application: alkalmazás – általában egy specifikus szoftver által használt formátum), • multipart: több különböző típusú részből álló (többrészes) üzenet.
Példa tartalomtípusra, karakterkódolás megadásával: Content-Type: text/html; charset=utf-8
A MIME szabvány nyitott, lehetőség van egyedi tartalomtípusok regisztrálására. A cégek által használt
saját
tartalomtípusok
általában
application/vnd.gyártó-program
formájúak, ahol a vnd a vendor (forgalmazó) szóból ered. A 4. táblázat néhány gyakran használt tartalomtípust sorol fel.
Típus text
Altípus
Leírás
plain
ASCII szöveg
html
HTML szöveg
javascript
JavaScript kód
27
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
css
CSS stílusdefiníció
jpg
JPG formátumú kép
gif
GIF formátumú kép
png
PNG formátumú kép
audio
mp3
MP3 formátumú hangfájl
video
mpeg
MPEG formátumú videó
application
octet-stream
általános bájtsorozat (nem definiált jelentésű)
vnd.ms-word
MS Word dokumentum
x-shockwave-flash
Flash fájl
mixed
többrészes üzenet
alternative
egy üzenet több különböző formában
form-data
HTML űrlap adatai
image
multipart
4. táblázat: Gyakran használt MIME típusok
Többrészes típusok használata A multipart típusok esetében a Content-Type fejléc attribútumaként definiálni kell egy boundary, azaz határoló stringet, ami elválasztja egymástól az üzenet egyes részeit. A határoló string lehet bármilyen karaktersorozat, ami nem fordul elő az üzenet törzsében, erre a célra gyakran egy véletlen karaktersorozatot használnak. Ezt mindig -- vezeti be, és az utolsó esetében -- zárja le. Minden üzenetrész saját fejléccel rendelkezik, ahol definiálható pl. az adott rész tartalomtípusa (amennyiben az nem az alapértelmezett text/plain).
A multipart/mixed típus lehetővé teszi csatolmányok hozzáillesztését az üzenethez, például képek vagy egyéb fájlok formájában.
28
Dokumentumleíró nyelvek
Szöveges adatok reprezentációja
A multipart/alternative típus (közel) ugyanazt a tartalmat tartalmazza többféle formátumba. Tipikus felhasználási módja, amikor egy email tartalmát szöveges és HTML formában is elküldik. A részek sorrendjét az határozza meg, hogy mennyire felelnek meg az eredetinek. A legjobban megfelelő a végére kerül, míg a legkevésbé megfelelő az elejére. A kliensek általában a legutolsó olyan részt jelenítik meg, amelyet értelmezni tudnak. (Kivételt jelent, ha például egy email kliensben beállítja a felhasználó, hogy a szöveges reprezentációt részesíti előnyben.)
A multipart/form-data típust HTML űrlapot elküldésekor használják.
Egy többrészes üzenet tipikusan a következő módon néz ki:
Mint azt már az előző fejezetben is láttuk, az XML (eXtensible Markup Language) az SGMLből származó általános célú jelölőnyelv. A kifejlesztése hátterében az állt, hogy az SGML túlságosan bonyolult volt, túl sok opcionális lehetőséget tartalmazott, emiatt komplex feldolgozó programot igényelt. Az XML ezzel szemben strukturáltabb, szabványosítottabb, mivel az opcionális elemek többségét elhagyták belőle.
Az XML fájlok lényegében egyszerű szöveges fájlok, így bármilyen szövegszerkesztővel létrehozhatók, amelyek képesek ASCII vagy UTF-8 fájlokat kezelni. Így például elegendő a Jegyzettömb (Notepad) alkalmazás. Léteznek speciális XML szerkesztő programok is, amelyek egyszerűsítik az állományok létrehozását, vagy lehetővé teszik a vizuális szerkesztést.
Bár a Jegyzettömb is megfelel egyszerű XML fájlok szerkesztésére, bonyolultabb vagy nagyobb méretű állományoknál nehezen áttekinthetővé válhat. Ezért ajánlott valamilyen nagyobb tudású szerkesztő használata. A Notepad++ nevű ingyenes alkalmazás számos olyan szolgáltatást nyújt, amelyek segítik az XML szerkesztést, mint például az elemek automatikus lezárása, vagy a kód színezése.
31
Dokumentumleíró nyelvek
Az XML
Az XML leíró jelölést alkalmaz, vagyis nevekkel azonosítja a dokumentum egyes részeit. A nevek jelentését csak a feldolgozó program határozza meg, önmaguknak nem bírnak jelentéssel. Például egy szövegben egy bekezdést tetszés szerint jelölhetünk bekezdes, paragraph, p vagy akár el123 jelöléssel is, kizárólag a feldolgozó programunknak kell tudnia, hogy melyik jelölést használtuk és azt hogyan kell megjelenítenie vagy feldolgoznia. Természetesen célszerű „beszélő” jelöléseket alkalmazni, hogy az XML állomány emberek számára is könnyen értelmezhető legyen. A nevekkel kapcsolatos szabályokról és konvenciókról részletesen a következő fejezetekben lesz szó.
Minden XML dokumentumnak jól formázottnak („well-formed”) kell lennie, azaz meg kell felelnie a következő fejezetekben ismertetett szintaktikai szabályoknak. Ha egy fájl nem jól formázott, akkor az elemző programok nem dolgozzák fel azt. A jól formázottságon túl a dokumentumnak érvényesnek is kell lennie, vagyis meg kell felelnie a felhasználó által meghatározott tartalmi szabályoknak. Ilyen tartalmi szabály lehet az, hogy egy adott elem milyen típusú értéket tartalmazhat (pl. szám vagy dátum), vagy milyen elemeknek kell kötelezően szerepelniük.
A jól formázottság legegyszerűbben úgy ellenőrizhető, ha elmented az XML-t szöveges fájlként, és megnyitod azt egy böngészőben. Ha jól formázott, akkor megjelenik az XML struktúra, ellenkező esetben egy hibaüzenettel találkozol.
32
Dokumentumleíró nyelvek
Az XML
3.2 Az XML nyelvi elemei 3.2.1 XML deklaráció Minden XML dokumentum egy deklarációval kezdődik, amely jelzi, hogy egy XML fájlról van szó. Az XML deklaráció szintaxisa a következő:
A deklaráció mindig a fájl legelején kell, hogy szerepeljen, azt semmilyen más karakter nem előzheti meg. A verziószám használata kötelező, értéke általában 1.0. Létezik ugyan egy 1.1es verzió, ám ezt ritkán használják, legfeljebb akkor, ha annak valamilyen speciális jellemzőjére van szükség. Az encoding attribútum a fájl karakterkódolását adja meg, célszerű az UTF-8-at használni. Az XML feldolgozók általában képesek a karakterkódolás automatikus detektálására, ezért a használata opcionális, de megbízhatóbb, ha mindig megadjuk a használt kódolást. Ez akkor is hasznos, ha később kézzel kell szerkeszteni a dokumentumot. A standalone attribútum azt jelzi, hogy a dokumentum hivatkozik-e külső állományokra (pl. DTD-re, ld. 6.1. fejezet). Ha igen, akkor az értéke mindig no.
3.2.2 Elemek Az XML terminológiája elemnek nevezi a dokumentum logikai-szerkezeti egységeit. Minden elem egy nyitó tagből (szintaxisa: ), egy tartalomból és egy záró tagből (szintaxisa: ) áll. Amennyiben egy elem tartalma üres, akkor a nyitó és záró tag összevonható, vagyis az helyett használható az jelölésmód is. 33
Dokumentumleíró nyelvek
Az XML
Az elemnevek nincsenek előre definiálva, bármilyen nevet használhatunk, ami megfelel néhány szabálynak. A nevek betűket, számokat, pontokat, kettőspontokat, kötőjelet, aláhúzást tartalmazhatnak. Ékezetes nevek használata is megengedett, nem tartalmazhatnak viszont szóköz, tabulátor, sorvége (azaz ún. whitespace) karaktereket. Minden névnek betűvel, aláhúzással, esetleg kettősponttal kell kezdődnie. Fontos, hogy az elemnevek kis- és nagybetű érzékenyek, tehát az <elemnév>, <ELEMNÉV>, <ElemNév> és <elemNév> mind eltérő tagnek számít. Ebből az is következik, hogy a nyitó és záró tag írásmódjának pontosan meg kell egyeznie. Célszerű kisbetűs neveket használni, hosszabb összetett neveknél pedig az összetétel
második
és
további
tagjait
nagybetűvel
kezdeni
(pl.
). Fontos, hogy ha eldöntöttünk egy konvenciót, akkor ahhoz következetesen ragaszkodjunk, tehát pl. ne keveredjenek a kis-, nagy- és vegyes betűs nevek. Célszerű beszélő neveket alkalmazni, de a túl hosszú nevek használata is kerülendő. Jó kompromisszum lehet, ha a gyakran használt elemeknek rövid, a ritkábban használtaknak hosszabb nevet adunk.
Az elemek tetszőleges mélységig egymásba ágyazhatók, azaz egy elem tartalma lehet egy vagy több másik tag is. A hierarchia legfelső szintjén csak egy elem lehet, ez az ún. gyökér (root) elem, minden más elem ebbe van ágyazva egy vagy több mélységi szinten. Az egymásba ágyazott elemeket szülő (parent) ill. gyermek (child) elemnek nevezzük. Az elemek között bármennyi szóköz, tabulátor vagy újsor karakter lehet, tehát ugyanazt a dokumentumot lehet folyamatosan egy sorba írni vagy minden elemet új sorba, tabulátorokkal mélység szerint rendezve megadni. A jobb olvashatóság miatt a második módszer ajánlott.
34
Dokumentumleíró nyelvek
Az XML
A továbbiak néhány példán szemléltetjük a helyes és hibás XML dokumentumokat.
Cserép VirágBudapest XIII.Ebéd ElekKistarcsa
Ebben a példában két elem is szerepel a legfelső hierarchia-szinten, azaz nincs gyökérelem, tehát ez az XML részlet hibás. A kijavításához ki kell egészíteni egy befoglaló elemmel, amely magába ágyazza az összes elemet. Ilyen esetekben ezt célszerű az felsorolt elemek többes számú alakjaként, azaz -nak elnevezni. A javított XML a következő formát ölti:
Cserép VirágBudapest XIII.Ebéd Elek 35
Dokumentumleíró nyelvek
Az XML
Kistarcsa
A következő példán egy kiemeléssel ellátott, linkként megjelölt szövegrészt láthatunk: ... link szövege...
Itt nem egyezik a nyitó és záró tagek sorrendje, emiatt a részlet nem jól formázott. A záró tageknek mindig a nyitó tagekhez képest fordított sorrendben kell szerepelniük. Tehát a példa helyesen: ... link szövege...
3.2.3 Attribútumok Az XML attribútumok az elemekhez adott paraméterek, amelyek módosíthatják vagy pontosíthatják azok jelentését. Az attribútumokat mindig az elem kezdő tagében kell megadni, attribútum_név="attribútum_érték" formában. Az értéket lehet idézőjelek (") és aposztrófok (’) közé is tenni. Az elemnek bármennyi attribútuma lehet, ezeket és az tagnevet szóköz választja el.
Az attribútum nevekre nincsenek külön szabályok, az elem neveknél ismertetettek ezekre is érvényesek. Az attribútum neveket rendszerint kisbetűkkel írjuk, de a nagybetűk használata is megengedett. 36
Dokumentumleíró nyelvek
Az XML
Van két beépített attribútum, amelyekre érdemes kitérni. Az egyik ilyen az xml:lang, amely az elemben tárolt szöveg nyelvét jelöli. Az értékre többfajta jelölés is alkalmazható: •
ISO 639 szabvány szerinti kétbetűs nyelvkódok: pl. en, hu
•
Felhasználó által definiált kód, amely x-szel kezdődik, pl. x-hungarian
•
IANA-nál regisztrált kód, amely i.vel kezdődik, pl. i-hungarian
•
Országot és nyelvet jelölő kód, pl. en-US, en-GB
A másik beépített attribútum a szóközök és más, jelentés nélküli karakterek kezelését határozza meg. Ha az xml:space="preserve" attribútum be van állítva, akkor az elem minden karakterét jelentéssel bírónak kell tekinteni, vagyis meg kell őrizni. Ez akkor hasznos, ha egy elemben előre formázott szöveget kell tárolnunk, például tabulátorokkal vagy szóközökkel formázott programkódot.
Az attribútum érték bármilyen string lehet, ami nem tartalmazza a határoló jelet. Azaz ha az értéket idézőjelek közé tettük, akkor tartalmazhat aposztrófot, de idézőjelet nem, és fordítva ugyanígy. A következők tehát helyesek: •
attr="érték ’érték2’"
•
attr=’érték "érték2"’
Ezek viszont hibásak: •
attr="érték "érték2""
•
attr=’érték ’érték2’’
•
attr="érték1 ’érték2’ "érték3""
37
Dokumentumleíró nyelvek
Az XML
Amennyiben mégis szerepelnie kell a határoló karakternek az értékben, akkor azt entitásként kell kódolni. Az entitásokról a következő fejezetben olvashatsz.
Ugyanazt az információt sokszor le lehet írni gyermek elemként és attribútumtól is, a választás a tervezőn múlik. Például egy név tárolható így is: ZöldAlma
És így is:
Általános szabályként elmondható, hogy az attribútumok általában többlet információval látják el, jellemzik az elemet, míg az elemek a dokumentum szerkezeti összetevőit jelölik. A határvonal azonban sokszor elmosódik a kettő között. Az azonban fontos, hogy ha egy információt tovább szeretnénk bontani, akkor azt csak elemként tehetjük meg.
3.2.4 Entitások Az XML entitás lényegében egy névvel azonosított szövegtöredék, amelyet egyszer kell definiálni, majd az XML dokumentumba bárhová beilleszthetjük. A dokumentum feldolgozásakor a parser minden ilyen hivatkozást behelyettesít az entitás tartalmára. A szöveg, amelyre az entitás hivatkozik, lehet egy karakter vagy akár egy hosszabb szövegrész is. Az entitások jellemző használati módjai a következők: 38
Dokumentumleíró nyelvek
Az XML
•
Az XML-ben speciális jelentéssel bíró karakterek kódolása (pl. <, >).
•
A használt karakterkódolásból hiányzó karakterek szövegbe illesztése, pl. ISO-8859-2 szövegbe görög betűk. Az entitások ilyen használata az UTF-8 terjedésével visszaszorulóban van.
•
Külső fájlban tárolt adatok átemelése az aktuális dokumentumba.
•
A dokumentumban gyakran előforduló szövegrészek rövidítése, különösen, ha azok változhatnak.
Az entitásokra mutató hivatkozások egy & („és”) jellel kezdődnek és pontosvesszővel végződnek, közöttük pedig az entitás neve szerepel. Például egy mű szerzőjére hivatkozhatunk az &author; entitással.
Az egyes karakterekre hivatkozhatunk közvetlenül a (Unicode) karakterkódjukkal, ekkor az karakterkód; formát kell használni. A decimális kódon kívül használhatunk hexadecimális karakterkódokat is, ilyenkor a hivatkozás a karakterkód; formát ölti. A speciális karakterek helyett használandó entitásokat az 5. táblázat mutatja.
Karakter
Entitásnév
Decimális ASCII kód
<
< [less than]
<
>
> [greater than]
>
&
& [ampersand]
&
'
' [apostrophe]
'
"
" [quote]
"
5. táblázat: Speciális karaktereket helyettesítő entitások
39
Dokumentumleíró nyelvek
Az XML
3.2.5 Megjegyzések Az XML dokumentumba el lehet helyezni megjegyzéseket, amelyeket a feldolgozó program nem vesz figyelembe. Ezek a dokumentumot olvasó vagy szerkesztő emberek számára hordoznak plusz információkat. A megjegyzések lehetnek egy vagy többsorosat, formájuk a következő:
3.2.6 CDATA Amint az előzőekben láttuk, az XML-ben bizonyos jelentéssel bíró karaktereket entitásokra kell cserélni ahhoz, hogy a dokumentum feldolgozható legyen. Ha azonban sok ilyen szerepel benne, akkor a használatuk kényelmetlenné válik, a kimenet nehezen olvasható lesz. Ez akkor fordulhat elő, ha például HTML szöveget szeretnénk egy XML elem tartalmaként tárolni (a HTML ugyanis az XML-hez nagyon hasonló szintaxist használ; a részletekről a későbbi fejezetekben olvashatsz). Ilyenkor hasznos a CDATA (azaz character data) blokkok használata. A CDATA blokkban lévő karaktersorozatot a feldolgozó nem próbálja értelmezni, hanem a kimenetben is eredeti formájában jelenik meg. (Egyedül a CDATA blokkot lezáró karaktersorozat megjelenése okozhat feldolgozási hibát.) A CDATA blokkok szintaxisa a következő:
A
CDATA
blokkban
<>
karakter
szerepelhet, azok "jelentés nélküliek" lesznek. ]]>
40
Dokumentumleíró nyelvek
Az XML
3.2.7 Dokumentum-típus deklaráció Az XML deklarációt opcionálisan követheti egy dokumentum-típus deklaráció (Document Type Declaration, DTD), amely a dokumentum szerkezetére vonatkozó szabályokat definiál. A DTD megadja, hogy milyen elemek használhatók a dokumentumban, azokat hogyan lehet hierarchiába rendezni, milyen attribútumaik lehetnek, melyik elemek és attribútumok használata kötelező, definiálhat entitásokat stb. Megadható például, hogy a gyogyszerek dokumentumtípus tetszőlege számú gyogyszer elemből álljon, amelyek rendelkeznek egy egyedi id attribútummal, valamint egy-egy nev, hatoanyag, forma és kiszereles gyermek elemmel. A definíciók tárolhat külső fájlban vagy a dokumentumba beillesztve. A dokumentum-típus deklaráció általános formája a következő:
A deklaráció elemei a követezők: • Név: az XML dokumentum gyökér elemét azonosítja • Kulcsszó: értéke lehet SYSTEM, ha a dokumentum típus egy személy vagy szervezet által használt, vagy PUBLIC, ha szabványosított vagy széles körben használt típusról van szó. • Külső_azonosító: külső DTD használata esetén hivatkozás a definíciót tartalmazó fájlra. SYSTEM típus esetében ez általában egy relatív vagy abszolút útvonal, PUBLIC esetében pedig egy publikus név és egy URL. • Definíciók: belső definíciók használata esetén szögletes zárójelben ([ ]) kell felsorolni a definíciókat.
41
Dokumentumleíró nyelvek
Az XML
A DTD definíciókban használható jelölésekről részletesen az 6.1 fejezetben olvashatsz. A Következőkben néhány példát olvashatsz a lehetséges dokumentum-típus deklarációkra. Külső, SYSTEM típusú deklaráció:
Belső, SYSTEM típusú deklaráció: ]>
A külső és belső deklarációk vegyesen is alkalmazhatók: ]>
PUBLIC típusú deklaráció:
42
Dokumentumleíró nyelvek
A HTML
4 A HTML
4.1 HTML alapelvek A HTML (Hypertext Markup Language) egy olyan jelölőnyelv, amelyet weboldalak készítéséhez fejlesztettek ki. A legegyszerűbb esetben egy weboldal tartalma HTML fájlok formájában van tárolva egy szerveren. Amikor egy böngészőben beírjuk az oldal címét, akkor a böngésző a hálózaton keresztül letölti a megfelelő fájlt, értelmezi annak tartalmát és megjeleníti az oldalt. A weboldalak szövegében linkek helyezhetők el, amelyek más weboldalakra vagy fájlokra (pl. képek, videók) mutatnak. Így egy hálózatos szerkezetű, számos ponton kapcsoló információhalmaz alakul ki, amelyet hiperszövegnek, ill. audiovizuális információk használata esetén kiterjesztve hipermédiának nevezünk. A HTML nyelv a következő elemtípusok használatát teszi lehetővé: • Strukturális elemek: a szövegrész „célját” határozzák meg, mint például címsorok, listák, táblázatok • Prezentációs elemek: a szövegrész megjelenését (pl. aláhúzott, félkövér) határozzák meg. A korai weboldalakon gyakori volt a használatuk, a modern oldalakon azonban felváltotta a CSS használata (ld. 5. fejezet), amely lehetővé teszi a tartalom és a megjelenés szétválasztását. • Hiperszöveg elemek: linkek, amelyek lehetővé teszik a kapcsolatot a dokumentum részei ill. más dokumentumok között. • Eszköz elemek: interaktív űrlapok (gombok, beviteli mezők) létrehozását teszi lehetővé.
43
Dokumentumleíró nyelvek
A HTML
4.2 A HTML verziói A HTML-nek több verziója is van, amelyek ugyanazokra az alapokra épülnek, de néhány szabályban különböznek egymástól. A különböző verziók részben egymással párhuzamosan élnek. Ebben a fejezetben áttekintjük a legfontosabb verziókat és azok különbségeit.
HTML A HTML első verziója egyidős a webbel, mindkettő 1990 körül alakult ki. A nyelvet folyamatosan bővítették, finomították, szabványosították, jelenleg a 4.01-es verzió terjedt el széles körben. Azonban minden verzió ugyanazokra az alapokra épül, mégpedig az SGML általános leíró nyelvre.
XHTML Az XHTML abban különbözik a HTML-től, hogy az SGML helyett az XML-re épül, ami lényegében
szigorúbb
formai
követelményeket
jelent.
Egy
érvényes
XHTML
dokumentumnak meg kell felelnie mindazoknak az előírásokban, amelyeket a 3. fejezetben ismertél meg. Jelenleg az 1.1-es XHTML verziót használják. (Elkezdődött ugyan egy 2.0-ás verzió specifikálása, amely azonban nem készült el). Az XHTML 1.1 elemkészlete megfeleltethető a HTML 4.01-es verziónak.
Még egyszer összefoglaljuk, hogy a XHTML-ben milyen szabályoknak kell megfelelni: •
Minden taget le kell zárni, üreseket és szöveget tartalmazókat egyaránt.
•
Az elemeket megfelelő sorrendben kell egymásba ágyazni.
•
A tagek és attribútumok nevét kisbetűkkel kell írni.
•
Az attribútum-értékeket idézőjelbe (vagy aposztrófok közé) kell tenni. 44
Dokumentumleíró nyelvek •
A HTML
Minden attribútumot név="érték" formában kell megadni, az érték nem hagyható el.
HTML5 A HTML legújabb, 5-ös verziója jelentős újdonságokat tartalmaz, ezért szokás megkülönböztetően HTML5 néven hivatkozni rá. A HTML5 újdonságai közé tartozik például a videók és audio fájlok egyszerűbb beillesztése vagy az újfajta beviteli mező típusok. A HTML5 visszafelé kompatibilis a korábbi verziókkal, a HTML 4.01-en alapul. A böngészők fejlesztése során folyamatosan építik bele a HTML5 elemeinek támogatását, de az egyes elemek elérhetősége böngésző- és verziófüggő.
4.3 Az (X)HTML elemkészlete 4.3.1 (X)HTML deklaráció Mivel minden XHTML dokumentum érvényes XML dokumentum kell, hogy legyen, az XHTML-ben a már megismert deklarációk használhatók. Példa XHTML deklarációra, amely XML és DOCTYPE deklarációt is tartalmaz:
A CSS stílusok egy része régebbi Internet Explorer verziókban csak akkor működik, ha van DOCTYPE deklaráció megadva. Ezért bár nem kötelező a használata, erősen ajánlott mindig megadni. Ezen felül, ha nincs megadva dokumentumtípus, akkor a 45
Dokumentumleíró nyelvek
A HTML
böngésző megpróbálja kitalálni, hogy milyen szabványt használtunk az elkészítésénél. Ilyenkor azt feltételezi, hogy a dokumentum nem a jelenlegi szabványok szerint készült, hanem a régebbi módszerekkel, a régebbi böngészőkben való használatra. Az oldal ilyenkor is megjelenik, de nagyobb valószínűséggel eredményez nem várt kinézetet.
A dokumentumtípus tehát azt adja meg, hogy az adott oldal milyen (X)HTML verziót használ. Ez két dologra használatos: egyrészt a böngésző ez alapján dönti el, hogyan jelenítse meg az oldalt, másrészt a dokumentum érvényességét ellenőrző validátor programok (ld. 6.2. fejezet) is ez alapján dolgoznak.
A DOCTYPE először is azt határozza meg, hogy az oldal HTML-t vagy XHTML-t használ, valamint a szabvány verziószámát is megadja. Ezen kívül akár HTML-t, akár, XHTML-t használunk, háromféle dokumentumtípusból választhatunk. • Strict: a legújabb szabványnak megfelelő dokumentumtípus, az elavult, megjelenítést befolyásoló elemek használata nem megengedett (tehát nem lehet a HTML-ben megadni például a betűtípust, színt vagy félkövér formázást). • Transitional: kevésbé szigorú szabvány, megengedi a formázási elemek használatát is. A régebbi oldalakkal való kompatibilitást teszi lehetővé, de a használata kerülendő. • Frameset: megengedi a frame-k, azaz keretek használatát. A frame egy régebbi módszer volt a dokumentum részekre bontására, amelyekbe egymástól függetlenül lehetett HTML oldalakat betölteni. Általában menük készítésére használták: az egyik frame tartalmazta a menüt (például felül vagy balolodalt), az ebben lévő linkekre kattintva pedig megnyílt a tartalom a másik frame-ben. Ez a technika szintén elavultnak számít, használata nem javasolt. 46
Dokumentumleíró nyelvek
A HTML
Az XHTML gyökéreleme (mint az az előbbi példa deklarációból is látszik), mindig html. Az xmlns attribútum segítségével definiálhatjuk, hogy egy XHTML dokumentumról van szó, az opcionális xml:lang attribútum pedig a dokumentum nyelvét adja meg.
4.3.2 Head és body Minden HTML dokumentum két fő részből áll, egy fejlécből () és egy törzsből (). A head elem olyan információkat foglal magába, amelyek általában nem jelennek meg közvetlenül a dokumentumban, de fontos információkat tartalmaznak a helyes megjelenítéshez. A body elem tartalmazza a megjelenítendő dokumentumot. A head elemen belül az alábbi elemek használhatók:
A definiálja az oldal címét, amely a böngésző címsorában jelenik meg, továbbá a keresők is ezt jelenítik meg a találati oldalon.
A elem segítségével külső erőforrásokra hivatkozhatunk, a leggyakrabban CSS stíluslapok behívására használják. A rel attribútummal adhatjuk meg a linkelt erőforrás és a dokumentum kapcsolatát, például stílusdefiníció esetében rel="stylesheet" értéket kell használni. A type attribútum adja meg az erőforrás MIME-típusát, például text/css formában. A href attribútumban kell definiálni az erőforrás URL-jét, azaz elérési útvonalát. A media attribútum segítségével megadhatjuk, hogy milyen eszközön legyen használva a hivatkozott fájl, ezzel lehetőség van például eltérő megjelenést definiálni képernyő (screen) vagy nyomtatott dokumentum (print) számára. 47
Dokumentumleíró nyelvek
A HTML
A <style> elem lehetővé teszi a stílusdefiníciók elhelyezésété a dokumentumon belül. Kötelező megadni a type attribútumot, amelynek értéke mindig text/css. Itt is használható a media attribútum ugyanúgy, mint a link elemnél.
A <meta> elem segítségével metaadatokat adhatunk a weblaphoz, amelyeket a böngésző vagy valamilyen webes szolgáltatás (pl. keresők) tudnak hasznosítani. Minden metaadat definíció tartalmaz egy name és egy content attribútumot, amelyek értelemszerűen a meataadat típusát és értékét adják meg. A leggyakoribb metaadatok a következők: • Description: az oldal tartalmának néhány mondatos leírása • Keywords: kulcsszavak vesszővel elválasztott listája • Author: a dokumentum szerzője • Generator: a program neve, amely létrehozta az oldalt • Owner: a dokumentum tulajdonosa
A name helyett használható a http-equiv is, ha HTTP header információt szeretnénk szimulálni: • Content-type: megadja az oldal MIME típusát (text/html) és karakterkódolását • Date: az oldal létrehozásának időpontját adja meg • Last-modified: az utolsó módosítás időpontja • Expires: az oldal lejáratának (elévülésének) időpontja • Location: átirányít egy másik oldalra • Refresh: automatikusan újratölti az oldalt a megadott gyakorisággal Egy XHTML dokumentum alapstruktúrája a kövekező: 48
Dokumentumleíró nyelvek
A HTML
Az oldal címe <meta name="description" content="ide jön a leírás"/> <meta name="keywords" content="HTML, XHTML, web"/> <meta http-equiv="Content-type" content="text/html;charset=utf-8"/> <style type="text/css">
49
Dokumentumleíró nyelvek
A HTML
4.3.3 Bekezdések és szövegformázás A HTML-ben az összefüggő szövegeket bekezdésekbe rendezzük, amelyeket a
(paragraph) tag jelöl. A böngészők a bekezdéseket automatikusan új sorban jelenítik meg. A bekezdésen belüli új sorokat nem veszik figyelembe, ahogy a tabulátorokat és többszörös szóközöket sem. Minden
és
közötti szöveg folyamatosan, sortörések nélkül jelenik meg. Ha új sort szeretnél kezdeni, akkor vagy új bekezdést kell kezdeni, vagy pedig sortörés ( ) elemet kell beszúrni.
Ha meg szeretnéd tartani a tördelést, akkor a szöveget <pre> és tagok közé kell tenni. Ez a tag előre formázott (pre-formatted) szövegrészt jelöl, amely megtart minden sortörést és szóközt, emiatt alkalmas például kódrészletek leírására. A böngészők általában fix szélességű betűtípussal (pl. Courier) jelenítik meg. Nézzük a következő példát: <pre> function factor(base) { var factor = 1; for (i=2; i<=base; i++) { factor = factor * i; } return factor; }
A példa kimenete: function factor(base) { 50
Dokumentumleíró nyelvek
A HTML
var factor = 1; for (i=2; i<=base; i++) { factor = factor * i; } return factor; }
A HTML lehetővé teszi bizonyos formázások meghatározását, ezek használata azonban nem javasolt. A HTML a dokumentum tartalmát, struktúráját definiálja, míg a megjelenését ettől függetlenül, CSS segítségével adjuk meg. Lehetőség van azonban kiemelések beillesztésére a <strong> és az <em> tagek segítségével. Előbbiek általában félkövéren, utóbbiak dőlten jelennek meg alapértelmezés szerint. Fontos kiemelni, hogy ez a két tag csak annyit jelent, hogy a megjelölt szövegrész valamilyen értelemben fontos, kiemelendő, nem pedig konkrét formázási utasítást jelöl. A weboldal szerkesztője szabadon megválaszthatja, hogy milyen módon jelenjenek meg ezek a szövegrészek, használhat például eltérő színnel történő kiemelést is.
A szövegben megadhatunk <strong>kiemeléseket és <em>hangsúlyos részeket is.
A fenti példa a következőképpen jelenik meg az alapértelmezett beállításokkal: A szövegben megadhatunk kiemeléseket és hangsúlyos részeket is.
További formázási lehetőségként használhatunk alsó indexbe (<sub>) és felső indexbe (<sup>) tett szövegeket.
A víz vegyjele: H<sub>2O.
Einstein híres egyenlete: E = m*c<sup>2.
51
Dokumentumleíró nyelvek
A HTML
A fenti példa kimenete: A víz vegyjele H2O. Einstein híres egyenlete: E = m*c2.
Léteznek speciális HTML tagek, amelyekkel különböző szövegrészeket jelölhetünk, mint például idézeteket, rövidítéseket, definíciókat, beszúrt vagy törölt szöveget. Ezeket a gyakorlatban ritkán használják, így most nem térünk ki a használatukra. A használható
4.3.4 Címsorok A HTML szabvány hat szintű címsort (headinget) definiál, amelyet a
,
…
tagek jelölnek. A h1 jelöli a legfelső szintű, azaz legfontosabb címsort. A címsorok használata segít strukturálni a szöveget. Főleg hosszabb dokumentumok esetében hasznos kiemelni az egyes szakaszokat. A böngészők a címsorokat általában félkövéren és nagyobb betűkkel emelik ki, a h1-et legnagyobb betűkkel, a mélyebb szinteket pedig egyre kisebbekkel.
52
Dokumentumleíró nyelvek
A HTML
4.3.5 Listák A HTML-ben kétfajta listát lehet létrehozni: a sorszámozott listát (ordered list), a felsorolt listát
(unordered list) jelöli. Mindkét listatípuson belül az elemeket
tag jelöli. A listákat egymásba is lehet ágyazni, mint az alábbi példa is mutatja:
Első elem
Második elem
Altípus 1
Altípus 2
Harmadik elem
Ezt a példát a böngésző a következőképpen jeleníti meg: 1. Első elem 2. Második elem •
Altípus 1
•
Altípus 2
3. Harmadik elem
53
Dokumentumleíró nyelvek
A HTML
4.3.6 Linkek A linkek a weboldalak legfontosabb elemei közé tartoznak, ezek segítségével lehet ugyanis kapcsolatot teremteni különböző oldalak között. A link olyan szövegrész (vagy kép), amelyre kattintva a felhasználó egy másik oldalra, vagy az aktuális oldal egy meghatározott pontjára ugorhat. A legtöbb böngésző alapértelmezetten aláhúzva és kék színnel jeleníti meg a linkeket. A linkek alapszintaxisa a következő: Kattints ide!
A href attribútum adja meg a link célját, ez több fajta is lehet: •
Relatív útvonal, pl. masikoldal.html
•
Abszolút útvonal, pl. http://www.oep.hu
•
Könyvjelző az aktuális oldalon belül, pl. #labjegyzet
•
Könyvjelző egy másik oldalon, pl. http://www.oldalam.hu/rolam.html#elerhetoseg
Könyvjelzőt a name vagy id attribútummal lehet létrehozni. A két jelölésmód egyenértékű. A name használata konvencionális, de a HTML5 szabvány az id használatát írja elő. Mivel ez működik a korábbi verzióban is, célszerű áttérni ennek a használatára. A könyvjelzők hasznosak például, ha egy hosszabb dokumentum elején vagy végén tartalomjegyzéket szeretnénk létrehozni. LábjegyzetLábjegyzet
A target attribútum azt adja meg, hogy hol nyíljon meg a linkelt oldal. A következő értékek használhatók: 54
Dokumentumleíró nyelvek
A HTML
Érték
Leírás
_self
Aktuális böngészőlap vagy keret
_blank
Új ablak vagy lap
_parent
Az aktuális lap vagy keret szülőjében
_top
Legfelső keret (vagyis a teljes lap) 6. táblázat: Target attribútum értékei
4.3.7 Képek A HTML lehetővé teszi a szövegen kívül más médiaformátumok, mindenekelőtt képek használatát is. A képek beillesztésére az tag szolgál, melynek attribútumai a következők: •
Src: a kép forrása, azaz az elérési útvonala
•
Alt: alternatív szöveg, amely akkor jelenik meg, ha a böngésző nem tudja letölteni a képet. A képernyőolvasó programok is ezt használják.
•
Height: a kép magassága pixelben megadva
•
Width: a kép szélessége pixelben megadva
A szélesség és a magasság megadása opcionális, de ajánlott mindig használni.
Példa az img használatára:
src="book.jpg"
alt="Ez
egy
könyv"
height="150"
width="400" />
Ha a képet linkként szeretnéd használni, akkor egyszerűen illeszd be egy elembe: 55
tag segítségével lehet készíteni. A táblázat sorait a
(table row) tag definiálja, a cellákat
(table data). A táblázat cellái tartalmazhatnak szöveget, képeket, listákat, linkeket, beágyazott táblázatokat stb. A table tag border attribútuma a táblázat keretének vastagságát adja meg pixelben. (Összetettebb keretet a CSS segítségével készíthetünk.) Egy egyszerű táblázatot a következőképpen készíthetünk:
08:00
dr. Gipsz Elek
vakbél
09:00
dr. Joó Áron
porckorongsérv
A fenti példa egy műtő beosztását mutatja, amely a böngészőben a következő formát ölti: 56
Dokumentumleíró nyelvek
A HTML
08:00
dr. Gipsz Elek
vakbél
09:00
dr. Joó Áron
porckorongsérv
Ha a táblázatunkhoz fejlécet szeretnénk adni, akkor használjuk a
taget! A fejléc celláit td helyett ebbe kell tenni.:
Időpont
Orvos neve
Műtét típusa
...
A böngészők a fejlécet általában félkövéren és középre zártan jelenítik meg. Időpont
Orvos neve
Műtét típusa
08:00
dr. Gipsz Elek
vakbél
09:00
dr. Joó Áron
porckorongsérv
Lehetőség van a táblázat soraihoz jelentés rendelni, azaz megadni, hogy mely sorok alkotják a táblázat fejlécét, törzsét és láblécét. Ehhez a , és elemek használhatók. Ez akkor lehet hasznos, ha például egy hosszú táblázat nyomtatásánál minden oldal tetején ill. alján meg szeretnénk ismételni a fejlécet ill. a láblécet, vagy ha a táblázat törzsét a fejléctől és lábléctől függetlenül szeretnénk görgetni. Mindhárom elemet közvetlenül a table gyermekeként, a tr-ek szülőjeként kell megadni:
57
Dokumentumleíró nyelvek
A HTML
...
... ...
Bonyolultabb táblázatok létrehozásakor hasznos a td tag colspan és a rowspan attribútuma. Előbbi segítségével oszlopokat, míg utóbbival sorokat lehet összevonni. Mindkét attribútum értéke azt mondja meg, hogy hány sor ill. oszlop kerüljön összevonásra. Tekintsük a következő példát:
A1
B1-2
C1
A2
C2
58
Dokumentumleíró nyelvek
A HTML
A-B-C3
Az előbbi példa kimenete: A1
B1-2
A2
C1 C2
A-B-C3
4.3.9 Csoportosító elemek A HTML elemeknek két alapvető típusát különböztethetjük meg: • A block elemek elé és mögé a böngészők sortörést helyeznek el. Ilyen elemek a p, h1, ul, table stb. • Az inline elemek sortörés nélkül, folyamatosan jelennek meg a szövegben. Ilyenek pl. a strong, em, a, img.
Lehetőség van az alapértelmezett megjelenés felülírására is. Ha például egy lista elemeit egymás mellett, horizontálisan szeretnéd elrendezni, akkor az ul elem megjelenését inline-ra kell állítani az alapértelmezett block helyett.
59
Dokumentumleíró nyelvek
A HTML
A HTML kétfajta csoportosító elemet kínál: a
block típusú, a <span> inline típusú. Közös jellemzőjük, hogy nincs speciális jelentésük, a kimenetben nem jelennek meg közvetlenül, mindössze a div esetén kerül elé és mögé egy-egy sortörés. A szerepük szövegrészek vagy más elemek csoportosításában van. A fő használati módjuk a stílusok alkalmazásakor van. A div kiválóan alkalmas például az oldal elrendezésének elkészítéséhez, hasábok, menük, oldaldobozok készítésére. A stílusokról bővebben a 5. Fejezetben olvashatsz.
4.3.10 További elemek A HTML egy fontos és gyakran használt eszköze az űrlap, amelynek segítségével interaktívvá lehet tenni a weboldalakat. Az űrlapokon keresztül a felhasználó adatokat vihet be, amelyeket a szerver képes feldolgozni és műveleteket végrehajtani velük. Az űrlapok használatát a Weblabor tantárgy 2. moduljában tanulhatod meg. A weboldalakba rövid programokat, úgynevezett szkripteket is be lehet illeszteni, amelyek szintén az interaktivitást növelik, dinamikussá tehetik az oldalakat. Erről a 3. modulban tanulhatsz. Viszonylag gyakran használt elem még az