defxmlschema/chapter18¶
Example 18-1 A simple redefinition¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer" />
</xs:simpleType>
<xs:element name="size" type="DressSizeType" />
<xs:element name="color" type="xs:string" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Color:
"""
:ivar value:
"""
class Meta:
name = "color"
value: Optional[str] = field(
default=None,
metadata=dict(
name="value",
type="Extension"
)
)
@dataclass
class Size:
"""
:ivar value:
"""
class Meta:
name = "size"
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction"
)
)
Example 18-10 Overriding a complex type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer" />
<xs:element name="name" type="xs:string" />
<xs:element name="size" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class ProductType:
"""
:ivar number:
:ivar name:
:ivar size:
"""
number: Optional[int] = field(
default=None,
metadata=dict(
name="number",
type="Element",
required=True
)
)
name: Optional[str] = field(
default=None,
metadata=dict(
name="name",
type="Element",
required=True
)
)
size: Optional[str] = field(
default=None,
metadata=dict(
name="size",
type="Element",
required=True
)
)
Example 18-11 Overriding element and attribute declarations¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="description" type="xs:string" />
<xs:attribute name="version" type="xs:decimal" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Description:
"""
:ivar value:
"""
class Meta:
name = "description"
value: Optional[str] = field(
default=None,
metadata=dict(
name="value",
type="Extension"
)
)
Example 18-13 Risks of overriding types¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer" minOccurs="0" />
<xs:element name="name" type="xs:string" minOccurs="0" />
<xs:element name="size" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ShirtType">
<xs:complexContent>
<xs:extension base="ProductType">
<xs:sequence>
<xs:element name="color" type="xs:integer" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="RestrictedProductType">
<xs:complexContent>
<xs:restriction base="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer" minOccurs="0" />
<xs:element name="size" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class ProductType:
"""
:ivar number:
:ivar name:
:ivar size:
"""
number: Optional[int] = field(
default=None,
metadata=dict(
name="number",
type="Element"
)
)
name: Optional[str] = field(
default=None,
metadata=dict(
name="name",
type="Element"
)
)
size: Optional[str] = field(
default=None,
metadata=dict(
name="size",
type="Element"
)
)
@dataclass
class RestrictedProductType(ProductType):
"""
:ivar number:
:ivar size:
"""
number: Optional[int] = field(
default=None,
metadata=dict(
name="number",
type="Element"
)
)
size: Optional[str] = field(
default=None,
metadata=dict(
name="size",
type="Element"
)
)
@dataclass
class ShirtType(ProductType):
"""
:ivar color:
"""
color: Optional[int] = field(
default=None,
metadata=dict(
name="color",
type="Element",
required=True
)
)
Example 18-2 Redefining a simple type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<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=0.0,
max_inclusive=18.0
)
)
Example 18-3 Redefining a complex type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer" />
<xs:element name="name" type="xs:string" />
<xs:element name="size" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class ProductType:
"""
:ivar number:
:ivar name:
:ivar size:
"""
number: Optional[int] = field(
default=None,
metadata=dict(
name="number",
type="Element",
required=True
)
)
name: Optional[str] = field(
default=None,
metadata=dict(
name="name",
type="Element",
required=True
)
)
size: Optional[int] = field(
default=None,
metadata=dict(
name="size",
type="Element",
required=True
)
)
Example 18-8 A simple override¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer" />
</xs:simpleType>
<xs:element name="size" type="DressSizeType" />
<xs:element name="color" type="xs:string" />
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Color:
"""
:ivar value:
"""
class Meta:
name = "color"
value: Optional[str] = field(
default=None,
metadata=dict(
name="value",
type="Extension"
)
)
@dataclass
class Size:
"""
:ivar value:
"""
class Meta:
name = "size"
value: Optional[int] = field(
default=None,
metadata=dict(
name="value",
type="Restriction"
)
)
Example 18-9 Overriding a simple type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<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=0.0,
max_inclusive=18.0
)
)
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR