Selezione di un tipo di sostituzione

La specifica dello schema XML supporta la capacità di derivare per estensione tipi complessi.

Nel documento di istanza XML, l'utente indica il tipo di un elemento XML da un insieme di tipi che derivano tutti dallo stesso tipo di base, invece di dichiarare esplicitamente il tipo per l'elemento XML nello schema XML. Il tipo per l'elemento viene definito tramite l'attributo type come mostrato dal seguente documento di istanza XML di esempio:

<?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>

Nel documento di istanza XML precedente, l'elemento <shape> viene dichiarato come un tipo circle. L'elemento <shape> nel documento di istanza XML può essere anche definito come un tipo rectangle, come avviene nel seguente documento di istanza XML di esempio:

<?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>
In questo esempio, l'elemento <shape> si basa su uno dei tipi derivati del tipo base shapeType. I tipi derivati di shapeType sono denominati circle e rectangle, come mostrato nel seguente schema XML di esempio:
Quando uno schema XML definisce un elemento XML basato su tipi derivati, è necessario specificare il tipo derivato (o il tipo di sostituzione) previsto per l'elemento XML durante il runtime. Per lo schema XML di esempio mostrato sopra, è necessario specificare il tipo dell'elemento <shape> – circle o rectangle. In Studio, il tipo di sostituzione previsto di un elemento XML viene specificato utilizzando l'opzione di menu Sostituisci nodo con...:
  • Per una variabile basata su un tipo di sostituzione — Selezionare il tipo previsto dell'elemento XML, facendo clic con il tasto destro del mouse sul nodo nel pannello Schema di nella scheda Variabili e selezionando l'opzione Sostituisci nodo con ... dal menu. Per ulteriori informazioni, consultare Selezione di un tipo di sostituzione per le variabili.
  • Per un nodo basato sul tipo di sostituzione in un pannello di associazione — Selezionare il tipo previsto dell'elemento XML, facendo clic con il tasto destro del mouse sul nodo nel pannello Schema di nella scheda Variabili e selezionando l'opzione Sostituisci nodo con ... dal menu, come descritto nella seguente procedura.  

Nello schema XML di esempio mostrato sopra, il tipo di base denominato <shapeType> viene definito come astratto. Un tipo di base astratto non può essere utilizzato nel documento di istanza XML per definire il tipo per l'elemento — invece deve essere specificato uno dei tipi derivati. In questo esempio, l'elemento <shape> nel documento di istanza XML non può essere dichiarato come shapeType, deve essere dichiarato come uno dei tipi derivati; circle o rectangle.

Nell'esempio riportato in precedenza, il tipo di base viene definito come astratto, ma è supportata anche la sostituzione del tipo di tipi derivati basati su un tipo di base non astratto. Per rendere non astratto il complexType denominato shapeType nello schema XML di esempio mostrato in precedenza, rimuovere l'attributo abstract=true, come mostrato nel seguente segmento di schema XML:
<xsd:complexType name="shapeType">
  <xsd:sequence>
    <xsd:element name="color" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>
Un WSDL è uno schema XML specifico che definisce un servizio Web. È supportato anche l'utilizzo della sostituzione del tipo con un WSDL.

È possibile specificare il tipo di sostituzione per una ricorrenza espansa di un nodo di destinazione ricorrente. Questa sostituzione del tipo di una ricorrenza espansa è supportata solo per i nodi di destinazione ricorrenti. I nodi di destinazione si trovano sul lato destro dei pannelli di associazione.

Attenzione: la sostituzione del tipo di tipi complessi è supportata nei pannelli di associazione delle attività e per le variabili. Tuttavia, la derivazione degli elementi per estensione utilizzando gruppi di sostituzione non è supportata nei pannelli di associazione delle attività o per le variabili. Per ulteriori informazioni, consultare Funzioni non supportate dello schema XML.

Schema XML di esempio

Lo schema XML di esempio utilizzato in questo argomento viene fornito come riferimento:
<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>