XSD-Element-Ersatz (Element Substitution)

Through XML Schema, one element can replace another element.

Element Replacement

Lassen Sie uns ein Beispiel geben: Unsere Benutzer kommen aus Großbritannien und Norwegen. Wir möchten in der Lage sein, den Benutzern zu ermöglichen, zwischen den Elementnamen in Norwegisch und Englisch in XML-Dokumenten zu wählen.

Um dieses Problem zu lösen, können wir ein definieren substitutionGroup. Zunächst erklären wir das Hauptelement, dann erklären wir die Nebenelemente, die erklären können, dass sie das Hauptelement ersetzen können.

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>

In diesem Beispiel ist das "name"-Element das Hauptelement, während das "navn"-Element das "name"-Element ersetzen kann.

Sehen Sie sich einen Abschnitt eines XML-Schemas an:

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>

Ein gültiges XML-Dokument ähnelt dem folgenden (basierend auf dem obigen Schema):

<customer>
  <name>John Smith</name>
</customer>

oder ähnlich wie folgt:

<kunde>
  <navn>John Smith</navn>
</kunde>

Verhinderung der Elementersetzung

Um zu verhindern, dass andere Elemente ein bestimmtes Element ersetzen, verwenden Sie das Attribut block:

<xs:element name="name" type="xs:string" block="substitution"/>

Sehen Sie sich einen Abschnitt eines XML-Schemas an:

<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde" substitutionGroup="customer"/>

Ein gültiges XML-Dokument sollte ähnlich aussehen (basierend auf dem obigen Schema):

<customer>
  <name>John Smith</name>
</customer>

Aber das nachfolgende Dokument ist nicht mehr gültig:

<kunde>
  <navn>John Smith</navn>
</kunde>

Verwendung von substitutionGroup

Der Typ der substituierbaren Elemente muss dem Typ des Hauptelements entsprechen oder von diesem abgeleitet sein. Wenn der Typ der substituierbaren Elemente dem Typ des Hauptelements entspricht, müssen Sie den Typ der substituierbaren Elemente nicht angeben.

Bitte beachten Sie, dass alle Elemente (Hauptelemente und substituierbare Elemente) im substitutionGroup deklariert werden müssen, sonst funktionieren sie nicht!

Was sind globale Elemente (Global Elements)?

Globale Elemente beziehen sich auf die direkten Unter元素 des "schema"-Elements! Lokale Elemente (Local elements) beziehen sich auf Elemente, die in anderen Elementen eingebettet sind.