Az SGML (II)

Mint arról korábban szó volt, a HTML nyelv szintaxisát az SGML nyelv segítségével definiáljuk az un. SGML DTD-ben. A HTML szintaxisát leíró DTD-t (elvileg) megadhatnánk közvetlenül a konkrét HTML dokumentumok elõtt is, ehelyett azonban rendszerint csak hivatkozunk rá a HTML dokumentumok elsõ sorában - a <HTML> kezdõtag elõtt - például

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

módon. Az egyes szavak jelentése:

Ha például egy igen egyszerû katced nevû dokumentumtípust akarnánk definiálni (amely katalóguscédulák igen-igen leegyszerûsített leírását tartalmazza), akkor pl. ezt megtehetnénk a következõképpen:

<!DOCTYPE KATCED [
<!ELEMENT KATCED - - (LEIRO,AZON,SZERZO,CIM,KIADO,KIADEV)>
<!ELEMENT (LEIRO|AZON|SZERZO|CIM|KIADO|KIADEV) - - (#PCDATA)>
]>

Figyeljük meg, hogy a dokumentumtípus neve (KATCED) után közvetlenül, [] jelek között következik az -igen egyszerû - KATCED DTD megadása, amely itt a katced dokumentumban használható tagokat definiálja. A DTD-t megadó tag után következhet közvetlenül egy konkrét katced dokumentum leírása, például a következõképpen:

<KATCED>
<LEIRO>Puk Kata</LEIRO>
<AZON>1234</AZON>
<SZERZO>Kis Mihály</SZERZO>
<CIM>Információs társadalom és könyvtár</CIM>
<KIADO>Riska Kft</KIADO>
<KIADEV>2002</KIADEV>
</KATCED>

A katced dokumentumtípust úgy definiáltuk, hogy a LEIRO, AZON, SZERZO, CIM, KIADO, és KIADEV tagoknak a KATCED tagon belül a megadott sorrendben kötelezõ elõfordulnia, továbbá minden katced dokumentum pontosan egy katalóguscédula adatait tartalmazza. Hajtsunk végre néhány kisebb változtatást a DTD-ben:

Így a következõ DTD-hez jutunk, amit a szemléletesség kedvéért mindjárt egy konkrét, a megadott DTD szerint szintaktikailag helyes katced dokumentumban adunk meg.

<!DOCTYPE KATCED [
<!ELEMENT KATCED - - (LEIRO,AZON,SZERZO*,CIM,KIADO?,KIADEV?)+>
<!ELEMENT (LEIRO|AZON|SZERZO|CIM|KIADO|KIADEV) - o (#PCDATA)>
]>
<KATCED>
<LEIRO>Részletes Kata
<AZON>1234</AZON>
<SZERZO>Kis Mihály</SZERZO>
<CIM>Információs társadalom és könyvtár</CIM>
<KIADO>Riska Kft</KIADO>
<KIADEV>2002</KIADEV>
<LEIRO>Gyors Jolán
<AZON>1235
<SZERZO>Nagy Károly
<SZERZO>Kovács Miklós
<CIM>A számítógép a könyvtárban
</KATCED>

Végül tegyük lehetõvé, hogy

Ehhez a DTD-ben két újabb leíró tagot kell elhelyeznünk:

<!ATTLIST LEIRO DATUM CDATA #REQUIRED>
<!ATTLIST CIM NYELV (magyar|angol|német|egyéb) #IMPLIED>

Lássunk erre is egy konkrét példát:

<!DOCTYPE KATCED [
<!ELEMENT KATCED - - (LEIRO,AZON,SZERZO*,CIM,KIADO?,KIADEV?)+>
<!ELEMENT (LEIRO|AZON|SZERZO|CIM|KIADO|KIADEV) - o (#PCDATA)>
<!ATTLIST LEIRO DATUM CDATA #REQUIRED>
<!ATTLIST CIM NYELV (magyar|angol|német|egyéb) #IMPLIED>
]>
<KATCED>
<LEIRO DATUM="2002.04.22.">Részletes Kata
<AZON>1234</AZON>
<SZERZO>Kis Mihály</SZERZO>
<CIM NYELV="angol">The Library and the Information Society</CIM>
<KIADO>Cows Ltd</KIADO>
<KIADEV>2002</KIADEV>
<LEIRO DATUM="2002.04.23.">Gyors Jolán
<AZON>1235
<SZERZO>Nagy Károly
<SZERZO>Kovács Miklós
<CIM>A számítógép a könyvtárban
</KATCED>

Visszatérve a HTML 3.2 DTD-hez, nézzünk ebben is néhány példát. Elõször egészítsük ki a FONT elem korábban már megadott definícióját az összes, benne elõforduló entitással:

<!ENTITY % font "TT | I | B | U | STRIKE | BIG | SMALL | SUB | SUP">
<!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE">
<!ENTITY % special "A | IMG | APPLET | FONT | BASEFONT | BR | SCRIPT | MAP">
<!ENTITY % form "INPUT | SELECT | TEXTAREA">

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

<!ELEMENT (%font | %phrase) - - (%text)*>

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

Vegyük észre, hogy a FONT elem definíciója elõtt szereplõ sor egyszerre definiálja a korábban megadott %font és %phrase entitásokban szereplõ összes HTML tag tartalommodelljét! A definíció ezekre a HTML tagokra teljesen rekurzív (t.i. a %text entitás tartalmazza a %font és %phrase entitásokat), így a megadott HTML tagok (pl. TT, I,  B, ... stb.) tetszõleges mértékig egymásba ágyazhatóak.

Nézzünk egy másik példát:

<!ELEMENT BR - O EMPTY>
<!ATTLIST BR clear (left | all | right | none) none>

A BR elem definíciója két újdonságot is tartalmaz:


Feladatok:

1. Próbáljon meg definiálni egy egyszerû dokumentumtípust SGML segítségével és küldje el a kapott DTD-t, valamint egy konkrét dokumentum leírását a definiált nyelven!

2. Keresse meg a HTML DTD valamelyik verziójának leírását, és próbálja meg néhány HTML tag SGML definícióját értelmezni! Küldje el a kiválasztott sorokat és ezek magyarázatait!

3. Keresse fel a World Wide Web Consortium weblapját, és keresse meg a HTML, az XML, és a CSS legújabb verzióinak leírásait! Küldje el a kapott címeket!

4. Az Interneten hozzáférhetõ dokumentumok segítségével írja le, mi a CSS, és hogyan bõvíti ki a HTML lehetõségeit!

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 23.