XML-Know How

Deklaration von Attributen in XSD

In XSD werden Attribute genauso wie Elemente deklariert. Alle Elemente mit Attributen gelten daher als komplexe Elemente und erfordern das XSD-Element <complexType>. Attribute werden am Ende des <complexType>-Elements wie ein einfaches Element deklariert. Hierzu dient das XSD-Element <xs:attribute>, das wie <xs:element> ein name- und ein type-Attribut enthält:

artikel.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<artikel nr="10">
  <titel>Der Titel</titel>
  <teaser>Der Teaser</teaser>
  <inhalt>Der Inhalt</inhalt>
</artikel>

artikel.xsd

<?xml version="1.0"encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="artikel">
    <xs:complexType>
       <xs:sequence>
         <xs:element name="titel" type="xs:string"/>
         <xs:element name="teaser" type="xs:string"/>
         <xs:element name="inhalt" type="xs:string"/>
       </xs:sequence>
      <xs:attribute name="nr" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Wie in DTDs können Sie auch in XSD den Attributen noch einige Eigenschaften mitgeben.

<xs:attribute name="nr" type="xs:integer" default=”1” />

Bei dieser Definition wird ein Defaultwert angegeben. Dieser wird verwendet, wenn das Attribut nicht gesetzt ist.

<xs:attribute name="nr" type="xs:integer" fixed=”10” />

Bei dieser Definition des Attributes wird ein fester Wert angegeben, d. h. es kann kein anderer Wert angegeben werden.

<xs:attribute name="nr" type="xs:integer" use=”optional” />

Dieses Attribut ist optional.

<xs:attribute name=”nr” type=”xs:integer” use=”required”/>

Dieses Attribut ist obligatorisch.

Da Attribute ähnlich wie Elemente deklariert werden, können auch alle Methoden, die oben für Elemente vorgestellt wurden, bei Attributen genutzt werden. Auch Attribute können lokal oder global deklariert werden. Global deklarierte Attribute werden genau wie Elemente über das ref-Attribut aufgerufen. Gruppen von Attributen können mit <xs:attributeGroup> in gleicher Weise gebildet und verwendet werden, wie Elementgruppen mit <xs:group>.

In lokalen Deklarationen können Elemente abhängig von ihrem Kontext mit verschiedenen Attributen versehen werden. Durch Attributgruppen kann das gemeinsame Auftreten von Attributen festgelegt werden.

Diese Möglichkeiten gehen weit über XML-DTDs hinaus, wo Attribute weder abhängig vom Kontext noch vom Inhaltsmodell noch von einander gesetzt werden können.