David Maus

Qualifizierte und unqualifizierte Attribute in XML Schema

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.

Beispieldokument mit einem qualifizierten 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:

Einfaches XML-Schema mit Attributdeklarationen
<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.

Attributdeklaration im Emblem Schema 1.2

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.