3.3. A DOCTYPE deklarációk
Vissza | 3. fejezet - SGML alapismeretek | Előre

## 3.3. A DOCTYPE deklarációk

A dokumentumok elején mindig meg kell adni annak a dokumentípus-deklarációnak a nevét, amely alapján készítjük. Ennek köszönhetően az SGML elemzők elő tudják keresni a dokumentum érvényesítéséhez kellő DTD-t.

Ezt az információt általában egyetlen sorban, a DOCTYPE deklarációban adjuk meg.

A HTML DTD 4.0 változatának megfelelő dokumentumokat tehát például így vezetjük be:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">

Ebben a sorban több különböző típusú alkotórészt fedezhetünk fel.

`<!`

  Ez egy jelzés, amellyel jelezzük egy SGML-beli deklaráció kezdetét. Ez a sor a dokumentum típusát határozza meg.

`DOCTYPE`

  A dokumentumtípus SGML-beli deklarációját vezeti be.

`html`

  A dokumentumban elsőként megjelenő elemet nevezi meg.

`PUBLIC "-//W3C//DTD HTML 4.0//EN"`

  Megadja a dokumentum DTD-jéhez tartozó formális publikus azonosítót (Formal Public Identifier, FPI). Az SGML elemző ennek alapján találja meg a dokumentum feldolgozása során szükséges DTD-t.

  A `PUBLIC` nem része az azonosítónak, azonban segít az SGML elemzőnek megtalálni a benne megfogalmazott DTD-t. Később további módszereket is láthatunk majd erre.

`>`

  A deklaráció lezárása.

### 3.3.1. Formális publikus azonosítók

### Megjegyzés:

Ebben a szakaszban csupán kiegészítő ismeretek szerepelnek. Ezek viszont hasznos hátteret adhatnak például olyan esetekben, amikor ki akarjuk deríteni, hogy az SGML feldolgozó miért nem éri el a megadott DTD állományokat.

A formális publikus azonosítók (FPI) egy speciális felírással rendelkeznek, amely a következő:

"`Tulajdonos`//`Kulcsszó` `Leírás`//`Nyelv`"

`Tulajdonos`

  Ez határozza meg kihez tartozik az FPI.

  Ha az értéke az „ISO” részlettel kezdődik, akkor az FPI az ISO tulajdona. Például a `"ISO 8879:1986//ENTITIES Greek Symbols//EN"` esetén a görög szimbólumokat tartalmazó egyedkészlet tulajdonosa. Az ISO 8879:1986 az SGML szabvány ISO száma.

  Minden más esetben az értéke a következő alakú lesz: `-//`Tulajdonos`` vagy `+//`Tulajdonos`` (vegyük észre, hogy a két változat csak a sor elején levő `+` és `-` jelekben tér el).

  Ha az érték a `-` jellel kezdődik, akkor a tulajdonos adatai nem regisztráltak, a `+` esetében pedig regisztráltak.

  Az ISO 9070:1991 szabvány definiálja a regisztrált nevek előállítását, amelynek értelmében egy ISO publikáció, egy ISBN kód vagy az adott szervezet ISO 6523 szabványnak megfelelő kódjának számából kell származtatni, illetve a nevek kiosztását egy erre felhatalmazott szerv végzi. Ezt a feladatot az Amerikai Nemzeti Szabványügyi Intézetre (ANSI) bízta az ISO tanácsa.

  Mivel a FreeBSD Projekt nem regisztrálta magát, a hozzá tartozó érték tehát a `-//FreeBSD` lesz. Látható egyébként, hogy a W3C sem regisztrálta még magát.

`Kulcsszó`

  Az állományban található információ típusának megadására különböző kulcsszavak használhatóak. Ezek általában a `DTD`, `ELEMENT`, `ENTITIES` és `TEXT`. A `DTD` csak DTD állományokhoz használatos, az `ELEMENT` pedig olyan DTD részletekhez, amelyekeben csak egyedek vagy elemek leírásai találhatóak. A `TEXT` SGML tartalmat jelent (szövegeket és jelölőket).

`Leírás`

  Minden egyéb adat, amit az állomány tartalmáról még meg akarunk adni. Tartalmazhat verziószámokat, vagy bármilyen számunkra értelmes és az SGML rendszer számára egyedien azonosítható rövid szöveget.

`Nyelv`

  Kétkarakteres, ISO szabvány szerint megadott kód, amellyel az állomány natív nyelvét adjuk meg. Az angol esetében ez az `EN`.

#### 3.3.1.1. Katalógusok

Az SGML feldolgozónak a dokumentum feldolgozása során valamilyen módon az így megadott formális publikus azonosítóból vissza kell tudnia fejtenie a DTD-t tartalmazó állomány nevét.

Mindehhez egy katalógusra lesz szükségünk. Ezek (amelyeket általában `catalog` néven találhatunk meg) tartalmazzák az azonosítók és a hozzájuk tartozó állománynevek összerendeléseit. Például, ha egy katalógusban a következő sor található:

PUBLIC "-//W3C//DTD HTML 4.0//EN" "4.0/strict.dtd"

Az SGML feldolgozó a `catalog` állományt tartalmazó könyvtár `4.0` alkönyvtárában levő `strict.dtd` állományban fogja keresni az adott DTD-t.

Nézzünk szét kicsit a `/usr/local/share/xml/html/catalog` állományban. Ez tartalmazza a `textproc/docproj` portból telepített HTML DTD-kre vonatkozó állományinformációkat.

#### 3.3.1.2. Az `SGML_CATALOG_FILES` környezeti változó

Az SGML feldolgozónak valahogy tudnia kell hol keresse a katalógusokat. Számos implementációjuk parancssori paramétereken keresztül teszi lehetővé a feldolgozás során használni kívánt katalógus vagy katalógusok felsorolását.

Emellett az `SGML_CATALOG_FILES` környezeti változó segítségével is megadhatóak ezek az állományok. A változó értékének a (teljes elérési útvonallal kifejtett) katalógusok vesszővel tagolt felsorolását kell beállítani.

Az esetek döntő többségében a következő állományokat kell ilyen módon felvennünk:

- `/usr/local/share/xml/docbook/4.1/catalog`

- `/usr/local/share/xml/html/catalog`

- `/usr/local/share/xml/iso8879/catalog`

- `/usr/local/share/xml/jade/catalog`

Ezt egyébként korábban már elvégeztük.

### 3.3.2. Azonosítók helyett

A formális publikus azonosítók használata helyett akár közvetlenül meg is adhatjuk a dokumentum érvényességét definiáló DTD-t tartalmazó konkrét állomány nevét.

Ennek felírása némileg eltér:

<!DOCTYPE html SYSTEM "/az/elérési/út/állomány.dtd">

A `SYSTEM` kulcsszóval jelezzük, hogy az SGML feldolgozó a DTD leírását rendszerszinten keresse. Ez általában (de nem mindig) azt jelenti, hogy a DTD elérhetőségét állománynév formájában adjuk meg.

Az FPI használata leginkább a hordozhatóság támogatása miatt ajánlott. Ilyenkor nem kell ugyanis a dokumentumokhoz mellékelni a DTD egy példányát, illetve ha a `SYSTEM` kulcsszóval adnánk meg, akkor mindig az adott helyre kellene tenni a DTD állományokat.

Vissza | Fel | Előre
3.2. Elemek, címkék és tulajdonságok | Főoldal | 3.4. Visszaváltás az SGML használatára

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