Sämtliche für ein Element zulässigen Attribute können gemeinsam definiert werden durch:
<!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.
Die Attribute-Declaration-List enthält eine oder mehrere Attributdefinitionen:
QNAME TYPE DEFAULT
Ein 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.
Attributtypen können entweder Text (= CDATA), Token-Typen oder Aufzählungstypen sein.
Beim Typ CDATA sind alle Textzeichen einschließlich globaler Entities erlaubt. Der Ersetzungstext der Entities
darf jedoch keine Elemente, also keine < und > enthalten. Die Entities für diese Spitzklammern
können verwendet werden.
Erlaubte Token-Typen sind:
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
Wird ein Attribut vom Typ ID definiert, so muß der dem Attribut zugewiesene Wert eindeutig
für dieses Attribut im aktuellen Dokument sein. Erlaubt sind übliche Namen, sie dürfen nicht mit einer
Zahl beginnen. Ausdrücke wie 'i-1', 'i-2' sind folglich zulässig, so daß ID's aus Datenbanken verwendet
werden können. Ein Element darf höchstens ein Attribut vom Typ ID haben, das Attribut muß vom Typ
#IMPLIED oder #REQUIRED sein.
Wurde ein ID-Attribut definiert, können anschließend Attribute vom Typ IDREF/IDREFS
gefordert werden, für die bei der Verwendung im Dokument als Wert nur einer der im Dokument auffindbaren ID's zulässig ist.
IDREF erhält nur eine ID als Wert, bei IDREFS können mehrere ID's, durch Leerzeichen getrennt, angegeben
werden.
Für ENTITY muß der Name einer externen, ungeparsten Entity mit einem NDATA-Abschnitt gewählt
werden, siehe hierzu ein Beispiel unter ENTITIES.
Bei NMTOKEN wird gefordert, daß der Attributwert den Regeln für Xml-Namenszeichen entspricht.
Damit sind Zahlen zu Beginn erlaubt, mehrere, durch Leerzeichen getrennte Ausdrücke jedoch ausgeschlossen.
Bei NMTOKENS können Leerzeichen verwendet werden, diese trennen mehrere NMTOKEN-Ausdrücke.
Bei Aufzählungstypen wird die Liste der erlaubten Werte der Reihe nach angegeben und durch |
getrennt.
ATTRIBUTE-DEFAULT: Für ein Attribut kann entweder in Hochkommata
ein Wert festgelegt oder das Attribut vom Typ #IMPLIED (= optional), #REQUIRED oder #FIXED näher spezifiziert
werden. Bei #IMPLIED kann auf das Attribut im Xml-Dokument verzichtet werden, #REQUIRED erfordert das
Attribut in jedem Element. #FIXED bedeutet, daß nur ein einziger Wert zulässig ist, dieser muß anschließend
angegeben werden. Ein spezifizierter Wert und #IMPLIED überschneiden sich, da ein so qualifiziertes Attribut
im Element fehlen kann. Der Unterschied liegt darin, daß bei einem Default-Wert das Attribut dennoch vorhanden
ist und es mit seinem Default-Wert verarbeitet wird, wohingegen es bei #IMPLIED tatsächlich fehlt.
Beispiele für Attribut-Definitionen
<!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.
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.
Rufen Sie die obige Xml-Datei direkt auf. Als Ergebnis wird beim ersten Element das Attribut mit Standardwert
ausgegeben, dies erledigt der Parser im Hintergrund. Beim zweiten myImage kann dieser Wert dennoch überschrieben
werden. Das als #IMPLIED deklarierte Attribut 'name' ist nur dann vorhanden, falls es tatsächlich im Element
angegeben wurde.
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ß.
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.
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.
Link zur hiesigen Seite als QR-Code
Kontaktformular:
Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!
Mit dem Klick auf den Button stimmen Sie zu, daß Cookies in Ihrem Browser gespeichert werden. Informationen zu den gespeicherten Cookies finden Sie unter Datenschutz#Cookies.Bei Fragen zur Technik wenden Sie sich bitte an Server-Daten - Web-Datenbank-Lösungen