Tutorial de XML

XML INÍCIO Introdução ao XML XML Como usar Árvore XML Sintaxe XML Elementos XML Atributos XML Namespaces XML Exibição XML XML HttpRequest Analisador de XML XML DOM XML XPath XML XSLT XML XQuery XML XLink Validador de XML XML DTD Esquema XML Servidor XML Exemplos XML Teste de XML Certificado XML

XML AJAX

Introdução AJAX AJAX XML Http Solicitação AJAX Resposta AJAX Arquivo XML AJAX PHP AJAX ASP AJAX Banco de dados AJAX Aplicativos AJAX Exemplos AJAX

XML DOM

Introdução ao DOM Nós DOM Acesso ao DOM Informações do nó DOM Lista de nós DOM Travessia do DOM Navegação DOM Valores de obtenção do DOM Nós de alteração do DOM Remoção de nós do DOM Substituir nós DOM DOM Criar nós DOM Adicionar nós Nós clones DOM Exemplos de DOM

Tutorial XPath

Introdução ao XPath Nós XPath Sintaxe XPath Eixos XPath Operadores XPath Exemplos de XPath

Tutorial XSLT

Introdução ao XSLT Idiomas XSL Transformação XSLT XSLT <modelo> XSLT <valor-de> XSLT <para-cada> XSLT <classificar> XSLT <if> XSLT <escolha> Aplicar XSLT XSLT no cliente XSLT no servidor XSLT Editar XML Exemplos de XSLT

Tutorial XQuery

Introdução ao XQuery Exemplo de XQuery XQuery FLWOR XQuery HTML Termos de XQuery Sintaxe XQuery Adicionar XQuery Seleção de XQuery Funções XQuery

XML DTD

Introdução DTD Blocos de construção de DTD Elementos DTD Atributos DTD Elementos DTD vs Attr Entidades DTD Exemplos de DTD

Esquema XSD

Introdução ao XSD XSD Como fazer XSD <esquema> Elementos XSD Atributos XSD Restrições XSD

Complexo XSD

Elementos XSD XSD vazio Apenas elementos XSD Somente texto XSD XSD Misto Indicadores XSD XSD <qualquer> XSD <qualquer atributo> Substituição XSD Exemplo de XSD

Dados XSD

Cadeia XSD Data XSD XSD Numérico XSD Misc Referência XSD

Serviços da Web

Serviços XML XML WSDL XML SOAP XML RDF XML RSS

Referências

Tipos de nós DOM Nó DOM Lista de nós DOM DOM NamedNodeMap Documento DOM Elemento DOM Atributo DOM Texto DOM DOM CDATA Comentário DOM DOM XMLHttpRequest Analisador de DOM Elementos XSLT Funções XSLT/XPath

Substituição do Elemento XSD


Com XML Schemas, um elemento pode substituir outro elemento.


Substituição de elemento

Digamos que temos usuários de dois países diferentes: Inglaterra e Noruega. Gostaríamos de permitir que o usuário escolha se deseja usar os nomes dos elementos noruegueses ou os nomes dos elementos em inglês no documento XML.

Para resolver esse problema, poderíamos definir um replaceGroup no esquema XML. Primeiro, declaramos um elemento head e depois declaramos os outros elementos que declaram que são substituíveis pelo elemento head.

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

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

Veja 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 (de acordo com o esquema acima) pode ter esta aparência:

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

ou assim:

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


Substituição do Elemento de Bloqueio

Para evitar que outros elementos sejam substituídos por um elemento especificado, use o atributo block:

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

Veja 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 (de acordo com o esquema acima) se parece com isso:

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

MAS ISSO NÃO É MAIS VÁLIDO:

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

Usando replaceGroup

O tipo dos elementos substituíveis deve ser igual ou derivado do tipo do elemento principal. Se o tipo do elemento substituível for igual ao tipo do elemento principal, não será necessário especificar o tipo do elemento substituível.

Observe que todos os elementos no replaceGroup (o elemento head e os elementos substituíveis) devem ser declarados como elementos globais, caso contrário não funcionará!


O que são Elementos Globais?

Elementos globais são elementos que são filhos imediatos do elemento "esquema"! Elementos locais são elementos aninhados dentro de outros elementos.