Formaterkennung für XML, DIALECT

Übersicht

Das Sammeln von initialen Informationen (sogenannte Formaterkennung) wird bei Edifacts automatisch durchgeführt.

Die Formaterkennung der XML-Dateien wird standardmäßig in der Extension DIALECT konfiguriert.

Einrichtung

Beispiel der Extension DIALECT:

#Alle bekannten XML-Dialekte (Arten), mit Komma getrennt
xml.dialect=IDOCXML,AUT

#Den SAX-Parser für höhere Performance nutzen
xml..useParser=CEP

#Erkennung für IDOCXML
xml.dialect.IDOCXML.id=<EDI_DC40 SEGMENT=\"1\">
#Erkennung für AUT
xml.dialect.AUT.id=<Cancellation

#Über den Xml-Tag mit dem Namen IDOCTYP wird die Unterart bestimmt (IDOC Basistyp)
xml.IDOCXML.type2=IDOCTYP

#AUT hat nur eine Unterart, sie wird fest auf "INVOIC_CANC_AUT" gesetzt.
xml.AUT.type2="INVOIC_CANC_AUT"

#/IDXGC/APERAK_02
xml./IDXGC/APERAK_02.type="APERAK"
xml./IDXGC/APERAK_02.version=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/ASSOCIATION_ASSIGNED_CODE
xml./IDXGC/APERAK_02.referenceNumber=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/INTERCHANGE_CONTROL_REFERENCE
xml./IDXGC/APERAK_02.senderName=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/_-IDXGC_-E1_NAD_03[PARTY_FUNCTION_CODE_QUALIFIER='MS']/NAME_AND_ADDRESS_DESCRIPTION_1
xml./IDXGC/APERAK_02.sender=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/INTERCHANGE_SENDER_IDENT
xml./IDXGC/APERAK_02.partnerName=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/_-IDXGC_-E1_NAD_03[PARTY_FUNCTION_CODE_QUALIFIER='MR']/NAME_AND_ADDRESS_DESCRIPTION_1
xml./IDXGC/APERAK_02.partner=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/INTERCHANGE_RECIPIENT_IDENT
xml./IDXGC/APERAK_02.alternativeId=/_-IDXGC_-APERAK_02/IDOC/EDI_DC40/DOCNUM
xml./IDXGC/APERAK_02.additional=Date;UtilRef
xml./IDXGC/APERAK_02.Date=/_-IDXGC_-APERAK_02/IDOC/EDI_DC40/CREDAT
xml./IDXGC/APERAK_02.UtilRef=""

#INVOIC CANCELLATION AUT
xml.INVOIC_CANC_AUT.type="INVOIC_CANCEL"
xml.INVOIC_CANC_AUT.version=/Invoice/@SchemaVersion
xml.INVOIC_CANC_AUT.referenceNumber=/Cancellation/InvoiceNumber
xml.INVOIC_CANC_AUT.partnerName=""
xml.INVOIC_CANC_AUT.partner=/Cancellation/RoutingHeader/Receiver/MessageAddress
xml.INVOIC_CANC_AUT.senderName=/Cancellation/Supplier/NameAddress/Name/Name1
xml.INVOIC_CANC_AUT.sender=/Cancellation/RoutingHeader/Sender/MessageAddress
xml.INVOIC_CANC_AUT.alternativeId=""
xml.INVOIC_CANC_AUT.additional=Date;UtilRef
xml.INVOIC_CANC_AUT.Date=""
xml.INVOIC_CANC_AUT.UtilRef=""

Erklärung des Beispiels

Es können kommagetrennt mehrere Arten (Dialekte) von XML definiert werden, in der Eigenschaft xml.dialect

xml.dialect=IDOCXML,AUT

Mit xml..useParser=CEP wird der hochperformante SAX-Parser verwendet.

Pro Dialekt wird angegeben, wie diese Xmls erkannt werden sollen. Als Wert soll ein Ausschnitt aus der Xml angegeben werden, der in allen Xmls dieser Art vorkommt (aber nicht in anderen Dialekts)

xml.dialect.IDOCXML.id=<EDI_DC40 SEGMENT=\"1\">
xml.dialect.AUT.id=<Cancellation>

Wenn ein Dialekt mehrere Unterarten hat (z. B. Basistypen von Idocs), können diese Arten anhand eines in der Xml vorhandenen Tags erkannt. Der Tag wird angegeben über

xml.IDOCXML.type2=IDOCTYP

Wenn das Xml-Dialect nur eine Unterart besitzt, wird der Name in Anführungszeichen genommen:

xml.AUT.type2="INVOIC_CANC_AUT"

Im nächsten Block wird pro Unterart konfiguriert, wie die benötigten Informationen aus der Xml ausgelesen werden. Die Stelle wird in einem Xpath-Ausdruck angegeben. Erforderliche Informationen sind type, version, referenceNumber, sender, partner.

Es ist außerdem möglich, zusätzliche Informationen aus der Xml auszulesen um während der Nachrichtenverarbeitung darauf zuzugreifen. Dies geschieht über die Konfiguration im Schlüssel xml.<Untertyp>.additional. Als Wert können Variablennamen festgelegt werden (getrennt mit Semikolon). Jede Variable wird danach einzeln konfiguriert:

xml./IDXGC/UTILMD_02.additional=Date;Category;Provider
xml./IDXGC/UTILMD_02.Date=/_-IDXGC_-UTILMD_02/IDOC/EDI_DC40/CREDAT
xml./IDXGC/UTILMD_02.Category=/_-IDXGC_-UTILMD_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/_-IDXGC_-E1_BGM_02/DOCUMENT_NAME_CODE
xml./IDXGC/UTILMD_02.Provider="NLI"

Während der Nachrichtenverarbeitung kann darauf zum Beispiel über den dynamischen Ausdruck ${template(&(this.FORMAT.attributes.Category))} zugegriffen werden.

Generieren einer neuen Referenznummer

Falls die Xml keine Referenznummer enthält, kann sie zufällig generiert werden. Dazu muss der Wert der Eigenschaft referenceNumber auf $GENERATE_RANDOM$ gesetzt werden:

xml./IDXGC/APERAK_02.referenceNumber="$GENERATE_RANDOM$"

Alternative zur DIALECT

Die Pfad-Ausdrücke in DIALECT erlauben nur grundlegende XPath-Funktionalität. Komplett wird XPAth in der Formaterkennung XPathAnalyzer unterstützt. Sieh dazu die Dokumentation XPathAnalyzer

View Me   Edit Me