PureXML/Sources/Validation/BuiltinValidationXSDInstance.swift
Mihaela Mihaljevic 380160cc2b refactor(validation): decompose XSD instance validation into composable rules
The two monolithic XSD content/identity rules only satisfied the OpenAPIKit
validation idiom at the wrong granularity: no per-constraint removability,
no isolable failing/near-miss tests. Split them into 32 named rules, each
finding tagged at its origin and cached per XSDContext so the walk still
runs once per document (the #101 decision against duplicating XSD's
recursive type resolution still holds). Wired the streaming path's ID/IDREF
and identity checks through the same framework instead of calling the
validators imperatively, and added the unwrapAndLookup combinator the rule
already named as required.

Also includes the mandated repo-wide swiftformat/swiftlint pass.
2026-07-12 14:12:17 +02:00

138 lines
6.3 KiB
Swift

/// The decomposed XSD instance-validation rules (content validity and identity
/// constraints), split out of ``BuiltinValidation``'s main declaration to keep
/// each file's type body under the length limit. See ``PureXML/Validation/XSD``
/// for why these are decomposed the way they are.
public extension PureXML.Validation.BuiltinValidation {
// MARK: XSD instance: content validity
static var xsdNilAttributeRequiresNillable: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.nilAttributeRequiresNillable
}
static var xsdNilElementMustBeEmpty: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.nilElementMustBeEmpty
}
static var xsdNilElementNoFixedConstraint: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.nilElementNoFixedConstraint
}
static var xsdFixedElementNoChildren: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.fixedElementNoChildren
}
static var xsdFixedElementValueMatches: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.fixedElementValueMatches
}
static var xsdEmptyContentForbidsChildren: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.emptyContentForbidsChildren
}
static var xsdSimpleContentForbidsChildren: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.simpleContentForbidsChildren
}
static var xsdSimpleContentTypeValid: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.simpleContentTypeValid
}
static var xsdTextForbidden: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.textForbidden
}
static var xsdWildcardElementUndeclared: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.wildcardElementUndeclared
}
static var xsdSimpleTypeDisallowedAttribute: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.simpleTypeDisallowedAttribute
}
static var xsdSimpleTypeForbidsChildren: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.simpleTypeForbidsChildren
}
static var xsdSimpleTypeValueValid: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.simpleTypeValueValid
}
static var xsdTypeReferenceResolves: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.typeReferenceResolves
}
static var xsdContentModelStructure: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.contentModelStructure
}
static var xsdAttributeTypeValid: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.attributeTypeValid
}
static var xsdAttributeFixedMatches: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.attributeFixedMatches
}
static var xsdAttributeRequiredPresent: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.attributeRequiredPresent
}
static var xsdAttributeSingleID: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.attributeSingleID
}
static var xsdAttributeDeclaredOrPermitted: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.attributeDeclaredOrPermitted
}
static var xsdWildcardAttributeUndeclared: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.wildcardAttributeUndeclared
}
static var xsdWildcardAttributeTypeValid: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.wildcardAttributeTypeValid
}
static var xsdWildcardAttributeFixedMatches: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.wildcardAttributeFixedMatches
}
static var xsdXsiTypeSubstitutionValid: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.xsiTypeSubstitutionValid
}
static var xsdXsiTypeOverrideResolves: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.xsiTypeOverrideResolves
}
static var xsdIdIdrefConsistent: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.idIdrefConsistent
}
// MARK: XSD instance: identity constraints
static var xsdIdentityConstraintXPathsValid: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.identityConstraintXPathsValid
}
static var xsdIdentityKeyFieldPresent: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.identityKeyFieldPresent
}
static var xsdIdentityValueUnique: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.identityValueUnique
}
static var xsdIdentityKeyrefResolves: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.identityKeyrefResolves
}
static var xsdIdentityFieldCardinality: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.identityFieldCardinality
}
static var xsdIdentityFieldMustBeSimple: PureXML.Validation.Validation<PureXML.Model.Node, PureXML.Validation.XSDContext> {
PureXML.Validation.XSD.identityFieldMustBeSimple
}
}