Az XML leíró nyelv Szabályok XHTML írásra Tartalom 1. Az XML és XHTML nyelvek .........................................................................................................1 1.1. Az XML leíró nyelv..................................................................................................................1 1.1.1. Néhány alapvető nyelvi elem ...........................................................................................2 1.1.1.1. Az XML deklaráció...................................................................................................2 1.1.1.2. Elemek és az elemek tulajdonságai...........................................................................2 1.1.1.3. Entitások....................................................................................................................4 1.1.1.4. Vezérlő utasítások ....................................................................................................4 1.1.2. Az XML dokumentumok jól formázottsága.....................................................................5 1.1.3. Az XML dokumentumok modellezése és érvényessége...................................................5 1.1.3.1. A DTD alapú típus megadás ...................................................................................5 1.1.3.2. Az XML Schema.......................................................................................................7 1.1.4. Az XML dokumentumok megjelenítése ..........................................................................8 1.1.5. XML transzformációk (XSLT).........................................................................................8 1.1.6. XML állományok feldolgozása.......................................................................................10 1.2. Az XHTML nyelv ..................................................................................................................12 1.3. Szabályok XHTML írásra.......................................................................................................12 1.3.1. A DTD-k.........................................................................................................................12 1.3.2. A HTML elem szintaxisa................................................................................................12 1.3.3. Az XHTML írásának fontosabb szabályai......................................................................12 1.3.4. Kiinduló sablon...............................................................................................................14
1.
Az XML és XHTML nyelvek
1.1. Az XML leíró nyelv Az XML - eXtensible Markup Language – ugyancsak az SGML-re épülő jelölő vagy leíró nyelv, és amint neve is állítja, egy bővíthető nyelv. Gyakorlatilag bármilyen strukturált adat illetve információ leírására alkalmas. A nyelvet a W3C specifikálta. Amikor a konzorcium munkája sokirányú lett, egy olyan leíró nyelvre volt szüksége amelyik kifejező, jól ellenőrizhető és elég rugalmas. A HTML nem felelt meg ezeknek a feltételeknek. Ezért a W3C HTML után egy olyan nyelvet standardizált amivel gyakorlatilag bármilyen Interneten közlekedő információt ábrázolni lehet, ugyanakkor szintaxisa szigorúbb. Alkalmazási területei szélesek: így a W3C 1999 utáni standardjait ezzel fogalmazta meg. A nyelv elsődleges célja az adatok leírása és információ megosztása Interneten használt technológiák számára. A nyelvet egy külső szakértő, Tim Bray segítségével specifikálták 1996 és 1999 között,a ki létrehozta a nyelv egy előzetes változatát dokumentum kezelési feladatokra. Az első specifikációt 1
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
1998-ban véglegesítették. Mindmáig ez az 1.0-ás verzió legelterjedtebb, bár létezik 1.1-es specifikáció.
1.1.1. Néhány alapvető nyelvi elem Egy nagyon egyszerű XML dokumentum pl. az alábbi: <modul id="első"> HTML jelölőnyelv <segedanyag>Füzet I. <eloado>Szabó László 2009. március 20. <modul id="második"> CSS Stíluslapok <segedanyag>Füzet II. <eloado>Szabó László 2009. március 20.
Az XML dokumentumok felépítő elemei az alábbiak: • • • • •
az XML deklaráció elemek és az elemek tulajdonságai entitások vezérlő utasítások névterek
1.1.1.1. Az XML deklaráció
A dokumentum első deklarációja az un. XML deklaráció vagy prológus. Ez megadja a nyelv verzióját és a használt karakterkészletet:
Az 1.0 a verziószám, a karakterkódolás a fenti esetben UTF-8. Az UNICODE illetve UTF-8 karakterkészletet deklaráltan jól kezeli a nyelv: így gyakorlatilag bármilyen szöveg ábrázolható és feldolgozható a segítségével. A fenti példa még egy információt tartalmaz: a dokumentum használható-e önmagában, vagy szüksége van külső dokumentumokra is. 1.1.1.2. Elemek és az elemek tulajdonságai
Az elemek (element) egy fa szerű struktúrát hoznak létre, egyetlen gyökér elemmel. A szintaxis szigorú: minden elemnek nyitó és záró címkével (tag) kell rendelkeznie: CSS Stíluslapok
és ezek nem fedődhetnek át. Ha egy elem csak egy címkével rendelkezik, akkor ezt jelzi a szintaxis a záró > jel helyett helyett a /> sorozattal:
2
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
Az elemek nem korlátozódnak egy rögzített halmazra mint a HTML: alkalmazástól függően új elemeket lehet deklarálni. A nyelv relatív jól olvasható emberi szemmel (és természetesen gépek által). Az emberi olvashatóság miatt azonban általában valamilyen stíluslap megoldással jelenítik meg. Például a fenti dokumentumot így:
De ehhez már külső megoldásra (transzformáció és stíluslap) van szükség. Az elemek nevei betűkből, számokból és a _ jelből állnak, de a betűk bármilyen ABC betűit tartalmazhatják. Az elemek neveiben kis vagy nagybetű számít. Mivel a különböző területeken használt elem nevek fedődhetnek, az XML un. névtereket (name spaces) használ a nevek egyediségének biztosítására. Így pl. A MathML matematikai leíró nyelv, amelynek XML névtere a mathml, így ennek <mo> eleme (math operator) használható így: <mo> +
, de így is: <mathml:mo> +
. A tulajdonságoknak egyedi neveknek kell lenniük (egy tulajdonság nem adható meg kétszer egy elemen). A tulajdonságértékeket mindenképp idézőjel vagy aposztróf közé kell tenni. <üzenet
id="első" tipus='"'>Első üzenet
Az xml névtér rendelkezik néhány előre definiált tulajdonsággal. Ilyenek: xml:lang
Bármely elemnél megatható a tartalom nyelve, pl:
Pargrafus tartalma?
xml:space
Az XML kezelheti a tartalmi szövegekben levő szóközöket úgy mint a HTML (a többszörös helyett egyet hagyva), ugyanakkor megvan a lehetőség arra is, hogy 3
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
érintetlenül hagyja őket: <pre xml:space="preserve">Program forrás
xml:id
Minden elemnek adható egy egyedi azonosító, amely belső refrenciákra használható:
Első paragrafus tartalma
1.1.1.3. Entitások
Bizonyos tartalmakat könnyebben kezel a nyelv ha azokat külön, akár a dokumentum első részeiben, akár külső helyeken, pl. állományokban definiál. Az ilyen tartalmaknak az XML nevet ad, és egy referenciával hivatkozik rá. Az XML dokumentumokban a két legfontosabb entitás a karaktereket illetve teljes szövegrészeket tartalmazó entitások. A karakterek esetében a használat hasonló a HTML-hez, pl. az Á itt is az Á karaktert jelenti. A hosszabb szövegrészeknek több okból érdemes nevet adni, pl. akkor, ha többször használjuk őket, és paraméterként is előfordulnak. Az elemek tartalmi részébe illeszthetünk olyan szövegrészeket, amelyeket az XML elemzők átugorhatnak, és úgy kezelnek, mintha nem tartoznának hozzá a leíró nyelvhez. Pl. ha egy szövegrészben olyan karakterek vannak, amelyek az értelmező számára elválasztó karakterek ( < , > , & ) akkor a karakter entitások használata helyett a szöveget egy un. CDATA (unparsed character data) szekcióba helyezhetjük. A CDATA szekció szintaxisa:
itt jön a beillesztet szöveg
]]>
Például:
if (a < b) x = 2;
]]>
. Gyakori, hogy beillesztett forráskódokat (pl. JavaScript) így kell kezelni. 1.1.1.4. Vezérlő utasítások
Az XML dokumentum egyúttal végrehajtható elemeket is tartalmazhat. Ezeket különböző célokra lehet felhasználni, és általában csak bizonyos feldolgozó programok számára jelentenek végrehajtást. Más feldolgozók egyszerűen átugorják őket. A szintaxisuk:
Az utasítás, amennyiben a feldolgozó program számára van értelme, elindítja a név nevű feldolgozást a megadott adattal. Az adat rész opcionális, a név önmagában jelenthet egy műveletet a feldolgozó program számára. 4
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
Például a dokumentumot elemző program meghívhat egy külső interpretert és annak kimenetét illeszti a dokumentumba:
1.1.2. Az XML dokumentumok jól formázottsága Amint említettük, az XML dokumentumok formátuma szigorú és ellenőrizhető. Alább megadunk néhány fontos jellemzőt, amelyekkel egy jól formázott dokumentum rendelkezik: -a dokumentumnak egy gyökér eleme van -az elemek egymásba ágyazódhatnak de a beágyazások nem fedhetik át egymást -az elemek címkéi mindig zárulnak (akár két címkével, akár egy címke és /> lezárás -a tartalmazott szöveg megfelel a deklarált karakterkészletnek
1.1.3. Az XML dokumentumok modellezése és érvényessége Az XML nyelv tulajdonképpen nem önmagában, hanem mint más nyelveket modelező vagy definiáló nyelv érdekes. A bevezetőben megadott tanfolyam definíció egy jól formázott XML, de ebben gyakorlatilag bármilyen címkát használhatunk az elemek megadására: nincsenek megkötések erre nézve. Ezzel szemben az XHTML (XML-en alapuló HTML), MathML (Mathematical Markup Language), a SVG (Scalable Vector Graphics) valamennyien XML alapú nyelvek, de jól meghatározott elemkészlettel és elem tulajdonságokkal. Ezek esetében a dokumentum típusokra adott egy modell, egy pontos leírás nemcsak arról, hogyan kell kinézzen, hanem arról is, hogy a dokumentum milyen elemeket tartalmazhat és milyen sorrendben. Ezeket a leírásokat ugyancsak egy nyelv segítségével adják meg, és a leírást általában publikussá teszik. Így bárki, ellenőrizheti, hogy egy adott dokumentum érvényes XHTML vagy a érvényes MathML. Ugyanakkor a programok számára az is könnyen ellenőrizhetővé válik, hogy egy adott MathML dokumentum milyen verziójú, és természetesen a doukemnum szerkesztéséhez illetve feldolgozásához is adott minden információ. Az XML dokumentum modelleket több nyelven lehet megfogalmazni, ezek legtöbbje maga is XML alapú. Az első nyelv amit erre a célra használtak SGML gyökerű, és ugyanaz a nyelv amivel a HTML dokumentumok leírásánál találkoztunk. Ennek segítségével adható meg a DTD (Document Type Description). Több XML alapú dokumentum modellt leíró nyelv létezik, ezek közül az egyik legismertebb, és időben is elsők közt specifikált az XML Schema (a W3C által ajánlott nyelv). Az ismertebb nyelvek közt van még az OASIS által kidolgozott REALAX NG. 1.1.3.1. A DTD alapú típus megadás
A DTD (Document Type Description) dokumentumok az SGML alapú nyelvek szintaxis definíciójához használt formális szabályokat tartalmaznak. Ez volt az első olyan nyelv amellyel XML alapú dokumentum modelleket írtak le, és jelenleg is van eset amikor még használjuk. 5
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
Amennyiben adott az alábbi XML példa dokumentum (kurzus.xml): <modul sorszam="1" idotartam="8"> HTML jelölőnyelv <segedanyag oldalszam="60">Füzet I. <eloado>Szabó László 2009.március 28. <modul sorszam="2" idotartam="8"> CSS Stíluslapok <segedanyag oldalszam="40">Füzet II. <eloado>Szabó László 2009.április 4.
Akkor az alábbi DTD-vel adhatjuk meg a használható elemeket, azok tulajdonságait és az elemek egymásba ágyazhatóságát (kurzus.dtd):
Nem célunk most a DTD részletes boncolgatása, abból jól kiolvasható a használható elemek és azok viszonya, illetve az elemek tulajdonság listája. A DTD nem tud a tulajdonságok esetében olyan mintákat megadni, amelyekkel a tulajdonságokat részletesen ellenőrizni lehet. Az adott modellnek megfelelő XML dokumentum elején, az XML prológus után egy referencia áll a DTD-re:
, így bárki könnyen ellenőrizni tudja, hogy a dokumentum érvényes-e. A DOCTYPE utáni kurzus 6
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
a dokumentum gyökér elemét adja meg, utána a DTD leírás két elérhetősége következik. A PUBLIC kulcsszó utáni név akár fiktív is lehet, ez elméletileg egy publikus azonosító, amit a feldolgozó programnak ismernie kellene. Jelenleg azonban a második, SYSTEM kulcsszó után álló azonosító a fontosabb, ami általában egy webcím, ahonnan a DTD letölthető. 1.1.3.2. Az XML Schema
Ugyanannak az XML dokumentumnak az elején (kurzus.xml) hivatkozhatunk egy XML Schema nyelven megadott dokumentumra. Ezúttal a hivatkozás magában a gyökér elemben van:
<modul sorszam="1" idotartam="8"> HTML jelölőnyelv <segedanyag oldalszam="60">Füzet I. <eloado>Szabó László 2009.március 28. <modul sorszam="2" idotartam="8"> CSS Stíluslapok <segedanyag oldalszam="40">Füzet II. <eloado>Szabó László 2009.április 4.
Az adott webcímen léteznie kell a típust leíró, XML Schema nyelven megadott dokumentumnak: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:annotation> <xs:documentation> Java alapú webprogramozés tanfolyamot leíró dokumentum, XML Schema állománya Marosvásárhely, 2009 március 28. <xs:element name="kurzus" type="Kurzus" /> <xs:complexType name="Kurzus"> <xs:sequence> <xs:element name="modul" type="Modul" minOccurs="0" maxOccurs="30" /> <xs:attribute name="idotartam" type="long" use="required" /> <xs:attribute name="sorszam" type="byte" use="required"/> <xs:complexType name="Modul">
Az XML-ben megadott dokumentum definíciók előnye, hogy XML-ben írhatóak - tehát ugyanabban a nyelvben amit az adott felhasználó amúgy is ismer és használ. Általában pontosabb definíciót tesznek lehetővé: nemcsak a nyelvtan adható meg pontosan, hanem a használt tulajdonság értékek ellenőrzéséhez szükséges minták is jól leírhatóak.
1.1.4. Az XML dokumentumok megjelenítése Az XML dokumentumok annak ellenére, hogy deklarált céljuk az emberi szemmel való olvashatóság is, nehezen olvashatóak. Megjelenítésükre két módszert használhatunk. Az első módszer ismert , és egyszerűen stíluslapok használatát jelenti. Erre akár CSS stíluslapokat is lehet használni. Nyilván a dokumentum struktúrája megmarad, így nagyon jó megjelenítést nehéz adni. A második módszer a transzformációs eljárások alkalmazása. Ilyenkor az XML dokumentumot egy transzformációs eljárással átalakítjuk, és eredményül egy másik XML, vagy sokszor XHTML (vagy egyéb dokumentum megjelenítő nyelven előállított) dokumentumot kapunk, amely úgy tartalmazza az eredeti dokumentum részeit, hogy a megjelenítés a legjobb legyen. A művelethez általában egy programra illetve egy vezérlő nyelvre van szükség, amelyet szintén XML-ben adnak meg. Ilyen nyelv az XSL (Extensible Stylesheet Language).
1.1.5. XML transzformációk (XSLT) Az XSLT (Extensible Stylesheet Language Transformations) tulajdonképpen egy alkalmazás, amely szabályokat tartalmaz arra nézve, hogy egy adott XML dokumentumot bizonyos sablonok szerint átalakítsunk. Eredményül a kimenetén egy olyan dokumentumot kapunk amely könnyen megjeleníthető. A transzformációt vezérlő dokumentum maga is egy XML dokumentum, amely átalakításai sablonokat tartalmaz. Az XSLT processzor a bemeneti dokumentum elemeit egyezteti a vezérlő dokumentum sablonaival, és elvégzi az átalakítást. A fenti kurzus XML-t például az alábbi XSLT dokumentummal alakíthatjuk át: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"/>
1.1.6. XML állományok feldolgozása Az XML alapú dokumentumok elterjedésével mindennapi feladattá vált a dokumentumokat feldolgozó programok használata. Mivel ez rutinfeladattá vált, a feldolgozás menetét standardizálták és alkalmazás programozói felületeket -API-kat (Application Program Interface) alakítottak. Az XML feldolgozásoknak sok megközelítése van, ezek közül kettő a gyakrabban használt. Az első módszer a dokumentum elemzésére, és elemzés közben a felismert struktúrák (elemek) által kiváltott eseményekre épül. Az ilyen feldolgozásokat esemény alapú feldolgozásoknak nevezzük. Az elemzés során a módszer nem épít fel egy adatstruktúrát amely az XML dokumentumot ábrázolná, hanem a kiváltott események hatására egy kimenetet gyárt. Az ilyen módszer az eredeti dokumentumon kis módosításokat tud végezni, arra viszont alkalmas, hogy az eredeti dokumentumnak megfelelő transzformációkat végezzen, és egy új dokumentumot generáljon. Az első ilyen XML feldolgozó interfészt a Java nyelv keretein belül valósították meg, ez a Simple API for XML (SAX). Az esemény alapú feldolgozások gyorsak és kis memória igényűek. <modul sorszam="1" idotartam="8"> HTML jelölőnyelv <segedanyag oldalszam="60">Füzet I. <eloado>Szabó László 2009.március 28.
Egy ilyen elemző a fenti dokumentumot szekvenciálisan olvassa. Sorra felfedezi a : kurzus, modul, tartalom, stb. elemeket. Minden egyes elem felfedezésénél képes arra, hogy kiugorjon a szekvenciális feldolgozásból ("esemény következett be"), elvégezzen kimenet generáló feladatokat, utána pedig visszatér és folytatja az elemzést. SAX elemző minden elterjedt programozási nyelvre létezik. Java implementációja az org.sax.xml csomag (http://www.saxproject.org/). A második elterjedt feldolgozási mód során az elemző felépít egy dokumentum modellt, amellyel ábrázolja az XML-ben levő elemek fastruktúráját. A fa csomópontjaiban az elemeket és tulajdonságaikat ábrázoló adatstruktúrák vagy objektumok vannak. Mivel a modell felépítése után a feldolgozó a teljes XML struktúrát egyszerre tudja kezelni, gyakorlatilag bármilyen módosítást el tud végezni az elemeken akár a fa struktúráját is megváltoztathatja. Ugyanakkor könnyen kezeli az elemek közti linkeket (azaz a kapcsolatrendszert,ami az XML esetében sokkal bonyolultabb mint a HTML link rendszere). A dokumentum megjelenítéséhez pedig egy dinamikus struktúra áll rendelkezésre. Az egyik ilyen feldolgozó interfészt a W3C specifikálta a böngészőben létrejövő dokumentum ábrázolása végett. Ez a Document Object Model, DOM-nak nevezett alkalmazás programozói felület. A webprogramozás során mindkét módszert használjuk. Az esemény alapú módszer nagyon előnyös az XML-ben kódolt adatok feldolgozásához, míg a DOM az alapja a böngésző 10
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
dokumentumábrázolásának és a kliens oldali programozásnak (JavaScript segítségével).
11
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
1.2. Az XHTML nyelv Az XHTML ugyanazokat az elemeket használja, mint a HTML 4.01 nyelv. Mivel XML-ben van modellezve, az XML szintaktikai szabályai érvényesek rá, tehát egy XHTML már nem HTML, hanem XML dokumentum. Megjegyzendő, hogy az XHTML-nek van egy moduláris felbontása is: a nyelv elemeit kategóriákba sorolták, így lehetséges csak egy-egy leszűkítette elemkészlet használata, pl. olyan eszközök esetében amelyek nem képesek teljes HTML megjelenítésre (pl. mobil eszközök).
1.3. Szabályok XHTML írásra A dokumentum első elemeként ajánlott az XML prológus használata, de nem kötelező. Az alábbi forma megfelel:
A DOCTYPE elem viszont már kötelező.
1.3.1. A DTD-k Az XHTML megtartja ugyanazt a három kategóriát a dokumentumírásban mint a HTML 4.01, azaz a strict, transitional és frameset típusokat. A három szükséges DTD az említett sorrendben:
1.3.2. A HTML elem szintaxisa A dokumentum gyökere továbbra is a HTML elem, így ennek kötelező tartalmaznia névtér megadása, az alábbi módon:
1.3.3. Az XHTML írásának fontosabb szabályai A dokumentumnak XML értelemben jól formázottnak kell lennie, tehát be kell tartania z alábbi szabályokat: 1. Elemek és tulajdonságok nevét kisbetűvel írjuk. A tulajdonságok értékeit mindig "" idézőjelekbe tesszük 2. Az elemek egymásba ágyazódnak és a zárások nem fedhetik át egymást. 12
Sapientia Egyetem, Marosvásárhely, SzLZs
Webtechnológia előadás, 2009/10-II. félév
Tehát:
<strong>Szöveg
helytelen. 3. Minden elemnél záró címkét kell használni, még akkor is ha az elem üres. Tehát:
4. A HTML zárócímke nélküli elemeit zárni kell, akár záró címkével, akár egy címkével és záró per jellel. Ez tehát helytelen:
az alábbiak viszont helyesek:
5.Nem szabad minimalizálni az elemek tulajdonságainak kiírását. Tehát az alábbi elem XHTMLben helytelen: