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

TypeDescriptionExample
xs:stringAny string"hello"
xs:integerInteger number42
xs:decimalDecimal number3.14
xs:booleanBoolean valuetrue/false
xs:dateDate (YYYY-MM-DD)2024-01-15
xs:dateTimeDate + time2024-01-15T10:30:00
xs:anyURIURI valuehttps://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)