Chapter 06: Element declarations¶
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"
namespace = "http://datypic.com/prod"
value: Optional[str] = field(
default=None,
metadata=dict(
name="value",
type="Extension"
)
)
@dataclass
class Size:
"""
:ivar value:
"""
class Meta:
name = "size"
namespace = "http://datypic.com/prod"
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",
namespace="",
required=True
)
)
size: Optional[Size] = field(
default=None,
metadata=dict(
name="size",
type="Element",
namespace=""
)
)
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
from typing import List
@dataclass
class Product:
"""
:ivar name:
:ivar size:
"""
class Meta:
name = "product"
name: List[str] = field(
default_factory=list,
metadata=dict(
name="name",
type="Element",
namespace="",
min_occurs=0,
max_occurs=9223372036854775807
)
)
size: List[int] = field(
default_factory=list,
metadata=dict(
name="size",
type="Element",
namespace="",
min_occurs=0,
max_occurs=9223372036854775807
)
)
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-2 Illegal attempt to prefix an element name¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:prod="http://datypic.com/prod" targetNamespace="http://datypic.com/prod">
<xs:element name="name" type="xs:string" />
<xs:element name="prod:size" type="xs:integer" />
</xs:schema>
Warning
Illegal definition
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",
namespace="",
required=True
)
)
size: Optional[int] = field(
default=None,
metadata=dict(
name="size",
type="Element",
namespace=""
)
)
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",
namespace="",
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 Illegal 6-4 Assigning types to elements¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="size" type="SizeType" />
<xs:element name="name" type="xs:string" />
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element ref="name" />
<xs:element ref="size" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="anything" />
</xs:schema>
Warning
Illegal definition
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR