置換タイプの選択

XML スキーマ仕様では、拡張によって複合タイプを派生させる機能がサポートされています。

XML インスタンス文書では、 XML スキーマ内で XML エレメントのタイプを明示的に宣言する代わりに、 すべて同じ基本タイプから派生するタイプのセットから、 XML エレメントのタイプを宣言します。 エレメントのタイプは、 次の XML インスタンス文書の例に示すように、type 属性を使用して 定義されます。

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

上記の XML インスタンス文書で、 <shape> エレメントは circle タイプとして宣言されています。 XML インスタンス文書内の <shape> エレメントは、 次の XML インスタンス文書の例で定義されているように、 rectangle タイプとして定義することもできます。

<?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>
この例で、<shape> エレメントは、 shapeType 基本タイプの派生型の 1 つに 基づいています。 shapeType の派生型の名前は、次の XML スキーマの例に示すように、 circle および rectangle です。
XML スキーマで XML エレメントが派生型に基づいて 定義されている場合は、実行時に XML エレメントで予期される派生型 (または置換タイプ) を 指定する必要があります。 上記の XML スキーマの例では、 <shape> エレメントのタイプ (circle または rectangle) を 指定する必要があります。 Studio で、「ノードを次のもので置換...」メニュー・オプションを使用して、 XML エレメントの予期される置換タイプを指定します。
  • 置換タイプに基づく変数の場合 - 「変数」タブ内の「スキーマ (Schema of)」ペイン内のノードを右クリックし、メニューから「ノードを次のもので置換...」オプションを選択して、XML エレメントの予期されるタイプを選択します。 詳細については、『変数の置換型の選択』を参照してください。
  • マッピング・ペイン内の置換タイプに基づくノードの場合 — 次の手順で説明するように、 「変数」タブ内の 「スキーマ (Schema of)」ペイン内のノードを右クリックし、 メニューから「ノードを次のもので置換...」オプションを選択して、 XML エレメントの予期されるタイプを選択します。

上記の XML スキーマの例で、 <shapeType> と呼ばれる基本タイプは 抽象的なものとして定義されています。XML インスタンス文書で抽象的な基本タイプを使用して エレメントのタイプを定義することはできません。その代わりに派生型の 1 つを 指定する必要があります。 この例で、XML インスタンス文書内の <shape> エレメント を shapeType として宣言することはできません。 派生型の 1 つ (circle または rectangle) として宣言する必要があります。

上記の例で、 基本タイプは抽象的なものとして定義されていますが、 抽象的ではない基本タイプに基づく派生型のタイプ置換も サポートされています。XML スキーマの例で、shapeType という 名前の complexType を抽象的ではないものにするには、次の XML スキーマ・セグメントに示すように、 abstract=true 属性を削除します。
<xsd:complexType name="shapeType">
  <xsd:sequence>
    <xsd:element name="color" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>
WSDL は、Web サービスを定義する固有の XML スキーマ です。 WSDL でのタイプ置換の使用も サポートされています。

繰り返し宛先ノードの展開されたオカレンスの置換タイプを指定できます。 展開されたオカレンスのタイプの置換は、 繰り返し宛先ノードでのみサポートされます。 宛先ノードはマッピング・ペインの右側にあります。

重要: アクティビティー のマッピング・ペイン、および変数では、複合タイプのタイプ置換がサポートされています。 ただし、 アクティビティーのマッピング・ペイン、および変数では、 置換グループを使用した拡張によるエレメントの派生はサポートされません。 詳しくは、『サポートされない XML スキーマ機能』を参照してください。

XML スキーマの例

参考のため、このトピックで使用した XML スキーマの例を 記載します。
<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>