ddn.data.xml.relaxng

Relax NG support (phased).

This module provides a minimal, native Relax NG representation and validator.

Current scope (phased native subset):

  • Supports element, attribute, text, empty, group, choice, and a limited interleave.
  • Supports both direct pattern roots and <grammar><start>...</start></grammar>.
  • Validation is currently limited to element/attribute structure and basic text/empty checks.

For full correctness and broader schema coverage, keep using the CLI oracle (xmllint --relaxng) while this native implementation is extended.

Types 4

Relax NG pattern kind.

ELEMENTElement pattern.
EMPTYEmpty pattern.
ATTRIBUTEAttribute pattern.
TEXTText pattern.
DATADatatype pattern.
GROUPGroup (sequence) pattern.
CHOICEChoice pattern.
INTERLEAVEInterleave pattern (limited).
OPTIONALOptional pattern.
ZERO_OR_MOREZero-or-more repetition.
ONE_OR_MOREOne-or-more repetition.
NOT_ALLOWEDNot allowed pattern (internal use for derivatives).

Relax NG pattern.

Fields
RelaxNgPatternKind kindPattern kind.
string nameName for `ELEMENT` and `ATTRIBUTE` patterns.
RelaxNgPattern[] childrenChild patterns.

Relax NG grammar.

Fields
RelaxNgPattern rootRoot pattern.

Result of validating a document against a Relax NG grammar.

Fields
bool valid`true` if valid.
string messageOptional error message if invalid.

Functions 16

fnRelaxNgGrammar parseRelaxNg(string rngXml) @safeParses a Relax NG schema document.
fnRelaxNgValidationResult validateRelaxNgDocument(XmlDocument doc, RelaxNgGrammar grammar) @safeValidates `doc` against `grammar`.
private fnbool matchPattern(RelaxNgPattern pattern, XmlElement el, out string message) @safe
private fnbool matchAttributePattern(RelaxNgPattern pattern, XmlElement el, out string message) @safe
private fnbool validateData(string type, string value, out string message) @safe
private fnstring textValue(XmlElement el) @safe
private fnbool hasNonWhitespaceText(XmlElement el) @safe nothrow
private fnbool canMatchEmpty(RelaxNgPattern p) @safe
private fnsize_t[] matchSequence(RelaxNgPattern[] patterns, XmlElement[] children, size_t pos) @safe
private fnsize_t[] matchConsume(RelaxNgPattern pattern, XmlElement[] children, size_t pos) @safe
private fnbool matchContentPattern(RelaxNgPattern pattern, XmlElement el, out string message) @safe
private fnXmlElement[] elementChildren(XmlElement el) @safe
private fnbool hasElementChild(XmlElement el) @safe nothrow

Variables 1

private enumvarRELAXNG_NS = "http://relaxng.org/ns/structure/1.0"