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).
- 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.
- 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.
- 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).
- 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.
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);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.