Générateur XSD

Générer un schéma XML à partir d'exemples

code

Document XML (Entrée)

1
description

Schéma XSD (Sortie)

Fournissez un texte au format XML et cliquez sur "Générer le Schéma XSD" pour voir le résultat ici.
Comprendre Schemas XSD
TL;DR

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 specifie
  • xs:choice — Exactement un des enfants doit apparaitre
  • xs:all — Tous les enfants doivent apparaitre, mais dans n’importe quel ordre
XML to XSD Schema Mapping A simple XML document on the left with person, name, and age elements, mapped with arrows to corresponding XSD declarations on the right. XML Document <person> <name> Alice </name> <age> 30 </age> </person> XSD Schema <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>

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 :

TypeDescriptionValeurs exemples
xs:stringTexte Unicode"Hello", "Cafe\u0301"
xs:integerNombre entier (illimite)42, -7, 0
xs:decimalNombre decimal exact3.14, -0.001
xs:booleanVrai ou fauxtrue, false, 1, 0
xs:dateDate calendaire (ISO 8601)2024-03-15
xs:dateTimeDate et heure avec fuseau horaire2024-03-15T14:30:00Z
xs:anyURIReference URIhttps://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

FonctionnaliteDTDXSDRELAX NG
SyntaxeNon XMLXMLXML ou compacte
Types de donneesAucun44+ natifsExtensibles
Espaces de nomsLimitesSupport completSupport complet
ContraintesBasiquesRiches (facettes, cles, identite)Moderees
Adoption industrielleLegacyDominante (SOAP, ISO 20022)Niche (DocBook, TEI)
ComplexiteFaibleEleveeMoyenne
Standard W3COui (XML 1.0)OuiOASIS (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

XSD simple definissant une personne Valide

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>
XML violant le schema Invalide

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>