PureXML/Sources/Schema/RelaxNGContentType.swift
Mihaela Mihaljevic 3415ff3d9a feat(relaxng): schema-correctness validation, spec suite complete
A RELAX NG schema document is validated before pattern interpretation
in three layers: the section-3 grammar check (vocabulary, attributes,
arity, text, QNames, datatypeLibrary URIs, hrefs, 4.16 excepts, xmlns
prohibitions), compiler checks (4.17 combine rules, unresolved refs,
parentRef scope, startless grammars, include/externalRef cycles and
overrides, grammar-checked loaded documents, unknown datatypes,
built-in-library params), and the 4.19/7.1-7.4 restrictions over the
compiled algebra after 4.20/4.21 normalization (prohibited paths,
content types, duplicate attributes via representative-name overlap,
infinite-class attributes outside oneOrMore, interleave constraints),
with recursion detection deliberately before normalization. Incorrect
schemas: 213 compiling down to 7, all the pre-Fifth-Edition name-class
class (count asserted). Two leniency tests updated to spec behavior.

Closes #131
2026-06-10 11:38:45 +02:00

19 lines
399 B
Swift

/// The 7.2 content classes, ordered for choice's max rule.
enum RelaxNGContentType: Comparable {
case empty
case complex
case simple
static func < (lhs: Self, rhs: Self) -> Bool {
rank(lhs) < rank(rhs)
}
private static func rank(_ type: Self) -> Int {
switch type {
case .empty: 0
case .complex: 1
case .simple: 2
}
}
}