defxmlschema/chapter08¶
Example 8-1 Defining and referencing a named simple type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
</xs:restriction>
</xs:simpleType>
<xs:element name="size" type="DressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Size:
"""
:ivar value:
"""
class Meta:
name = "size"
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=2.0,
max_inclusive=18.0
)
)
Example 8-10 Restricting an enumeration¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="example0809.xsd" />
<xs:simpleType name="SMLSizeType">
<xs:restriction base="SMLXSizeType">
<xs:enumeration value="small" />
<xs:enumeration value="medium" />
<xs:enumeration value="large" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
from enum import Enum
class SmlsizeType(Enum):
"""
:cvar SMALL:
:cvar MEDIUM:
:cvar LARGE:
"""
SMALL = "small"
MEDIUM = "medium"
LARGE = "large"
Example 8-12 Using a union to extend an enumeration¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="example0809.xsd" />
<xs:simpleType name="XSMLXSizeType">
<xs:union memberTypes="SMLXSizeType">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="extra small" />
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:element name="XSMLXSizeType" type="XSMLXSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class XsmlxsizeType:
"""
:ivar value:
"""
class Meta:
name = "XSMLXSizeType"
value: Optional[str] = field(
default=None,
metadata=dict(
name="value",
type="Union"
)
)
Example 8-13 Enumerating numeric values¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="NewSmallDressSizeType">
<xs:restriction base="xs:integer">
<xs:enumeration value="2" />
<xs:enumeration value="4" />
<xs:enumeration value="6" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
from enum import Enum
class NewSmallDressSizeType(Enum):
"""
:cvar VALUE_2:
:cvar VALUE_4:
:cvar VALUE_6:
"""
VALUE_2 = 2
VALUE_4 = 4
VALUE_6 = 6
Example 8-14 Applying the pattern facet¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
<xs:pattern value="\d{1,2}" />
</xs:restriction>
</xs:simpleType>
<xs:element name="DressSizeType" type="DressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class DressSizeType:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=2.0,
max_inclusive=18.0,
pattern=r"\d{1,2}"
)
)
Example 8-15 Restricting a pattern¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="example0814.xsd" />
<xs:simpleType name="SmallDressSizeType">
<xs:restriction base="DressSizeType">
<xs:minInclusive value="2" />
<xs:maxInclusive value="6" />
<xs:pattern value="\d{1}" />
</xs:restriction>
</xs:simpleType>
<xs:element name="SmallDressSizeType" type="SmallDressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class SmallDressSizeType:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=2.0,
max_inclusive=6.0,
pattern=r"\d{1}"
)
)
Example 8-2 Defining an anonymous simple type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="size">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Size:
"""
:ivar value:
"""
class Meta:
name = "size"
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=2.0,
max_inclusive=18.0
)
)
Example 8-21 Preventing type derivation¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType" final="restriction list">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
</xs:restriction>
</xs:simpleType>
<xs:element name="DressSize" type="DressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class DressSize:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=2.0,
max_inclusive=18.0
)
)
Example 8-3 Deriving a simple type from a built-in simple type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
<xs:pattern value="\d{1,2}" />
</xs:restriction>
</xs:simpleType>
<xs:element name="DressSize" type="DressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class DressSize:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=2.0,
max_inclusive=18.0,
pattern=r"\d{1,2}"
)
)
Example 8-4 Deriving a simple type from a user-derived simple type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="example0803.xsd" />
<xs:simpleType name="MediumDressSizeType">
<xs:restriction base="DressSizeType">
<xs:minInclusive value="8" />
<xs:maxInclusive value="12" />
</xs:restriction>
</xs:simpleType>
<xs:element name="MediumDressSizeType" type="MediumDressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class MediumDressSizeType:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=8.0,
max_inclusive=12.0,
pattern=r"\d{1,2}"
)
)
Example 8-5 Effective definition of MediumDressSizeType¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="MediumDressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="8" />
<xs:maxInclusive value="12" />
<xs:pattern value="\d{1,2}" />
</xs:restriction>
</xs:simpleType>
<xs:element name="MediumDressSize" type="MediumDressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class MediumDressSize:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=8.0,
max_inclusive=12.0,
pattern=r"\d{1,2}"
)
)
Example 8-7 Fixed facets¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" fixed="true" />
<xs:maxInclusive value="18" fixed="true" />
<xs:pattern value="\d{1,2}" />
</xs:restriction>
</xs:simpleType>
<xs:element name="DressSize" type="DressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class DressSize:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
min_inclusive=2.0,
max_inclusive=18.0,
pattern=r"\d{1,2}"
)
)
Example 8-8 Union allowing an empty value¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="" />
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:element name="DressSize" type="DressSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional, Union
@dataclass
class DressSize:
"""
:ivar value:
"""
value: Optional[Union[int, str]] = field(
default=None,
metadata=dict(
name="value",
type="Union",
min_inclusive=2.0,
max_inclusive=18.0
)
)
Example 8-9 Applying the enumeration facet¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="SMLXSizeType">
<xs:restriction base="xs:token">
<xs:enumeration value="small" />
<xs:enumeration value="medium" />
<xs:enumeration value="large" />
<xs:enumeration value="extra large" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
from enum import Enum
class SmlxsizeType(Enum):
"""
:cvar SMALL:
:cvar MEDIUM:
:cvar LARGE:
:cvar EXTRA_LARGE:
"""
SMALL = "small"
MEDIUM = "medium"
LARGE = "large"
EXTRA_LARGE = "extra large"
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR