EDIFACT

EDIFACT-kielioppi eli syntaksi on YK:n Euroopan talouskomission alaisen UN/CEFACT:in (engl. Centre for Trade Facilitation and Electronic Business) kehittämä rakenteinen tiedon esitystapa. EDIFACT on lyhenne sanoista Electronic Data Interchange for Administration, Commerce and Transport. Tämä tiedon esitystapa kielioppi luotiin 1980-luvun loppupuolella helpottamaan yritysten ja organisaatioiden välistä tiedonsiirtoa niiden välittäessä kauppatapahtuman asiakirjoja keskenään elektronisesti. Ennen EDIFACT-kieliopin julkaisemista vuonna 1987 ei ollut yleistä esitystapaa, jolla yritykset ja organisaatiot olisivat voineet siirtää tietoja keskenään. Kun EDIFACT-kielioppi sitten julkaistiin, helpotti se huomattavasti sitä kehitystyötä, jota organisaatiot tekivät nopeuttaakseen kauppatapahtuman tiedon siirtämistä toistensa välillä. EDIFACT-kielioppi antoi yrityksille ja organisaatiolle ohjeet siitä, kuinka kauppatapahtuman asiakirjan tiedot on esitettävä.
EDIFACT-kielioppi koostuu sanomakuvauksista eli sanomista, jotka sisältävät ohjeet siitä, kuinka tietyn kauppatapahtuman asiakirjan tiedot tulee esittää siirrettäessä niitä elektronisesti. Sanomaksi nimitetään myös sitä tiedostoa tai tiedoston osaa, joka sisältää kauppatapahtuman tiedot sanomakuvauksen esittämässä muodossa. Yhteen siirrettävään tiedostoon voi siis sisältyä useita sanomia tai siinä voi olla ainoastaan yksi sanoma. Sanoma voi siis olla tilaus, lasku tai vaikkapa rahtikirja.
Alun perin EDIFACT-sanomia luotiin ainoastaan kaupan, teollisuuden ja kuljetuksen alueella. Kun EDIFACT-kielioppi julkaistiin vuonna 1987, julkaistiin myös kolme sanomaa, jotka olivat ORDERS (Order eli Tilaus), INVOIC (Invoice eli Lasku) ja DESADV (Despatch Advice eli Lähetysluettelo). Näistä kolmesta ensimmäisenä julkaistusta sanomasta on sanomien määrä kasvanut kaikkiaan 195:en. Sanomia on kaupan, teollisuuden ja kuljetuksen toimialojen lisäksi nykyisin monille muillekin aloille kuten pankki, tullaus, matkailuala, terveydenhuolto ja sosiaalitoimi. Kahdesti vuodessa UN/CEFACT julkaisee hakemiston, jossa mahdolliset uudet sanomat on esitetty sekä aiemmin julkaissut sanomat on esitetty mahdollisine muutoksineen.
Sanoma koostuu elementeistä (element), jonka arvona on jokin tietty tieto, kuten kadun nimi tai tuotteen toimitettu määrä. Useat EDIFACT-sanoman elementit ovat myös koodiarvoisia. Jokaiselle tällaiselle elementille on EDIFACT-kieliopissa annettu oma nimi, kuten esimerkiksi:
     3042 Street and number or post office box identifier
jolla esitetään katuosoite tai postilaatikon numero. Jokaiselle elementille on annettu nelinumeroinen tunnus. Elementille määritellään lisäksi muoto ja pituus. Edellä esitetyn elementin muoto ja pituus on  an..35, mikä tarkoittaa sitä, että elementin arvona on merkkitietoa ja maksimissaan 35 merkkiä. Elementti voi saada myös vain numeerisia arvoja, jolloin sen muoto ja arvo esitetään muodossa n..N, missä n ilmoittaa, että elementti saa vain numeerisia arvoja, ja N ilmoittaa elementin maksimaalisen merkkimäärän. Jos muoto ja pituus on esitetty muodossa anN, on kyseessä merkkitietoa sisältävä elementti, jonka pituus on vakiosti N.
Elementit voivat esiintyä yksinään, jolloin ne sanomakuvauksessa esitetään isoilla kirjaimilla kuten esimerkiksi 
     3035 PARTY FUNCTION CODE QUALIFIER,
jolla esitetään koodiarvoisena osapuolen rooli kyseisessä sanomassa. Elementtejä voidaan koota myös loogisiksi kokonaisuuksiksi, jolloin ne muodostavat koostetietoja (composite data element). Tällainen on esimerkiksi kolmesta elementistä koostuva koostetieto, jolla ilmaistaan ajanhetken rooli, itse ajanhetki ja sen muoto:
     C507 DATE/TIME/PERIOD
     2005  Date or time or period function code qualifier  M      an..3
     2380  Date or time or period text                     C      an..35
     2379  Date or time or period format code              C      an..3
Koostetiedon tunnus on muotoa CNNN, missä NNN on kolminumeroinen tunnus ja C tarkoittaa koostetietoa.  Koostetiedossa elementit voivat olla pakollisia, jolloin niiden nimen perässä on kirjain M (mandatory) tai valinnaisia, jolloin niiden perässä on kirjain C (conditional). Pakollisten elementtien on saatava aina arvo, kun koostetieto esiintyy. Valinnaiset elementit voivat saada arvon tai ne voivat olla saamatta sitä.
Yksittäiset elementit ja koostetiedot muodostavat segmenttejä, jotka ovat loogisesti yhteenkuuluvien tietojen yhdistelmiä. Segmentin tunnus on kolmikirjaiminen lyhenne segmentin varsinaisesta nimestä, kuten esimerkiksi CNT CONTROL TOTAL. Segmentti on kokonaisuudessaan muotoa:
    CNT CONTROL TOTAL
    
    C270 CONTROL                                    M
    6069  Control total type code qualifier         M      an..3
    6066  Control total quantity                    M      n..18
    6411  Measurement unit code                     C      an..8
Koostetiedot voivat olla pakollisia (M) tai valinnaisia (C) segmentissä.
Segmentit muodostavat sanoman, joka on edellä esitetty kauppatapahtuman asiakirjan tietoja sisältävä tiedosto tai sen osa. 
Yksittäiset elementit ja koostetiedot erotetaan toisistaan segmentissä +-merkillä. Koostetiedon elementit erotetaan toisistaan :-merkillä. Segmentit erotetaan toisistaan '-merkillä. Jos jotain näistä erottimista käytetään varsinaisessa siirrettävässä tiedossa, vapautetaan kyseinen erotin tehtävästään asettamalla sen eteen ?-merkki. Esimerkiksi edellä esitetyllä CNT-segmentillä voidaan esittää koko lähetyksen bruttopaino sanomassa seuraavasti:
CNT+7:550:KGM'
Edellä koodi 7 ilmoittaa, että kyseessä on bruttopaino. Paino on yhteensä 550 kilogrammaa ja KGM on kilogrammaa ilmaiseva koodi.
Varsinaisten kauppatapahtuman tietoja sisältävien elementtien lisäksi liitetään sanomaan aina sanoman aloittavat ja lopettavat segmentit UNH ja UNT. UNH-segmentillä ilmoitetaan, millainen sanoma on kyseessä ja sen tunnus. Välitettävät sanomat muodostavat lähetyskerran. Tällainen lähetyskerta alkaa UNB-segmentillä ja loppuu UNZ-segmenttiin. UNB-segmentillä kerrotaan lähetyskerran tunnus, sen luontiaika, lähettäjä ja vastaanottaja. Mikäli halutaan, voidaan UNB-segmentin eteen laittaa vielä UNA-segmentti, jolla ilmaistaan käytettävät erottimet. UNA-segmentti on pakollinen, jos jostain syystä sanomissa käytetäänkin joitain muita kuin edellä esitettyjä erottimia.