EDI 段结构元素

段包含一个或多个数据元素,是消息中的中间信息单位。 每个段均以一个由三个字符组成的数据段标识符开头,以段终止符(默认情况下为撇号 ('))结尾。 段内的数据元素由数据元素分隔符分隔。 默认情况下,数据元素分隔符为加号 (+)。 段可分为两类:必需段和可选段。 传出交换的分隔符可在两贸易合作伙伴间的协议中设置,也可设置为后备贸易合作伙伴协议的一部分。

嵌套

段可以在称为 嵌套的分层关系中分组。 嵌套有两种不同类型:显式嵌套和隐式嵌套。 在任何一个交换内,只能使用一种类型的嵌套。

  • 显式嵌套显式指示循环是嵌套的。 使用显式嵌套时,段标记中的第一个组件数据元素将为段代码。 段代码后将为表示段的级别和重复发生率的条件组件数据元素。 用于此目的的组件数据元素的数量由段在消息结构中出现的层级决定。 如果段将出现在级别一,则会使用紧跟在段代码之后的组件数据元素。 如果段将出现在级别二,则会使用紧跟在段代码之后的组件数据元素和下一个组件数据元素。 如果段将出现在级别三,则会使用段代码之后的三个组件数据元素。 管道无法执行将数据与层次结构比较的结构验证。

  • 在隐式嵌套中,将严格遵循在消息结构中指定的段的顺序。 段之间的嵌套关系是隐式的,处理时不需要进一步的指示。

循环

一个或多个段可以作为事务集中的 循环 重复。 有两种不同类型的循环:无限制循环和有界循环。

未绑定循环

未绑定循环不具有标记循环的开头和结尾的唯一标识段。 未绑定循环按照计数进行重复。 如果计数没有值,则循环将重复两次。 循环中的每个段只能按指定的顺序出现一次。

未绑定循环以唯一的第一个数据元素开头。 在每次出现中,第一个元素可出现一次且仅出现一次。 未绑定循环可在循环内进行嵌套;如果在循环内进行嵌套,则内部未绑定循环不能在与任何外部循环相同的序号位置处开始,也不能以与任何外部循环相同的段 ID 开头。 嵌套循环包含的段不能同时为同一嵌套结构中任何外部循环的起始段。

绑定循环

绑定循环以预定义的段 LS(循环开头)开头,以预定义的段 LE(循环结束)结束。 LS 段的可选性必须与循环中第一个段的可选性匹配。 一个绑定循环可以包含另一个绑定循环。

注意

X12 中的绑定循环与 EDIFACT 中的显式循环等价。

在循环中使用绑定是为了解决不明确的问题。 LS/LE 段上的要求指示符与循环的第一个段的要求指示符相匹配。 绑定会放松对某些经常重复段的用法的结构限制。 绑定段对起始段 ID 没有限制。 这样可使同一段在作为一个绑定循环的开头的同时在该循环之外使用,如下例所示:

AA  
LS  
BB  
CC  
LE  
BB  

允许存在从属循环(循环内的循环)。 如果绑定循环在循环内进行嵌套,则内部循环不能在与任何外部循环相同的序号位置处开始。 内部绑定循环必须在与之相邻的外部循环之前结束。

事务集中的每个边界循环必须具有唯一定义的 <loop_id> 值,即 1 到 4 个大写字母或数字。 建议相应的 LS 和 LE 段包含相同的唯 <一loop_id> 值。 <loop_id>数据元素将作为“常规”数据元素进行处理,并验证数据类型、最小/最大长度、可选性等。不会跨 LS 和 LE) 执行跨段验证 (。BizTalk Server将通过 LS 和 LE 段的存在来验证歧义解析,而没有别的。 在数据元素规则发生冲突的情况下,将接受存在错误的事务集,且 BizTalk Server 在确认中返回 AK501=E 和 AK2/AK3 的相应评估。

还要求强制 LS/LE 段配对。 在不匹配的情况下,由于存在内在的模糊解析问题而拒绝事务集,且在事件查看器和 997 确认中返回 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 验证,则接受事务集并显示错误,事件查看器和 997 ACK 中报告 AK501 = E 和 AK502 = 5。