LandrixXml 0.3.0: XML, XML Schema und Schematron für Delphi und Free Pascal

Zur Vorstellung von Komponenten und Units für Lazarus
Antworten
sh17
Beiträge: 25
Registriert: Mo 29. Jun 2026, 07:02
Kontaktdaten:

LandrixXml 0.3.0: XML, XML Schema und Schematron für Delphi und Free Pascal

Beitrag von sh17 »

LandrixXml ist eine quelloffene XML-Bibliothek für Delphi 6 bis Delphi 13 und Free Pascal 3.2+. Sie steht unter der MIT-Lizenz und braucht keine Abhängigkeiten, nur SysUtils, Classes und Contnrs. Version 0.3.0 bringt native XML-Schema-Validierung, XPath 2.0 und Schematron. Die Ergebnisse stimmen mit denen der Validatoren überein, die die Behörden einsetzen. Genau das braucht man für E-Rechnungen: XRechnung, ZUGFeRD/Factur-X, Peppol. Eine Java-Laufzeit, eine DLL oder MSXML ist nicht nötig.

Repository: https://github.com/landrix/LandrixXML-for-Pascal

Was sie kann

XML-Grundlagen, eine Codebasis von Delphi 6 bis 13 und Free Pascal
  • Pull-Reader für große Dateien, Streaming-Writer, DOM mit gemischtem Inhalt (GAEB-Langtexte), Zeile und Spalte je Knoten.
  • Striktes XML 1.0 mit Namespaces. Jeder Fehler hat Fehlercode, Zeile, Spalte und Byte-Offset.
  • Eingaben: UTF-8, UTF-16, ISO-8859-1/-15, Windows-1252 und US-ASCII.
  • Sicher voreingestellt: keine DTD-Verarbeitung, keine Expansion von Entities aus einer DTD, kein Netzwerkzugriff, eine Tiefenbegrenzung.
  • Gebietsschema-unabhängige Umwandlungen für xs:decimal (Currency, Double), Datum und Uhrzeit sowie die CII-Datumsformate.
  • Schnell: 47 MB liest der Pull-Reader in 0,3 s, ins DOM lädt sie die Bibliothek in 1,1 s (Delphi 13 Win64).
XML-Schema-1.0-Validierung
  • Include, Import, Redefine, Identitätsbedingungen, xsi:type, xsi:nil, Substitutionsgruppen und Wildcards.
  • Sie verhält sich wie Xerces in der Java-Laufzeit, der Validator hinter dem KoSIT-Validator und Mustang: gleiches Urteil, gleiche Fehlercodes (cvc-...), gleiche Meldungen, gleiche Reihenfolge. Die wenigen Stellen, an denen Xerces von der Spezifikation abweicht, übernimmt sie bewusst; sie stehen in der README.
  • W3C XML Schema Test Suite: 39.225 von 39.336 anwendbaren Tests bestanden.
XPath 2.0
  • W3C-Testsuite QT3: 15.125 von 15.149 anwendbaren XPath-2.0-Fällen bestanden (99,8 %).
  • Zwei Profile: streng nach Spezifikation oder genau so, wie Saxon HE die XPath-2.0-Regelwerke im KoSIT-Validator ausführt.
  • Exakte Dezimalarithmetik und xs:double in Software. Die Ergebnisse sind auf jedem Compiler und jeder CPU gleich, auch Summen in Rechnungen.
Schematron
  • Lädt ISO-Schematron (.sch) direkt, ohne XSLT-Schritt, und schreibt SVRL.
  • EN16931, XRechnung, Peppol BIS und Factur-X/ZUGFeRD liefern dieselben Ergebnisse wie der KoSIT-Validator mit Saxon. In der offiziellen KoSIT-Testsuite stimmen alle 86 Rechnungen überein, Meldung für Meldung.
  • Schnell genug für die Stapelverarbeitung: Die EN16931-UBL-Regeln prüfen eine der öffentlichen Beispielrechnungen in etwa 33 ms (Free Pascal, Apple M2).
Getestet auf 15 Toolchains
  • Delphi 6, 7 und 13 (Win32/Win64, mit und ohne Bereichsprüfung), Delphi 13 macOS ARM64 (nur Kompilierung).
  • Free Pascal 3.2.2, 3.2.4 und 3.3.1 unter Windows (x86, x64, ARM64), Linux und macOS (Apple Silicon).
  • CI bei jedem Commit; W3C-XML-Konformitätssuite, Fuzzing gegen expat, Round Trips über Writer und DOM.
Kleines Beispiel

Code: Alles auswählen

Schema := LandrixXmlXsdLoadSchema('invoice.xsd');
Validator := TLandrixXmlXsdValidator.Create(Schema);
if not Validator.ValidateFile('invoice.xml') then
  for I := 0 to Validator.ErrorCount - 1 do
    WriteLn(Validator.Errors[I].Line, ': ', Validator.Errors[I].Message);
Weitere Beispiele (Reader, Writer, DOM, XPath, Schematron) stehen in der README und in examples/LandrixXmlExamples.dpr. Die CI kompiliert und startet jedes davon.

Was als Nächstes kommt

0.3.0 ist ein 0.x-Release: Die API kann sich bis 1.0 noch in Details ändern. Geplant oder in Prüfung:
  • Schnellere Codelisten-Prüfungen. Factur-X prüft seine Codelisten mit linearen Suchen. Ein Index für solche Abfragen ist der nächste Schritt bei der Laufzeit.
  • Mehr XPath und Schematron. XPath 3.x, Schematron 2025 und die restlichen QT3-Fälle, über das hinaus, was die E-Rechnungs-Regelwerke brauchen. Das ist noch zu entscheiden.
  • Auf dem Weg zu 1.0: die API mit Rückmeldungen aus echten Projekten stabilisieren.
Rückmeldungen, Fehlerberichte und echte Dateien, an denen etwas scheitert, sind als GitHub-Issues willkommen. Sicherheitsprobleme bitte vertraulich melden (siehe SECURITY.md im Repository), und bitte nie echte Rechnungen mit personenbezogenen Daten anhängen.

Antworten