This document provides detailed analysis of the Python xmlschema package structure for porting to Rust.
xmlschema/
├── __init__.py # Main exports and API
├── _limits.py # Internal limits
├── aliases.py # Type aliases
├── arguments.py # Argument validation
├── cli.py # Command-line interface
├── dataobjects.py # Data binding objects
├── documents.py # Document validation
├── exceptions.py # Exception classes
├── exports.py # Export functionality
├── limits.py # Public limits API
├── loaders.py # Resource loaders
├── locations.py # Resource location
├── names.py # XML name handling
├── namespaces.py # Namespace handling
├── settings.py # Configuration
├── translation.py # i18n support
├── py.typed # Type hints marker
│
├── converters/ # Data converters
│ ├── __init__.py
│ ├── columnar.py
│ ├── default.py
│ └── unordered.py
│
├── extras/ # Additional features
│ └── codegen/ # Code generation
│ ├── __init__.py
│ ├── jinja2filters.py
│ └── templates/
│
├── locale/ # Translations
│ ├── en/
│ ├── it/
│ ├── ru/
│ └── ...
│
├── resources/ # Resource utilities
│ ├── __init__.py
│ ├── converters.py
│ └── ...
│
├── schemas/ # Built-in XSD schemas
│ ├── XSD_1.0/ # W3C XML Schema 1.0
│ ├── XSD_1.1/ # W3C XML Schema 1.1
│ ├── WSDL/ # WSDL schemas
│ ├── XML/ # XML namespace schemas
│ └── ...
│
├── testing/ # Test utilities
│ ├── __init__.py
│ ├── builders.py
│ ├── case_class.py
│ └── helpers.py
│
├── utils/ # Utilities
│ ├── __init__.py
│ ├── codegen.py
│ └── ...
│
├── validators/ # Core validators
│ ├── __init__.py # Validator exports
│ ├── assertions.py # XSD 1.1 assertions
│ ├── attributes.py # Attribute validators
│ ├── builders.py # Schema builders
│ ├── builtins.py # Built-in types
│ ├── complex_types.py # Complex type validators
│ ├── elements.py # Element validators
│ ├── exceptions.py # Validator exceptions
│ ├── facets.py # Facet constraints
│ ├── groups.py # Model groups
│ ├── helpers.py # Helper functions
│ ├── identities.py # Identity constraints
│ ├── models.py # Content models
│ ├── notations.py # Notations
│ ├── particles.py # Particle components
│ ├── schemas.py # Schema validator (main)
│ ├── simple_types.py # Simple type validators
│ ├── validation.py # Validation logic
│ ├── wildcards.py # Wildcards (any)
│ ├── xsd_globals.py # Global declarations
│ └── xsdbase.py # Base validator classes
│
└── xpath/ # XPath support
├── __init__.py
└── ...
-
exceptions.py → error.rs
- No internal dependencies
- Base for all error handling
- Priority: CRITICAL
-
namespaces.py → namespaces.rs
- Depends on: exceptions
- Used by: Almost everything
- Priority: CRITICAL
-
names.py → names.rs
- Depends on: exceptions, namespaces
- Used by: validators, documents
- Priority: CRITICAL
-
_limits.py + limits.py → limits.rs
- Depends on: exceptions
- Used by: validators, loaders
- Priority: HIGH
-
locations.py → locations.rs
- Depends on: exceptions, namespaces
- Used by: loaders, documents
- Priority: HIGH
-
loaders.py → loaders.rs
- Depends on: exceptions, locations, limits
- Used by: documents, validators
- Priority: HIGH
-
documents.py → documents.rs
- Depends on: exceptions, namespaces, loaders
- Used by: Main API
- Priority: HIGH
-
validators/xsdbase.py → validators/base.rs
- Depends on: exceptions, namespaces, names
- Used by: All validators
- Priority: CRITICAL
-
validators/exceptions.py → validators/exceptions.rs
- Depends on: main exceptions
- Used by: All validators
- Priority: CRITICAL
-
validators/helpers.py → validators/helpers.rs
- Depends on: base, exceptions
- Used by: All validators
- Priority: HIGH
-
validators/builtins.py → validators/builtins.rs
- Depends on: base, exceptions, facets
- Defines primitive XSD types
- Priority: CRITICAL
-
validators/facets.py → validators/facets.rs
- Depends on: base, exceptions
- Used by: simple_types, complex_types
- Priority: CRITICAL
-
validators/simple_types.py → validators/simple_types.rs
- Depends on: base, builtins, facets
- Used by: elements, attributes, complex_types
- Priority: CRITICAL
-
validators/attributes.py → validators/attributes.rs
- Depends on: base, simple_types
- Used by: complex_types, elements
- Priority: HIGH
-
validators/particles.py → validators/particles.rs
- Depends on: base
- Used by: groups, elements
- Priority: HIGH
-
validators/wildcards.py → validators/wildcards.rs
- Depends on: base, particles
- Used by: groups, complex_types
- Priority: MEDIUM
-
validators/groups.py → validators/groups.rs
- Depends on: base, particles, wildcards
- Used by: complex_types, elements
- Priority: HIGH
-
validators/models.py → validators/models.rs
- Depends on: base, groups, particles
- Used by: complex_types
- Priority: HIGH
-
validators/complex_types.py → validators/complex_types.rs
- Depends on: base, simple_types, attributes, groups, models
- Used by: elements
- Priority: HIGH
-
validators/elements.py → validators/elements.rs
- Depends on: base, complex_types, simple_types
- Used by: schemas
- Priority: HIGH
-
validators/identities.py → validators/identities.rs
- Depends on: base, elements
- Used by: schemas, validation
- Priority: MEDIUM
-
validators/assertions.py → validators/assertions.rs
- Depends on: base, xpath
- XSD 1.1 only
- Priority: LOW
-
validators/notations.py → validators/notations.rs
- Depends on: base
- Priority: LOW
-
validators/xsd_globals.py → validators/globals.rs
- Depends on: base, elements, attributes, groups
- Used by: schemas
- Priority: HIGH
-
validators/builders.py → validators/builders.rs
- Depends on: base, all component validators
- Used by: schemas
- Priority: HIGH
-
validators/schemas.py → validators/schemas.rs
- Depends on: Everything in validators/
- Main schema validator
- Priority: CRITICAL (but implement last)
-
validators/validation.py → validators/validation.rs
- Depends on: schemas, all validators
- Validation orchestration
- Priority: HIGH
-
converters/ → converters/
- Depends on: validators, documents
- Priority: MEDIUM
-
dataobjects.py → dataobjects.rs
- Depends on: validators, converters
- Priority: LOW
- xpath/ → xpath/
- Depends on: validators
- Priority: MEDIUM (or use external crate)
-
arguments.py → arguments.rs
- Argument validation utilities
- Priority: MEDIUM
-
settings.py → settings.rs
- Configuration management
- Priority: MEDIUM
-
aliases.py → aliases.rs
- Type aliases
- Priority: LOW
-
translation.py → translation.rs
- i18n support
- Priority: LOW
-
cli.py → cli.rs
- Command-line interface
- Priority: LOW (implement last)
-
exports.py → exports.rs
- Export utilities
- Priority: LOW
Based on dependency analysis, implement in this order:
- error.rs (exceptions.py)
- limits.rs (_limits.py + limits.py)
- namespaces.rs (namespaces.py)
- names.rs (names.py)
- locations.rs (locations.py)
- loaders.rs (loaders.py)
- documents.rs (documents.py)
- validators/mod.rs (validators/init.py)
- validators/exceptions.rs (validators/exceptions.py)
- validators/base.rs (validators/xsdbase.py)
- validators/helpers.rs (validators/helpers.py)
- validators/particles.rs (validators/particles.py)
- validators/facets.rs (validators/facets.py)
- validators/builtins.rs (validators/builtins.py)
- validators/simple_types.rs (validators/simple_types.py)
- validators/attributes.rs (validators/attributes.py)
- validators/notations.rs (validators/notations.py)
- validators/wildcards.rs (validators/wildcards.py)
- validators/groups.rs (validators/groups.py)
- validators/models.rs (validators/models.py)
- validators/complex_types.rs (validators/complex_types.py)
- validators/elements.rs (validators/elements.py)
- validators/identities.rs (validators/identities.py)
- validators/globals.rs (validators/xsd_globals.py)
- validators/builders.rs (validators/builders.py)
- validators/schemas.rs (validators/schemas.py)
- validators/validation.rs (validators/validation.py)
- validators/assertions.rs (validators/assertions.py)
- converters/ (converters/)
- dataobjects.rs (dataobjects.py)
- xpath/ (xpath/)
- arguments.rs (arguments.py)
- settings.rs (settings.py)
- aliases.rs (aliases.py)
- cli.rs (cli.py)
- lib.rs (init.py) - Main public API
Large files that need careful planning:
- validators/schemas.py - 86KB - Schema validator core
- validators/elements.py - 66KB - Element validation
- validators/simple_types.py - 63KB - Simple type validation
- validators/groups.py - 62KB - Model group validation
- validators/complex_types.py - 46KB - Complex type validation
- validators/wildcards.py - 37KB - Wildcard validation
- validators/models.py - 37KB - Content model validation
- documents.py - 32KB - Document handling
- validators/builders.py - 32KB - Schema building
- validators/facets.py - 33KB - Facet validation
These large files should be split into multiple Rust modules for maintainability.
The Python package depends on:
- elementpath - XPath 2.0/3.0/3.1 implementation
- elementTree - Standard library XML parser
For Rust, we need equivalents:
- XML parsing: quick-xml, roxmltree, or xml-rs
- XPath: sxd-xpath or custom implementation
The Python package has extensive tests:
- Unit tests for each module
- Integration tests
- W3C XSD test suite
- Example-based tests
We should port these incrementally as we implement each module.