uCosminexus Interschema ユーザーズガイド
セパレータ形式のフォーマットとは,個々の要素データをセパレータで区切った形式のフォーマットです。代表的なものにCSV(Comma Separated Value)があります。CSVとは,データベースやスプレッドシートのデータをコンマ「,」で区切ってテキストファイル形式にしたものです。EDI標準の中ではUN/EDIFACTがセパレータ形式のデータを扱っています。
固定長フォーマットのデータでは個々の要素サイズが決まっているため,どこまでが一つの要素のサイズか分かります。また,レングスタグでは要素のデータサイズはデータごとに異なりますが,サイズを表す要素があるのでデータのサイズが分かります。これに対して,サイズが規定されない可変長要素では,その要素の終わりを示すためにセパレータが必要になります。
ここでは,次の例を使用してセパレータ形式のフォーマット定義について説明します。
次に,各セパレータ形式フォーマットの定義について説明します。
固定長フォーマット「FIX1」のメッセージ「MSG1」にセパレータを使用したフォーマットを定義します。データの構造を図3-31に示します。
図3-31 「MSG1」の構造
メッセージ「MSG1」は,7種類の要素が順番に合計13個現れます。要素は階層化されていないため,単純な区切り文字を使用します。フォーマット名は,「SEPA1」とします。
1種類のセパレータを使用したフォーマット「SEPA1」を定義します。
レングスタグ構造の場合と同様に,不要文字削除の指定はチェックを入れます。また,この例では,要素のサイズのカウント方法に「文字数」を指定します。文字数で数えた場合,2バイト文字の1文字のサイズは「1」として数えます。また,文字列中に解放文字があっても,文字数としては数えません。
要素「単位」「注文日」を固定長,ほかの要素は可変長とします。セパレータを使用するフォーマットでは,レングスタグ構造の定義と異なり,「コンポーネントのサイズ決定式で動的に決定する」と指定する必要はありません。
セパレータの名前や値を定義します。セパレータを定義しておくと,セパレータを使用する構造は,セパレータの名前を指定するだけで,値を記述する必要はありません。複数の構造で同じ値をセパレータとして使用する場合などは,セパレータを定義しておくと便利です。セパレータの値を文字列で定義した場合,フォーマットのプロパティで定義したセパレータ文字コードが適用されます。
セパレータを新規作成します。
図3-32 [セパレータのプロパティ]ダイアログ
固定長フォーマット「FIX1」と同様にツリー構造を定義します。次に,構造に使用するセパレータの設定について説明します。
この例では,ルート構造「MSG1」に対して,セパレータ「SS」の値「,」を設定します。
図3-33 [セパレータ指定]ダイアログ
セパレータの種類やセパレータの指定方法などを指定します。この例では,要素間を区切るセパレータなので,「中間区切り文字」として指定します。図3-34 [セパレータ選択]ダイアログ
ダイアログの一覧には,選択している構造で指定できるセパレータ名が表示されます。以上でフォーマット「SEPA1」の定義が完成しました。
メッセージ「MSG1」では,要素中の普通のデータにセパレータと同じ文字を使用した場合,その文字がセパレータか,要素のデータの一部かどうかを区別する解放文字を使用していません。したがって,各要素中にセパレータと同じ文字「,」がないようにしてください。「,」があった場合は,要素中のデータの一部である「,」の位置で,要素が終わったと認識されてしまうため,正しくデータを変換できなくなります。
次に,複数のセパレータと解放文字を使用したフォーマットの定義について説明します。
固定長形式のフォーマット「FIX2」のメッセージ「MSG2」に複数のセパレータと解放文字を使用したフォーマットを定義します。固定長形式とセパレータ形式のフォーマットの比較を図3-35に示します。
図3-35 固定長形式とセパレータ形式のフォーマットの比較
「単価」「個数」「金額」は三つの要素でまとまって意味を持ち,「分納」と同様に,構造「明細」の子コンポーネントです。構造「明細」の子コンポーネントである「分納」は,1回のデータ中に最大2回出現します。そして,「分納」は「納入数」「納入番号」というコンポーネントの親の構造でもあります。
固定長やレングスタグ構造のメッセージでは固定回出現だった構造「明細」「分納」を,可変回出現できるように変更します。データの構造を図3-36に示します。フォーマット名は,「SEPA2」とします。
図3-36 フォーマット「SEPA2」の構造
セパレータ形式のフォーマットでは,メッセージを3分割します。メッセージの先頭情報として「注文番号」と「単位」,メッセージ本体の情報として「明細構造」,終了情報として「注文日」と「注文総額」に分けます。さらに,構造「分納」を可変回出現できるようにするために,構造を1階層増やします。これは,構造「分納」の出現回数をセパレータで分かるようにするためです。
メッセージ「MSG2」に複数のセパレータと解放文字を使用したフォーマットを定義します。
フォーマット「SEPA1」の例と同様です。要素「単位」「注文日」を固定長,ほかの要素は可変長とします。
「MSG2」の子コンポーネントは,セパレータとして,開始文字「タグ名」,終了文字「改行」,各要素の前には中間区切り文字「+」を使用します。
構造「明細」の子である構造「分納」は,複数回出現するコンポーネントなので,構造「分納」間の区切り文字として「*」,構造「分納」の子コンポーネントの区切りには「:」を使用します。
また,文字列中にセパレータと同じ文字を使用できるようにするため,解放文字として「?」を使用します。セパレータは個々のコンポーネントのプロパティで使用する値などを定義しますが,解放文字はルート構造に対して指定します。
表3-4 セパレータと解放文字の定義内容
名前 | 種別/値 | 備考 |
---|---|---|
TS | バイト列/ 0x0d0a | 構造「MSG2」の子コンポーネントの終了文字 |
RS | 文字列/ * | 複数回出現する構造「分納」の中間区切り文字 |
CS | 文字列/ : | 構造「分納」の子コンポーネント間の中間区切り文字 |
ES | 文字列/ + | 構造「MSG2」の子コンポーネント間の中間区切り文字 |
RC | 文字列/ ? | 解放文字 |
次に,構造を定義します。
まず,「MSG2」の子コンポーネントを3分割します。
表3-5 セパレータの設定
構造名 | セパレータ名/値 | セパレータの種類 | 備考 |
---|---|---|---|
MSG2 | RC/ ? | 解放文字 | − |
MH | MH | 開始文字 | 指定方法「文字列」 |
ES/ + | 中間区切り文字 | 中間区切り文字の位置「各要素の前」 | |
TS/ 0x0d0a | 終了文字 | − | |
明細 | MD | 開始文字 | 指定方法「文字列」 |
ES/ + | 中間区切り文字 | 中間区切り文字の位置「各要素の前」 | |
TS/ 0x0d0a | 終了文字 | − | |
S分納 | RS/ * | 中間区切り文字 | 中間区切り文字の位置「各要素の間」 |
分納 | CS/ : | 中間区切り文字 | 中間区切り文字の位置「各要素の間」 |
MT | MT | 開始文字 | 指定方法「文字列」 |
ES/ + | 中間区切り文字 | 中間区切り文字の位置「各要素の前」 | |
TS/ 0x0d0a | 終了文字 | − |
以上で複数セパレータを使用したメッセージフォーマット「SEPA2」の定義が完成しました。
ここでは,フォーマット「SEPA1」と「SEPA2」で作成したセパレータ形式のメッセージフォーマットにヘッダ部を追加し,一つのフォーマットにまとめます。複数データ及び複数メッセージに対応したセパレータ形式のフォーマットを定義します。フォーマット名は,「SEPA」とします。
ヘッダ部は,メッセージ「SEPA2」と同様にセパレータを使用した構造にします。構造「MESSAGE」の子コンポーネント「MSG1」にはフォーマット「SEPA1」の構造「MSG1」を,「MSG2」にはフォーマット「SEPA2」の構造「MSG2」を使用します。「MSG1」及び「MSG2」は,各フォーマットから要素及び構造をドラッグ&ドロップでコピーして使用できます。
この場合のデータ形式は次のような形式になります。
メッセージ本体を選択構造化する方法は,これまでの例と同様です。ただし,解放文字の使用を宣言するコンポーネントはルート構造である,ということに注意してください。フォーマット「SEPA2」では,解放文字は構造「MSG2」に対して定義しました。フォーマット「SEPA」では,解放文字は構造「ROOT」に対して定義し,「MSG2」に対する解放文字の定義を削除します。
以上でフォーマット「SEPA」の定義が完成しました。
All Rights Reserved, Copyright (C) 2000, Information-technology Promotion Agency, Japan.
All Rights Reserved. Copyright (C) 2005, 2008, Hitachi, Ltd.
All Rights Reserved, Copyright (C) 1985-1998, Microsoft Corporation.