Substituição de Elementos do XSD
- Página Anterior XSD <anyAttribute>
- Próxima Página Exemplo de XSD
Através do XML Schema, um elemento pode substituir outro elemento.
Substituição de Elementos
Vamos exemplificar: 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 substitutionGroup.Primeiro, 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"/>
Neste exemplo, o elemento "name" é o elemento principal, enquanto o elemento "navn" pode substituir o elemento "name".
Veja um fragmento de um 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 o atributo block:
<xs:element name="name" type="xs:string"> block="substitution"/>
Veja um fragmento de um 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 documento a seguir não é mais válido:
<kunde> <navn>John Smith</navn> </kunde>
Uso do 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 precisará especificar o tipo do elemento substituível.
Atenção, todos os elementos (elementos principais e elementos substituíveis) dentro do substitutionGroup devem ser declarados como elementos globais, caso contrário, não funcionarão!
O que são Elementos Globais (Global Elements)?
Elementos Globais referem-se aos elementos diretamente subordinados ao elemento "schema"! Elementos Locais (Local elements) referem-se aos elementos aninhados em outros elementos.
- Página Anterior XSD <anyAttribute>
- Próxima Página Exemplo de XSD