Chapter 08¶
Simple types¶
Binding Test¶
Schema
<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 enum import Enum
from dataclasses import dataclass, field
from typing import List
class SmlxsizeType(Enum):
"""
:cvar SMALL:
:cvar MEDIUM:
:cvar LARGE:
:cvar EXTRA_LARGE:
"""
SMALL = "small"
MEDIUM = "medium"
LARGE = "large"
EXTRA_LARGE = "extra large"
class XsmlxsizeType(Enum):
"""
:cvar SMALL:
:cvar MEDIUM:
:cvar LARGE:
:cvar EXTRA_LARGE:
:cvar EXTRA_SMALL:
"""
SMALL = "small"
MEDIUM = "medium"
LARGE = "large"
EXTRA_LARGE = "extra large"
EXTRA_SMALL = "extra small"
@dataclass
class SizesType:
"""
:ivar dress_size:
:ivar medium_dress_size:
:ivar small_dress_size:
:ivar smlx_size:
:ivar xsmlx_size:
"""
dress_size: List[str] = field(
default_factory=list,
metadata=dict(
name="dressSize",
type="Element",
namespace="",
min_occurs=0,
max_occurs=9223372036854775807,
min_inclusive=2.0,
max_inclusive=18.0,
pattern=r"\d{1,2}"
)
)
medium_dress_size: List[str] = field(
default_factory=list,
metadata=dict(
name="mediumDressSize",
type="Element",
namespace="",
min_occurs=0,
max_occurs=9223372036854775807,
min_inclusive=8.0,
max_inclusive=12.0,
pattern=r"\d{1,2}"
)
)
small_dress_size: List[str] = field(
default_factory=list,
metadata=dict(
name="smallDressSize",
type="Element",
namespace="",
min_occurs=0,
max_occurs=9223372036854775807,
min_inclusive=2.0,
max_inclusive=6.0,
pattern=r"\d{1}"
)
)
smlx_size: List[SmlxsizeType] = field(
default_factory=list,
metadata=dict(
name="smlxSize",
type="Element",
namespace="",
min_occurs=0,
max_occurs=9223372036854775807
)
)
xsmlx_size: List[XsmlxsizeType] = field(
default_factory=list,
metadata=dict(
name="xsmlxSize",
type="Element",
namespace="",
min_occurs=0,
max_occurs=9223372036854775807
)
)
@dataclass
class Sizes(SizesType):
class Meta:
name = "sizes"
XML Document
<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>
xsData XML Document
<sizes>
<dressSize>06</dressSize>
<mediumDressSize>12</mediumDressSize>
<smallDressSize>6</smallDressSize>
<smlxSize>extra
large</smlxSize>
<xsmlxSize>extra small</xsmlxSize>
</sizes>
xsData JSON
{
"dress_size": [
"06"
],
"medium_dress_size": [
"12"
],
"small_dress_size": [
"6"
],
"smlx_size": [
"extra\n large"
],
"xsmlx_size": [
"extra small"
]
}
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR