セグメントには 1 つ以上のデータ要素が含まれており、メッセージ内の情報の中間単位です。 各セグメントは 3 文字のデータ セグメント識別子で始まり、セグメント ターミネータ (既定ではアポストロフィ (')) で終わります。 セグメント内のデータ要素は、データ要素の区切り記号で区切られます。 データ要素の区切り記号は、既定ではプラス記号 (+) です。 セグメントは必須またはオプションとして分類されます。 発信インターチェンジの区切り記号は、2 つの取引先間の契約で、またはフォールバック取引先契約の一部として設定できます。
ネスティング
セグメントは、 入れ子と呼ばれる階層リレーションシップにグループ化できます。 入れ子には、明示的と暗黙的の 2 種類があります。 1 つのインターチェンジ内で使用できる入れ子構造の種類は 1 つだけです。
明示的な入れ子では、ループが入れ子になっていることを明示的に示します。 明示的な入れ子を使用すると、セグメント タグ内の最初のコンポーネント データ要素がセグメント コードになります。 その後に、セグメントの繰り返しのレベルと発生率の両方を示す条件付きコンポーネント データ要素が続きます。 この目的で使用されるコンポーネント・データ要素の数は、セグメントがメッセージ構造に現れる階層レベルによって異なります。 セグメントがレベル 1 に表示される場合は、セグメント コードの直後のコンポーネント データ要素が使用されます。 セグメントがレベル 2 に表示される場合、セグメント コードの直後のコンポーネント データ要素と次のコンポーネント データ要素の両方が使用されます。 セグメントがレベル 3 に表示される場合は、セグメント コードに続く 3 つのコンポーネント データ要素が使用されます。 パイプラインでは、データと階層を比較する構造検証を実行できません。
暗黙的な入れ子では、メッセージ構造で指定されたセグメントの順序に厳密に従います。 セグメント間の入れ子関係は暗黙的に明らかであり、処理にそれ以上の兆候は必要ありません。
Loops
1 つ以上のセグメントは、トランザクション セット内で ループ として繰り返すことができます。 ループには、非連結ループと有界ループの 2 種類があります。
無制限のループ
無制限のループには、ループの先頭と末尾をマークする一意の識別セグメントがありません。 無制限のループは、カウントに従って繰り返されます。 カウントに値がない場合、ループは 2 回繰り返されます。 ループ内の各セグメントは、指定された順序で 1 回だけ実行できます。
無制限ループの開始は、一意の最初のデータ要素によって確立されます。 最初の要素は、出現するたびに 1 回だけ表示できます。 無制限のループはループ内で入れ子にすることができます。その場合、内側の非連結ループは、外側のループと同じ序数位置から開始できず、外側のループと同じセグメント ID で開始することはできません。 入れ子になったループには、同じ入れ子構造内の外部ループの開始セグメントでもあるセグメントを含めることはできません。
境界付きループ
境界付きループは、定義済みのセグメント LS (ループ開始) で始まり、定義済みのセグメント LE (ループ終了) で終了します。 LS セグメントのオプションは、ループ内の最初のセグメントのオプションと一致する必要があります。 有界ループには、別の有界ループを含めることができます。
注
X12 の境界付きループと EDIFACT の明示的なループは同等です。
バインディングは、あいまいさを解決するためにループで使用されます。 LS/LE セグメントの要件指定子は、ループの最初のセグメントの要件指定子と一致します。 結合により、一般的に繰り返される特定のセグメントの使用に課される構造上の制限が緩和されます。 境界セグメントには、開始セグメント ID に関する制限はありません。 これにより、次の例のように、同じセグメントが境界付きループを開始し、ループの外部で使用できるようになります。
AA
LS
BB
CC
LE
BB
下位ループ (ループ内のループ) を使用できます。 境界付きループがループ内で入れ子になっている場合、内部ループは外側のループと同じ序数位置から開始できません。 内側の境界付きループは、即時外部ループの前に終了する必要があります。
トランザクション セット内の各境界ループには、1 ~ 4 桁の大文字または数字の一意に定義された <loop_id> 値が必要です。 対応する LS セグメントと LE セグメントには、同じ一意の <loop_id> 値が含まれていることをお勧めします。 <loop_id>データ要素は、"標準" データ要素として処理され、データ型、最小/最大長、オプションなどについて検証されます。LS と LE をまたがるクロスセグメント検証は実行されません。BizTalk Server では、LS セグメントと LE セグメントが存在し、それ以外は存在しない場合、あいまいさの解決が検証されます。 データ要素ルール違反の場合、トランザクション セットはエラーで受け入れられ、BizTalk Server は AK501=E と ACK の AK2/AK3 の適切な評価を返します。
また、LS/LE セグメントのペアリングが強制されていることも必要です。 不一致が発生した場合、固有のあいまいさの解決の問題によりトランザクション セットが拒否され、イベント ビューアーと 997 ACK で AK501 = E と AK502 = 5 が返されます。 LS/LE セグメントのいずれかまたは両方が欠落しているが、トランザクション セットがあいまいでない場合、トランザクション セットはエラーで受け入れられ、AK501=E および AK502 = 5 が返されます。
LS/LE ペアは、オプションでも必須でもかまいません。 ただし、ペアが反復可能な親ループに含まれている場合を除き、ペアを反復可能にすることはできません。 どちらの場合も、LS/LE ペアの両方の MaxOccurs を 1 にできますが、1 より大きくすることはできません。これはスキーマ検証で適用されます。
EDI 逆アセンブラーと EDI アセンブラーは、LS セグメントと LE セグメントを処理します。 解析中に、逆アセンブラーは LS セグメントと LE セグメントの XML ノードを作成し、セグメントを検証します。 シリアル化中に、アセンブラーは XML ノードから LS セグメントと LE セグメントを作成し、それらを検証します。 予想される LS または LE セグメントがない場合、トランザクション・セットは、AK501 = E および AK502 = 5 で中断/拒否されます。 LS/LE セグメントが対応するデータ要素なしで存在し、EDI 検証が有効になっている場合、トランザクション セットはエラーで受け入れられ、AK501 = E および AK502 = 5 がイベント ビューアーと 997 ACK で報告されます。