Attribute werden verwendet, um Name-Wert-Paare mit Elementen zu verknüpfen. Attribut-Spezifikationen dürfen ausschließlich innerhalb von Start-Tags und Leeres-Element-Tags erscheinen. Folglich ist die Produktion zu deren Erkennung im Abschnitt A.3.1 zu finden. Deklarationen von Attribut-Listen dürfen benutzt werden, um
Attributlisten-Deklarationen spezifizieren den Namen, Datentyp und ggf. den Vorgabewert jedes Attributs, das zu einem gegebenen Element gehört:
Attributlisten-Deklaration | ||||||||
---|---|---|---|---|---|---|---|---|
|
Der Name in der AttlistDecl-Regel ist der Typ eines Elements. Benutzeroptional kann ein XML-Prozessor eine Warnung ausgeben, wenn Attribute für einen nicht deklarierten Elementtyp deklariert werden; dies ist jedoch kein Fehler. Der Name in der AttDef-Regel ist der Name des Attributs.
Falls mehr als eine AttlistDecl für ein gegebenes Element angegeben wird, werden sie alle vereinigt. Falls mehr als eine Definition für dasselbe Attribut eines gegebenen Elementtyps angegeben wird, so gilt zwingend die erste Deklaration, und alle weiteren werden ignoriert. Zwecks Zusammenarbeit können sich Verfasser von DTDs entscheiden, maximal eine Attributlisten-Deklaration für einen gegebenen Elementtyp, maximal eine Attributdefinition für einen gegebenen Attributnamen und mindestens eine Attributdefinition in jeder Attributlisten-Deklaration vorzusehen. Zwecks Zusammenarbeit kann ein XML-Prozessor benutzeroptional eine Warnung ausgeben, wenn mehr als eine Attributlisten-Deklaration für einen gegeben Elementtyp angegeben ist oder wenn mehr als eine Attributdefinition für ein gegebenes Attribut angegeben ist; dies ist jedoch kein Fehler.
Es gibt drei Arten von XML-Attribut-Typen: einen Zeichenketten-Typ (string), eine Menge von Token-Typen (tokenized) und einen Aufzählungstyp (enumerated). Der Zeichenketten-Typ kann jede literale Zeichenkette als Wert aufnehmen. Der Token-Typ hat verschiedene lexikalische und semantische Beschränkungen:
Attributtypen | |||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Gültigkeitsbeschränkung:
ID
Werte des Typs ID müssen zur
Produktion Name passen. Ein Name darf nicht
mehr als einmal als Wert dieses Typs in einem
XML-Dokument
erscheinen. Das heißt, ID-Werte müssen die
Elemente, die sie tragen, eindeutig
identifizieren.
Gültigkeitsbeschränkung: Eine
ID pro Elementtyp
Kein
Elementtyp darf mehr als ein ID-Attribut
besitzen.
Gültigkeitsbeschränkung: Vorgabe für
ID-Attribute
Ein
ID-Attribut muss einen deklarierten
Vorgabewert von #IMPLIED oder
#REQUIRED haben.
Gültigkeitsbeschränkung:
IDREF
Werte des Typs
IDREF müssen zur Produktion Name
passen, und Werte des Typs
IDREFS müssen zur Produktion Names
passen. Jeder Name muss mit dem Wert eines
ID-Attributs eines Elements im
XML-Dokument
übereinstimmen. Das heißt, IDREF-Werte müssen zum
Wert irgendeines ID-Attributs passen.
Gültigkeitsbeschränkung:
Entity-Name
Werte des Typs ENTITY
müssen zur Produktion Name passen, Werte des
Typs ENTITIES
müssen zur Produktion Names passen. Jeder
Name muss mit dem Namen eines in der
DTD deklarierten, nicht analysierten
(unparsed) Entity übereinstimmen.
Gültigkeitsbeschränkung: Name-Token
Werte des Typs NMTOKEN
müssen zur Produktion Nmtoken passen, Werte des
Typs NMTOKENS
müssen zur Produktion Nmtokens passen.
Aufzählungs-Attributtypen können einen Wert aus einer deklarierten Liste von Werten annehmen. Es gibt zwei Arten von Aufzählungstypen:
Aufzählungs-Attributtypen | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Ein NOTATION-Attribut identifiziert eine Notation, die in der DTD mit einem zugehörigen System- und/oder Public-Identifier deklariert ist. Die Notation dient dazu, das Element mit diesem Attribut zu interpretieren.
Gültigkeitsbeschränkung:
Notation-Attribute
Werte dieses Typs müssen
zu einem der Notation-Namen passen, die in der Deklaration
enthalten sind. Alle Notation-Namen in der Deklaration
müssen deklariert sein.
Gültigkeitsbeschränkung:
Aufzählung
Werte dieses Typs müssen zu
einem der Nmtoken-Token aus der Deklaration
passen.
Zwecks Zusammenarbeit sollte jedes Nmtoken nicht mehr als einmal in den Aufzählungsattributen eines einzelnen Elementes vorkommen.
Eine Attribut-Deklaration enthält Informationen, ob ein Attribut vorkommen muss und, falls nicht, wie ein XML-Prozessor bei einem im Dokument fehlenden Attribut reagieren sollte.
Attribut-Vorgaben | |||||
---|---|---|---|---|---|
|
In einer Attribut-Deklaration bedeutet #REQUIRED (notwendig), dass das Attribut immer angegeben werden muss und #IMPLIED (impliziert), dass es keinen Vorgabewert gibt. Wenn die Deklaration weder #REQUIRED noch #IMPLIED ist, enthält der AttValue-Wert den deklarierten Vorgabe-Wert. Das Schlüsselwort #FIXED (fest) zeigt an, dass das Attribut stets den Vorgabewert haben muss. Falls ein Vorgabewert deklariert ist, verhält sich ein XML-Prozessor bei einem weggelassenen Attribut so, als ob das Attribut mit dem Vorgabewert im Dokument stünde.
Gültigkeitsbeschränkung: Notwendiges
Attribut
Falls die Attribut-Vorgabe das
Schlüsselwort #REQUIRED ist, so muss das
Attribut für alle Elemente des in der
Attributlisten-Deklaration genannten Typs angegeben werden.
Gültigkeitsbeschränkung: korrekte
Attribut-Vorgabe
Der deklarierte Vorgabewert
muss den lexikalischen Beschränkungen des deklarierten
Attribut-Typs genügen.
Gültigkeitsbeschränkung: Feste
Attribut-Vorgabe
Wenn ein Attribut einen mit
dem Schlüsselwort #FIXED deklarierten
Vorgabewert besitzt, müssen alle Instanzen des Attributes
den Vorgabewert besitzen.
Beispiel für Attributlisten-Deklarationen:
<!ATTLIST termdef id ID #REQUIRED name CDATA #IMPLIED> <!ATTLIST list type (bullets|ordered|glossary) "ordered"> <!ATTLIST form method CDATA #FIXED "POST">
Bevor der Wert eines Attributs an die Anwendung weitergereicht oder auf Gültigkeit geprüft wird, muss der XML-Prozessor ihn folgendermaßen normalisieren:
#xD#xA, die Teil eines extern-analysierten (external parsed) Entity oder des literalen Wertes eines intern analysierten (internal parsed) Entity ist. Für sie wird nur ein einziges #x20 angehängt.
Falls der deklarierte Wert nicht CDATA ist, muss der XML-Prozessor den normalisierten Wert in folgender Weise weiterverarbeiten: Er entfernt alle führenden und abschließenden Leerzeichen (#x20) und ersetzt Folgen von Leerzeichen (#x20) durch ein einzelnes Leerzeichen (#x20).
Alle Attribute, für die keine Deklaration gelesen wurde, sollten von einem nicht-validierenden Parser behandelt werden, als ob sie als CDATA deklariert wären.