<!ATTLIST ELEMENTNAME ATTRIBUTE-DECLARATION-LIST>Diese Attributliste kann direkt auf die Definition des Elements folgen, sie kann auch später festgelegt werden. Ferner können zu einem Element mehrere dieser Attributlisten definiert werden, dann gilt die Vereinigung der Attribute als definiert. Schließlich kann zu einem Element ein Attribut mehrfach und verschiedenartig definiert werden. Dann ist die erste Definition gültig, die später folgenden Definitionen werden verworfen.
QNAME TYPE DEFAULTEin QNAME ist ein Name, der die Xml-typischen Bedingungen an Namen erfüllen muß. Es handelt sich auch hier, wie bei Elementen, um einen qualified Name, der entweder keinen Doppelpunkt enthält oder aus einem namespace-prefix und einen local part mit dem Doppelpunkt als Trennzeichen zusammengefügt wird.
ID Attributwert gilt als eindeutige ID IDREF Attributwert muss gleich einer ID sein IDREFS dito für ein oder mehrere ID's ENTITY Attributwert muss gleich ungeparster Entity sein ENTITIES dito für ein oder mehrere Entities NMTOKEN Attributwert muss gleich einem Namen sein NMTOKENS dito für ein oder mehrere Namen
<!ATTLIST img src CDATA #REQUIRED name CDATA #IMPLIED >Dies ist der einfachste Fall: Für das Element img werden zwei Attribute definiert - src und name. Das erste Attribut ist notwendig, das zweite ist optional.
<?xml version='1.0'?> <!DOCTYPE attribute-defaults [ <!ELEMENT attribute-defaults (myImage+)> <!ELEMENT myImage EMPTY> <!ATTLIST myImage src CDATA "my-picture.gif" name CDATA #IMPLIED > ]> <!-- Beginn des Dokumentes --> <attribute-defaults> <myImage/> <myImage src='coffee-beans.gif' name='i-like-coffee'/> </attribute-defaults>Sie definiert ein Wurzelelement, das ein oder mehrere 'myImage' - Elemente enthält. Dieses ist ein Element ohne Content mit zwei Attributen, das erste Attribut ist mit einem Default-Wert, das zweite als #IMPLIED festgelegt. Im Xml-Dokument wird das Element zweimal verwendet, beim ersten Mal ohne Attribute, beim zweiten Mal sind beide Attribute gesetzt, der Standardwert ist hier überschrieben.
Wird das Attribut so mit einem Standardwert definiert und fehlt es im Element, dann gilt der Standardwert als gesetzt. Damit können Informationen, die in den meisten, jedoch nicht in allen Fällen, einen Standardwert haben, auf einfache Weise in der DTD festgelegt werden, ohne daß das Attribut bei jedem Element notiert werden muß.
<?xml version='1.0'?> <!DOCTYPE id-sample [ <!ELEMENT id-sample (houses, rooms)> <!ELEMENT houses (house*)> <!ELEMENT rooms (room*)> <!ELEMENT house (#PCDATA)> <!ELEMENT room (#PCDATA)> <!ATTLIST house house-id ID #REQUIRED house-owner CDATA #IMPLIED> <!ATTLIST room room-id ID #REQUIRED house-id IDREF #REQUIRED> ]> <id-sample> <houses> <house house-id='h-1'/> <house house-id='h-2'/> </houses> <rooms> <room room-id='r-1' house-id='h-1'/> <room room-id='r-2' house-id='h-1'/> <room room-id='r-3' house-id='h-2'/> </rooms> </id-sample>Dieses Beispiel bildet Daten ab, die aus einer relationalen Datenbank stammen könnten. Zwei Tabellen - houses und rooms - mit Zeilen house sowie room. Die Spalten einer Tabelle werden nicht als Attribute des übergeordneten 'Tabellenelementes', sondern als Attribute der Zeilenelemente dargestellt. Primärschlüssel-Spalten können auf ID-Attribute abgebildet werden, Fremdschlüssel-Spalten werden als IDREF-Attribute codiert. Da es sich bei ID-Werten um korrekte Namen handeln muß, beginnen diese mit einem Buchstaben. Im Gegensatz zu Fremdschlüssel-Einschränkungen kann allerdings bei IDREF nur gefordert werden, daß es sich um eine ID handeln muß, der Elementtyp, von dem diese ID stammen muß, läßt sich nicht mehr festlegen. In der letzten Zeile wäre deshalb auch ein Selbstbezug in der folgenden Form möglich:
<room room-id='r-3' house-id='r-3'/>Kopieren Sie sich dieses Beispiel in den Online-Xml-Trainer und ersetzen Sie bsp. 'r-3' durch 'r-2' oder 'h-2' durch 'h-3'. Dann erhalten Sie die entsprechenden Fehlermeldungen bezüglich ID oder IDREF.
<?xml version='1.0'?> <!DOCTYPE meetings [ <!ELEMENT meetings (meeting*)> <!ELEMENT meeting EMPTY> <!ATTLIST meeting title CDATA #REQUIRED day-of-week (Mo | 1Di | Mi | Do | Fr) #REQUIRED > ]> <meetings> <meeting title='Wochenanfangs-Konferenz' day-of-week='Mo'/> <meeting title='Abteilungsleiter-Sitzung' day-of-week='Do'/> </meetings>Die als Attributwert erlaubten Ausdrücke werden geklammert und mit '|' getrennt. Hier sind alle gültigen NMTOKEN erlaubt, also zusammenhängende Zeichenfolgen, welche auch mit Ziffern beginnen dürfen.