세그먼트는 하나 이상의 데이터 요소를 포함하며 메시지의 중간 정보 단위입니다. 각 세그먼트는 3자 데이터 세그먼트 식별자로 시작하고 세그먼트 종결자(기본적으로 아포스트로피('))로 끝납니다. 세그먼트 내의 데이터 요소는 데이터 요소 구분 기호로 구분됩니다. 데이터 요소 구분 기호는 기본적으로 더하기 기호(+)입니다. 세그먼트는 필수 또는 선택 사항으로 분류됩니다. 나가는 교환에 대한 구분 기호는 두 거래 업체 간의 계약 또는 대체 거래 업체 계약의 일부로 설정할 수 있습니다.
중첩
세그먼트는 중첩이라는 계층적 관계에서 그룹화될 수 있습니다. 두 가지 유형의 중첩이 있습니다. 명시적 중첩과 암시적 중첩입니다. 하나의 교환 내에서는 한 가지 유형의 중첩만 사용할 수 있습니다.
명시적 중첩은 루프가 중첩되었음을 명시적으로 나타냅니다. 명시적 중첩을 사용하는 경우 세그먼트 태그의 첫 번째 구성 요소 데이터 요소는 세그먼트 코드가 됩니다. 그 뒤에는 세그먼트의 반복 발생률과 수준을 나타내는 조건부 구성 요소 데이터 요소가 뒤따릅니다. 이 용도에 사용되는 구성 요소 데이터 요소의 수는 세그먼트가 메시지 구조에 표시되는 계층 수준에 따라 달라집니다. 세그먼트가 수준 1에 표시될 경우 세그먼트 코드 바로 다음의 구성 요소 데이터 요소가 사용됩니다. 세그먼트가 수준 2에 표시될 경우 세그먼트 코드 바로 다음의 구성 요소 데이터 요소와 다음 구성 요소 데이터 요소가 모두 사용됩니다. 세그먼트가 수준 3에 표시될 경우 세그먼트 코드 다음의 세 가지 구성 요소 데이터 요소가 사용됩니다. 파이프라인은 데이터를 계층 구조와 비교하는 구조적 확인을 수행할 수 없습니다.
암시적 중첩에서 메시지 구조에 지정된 세그먼트의 순서는 엄격하게 따릅니다. 세그먼트 간의 중첩 관계는 암시적으로 분명하며 처리에 더 이상 표시가 필요하지 않습니다.
루프
하나 이상의 세그먼트가 트랜잭션 집합 내에서 루프 로 반복될 수 있습니다. 바인딩되지 않은 루프와 바인딩된 루프의 두 가지 유형이 있습니다.
바인딩되지 않은 루프
바인딩되지 않은 루프에는 루프의 시작과 끝을 표시하는 고유 식별 세그먼트가 없습니다. 바인딩되지 않은 루프는 개수에 따라 반복됩니다. 개수에 값이 없으면 루프가 두 번 반복됩니다. 루프의 각 세그먼트는 지정된 순서로 한 번만 발생할 수 있습니다.
바인딩되지 않은 루프의 시작은 고유한 첫 번째 데이터 요소에 의해 설정됩니다. 첫 번째 요소는 각 항목에서 한 번만 나타날 수 있습니다. 바인딩되지 않은 루프는 루프 내에 중첩될 수 있습니다. 그렇다면 내부 언바운드 루프는 외부 루프와 동일한 서수 위치에서 시작할 수 없으며 외부 루프와 동일한 세그먼트 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 세그먼트의 페어링이 적용되어야 합니다. 일치하지 않는 경우 내재된 모호성 해결 문제로 인해 트랜잭션 집합이 거부되고 AK501 = E 및 AK502 = 5가 이벤트 뷰어 및 997 ACK에 반환됩니다. 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에 보고됩니다.