Qualifizierte und unqualifizierte Attribute in XML Schema
David Maus, 3. Jan 2017
Im Rahmen des Projektes Linked Open Emblem Data nehme ich gerade das für Emblembuchbeschreibungen verwendete Emblem Schema unter die Lupe. Um einen Eindruck davon zu bekommen, wie eine Emblembuchbeschreibung aussieht, die von allen Optionen des Schemas gebraucht macht, habe ich mit Hilfe von <oXygen/> ein Beispieldokument auf Basis des Schemas erstellen lassen. Zu meinem Erstaunen enthielt das Beispieldokument ein einzelnes, mit dem Namensraum des Emblem Schemas qualifiziertes Attribut.

Stellt sich heraus, dass die Regel für den Namensraum von Attributdefinitionen sich danach unterscheiden,
wo ein Attribut deklariert wird. Wird es direkt als Kindelement des
schema
-Elements als sogenanntes "globales Attribut" deklariert, dann wird
immer der im
targetNamespace
-Attribut des Schemas angegebenen Namensraum verwendet. In allen anderen
Fällen kann mit Hilfe des Attributs
form
angegeben werden, ob es
qualified
, also mit, oder
unqualified
und damit ohne Namensraum
definiert ist. Wird das Attribut
form
weggelassen, dann entscheidet der im Attribut
attributeFormDefault
des Wurzelelements angebene Wert.
Das heisst, dass in folgendem Schema das Attribut
byReferenceQualified
mit, das
Attribute
byReference
jedoch ohne Namensraum definiert ist:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.org/" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://example.org/"> <xs:element name="root"> <xs:complexType> <xs:attribute ref="byReferenceQualified"/> <xs:attributeGroup ref="byReference"/> </xs:complexType> </xs:element> <xs:attribute name="byReferenceQualified"/> <xs:attributeGroup name="byReference"> <xs:attribute name="byReference"/> </xs:attributeGroup> </xs:schema>
Und siehe da: Im Emblem Schema ist genau das der Fall.

Das fragliche Attribut
key
wird in die Attributgruppe
standardAttrib
über eine Referenz auf die globale Attributdeklaration eingebunden, während
die anderen Attribute entweder von Haus aus qualifiziert sind (
xml:id
,
xml:lang
,
xlink:href
) oder direkt in der Attributgruppe
deklariert werden (
page
). Umgekehrt heisst das aber auch, dass
keines der anderen global deklarierten Attribute im Schema verwendet wird.