PureXML/Sources/Schema
Mihaela Mihaljevic cfaf9b7dd1 feat(schema): validate identity-constraint selector/field XPath subset
An identity constraint's selector and field xpath must be in the XSD 1.0
restricted-XPath subset (Part 1, 3.11.6), far narrower than full XPath: a
leading optional .//, then /-separated steps, a step being '.', a name test
(QName, '*', or NCName:*), or a child:: axis; a field path may end in an
attribute step (@x or attribute::x). No predicates, no other axes, no absolute
or interior //. The xpath was stored raw and compiled lazily with try?, so a
malformed one was silently accepted.

It is now lexed into a whitespace-tolerant token stream and parsed against the
grammar: whitespace between tokens is allowed (child :: a, . //.) while // must
be adjacent and a name test's own ':' may not be spaced. The name lexer uses
the XML NameChar set so a non-ASCII NCName is accepted.

The two identity tests that fed a malformed xpath and expected a
validation-time located error now assert the stronger compile-time rejection.

XSTS: invalid schemas accepted 785 to 736, valid schemas rejected held at 72,
instance buckets unchanged.
2026-06-14 10:30:06 +02:00
..
BuiltinType.swift feat(schema): built-in xsi:type resolution gated by substitution validity 2026-06-13 21:21:35 +02:00
ComplexType.swift fix(schema): honor empty-element default/fixed values and replace enumeration on restriction 2026-06-13 18:04:25 +02:00
ComplexValidator.swift feat(schema): built-in xsi:type resolution gated by substitution validity 2026-06-13 21:21:35 +02:00
ComplexValidatorDerivation.swift fix(schema): enforce element-level block against xsi:type substitution 2026-06-13 18:04:25 +02:00
ComplexValidatorHelpers.swift feat(schema): built-in xsi:type resolution gated by substitution validity 2026-06-13 21:21:35 +02:00
ComplexValidatorIDs.swift fix(schema): enforce document-scoped xs:ID uniqueness and xs:IDREF resolution 2026-06-13 19:17:34 +02:00
ComplexValidatorStreaming.swift
ComplexValidatorXSIType.swift feat(schema): built-in xsi:type resolution gated by substitution validity 2026-06-13 21:21:35 +02:00
ContentMatcher.swift
ContentModelDeterminism.swift feat(schema): enforce Unique Particle Attribution (cos-nonambig) 2026-06-14 09:35:33 +02:00
DateTimeParser.swift feat(schema): validate value-bound facet definitions; accept gMonth --MM-- 2026-06-13 22:10:57 +02:00
DateTimeValue.swift
DecimalValue.swift
DerivationMethod.swift
DurationValue.swift style(schema): drop vestigial day clamp in DurationValue.instant 2026-06-13 18:04:25 +02:00
IdentityConstraint.swift
IdentityValidator.swift feat(schema): built-in xsi:type resolution gated by substitution validity 2026-06-13 21:21:35 +02:00
IDTracker.swift fix(schema): enforce document-scoped xs:ID uniqueness and xs:IDREF resolution 2026-06-13 19:17:34 +02:00
Lexical.swift
ParticleRestriction.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
SchemaContentOrder.swift feat(schema): enforce complexContent derivation content order 2026-06-14 09:56:04 +02:00
SchemaDocument.swift feat(schema): validate constraining-facet definitions at compile time 2026-06-13 21:50:51 +02:00
SchemaIDAttribute.swift feat(schema): validate the id attribute (xs:ID) at compile time 2026-06-13 22:29:29 +02:00
SchemaIdentityXPath.swift feat(schema): validate identity-constraint selector/field XPath subset 2026-06-14 10:30:06 +02:00
SchemaNameUniqueness.swift feat(schema): resolve keyref refer to a declared key or unique 2026-06-14 08:04:34 +02:00
SchemaReferences.swift feat(schema): resolve keyref refer to a declared key or unique 2026-06-14 08:04:34 +02:00
SchemaStructure.swift feat(schema): validate identity-constraint selector/field XPath subset 2026-06-14 10:30:06 +02:00
SimpleType.swift feat(schema): built-in xsi:type resolution gated by substitution validity 2026-06-13 21:21:35 +02:00
StreamingXSDValidator.swift
TypeDerivation.swift
XSDAttributeParser.swift fix(schema): resolve <xs:attribute ref> to global attribute declarations 2026-06-13 19:30:11 +02:00
XSDCompletions.swift
XSDComplexContent.swift
XSDContext.swift feat(schema): validate constraining-facet definitions at compile time 2026-06-13 21:50:51 +02:00
XSDDerivation.swift fix(schema): enforce block="substitution" on substitution-group heads 2026-06-13 18:31:07 +02:00
XSDParser.swift feat(schema): enforce Unique Particle Attribution (cos-nonambig) 2026-06-14 09:35:33 +02:00
XSDSchemaValidations.swift
XSDSimpleParser.swift feat(schema): validate pattern facet regular expressions at compile time 2026-06-13 23:52:11 +02:00
XSDValidations.swift fix(schema): enforce document-scoped xs:ID uniqueness and xs:IDREF resolution 2026-06-13 19:17:34 +02:00
XSDWildcardParser.swift