EDIFACT

United Nations/Electronic Data Interchange for Administration, Commerce and Transport (UN/EDIFACT) is an international standard for electronic data interchange (EDI) developed for the United Nations and approved and published by UNECE, the UN Economic Commission for Europe.

In 1987, following the convergence of the UN and US/ANSI syntax proposals, the UN/EDIFACT Syntax Rules were approved as the ISO standard ISO 9735 by the International Organization for Standardization.

The EDIFACT standard provides:
 * a set of syntax rules to structure data
 * an interactive exchange protocol (I-EDI)
 * standard messages which allow multi-country and multi-industry exchange

The work of maintenance and further development of this standard is done through the United Nations Centre for Trade Facilitation and Electronic Business (UN/CEFACT) under the UN Economic Commission for Europe, in the Finance Domain working group UN CEFACT TBG5.

Example
See below for an example of an EDIFACT message used to answer a flight ticket (FRA-JFK-MIA) availability request:

The UNA segment is optional. If present, it specifies the special characters that are to be used to interpret the remainder of the message. There are six characters following  in this order:
 * component data element separator (: in this sample)
 * data element separator (+ in this sample)
 * decimal mark (. in this sample)
 * release character (? in this sample)
 * reserved, must be a space
 * segment terminator (' in this sample)

With the exception of the decimal mark (see below), the special characters in the sample UNA segment above are also the default values.

The component data element separator and data element separator are the "first level" and "second level" separators of data elements within a message segment. Referring to them as + and : for brevity, the + separates top-level or composite data elements, and : separates second-level data elements nested within composite data elements. Trailing empty (or null) data elements and their leading separators are omitted to reduce message size.

The decimal mark is used to separate the integer from the fractional part of non-integer numbers. The optional nature of the UNA segment and the initial choice of the comma (",") as the default decimal mark provide a source of common confusion. Versions 1 through 3 of the ISO 9735 syntax rules specify the comma as the default; version 4 states that the decimal mark position in the UNA segment is to be ignored and that the comma and the dot (".") may be used indifferently in numeric data values. The UNB segment indicates which version of the syntax rules is in effect.

Release character (analogous to the \ in regular expressions) is used as a prefix to remove special meaning from the separator, segment termination, and release characters when they are used as plain text ("Escape character" is the equivalent North American term).

Segment terminator indicates the end of a message segment.

Note: The line breaks after each segment in this example have been added for readability. There are typically no line breaks in EDI data.

UNH+1+PAORES:93:1:IA'- This is the message header segment which is required at the start of every message. This code specifies that the message name and version is PAORES 93 revision 1 and it was defined by the organisation IA (IATA).

- This is an "Interactive Free Text" segment containing the text "NO MORE FLIGHTS".

- This is the message trailer segment. It indicated that the message sent contains 13 segments.

Structure
EDIFACT has a hierarchical structure where the top level is referred to as an interchange, and lower levels contain multiple messages which consist of segments, which in turn consist of composites. The final iteration is an element which is derived from the United Nations Trade Data Element Directory (UNTDED); these are normalized throughout the EDIFACT standard.

A group or segment can be mandatory (M) or conditional (C) and can be specified to repeat. For example : - C99 indicates between 0 and 99 repetitions of a segment or group - M99 signifies between 1 and 99 repetitions of a segment or group

A group, like a message, is a sequence of segments or groups. The first segment or group beneath a group must be mandatory, and the group should be made conditional if the logic of the situation demands it.

|_Service String Advice             UNA  Optional |____Interchange Header             UNB  Mandatory :   |___Functional Group Header     UNG  Conditional :   :   |___Message Header          UNH  Mandatory :   :   :   |__ User Data Segments          As required :   :   |__ Message Trailer         UNT  Mandatory :   |__ Functional Group Trailer    UNE  Conditional |___ Interchange Trailer            UNZ  Mandatory