defxmlschema/chapter10¶
Example 10-1 Defining a union type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="SizeType">
<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="small" />
<xs:enumeration value="medium" />
<xs:enumeration value="large" />
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:element name="Size" type="SizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional, Union
@dataclass
class Size:
"""
: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 10-10 Length facet applied to a list¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="../chapter08/example0810.xsd" />
<xs:simpleType name="AvailableSizesType">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="SMLSizeType" />
</xs:simpleType>
<xs:maxLength value="3" />
</xs:restriction>
</xs:simpleType>
<xs:element name="AvailableSizesType" type="AvailableSizesType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
from tests.fixtures.defxmlschema.chapter08.example0810 import (
SmlsizeType,
)
@dataclass
class AvailableSizesType:
"""
:ivar value:
"""
value: Optional[SmlsizeType] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
max_length=3.0
)
)
Example 10-13 Enumeration applied to the item type of a list¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="AvailableSizesType">
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="small" />
<xs:enumeration value="medium" />
<xs:enumeration value="large" />
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
<xs:element name="AvailableSizesType" type="AvailableSizesType" />
</xs:schema>
from enum import Enum
from dataclasses import dataclass, field
from typing import List
@dataclass
class AvailableSizesType:
"""
:ivar value:
"""
value: List["AvailableSizesType.Value"] = field(
default_factory=list,
metadata=dict(
name="value",
type="List",
min_occurs=0,
max_occurs=9223372036854775807
)
)
class Value(Enum):
"""
:cvar SMALL:
:cvar MEDIUM:
:cvar LARGE:
"""
SMALL = "small"
MEDIUM = "medium"
LARGE = "large"
Example 10-14 Enumeration correctly applied to a list type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="example1002.xsd" />
<xs:simpleType name="ApplicableSizesType">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="SizeType" />
</xs:simpleType>
<xs:enumeration value="small medium large" />
<xs:enumeration value="2 4 6 8 10 12 14 16 18" />
</xs:restriction>
</xs:simpleType>
<xs:element name="ApplicableSizesType" type="ApplicableSizesType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import List, Union
from tests.fixtures.defxmlschema.chapter08.example0810 import (
SmlsizeType,
)
@dataclass
class ApplicableSizesType:
"""
:ivar value:
:ivar small_medium_large:
:ivar value_2_4_6_8_10_12_14_16_18:
"""
value: List[Union[int, SmlsizeType]] = field(
default_factory=list,
metadata=dict(
name="value",
type="List",
min_occurs=0,
max_occurs=9223372036854775807,
min_inclusive=2.0,
max_inclusive=18.0
)
)
small_medium_large: str = field(
default="small medium large",
metadata=dict(
name="small medium large",
type="Enumeration"
)
)
value_2_4_6_8_10_12_14_16_18: str = field(
default="2 4 6 8 10 12 14 16 18",
metadata=dict(
name="2 4 6 8 10 12 14 16 18",
type="Enumeration"
)
)
Example 10-15 Pattern applied to a list type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="VectorType">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:unsignedInt" />
</xs:simpleType>
<xs:pattern value="\d+\s+\d+\s+((\d+\s+){3})*\d+" />
</xs:restriction>
</xs:simpleType>
<xs:element name="VectorType" type="VectorType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class VectorType:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction",
pattern=r"\d+\s+\d+\s+((\d+\s+){3})*\d+"
)
)
Example 10-16 Defining a list of a string-based type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="AvailableSizesType">
<xs:list itemType="SMLXSizeType" />
</xs:simpleType>
<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"
Example 10-18 Defining a list of a union¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="../chapter08/example0801.xsd" />
<xs:import schemaLocation="../chapter08/example0809.xsd" />
<xs:simpleType name="SizeType">
<xs:union memberTypes="DressSizeType SMLXSizeType" />
</xs:simpleType>
<xs:simpleType name="AvailableSizesType">
<xs:list itemType="SizeType" />
</xs:simpleType>
<xs:element name="AvailableSizesType" type="AvailableSizesType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import List, Union
from tests.fixtures.defxmlschema.chapter08.example0809 import (
SmlxsizeType,
)
@dataclass
class AvailableSizesType:
"""
:ivar value:
"""
value: List[Union[int, SmlxsizeType]] = field(
default_factory=list,
metadata=dict(
name="value",
type="List",
min_occurs=0,
max_occurs=9223372036854775807,
min_inclusive=2.0,
max_inclusive=18.0
)
)
Example 10-2 Using the memberTypes attribute¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="../chapter08/example0801.xsd" />
<xs:import schemaLocation="../chapter08/example0810.xsd" />
<xs:simpleType name="SizeType">
<xs:union memberTypes="DressSizeType SMLSizeType" />
</xs:simpleType>
<xs:element name="SizeType" type="SizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional, Union
from tests.fixtures.defxmlschema.chapter08.example0810 import (
SmlsizeType,
)
@dataclass
class SizeType:
"""
:ivar value:
"""
value: Optional[Union[int, SmlsizeType]] = field(
default=None,
metadata=dict(
name="value",
type="Union",
min_inclusive=2.0,
max_inclusive=18.0
)
)
Example 10-21 An array using markup¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="VectorType">
<xs:sequence maxOccurs="unbounded">
<xs:element name="e" type="xs:integer" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayType">
<xs:sequence maxOccurs="unbounded">
<xs:element name="r" type="VectorType" />
</xs:sequence>
</xs:complexType>
<xs:element name="array" type="ArrayType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class VectorType:
"""
:ivar e:
"""
e: Optional[int] = field(
default=None,
metadata=dict(
name="e",
type="Element",
required=True
)
)
@dataclass
class ArrayType:
"""
:ivar r:
"""
r: Optional[VectorType] = field(
default=None,
metadata=dict(
name="r",
type="Element",
required=True
)
)
@dataclass
class Array(ArrayType):
class Meta:
name = "array"
Example 10-3 Combining memberTypes and simpleType¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="example1001.xsd" />
<xs:simpleType name="SizeType">
<xs:union memberTypes="DressSizeType">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="small" />
<xs:enumeration value="medium" />
<xs:enumeration value="large" />
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:element name="Size" type="SizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Size:
"""
:ivar value:
"""
value: Optional[str] = field(
default=None,
metadata=dict(
name="value",
type="Union"
)
)
Example 10-4 Restricting a union¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="example1001.xsd" />
<xs:simpleType name="SmallSizeType">
<xs:restriction base="SizeType">
<xs:enumeration value="2" />
<xs:enumeration value="4" />
<xs:enumeration value="6" />
<xs:enumeration value="small" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
from enum import Enum
class SmallSizeType(Enum):
"""
:cvar VALUE_2:
:cvar VALUE_4:
:cvar VALUE_6:
:cvar SMALL:
"""
VALUE_2 = "2"
VALUE_4 = "4"
VALUE_6 = "6"
SMALL = "small"
Example 10-5 A union of a union¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="example1001.xsd" />
<xs:simpleType name="InternationalSizeType">
<xs:union memberTypes="SizeType">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="24" />
<xs:maxInclusive value="54" />
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:element name="InternationalSizeType" type="InternationalSizeType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class InternationalSizeType:
"""
:ivar value:
"""
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Union",
min_inclusive=24.0,
max_inclusive=54.0
)
)
Example 10-7 Defining a list type using an itemType attribute¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="../chapter08/example0808.xsd" />
<xs:simpleType name="AvailableSizesType">
<xs:list itemType="DressSizeType" />
</xs:simpleType>
<xs:element name="AvailableSizesType" type="AvailableSizesType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import List, Union
@dataclass
class AvailableSizesType:
"""
:ivar value:
"""
value: List[Union[int, str]] = field(
default_factory=list,
metadata=dict(
name="value",
type="List",
min_occurs=0,
max_occurs=9223372036854775807,
min_inclusive=2.0,
max_inclusive=18.0
)
)
Example 10-9 Defining a list type using a simpleType child¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="AvailableSizesType">
<xs:list>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
<xs:element name="AvailableSizesType" type="AvailableSizesType" />
</xs:schema>
from dataclasses import dataclass, field
from typing import List
@dataclass
class AvailableSizesType:
"""
:ivar value:
"""
value: List[int] = field(
default_factory=list,
metadata=dict(
name="value",
type="List",
min_occurs=0,
max_occurs=9223372036854775807,
min_inclusive=2.0,
max_inclusive=18.0
)
)
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR