Test-ValidateCxml #
ÜBERSICHT #
Validiert eine Ariba cXML-Datei (ORDER, INVOICE oder andere cXML-Typen) gegen das passende XSD-Schema.
SYNTAX #
Test-ValidateCxml [-XmlPath] <string> [-Type] <string> [-XsdRoot] <string>
BESCHREIBUNG #
Die Funktion Test-ValidateCxml prüft eine einzelne cXML-Datei anhand eines oder mehrerer XSD-Dateien. Die XSD-Dateien werden abhängig vom Nachrichtentyp (ORDER, INVOICE, DESADV oder später weitere) aus getrennten Ordnern geladen. Die Funktion kann den Nachrichtentyp automatisch anhand der Struktur der XML-Datei erkennen.
Vor der Validierung wird ein Clean-File erzeugt, dessen DOCTYPE entfernt und das in UTF8 ohne BOM abgespeichert wird. Anschliessend wird ein SchemaSet geladen, bestehend aus allen XSD-Dateien des jeweiligen Nachrichtentyps. Die XML-Datei wird gegen dieses SchemaSet validiert.
Die Funktion gibt True zurück, wenn die Datei fehlerfrei ist, ansonsten False.
Hinweis zur Erstellung der XSD-Dateien #
Die XSD-Dateien wurden automatisch aus den originalen cXML-DTD-Dateien erzeugt. Dazu wird eine Java-Runtime sowie das Trang-Modul benötigt.
Benötigte Komponenten: #
Java Runtime (Temurin): https://github.com/adoptium/temurin25-binaries/
Trang (trang.jar): https://code.google.com/archive/p/jing-trang/downloads
Vorgehensweise (Beispiel): #
DTD-Dateien in ein Arbeitsverzeichnis legen, z. B. C:\dtd.
Java und trang.jar dort installieren bzw. ablegen.
Die DTD-Dateien mit Trang in XSD umwandeln:
java -jar C:\dtd\trang.jar C:\dtd\cXML.dtd C:\dtd\cXML.xsdjava -jar C:\dtd\trang.jar C:\dtd\InvoiceDetail.dtd C:\dtd\InvoiceDetail.xsdDadurch entstehen insgesamt fünf XSD-Dateien. Diese werden anschließend in zwei Ordner aufgeteilt und dupliziert: ORDER INVOICE
Ordnerstruktur: #
- cXML.xsd gehört nur in den Ordner ORDER.
- InvoiceDetail.xsd gehört nur in den Ordner INVOICE.
- Alle übrigen XSD-Dateien werden in beide Ordner kopiert.
Damit entsteht eine Trennung zwischen ORDER- und INVOICE-Schemas, basierend auf derselben Quelle (DTD), aber mit den jeweils benötigten Hauptdateien. Das Vorgehen ist notwendig, da es ansonsten Kollisionen mit dem Namespace gibt.
PARAMETER #
-XmlPath #
Type: string
Mandatory: True
Vollständiger Pfad zur zu validierenden XML-Datei.
-Type #
Type: string
Default: 'AUTO'
OPTIONAL: Nachrichtentyp für die Validierung. Mögliche Werte:
- ORDER
- INVOICE
- DESADV
- PUNCHOUT
- AUTO (Standard)
Bei AUTO wird der Nachrichtentyp automatisch anhand des Inhalts der XML-Datei ermittelt. Falls der Nachrichtentyp nicht erkannt wird, gibt die Funktion einen Fehler zurück.
-XsdRoot #
Type: string
Wurzelpfad, unter dem sich die Unterordner für die XSD-Dateien befinden. Der Pfad muss Unterordner enthalten wie: XSD\ORDER*.xsd XSD\INVOICE*.xsd XSD\DESADV*.xsd usw.
AUSGABEN #
System.Boolean
True bei gültiger XML, ansonsten False.
BEISPIELE #
# Order mit festem Typ prüfen
Test-ValidateCxml `
-XmlPath "C:\ARIBA\ORDER\5040152674\5040152674.xml" `
-Type ORDER `
-XsdRoot "C:\ARIBA\XSD"
# Order automatisch erkennen und prüfen
Test-ValidateCxml `
-XmlPath "C:\ARIBA\ORDER\5040152674\5040152674.xml" `
-XsdRoot "C:\ARIBA\XSD"
# Invoice explizit prüfen
Test-ValidateCxml `
-XmlPath "C:\ARIBA\INVOICE\25107157\25107157.xml" `
-Type INVOICE `
-XsdRoot "C:\ARIBA\XSD"
# Invoice automatisch erkennen und prüfen
Test-ValidateCxml `
-XmlPath "C:\ARIBA\INVOICE\25107157\25107157.xml" `
-XsdRoot "C:\ARIBA\XSD"
HINWEISE #
- PowerShell 5.1 kompatibel
- UTF8 ohne BOM für Clean-Datei
- Keine Set-Content oder Out-File Encoding-Fallen
- Sicherer XmlReader ohne Endlosschleifen
- Voll modular für weitere cXML-Typen