XML Schema Guide
Basic XSD Structure
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="email" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="active" type="xs:boolean" default="true"/>
</xs:complexType>
</xs:element>
</xs:schema>
Common XSD Types
| Type | Description | Example |
|---|---|---|
| xs:string | Any string | "hello" |
| xs:integer | Integer number | 42 |
| xs:decimal | Decimal number | 3.14 |
| xs:boolean | Boolean value | true/false |
| xs:date | Date (YYYY-MM-DD) | 2024-01-15 |
| xs:dateTime | Date + time | 2024-01-15T10:30:00 |
| xs:anyURI | URI value | https://example.com |
Restrictions
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- Pattern restriction -->
<xs:element name="zip">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{5}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- Enum -->
<xs:simpleType name="Status">
<xs:restriction base="xs:string">
<xs:enumeration value="active"/>
<xs:enumeration value="inactive"/>
</xs:restriction>
</xs:simpleType>
Validate XML with Python
from lxml import etree
# Load schema
with open('schema.xsd') as f:
schema = etree.XMLSchema(etree.parse(f))
# Parse and validate
with open('data.xml') as f:
doc = etree.parse(f)
if schema.validate(doc):
print("Valid!")
else:
print(schema.error_log)