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