XSD Element Vervanging (Element Substitution)

Door middel van XML Schema kan een element een ander element vervangen.

Element vervanging

Laten we een voorbeeld geven: onze gebruikers komen uit Engeland en Noorwegen. We willen in staat zijn om gebruikers te laten kiezen of ze in het XML-document de elementnamen in het Noors of het Engels willen gebruiken.

Om dit probleem op te lossen, kunnen we een definiëren in het XML schema substitutionGroupEerst声明主元素,然后我们会声明次元素,这些次元素可以声明它们可以替换主元素。

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

In het voorbeeld hierboven is het "name"-element het hoofd-element, terwijl het "navn"-element het "name"-element kan vervangen.

Bekijk een fragment van een XML schema:

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

Een geldig XML-document zou er ongeveer zo uitzien (op basis van de schema's hierboven):

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

Of iets dergelijks:

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

Elementvervangingsverhindering

Om te voorkomen dat andere elementen een specifiek element vervangen, gebruik dan de block-eigenschap:

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

Bekijk een fragment van een XML schema:

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

Een geldige XML-document zou er ongeveer zo uitzien (op basis van de schema's hierboven):

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

Maar het volgende document is niet meer geldig:

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

Gebruik substitutionGroup

Het type van vervangbare elementen moet hetzelfde zijn als dat van het hoofd element, of afgeleid van het hoofd element. Als het type van het vervangbare element hetzelfde is als dat van het hoofd element, hoef je het type van het vervangbare element niet te specificeren.

Let op, alle elementen (hoofd elementen en vervangbare elementen) in de substitutionGroup moeten worden verklaard als globale elementen, anders werkt het niet!

Wat zijn Globale Elementen (Global Elements)?

Globale Elementen verwijzen naar de directe onderliggende elementen van het "schema" element! Lokale Elementen (Local elements) verwijzen naar elementen die zijn ingesloten in andere elementen.