XPathAnalyzer

Mithilfe der Formaterkennung XPATH können beliebige XML-Dateien analysiert werden und ein entsprechendes FORMAT-Objekt erstellt werden.

Zur Einrichtung muss die Extension B3P_FORMAT_RECOGNITION_REGISTRY wie folgt erweitert werden:

_unknown=ebix
ebix.presentationAnalyzerClass=org.b2bbp.format.recognition.analyzer.XPathAnalyzer
ebix.formatAnalyzerClass=org.b2bbp.format.recognition.analyzer.XPathAnalyzer

Dabei sollte der Wert ebix an einer vorhandenen Zeile _unknown drangehängt werden, falls diese existiert. Das Trennzeichen muss ein Semikolon sein.

Um die eigentliche Formaterkennung zu konfigurieren muss eine Extension mit Namen XPATH_ANALYZER angelegt werden.

Die Extension hat den folgenden Aufbau:

FORMAT_TYPES=<FORMAT_TYPE>;<FORMAT_TYPE2>,…

<FORMAT_TYPE>.pattern=<Regulärer Ausdruck der das Nachrichtenformat erkennt>
<FORMAT_TYPE>.xpaths=<xpathName1,xpathName2,...xpathNamen>
<FORMAT_TYPE>.xpathName1=<Feld Name vom Format Object>=<XPath Asdruck>
<FORMAT_TYPE2>.pattern=<Regulärer Ausdruck der das Nachrichtenformat erkennt>
<FORMAT_TYPE2>.xpaths=<xpathName1,xpathName2,...xpathNamen>
<FORMAT_TYPE2>.xpathName1=<Feld Name vom Format Object>=<XPath Asdruck>

Der Name für <FORMAT_TYPE> kann frei gewählt werden.

Die Formaterkennung geht die angegebenen Formate der Reihe nach durch und prüft, ob der reguläre Ausdruck einen Treffer hat. Falls ja werden alle unter xpaths angegebenen XPath-Ausdrücke ausgewertet und dem entsprechenden Feld des Formatobjektes zugewiesen. Die Suche nach einem passenden Format wird nach dem ersten Treffer beendet.

Beispiel Extension:

FORMAT_TYPES=ACK;EBIX;IDOC

EBIX.pattern=(?s)(.*?)schemaLocation="http://www.strom.ch
EBIX.xpaths=SENDER;RECEIVER;REFERENCENUMBER;FORMATIN;TYPE;VERSION
EBIX.SENDER=sender=/*/*/Sender/ID/EICID/text()
EBIX.RECEIVER=partner=/*/*/Receiver/ID/EICID/text()
EBIX.REFERENCENUMBER=referenceId=/*/*/InstanceDocument/DocumentID/text()
EBIX.FORMATIN=presentation="EBIX-XML"
EBIX.TYPE=type=substring(substring(local-name(*),1,string-length(local-name(*))-2),1,20)
EBIX.VERSION=version=substring(local-name(*),string-length(local-name(*))-1,string-length(local-name(*))-1)

ACK.pattern=(.*?)(AcknowledgementOfAcceptance_11|ModelErrorReport_11)
ACK.xpaths=SENDER;RECEIVER;REFERENCENUMBER;FORMATIN;TYPE;VERSION
ACK.SENDER=sender=/*/*/Sender/ID/EICID/text()
ACK.RECEIVER=partner=/*/*/Receiver/ID/EICID/text()
ACK.REFERENCENUMBER=referenceId=/*/InstanceDocumentReference/DocumentID/text()
ACK.FORMATIN=presentation="EBIX-XML"
ACK.TYPE=type=substring(substring(local-name(*),1,string-length(local-name(*))-2),1,20)
ACK.VERSION=version=substring(local-name(*),string-length(local-name(*))-1,string-length(local-name(*))-1)

IDOC.PATTERN=(.*?)ISU_VDEW_MSCONS
IDOC.xpaths=SENDER;RECEIVER;REFERENCENUMBER;FORMATIN;TYPE;VERSION
IDOC.SENDER=sender=/ISU_VDEW_MSCONS/IDOC/E1VDEWNAD[ACTION/text()='MS']/PARTNER/text()
IDOC.RECEIVER=partner=/ISU_VDEW_MSCONS/IDOC/E1VDEWNAD[ACTION/text()='MR']/PARTNER/text()
IDOC.REFERENCENUMBER=referenceId=/ISU_VDEW_MSCONS/IDOC/EDI_DC40/DOCNUM/text()
IDOC.FORMATIN=presentation="IDOC"
IDOC.TYPE=type=VDEW_MSCONS
IDOC.VERSION=version=1.6
View Me   Edit Me