XSD- Indikatoren
Wir können steuern, WIE Elemente in Dokumenten mit Indikatoren verwendet werden sollen.
Indikatoren
Es gibt sieben Indikatoren:
Bestellindikatoren:
- Alle
- Auswahl
- Reihenfolge
Auftretensindikatoren:
- maxVorkommt
- minVorkommt
Gruppenindikatoren:
- Gruppenname
- AttributGruppenname
Bestellindikatoren
Ordnungsindikatoren werden verwendet, um die Reihenfolge der Elemente zu definieren.
Alle Indikator
Der Indikator <all> gibt an, dass die untergeordneten Elemente in beliebiger Reihenfolge erscheinen können und dass jedes untergeordnete Element nur einmal vorkommen darf:
<xs:element name="person">
<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: Wenn Sie den Indikator <all> verwenden, können Sie den Indikator <minOccurs> auf 0 oder 1 und den Indikator <maxOccurs> nur auf 1 setzen (die <minOccurs> und <maxOccurs> werden später beschrieben).
Auswahlindikator
Der Indikator <choice> gibt an, dass entweder ein untergeordnetes Element oder ein anderes vorkommen kann:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Sequenzanzeige
Der Indikator <sequence> gibt an, dass die untergeordneten Elemente in einer bestimmten Reihenfolge erscheinen müssen:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Auftretensindikatoren
Häufigkeitsindikatoren werden verwendet, um zu definieren, wie oft ein Element auftreten kann.
Hinweis: Für alle „Order“- und „Group“-Indikatoren (any, all, choice, sequence, group name und group reference) ist der Standardwert für maxOccurs und minOccurs 1.
maxOccurs-Indikator
Der Indikator <maxOccurs> gibt an, wie oft ein Element maximal vorkommen kann:
<xs:element name="person">
<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 Element „child_name“ mindestens einmal (der Standardwert für minOccurs ist 1) und maximal zehn Mal im Element „person“ vorkommen kann.
minOccurs-Indikator
Der Indikator <minOccurs> gibt an, wie oft ein Element mindestens vorkommen darf:
<xs:element name="person">
<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 Element „child_name“ mindestens nullmal und maximal zehnmal im Element „person“ vorkommen kann.
Tipp: Um zuzulassen, dass ein Element unbegrenzt oft erscheint, verwenden Sie die Anweisung maxOccurs="unbounded":
Ein funktionierendes Beispiel:
Eine XML-Datei namens "Myfamily.xml":
<?xml version="1.0" encoding="UTF-8"?>
<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 Root-Element namens „persons“. Innerhalb dieses Root-Elements haben wir drei „Person“-Elemente definiert. Jedes „person“-Element muss ein „full_name“-Element enthalten und kann bis zu fünf „child_name“-Elemente enthalten.
Hier ist die Schemadatei "family.xsd":
<?xml version="1.0" encoding="UTF-8"?>
<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 Gruppen von Elementen zu definieren.
Elementgruppen
Elementgruppen werden wie folgt mit der Gruppendeklaration definiert:
<xs:group name="groupname">
...
</xs:group>
Innerhalb der Gruppendeklaration müssen Sie ein all-, choice- oder sequence-Element definieren. Das folgende Beispiel definiert eine Gruppe namens "persongroup", die eine Gruppe von Elementen definiert, die in einer exakten Reihenfolge auftreten müssen:
<xs:group name="persongroup">
<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 eine Gruppe definiert haben, können Sie sie wie folgt in einer anderen Definition referenzieren:
<xs:group name="persongroup">
<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 wie folgt mit der attributeGroup-Deklaration definiert:
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
Das folgende Beispiel definiert eine Attributgruppe mit dem Namen "personattrgroup":
<xs:attributeGroup name="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 eine Attributgruppe definiert haben, können Sie sie wie folgt in einer anderen Definition referenzieren:
<xs:attributeGroup name="personattrgroup">
<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>