PureXML/Sources
Mihaela Mihaljevic f02561b01d feat(validation): add DTD content-model validation
Surface the parsed <!DOCTYPE> internal subset's <!ELEMENT> declarations from the
parser and validate a tree against them. Reimplemented from the DTD content-model
spec; no upstream code copied.

- DoctypeScanner captures <!ELEMENT name model> declarations; the parser surfaces
  them as Parsing.DocumentType (via parseWithDocumentType).
- Validation.ContentModel + ContentModelParser parse a model string (EMPTY, ANY,
  (#PCDATA), mixed, and element content with sequence/choice and ?/*/+).
- ContentModelMatcher matches the child element-name sequence against a model as
  a regular language (NFA-position matching).
- Validation.DTDSchema.validate reports issues for EMPTY/PCDATA/mixed violations,
  element content with stray text, and child sequences that do not match.
- PureXML.validateAgainstInternalDTD(_:) parses and validates in one call.
- ATTLIST validation is out of scope. 9 tests; 70 total.
2026-06-08 01:59:00 +02:00
..
Emitting refactor(emitter): make the serializer iterative and fix mixed content 2026-06-08 00:31:05 +02:00
Model feat(parser): resolve XML namespaces at the start-element boundary 2026-06-08 01:03:29 +02:00
Parsing feat(validation): add DTD content-model validation 2026-06-08 01:59:00 +02:00
Stream chore: scaffold PureXML pure-Swift XML package 2026-06-07 23:20:20 +02:00
Validation feat(validation): add DTD content-model validation 2026-06-08 01:59:00 +02:00
XPath feat(xpath): add an XPath 1.0 location-path subset 2026-06-08 01:32:23 +02:00
API.swift feat(validation): add DTD content-model validation 2026-06-08 01:59:00 +02:00
PureXML.swift feat(xpath): add an XPath 1.0 location-path subset 2026-06-08 01:32:23 +02:00