Elemento strutturale dei segmenti EDI
Il segmento contiene uno o più elementi di dati e rappresenta un'unità intermedia di informazioni nel messaggio. Ciascun segmento inizia con un ID segmento dati composto da tre caratteri e finisce con un carattere di terminazione (per impostazione predefinita, il carattere di apostrofo (')). Gli elementi dati contenuti nel segmento sono separati per mezzo di separatori. Per impostazione predefinita, il separatore di elementi dati è il segno più (+). Un segmento viene classificato come Obbligatorio o Facoltativo. È possibile configurare i separatori per gli interscambi in uscita negli accordi tra due trading partner oppure come parte dell'accordo di fallback per i trading partner.
Annidamento
I segmenti possono essere raggruppati in una relazione gerarchica denominata annidamento. Esistono due tipi distinti di annidamento: esplicito e implicito. In un singolo interscambio è possibile utilizzare un solo tipo di nidificazione.
Nella nidificazione esplicita la nidificazione del ciclo è indicata in modo esplicito. Quando si utilizza la nidificazione esplicita, il primo elemento dati componente nel tag del segmento è il codice del segmento, seguito dagli elementi dati componenti condizionali che indicano sia il livello sia l'incidenza di ripetizione del segmento. Il numero di elementi dati componente utilizzati a questo scopo dipende dal livello gerarchico in cui il segmento si trova nella struttura del messaggio. Se il segmento deve trovarsi al livello uno, verrà utilizzato l'elemento dati componente che segue immediatamente il codice del segmento. Se il segmento deve trovarsi al livello due, verranno utilizzati l'elemento dati componente che segue immediatamente il codice del segmento e l'elemento dati componente successivo. Se il segmento deve trovarsi al livello tre, verranno utilizzati i tre elementi dati componente che seguono immediatamente il codice del segmento. Le pipeline non sono in grado di eseguire la verifica strutturale mediante il confronto dei dati con la gerarchia.
Nella nidificazione implicita, viene seguito rigorosamente l'ordine dei segmenti specificato nella struttura del messaggio. La relazione di nidificazione tra i segmenti è implicitamente evidente e non sono necessarie ulteriori indicazioni per procedere all'elaborazione.
Cicli
Uno o più segmenti possono ripetere come ciclo all'interno di un set di transazioni. Esistono due tipi distinti di cicli: senza vincoli e senza limiti.
Cicli non vincolati
In un ciclo non vincolato non esiste un segmento di identificazione univoco che contrassegna l'inizio e il termine del ciclo. Un ciclo non vincolato si ripete in base a un conteggio: se il conteggio non ha un valore, il ciclo si ripeterà due volte. Ciascun segmento nel ciclo può ricorrere una sola volta in un ordine specifico.
L'inizio di un ciclo non vincolato viene stabilito da un primo elemento dati univoco. Il primo elemento può comparire solo una volta in ciascuna ricorrenza. I cicli non vincolati possono essere nidificati in altri cicli: in tal caso, il ciclo non vincolato più interno non può iniziare in corrispondenza della medesima posizione ordinale di un qualsiasi ciclo esterno e non può iniziare con lo stesso ID segmento di alcun ciclo esterno. Il ciclo nidificato non può contenere segmenti che siano il segmento iniziale di qualsiasi ciclo esterno nella medesima struttura di nidificazione.
Cicli vincolati
Un ciclo vincolato inizia con il segmento predefinito LS (Loop Start) e termina con il segmento predefinito LE (Loop End). Il carattere facoltativo del segmento LS deve corrispondere a quello del primo segmento nel ciclo. Un ciclo vincolato può contenerne un altro.
Nota
Un ciclo vincolato in X12 e un ciclo esplicito in EDIFACT sono equivalenti.
In un ciclo, il vincolo viene utilizzato per risolvere le ambiguità. L'indicatore dei requisiti nei segmenti LS/LE corrisponde all'indicatore dei requisiti del primo segmento del ciclo. Il vincolo mitiga le limitazioni strutturali imposte sull'utilizzo di determinati segmenti comunemente ripetuti. I segmenti delimitati non hanno restrizioni rispetto all'ID segmento iniziale. Ciò consente allo stesso segmento di avviare un ciclo delimitato e di essere usato all'esterno del ciclo, come nell'esempio seguente:
AA
LS
BB
CC
LE
BB
I cicli subordinati (cicli all'interno di cicli) sono consentiti. Se i cicli vincolati sono nidificati all'interno di altri cicli, il ciclo più interno non può iniziare in corrispondenza della medesima posizione ordinale di qualsiasi altro ciclo esterno. Il ciclo vincolato più interno deve terminare prima del ciclo immediatamente esterno.
Ogni ciclo delimitato all'interno di un set di transazioni deve avere un valore definito <in modo univoco loop_id> di una a quattro lettere maiuscole o cifre numeriche. È consigliabile che i segmenti LS e LE corrispondenti contengano lo stesso valore univoco <loop_id> . L'elemento <dati loop_id> verrà elaborato come elemento dati "regolare" e convalidato per il tipo di dati, la lunghezza minima/massima, la facoltatività e così via. La convalida tra segmenti (tra LS e LE) non verrà eseguita. BizTalk Server verificherà la risoluzione dell'ambiguità tramite la presenza del segmento LS e LE e niente altro. In caso di violazione delle regole degli elementi dati, il set di transazioni viene accettato con errori, e BizTalk Server restituisce AK501=E e la valutazione appropriata in AK2/AK3 nell'ACK.
È inoltre necessario imporre l'abbinamento dei segmenti LS/LE. In caso di mancata corrispondenza, il set di transazioni viene rifiutato a causa di un inerente problema di risoluzione delle ambiguità e nel Visualizzatore eventi e nell'ACK 997 vengono restituiti AK501 = E e AK502 = 5. Quando mancano entrambi i segmenti LS/LE, ma il set di transazioni non è ambiguo, il set di transazioni verrà accettato con errori e AK501=E e AK502 = 5 restituito.
L'abbinamento di segmenti LS/LE può essere facoltativo oppure obbligatorio: tuttavia, a meno che sia contenuto in un ciclo padre ripetibile, l'abbinamento non potrà mai essere ripetibile. In ogni caso, per una coppia di segmenti LS/LE, MaxOccurs può essere uguale a 1, ma non maggiore di 1. Questa condizione può essere imposta nella convalida dello schema.
Il Disassembler EDI e l'Assembler EDI gestiscono i segmenti LS ed LE. Durante l'analisi, il Disassembler crea nodi XML per i segmenti LS ed LE e convalida i segmenti. Durante la serializzazione, l'Assembler crea i segmenti LS ed LE a partire dai nodi XML e li convalida. Se manca un segmento LS o LE previsto, il set di transazioni viene sospeso/rifiutato con un AK501 = E e AK502 = 5. Se i segmenti LS/LE sono presenti senza elemento dati corrispondente e la convalida EDI è abilitata, il set di transazioni viene accettato con errori e AK501 = E e AK502 = 5 vengono segnalati nella Visualizzatore eventi e nel 997 ACK.