A HTML és az SGML

Korábban láttuk, hogy a HTML (Hypertext Markup Language) nyelv weblapok leírására szolgáló jelölõ nyelv, aminek az alapgondolata az, hogy egy weblap különbözõ elemeit egy egyszerû (tehát pl. Jegyzettömb segítségével létrehozható) szöveges fájlban <> jelek között megadott HTML elemek vagy tagok segítségével azonosítjuk. A weblapon szereplõ és rendszerint különbözõ formátummal rendelkezõ karaktersorozatok, bekezdések, stb. kezdetét kezdõtagok, végét pedig zárótagok adják meg (bár érdemes megjegyezni, hogy a HTML-ben nem minden kezdõtagnak van zárótagja). Egy kezdõtag egy kódnévbõl és egy vagy több attribútum=érték párból épül fel, egy zárótag pedig egy / karakter után csak a kódnevet tartalmazza. Például egy nagy méretû (24pt), félkövér (bold) megjelenítésû és piros karakterekbõl álló karaktersorozat megadása a következõképpen lehetséges:

<FONT SIZE=6 STYLE="font-weight: bold" COLOR=red>Hello!!!</FONT>

ami a következõképpen fog megjelenni a weblapon:

Ha a karaktersorozatot középre akarjuk igazítani, akkor az elõzõeket "bele kell ágyaznunk" egy olyan bekezdésbe, amelyben a szöveg középre igazítását írtuk elõ:

<P ALIGN=CENTER>
<FONT SIZE=6 STYLE="font-weight: bold" COLOR=red>Hello!!!</FONT>
</P>

Ez pedig a következõképpen fog festeni:

Ha csak ennyit akarunk megjeleníteni egy böngészõben, tartalmilag másra nem is nagyon van szükségünk. Azonban ahhoz, hogy a fenti szép, piros Hello tényleg meg is jelenjen, egy formailag is teljes HTML dokumentumot kell készítenünk, amely az elõbb megadott bekezdést tartalmazza. Egy HTML dokumentum alapsémája a következõ:

<HTML>
    <HEAD>
        <TITLE>(ide a dokumentum címe kerül, amely a böngészõablak fejsorában jelenik meg)
        </TITLE>
    </HEAD>
    <BODY>
    (ide kerülnek azok az elemek, amelyek a böngészõablakban fognak megjelenni)
    </BODY>
</HTML>

Vegyük észre, hogy pl. a dokumentum címét (pl. Hello!) megadó szöveg kezdetét a <TITLE>, végét pedig a </TITLE> tag adja meg (ez így fog kinézni: ). A TITLE tagok bele vannak ágyazva a <HEAD> és </HEAD> tagok közé, amelyek pedig - mint minden tag a HTML dokumentumban - a <HTML> és </HTML> tagok közé vannak ágyazva. Ezek után a fenti HTML dokumentum például a következõképpen nézhet ki:

<html>
<head>
   <title>Hello!</title>
</head>
<body>
<p align=center>
<font size=6 style="font-weight: bold" color=red>HELLO!!!</font>
</p>
</body>
</html>

(A HTML-ben a nagy- és kisbetûk között általában nem teszünk különbséget, továbbá a forrásdokumentum tördelése - vagyis a benne levõ szóközök és soremelések száma - nem befolyásolja a böngészõben való megjelenését.)

Most próbáljuk meg általánosítani az eddigieket. A nyelv szintaxisának tanulásakor például a következõ kérdéseket tehetjük fel:

Milyen HTML tagokat használhatunk?
Milyen attribútumokat (és milyen attribútum-értékeket) használhatunk a HTML kezdõtagokban?
Milyen HTML tagok esetében nem kell (vagy nem szükséges) használnunk zárótagokat?
A HTML tagokat milyen szövegkörnyezetben használhatjuk, azaz milyen tagokat ágyazhatunk egymásba?

A kérdések megválaszolása akkor lehetséges, ha a HTML nyelv szintaxisát pontosan definiáljuk. Formálisan ezt egy metanyelv, az SGML (Standard Generalized Markup Language) segítségével tehetjük meg. Az SGML segítségével lehetséges különbözõ dokumentumtípusokat leíró jelölõ nyelvek definiálása, a HTML egy ezek közül. Az SGML segítségével definiált nyelvek szintaxisát az un. DTD-ben (Document Type Definition) adhatjuk meg. Hogy elképzelésünk legyen arról, hogyan lehetséges ilyen módon a HTML nyelv szabályainak definiálása, nézzünk meg néhány példát.

A HTML elemek vagy tagok definiálása az SGML ELEMENT tagjának, a tagokhoz rendelhetõ attribútumok megadása pedig az SGML ATTLIST tagjának segítségével lehetséges. Például a HTML 3.2 DTD-ben a FONT tag definiálása a következõképpen történik:

<!ELEMENT FONT - - (%text)* >
<!ATTLIST FONT
   size  CDATA #IMPLIED
   color CDATA #IMPLIED>

Az ELEMENT tagban szereplõ két kötõjel (- -) arra utal, hogy a kezdõ- és zárótag megadása kötelezõ, az utánuk szereplõ (%text)* karaktersorozat pedig a FONT tag un. tartalommodelljét adja meg, azaz esetünkben azokat az elemeket vagy tagokat, amelyek a FONT tagba ágyazhatóak. Ez utóbbit nézzük meg részletesebben:

Az % jellel kezdõdõ entitások lényegében rövidítések, amelyek meghatározott karaktersorozatok helyett állnak, és így a DTD áttekinthetõségét javítják. Esetünkben a %text entitás definíciája a következõ:

<!ENTITY % text "#PCDATA | %font | %phrase | %special | %form">

A #PCDATA azonosító az entitás definíciójában azt a szöveget jelenti, amelyet a FONT tagok között meg akarunk formázni. Látható, hogy a %text entitásnak megfelelõ, idézõjelek között megadott karaktersorozat a #PCDATA jelölés mellett további entitásokat is tartalmaz, a | ("vagy" jelentésû) operátorral elválasztva. Ezeket szintén fel kell oldanunk (és az így kapott karaktersorozatokat gondolatban be kell helyettesítenünk az entitások helyére), ha meg akarjuk ismerni a FONT elem teljes tartalommodelljét. Például

<!ENTITY % font "TT | I | B | U | STRIKE | BIG | SMALL | SUB | SUP">

vagy

<!ENTITY % special "A | IMG | APPLET | FONT | BASEFONT | BR | SCRIPT | MAP">

Az entitásokban már konkrét HTML tagok szerepelnek, így ezek a <FONT> és </FONT> tagok közé beágyazhatóak. Érdekesség: a FONT elem önmagába is beágyazható a DTD szerint.

Végül értelmezzük a FONT tag attribútumainak definícióját. Az ATTLIST tagban két ilyen attribútumot rendeltünk a FONT taghoz, a size és a color attribútumokat. A CDATA azonosító az attribútumok típusát, azaz értéktartományát adja meg (lényegében bármilyen karaktersorozatot megenged), az #IMPLIED azonosító pedig arra utal, hogy az attribútumok használata nem kötelezõ. Figyeljük meg, hogy itt is - mint végig az SGML-rõl szóló részben - egy szót sem szóltunk a tagok és attribútumok jelentésérõl (azaz a HTML szemantikájáról), mivel ennek megadása nem az SGML feladata.


Feladatok:

1. Keressen az Interneten magyar nyelvû anyagokat az SGML-rõl, és ennek némileg egyszerûsített változatáról, az XML-rõl! Foglalja össze az SGML (vagy XML) legfontosabb tulajdonságait!

2. Keresse meg a HTML DTD valamelyik verziójának leírását és küldje el csatolt fájlként!

3. Próbáljon válaszolni arra, miért volt szükség az XML kidolgozására és hol használják jelenleg az XML-t?

4. Válaszolja meg az Interneten hozzáférhetõ HTML leírások segítségével és írja le, mi a jelentése a FONT tag SGML tartalommodelljében megadott HTML tagoknak! Próbálja meg feloldani azokat az entitásokat is, amelyek definíciója az SGML-rõl szóló részben nem szerepel!

A válaszokat max. négy oldalas szövegfájlok (text fájlok) formájában, a talált hivatkozásokat is feltüntetve - közvetlenül a levélben vagy csatolt fájlként - küldjék el a bodai@math.klte.hu címre. A kérdésekre adott válaszokból összeállított anyagot a következõ gyakorlatokon elolvashatják.


2002. április 16.