PureXML/docs
Mihaela Mihaljevic 2e3d2e25f8 fix(schema): reject substitution-member swaps in particle restriction
NameAndTypeOK clause 1 (XSD 1.0 section 3.9.6, Elt:Elt) pairs the declared
element declarations and requires the same {name} and {target namespace};
no clause grants substitution an allowance. The substitution-group
expansion rewrites the compiled term (an abstract head is dropped, members
join a synthetic choice), so the checker previously compared the expanded
names and a head-for-member swap looked name-identical.

Particle.declaredReference now preserves the pre-expansion identity of an
element-ref particle, and the restriction check pairs the declared
references before the structural pairing table (extracted as
structuralValid). Closes XSTS elemZ026 and particlesV020:
invalid-schemas-accepted 8 -> 6, valid buckets unchanged at zero.
Stricter than libxml2, which does not implement this edge; elemZ026 is
pinned in the differential baseline accordingly.

particlesZ008, byte-for-byte the same construct as elemZ026 but carrying
a settled valid expectation contradicting elemZ026's settled invalid, is
reclassified as a spec-divergent schema test with the adjudication
recorded in the suite (exclusion tables split into
Tests/XSTSSuiteExclusions.swift for file length).

Separately attributed: the differential baseline gains ten further pinned
entries (addB070a, addB108, addB177, attO025, elemZ027_c, errC008,
groupH021v, notatB005, notatE002, particlesEb040) that reproduce with
this change stashed. They are pre-existing drift from earlier main-line
fixes, not effects of this commit. Baseline 231 -> 242, differential
green.
2026-07-05 08:27:55 +02:00
..
design perf(schema): graph-structured-stack content matcher, killing the last 2^K content-model hang (#364) 2026-06-28 05:07:37 +02:00
plans fix(schema): a non-nillable element must carry no xsi:nil at all (cvc-elt.3.1) 2026-06-20 03:22:05 +02:00
benchmarks.md perf(schema): make xsd identity-constraint validation linear (#312) 2026-06-26 02:45:17 +02:00
engineering.md chore(rules): pin rules-swift corpus, add gates and CI; drop redundant docs/rules mirror 2026-06-30 14:02:40 +02:00
mermaid.md chore(rules): pin rules-swift corpus, add gates and CI; drop redundant docs/rules mirror 2026-06-30 14:02:40 +02:00
onboarding-antigravity.md chore(test): add scripts/fetch-xsts.sh to obtain the XSTS corpus (#321) 2026-06-26 08:59:07 +02:00
production-readiness.md docs: production-readiness standard, read every conformance iteration 2026-06-14 16:28:03 +02:00
release-hurdles.md fix(schema): attribute-wildcard union/intersection per Errata E1-10 (#251) 2026-06-23 04:56:17 +02:00
research-first.md chore(rules): pin rules-swift corpus, add gates and CI; drop redundant docs/rules mirror 2026-06-30 14:02:40 +02:00
roadmap.md fix(schema): reject substitution-member swaps in particle restriction 2026-07-05 08:27:55 +02:00
rules-swift-audit.md chore(release): stamp 0.4.8 from main and repoint to codeberg.org/Mihaela 2026-07-05 05:31:16 +02:00
rules-swift-corpus.sha256 chore(rules): pin rules-swift corpus, add gates and CI; drop redundant docs/rules mirror 2026-06-30 14:02:40 +02:00
schema-validity-burndown.md fix(schema): carry global ref metadata into restrictions 2026-06-19 09:03:49 +02:00
validation-coverage-registry.txt perf(model): make the value Node tree type depth-safe (#344) 2026-06-26 17:05:42 +02:00
validation-field-registry.txt feat(validation,schema): composable validation framework and cross-document composition 2026-06-16 09:57:43 +02:00
xsts-deviations.md fix(schema): reject substitution-member swaps in particle restriction 2026-07-05 08:27:55 +02:00