これらのスキーマ・ツリーは大規模になり、XSLTエディタなどのグラフィカルなマッピング・ツールでの操作が難しくなることがあります。スキーマ・ドキュメントの中には、親ノードごとに数百の子ノードを定義しているものもあります。このような親ノードのいくつかをツリーで展開した場合、XSLTマップを作成する際スクロール・スルーすることになるツリー・ノードが数千個生成される可能性があります。
この付録では、スパースなマップとスパースでないマップの両方に対するストラテジおよび見にくさを低減する方法について説明します。
スキーマは多くの場合、多様な可能性に対応するよう作成されます。このようなスキーマがソースおよびターゲットのツリーの生成に使用されると、ツリーに非常に多くの(場合によっては数百万の)ノードが含まれる可能性があります。ただし、多くの場合、ユーザーが使用または移入する必要があるのは、スキーマに定義されているノードのうちごく一部のみです。
スパース・マッピングの処理には様々な方法があります。
サンプルXMLを使用したスキーマの生成
12c XSLTエディタにはXMLドキュメントからスキーマを作成する機能があり、これをソースまたはターゲットのツリーのスキーマ・ドキュメントとして使用できます。ソースまたはターゲット(あるいはその両方)用にサンプルXMLドキュメントがある場合、このドキュメントを使用してマップに必要なノードのみを含む小さなスキーマ・ドキュメントを作成できます。
サンプル・ソースおよびターゲットXMLドキュメントを使用してXSLTマップを作成するには、新規XSLマップのソースまたはターゲットのスキーマを選択する際、「XMLから生成」オプションを選択します。
スキーマが生成され、Schemas
フォルダに配置されます。このスキーマを使用してマッピングのソースおよびターゲットのツリーを作成すると、元のサンプルXMLドキュメントに存在するノードのみが含まれます。
小さなサンプル・スキーマと大規模なスキーマの間で切り替える必要がある場合、キャンバスのコンテキスト・メニューから「ソースまたはターゲット・スキーマの置換/追加」を選択します。Schemasフォルダの小さなサンプル・スキーマまたは大規模なスキーマを選択します。
XSLTビューの使用
12cのエディタには、設計ビュー・タブ内で使用可能な新規ビューが含まれています。これが、XSLTビューです。XSLTエディタ・ツールバーの右上の「XSLT」ボタンをクリックして使用します。
XSLTビューには、XSLTファイル内に存在する文が表示されます。以前にソースXMLエディタでXSLTを編集したことのあるユーザーには、このビューの良さがわかるでしょう。XSLTソースでの文の出現と同じように編成されています。このビューを使用すると、作成中のマッピングの簡約版が表示されます。たとえば、大規模ターゲット・スキーマのマップのマップ・ビューでの表示を次に示します。スキーマでツリーの後半に出現するノードへのマップの線が表示の下端で切れていることに注意してください。
同じマッピングのXSLTビューでの表示を次に示します。
この場合、使用されていないターゲット・ノードがスペースを取ることがなく、すべてのマッピングが明確にわかります。新規ターゲット要素をスキーマから追加する必要がある場合、コンテキスト・メニューで「スキーマからの子の追加」オプションを使用します。
親ノードのコンテキスト・メニューから「スキーマからの子の追加」オプションを選択すると、選択および追加可能な子ノードのリストが表示されます。親ノードのこのメニューから「すべての属性」/「すべての要素」/「すべての必須」を選択することもできます。
さらに付け加えると、ノードがこのようにして追加された場合、挿入したノードのすべての必要な子が自動的に追加されます。前述の例では、ns2:records
要素を追加するよう選択した場合、ツリー内の正しい位置に挿入され、これに必要なns1:id
ノードが自動的に追加されます。
ソース・ビューでの編集に慣れている場合、ソース・ビューと設計ビューの間を簡単に移動できるオプションが12.2.1.0.0で追加されました。XSLTパネルで任意のノードを右クリックし、「ソース・ビュー内の検索」を選択します。
ソース・ビューが開き、ノードが選択されています。
設計ビューのノードに戻るには、ソース・ビューで「設計ビュー内の検索」オプションを選択します。
XSLTビューを使用して任意のXSLT文を挿入することもでき、XSLTビューで名前付きテンプレートおよび一致するテンプレート(テンプレート・ルール)を使用できます。XSLTビューの詳細は、「XSLTビューでのXSLTマップの編集」を参照してください。
プリファレンスを設定してXSLTエディタを常にXSLTビューで起動できます。この設定では、開始するためのターゲット・ノードの自動作成も制御されます。XSLTビュー用のプリファレンスを設定するには、「ツール」→「プリファレンス」を選択して「プリファレンス」ダイアログを起動します。「XSLマップ」→「XSLエディタ」を選択します。
XSLTビューで起動するには、XSLTビュー初期化オプションを選択し、希望のオプションを選択します。大規模なスキーマの操作の場合、生成する子のレベル数の限度を設定することをお薦めします。
XSLTマップを作成する際、これらのオプションが使用されます。また、これらのオプションは、キャンバスのコンテキスト・メニューから「XSLTマップのクリア」オプションを選択した場合に使用されます。
特定のマップについてプリファレンス設定が適していない場合、プリファレンスに変更を加え、「XSLTマップのクリア」を選択して初期マップを再生成します。
時として、大量のターゲット要素を含む、つまり大量のマッピングを含むマップを作成したり、変更する必要がある場合があります。このようなマップを編集する場合、編集内容を追跡することが困難なことがあります。そのような場合のために12c XSLTエディタには、ユーザーがマッピングのスコープを設定し、選択したターゲット・ノードより下のマッピングのみを表示できる新しい機能があります。
たとえば、次のような非スパース・マッピングがあるとします。
ターゲット・ツリー内の操作対象部分にマッピングのスコープを設定できます。ターゲット・ノードを右クリックして、「表示スコープの設定」を選択します。
表示は、選択したターゲット・ノードにスコープが設定されています。この部分以外のマッピングを示す線はすべて描かれません。ソース・ツリーは簡約化されてマップされているノードのみ表示されます。
スコープ内の部分で作業を続けることができます。
ソース・ツリー内の非表示の部分を展開して、追加のマッピングに必要なノードを表示できます。ソース・ツリーで任意の非表示のアイテムを右クリックし、ツリー内の検索および表示するノードの選択のためのオプションを含むポップアップ・メニューを表示します。
このポップアップから行う検索は、現在選択している非表示の部分以外にも及ぶため、検索するノードを含む正しい非表示部分を選択する必要はありません。
メイン・コンテキスト・メニューには、ソース・ツリーの一部を非表示にしたり、展開するオプションもあります。ツリー内の非表示でないノードを右クリックすると、選択したノードの兄弟および子を表示したり、非表示にするオプションがあります。
ターゲット・ツリーで、「スキーマからの子の追加」オプションを使用してスキーマからノードを追加できます。
スコープ付きの表示を終了するには、スコープ外のターゲット・ノードをクリックするか、ターゲット・ツリーのコンテキスト・メニューから「表示スコープの終了」を選択します。
12cのXSLTエディタには、ソースおよびターゲット・ツリーでノード名および他の情報を略記する機能があります。キャンバスのコンテキスト・メニューから「テキスト短縮」オプションを選択すると、接頭辞が非表示になり、特定のタイプのノードのテキストが略記されます。
略記の前:
略記の後:
ノード名のテキストの略記を定義できるカスタム表示オプション構成ファイルを作成することもできます。たとえば、前述の例では、CustomerPartyList
という語句が多くのノード名に出現します。カスタム表示オプション構成ファイルを使用して、これをCPL
と略記できます。そうすると、$EscapedSyncCustomerPartyListEBM
などのノード名は、ツリーで$EscapedSyncCPLEBM
と表示されます。
これによって、XSLTや生成されたXPath文内のノード名は変更されません。ツリー・ノードに出現する名前にのみ適用され、スキーマ・ノード定義で使用されている名前が冗長な場合の全体的な見にくさの低減に役立ちます。
カスタム表示オプション構成ファイルは、XSLエディタのプリファレンス下でロードできます。詳細は、「カスタマイズ・ファイルをインポートしてXSLTマップ・エディタの表示プリファレンスを指定する方法」を参照してください。
大規模なスキーマで要素名を検索すると、検索に時間がかかることがあります。12.1.3では、検索に取消しオプションはありません。これが12.2.1で追加されました。
検索に時間がかかる場合、プリファレンスでツリーの「展開の深さ」を減らすことで、ツリー・サイズを小さくすることができます。「ツール」→「プリファレンス」に移動します。ナビゲータから「XSLマップ」を選択します。「拡張オプションの表示」ボタンをクリックし、「XMLスキーマ最大展開の深さ」オプションの「展開の深さ」を小さな値に変更します。単一レベルに数百個の子があるツリーの場合、この値を10レベル前後にする必要があります。これは、ここで設定したレベルより下は検索されないということですが、ツリーに数百万個のノードが含まれる場合もあり、その場合は検索に時間がかかります。
ユーザーの中には、XSLTエディタの自動マップ機能を使用して入力XMLドキュメントをコピーしようとするユーザーがいるかもしれません。ただし、自動マップではスキーマ内のノードごとに特定のXSLT文が生成されます。大規模なスキーマでは、これは入力ドキュメントの効率的なコピー方法ではありません。これによって非常に大きなサイズのXSLTファイルが生成される可能性があります。これらのファイルはロードに時間がかかり、編集が困難です。さらに、ユーザーのマッピングがスパースの場合、スキーマには定義されているが、実行時には存在しないノードに対して実行するXSLTが数千行生成され、非効率です。
XSLTエディタでは、導出されたタイプおよびXSDに定義された置換グループに基づいて要素およびタイプの置換を行うことができます。多くのスキーマには、置換グループの要素またはxsi:type
を使用して導出されたタイプの要素でオーバーロードできる抽象要素またはタイプが含まれます。
XSLTエディタのテスト・ツールでは、置換された要素を含む入力XMLドキュメントの生成は現在サポートされません。そのため、ソース・ツリーで置換が行われたXSLTマップを起動すると、次の警告が表示されます。
ユーザーは、生成された入力ドキュメントを変更するか、独自のテスト入力ファイルを提供する必要があります。xsi:type
定義または必要な要素の置換に正しい構文を使用してユーザー自身が入力ドキュメントで置換を行う必要がありますが、これは簡単ではありません。複数の置換が行われた大規模なスキーマの場合、より難しくなります。
XSLTエディタを使用すると、要素が正しく置換され、適切なネームスペース/接頭辞がすべて定義された入力ドキュメントを生成できます。これを入力テスト・ドキュメントのテンプレートにします。
前述のマッピングでは、ソース・ツリーで2つの置換が行われています。1つ目は、スキーマ・ドキュメントで定義された置換グループの置換された要素CommentList
です。2つ目は、スキーマ・ドキュメントで定義された、導出されたアイテム・タイプのItem
タイプ置換です。
このマップをテストするためのテスト入力ファイルとして使用できるドキュメントを生成する小さなXSLTマップを作成します。これには、正しいxsi:type
およびソース・ドキュメントに定義された要素置換情報が含まれる必要があります。
既存のマップのPurchaseOrder
ソースのテスト入力として使用できるPurchaseOrder
ドキュメントを出力する必要があるため、ソースにはスキーマ・ドキュメントを選択せず、ターゲットにはPurchaseOrder
スキーマを選択して新しいマップを作成します。
スキーマからの子の追加を使用し、PurchaseOrder
ソースで行ったのと同じ置換をPurchaseOrder
ターゲットに行い、次のようなマップを作成します。
このXSLTをテスト・ツールで実行し、PurchaseOrder
テンプレート・ドキュメントを作成します。
これによって、テスト用の正しい置換を含む、テスト入力ドキュメントのテンプレートが生成されます。
定義されたフィールドに適切なテスト・データを入力できます。あるいは、テスト・ファイルを生成するXSLTにデータ値を定義し、テスト・ファイルに事前移入できます。