Continues incorporating every schema-validity check into the Validator framework (Rules/universal/validation-rules.md) rather than ad-hoc parse-pipeline throws. - checkRedefine (src-redefine.5: a redefined type restricts or extends itself) becomes the pre-compile Validation redefinitionsDeriveFromThemselves; redefineDerivationErrors returns findings instead of throwing. - checkAllGroups is removed entirely: every check it made is already produced by Validations -- "a member must be an element" by schemaStructureValid (allowedChildren[all]), and the occurrence limits by allGroupLimitedErrors (cos-all-limited.2). Verified redundant and not load-bearing: an empirical probe with the calls removed left invalid-schemas-accepted at 81 unchanged, the fuzz suite's "compile and validation never crash or hang" still passes (the NFA builder's own guards hold), and false positives stayed 0. compileRule is now internal so composition Validations can live in their own file (SchemaCompositionValidations.swift). Both new pre-compile rules are pinned in ValidationConfigurationTests. The pre-existing public SchemaError.invalidAllGroup case is kept (released API) though no longer thrown. No bucket change (invalid-schemas-accepted 81, valid-schemas-rejected 0); full suite + fuzz pass.
28 lines
1.5 KiB
Swift
28 lines
1.5 KiB
Swift
extension PureXML.Validation.SchemaCompile {
|
|
/// src-resolve: a resolved `include`/`import`/`redefine` `schemaLocation` (one the
|
|
/// loader returned content for) must be a well-formed schema document. The
|
|
/// failures are recorded on the context during composition; an unresolved
|
|
/// location (the loader returned nothing) is not recorded, since resolution is
|
|
/// the processor's choice.
|
|
static var referencedSchemasResolveToSchemas: PureXML.Validation.Validation<PureXML.Schema.SchemaCompileRoot, PureXML.Schema.SchemaCompileContext> {
|
|
compileRule("A resolved schemaLocation reference is a valid schema") { document in
|
|
PureXML.Schema.SchemaLocatedFinding.unlocated(
|
|
document.context.failedSchemaReferences.map {
|
|
"the referenced schema document '\($0)' is not a valid schema"
|
|
},
|
|
)
|
|
}
|
|
}
|
|
|
|
/// src-redefine.5: every type inside `xs:redefine` must restrict or extend the
|
|
/// type it redefines (same local name, in the redefining schema's own target
|
|
/// namespace).
|
|
static var redefinitionsDeriveFromThemselves: PureXML.Validation.Validation<PureXML.Schema.SchemaCompileRoot, PureXML.Schema.SchemaCompileContext> {
|
|
compileRule("A redefined type restricts or extends itself") { document in
|
|
PureXML.Schema.SchemaLocatedFinding.unlocated(
|
|
PureXML.Schema.XSDParser.redefineDerivationErrors(document.containers),
|
|
)
|
|
}
|
|
}
|
|
}
|