Architecture¶
Concept¶
xsData is trying to convert schema definitions by making a few assumptions about them:
They are opinionated
They are too abstract
There are more than one way to achieve the same result
There are no best practices
In the end Elements are classes and Attributes are class fields
The rest is noise or metadata :)
Schema Parser¶
xsdata.codegen.parsers.schema.SchemaParser
The schema parser objectifies the xml data to simple python dataclass instances that are easy to work and extract all the relevant information.
Schema Mapper¶
xsdata.codegen.mappers.schema.SchemaMapper
The builder goes through all the root elements of a schema to create a list of class candidates.
All root elements are considered class candidates
Traverse the root elements object tree
Detect fields and extensions
Detect inner classes
Assign namespaces and default
value
fields
Root elements: simpleType
, attributeGroup
, group
, attribute
,
complexType
, element
Field elements: attribute
, enumeration
, restiction
, element
Extension elements: union
, attributeGroup
, group
, extension
,
restriction
Class Analyzer¶
xsdata.codegen.analyzer.ClassAnalyzer
The analyzer goes through all class candidates and flattens attributes and extensions based on certain criteria.
Promote for generation:
Classes derived from xsd
element
withabstract
flag set toFalse
Classes derived from xsd
complexType
withabstract
flag set toFalse
Classes derived from xsd
restiction
withenumeration
fields
Code Writer¶
xsdata.codegen.writer.CodeWriter
Code writer is a factory that delegates the code generation to the formats with their language conventions.