Substituição de Elemento (Element Substitution) XSD
- Página Anterior XSD <anyAttribute>
- Próxima Página Exemplo de XSD
Através do esquema XML, um elemento pode substituir outro.
Substituição de Elementos
Vamos dar um exemplo: nossos usuários vêm da Inglaterra e da Noruega. Desejamos ter a capacidade de permitir que os usuários escolham usar o nome do elemento em norueguês ou inglês no documento XML.
Para resolver esse problema, podemos definir um no esquema XML. substitutionGroupPrimeiro, declaramos o elemento principal, e então declaramos os elementos secundários, que podem declarar que podem substituir o elemento principal.
<xs:element name="name" type="xs:string"/> <xs:element name="navn"}} substitutionGroup="name"/>
No exemplo acima, o elemento "name" é o elemento principal, enquanto o elemento "navn" pode substituir o elemento "name".
Veja um fragmento de algum esquema 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"/>
Um documento XML válido deve ser semelhante a este (com base no esquema acima):
<customer> <name>John Smith</name> </customer>
ou algo semelhante a isso:
<kunde> <navn>John Smith</navn> </kunde>
Bloquear substituição de elementos
Para evitar que outros elementos substituam um elemento específico, use a propriedade block:
<xs:element name="name" type="xs:string" block="substitution"/>
Veja um fragmento de algum esquema 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"/>
Um documento XML válido deve ser semelhante a este (com base no esquema acima):
<customer> <name>John Smith</name> </customer>
Mas o seguinte documento não é mais válido:
<kunde> <navn>John Smith</navn> </kunde>
Use substitutionGroup
O tipo do elemento substituível deve ser o mesmo que o do elemento principal ou derivado do elemento principal. Se o tipo do elemento substituível for o mesmo que o do elemento principal, você não precisa especificar o tipo do elemento substituível.
Atenção, todos os elementos (elemento principal e elementos substituíveis) no substitutionGroup devem ser declarados como elementos globais, caso contrário, não funcionarão!
O que são Elementos Globais (Global Elements)?
Elementos Globais se referem aos elementos diretamente subordinados ao elemento "schema"! Elementos Locais (Local elements) se referem aos elementos aninhados em outros elementos.
- Página Anterior XSD <anyAttribute>
- Próxima Página Exemplo de XSD