PureXML/Sources/Schema
Mihaela Mihaljevic 73ba9b1f38 fix(schema): bound content-matcher configuration set per counter
The counted content automaton clamped every occurrence counter to a single
inputLength + 1 ceiling, so a content model with nested occurrence bounds let
the epsilon-closure grow toward inputLength raised to the counter count. The
XSTS particlesQ005 instance (about 1000 elements against
sequence{1,1000}(e1{1,unbounded})) drove that to roughly 16M configurations per
closure and hundreds of millions of hash operations, so validation did not
terminate in reasonable time.

Each counter now saturates at min(maximum, inputLength + 1), and an unbounded
counter at its minimum: once the minimum is reached every higher count is
matching-equivalent, because canExit only tests the minimum and belowMaximum is
vacuous, so collapsing them is exact. The active-configuration set is then
bounded by the content model rather than by the input length.

particlesQ005 goes from a multi-minute near-hang to about two seconds with
identical results. The 1448 unit tests pass and the full XSTS suite still
settles at 0/43/0/31, and now completes instead of hanging.
2026-06-19 23:32:04 +02:00
..
BuiltinType.swift
ComplexType.swift fix(schema): count content-model occurrences 2026-06-19 23:32:04 +02:00
ComplexValidator.swift fix(schema): a fixed mixed element must have no element children; invalid-instances-accepted 37 to 34 (#147) 2026-06-18 15:51:25 +02:00
ComplexValidatorAttributes.swift fix(schema): exclude use="prohibited" attributes from effective uses at instance time; invalid-instances-accepted 43 to 39 (#147) 2026-06-18 15:28:35 +02:00
ComplexValidatorContentModel.swift fix(schema): count content-model occurrences 2026-06-19 23:32:04 +02:00
ComplexValidatorDerivation.swift fix(schema): reject an xsi:type that names an abstract type; invalid-instances-accepted 34 to 32 (#147) 2026-06-18 15:58:08 +02:00
ComplexValidatorHelpers.swift
ComplexValidatorIDs.swift
ComplexValidatorStreaming.swift
ComplexValidatorXSIType.swift
ContentMatcher.swift fix(schema): bound content-matcher configuration set per counter 2026-06-19 23:32:04 +02:00
ContentModelDeterminism.swift
ContentNFABuilder.swift fix(schema): count content-model occurrences 2026-06-19 23:32:04 +02:00
DateTimeParser.swift
DateTimeValue.swift
DecimalValue.swift
DerivationMethod.swift
DurationValue.swift
IdentityConstraint.swift
IdentityFieldValue.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
IdentityValidator.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
IdentityValidatorDefaults.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
IDTracker.swift
Lexical.swift
OccurrenceRange.swift fix(schema): count content-model occurrences 2026-06-19 23:32:04 +02:00
ParticleNormalization.swift
ParticleRestriction.swift
ParticleRestrictionElement.swift
ParticleRestrictionHelpers.swift
Primitive.swift
RelaxNGCompactHelpers.swift
RelaxNGCompactLexer.swift
RelaxNGCompactParser.swift
RelaxNGContentType.swift
RelaxNGDerivative.swift
RelaxNGDiagnostics.swift
RelaxNGFacets.swift
RelaxNGGrammarCheck.swift
RelaxNGGrammarCheckSections.swift
RelaxNGNameClasses.swift
RelaxNGNode.swift
RelaxNGParser.swift
RelaxNGParserIncludes.swift
RelaxNGPattern.swift
RelaxNGRestrictionChecker.swift
RelaxNGRestrictionOverlap.swift
RelaxNGRestrictionPaths.swift
RelaxNGRestrictions.swift
RelaxNGSchema.swift
SchemaAllGroupPlacement.swift
SchemaAttributeApplicability.swift
SchemaAttributeRestriction.swift
SchemaAttributeUniqueness.swift
SchemaCompileValidation.swift Reject invalid simpleContent inline restrictions 2026-06-18 22:01:01 +02:00
SchemaCompositionValidations.swift fix(schema): enforce model-group redefine restriction (cos-group-restrict) 2026-06-18 18:24:58 +02:00
SchemaContentOrder.swift
SchemaDerivationControl.swift
SchemaDocument.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
SchemaDocumentHints.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
SchemaExtensionAllGroup.swift Reject mixedness-changing complexContent extensions 2026-06-18 22:37:49 +02:00
SchemaFacetApplicability.swift fix(schema): reject a constraining facet on anySimpleType-based simpleContent 2026-06-18 19:27:28 +02:00
SchemaIDAttribute.swift
SchemaIdentityXPath.swift
SchemaIDValueConstraint.swift
SchemaImportNamespace.swift
SchemaNameUniqueness.swift
SchemaNestedDefinition.swift
SchemaNotationValidity.swift
SchemaRedefineSelfReference.swift refactor(schema): extract shared base-component resolution for redefines 2026-06-18 20:20:26 +02:00
SchemaReferenceForeignPools.swift
SchemaReferenceResolution.swift
SchemaReferences.swift
SchemaSimpleTypeFinal.swift
SchemaSimpleTypeValidity.swift
SchemaStructure.swift fix(schema): reject a constraining facet on anySimpleType-based simpleContent 2026-06-18 19:27:28 +02:00
SchemaStructureHelpers.swift
SchemaSubstitutionType.swift Reject complex substitutions for anySimpleType heads 2026-06-18 23:04:11 +02:00
SchemaWildcardNamespace.swift
SimpleType.swift
StreamingXSDValidator.swift
TypeDerivation.swift
XPathQueryCache.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
XSDAttributeParser.swift fix(schema): exclude use="prohibited" attributes from effective uses at instance time; invalid-instances-accepted 43 to 39 (#147) 2026-06-18 15:28:35 +02:00
XSDCompletions.swift
XSDComplexContent.swift
XSDContext.swift fix(schema): count content-model occurrences 2026-06-19 23:32:04 +02:00
XSDDerivation.swift fix(schema): bar a substitution-group member blocked by the head's type; invalid-instances-accepted 53 to 50 (#147) 2026-06-18 14:02:14 +02:00
XSDDerivationTables.swift fix(schema): key a local element's block by its effective instance namespace; invalid-instances-accepted 32 to 31 (#147) 2026-06-18 16:12:08 +02:00
XSDParser.swift fix(schema): carry global ref metadata into restrictions 2026-06-19 09:03:49 +02:00
XSDParserHelpers.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
XSDParserParticles.swift fix(schema): count content-model occurrences 2026-06-19 23:32:04 +02:00
XSDParserTypeReferences.swift
XSDParserUnion.swift docs: align stale figures with code and the enforced XSTS gate 2026-06-19 23:32:04 +02:00
XSDSchemaValidations.swift
XSDSimpleContentParser.swift Reject invalid simpleContent inline restrictions 2026-06-18 22:01:01 +02:00
XSDSimpleParser.swift
XSDSimpleParser+Facets.swift
XSDSubstitutionMembers.swift fix(schema): stop blocked substitution chaining 2026-06-19 08:37:19 +02:00
XSDValidations.swift fix(schema): default/fixed value for identity-constraint fields; invalid-instances-accepted 50 to 45 (#147) 2026-06-18 14:47:47 +02:00
XSDWildcardParser.swift