L'analisi di EDIFACT non è in realtà così complicata. Basta dividere i caratteri di sytax: prima a '
per ottenere i segmenti, che a +
per ottenere elementi di dati di tali segmenti e a :
per ottenere i singoli componenti. Hai bisogno di prendersi cura dei caratteri separati di seperator, naturalmente. I caratteri utilizzati qui sono solo predefiniti, possono essere modificati all'inizio del messaggio dal segmento UNA facoltativo. In realtà lo wikipedia article su EDIFACT offre un'introduzione piuttosto buona (ma breve) a questo. E il formato è documentato con dettagli sul UN's UNECE site (sì, è molto difficile da leggere).
La parte difficile è ottenere le informazioni da questo e all'interno dell'applicazione (e verificando che sia valido, non creare messaggi di errore validi). Se hai davvero intenzione di scrivere un parser comlete dal nulla per tutto ciò che in qualsiasi lingua, allora: No, non c'è un modo semplice per farlo. Né esiste alcuna altra rappresentazione flessibile dei dati. Che è un compito difficile e lo sarà sempre.
Ma ecco un'idea: se siete in XML tanto (o qualsiasi altra "tecnologia moderna" come volete chiamarla ...). Sarebbe un compito relativamente facile scrivere un programma che converta i messaggi EDIFACT in un formato XML-EDIFACT unificato (che è una cosa piuttosto orribile e molto probabilmente mi farebbe impazzire). È possibile convertire tutti i segmenti EDIFACT in un tag XML, forse in questo modo:
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'
In XML:
<segment qualifier="ERC">
<element>
<component>A7V</component>
<component>1</component>
<component>AMD<component>
</element>
</segment>
<segment qualifier="IFT">
<element>
<component>3</component>
</element>
<element>
<component>NO MORE FLIGHTS</component>
</element>
</segment>
Quindi è possibile scatenare la potenza dei vostri strumenti XML e librerie su di esso per validare/valutare esso.
Si potrebbe anche farlo in modo più specifico, come questo:
<segment_ERC>
<element>
<component>A7V</component>
<component>1</component>
<component>AMD<component>
</element>
</segment_ERC>
<segment_IFT>
<element>
<component>3</component>
</element>
<element>
<component>NO MORE FLIGHTS</component>
</element>
</segment_IFT>
Ciò potrebbe rendere la validazione tramite XSD più facile. Ovviamente puoi ottenere tutto ciò che vuoi con questa conversazione, ma prima o poi arriveresti a un punto, nel quale dovresti mettere le informazioni sulla struttura del tuo messaggio correntemente sintetizzato nel convertitore (poiché non è banale sapere quali segmenti sono nidificati in altri segmenti che li raggruppano.Non ci sono solo UNG
, UNH
e così, ma anche alcuni gruppi di segmenti che non vedi direttamente).
Ancora, dovrai creare programmi di valutazione/schemi/whatevers specifici per i messaggi che ricevi, secondo i manuali EDIFACT che dovresti ottenere come documentazione.