定位置および区切りの混合の例
このタスクについて
ここでは、フラット・ファイル・スキーマを作成して定位置データと区切りデータの混合を解析する方法を例示します。 フラット・ファイル・スキーマを作成するには、最初にフラット・ファイル・データを分析して、 フラット・ファイル・スキーマに追加するフィールドおよびノードを決定する必要があります。 ここで示す例では、以下の 2 行のデータに対してフラット・ファイル・スキーマを作成します。
BuyRight Pharmacy;USACAMVI334;!389!22;34980;
Taylor Drugs;USANJWLB128;!778!23!523;5667;
以下の手順に示すように、 フラット・ファイル・スキーマのレコードおよびフィールドを定義するためのトップダウン方法を使用します。
手順
- ルート・ノードを作成します。
- 「プロジェクト」タブで 「フラット・ファイル・スキーマ (Flat File Schemas)」フォルダーを右クリックし、 「新規フラット・ファイル・スキーマ」を選択します。 「基本ウィザード (Basic Wizard)」ダイアログ・ボックスが開きます。
- 「名前」フィールドに Order と入力します。
- 「OK」をクリックします。 フラット・ファイル・スキーマ・エディターが開き、フラット・ファイル・スキーマが「プロジェクト」タブの「フラット・ファイル・スキーマ (Flat File Schemas)」フォルダーの下に表示されます。 さらに、同じ名前のルート・ノードが「スキーマ・レイアウト」タブに表示されます。
- データ内の最上位レベルの構造を決定します。 この例では、最も大きい構造は、それぞれがレコードを表す 2 つの行です。 このフラット・ファイル・データ内の 2 つのレコードは、図 1 に示すように、2 つのレコードの間にある行末コードで区切られています。 図 1. 混合の例 1: ファイルのレコードが、レコードを構成する文字列と文字列の間にある行末コードで 区切られています。
- 以下の基準を使用して、子反復レコードを解析するようにルート・ノード Order を構成します。
- 区切り文字を使用してデータをレコード単位に分けます。
- 最後のレコードは区切り文字で終了しないため、文書の最後は EOS (ストリームの終わり) であると予期します。
- 行末区切りコードを使用して、すべての子レコードを区切ります。
- データとデータの間には区切り文字があると予期します。
- 反復子レコードを予期します。
- 行末区切りコードを使用して子反復レコードを区切ります。
これらの基準を使用して、図 2 に示すように、Order ノードの 「基本プロパティー」ペインおよび「区切り文字」ペインに以下の値を指定します。
図 2. 「構造」が「区切り (Delimited)」となっていて、「文書は EOS で終了する (Delimited and Document ends with EOS)」にチェック・マークが付いている混合の例のペイン 1。 「行の末尾」オプションが選択され、「子区切り文字の位置」が「間 (In Between)」に設定されています。 - レコードを表すように下位ノードをルート・ノードに追加します。 「スキーマ・レイアウト」タブで Order ノードを右クリックします。 メニューから「新規の子」 > 「レコード」を 選択して、purchaseOrder と入力し、「OK」をクリックします。
- データにおける次のレベルの構造を決定します。 この例では、図 3 に示すように、次のレベルの構造はセミコロンで区切られたフィールドです。 図 3. 混合の例 2: レコードの個々のフィールドはセミコロンで区切られています。
- 以下の基準の説明に従って、これらのフィールドを解析するように purchaseOrder ノードを構成します。
- purchaseOrder ノードには 1 つ以上のオカレンスを指定できます。
- 区切り文字を使用して、子フィールドになるレコードのデータを解析します。
- データ間の区切り文字としてセミコロンを使用します。
- データの後には区切り文字があると予期します。
これらの基準を使用して、図 4 に示すように、purchaseOrder ノードの 「基本プロパティー」ペインおよび「区切り文字」ペインに以下の値を指定します。
図 4. 混合の例のペイン 2: 「構造」が「区切り (Delimited)」に設定されていて、 「最大」が「上限なし」に設定されていて、「文字」オプションが選択されています。 「子区切り文字の位置」は「後」に設定されています。 - 「スキーマ・レイアウト」タブで purchaseOrder ノードを右クリックし、 リストから「新規の子」オプションを選択して、purchaseOrder ノードのフィールドを追加します。 「一括追加」ダイアログ・ボックスが表示されます。
- 「一括追加」ダイアログ・ボックスで purchaseOrder ノードのすべての子レコードおよびフィールドを追加します。
- 「追加」をクリックして、 「field1」を「storeName」に変更します。 「ノード・タイプ」は「フィールド」に設定したままにします。
- 「追加」をクリックして、 「field2」を「originCode」に変更します。 「ノード・タイプ」を レコード に変更します。
- 「追加」をクリックして、 「field3」を「items」に変更します。 「ノード・タイプ」を レコード に変更します。
- 「追加」をクリックして、 「field4」を「orderID」に変更します。 「ノード・タイプ」は「フィールド」に設定したままにします。
- 「OK」をクリックします。
- データにおける次のレベルの構造を決定します。 この例では、図 5 に示すように、次のレベルの構造は originCode レコードで見つかった定位置データ・セットです。 図 5. 混合の例 3: originCode は、区切りレコードの定位置データのセクションです。
- 定位置になるように originCode レコードを構成します。
- 「スキーマ・レイアウト」タブで originCode ノードを選択します。 「基本プロパティー」が表示されます。
- 「構造」リストで「定位置 (Positional)」を選択します。
- 「スキーマ・レイアウト」タブで originCode ノードを右クリックして、 リストから「新規の子」オプションを選択して、originCode ノードの定位置フィールドを 追加します。 「一括追加」ダイアログ・ボックスが開きます。
- 「一括追加」ダイアログ・ボックスで originCode ノードのすべての子レコードおよびフィールドを追加します。
- 「追加」をクリックして、 「field1」を「countryCode」に変更します。 「ノード・タイプ」は「フィールド」に設定したままにします。
- 「追加」をクリックして、 「field2」を「stateCode」に変更します。 「ノード・タイプ」は「フィールド」に設定したままにします。
- 「追加」をクリックして、 「field3」を「cityCode」に変更します。 「ノード・タイプ」は「フィールド」に設定したままにします。
- 「追加」をクリックして、 「field4」を「storeCode」に変更します。 「ノード・タイプ」は「フィールド」に設定したままにします。
- 「OK」をクリックします。
- 各定位置フィールドの「定位置プロパティー」を構成します。 originCode ノードの下位ノードごとに、「スキーマ・レイアウト」タブでノードを
クリックして、以下のリストに示すように、「プロパティー」ペインの下部にある
「フィールド・オフセット」および「フィールド長」の値を設定します。
- countryCode -
- stateCode -
- cityCode -
- storeCode -
「フィールド・オフセット」は、 各フィールドの originCode ストリングの先頭からではなく、originCode ストリングが 処理されているときの現行文字位置から調整されます。 この例では、countryCode が処理され、originString の 先頭の 3 文字が countryCode に割り当てられます。 stateCode が処理されると、図 6 に示すように、現行文字の位置はすでに 3 文字目の 位置にあるため、stateCode ストリングを処理するための開始点を 取得するために stateCode の「フィールド・オフセット」の 1 が 現行文字位置に追加されます。
図 6. 混合の例 4 は、現行のカーソル位置およびフィールド・オフセットを示します。 - countryCode -
- データにおける次のレベルの構造を決定します。 この例では、図 7 に示すように、次のレベルの構造は感嘆符で区切られた反復フィールドです。 図 7. 区切りデータが感嘆符によって示される混合の例 5。
- 以下の基準を使用して、子反復レコードを解析するように items ノードを構成します。
- 区切り文字を使用してデータをフィールド単位に分けます。
- 感嘆符を区切り文字として使用して、すべての子フィールドを区切ります。
- データの前には区切り文字があると予期します。
- 1 つ以上の反復子フィールドを予期します。
- 感嘆符を区切り文字として使用して子反復フィールドを区切ります。
これらの基準を使用して、図 8 に示すように、items ノードの 「基本プロパティー」ペインおよび「区切り文字」ペインに以下の値を指定します。
図 8. 「子区切り文字の位置」が「前」に設定されている混合の例のペイン 3。 - 「スキーマ・レイアウト」タブで items ノードを右クリックし、 リストから「新規の子」 > 「フィールド」オプションを 選択して、items ノードに反復子フィールドを追加します。 「新規フィールド」ダイアログ・ボックスが開きます。
- 「フィールド名」に item と入力して、 「OK」をクリックします。
- 図 9 に示すように、1 つ以上のオカレンスが含まれるように item ノードを構成します。 図 9. 「最大反復 (Maximum Repeat)」が「上限なし」に設定されている混合の例のペイン 4。フラット・ファイル・スキーマが完成し、テストの準備が整いました。
- 以下のテキストをテスト・ペインの左サブペインに貼り付けます。
BuyRight Pharmacy;USACAMVI334;!389!22;34980;
Taylor Drugs;USANJWLB128;!778!23!523;5667;
このデータは、mixedData.txt ファイルでも提供されています。 Studio のインストール時にデフォルトを受け入れた場合、 このファイルはディレクトリー C:¥Program Files¥IBM¥WebSphere Cast Iron Studio 3.X¥Samples¥FlatFileSchema にあります。重要: 最後の行の後に復帰を追加しないでください。 - 「テスト」アイコンをクリックします。 「保存の確認」ダイアログ・ボックスが開きます。
- 「はい」をクリックします。 以下のデータの XML 表現が、テスト・ペインに表示されます。
<?xml version="1.0" encoding="UTF-8"?> <Order> <purchaseOrder> <storeName>BuyRight Pharmacy</storeName> <originCode> <countryCode>USA</countryCode> <stateCode>CA</stateCode <cityCode>MVI</cityCode> <storeCode>334</storeCode> </originCode> <items> <item>389</item> <item>22</item> </items> <orderId>34980</orderId> </purchaseOrder> <purchaseOrder> <storeName>Taylor Drugs</storeName> <originCode> <countryCode>USA</countryCode> <stateCode>NJ</stateCode> <cityCode>WLB</cityCode> <storeCode>128</storeCode> </originCode> <items> <item>778</item> <item>23</item> <item>523</item> </items> <orderId>5667</orderId> </purchaseOrder> </Order>
- 「スキーマ・レイアウト」タブで item ノードをクリックします。 図 10 に示すように、テスト・ペインの右サブペインで、解析されて item ノードに入れられたデータが
強調表示されます。 図 10. 強調表示された item ノード
- state ノードをクリックして、state ノードに割り当てられたデータを表示します。 注: Order フラット・ファイル・スキーマの参照実装が、FlatFileSchemasExample プロジェクトに用意されています。 FlatFileSchemasExample プロジェクトを表示したり開いたりするには、『グループの例』の ステップ 1 と 2 に従って、Order フラット・ファイル・スキーマをダブルクリックします。 Order フラット・ファイル・スキーマのノードが、「スキーマ・レイアウト」タブに 表示され、Order ルート・ノードのプロパティーが右ペインに示されます。