DokumenttypdefinitionEine Dokumenttypdefinition (englisch Document Type Definition), abgekürzt DTD, ist ein Satz an Regeln, der benutzt wird, um Dokumente eines bestimmten Typs zu deklarieren. Ein Dokumenttyp ist dabei eine Klasse ähnlicher Dokumente, wie beispielsweise Telefonbücher oder Inventurdatensätze. Die Dokumenttypdefinition besteht dabei aus Elementtypen, Attributen von Elementen, Entitäten und Notationen. Konkret heißt das, dass in einer DTD die Reihenfolge, die Verschachtelung der Elemente und die Art des Inhalts von Attributen festgelegt wird, also die Struktur des Dokuments. Eine DTD spezifiziert die Syntax einer Anwendung von SGML oder XML, wie beispielsweise die von ihnen abgeleiteten Sprachen HTML oder XHTML. Diese Syntax ist normalerweise in einer weniger generellen Form gehalten als die SGML- oder XML-Syntax. FunktionDie Syntax und Semantik einer DTD ist Bestandteil der SGML- und XML-Spezifikation. Die DTD wird bereits beim Lesen des Dokumentes geprüft. In SGML muss jedem Dokument zwingend eine DTD zugeordnet sein. In XML ist diese Zuordnung optional. Ein Dokument auf Basis von DTD ( Hinweis: Im Folgenden werden die Beispiele jeweils in XML-Syntax angegeben. Dokumenttypdeklaration (DOCTYPE)Eine Dokumenttypdeklaration stellt die Verbindung zwischen einem Dokument und der DTD her. Die Dokumenttypdeklaration wird am Beginn eines Dokumentes vor dem Wurzelelement angegeben. Die DTD kann als externe Datei referenziert werden (externe DTD) oder aber auch direkt im Dokument eingebunden werden (interne DTD). Die Syntax für eine Dokumenttypdeklaration lautet in SGML und XML: <!DOCTYPE Wurzelelement SYSTEM "datei.dtd">
<!DOCTYPE Wurzelelement SYSTEM "datei.dtd" [ … ]>
<!DOCTYPE Wurzelelement PUBLIC "Public Identifier" "datei.dtd">
<!DOCTYPE Wurzelelement PUBLIC "Public Identifier" "datei.dtd" [ … ]>
<!DOCTYPE Wurzelelement [ … ]>
In SGML sind zusätzlich auch folgende Varianten ohne System-Identifikator zulässig: <!DOCTYPE Wurzelelement PUBLIC "Public Identifier">
<!DOCTYPE Wurzelelement PUBLIC "Public Identifier" [ … ]>
In HTML5 gibt es zwar keine DTD mehr, die Dokumenttypdeklaration existiert aber in einer verkürzten Form weiter: <!DOCTYPE html>
Der System-Identifikator (SYSTEM), im Beispiel der Eintrag Der Public-Identifikator (PUBLIC) enthält einen öffentlich bekannten Identifikator für die DTD. Zum Beispiel wird mit dem Identifikator Der Eintrag Markup-DeklarationenInnerhalb einer DTD kann die Dokumentstruktur mit Deklarationen von Elementtypen, Attributlisten, Entities und Notationen und Textblöcken definiert werden. Dabei können spezielle Parameter-Entities benutzt werden, die DTD-Teile enthalten und nur innerhalb der DTD erlaubt sind. Textblöcke sind entweder CDATA oder PCDATA. Die Strukturelemente (Building Blocks) werden über Attribut-Zuordnungen definiert: CDATACDATA (englisch Character Data) kennzeichnet einen ungeparsten Textblock. Die Syntax für einen CDATA-Bereich lautet: <![CDATA[Zeichendaten]]>
Im Bereich Zeichendaten sind alle Zeichen erlaubt, ausgenommen das Erkennungsmuster für das Ende <![CDATA[<Diese><Daten>werden<nicht><geparst>.]]>
Innerhalb einer Entitätendefinition in XML lautet die Syntax: <!ENTITY amp "Zeichendaten">
In SGML muss das Schlüsselwort CDATA explizit angegeben werden: <!ENTITY amp CDATA "Zeichendaten">
Im Bereich Zeichendaten sind alle Zeichen erlaubt, ausgenommen der Endekennung der Zeichenkette <!ENTITY amp CDATA "&">
Die Zeichendaten PCDATAFür PCDATA (englisch Parsed Character Data) wird das Schlüsselwort #PCDATA verwendet. Damit wird ein Textblock, der auch weitere Anweisungen an den Parser enthalten kann, gekennzeichnet. Der Inhalt dieses Textblocks wird syntaktisch vom Parser analysiert. Im Gegensatz zu CDATA dürfen nur Zeichen enthalten sein, die keine Tags, Deklarationen oder Verarbeitungsanweisungen einleitet. Verboten sind hier beispielsweise Element-Deklarationen (ELEMENT)Mit einer Elementtyp-Deklaration wird ein Element und sein möglicher Inhalt definiert. In einem validen Dokument dürfen nur Elemente vorkommen, die in der DTD definiert sind. Der Inhalt eines Elementes kann durch die Angabe anderer Elementnamen und durch einige Schlüsselwörter und Zeichen angegeben werden.
<!ELEMENT html (head, body)>
<!ELEMENT hr EMPTY>
<!ELEMENT div (#PCDATA | p | ul | ol | dl | table | pre | hr |
h1|h2|h3|h4|h5|h6 | blockquote | address | fieldset)*>
<!ELEMENT dl (dt|dd)+>
Attribut-Deklarationen (ATTLIST)Attribute werden innerhalb einer Attributliste Beispiele für Elemente:
Mit den Attribut-Vorgaben kann angegeben werden, ob ein Attribut vorkommen muss (
Beispiel einer Attribut-Deklaration: <!ATTLIST img
id ID #IMPLIED
src CDATA #REQUIRED
alt CDATA #REQUIRED
ismap IDREF #IMPLIED
>
Entitäten-Deklarationen (ENTITY)Eine Entität ist eine benannte Abkürzung für eine Zeichenkette oder ein externes Dokument, die innerhalb der DTD oder des Dokumentes, verwendet werden kann. Eine Entität der Form Entitäten bestehen aus Zeichenketten. Diese können selber wieder Entitäten und wohlgeformtes Markup enthalten: <!ENTITY name "Benedikt">
<!ENTITY papst "&name;, der XVI.">
<!ENTITY wplink "<a href='http://de.wikipedia.org'>Wikipedia</a>">
Entitäten können auch für Inhalt einer Datei definiert werden. Dabei wird ein Public- oder System-Identifier benutzt. <!ENTITY kapitel1 SYSTEM "kapitel1.xml">
<!ENTITY wichtig PUBLIC "-//privat//WICHTIG//" "wichtig.xml">
Bei externen Entities kann zusätzlich angegeben werden, dass es sich um eine nicht analysierte Entität (NDATA, Nicht-XML/SGML-Daten) handelt. In diesem Fall muss eine Notation angegeben werden (hier "gif"). <!ENTITY bild SYSTEM "../grafiken/bild.gif" NDATA gif>
Notationsdeklarationen (NOTATION)Notationen sind Hinweise zur Interpretation von externen Daten, die nicht direkt vom Parser verarbeitet werden. Notationen können sich beispielsweise auf ein Dateiformat für Bilder beziehen. <!NOTATION Datentyp SYSTEM "URL">
<!NOTATION Datentyp PUBLIC "Identifikator">
NMTOKENNMTOKEN (name token) ist mit einem Bezeichner verwandt, geht jedoch freizügiger mit den Regeln zur Namensgebung um. So sind bei einem NMTOKEN Bezeichner mit führender Ziffer oder führendem Punkt erlaubt, wohingegen bei einem Bezeichner nur Buchstaben, Ideogramme und underlines an erster Stelle erlaubt sind. Somit ist jeder Bezeichner auch ein NMTOKEN, jedoch nicht umgekehrt. 12alpha
.crc
Deklarations-Beispiel: <!ATTLIST birthdate
year NMTOKEN #REQUIRED
>
Parameter-EntitätParameter-Entitäten enthalten eine benannte Zeichenkette, die mittels <!ENTITY % datei SYSTEM "andere-datei.ent">
%datei;
<!ENTITY % foo.inhalt "(bar|doz)*">
<!ELEMENT foo %foo.inhalt;>
Bedingte AbschnitteEin bedingter Abschnitt ist ein Konstrukt, um Deklarationen ein- oder auszuschalten. Beispiel: <![INCLUDE[
<!ENTITY hallo "welt">
]]>
Schaltet die Deklaration von <![IGNORE[
<!ENTITY hallo "welt">
]]>
um Man verwendet bedingte Abschnitte wie oben jedoch nicht allein, sondern meist im Zusammenspiel mit Parameter-Entities: <!ENTITY % weiche "INCLUDE">
<![%weiche;[
<!ENTITY hallo "welt">
]]>
Das Parameter-Entity Durch diese Art der Schreibweise kann ein bedingter Abschnitt durch Überschreibung von Parameter-Entities angepasst werden. Beispiel eines kurzen Dokumentes mit Verweis auf eine externe DTD: <?xml version="1.0"?>
<!DOCTYPE hallo SYSTEM "hallo.dtd">
<hallo>Hallo Welt!</hallo>
In der XML-Deklaration kann im Beispiel auch das Pseudoattribut <?xml version="1.0" standalone="no"?>
<!DOCTYPE hallo SYSTEM "hallo.dtd">
<hallo>Hallo Welt!</hallo>
Der Inhalt von <!ELEMENT hallo (#PCDATA)>
Kurzes Dokument mit interner DTD: <?xml version="1.0"?>
<!DOCTYPE hallo [<!ELEMENT hallo (#PCDATA)>]>
<hallo>Hallo Welt!</hallo>
In der XML-Deklaration kann im Beispiel auch das Pseudoattribut <?xml version="1.0" standalone="yes"?>
<!DOCTYPE hallo [<!ELEMENT hallo (#PCDATA)>]>
<hallo>Hallo Welt!</hallo>
Siehe auch
Weblinks
|