tutoriais mais recente desenvolvimento web
 

XSD Elemento Substituição


Com esquemas XML, um elemento pode substituir outro elemento.


elemento Substituição

Vamos dizer que nós temos usuários de dois países diferentes: Inglaterra e Noruega. Gostaríamos que a capacidade de permitir que o usuário escolher se ele ou ela gostaria de usar os nomes dos elementos noruegueses ou os nomes dos elementos ingleses no documento XML.

Para resolver este problema, podemos definir uma substitutionGroup no esquema XML. Em primeiro lugar, nós declaramos um elemento de cabeça e, em seguida, nós declaramos os outros elementos que indicam que eles são substituíveis para o elemento de cabeça.

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

No exemplo acima, o "name" é o elemento principal e do "navn" elemento é substituível por "name" .

Olhe para este 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 (according to the schema above) poderia ser assim:

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

ou assim:

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

Bloqueio Elemento Substituição

Para evitar que outros elementos de substituindo-o por um elemento especificado, use o block atributo:

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

Olhe para este 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 (according to the schema above) se parece com isso:

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

Mas isso não é mais válido:

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

usando substitutionGroup

O tipo de elementos substituíveis deve ser o mesmo que, ou derivada de, o tipo do elemento de cabeça. Se o tipo do elemento substituível é o mesmo que o tipo do elemento de cabeça não terá para especificar o tipo do elemento substituível.

Note-se que todos os elementos no substitutionGroup (o elemento da cabeça e os elementos substituíveis) devem ser declaradas como elementos globais, caso contrário não vai funcionar!


Quais são elementos globais?

Elementos globais são elementos que são filhos imediatos do "schema" elemento! Os elementos locais são elementos aninhados em outros elementos.