Selecionando um Tipo de Substituição

A especificação do Esquema XML suporta a capacidade de derivar tipos complexos por extensão.

No documento da instância XML, você declara o tipo de um elemento XML a partir de um conjunto de tipos que são todos derivados do mesmo tipo de base, em vez de declarar explicitamente o tipo para o elemento XML no Esquema XML. O tipo do elemento é definido usando o atributo type, conforme mostrado pelo seguinte documento da instância XML de exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns="http://shapesrus.com/example" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:type="circle">
 <color xmlns="">blue</color>
 <diameter xmlns="">10</diameter>  
</shape>

No documento da instância XML anterior, o elemento <shape> é declarado como um tipo circle. O elemento <shape> no documento da instância XML também pode ser definido como um tipo rectangle, conforme definido no seguinte documento da instância XML de exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns="http://shapesrus.com/example" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:type="rectangle">
 <color xmlns="">blue</color>
 <length xmlns="">5</length>
 <width xmlns="">8</width>  
</shape>
Neste exemplo, o elemento <shape> é baseado em um dos tipos derivados do tipo de base shapeType. Os tipos derivados de shapeType são nomeados circle e rectangle, conforme mostrado no seguinte Esquema XML de exemplo:
Quando um Esquema XML define um elemento XML baseado em tipos derivados, você deve especificar o tipo derivado (ou tipo de substituição) esperado para o elemento XML durante o tempo de execução. Para o Esquema XML de exemplo mostrado acima, você deve especificar o tipo do elemento <shape> – circle ou rectangle. No Studio, você especifica o tipo de substituição esperado de um elemento XML usando a opção de menu Substituir Nó por ...:
  • Para uma variável baseada em um tipo de substabelecimento - Selecione o tipo esperado do elemento XML clicando com o botão direito do mouse no nó na área de janela Esquema de na guia Variáveis e selecionando na opção Substituir Nó por ... do menu. Para obter informações adicionais, consulte Selecionando um Tipo de Substituição para Variáveis.
  • Para um nó baseado no tipo de substabelecimento em uma área de janela de mapeamento - Selecione o tipo esperado do elemento XML clicando com o botão direito do mouse no nó na área de janela Esquema de na guia Variáveis e selecionando a opção Substituir Nó por ... do menu, conforme descrito no procedimento abaixo.  

No Esquema XML de exemplo mostrado acima, o tipo de base chamado <shapeType> é definido como abstrato. Um tipo de base abstrato não pode ser usado no documento da instância XML para definir o tipo para o elemento - um dos tipos derivados deve ser especificado no lugar. Neste exemplo, o elemento <shape> no documento da instância XML não pode ser declarado como shapeType, ele deve ser declarado como um dos tipos derivados; circle ou rectangle.

No exemplo acima, o tipo de base é definido como abstrato, mas a substituição de tipos derivados baseados em um tipo de base que não é abstrato também é suportada. Para tornar o complexType chamado shapeType não abstrato no esquema XML de exemplo mostrado acima, remova o atributo abstract=true conforme mostrado no segmento de Esquema XML a seguir:
<xsd:complexType name="shapeType">
  <xsd:sequence>
    <xsd:element name="color" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>
Um WSDL é um Esquema XML específico que define um Serviço da Web. O uso da substituição de tipo com um WSDL também é suportado.

É possível especificar o tipo de substituição para uma ocorrência expandida de um nó de destino recorrente. Essa substituição de tipo de uma ocorrência expandida é suportada apenas para os nós de destino recorrentes. Os nós de destino estão localizados no lado direito das áreas de janela de mapeamento.

Atenção: A substituição de tipos complexos é suportada nas áreas de janela de mapeamento de atividades e para variáveis. Entretanto, a derivação de elementos por extensão usando grupos de substituição não é suportada nas áreas de janela de mapeamento de atividades ou para variáveis. Para obter informações adicionais, consulte Recursos do Esquema XML Não Suportados.

Esquema XML de Exemplo

O Esquema XML de exemplo usado neste tópico é fornecido para referência:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://shapesrus.com/example"
           xmlns:sru="http://shapesrus.com/example">
  <xsd:element name="shape" type="sru:shapeType"/>
    <xsd:complexType name="shapeType" abstract="true">
      <xsd:sequence>
         <xsd:element name="color" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="circle">
       <xsd:complexContent>
         <xsd:extension base="sru:shapeType">
         <xsd:sequence>
           <xsd:element name="diameter" type="xsd:integer"/>
         </xsd:sequence>
        </xsd:extension>
  </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="rectangle">
    <xsd:complexContent>
      <xsd:extension base="sru:shapeType">
      <xsd:sequence>
        <xsd:element name="length" type="xsd:integer"/>
        <xsd:element name="width" type="xsd:integer"/>
      </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>