Die Fibel für neue Mitarbeiter des FreeBSD-Dokumentationsprojekts
Zurück | Kapitel 3. Die SGML-Fibel | Weiter

# 3.3. Die DOCTYPE-Deklaration

Am Anfang jedes Dokuments muss der Name der dem Dokument zugrundeliegenden DTD angegeben werden. Mit Hilfe dieser Information können SGML-Parser die verwendete DTD feststellen und prüfen, ob das Dokument zu ihr konform ist.

Üblicherweise steht diese Information in einer Zeile, die als DOCTYPE-Deklaration bezeichnet wird.

Eine Deklaration für ein HTML-Dokument, das nach den Vorgaben der DTD für HTML 4.0 geschrieben wurde, sieht so aus:

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

und besteht aus verschiedenen Teilen.

`<!`

  Die Zeichenkette `<!` dient hier als Indikator, dass es sich bei diesem Ausdruck um eine SGML-Deklaration handelt und diese Zeile den Dokumententyp festlegt.

`DOCTYPE`

  Zeigt an, dass dies die SGML-Deklaration für den Dokumententyp ist.

`html`

  Nennt das erste Element, das im Dokument auftaucht.

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

  Nennt den Formalen Öffentlichen Bezeichner [1] der DTD des Dokuments. Diese Information wird von SGML-Parsern ausgewertet, um die von dem Dokument referenzierte DTD zu bestimmen.

  Das Schlüsselwort `PUBLIC` gehört nicht zum öffentlichen Bezeichner, sondern legt fest, wie ein SGML-Parser die DTD finden kann. Alternative Wege eine DTD zu referenzieren werden später gezeigt.

`>`

  Schließt den mit `<!` begonnenen Ausdruck ab.

## 3.3.1. Formale Öffentliche Bezeichner

> Anmerkung: Dieser Abschnitt braucht nicht unbedingt zu gelesen zu werden. Dennoch ist es empfehlenswert, da er nützliche Hintergrundinformationen enthält, die hilfreich sein können, falls der SGML-Prozessor die genutzte DTD nicht finden kann.

Jeder öffentliche Bezeichner muss eine bestimmte Syntax haben, die wie folgt lautet:

    "Besitzer//Schlüsselwort Beschreibung//Sprache"

`Besitzer`

  Nennt den Besitzer des öffentlichen Bezeichners.

  Falls diese Zeichenkette mit “ISO” beginnt, gehört der Bezeichner dem ISO-Kommitee. Der Bezeichner `"ISO 8879:1986//ENTITIES Greek Symbols//EN"` nennt “ISO 8879:1986” als den Besitzer des Satzes von Entitäten für griechische Zeichen. ISO 8879:1986 ist die ISO-Bezeichnung für den SGML-Standard.

  Beginnt die Zeichenkette nicht mit “ISO”, sieht sie entweder so `-//`Besitzer`` oder so `+//`Besitzer`` aus. Beide Varianten unterscheiden sich also nur durch das anfängliche `+` bzw. `-`.

  Sofern am Anfang ein `-` steht, ist der Bezeichner nicht öffentlich registriert, steht hingegen ein `+` am Anfang, ist er registriert.

  Im ISO-Standard ISO 9070:1991 wurde festgelegt, wie registrierte Namen erzeugt werden können. Unter anderem können sie von den Bezeichnungen von ISO-Publikationen, von ISBN-Nummern oder einer Organisationsbezeichnungen entsprechend ISO 6523 abgeleitet werden. Anträge für neue offiziell registrierte Bezeichner werden vom ISO-Kommitee an das American National Standards Institute (ANSI) weitergeleitet.

  Da das FreeBSD-Projekt seine Bezeichner nicht hat registrieren lassen, ist der Besitzer `-//FreeBSD`. Unter anderem kann man daran auch sehen, dass das W3C sich nicht hat registrieren lassen.

`Schlüsselwort`

  Es gibt verschiedene Schlüsselwörter mit denen man die Art der gegebenen Informationen beschreiben kann. Einige der üblichsten sind `DTD`, `ELEMENT`, `ENTITIES` und `TEXT`. `DTD` wird nur für Dateien mit DTDs verwandt, `ELEMENT` findet für Dateien mit Fragmenten von DTDs Verwendung, die nur Deklarationen für Entitäten und Elemente enthalten. `TEXT` wird für SGML-Inhalte (Texte und Tags) verwendet.

`Beschreibung`

  Eine frei wählbare Beschreibung des Inhalts der referenzierten Datei. Möglich sind hier Versionsnummern oder ein kurzer und sinnvoller Text, der innerhalb der SGML-Welt eindeutig ist.

`Sprache`

  Ein ISO-Code aus zwei Buchstaben, der die für die Datei verwendete Sprache nennt. `EN` steht hier für Englisch, `DE` für Deutsch.

### 3.3.1.1. Die `catalog`-Dateien

Wenn man die oben beschriebene Syntax für Bezeichner verwendet und ein Dokument durch einen SGML-Prozessor schickt, muss dieser die Möglichkeit haben, den Bezeichner auf eine real existierende Datei abzubilden, die die benötigte DTD enthält.

Einer der möglichen Wege hierfür sind Katalogdateien. Eine solche Datei, die üblicherweise `catalog` heißt, besteht aus einzelnen Zeilen, die Bezeichner auf Dateinamen abbilden. Enthält ein Katalog beispielsweise die Zeile

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

kann ein SGML-Prozessor darüber feststellen, dass die benötigte DTD in der Datei `strict.dtd` im Unterverzeichnis `4.0` des Verzeichnisses des Katalogs zu finden ist.

Ein gutes Beispiel für einen Katalog ist `/usr/local/share/sgml/html/catalog`. Diese Datei enthält den Katalog für alle HTML DTDs, die im Zuge der Installation von `textproc/docproj` installiert wurden.

### 3.3.1.2. Die Variable `SGML_CATALOG_FILES`

Natürlich muss einem SGML-Prozessor noch mitgeteilt werden können, wo er seine Kataloge finden kann. Viele Programme bieten hierfür Kommandozeilenoptionen an, über die man einen oder mehrere Kataloge angeben kann.

Zusätzlich besteht noch die Möglichkeit mit der Umgebungsvariablen `SGML_CATALOG_FILES` auf SGML-Kataloge zu verweisen. Die Einträge von `SGML_CATALOG_FILES` müssen aus den vollständigen Pfadnamen der Kataloge, jeweils durch Komma getrennt, bestehen.

Üblicherweise werden die folgenden Kataloge über `SGML_CATALOG_FILES` für die Arbeit an den Dokumenten des FDPs eingebunden:

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

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

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

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

Allerdings sollte das schon geschehen sein.

## 3.3.2. Alternativen zu Formalen Öffentlichen Bezeichnern

Anstatt mit einem Bezeichner die zum Dokument gehörende DTD zu referenzieren, kann auch explizit auf die Datei der DTD verwiesen werden.

Die Syntax des DOCTYPE-Deklaration ist in diesem Falle anders:

    <!DOCTYPE html SYSTEM "/pfad/zur/dokumenten.dtd">

Das Schlüsselwort `SYSTEM` legt fest, dass ein SGML-Prozessor die DTD auf “systemspezifische” Art und Weise bestimmen soll. Meistens, aber nicht immer, wird so auf eine Datei im Dateisystem verwiesen.

Allerdings sollte man öffentliche Bezeichner aus Gründen der Portabilität bevorzugen, da man so nicht eine Kopie der DTD mit dem Dokument selber verteilen muss, beziehungsweise da man, wenn man mit `SYSTEM` arbeitet, nicht davon ausgehen kann, dass die benötigte DTD auf anderen Systemen genau unter dem gleichen Pfad verfügbar ist.

### Fußnoten

[1] | auf Englisch Formal Public Identifier (FPI)

Zurück | Zum Anfang | Weiter
Von Elementen, Tags und Attributen | Nach oben | Die Rückkehr zu SGML

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.