uCosminexus Interschema ユーザーズガイド

[目次][用語][索引][前へ][次へ]

3.3.3 セパレータ形式フォーマットの定義

セパレータ形式のフォーマットとは,個々の要素データをセパレータで区切った形式のフォーマットです。代表的なものにCSV(Comma Separated Value)があります。CSVとは,データベースやスプレッドシートのデータをコンマ「,」で区切ってテキストファイル形式にしたものです。EDI標準の中ではUN/EDIFACTがセパレータ形式のデータを扱っています。

固定長フォーマットのデータでは個々の要素サイズが決まっているため,どこまでが一つの要素のサイズか分かります。また,レングスタグでは要素のデータサイズはデータごとに異なりますが,サイズを表す要素があるのでデータのサイズが分かります。これに対して,サイズが規定されない可変長要素では,その要素の終わりを示すためにセパレータが必要になります。

ここでは,次の例を使用してセパレータ形式のフォーマット定義について説明します。

次に,各セパレータ形式フォーマットの定義について説明します。

<この項の構成>
(1) 1種類のセパレータを使用したフォーマット(フォーマット「SEPA1」)
(2) 複数のセパレータと解放文字を使用したフォーマット(フォーマット「SEPA2」)
(3) 複数種類のメッセージを持つセパレータ形式のフォーマット(フォーマット「SEPA」)

(1) 1種類のセパレータを使用したフォーマット(フォーマット「SEPA1」)

固定長フォーマット「FIX1」のメッセージ「MSG1」にセパレータを使用したフォーマットを定義します。データの構造を図3-31に示します。

図3-31 「MSG1」の構造

[図データ]

メッセージ「MSG1」は,7種類の要素が順番に合計13個現れます。要素は階層化されていないため,単純な区切り文字を使用します。フォーマット名は,「SEPA1」とします。

1種類のセパレータを使用したフォーマット「SEPA1」を定義します。

(a) フォーマット名の定義

レングスタグ構造の場合と同様に,不要文字削除の指定はチェックを入れます。また,この例では,要素のサイズのカウント方法に「文字数」を指定します。文字数で数えた場合,2バイト文字の1文字のサイズは「1」として数えます。また,文字列中に解放文字があっても,文字数としては数えません。

(b) 型の定義

要素「単位」「注文日」を固定長,ほかの要素は可変長とします。セパレータを使用するフォーマットでは,レングスタグ構造の定義と異なり,「コンポーネントのサイズ決定式で動的に決定する」と指定する必要はありません。

(c) セパレータの定義

セパレータの名前や値を定義します。セパレータを定義しておくと,セパレータを使用する構造は,セパレータの名前を指定するだけで,値を記述する必要はありません。複数の構造で同じ値をセパレータとして使用する場合などは,セパレータを定義しておくと便利です。セパレータの値を文字列で定義した場合,フォーマットのプロパティで定義したセパレータ文字コードが適用されます。

セパレータを新規作成します。

  1. [挿入]−[セパレータ]を選択します
    [セパレータのプロパティ]ダイアログが表示されます。

    図3-32 [セパレータのプロパティ]ダイアログ

    [図データ]

  2. セパレータ名と値を指定します
    この例では,セパレータ名として「SS」,その値としてコンマ「,」を定義します。
  3. [OK]ボタンをクリックします
    セパレータ定義フォルダアイテムの下にセパレータ「SS」が作成されます。

    [図データ]

(d) 構造の定義

固定長フォーマット「FIX1」と同様にツリー構造を定義します。次に,構造に使用するセパレータの設定について説明します。

この例では,ルート構造「MSG1」に対して,セパレータ「SS」の値「,」を設定します。

  1. ルート構造「MSG1」の[構造のプロパティ]ダイアログで[セパレータ]ボタンをクリックします
    [セパレータ指定]ダイアログが表示されます。

    図3-33 [セパレータ指定]ダイアログ

    [図データ]

    セパレータの種類やセパレータの指定方法などを指定します。この例では,要素間を区切るセパレータなので,「中間区切り文字」として指定します。
    ダイアログの設定内容は次のとおりです。
    • 指定方法
      使用するセパレータを定義しているので,「定義済のセパレータから選択」を指定します。
    • 中間区切り文字の位置
      要素間を区切るセパレータを設定したいため,「各要素の間」を指定します。
    次に,定義済のセパレータを指定します。
  2. [セパレータ名]ボタンをクリックします
    [セパレータ選択]ダイアログが表示されます。

    図3-34 [セパレータ選択]ダイアログ

    [図データ]

    ダイアログの一覧には,選択している構造で指定できるセパレータ名が表示されます。
  3. 一覧からセパレータ名「SS」を選択して,[OK]ボタンをクリックします
    [セパレータ指定]ダイアログの内容入力欄に,選択したセパレータ名「SS」が入力されます。

    [図データ]

    セパレータの設定が完成しました。

以上でフォーマット「SEPA1」の定義が完成しました。

メッセージ「MSG1」では,要素中の普通のデータにセパレータと同じ文字を使用した場合,その文字がセパレータか,要素のデータの一部かどうかを区別する解放文字を使用していません。したがって,各要素中にセパレータと同じ文字「,」がないようにしてください。「,」があった場合は,要素中のデータの一部である「,」の位置で,要素が終わったと認識されてしまうため,正しくデータを変換できなくなります。

次に,複数のセパレータと解放文字を使用したフォーマットの定義について説明します。

(2) 複数のセパレータと解放文字を使用したフォーマット(フォーマット「SEPA2」)

固定長形式のフォーマット「FIX2」のメッセージ「MSG2」に複数のセパレータと解放文字を使用したフォーマットを定義します。固定長形式とセパレータ形式のフォーマットの比較を図3-35に示します。

図3-35 固定長形式とセパレータ形式のフォーマットの比較

[図データ]

「単価」「個数」「金額」は三つの要素でまとまって意味を持ち,「分納」と同様に,構造「明細」の子コンポーネントです。構造「明細」の子コンポーネントである「分納」は,1回のデータ中に最大2回出現します。そして,「分納」は「納入数」「納入番号」というコンポーネントの親の構造でもあります。

固定長やレングスタグ構造のメッセージでは固定回出現だった構造「明細」「分納」を,可変回出現できるように変更します。データの構造を図3-36に示します。フォーマット名は,「SEPA2」とします。

図3-36 フォーマット「SEPA2」の構造

[図データ]

セパレータ形式のフォーマットでは,メッセージを3分割します。メッセージの先頭情報として「注文番号」と「単位」,メッセージ本体の情報として「明細構造」,終了情報として「注文日」と「注文総額」に分けます。さらに,構造「分納」を可変回出現できるようにするために,構造を1階層増やします。これは,構造「分納」の出現回数をセパレータで分かるようにするためです。

メッセージ「MSG2」に複数のセパレータと解放文字を使用したフォーマットを定義します。

(a) フォーマット及び型の定義

フォーマット「SEPA1」の例と同様です。要素「単位」「注文日」を固定長,ほかの要素は可変長とします。

(b) セパレータ名の定義

「MSG2」の子コンポーネントは,セパレータとして,開始文字「タグ名」,終了文字「改行」,各要素の前には中間区切り文字「+」を使用します。

構造「明細」の子である構造「分納」は,複数回出現するコンポーネントなので,構造「分納」間の区切り文字として「*」,構造「分納」の子コンポーネントの区切りには「:」を使用します。

また,文字列中にセパレータと同じ文字を使用できるようにするため,解放文字として「?」を使用します。セパレータは個々のコンポーネントのプロパティで使用する値などを定義しますが,解放文字はルート構造に対して指定します。

次に,構造を定義します。

(c) 構造の定義

まず,「MSG2」の子コンポーネントを3分割します。

  1. 「注文番号」と「単位」を子コンポーネントとする構造「MH」,「注文日」と「注文総額」を子コンポーネントとする構造「MT」を作成します

    [図データ]

  2. 構造「明細」の子コンポーネントとして構造「S分納」を作成します
    出現回数は1とします。
  3. 構造「分納」を構造「S分納」の子コンポーネントとして定義します
    出現回数は最小1,最大2とします。

    [図データ]

  4. ルート構造「MSG2」の下には子コンポーネントとして,「MH」「明細」「MT」を定義します
    構造「明細」の出現回数は最小1,最大3とします。

    [図データ]

  5. 構造で使用するセパレータを設定します
    セパレータを設定する構造と設定内容を表3-5に示します。

    表3-5 セパレータの設定

    構造名 セパレータ名/値 セパレータの種類 備考
    MSG2 RC/ ? 解放文字
    MH MH 開始文字 指定方法「文字列」
    ES/ + 中間区切り文字 中間区切り文字の位置「各要素の前」
    TS/ 0x0d0a 終了文字
    明細 MD 開始文字 指定方法「文字列」
    ES/ + 中間区切り文字 中間区切り文字の位置「各要素の前」
    TS/ 0x0d0a 終了文字
    S分納 RS/ * 中間区切り文字 中間区切り文字の位置「各要素の間」
    分納 CS/ : 中間区切り文字 中間区切り文字の位置「各要素の間」
    MT MT 開始文字 指定方法「文字列」
    ES/ + 中間区切り文字 中間区切り文字の位置「各要素の前」
    TS/ 0x0d0a 終了文字

以上で複数セパレータを使用したメッセージフォーマット「SEPA2」の定義が完成しました。

(3) 複数種類のメッセージを持つセパレータ形式のフォーマット(フォーマット「SEPA」)

ここでは,フォーマット「SEPA1」と「SEPA2」で作成したセパレータ形式のメッセージフォーマットにヘッダ部を追加し,一つのフォーマットにまとめます。複数データ及び複数メッセージに対応したセパレータ形式のフォーマットを定義します。フォーマット名は,「SEPA」とします。

[図データ]

ヘッダ部は,メッセージ「SEPA2」と同様にセパレータを使用した構造にします。構造「MESSAGE」の子コンポーネント「MSG1」にはフォーマット「SEPA1」の構造「MSG1」を,「MSG2」にはフォーマット「SEPA2」の構造「MSG2」を使用します。「MSG1」及び「MSG2」は,各フォーマットから要素及び構造をドラッグ&ドロップでコピーして使用できます。

この場合のデータ形式は次のような形式になります。

[図データ]

メッセージ本体を選択構造化する方法は,これまでの例と同様です。ただし,解放文字の使用を宣言するコンポーネントはルート構造である,ということに注意してください。フォーマット「SEPA2」では,解放文字は構造「MSG2」に対して定義しました。フォーマット「SEPA」では,解放文字は構造「ROOT」に対して定義し,「MSG2」に対する解放文字の定義を削除します。

以上でフォーマット「SEPA」の定義が完成しました。