Générateur XSD
Générer un schéma XML à partir d'exemples
Document XML (Entrée)
Schéma XSD (Sortie)
XSD decrit formellement la structure, le contenu et les contraintes d'un document XML. C'est le plan qui definit quels elements, attributs et types de donnees sont autorises.
Qu’est-ce que XSD ?
XSD (XML Schema Definition) est un standard W3C pour decrire la structure et les contraintes des documents XML. Pensez-y comme un contrat : le XSD definit quels elements, attributs et types de donnees sont autorises, et un validateur XML verifie si un document donne est conforme.
Avant XSD, les developpeurs utilisaient les DTD (Document Type Definitions) pour decrire la structure XML. Les DTD etaient simples mais limitees — elles ne pouvaient pas exprimer de types de donnees (le contenu d’un element etait simplement du “texte”), ne pouvaient pas definir de contraintes complexes et utilisaient une syntaxe non XML. XSD a ete cree pour repondre a toutes ces lacunes tout en etant exprime en XML lui-meme.
XSD est fondamental pour l’integration en entreprise. Il alimente les services web SOAP (les fichiers WSDL referencent des schemas XSD), les standards de messagerie financiere comme ISO 20022 et SWIFT MX, les standards de sante comme HL7 CDA, et les formats d’echange de donnees gouvernementaux dans le monde entier.
Elements et types complexes
Les schemas XSD sont construits a partir de deux concepts fondamentaux : les elements et les types.
Une declaration d’element definit une donnee nommee qui peut apparaitre dans un document XML :
<xs:element name="email" type="xs:string"/>
Un type complexe definit un element qui contient des elements enfants ou des attributs :
<xs:complexType name="PersonType">
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
<xs:element name="email" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>
Les compositeurs (xs:sequence, xs:choice, xs:all) controlent comment les elements enfants apparaissent :
xs:sequence— Les enfants doivent apparaitre dans l’ordre specifiexs:choice— Exactement un des enfants doit apparaitrexs:all— Tous les enfants doivent apparaitre, mais dans n’importe quel ordre
Types de donnees natifs
XSD fournit un riche ensemble de types de donnees natifs qui vont bien au-dela de l’approche “tout est texte” des DTD :
| Type | Description | Valeurs exemples |
|---|---|---|
xs:string | Texte Unicode | "Hello", "Cafe\u0301" |
xs:integer | Nombre entier (illimite) | 42, -7, 0 |
xs:decimal | Nombre decimal exact | 3.14, -0.001 |
xs:boolean | Vrai ou faux | true, false, 1, 0 |
xs:date | Date calendaire (ISO 8601) | 2024-03-15 |
xs:dateTime | Date et heure avec fuseau horaire | 2024-03-15T14:30:00Z |
xs:anyURI | Reference URI | https://example.com |
Vous pouvez contraindre davantage ces types a l’aide de facettes — des restrictions comme minInclusive, maxInclusive, pattern, enumeration, minLength et maxLength. Par exemple, pour definir un age entre 0 et 150 :
<xs:simpleType name="AgeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
XSD vs DTD vs RELAX NG
| Fonctionnalite | DTD | XSD | RELAX NG |
|---|---|---|---|
| Syntaxe | Non XML | XML | XML ou compacte |
| Types de donnees | Aucun | 44+ natifs | Extensibles |
| Espaces de noms | Limites | Support complet | Support complet |
| Contraintes | Basiques | Riches (facettes, cles, identite) | Moderees |
| Adoption industrielle | Legacy | Dominante (SOAP, ISO 20022) | Niche (DocBook, TEI) |
| Complexite | Faible | Elevee | Moyenne |
| Standard W3C | Oui (XML 1.0) | Oui | OASIS (ISO/IEC 19757-2) |
DTD est le langage de schema XML original, defini comme partie de la specification XML 1.0 elle-meme. Il utilise une syntaxe non XML et n’a aucun concept de types de donnees — tout le contenu des elements est simplement du texte. Les DTD sont encore utilisees dans les systemes legacy et pour declarer des entites, mais elles sont inadequates pour les besoins modernes de validation.
XSD est la reponse du W3C aux limitations des DTD. Il offre un systeme de types complet, le support des espaces de noms et des mecanismes de contraintes puissants. Cependant, sa verbosite et sa complexite font l’objet de critiques frequentes — meme des schemas simples peuvent etre verbeux.
RELAX NG est une troisieme option qui vise un juste milieu : plus puissant que DTD, plus simple que XSD. Il offre a la fois une syntaxe XML et une syntaxe compacte plus lisible. Bien que techniquement superieur a bien des egards, il n’a pas atteint la domination de marche de XSD et est principalement utilise dans l’edition (DocBook) et les humanites numeriques (TEI).
Cas d’utilisation courants
- Services web SOAP : Les fichiers WSDL utilisent XSD pour definir la structure des messages de requete et de reponse echanges entre services
- Messagerie financiere (ISO 20022) : Le standard mondial de messagerie financiere utilise XSD pour definir chaque type de message — de l’initiation de paiement (pain.001) aux releves de compte (camt.053)
- Validation de configuration : Les fichiers de configuration d’applications en XML peuvent etre valides par rapport a un XSD pour detecter les erreurs avant le deploiement
- Echange de donnees : Les integrations B2B utilisent XSD pour formaliser le contrat entre partenaires commerciaux, garantissant que les deux parties produisent et consomment des documents conformes
- Generation de code : Des outils comme JAXB (Java), xsd.exe (.NET) et xmlschema (Python) generent des classes a partir de XSD, permettant un traitement XML type-safe sans analyse manuelle
Essayez ces exemples
Un schema XSD minimal definissant un element 'person' avec des elements enfants obligatoires 'name' (chaine) et 'age' (entier) en sequence. Tout document XML avec une racine <person> contenant ces deux elements dans l'ordre sera valide.
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'><xs:element name='person'><xs:complexType><xs:sequence><xs:element name='name' type='xs:string'/><xs:element name='age' type='xs:integer'/></xs:sequence></xs:complexType></xs:element></xs:schema> Ce XML a la structure correcte mais 'not-a-number' n'est pas un xs:integer valide. Le validateur XSD rejettera ce document avec une violation de contrainte de type sur l'element 'age'.
<person><name>Alice</name><age>not-a-number</age></person>