edition W3C.de

HTML 4.01-Spezifikation

Deutsche Übersetzung

Diese Version:
http://www.edition-w3.de/TR/1999/REC-html401-19991224
Aktuelle Version:
http://www.edition-w3c.de/TR/html4
Übersetzer:
Christine Kühnel (Übersetzung, fachliche Kommentierung) <kuehnel@screenexa.net>
Stefan Mintert (Fachlektorat und fachliche Kommentierung) <www.mintert.com/stefan/mail/>
Stefan Schumacher (Übersetzung, fachliche Kommentierung) <sts@schumacher-netz.de>

Bei diesem Dokument handelt es sich um eine Übersetzung eines W3C-Textes. Dieser Text ist urheberrechtlich geschützt; bitte beachten Sie die nachfolgenden Hinweise des Originaldokuments. Die Rechte an der Übersetzung liegen bei den Übersetzern und dem Verlag Addison-Wesley. Die Übersetzung hat keine durch das W3C legitimierte, normative Wirkung. Das einzige maßgebliche Dokument ist das englische Original.

Bitte senden Sie Fehler und Korrekturen zur deutschen Fassung an die Übersetzer.

Kommentare der Übersetzer, die als solche gekennzeichnet sind, unterliegen dem Urheberrecht der Übersetzer. Sie sind nicht Bestandteil des Ursprungsdokuments.

Diese Veröffentlichung ist eine Vorveröffentlichung. Kein Teil dieses Textes darf kopiert werden. Alle Rechte vorbehalten. Nach Abschluss der Arbeit wird das endgültige Dokument unter der oben angegebenen Adresse veröffentlicht. Die jetzige Veröffentlichung während der laufenden Arbeit dient zur Information von Interessierten und zur Prüfung durch die Fachöffentlichkeit. Sollten Sie Fehler finden oder Verbesserungsvorschläge haben, schicken Sie diese bitte per Mail an die Übersetzer.
Folgende Teile liegen noch in Englisch vor und müssen noch in deutscher Fassung generiert werden: (a) Gesamtinhaltsverzeichnis (b) Index


3 Über SGML und HTML

Inhaltsverzeichnis

Dieser Abschnitt des Dokuments führt in SGML ein und erörtet dessen Verhältnis zu HTML. Eine vollständige Diskussion von SGML sei dem Standard (siehe [ISO8879]) überlassen.

Anmerkung der Übersetzer:

HTML basiert auf SGML. Aus diesem Grund ist die Diskussion des Verhältnisses in diesem Kapitel wichtig. Mittlerweile ist HTML aber von XHTML abgelöst worden. XHTML basiert auf XML, nicht mehr auf SGML. Und obwohl HTML inhaltlich auch heute noch ein sehr wichtiger Standard ist, sind die nachfolgenden Ausführungen über SGML für XHTML nicht mehr uneingeschränkt zutreffend. Aus diesem Grund finden Sie im Folgenden eine Reihe von Kommentaren, die die Gültigkeit der Aussagen aus Sicht von XHTML korrigieren.

Ein einführender Artikel zum Thema SGML ist im Web unter http://www.mintert.com/xml/ zu finden. An gleicher Stelle gibt es auch Einführungen in XML. Eine deutsche Übersetzung des XML-Standards (http://www.edition-w3c.de/TR/REC-xml) ist ebenso wie eine deutsche Übersetzung von XHTML (http://www.edition-w3c.de/TR/xhtml1) als Teil des deutschen W3C-Übersetzungsprojekts entstanden.

3.1 Einführung in SGML

SGML ist ein System zur Definition von Auszeichnungssprachen. Autoren zeichnen ihre Dokumente durch entsprechende den Inhalt begleitende Informationen bzgl. Struktur, Präsentation und Semantik aus. HTML ist ein Beispiel einer Auszeichnungssprache. Hier folgt ein Beispiel eines HTML-Dokuments:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
   <HEAD>
      <TITLE>Mein erstes HTML-Dokument</TITLE>
   </HEAD>
   <BODY>
      <P>Hallo Welt!
   </BODY>
</HTML>

Ein HTML-Dokument unterteilt sich in einen Kopf (Head) (hier zwischen <HEAD> und </HEAD>) und einen Rumpf (Body) (hier zwischen <BODY> und </BODY>). Der Titel eines Dokuments erscheint (zusammen mit anderen Informationen über das Dokument) im Kopf; der Inhalt des Dokuments steht im Rumpf. Der Rumpf in diesem Beispiel enthält lediglich einen Absatz, ausgezeichnet mit <P>.

Anmerkung der Übersetzer:

In den Beispielen in dieser Spezifikation werden die Elementnamen von HTML-Elementen groß geschrieben. In HTML spielt die Klein/Großschreibung keine Rolle. In XHTML sind jedoch nur noch kleine Elementnamen zulässig. Aus diesem Grund sollten Sie beim Schreiben von HTML-Dokumenten immer nur die Kleinschreibung für Element- und Attributnamen verwenden; also <head> statt <HEAD> usw.

Eine weitere Änderung besteht darin, dass in XHTML keine Tags weggelassen werden dürfen. Die obige Zeile <P>Hallo Welt! muss in XHTML <p>Hallo Welt!</p> lauten.

Jede in SGML definierte Auszeichnugssprache wird SGML-Anwendung genannt. Eine SGML-Anwendung ist ganz allgemein gekennzeichnet durch:

  1. Eine SGML-Deklaration. Die SGML-Deklaration spezifiziert, welche Zeichen und Begrenzer in der Anwendung auftreten können.
  2. Eine Dokumenttyp-Definition (DTD). Die DTD definiert die Syntax von Auszeichnungskonstrukten. Die DTD kann zusätzliche Definitionen wie z.B. Zeichen-Entity-Referenzen enthalten.
  3. Eine Spezifikation, die die zur Auszeichnung gehörende Semantik beschreibt. Diese Spezifikation erlegt zudem Syntaxrestriktionen auf, die innerhalb der DTD nicht ausgedrückt werden können.
  4. Dokument-Instanzen, die Daten (Inhalt) und Auszeichnung beinhalten. Jede Instanz enthält eine Referenz auf die zu ihrer Interpretation zu verwendende DTD.

Diese Spezifikation beinhaltet eine SGML-Deklaration (Abschnitt 20), drei Dokument-Typ-Definitionen (für die Beschreibung dieser drei Definitionen siehe Abschnitt 7.2, »HTML-Versions-Information«) und eine Liste von Zeichenreferenzen.

Anmerkung der Übersetzer:

Für XHTML spielt das Konzept der SGML-Deklaration keine Rolle mehr. Das liegt darin begründet, dass für alle XML-Anwendungen eine einzige, feste SGML-Deklaration vereinbart wurde. In der Praxis kann man also einfach davon ausgehen, dass Tags durch spitze Klammern begrenzt werden und dass es eine Reihe von Sonderzeichen (wie &) gibt, die später erklärt werden.

Der Begriff der Dokumentinstanz rührt daher, dass jedes Dokument ein Beispiel oder ein Vertreter des Dokumenttyps ist, der durch die DTD definiert wird. Wer sich mit objektorientierter Programmierung auskennt, wird den Begriff der Instanz kennen; der Dokumenttyp entspricht dann der Klasse.

3.2 In HTML verwendete SGML-Konstrukte

Die folgenden Abschnitte stellen die in HTML verwendeteten SGML-Konstrukte vor.

Im Anhang sind einige SGML-Features aufgelistet, die sich keiner breiten Unterstützung durch HTML-Programme erfreuen und deshalb vermieden werden sollten.

3.2.1 Elemente

Eine SGML-Dokumenttyp-Definition deklariert Elementtypen, die Strukturen oder gewünschtes Verhalten repräsentieren. HTML beinhaltet Elementtypen, die Absätze, Hypertext-Links, Listen, Tabellen, Bilder usw. repräsentieren.

Jede Elementtyp-Deklaration beschreibt im Allgemeinen drei Teile: einen Start-Tag, den Inhalt und einen End-Tag.

Anmerkung der Übersetzer:

Präzise: Die Elementtyp-Deklaration beschreibt den Namen des Elementtyps sowie sein Inhaltsmodell. Der Name bestimmt wie Start- und End-Tag aussehen.

Der Name des Elements erscheint im Start-Tag (geschrieben <Elementname>) und im End-Tag (geschrieben </Elementname>); beachten Sie den Schrägstrich vor dem Elementnamen im End-Tag. Zum Beispiel begrenzen Start- und End-Tag des Elementtyps UL die Aufzählungspunkte in einer Liste:

<UL>
<LI><P>...Punkt.1...
<LI><P>...Punkt.2...
</UL>

Einige HTML-Elementtypen erlauben Autoren, die End-Tags wegzulassen (z.B. die Elementtypen P und LI). Einige wenige Elemementtypen gestatten auch das Weglassen der Start-Tags, z.B. HEAD und BODY. Die HTML-DTD gibt für jeden Elementtyp vor, ob Start- und End-Tag erforderlich sind oder nicht.

Anmerkung der Übersetzer:

Wie oben schon gesagt, müssen Elemente in XHTML sowohl Start- als auch End-Tag besitzen. Kein Tag darf weggelassen werden.

Einige HTML-Elementtypen haben keinen Inhalt. Zum Beispiel hat das Zeilenwechsel-Element BR keinen Inhalt; seine einzige Funktion besteht darin, eine Textzeile zu begrenzen. Solche leeren Elemente haben nie End-Tags. Die Dokumenttyp-Definition und der Text der Spezifikation geben vor, ob ein Elementtyp leer ist (keinen Inhalt hat) oder, wenn er Inhalt haben kann, was als zulässiger Inhalt betrachtet wird.

Anmerkung der Übersetzer:

Die Forderung, dass leere Elemente niemals einen End-Tag besitzen dürfen, ist weder durch SGML noch (für XHTML) durch XML begründet. Es ist eine Festlegung dieser Spezifikation.

Die nachfolgende Aussage bzgl. der Klein/Großschreibung gilt nicht mehr für XHTML. Auch die anschließenden Beispiele sind nur für HTML, nicht jedoch für XHTML richtig und sollten unter diesem Blickwinkel ignoriert werden.

Bei Elementnamen wird nie zwischen Groß- und Kleinschreibung unterschieden.

Bitte konsultieren Sie den SGML-Standard zu Informationen über die für Elemente geltenden Regeln (z.B. müssen sie korrekt verschachtelt sein, ein End-Tag schließt zurück bis zum korrespondierenden Start-Tag alle dazwischenliegenden ungeschlossenen Start-Tags mit weggelassenen End-Tags (siehe Abschnitt 7.5.1) usw.).

Zum Beispiel kann der folgende Absatz:

<P>Dies ist der erste Absatz.</P>
...ein Block-Element...

auch ohne seinen End-Tag:

<P>Dies ist der erste Absatz.
...ein Block-Element...

geschrieben werden, da der <P>-Start-Tag vom folgenen Block-Element geschlossen wird. Gleiches gilt, wenn ein Absatz in einem Block-Element eingeschlossen ist wie in:

<DIV>
<P>Dies ist der Absatz.
</DIV>

Der End-Tag des umschließenden Block-Elements (hier </DIV>) impliziert den End-Tag des offenen <P>-Start-Tags.

Elemente sind keine Tags. Manche Leute sprechen von Elementen als Tags (z.B. »der P-Tag«). Denken Sie daran, dass ein Element eine Sache ist und der Tag (sei es Start- oder End-Tag) eine andere. Zum Beispiel ist das HEAD-Element immer vorhanden, sogar, wenn sowohl Start- als auch End-Tag in der Auszeichnung fehlen.

Anmerkung der Übersetzer:

Die obige Bemerkung ist sehr wichtig. Tatsächlich werden die Begriffe Tag, Element, Elementtyp immer wieder durcheinander gebracht.

HTML-Dokumente bestehen aus ineinander verschachtelten Elementen (<p>Hallo Welt!</p>), die wiederum aus Start-Tags (<p>), End-Tags (</p>) und Inhalt (Hallo Welt!) bestehen.

Der HTML-Dokumenttyp (festgelegt durch die DTD) deklariert die Elementtypen (hier: p).

Alle in dieser Spezifikation deklarierten Elementtypen sind im Index der Elemente aufgelistet.

Anmerkung der Übersetzer:

Dieser Verweis auf den Index ist ein klassisches Beispiel für die falsch benutzte Terminologie: Natürlich ist es kein Index der Elemente. Wie sollte das auch möglich sein? Die Anzahl der Elemente ist potenziell unbegrenzt (nämlich die Summe aller HTML-Elemente, die alle HTML-Dateien überall auf der Welt enthalten). Der Verweis zeigt auf den Index der Elementtypen.

3.2.2 Attribute

Elemente können zugehörige Eigenschaften haben, genannt Attribute, diese können Werte besitzen (standardmäßig oder von Autoren oder Skripten gesetzt). Attribut-Wert-Paare erscheinen vor »>« des Start-Tags eines Elements. Im Start-Tag eines Elements kann eine beliebige Anzahl von durch Zwischenraum getrennten (zulässigen) Attribut-Wert-Paaren stehen. Sie können beliebig angeordnet sein.

In diesem Beispiel ist das id-Attribut für ein H1-Element gesetzt:

<H1 id="section1">
This is an identified heading thanks to the id attribute
</H1> 

Standardmäßig verlangt SGML, dass alle Attributwerte entweder von doppelten Anführungszeichen (ASCII dezimal 34) oder einfachen Anführungszeichen (ASCII dezimal 39) begrenzt werden. Einfache Anführungszeichen können im Attributwert enthalten sein, wenn der Wert durch doppelte Anführungszeichen begrenzt ist und umgekehrt. Autoren können auch Numerische Zeichenreferenzen verwenden, die die doppelten (&#34;) und einfachen (&#39;) Anführungszeichen repräsentieren. Für doppelte Anführungszeichen dürfen Autoren auch die Zeichen-Entity-Referenz &quot; benutzen.

In bestimmten Fällen können Autoren den Wert eines Attributs ohne jegliche Anführungszeichen angeben; der Attributwert darf nur Buchstaben (a-z und A-Z), Ziffern (0-9), Bindestriche (ASCII dezimal 45), Punkte (ASCII dezimal 46), Unterstriche (ASCII dezimal 95) und Doppelpunkte (ASCII dezimal 58) enthalten. Wir empfehlen, Anführungszeichen auch dann zu verwenden, wenn es möglich ist, sie wegzulassen.

Anmerkung der Übersetzer:

Wir empfehlen die Anführungszeichen niemals wegzulassen. In XHTML ist das Weglassen nicht mehr zulässig. Für die Groß/Kleinschreibung gilt das Gleiche wie für Elemente.

Bei Attributnamen wird nie zwischen Groß- und Kleinschreibung unterschieden. Die Definition eines jeden Attributs gibt an, ob bei seinem Wert zwischen Groß- und Kleinschreibung unterschieden wird.

Alle durch diese Spezifikation definierten Attribute sind im Index der Attribute aufgelistet.

Anmerkung der Übersetzer:

Es handelt sich um den Index der Attributtypen.

3.2.3 Zeichenreferenzen

Zeichenreferenzen sind numerische oder symbolische Namen für Zeichen, die in einem HTML-Dokument enthalten sein können. Sie sind nützlich für selten verwendete Zeichen oder solche, die in Authoring Tools nur schwer oder gar nicht eingegeben werden können. Sie werden Zeichenreferenzen überall in diesem Dokument sehen; sie beginnen mit einem »&«-Zeichen und enden mit einem Semikolon (;). Bekannte Beispiele sind:

Wir erörtern HTML-Zeichenreferenzen später in Abschnitt 5.1, »Dokument-Zeichensatz« im Detail. Die Spezifikation enthält auch eine Liste der Zeichenreferenzen (siehe Abschnitt 24), die in HTML 4 Dokumenten auftauchen können.

3.2.4 Kommentare

HTML-Kommentare haben folgende Syntax:

<!-- dies ist ein Kommentar -->
<!-- und das hier ist einer,
     der mehr als eine Zeile belegt -->

Leerraum (white space) ist nicht gestattet zwischen dem öffnenden Begrenzer der Auszeichnungsdeklaration (markup declaration open delimiter) (»<!«) und dem öffnenden Begrenzer des Kommentars (comment open delimiter) (»--«); er ist jedoch zulässig zwischen dem schließenden Begrenzer des Kommentars (comment close delimiter) (»--«) und dem schließenden Begrenzer der Auszeichnugsdeklaration (»>«). Ein häufiger Fehler ist es, in einen Kommentar eine Kette von Bindestrichen (»---«) einzuschließen. Autoren sollten vermeiden, zwei oder mehr aufeinanderfolgende Bindestriche innerhalb von Kommentaren zu schreiben.

Information, die in Kommentaren erscheint, hat keine spezielle Bedeutung (z.B. werden Zeichenreferenzen nicht als solche interpretiert).

Beachten Sie, dass Kommentare Auszeichnungen sind.

3.3 Wie die HTML-DTD zu lesen ist

Jede Element- und Attributdeklaration in dieser Spezifikation wird begleitet von ihrem Auszug aus der document type definition. Wir haben uns entschlossen, die DTD-Auszüge in die Spezifikation aufzunehmen, anstatt eine zwar besser zugängliche, aber dafür längere und weniger präzise Beschreibung der Eigenschaften eines Elements zu versuchen. Das folgende Tutorial sollte es mit SGML nicht vertrauten Lesern gestatten, die DTD zu lesen und die technischen Details der HTML-Spezifikation zu verstehen.

3.3.1 DTD-Kommentare

In DTDs können sich Kommentare über mehrere Zeilen erstrecken. In der DTD sind Kommentare durch ein Paar von »--«-Marken begrenzt, z.B.

<!ELEMENT PARAM - O EMPTY       -- named property value -->
Hier erklärt der Kommentar »named property value« die Verwendung des PARAM-Elementtyps. Kommentare in der DTD haben lediglich informellen Charakter.

Anmerkung der Übersetzer:

Diese Art des Kommentierens von DTDs ist mit XML nicht mehr möglich. Folglich wird man eine Zeile wie die obige in der XHTML-DTD nicht mehr finden. Eine Alternative ist etwa:

<!ELEMENT param EMPTY>  <!-- named property value -->

3.3.2 Parameter-Entity-Definitionen

Die HTML-DTD beginnt mit einer Serie von Parameter-Entity-Definitionen. Eine Parameter-Entity-Definition definiert eine Art Makro, das irgendwo in der DTD angesprochen und referenziert werden kann. Diese Makros erscheinen nicht in HTML-Dokumenten, lediglich in der DTD. Andere Makrotypen, genannt Zeichenreferenzen, können im Text eines HTML-Dokuments oder in Attributwerten erscheinen.

Wird das Parameter-Entity in der DTD über den Namen angesprochen, so wird es in eine Zeichenkette (string) aufgelöst.

Eine Parameter-Entity-Definition beginnt mit dem Schlüsselwort <!ENTITY % gefolgt vom Entity-Namen, dann der in Anführungszeichen eingeschlossenen Zeichenkette, zu der das Entity aufgelöst wird, und letzlich der schließenden Klammer >. Die Benutzung eines Parameter-Entity in einer DTD beginnt mit »%«, gefolgt vom Parameter-Entity-Namen und optional dem abschließenden »;«.

Das folgende Beisiel definiert die Zeichenkette, in die das »%fontstyle;«-Entity aufgelöst wird.

<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

Die Zeichenkette, in die das Parameter-Entity aufgelöst wird, kann andere Parameter-Entity-Namen enthalten. Diese Namen werden rekursiv aufgelöst. Im folgenden Beispiel ist das »%inline;«-Parameter-Entity so definiert, dass es die »%fontstyle;«-, »%phrase;«-, »%special;«- and »%formctrl;«- Parameter enthält.

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

Zwei DTD-Entities werden Ihnen häufig in der HTML-DTD begegnen: »%block;« und »%inline;.« Sie werden verwendet, wenn das Inhaltsmodell Block-Level- bzw. Inline-Elemente umfasst (definiert in Abschnitt 7, »Die globale Struktur eines HTML-Dokuments«).

3.3.3 Elementdeklarationen

Der Hauptteil der HTML-DTD besteht aus den Deklarationen von Elementtypen und deren Attribute. Das <!ELEMENT-Schlüsselwort beginnt eine Deklaration und das >-Zeichen beschließt sie. Dazwischen sind spezifiziert:

  1. Der Name des Elements
  2. Ob die Tags des Elements optional sind. Erscheinen zwei Bindestriche hinter dem Elementnamen, so heißt das, Start- und End-Tag sind vorgeschrieben. Ein Bindestrich, gefolgt vom Buchstaben »O« bedeutet, der End-Tag kann weggelassen werden. Zwei »O«s zeigen an, dass sowohl Start- als auch End-Tag weggelassen werden können (o = omit).
  3. Der Inhalt des Elements, so vorhanden. Der erlaubte Inhalt eines Elements wird dessen Inhaltsmodell genannt. Elementtypen, die dafür angelegt sind, keinen Inhalt zu haben, werden Leere Elemente genannt. Das Inhaltsmodell für so ein Element ist durch die Verwendung des Schlüsselwortes »EMPTY« deklariert.

Anmerkung der Übersetzer:

Der zweite Punkt, der sich mit dem Weglassen von Start- und/oder End-Tags beschäftigt, ist für XML und damit XHTML nicht mehr relevant.

In diesem Beispiel:

    <!ELEMENT UL - - (LI)+>

Diese Beispiel zeigt die Deklarierung eines leeren Elementtyps:

    <!ELEMENT IMG - O EMPTY>

Inhaltsmodell-Definitionen 

Das Inhaltsmodell beschreibt, was in einer Instanz eines Elementtyps enthalten sein kann. Inhaltsmodell-Definitionen können beinhalten:

Das Inhaltsmodell eines Elements ist spezifiziert durch die folgende Syntax. Bitte beachten Sie, dass das Listing unten eine Vereinfachung der vollständigen SGML-Syntax-Regeln ist und z.B. Präzedenzen nicht ausdrückt.

( ... )
begrenzt eine Gruppe.
A
A muss genau einmal vorkommen.
A+
A muss einmal oder mehrmals vorkommen.
A?
A darf nicht oder muss einmal vorkommen.
A*
A kann nicht oder mehrmals vorkommen.
+(A)
A kann vorkommen.
-(A)
A darf nicht vorkommen.
A | B
Entweder A oder B muss vorkommen, aber nicht beide.
A , B
A und B müssen in dieser Reihenfolge vorkommen.
A & B
A und B müssen in beliebiger Reiehenfolge vorkommen.

Anmerkung der Übersetzer:

Die Exklusionen und Inklusionen (+(A) und -(A)) sowie der Ausdruck A & B sind in XML nicht mehr möglich und finden sich folglich nicht mehr in den XHTML-DTDs.

Hier einige Beispiel aus der HTML-DTD:

   <!ELEMENT UL - - (LI)+>

Das UL-Element muss ein oder mehrere LI-Elemente enthalten.

   <!ELEMENT DL    - - (DT|DD)+>

Das DL-Element muss ein oder mehrere DT- oder DD-Elemente in beliebiger Reihenfolge enthalten.

   <!ELEMENT OPTION - O (#PCDATA)>

Das OPTION-Element kann nur Text und Entities wie &amp; enthalten -- dies wird durch den SGML-Daten-Typ #PCDATA angezeigt.

Ein paar HTML-Elementtypen verwenden ein weiteres SGML-Feature, um Elemente von ihrem Inhaltsmodell auszuschließen. Ausgeschlossenen Elementen wird ein Bindestrich vorangestellt. Expliziter Ausschluss überschreibt erlaubte Elemente.

In diesem Beispiel sagt -(A), dass das Element A nicht in einem anderen A-Element vorkommen kann (d.h., Anker können nicht verschachtelt werden).

   <!ELEMENT A - - (%inline;)* -(A)>

Beachten Sie, dass der A-Elementtyp Teil des DTD-Parameter-Entities »%inline;« ist, jedoch durch -(A) explizit ausgeschlossen wird.

Anmerkung der Übersetzer:

Da es diese Ausschlussmöglichkeit (-(A)) in XML und damit in XHTML nicht mehr gibt, müsste, um die gleiche Definition des Inhaltsmodells zu erzielen, eine explizite Definition ohne das Element A erfolgen. Hierzu müsste also das Parameter-Entity %inline; umdefiniert werden, oder es könnte hier nicht zum Einsatz kommen.

Enstprechend verbietet die folgende Elementtyp-Deklaration für FORM verschachtelte Formulare:

   <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

3.3.4 Attributdeklarationen

Mit dem <!ATTLIST-Schlüsselwort beginnt die Deklaration von Attributen, die ein Element erhalten kann. Ihm folgen der Name des in Frage kommenden Elements, eine Liste von Attributdefinitionen und ein abschließendes >. Jede Attributdefinition ist ein Triplet, das Folgendes definiert:

Anmerkung der Übersetzer:

Der Wert #IMPLIED bedeutet so viel wie »optional«.

In diesem Beispiel ist das name-Attribute für das MAP-Element definiert. Das Attribut ist für dieses Element optional.

<!ATTLIST MAP
  name        CDATA     #IMPLIED
  >

Der Typ der erlaubten Werte ist als CDATA, einem SGML-Datentyp, angegeben. CDATA ist Text, der Zeichenreferenzen (siehe Abschnitt 5.3) enthalten kann.

Für weitere Informationen zu »CDATA«, »NAME«, »ID« und andere Datentypen lesen Sie bitte im Abschnitt 6, »HTML-Grunddatentypen« nach.

Das folgende Beispiel zeigt mehrere Attributdefinitionen:

rowspan     NUMBER     1         -- number of rows spanned by cell --
http-equiv  NAME       #IMPLIED  -- HTTP response header name  --
id          ID         #IMPLIED  -- document-wide unique id -- 
valign      (top|middle|bottom|baseline) #IMPLIED

Das rowspan-Attribut verlangt Werte vom Typ NUMBER. Der Standardwert ist explizit als »1« gegeben. Das optionale http-equiv-Attribut verlangt Werte vom Typ NAME. Das optionale id-Attribut verlangt Werte vom Typ ID. Das optionale valign-Attribut ist gezwungen, Werte aus der Menge {top, middle, bottom, baseline} anzunehmen.

DTD-Entities in Attributdefinitionen 

Attributdefinitionen können auch Parameter-Entity-Referenzen enthalten.

In diesem Beispiel sehen wir, dass die Attributdefinitionsliste für das LINK-Element mit dem »%attrs;«-Parameter-Entity beginnt.

<!ELEMENT LINK - O EMPTY               -- a media-independent link -->
<!ATTLIST LINK
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  href        %URI;          #IMPLIED  -- URI for linked resource --
  hreflang    %LanguageCode; #IMPLIED  -- language code --
  type        %ContentType;  #IMPLIED  -- advisory content type --
  rel         %LinkTypes;    #IMPLIED  -- forward link types --
  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
  media       %MediaDesc;    #IMPLIED  -- for rendering on these media --
  >

Start-Tag: erforderlich, End-Tag: verboten

Das »%attrs;«-Parameter-Entity ist folgendermaßen definiert:

<!ENTITY % attrs "%coreattrs; %i18n; %events;">

Das »%coreattrs;«-Parameter-Entity in der »%attrs;«-Definition wird wie folgt aufgelöst:

<!ENTITY % coreattrs
 "id          ID             #IMPLIED  -- document-wide unique id --
  class       CDATA          #IMPLIED  -- space-separated list of classes --
  style       %StyleSheet;   #IMPLIED  -- associated style info --
  title       %Text;         #IMPLIED  -- advisory title --"
  >

Das »%attrs;«-Parameter-Entity wurde aus Bequemlichkeit definiert, weil diese Attribute für die meisten HTML-Elementtypen definiert sind.

Ähnlich definiert die DTD den »%URI;«-Parameter-Entity als aufzulösen in die Zeichenkette »CDATA«.

<!ENTITY % URI "CDATA"
    -- a Uniform Resource Identifier,
       see [URI]
    -->

Wie dieses Beispiel zeigt, versorgt das Paramater-Entity »%URI;« Leser der DTD mit mehr Information als für ein Attribut zu dem Datentyp erwartet werden. Ähnlich wurden Entities für »%Color;«, »%Charset;«, »%Length;«, »%Pixels;« usw. definiert

Boolesche Attribute 

Einige Attribute spielen die Rolle boolescher Variablen (z.B. das selected-Attribut für das OPTION-Element). Ihr Auftauchen im Start-Tag eines Elements impliziert, dass der Wert des Attributs »wahr« (true) ist; ihr Fehlen impliziert den Wert »falsch« (false).

Boolesche Attribute können nur einen zulässigen Wert annehmen: den Namen des Attributs selbst (z.B. selected="selected").

Dieses Beispiel definiert das selected-Attribut als boolesches Attribut.

selected     (selected)  #IMPLIED  -- option is pre-selected --

Das Attribut wird bei Auftauchen im Start-Tag des Elements auf »wahr« gesetzt:

<OPTION selected="selected">
...Inhalt...
</OPTION>

In HTML können boolesche Attribute in minimierter Form auftreten -- der Wert des Attributs erscheint allein im Start-Tag des Elelements. So kann selected gesetzt werden, indem man schreibt:

<OPTION selected>

anstatt:

<OPTION selected="selected">

Autoren sollte bewusst sein, dass viele Benutzerprogramme nur die minimierte Form erkennen, nicht aber die vollständige Form.

Anmerkung der Übersetzer:

Die minimierte Form ist in XHTML nicht mehr zulässig.