要素およびタイプの置換

ソース・ツリーとターゲット・ツリーの要素とタイプは置換できます。

要素置換は、次の場合に使用します。

  • 要素が、基礎となるスキーマ内の置換グループの先頭として定義されている場合。要素は抽象でも抽象でなくてもかまいません。置換グループの任意の要素を元の要素と置換できます。

  • 要素がany要素として定義されている場合。スキーマに定義されているすべてのグローバル要素を置換できます。

タイプ置換は、次の場合に使用します。

  • 基礎となるスキーマでグローバル・タイプを使用でき、そのタイプがソース・ツリーまたはターゲット・ツリーの要素のタイプから導出されている場合。この場合は、グローバル・タイプを要素の元のタイプと置換できます。抽象タイプから導出された任意のタイプをその抽象タイプと置換できます。

  • ソース・ツリーまたはターゲット・ツリーの要素がanyTypeタイプとして定義されている場合。この場合は、スキーマに定義されている任意のグローバル・タイプを置換できます。

タイプ置換は、XMLのxsi:type属性の使用によってサポートされます。

ソース・ツリーとターゲット・ツリーの要素またはタイプを置換するには:

  1. ソース・ツリーまたはターゲット・ツリーで、置換を適用する要素を右クリックします。XSLTペインを使用している場合は、選択した要素が、置換の前にXSLTに存在する必要があります。
  2. コンテキスト・メニューから「要素またはタイプの置換」を選択します。このオプションが無効な場合、基礎となるスキーマの要素またはそのタイプに対して可能な置換はありません。

    図41-45に示す「要素またはタイプの置換」ダイアログが表示されます。

    図41-45 「要素またはタイプの置換」ダイアログ

    図41-45の説明が続きます
    「図41-45 「要素またはタイプの置換」ダイアログ」の説明
  3. 要素の置換またはタイプの置換のいずれかを選択します(基礎となるスキーマによっては1つしか使用できない場合があります)。

    置換可能なグローバル・タイプまたは要素のリストがダイアログに表示されます。

  4. 置換するタイプまたは要素を選択します。
  5. 「OK」をクリックします。

    要素またはタイプが、最初に選択した要素と置換されます。この選択によって表示される結果は、次の項で説明する、置換の種類および置換の実行場所によって異なります。

    • タイプ置換の場合

      • ソース・ツリーでのタイプ置換

        前述の図に示すように、元の要素の下にxsi:type属性が追加されます。ノードが置換されたことを示す「S」アイコンが要素に表示されます。置換タイプ内のxsi:type属性を含む任意の構造要素からマッピングできます。

        ノート:

        要素置換とは異なり、ソース・ツリーに表示できるタイプ置換は一度に1つのみです。ただし、ソースで元のタイプと置換タイプの切換えが可能なマップが作成できなくなるわけではありません。

        ソース・ツリーでノードが表示されず、そのノードがXPath式にマッピングされている場合、ノードにマッピングされているXPath式は、中央のキャンバス・ペインには表示されます。

      • マップ・ビューのターゲット・ツリーでのタイプ置換

        前述の図に示すように、元の要素の下にxsi:type属性が追加されます。この属性はマップ・ビューでは無効化されているため、選択されたタイプ値に設定されます。ノードが置換されたことを示す「S」アイコンが要素に表示されます。置換タイプ内のxsi:type属性を除く任意の構造要素にマッピングできます。

      • XSLTビューのXSLTペインでのタイプ置換

        元の要素の下にxsi:type属性が追加されます。その値は選択されたタイプ値に設定されますが、マッピングされる可能性があります。ノードが置換されたことを示す「S」アイコンが要素に表示されます。「スキーマからの子の追加」コンテキスト・メニュー・オプションを使用して、任意の構造要素を追加できます。

        XPath文を使用して「xsi:type」フィールドの値を動的に設定する必要がある場合があります。xsi:typeの値を動的に設定する必要がある場合は、タイプ置換を使用して、実行時に予想される値が必要な構造要素に対して一時的なアクセス権を提供できます。

        必要な要素を追加し、目的のXPath文をxsi:type属性にマッピングして、値を動的に設定します。xsi:typeのランタイム値はデザインタイムには使用できないため、その値が動的に設定されている場合に、タイプ値に依存する要素上に疑問符アイコン(?)が表示されます。

      • XSLTビューのターゲット・ペインでのタイプ置換

        XSLTビューのターゲット・ペインでも置換を実行できます。このペインは、ターゲット・スキーマ・ドキュメントを表します。ターゲット・ペインでタイプ置換を実行後、次の図に示すとおり、元の要素の下にxsi:type属性がそのタイプに関連付けられている構造要素とともに追加されます。

        必要に応じて、これらの要素を選択して、XSLTペインにドロップできます。これらの要素は、XSLTペインの使用可能な「スキーマからの子の追加」コンテキスト・メニュー・オプションにも表示されます。

        たとえば、次の図では、置換要素(Item)のすべての子を選択します。

        次に、次の図に示すとおり、新しいItemノードをItemsノードの子としてXSLTペインにドロップします。

        Itemノードおよびその子が、Itemsノードの子として追加されます。ターゲット・ペインで、別の置換から別の構造を同様に作成できます。

    • 要素置換の場合

      • ソース・ツリーでの要素置換

        元の要素と置換された要素の両方がソース・ツリーに表示され、青い大カッコで接続されています。置換されたノードに「S」アイコンが表示されます。置換要素内の任意の構造要素からマッピングできます。

        前述の図では、ns1:ShipFutureDateAny要素に置換されています。

        次の図に示すとおり、複数の要素を同時に置換することもできます。

      • マップ・ビューのターゲット・ツリーでの要素置換

        前述の図に示すとおり、元の要素と置換された要素の両方が青い大カッコで接続されています。置換されたノードに「S」アイコンが表示されます。置換要素内の任意の構造要素にマップできます。

      • XSLTビューのXSLTペインでの要素置換

        XSLTペインで要素を置換するには、元の要素はXSLTに表示可能な要素である必要があります。Any要素はXSLTペインに表示できないため、次の項で説明するように、XSLTビューのターゲット・ペインで置換する必要があります。抽象要素はXSLTペインに一時的に追加できますが、最終出力としては使用しないでください。置換グループの先頭であり抽象ではない要素は、通常の要素として使用でき、変換もできます。

        次の図のns0:attachment要素は、置換グループの先頭でもある抽象要素です。これに対する置換がXSLTペインで実行されると、この要素はその置換で置き換えられます。

        置換後に、抽象要素が選択した要素で置換されます。「S」アイコンは置換を示します。「スキーマからの子の追加」コンテキスト・メニューを使用して、置換された要素に子要素を追加できます。次の図はこれについて示しています。

      • XSLTビューのターゲット・ペインでの要素置換

        XSLTビューのターゲット・ペインでも置換を実行できます。ターゲット・ペインは、ターゲット・スキーマ・ドキュメントを表します。ターゲット・ペインで要素置換を実行後、次の図に示すように、置換された要素は元の要素の下にそのタイプに関連付けられている構造要素とともに追加されます。

        必要に応じて、これらの要素を選択して、XSLTペインにドロップできます。これらの要素は、XSLTペインの使用可能な「スキーマからの子の追加」コンテキスト・メニュー・オプションにも表示されます。

  6. 置換ノードを削除するには、「S」アイコンがあるノードを右クリックし、コンテキスト・メニューから「置換の削除」を選択します。
  7. 置換が可能なすべてのノードを表示するには、ソース・ツリーまたはターゲット・ツリーを右クリックして、「置換ノード・アイコンの表示」を選択します。

    図41-46に示すように、置換が可能なすべてのノードには、「*」アイコンが表示されます。

    図41-46 可能なすべての置換

    図41-46の説明が続きます
    「図41-46 可能なすべての置換」の説明
  8. アイコンを非表示にするには、右クリックして「置換ノード・アイコンの非表示」を選択します。