defxmlschema/chapter06¶
Example 6-1 Global element declarations¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://datypic.com/prod" targetNamespace="http://datypic.com/prod">
<xs:element name="name" type="xs:string" />
<xs:element name="size" type="xs:integer" />
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element ref="name" />
<xs:element ref="size" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Name:
"""
:ivar value:
"""
class Meta:
name = "name"
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="Extension"
)
)
@dataclass
class ProductType:
"""
:ivar name:
:ivar size:
"""
name: Optional[Name] = field(
default=None,
metadata=dict(
name="name",
type="Element",
required=True
)
)
size: Optional[Size] = field(
default=None,
metadata=dict(
name="size",
type="Element"
)
)
Example 6-11 Specifying an element’s default value¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="product">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="name" type="xs:string" default="N/A" />
<xs:element name="size" type="xs:integer" default="12" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
from dataclasses import dataclass, field
@dataclass
class Product:
"""
:ivar name:
:ivar size:
"""
class Meta:
name = "product"
name: str = field(
default="N/A",
metadata=dict(
name="name",
type="Element"
)
)
size: int = field(
default=12,
metadata=dict(
name="size",
type="Element"
)
)
Example 6-15 Making size elements nillable¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="size" type="xs:integer" nillable="true" />
</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="Extension"
)
)
Example 6-3 Local element declarations¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://datypic.com/prod" targetNamespace="http://datypic.com/prod">
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="size" type="xs:integer" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:schema>
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class ProductType:
"""
:ivar name:
:ivar size:
"""
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"
)
)
Example 6-7 Schema for qualified local element names¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://datypic.com/prod" targetNamespace="http://datypic.com/prod" elementFormDefault="qualified">
<xs:element name="product" type="ProductType" />
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer" />
<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 size:
"""
number: Optional[int] = field(
default=None,
metadata=dict(
name="number",
type="Element",
namespace="http://datypic.com/prod",
required=True
)
)
size: Optional[int] = field(
default=None,
metadata=dict(
name="size",
type="Element",
namespace="http://datypic.com/prod",
required=True
)
)
@dataclass
class Product(ProductType):
class Meta:
name = "product"
namespace = "http://datypic.com/prod"
Example 6-8 Using the form attribute¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://datypic.com/prod" targetNamespace="http://datypic.com/prod" elementFormDefault="qualified">
<xs:element name="product" type="ProductType" />
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer" form="unqualified" />
<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 size:
"""
number: Optional[int] = field(
default=None,
metadata=dict(
name="number",
type="Element",
required=True
)
)
size: Optional[int] = field(
default=None,
metadata=dict(
name="size",
type="Element",
namespace="http://datypic.com/prod",
required=True
)
)
@dataclass
class Product(ProductType):
class Meta:
name = "product"
namespace = "http://datypic.com/prod"
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR