XSD Indikatoren
Durch Indikatoren können wir steuern, wie Elemente in einem Dokument verwendet werden.
Indikatoren
Es gibt sieben Arten von Indikatoren:
Reihenfolge-Indikatoren:
- Alle
- Choice
- Sequenz
Häufigkeitsindikatoren:
- maxOccurs
- minOccurs
Gruppenindikatoren:
- Gruppenname
- attributeGroup-Name
Reihenfolge-Indikatoren
Reihenfolge-Indikatoren werden verwendet, um die Reihenfolge von Elementen zu definieren.
All-Indikator
Der <all>-Indikator gibt an, dass untergeordnete Elemente in beliebiger Reihenfolge auftreten können und jedes untergeordnete Element nur einmal auftreten darf:
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Hinweis:Bei Verwendung des <all>-Indikators können Sie <minOccurs> auf 0 oder 1 setzen, und Sie können den <maxOccurs>-Indikator nur auf 1 setzen (<minOccurs> und <maxOccurs> werden später erklärt).
Choice-Indikator
Der <choice>-Indikator gibt an, dass entweder ein untergeordnetes Element oder ein anderes untergeordnetes Element auftreten kann (entweder/oder):
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Sequence-Indikator
<sequence> gibt an, dass untergeordnete Elemente in einer bestimmten Reihenfolge auftreten müssen:
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Auftrittsindikatoren
Auftrittsindikatoren werden verwendet, um zu definieren, wie oft ein Element auftreten kann.
Hinweis:Für alle "Reihenfolge"- und "Gruppen"-Indikatoren (any, all, choice, sequence, Gruppenname und Gruppenreferenz) sind die Standardwerte von maxOccurs und minOccurs beide 1.
maxOccurs-Indikator
Der <maxOccurs>-Indikator kann die maximale Anzahl angeben, wie oft ein Element auftreten kann:
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Das obige Beispiel zeigt, dass das untergeordnete Element "child_name" mindestens einmal im Element "person" auftreten kann (wobei der Standardwert von minOccurs 1 ist) und höchstens 10 Mal.
minOccurs-Indikator
Der <minOccurs>-Indikator kann die Mindestanzahl angeben, wie oft ein Element vorkommen kann:
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Das obige Beispiel zeigt, dass das untergeordnete Element "child_name" mindestens 0 Mal und höchstens 10 Mal im Element "person" vorkommen kann.
Tipp:Wenn ein Element unbegrenzt oft vorkommen soll, verwenden Sie die Deklaration maxOccurs="unbounded":
Ein praktisches Beispiel:
Eine XML-Datei mit dem Namen "Myfamily.xml":
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
Die obige XML-Datei enthält ein Wurzelelement namens "persons". Innerhalb dieses Wurzelelements definieren wir drei "person"-Elemente. Jedes "person"-Element muss ein "full_name"-Element enthalten und kann bis zu 5 "child_name"-Elemente enthalten.
Dies ist die Schema-Datei "family.xsd":
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Gruppenindikatoren
Gruppenindikatoren werden verwendet, um zusammengehörige Mengen von Elementen zu definieren.
Elementgruppen
Elementgruppen werden mit der group-Deklaration definiert:
...
</xs:group>
Sie müssen innerhalb der group-Deklaration ein all-, choice- oder sequence-Element definieren. Das folgende Beispiel definiert eine Gruppe namens "persongroup", die eine Menge von Elementen definiert, die in einer exakten Reihenfolge erscheinen müssen:
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
Nachdem Sie die Gruppe definiert haben, können Sie sie in einer anderen Definition referenzieren:
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Attributgruppen
Attributgruppen werden mit der attributeGroup-Deklaration definiert:
...
</xs:attributeGroup>
Das folgende Beispiel definiert eine Attributgruppe namens "personattrgroup":
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
Nachdem Sie die Attributgruppe definiert haben, können Sie sie in einer anderen Definition referenzieren, wie folgt:
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>