XML Schema – Elemente und Attribute

XML Schema - Elemente und AttributeXML Schema ist der Nachfolger von Document Type Definitions. In
XML Schema gibt es einfache, und auch komplexe Elemente. Hier lernen
Sie die verschiedenen Elemente kennen und Attribute definieren.

XML Schema unterscheidet in normalen XML Dokumenten zwischen zwei
Arten von Elementen, einfache und komplexe. Ein komplexes Element
hat mehrere untergeordnete Elemente, sie sind also mehrfach verschachtelt.

artikel_complex.xml

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

<inhalt>Der Inhalt</inhalt>
</artikel>

Zum Vergleich ein einfaches Element:

artikel_simple.xml

<?xml version="1.0" encoding="ISO-8859-1"
?>
<artikel>Der Artikel</artikel>

Nehmen wir als erstes Beispiel gleich mal das obige einfache Element
"<artikel>". Das Schema für die Definition
dieses Elementes sieht so aus:

artikel_simple.xsd

<?xml version="1.0" encoding="ISO-8859-1"
?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="artikel" type="xs:string"/>
</xs:schema>

Wie Sie sehen wird das Schema, wird das Schema mit der Definition
des Namespaces begonnen. Der Tag <xs:schema></xs:schema>
umschließt das komplette Schema. Darauf folgt auch schon die
Definition des Elementes "artikel".

<xs:element name="artikel" type="xs:string"/>

Über das Attribut name="" wird der name des Elementes
angegeben, welches angesprochen wird. Das Attribut type=""
definiert den Datentyp, in dem Fall ist es ein String, also eine
Zeichenkette.

In dem XML Dokument muss nun auf das Schema verwiesen werden. Es
geschieht wie bereits im ersten Teil beschrieben auf die selbe Art
und Weiße. Wichtig ist nur, das die Adresse zu dem Schema
über xsi:noNamespaceSchemaLocation="artikel_simple.xsd"
korrekt angegeben wird.

artikel_simple.xml
<?xml version="1.0" encoding="ISO-8859-1"
?>
<artikel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="artikel_simple.xsd">

Der Artikel
</artikel>

Im Gegensatz dazu nun das Schema für das komplexe Element:

artikel_complex.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:complexType>
  </xs:element>
</xs:schema>

Eingeleitet wird das Element durch den fast gleichen Befehl
<xs:element>. Im name="" Attribut steht
der Name des Elementes.
Der nächste Befehl <xs:complexType> definiert,
das es sich bei dem Element um ein komplexes Element handelt.

<xs:complexType>
</xs:complexType>

Die anderen Elemente werden als "einfache" Elemente definiert.
Diesen Elementen wird ein Datentyp angegeben, dieser gibt an, welche
Daten in ihm gespeichert werden können. In unserem Beispiel
sind es einfache Strings, also Zeichenketten. Der Datentyp lautet
"xs:string".

<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>

Nun muss noch auf das Schema in dem XML Dokument verwiesen werden.
Das funktioniert auf die gleiche Art, wie bei einfachen Elementen.

artikel_complex.xml

<?xml version="1.0" encoding="ISO-8859-1"
?>
<artikel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="artikel_complex.xsd">

<titel>Der Titel</titel>
<teaser>Der Teaser</teaser>

<inhalt>Der Inhalt</inhalt>
</artikel>

Attribute in XML Schema

In XML Schema wird angenommen, das alle Elemente mit Attributen
komplexe Elemente sind. Einfache Elemente können also keine
Attribute besitzen.
Ein Attribut wird wie ein einfaches Element definiert. Hierzu dient
der XML Schema Befehl <xs:attribute />. Bei folgendem
Schema wird dieses XML Dokument definiert:

artikel.xml

<?xml version="1.0" encoding="ISO-8859-1"
?>
<artikel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="artikel_schema.xsd" nr="202">
<titel>Der Titel</titel>
<teaser>Der Teaser</teaser>
<inhalt>Der Artikel selbst</inhalt>
</artikel>

Hinweis: In dem XML Dokument wird bereits auf das XML Schema verwiesen.

artikel_schema.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>

Das Attribut wird, wie Sie sehen außerhalb des <xs:sequence>
Befehls definiert, aber natürlich innerhalb des <xs:complexType>
Elementes, da wie oben bereits erwähnt worden war, nur komplexe
Elemente mit Attributen ausgestattet werden können. Attribute
können natürlich auch alle Datentypen beinhalten wie normale
Elemente.

Wie in DTDs können Sie auch in XML Schema den Attributen noch
einige Eigenschaften geben.

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

Bei dieser Definition wird ein default Wert angegeben. Dieser
wird verwendet, wenn das Element z.B. 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, d.h. es muss nicht angegeben
werden.

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

Dieses Attribut muss gesetzt werden, damit das Element, und das
ganze Dokument gültig ist.

XML Schema hat die gleichen Möglichkeiten wie auch DTDs. XML
Schema kann jedoch in vielen Dingen noch komplexer als DTDs sein.
Es lohnt sich nur noch mit XML Schema zu arbeiten.

This entry was posted in XML. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *