Substitua os elementos de esquema XML
Por XML Schema, um elemento pode ser substituído por outro elemento.
elementos substituídos
Vamos ilustrar: os nossos clientes do Reino Unido e Noruega. Queremos ter a capacidade de permitir que os usuários optam por usar os nomes dos elementos da Noruega no documento XML ou o nome Inglês do elemento.
Para resolver este problema, podemos definir uma substitutionGroup no esquema XML. Em primeiro lugar, nós declaramos o elemento principal, então vamos declarar elementos menores, esses elementos podem ser declarados, uma vez que são capazes de substituir o elemento primário.
<xs:element name="navn" substitutionGroup="name"/>
No exemplo acima, "nome" é o elemento principal, "navn" elemento pode substituir elemento "name".
Considere-se um fragmento de esquema XML:
<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 válido como este (de acordo com o esquema acima):
<name>John Smith</name>
</customer>
Ou algo parecido com isto:
<navn>John Smith</navn>
</kunde>
Substitua o elemento de paragem
Para evitar que outros elementos substituir um elemento específico, use as propriedades do bloco:
Ver um fragmento de esquema XML:
<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"/>
documento XML válido deve olhar como este (de acordo com o esquema acima):
<name>John Smith</name>
</customer>
No entanto, o documento seguinte já não é legítima:
<navn>John Smith</navn>
</kunde>
Use substitutionGroup
elementos substituíveis devem ser os principais elementos do mesmo tipo, ou derivados do elemento principal. Se o tipo pode substituir elementos dos principais elementos do mesmo tipo, você não terá que especificar o tipo do elemento pode ser substituído.
Por favor note, substitutionGroup todos os elementos nas (elementos primários e elementos substituíveis) devem ser declarados como elementos globais, caso contrário não vai funcionar!
Qual é o elemento global (Global Elements)?
elemento global refere-se aos elementos filhos diretos do elemento "esquema"! Os elementos locais (elementos locais) refere-se aos elementos aninhados em outros elementos.