Latest web development tutorials

Sostituire gli elementi dello schema XML

Con schema XML, un elemento può essere sostituito con un altro elemento.


elementi sostituiti

Facciamo un esempio: i nostri clienti dal Regno Unito e Norvegia. Vogliamo avere la possibilità di consentire agli utenti di scegliere di utilizzare i nomi degli elementi norvegesi nel documento XML o il nome inglese dell'elemento.

Per risolvere questo problema, si può definire un substitutionGroup nello schema XML. In primo luogo, si dichiara l'elemento principale, poi ci dichiariamo elementi minori, questi elementi possono essere dichiarati una volta che sono in grado di sostituire l'elemento primario.

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

Nell'esempio precedente, "nome" elemento è l'elemento principale, l'elemento "navn" può sostituire l'elemento "nome".

Si consideri un frammento di schema XML:

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

documento XML valido come questo (secondo lo schema di cui sopra):

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

O qualcosa di simile a questo:

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


Sostituire l'elemento di arresto

Per evitare che altri elementi sostituire un elemento specifico, utilizzano le proprietà del blocco:

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

Vedere un frammento di schema XML:

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

Valido documento XML dovrebbe essere simile a questo (secondo lo schema di cui sopra):

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

Tuttavia, il seguente documento non è più legittima:

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


Usa substitutionGroup

elementi sostituibili devono essere i principali elementi dello stesso tipo, o derivato dall'elemento principale. Se il tipo può sostituire elementi dei principali elementi dello stesso tipo, non sarà necessario specificare il tipo di elemento può essere sostituito.

Si prega di notare, substitutionGroup tutti elementi nelle (elementi primari e gli elementi sostituibili) devono essere dichiarate come elementi globali, altrimenti non funzionerà!


Qual è l'elemento globale (Global Elementi)?

elemento globale si riferisce agli elementi figli diretti di elemento "schema"! elementi locali (elementi locali) si riferisce agli elementi annidati all'interno di altri elementi.