#08 - Simple typesΒΆ
Code Generation
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation>
This example illustrates various simple type restrictions using bounds facets,
patterns, and enumerations. White space is used in the instance to illustrate
that white space processing takes place before validation.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="sizes" type="SizesType"/>
<xsd:complexType name="SizesType">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="dressSize" type="DressSizeType"/>
<xsd:element name="mediumDressSize" type="MediumDressSizeType"/>
<xsd:element name="smallDressSize" type="SmallDressSizeType"/>
<xsd:element name="smlxSize" type="SMLXSizeType"/>
<xsd:element name="xsmlxSize" type="XSMLXSizeType"/>
</xsd:choice>
</xsd:complexType>
<xsd:simpleType name="DressSizeType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="2"/>
<xsd:maxInclusive value="18"/>
<xsd:pattern value="\d{1,2}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="MediumDressSizeType">
<xsd:restriction base="DressSizeType">
<xsd:minInclusive value="8"/>
<xsd:maxInclusive value="12"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SmallDressSizeType">
<xsd:restriction base="DressSizeType">
<xsd:minInclusive value="2"/>
<xsd:maxInclusive value="6"/>
<xsd:pattern value="\d{1}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SMLXSizeType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="small"/>
<xsd:enumeration value="medium"/>
<xsd:enumeration value="large"/>
<xsd:enumeration value="extra large"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="XSMLXSizeType">
<xsd:union memberTypes="SMLXSizeType">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="extra small"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
</xsd:schema>
from dataclasses import dataclass, field
from enum import Enum
from typing import List
class SmlxsizeType(Enum):
SMALL = "small"
MEDIUM = "medium"
LARGE = "large"
EXTRA_LARGE = "extra large"
class XsmlxsizeType(Enum):
SMALL = "small"
MEDIUM = "medium"
LARGE = "large"
EXTRA_LARGE = "extra large"
EXTRA_SMALL = "extra small"
@dataclass
class SizesType:
dress_size: List[str] = field(
default_factory=list,
metadata={
"name": "dressSize",
"type": "Element",
"namespace": "",
"min_inclusive": "2",
"max_inclusive": "18",
"pattern": r"\d{1,2}",
}
)
medium_dress_size: List[str] = field(
default_factory=list,
metadata={
"name": "mediumDressSize",
"type": "Element",
"namespace": "",
"min_inclusive": "8",
"max_inclusive": "12",
"pattern": r"\d{1,2}",
}
)
small_dress_size: List[str] = field(
default_factory=list,
metadata={
"name": "smallDressSize",
"type": "Element",
"namespace": "",
"min_inclusive": "2",
"max_inclusive": "6",
"pattern": r"\d{1}",
}
)
smlx_size: List[SmlxsizeType] = field(
default_factory=list,
metadata={
"name": "smlxSize",
"type": "Element",
"namespace": "",
}
)
xsmlx_size: List[XsmlxsizeType] = field(
default_factory=list,
metadata={
"name": "xsmlxSize",
"type": "Element",
"namespace": "",
}
)
@dataclass
class Sizes(SizesType):
class Meta:
name = "sizes"
Data Binding
<sizes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="chapter09.xsd">
<dressSize>06</dressSize>
<mediumDressSize>12</mediumDressSize>
<smallDressSize>6</smallDressSize>
<smlxSize>extra
large</smlxSize>
<xsmlxSize>extra small</xsmlxSize>
</sizes>
<sizes>
<dressSize>06</dressSize>
<mediumDressSize>12</mediumDressSize>
<smallDressSize>6</smallDressSize>
<smlxSize>extra large</smlxSize>
<xsmlxSize>extra small</xsmlxSize>
</sizes>
{
"dressSize": [
"06"
],
"mediumDressSize": [
"12"
],
"smallDressSize": [
"6"
],
"smlxSize": [
"extra large"
],
"xsmlxSize": [
"extra small"
]
}
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR