Skip to content

Commit f9cb4e9

Browse files
committed
release: prepare 0.3.4 with Schematron validation and XPath namespace support
1 parent 2da186b commit f9cb4e9

3 files changed

Lines changed: 10 additions & 7 deletions

File tree

CLAUDE.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
**xmloxide** is a pure Rust reimplementation of libxml2 — the de facto standard XML/HTML parsing library in the open-source world. libxml2 became officially unmaintained in December 2025 with known security issues. xmloxide is a memory-safe, high-performance replacement that passes the same conformance test suites.
66

7-
**Version:** 0.3.3
7+
**Version:** 0.3.4
88
**License:** MIT
99
**MSRV:** Rust 1.81+
1010

@@ -13,7 +13,7 @@
1313
- Full conformance with W3C XML 1.0 (Fifth Edition) and Namespaces in XML 1.0
1414
- **1727/1727** W3C XML Conformance Test Suite tests passing (100%)
1515
- **119/119** libxml2 regression tests passing (100%)
16-
- Feature parity with libxml2's core: XML/HTML parsing, DOM, SAX2, XPath 1.0, XmlReader, push parser, DTD/RelaxNG/XSD validation, C14N, XInclude, XML Catalogs
16+
- Feature parity with libxml2's core: XML/HTML parsing, DOM, SAX2, XPath 1.0, XmlReader, push parser, DTD/RelaxNG/XSD/Schematron validation, C14N, XInclude, XML Catalogs
1717
- **WHATWG HTML5 parser** — full HTML Living Standard tokenizer (§13.2.5) and tree builder (§13.2.6) with 7032/7032 tokenizer tests + 1778/1778 tree construction tests passing (100% html5lib-tests)
1818
- Zero `unsafe` in public API surface (`unsafe_code = "deny"` in Cargo.toml)
1919
- No system dependencies — pure Rust (uses `encoding_rs` for character encoding)
@@ -85,7 +85,8 @@ src/
8585
│ ├── mod.rs # ValidationResult, ValidationError
8686
│ ├── dtd.rs # DTD parsing and validation (populates id_map)
8787
│ ├── relaxng.rs # RelaxNG schema parsing and validation
88-
│ └── xsd.rs # XML Schema (XSD) parsing and validation
88+
│ ├── xsd.rs # XML Schema (XSD) parsing and validation
89+
│ └── schematron.rs # ISO Schematron (ISO/IEC 19757-3) rule-based validation
8990
├── serial/
9091
│ ├── mod.rs # Serialization options and entry points
9192
│ ├── xml.rs # XML serializer
@@ -279,6 +280,7 @@ cargo +nightly fuzz run fuzz_sax
279280
cargo +nightly fuzz run fuzz_reader
280281
cargo +nightly fuzz run fuzz_push
281282
cargo +nightly fuzz run fuzz_validation
283+
cargo +nightly fuzz run fuzz_schematron
282284
```
283285

284286
---
@@ -356,7 +358,7 @@ Pre-commit hooks available via `./scripts/install-hooks.sh` (runs fmt, clippy, t
356358

357359
| Suite | Location | Tests | Notes |
358360
|-------|----------|-------|-------|
359-
| Unit tests | `src/**/*.rs` (inline) | 848 | All modules |
361+
| Unit tests | `src/**/*.rs` (inline) | 991 | All modules |
360362
| W3C Conformance | `tests/conformance.rs` | 1727/1727 | Requires `download-conformance-suite.sh` |
361363
| libxml2 Compat | `tests/libxml2_compat.rs` | 119/119 | Requires `download-libxml2-tests.sh` |
362364
| html5lib Tokenizer | `tests/html5lib_tokenizer.rs` | 7032/7032 | Requires `download-html5lib-tests.sh` |
@@ -366,4 +368,5 @@ Pre-commit hooks available via `./scripts/install-hooks.sh` (runs fmt, clippy, t
366368
| Security/DoS | `tests/security.rs` | 15 | Billion laughs, deep nesting, etc. |
367369
| Entity resolver | `tests/entity_resolver.rs` | 14 | Entity expansion edge cases |
368370
| FFI | `tests/ffi_tests.rs` | 112 | C API surface tests (including SAX) |
369-
| Fuzz targets | `fuzz/` | 10 targets | XML, HTML, HTML5, XPath, roundtrip, SAX, reader, push, validation |
371+
| Schematron | `tests/schematron.rs` | 11 | PO schema, phases, firing rules, namespaces |
372+
| Fuzz targets | `fuzz/` | 11 targets | XML, HTML, HTML5, XPath, roundtrip, SAX, reader, push, validation, schematron |

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "xmloxide"
3-
version = "0.3.3"
3+
version = "0.3.4"
44
edition = "2021"
55
rust-version = "1.81"
66
license = "MIT"

0 commit comments

Comments
 (0)