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
19 lines
399 B
Swift
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
|
|
}
|
|
}
|
|
}
|