Chapter 18: Redefining and overriding schema components¶
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-1.2 A simple redefinition¶
<!-- SKIPTEST -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://datypic.com/prod" targetNamespace="http://datypic.com/prod">
<xs:redefine schemaLocation="prod1.xsd">
<xs:simpleType name="DressSizeType">
<xs:restriction base="DressSizeType">
<xs:minInclusive value="2" />
<xs:maxInclusive value="16" />
</xs:restriction>
</xs:simpleType>
</xs:redefine>
<xs:element name="newSize" type="DressSizeType" />
</xs:schema>
Warning
Unsupported feature!
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",
namespace="",
required=True
)
)
name: Optional[str] = field(
default=None,
metadata=dict(
name="name",
type="Element",
namespace="",
required=True
)
)
size: Optional[str] = field(
default=None,
metadata=dict(
name="size",
type="Element",
namespace="",
required=True
)
)
Example 18-10.2 Overriding a complex type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:override schemaLocation="prod1.xsd">
<!-- SKIPTEST: XML Schema 1.1 -->
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:string" />
<xs:element name="name" type="xs:string" />
<xs:element name="color" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:override>
</xs:schema>
Warning
XML Schema 1.1
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-11.2 Overriding element and attribute declarations¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:override schemaLocation="prod1.xsd">
<!-- SKIPTEST: XML Schema 1.1 -->
<xs:element name="description" type="DescriptionType" />
<xs:attribute name="version" type="xs:string" default="1.0" />
</xs:override>
<xs:complexType name="DescriptionType">
<xs:sequence>
<xs:element name="source" type="xs:string" />
<xs:element name="content" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Warning
XML Schema 1.1
Example 18-12 Overriding named groups¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="DescriptionGroup">
<xs:sequence>
<xs:element name="description" type="xs:string" />
<xs:element name="comment" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:group>
<xs:attributeGroup name="IdentifierGroup">
<xs:attribute name="id" type="xs:ID" use="required" />
<xs:attribute name="version" type="xs:decimal" />
</xs:attributeGroup>
</xs:schema>
Warning
Illegal definition
Example 18-12.2 Overriding named groups¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:override schemaLocation="prod1.xsd">
<!-- SKIPTEST: XML Schema 1.1 -->
<xs:group name="DescriptionGroup">
<xs:sequence>
<xs:element name="description" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:attributeGroup name="IdentifierGroup">
<xs:attribute name="effDate" type="xs:date" />
<xs:attribute name="id" type="xs:ID" />
</xs:attributeGroup>
</xs:override>
</xs:schema>
Warning
XML Schema 1.1
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",
namespace=""
)
)
name: Optional[str] = field(
default=None,
metadata=dict(
name="name",
type="Element",
namespace=""
)
)
size: Optional[str] = field(
default=None,
metadata=dict(
name="size",
type="Element",
namespace=""
)
)
@dataclass
class RestrictedProductType(ProductType):
"""
:ivar number:
:ivar size:
"""
number: Optional[int] = field(
default=None,
metadata=dict(
name="number",
type="Element",
namespace=""
)
)
size: Optional[str] = field(
default=None,
metadata=dict(
name="size",
type="Element",
namespace=""
)
)
@dataclass
class ShirtType(ProductType):
"""
:ivar color:
"""
color: Optional[int] = field(
default=None,
metadata=dict(
name="color",
type="Element",
namespace="",
required=True
)
)
Example 18-13.2 Risks of overriding types¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:override schemaLocation="prod1.xsd">
<!-- SKIPTEST: XML Schema 1.1 -->
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer" />
<xs:element name="name" type="xs:string" />
<xs:element name="color" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:override>
</xs:schema>
Warning
XML Schema 1.1
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-2.2 Redefining a simple type¶
<!-- SKIPTEST -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="prod1.xsd">
<xs:simpleType name="DressSizeType">
<xs:restriction base="DressSizeType">
<xs:minInclusive value="2" />
</xs:restriction>
</xs:simpleType>
</xs:redefine>
<xs:element name="newSize" type="DressSizeType" />
</xs:schema>
Warning
Unsupported feature!
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",
namespace="",
required=True
)
)
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="",
required=True
)
)
Example 18-3.2 Redefining a complex type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="prod1.xsd">
<xs:complexType name="ProductType">
<xs:complexContent>
<xs:extension base="ProductType">
<xs:sequence>
<xs:element name="color" type="xs:string" />
</xs:sequence>
<xs:attribute name="effDate" type="xs:date" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
</xs:schema>
Warning
Illegal definition
Example 18-4 Redefining a named model group as a subset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="DescriptionGroup">
<xs:sequence>
<xs:element name="description" type="xs:string" />
<xs:element name="comment" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:group>
</xs:schema>
Warning
Illegal definition
Example 18-4.2 Redefining a named model group as a subset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="prod1.xsd">
<xs:group name="DescriptionGroup">
<xs:sequence>
<xs:element name="description" type="xs:string" />
</xs:sequence>
</xs:group>
</xs:redefine>
</xs:schema>
Warning
Illegal definition
Example 18-5 Redefining a named model group as a superset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="DescriptionGroup">
<xs:sequence>
<xs:element name="description" type="xs:string" />
<xs:element name="comment" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:group>
</xs:schema>
Warning
Illegal definition
Example 18-5.2 Redefining a named model group as a superset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="example1804-1.xsd">
<xs:group name="DescriptionGroup">
<xs:sequence>
<xs:group ref="DescriptionGroup" />
<xs:element name="notes" type="xs:string" />
</xs:sequence>
</xs:group>
</xs:redefine>
</xs:schema>
Warning
Illegal definition
Example 18-6 Redefining an attribute group as a subset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" />
<xs:attributeGroup name="IdentifierGroup">
<xs:attribute name="id" type="xs:ID" use="required" />
<xs:attribute name="version" type="xs:decimal" />
<xs:attribute ref="xml:lang" />
</xs:attributeGroup>
</xs:schema>
Warning
Illegal definition
Example 18-6.2 Redefining an attribute group as a subset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="prod1.xsd">
<xs:attributeGroup name="IdentifierGroup">
<xs:attribute name="id" type="xs:ID" use="required" />
<xs:attribute name="version" type="xs:integer" />
</xs:attributeGroup>
</xs:redefine>
</xs:schema>
Warning
Illegal definition
Example 18-7 Redefining an attribute group as a superset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" />
<xs:attributeGroup name="IdentifierGroup">
<xs:attribute name="id" type="xs:ID" use="required" />
<xs:attribute name="version" type="xs:decimal" />
<xs:attribute ref="xml:lang" />
</xs:attributeGroup>
</xs:schema>
Warning
Illegal definition
Example 18-7.2 Redefining an attribute group as a superset¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:redefine schemaLocation="prod1.xsd">
<xs:attributeGroup name="IdentifierGroup">
<xs:attributeGroup ref="IdentifierGroup" />
<xs:attribute name="effDate" type="xs:date" />
</xs:attributeGroup>
</xs:redefine>
</xs:schema>
Warning
Illegal definition
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-8.2 A simple override¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://datypic.com/prod" targetNamespace="http://datypic.com/prod">
<xs:override schemaLocation="prod1.xsd">
<!-- SKIPTEST: XML Schema 1.1 -->
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="16" />
</xs:restriction>
</xs:simpleType>
</xs:override>
<xs:element name="newSize" type="DressSizeType" />
</xs:schema>
Warning
XML Schema 1.1
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
)
)
Example 18-9.2 Overriding a simple type¶
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:override schemaLocation="prod1.xsd">
<!-- SKIPTEST: XML Schema 1.1 -->
<xs:simpleType name="DressSizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2" />
<xs:maxInclusive value="18" />
</xs:restriction>
</xs:simpleType>
</xs:override>
<xs:element name="newSize" type="DressSizeType" />
</xs:schema>
Warning
XML Schema 1.1
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR