Skip to content

PureXML 0.4.0

Choose a tag to compare

@mihaelamj mihaelamj released this 25 Jun 03:48
· 76 commits to main since this release
f561ddb

Performance across all three benchmarked operations plus one XSD conformance fix, all backward compatible.

Performance (vs libxml2, 20k-item generated corpus)

  • parse ~30x → ~9x slower than libxml2: byte-level scanning fast paths, byte-after-< markup dispatch, ampersand-free attribute decode skip (#275, #276, #278)
  • serialize ~5.5x → ~2.7x: escaping fast path for values that need no escaping (#279)
  • xpath ~13x → ~5.5x: node-set de-duplication skip on per-context-disjoint axes, // descendant fusion, and redundant sort/dedup elimination for path results (#280#283)

Fixed

  • An xsi:type blocked by block/blockDefault is now rejected when it reaches a union declared type through a blocked member (cvc-elt.4.3 / cos-st-derived-OK 2.2.4). W3C XSTS invalid-instances-accepted 15 → 14, with valid-schemas-rejected and valid-instances-rejected held at 0 — the false-positive direction guarded hardest (#277).

Verification

Full local suite (1695 tests), Apache Xalan XSLT gold-output corpus, W3C XML conformance corpora (xmltest/OASIS/Sun/Eduni/IBM/Japanese), RELAX NG spec suite, the full W3C XSTS archive, and the WASM cross-platform build — all green. The correctness-sensitive changes (the xsi:type fix, the // fusion, and the single-step sort skip) each passed an adversarial differential review. swiftformat and swiftlint --strict clean.

Full changelog: https://github.com/mihaelamj/PureXML/blob/main/CHANGELOG.md