Az egyedek felhasználásával neveket tudunk rendelni a tartalom egyes darabjaihoz. Az SGML elemző a dokumentum feldolgozása közben ezeket az egyedeket megtalálja és helyükre beszúrja az általuk hivatkozott tartalmat.
Ezzel az SGML dokumentumokban könnyedén ki tudunk alakítani újrafelhasználható, gyorsan cserélhető tartalmat, illetve kizárólag ezen a módon lehet jelölőkkel ellátott SGML állományokat beletenni egy másik hasonló SGML állományba.
Az egyedek kétfajta típusa létezik, amelyek mindegyike eltérő helyzetekben használható: ezek az általános egyedek és a paraméteregyedek.
Általános egyedeket nem lehet SGML környezetben használni (habár definiálni igen), egyedül magában a dokumentumban. Vessük össze a paraméteregyedekkel.
Mindegyik általános egyed rendelkezik egy
névvel. Így tudunk hivatkozni egy
általános egyedre (ezáltal mindarra a
szövegre, amelyet képvisel a dokumentumunkban):
&egyednév;
.
Vegyük például, hogy van egy
jelenlegi.valtozat
nevű egyedünk,
amely a termékünk jelenlegi
verziószámát helyettesíti be a
szövegbe. Ezt így fogalmaznánk meg:
<para>A termékünk jelenlegi változata a(z) &jelenlegi.valtozat;.</para>
Így a verziószám változásakor egyszerűen csupán az általános egyed definícióját kell megváltoztatni, majd újra feldolgozni a dokumentumot.
Az általános egyedek
segítségével olyan karakterek is
megadhatóvá válnak, amelyeket
egyébként nem tudnánk SGML dokumentumokban
leírni. Például a <
és a &
normális esetben
nem lehet része SGML dokumentumoknak. Amikor ugyanis az
SGML elemző egy <
szimbólumot
észlel, feltételezi, hogy ezzel egy (kezdő-
vagy záró) címke kezdődik, illetve
amikor pedig egy &
szimbólumot
talál, akkor a következő lépésben
egy egyed nevét várja.
Szerencsére ezek a szimbólumok a
szövegben bármikor kiválthatóak az
<
és
&
általános egyedek
használatával.
Általános egyedek csak SGML környezetben definiálhatóak. Ezeket általában közvetlenül a DOCTYPE deklaráció után sorolják fel.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY jelenlegi.valtozat "3.0-RELEASE"> <!ENTITY legutolso.valtozat "2.2.7-RELEASE"> ]>
Figyeljük meg, hogy a DOCTYPE deklarációt a sor végén egy szögletes nyitó zárójel elhelyezésével kibővítettük: a kiegészítésként felvett két egyedet az utána következő két sorban definiáltuk, majd bezártuk a szögletes zárójelet és DOCTYPE deklarációt.
A szögletes zárójelek szükségesek ahhoz, hogy jelezzük a DOCTYPE deklarációban megadott DTD további kiegészítéseit.
Az általános egyedekhez hasonlóan a paraméteregyedek is újrafelhasználható szövegrészek elnevezését engedik meg. Miközben azonban az általános egyedek csak a dokumentumokban alkalmazhatóak, addig a paraméteregyedek csak SGML környezetekben használhatóak.
A paraméteregyedek az általános
egyedekhez hasonló módon
definiálhatóak, az
&egyednév;
felírás helyett azonban az
%egyednév;
alakban tudunk rájuk hivatkozni. Továbbá a
definíciójukban az ENTITY
kulcsszó és az egyed neve közé be kell
szúrni a %
(százalékjel)
szimbólumot.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % param.valami "valami"> <!ENTITY % param.szoveg "szöveg"> <!ENTITY % param.uj "%param.valami más %param.szoveg">
Ez most még nem tűnik különösebben hasznosnak. Később viszont majd az lesz.
Tegyük bele a
próba.xml
állományunkba a következő
általános egyedet:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [ <!ENTITY valtozat "1.1"> ]> <html> <head> <title>Egy minta HTML állomány</title> </head> <body> <p>Ebben a bekezdésben van egy kis szöveg.</p> <p>Ez a bekezdés még tartalmaz némi szöveget.</p> <p align="right">Ennek a bekezdésnek jobbra zártnak kellene lennie.</p> <p>A dokumentum jelenlegi változata: &valtozat;</p> </body> </html>
Az onsgmls
használatával
vizsgáltassuk meg a dokumentum
érvényességét.
Töltsük be a
próba.xml
állományt a böngészőnkbe
(előfordulhat, hogy másolatot kell
készíteni róla
próba.html
néven, mert a
böngészőnk csak így ismerné
fel HTML dokumentumként).
Hacsak a böngészőnk nem annyira
fejlett, a dokumentumban a &valtozat;
egyedhivatkozás nem fog lecserélődni a
verziószámra. A böngészők
többségében nagyon primitív
elemzők találhatóak, amelyek nem
képesek rendesen kezelni az SGML
dokumentumokat[1].
A megoldást a dokumentum normalizálása jelenti, amelyet egy SGML normalizálóval tudunk elvégezni. A normalizáló beolvas egy érvényes SGML állományt és eredményként egy szintén érvényes, de valamilyen módon átalakított SGML állományt készít. Az SGML állományok átalakításának egyik ilyen módja a dokumentumban található egyedhivatkozások helyettesítése az általuk képviselt szöveggel.
Erre a célra az osgmlnorm
használható.
%
osgmlnorm próba.xml > próba.html
Ennek hatására
próba.html
néven
létrejön a dokumentum normalizált (vagyis
a kifejtett egyedhivatkozásokkal létrehozott)
változata, és most már
betölthető a böngészőnkbe.
Ha most megnézzük az
osgmlnorm
által gyártott
végeredményt, akkor tapasztalhatjuk, hogy az
elején nem szerepel DOCTYPE deklaráció.
Ezt a -d
kapcsolóval tehetjük
hozzá:
%
osgmlnorm -d próba.xml > próba.html
[1] Micsoda szégyen! Képzeljük csak el, mennyi gondot és ügyeskedést (mint például a szerver oldalán beemelt állományokat) el tudnánk kerülni, ha rendesen támogatnák.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.