| Teile: | Teil: XML Teil: PHP Quellenverzeichnis |
| Pfad: | > Teil: XML > XML-Schema |
| Benachbarte Abschnitte: | Grundlagen Definition komplexer Typen, Elementen- und Attributdeklaration Simple Typen Anonyme Typ-Definitionen Element-Inhalte Kommentare (annotations) Aufbau von Inhaltsmodellen Attribut-Gruppen NIL-Werte |
| Untergeordnete Abschnitte: | Auftrittssteuerung Globale Elemente und Attribute Namenskonflikte |
XML-Schema unterscheidet grundsätzlich zwischen complexType's, mit möglichen Kindelementen und Attributen, und simpleType's (die weder über das eine noch das andere verfügen können).
Außerdem wird unterscheidet man zwischen Definition von Typen und der Deklaration. Die Definition beschreibt einen Typen; mit der Deklaration wendet man sie an und beschreibt Elemente, die mit einem spezifischen Namen und Typen im Dokument auftreten dürfen.
Neue komplexe Typen werden mit dem complexType-Element definiert, das typischerweise eine Reihe weiterer Element-, Referenzen und Attributdeklarationen enthält. Die Deklarationen sind für sich genommen keine Typen, sie bilden allerdings die Assoziation zwischen einem Namen und den Vorschriften, die das Erscheinungsbild des Elements bestimmen. Elemente werden mit dem element-Element deklariert. Attribute mit dem attribute-Element.
<xsd:complexType name="USAddress" >
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>
Aus dieser Definition geht hervor, das alle Elemente im Instanzdokument, dessen Typ als USAddress deklariert wurde, aus fünf Elementen und einem Attribut bestehen muss. Diese Elemente müssen die mittels der name-Attribute vorgeschriebenen Namen tragen, und in der deklarierten Reihenfolge auftreten. Die ersten vier müssen einen string-Wert enthalten, das fünfte eine Zahl. Ein USAddress-Element darf ein Attribut namens country enthalten, dessen Wert "US" vorgegeben ist.
Diese Definition verwendet lediglich simpleType-Deklarationen (string, decimal, NMTOKEN). Die PurchaseOrderType-Definition enthält dagegen auch komplexe Typen bspw. USAddress. Beide verwendet das type-Attribut um den Typen zu identifizieren, unabhängig davon, ob es sich dabei um einen komplexen oder simplen Typen handelt.
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
In dieser Definition assoziieren zwei Element-Deklarationen Elementnamen mit dem USAddress-Typ. Daraus folgt, das jedes Element im Instanzdokument, welches vom Typ PurchaseOrderType ist, zwei Kindelemente vom Typ USAddress enthalten muss (shipTo und billTo), die die fünf Subelemente von USAddress enthalten müssen. Diese dürfen wiederum jeweils das Attribut country tragen. Die PurchaseOrderType-Definition enthält ein orderDate-Attribut als simplen Typen date.
Die bis hierhin beschriebenen Deklarationen haben jeweils einen Namen mit einer Typ-Definition verbunden. Manchmal ist es jedoch von Vorteil, ein bereits existierendes Element zu verwenden.
<xsd:element ref="comment" minOccurs="0"/>
Diese Deklaration referenziert ein bestehendes Element comment, das an anderer Stelle im Schema deklariert wurde. Generell muss der Wert des ref-Attributes auf ein globales Element verweisen, also eines, das direkt unter dem schema-Element deklariert wurde, und nicht als Teil eines complexType-Elements. Die Folgerung aus dieser Deklaration ist, das ein comment-Element in einem Instanzdokument verwendet werden kann, und dessen Inhalt übereinstimmen muss mit dem Element-Typen, in diesem Fall string.






