Convertisseur XML en XSD

Générez un schéma XSD fonctionnel à partir de n'importe quel document XML. Déduit automatiquement éléments, attributs, types de données et règles d'occurrence dans votre navigateur.

Saisie XML

Laissez vide pour un schéma sans espace de nommage.

Forme par défaut des éléments
Taille de l'indentation

XSD généré

Types complexes réutilisables, un par nom d'élément distinct.

Prêt quand vous l'êtes

Collez du XML à gauche ou chargez l'exemple, puis cliquez sur Générer le schéma XSD.

Noter Convertisseur XML en XSD

Dans quelle mesure cet outil vous a-t-il été utile ? Votre note aide d'autres personnes à le trouver.

Fonctionne entièrement dans votre navigateur

Transformez n'importe quel document XML en schéma XSD fonctionnel

La plupart des générateurs XSD exigent d'installer un logiciel de bureau ou ne gèrent que des documents triviaux. Celui-ci parcourt l'intégralité de votre arbre XML, fusionne les balises répétées en un seul type réutilisable et déduit les types de données ainsi que les règles d'occurrence à partir des valeurs réellement trouvées. Le schéma reflète donc vos données réelles plutôt qu'un modèle générique.

Sortie XML Schema Definition (XSD 1.0)

Ce qui distingue ce générateur XSD

Conçu pour la structure réelle des documents XML, et non pour un exemple de jouet.

  • Règles d'occurrence précises

    Les balises sœurs répétées deviennent automatiquement maxOccurs="unbounded". Un champ absent d'un seul enregistrement reçoit minOccurs="0", pour que le schéma accepte les documents à champs facultatifs.

  • Cinq types de données déduits

    Le texte des feuilles et les valeurs d'attributs sont comparés à xs:integer, xs:decimal, xs:boolean, xs:date et xs:dateTime, avec retour à xs:string dès qu'une valeur ne correspond pas clairement.

  • Types complexes réutilisables

    Chaque nom d'élément distinct reçoit un type complexe nommé, référencé à chaque réapparition. Les balises récursives, comme une structure de dossiers imbriqués, réutilisent le même type au lieu de faire échouer le générateur.

  • Espace de nommage cible facultatif

    Ajoutez un URI d'espace de nommage et choisissez des éléments qualifiés ou non qualifiés, ou laissez le champ vide pour un schéma simple sans espace de nommage.

  • Attributs bien traités

    Les attributs présents sur chaque instance d'un élément deviennent use="required" ; ceux vus seulement sur certaines instances deviennent use="optional", chacun avec son type déduit.

  • Rien ne quitte votre navigateur

    L'analyse, la déduction et la génération du schéma s'exécutent côté client, en JavaScript. Votre XML n'est jamais envoyé ailleurs, ce qui compte pour les configurations internes et les données contenant de vraies valeurs client.

Fonctionnement de la déduction des types

Une référence rapide pour ce que vous verrez dans le schéma généré, et pourquoi.

Fonctionnement de la déduction des types
Motif XMLCe que vérifie l'outilRésultat XSD
Une même balise apparaît deux fois sous un même parentCompte le plus grand nombre de frères observésmaxOccurs="unbounded"
Une balise enfant manque dans un enregistrementVérifie si la balise apparaît sous chaque instance du parentminOccurs="0"
Le texte est toujours composé de nombres entiersTeste chaque valeur échantillonnée contre un motif d'entierxs:integer
Le texte mélange entiers et décimauxTout entier est aussi une valeur décimale validexs:decimal
Le texte mélange nombres et motsAucun motif unique ne correspond à toutes les valeurs échantillonnéesxs:string (repli sûr)
Un élément contient d'autres élémentsConstruit un type complexe nommé et réutilisablexs:complexType avec xs:sequence
Un élément porte un préfixe d'espace de nommageLe préfixe est retiré avant l'analyseNom local de l'élément uniquement

L'outil échantillonne jusqu'à 200 valeurs par champ, ce qui suffit largement à repérer le motif dans des documents courants.

Ce que cet outil ne fait pas

Soyons clairs sur les limites : un schéma déduit d'un seul exemple est un point de départ, pas une spécification certifiée.

  • Il ne résout pas les URI d'espaces de nommage en schémas distincts ; chaque préfixe est retiré, et la sortie ne décrit que les noms locaux des éléments.
  • Le contenu mixte (texte placé à côté d'éléments enfants) est marqué mixed="true", mais il n'est pas modélisé champ par champ.
  • Il déduit les règles à partir de l'échantillon fourni. Un champ qui est un nombre dans votre échantillon, mais qui pourrait contenir du texte ailleurs, sera typé comme nombre ici.
  • Il génère du XSD 1.0, la syntaxe qu'attendent encore presque tous les outils et validateurs XML.

Comment fonctionne Convertisseur XML en XSD

Cet outil lit votre XML dans le navigateur et détermine le schéma XSD correspondant. Il parcourt chaque élément, regroupe ceux qui partagent un même nom de balise où qu'ils apparaissent, puis vérifie combien de fois chaque balise apparaît comme frère. Si un parent contient plusieurs fois une même balise, le schéma la marque maxOccurs="unbounded". Si la balise figure sous chaque instance de son parent, minOccurs reste à 1 ; sinon il passe à 0, pour que le schéma accepte les documents où ce champ est absent.

Les valeurs d'attributs et de texte suivent le même traitement. L'outil échantillonne les valeurs trouvées pour chaque attribut et pour chaque texte de feuille, puis les teste contre des motifs d'entiers, de décimaux, de booléens, de dates et de date-heures. Quand tous les échantillons correspondent à un même motif, celui-ci devient le type XSD. Quand les valeurs divergent, l'outil revient à xs:string, afin que le schéma ne rejette jamais de vraies données à cause d'une ligne inhabituelle.

Les éléments qui contiennent d'autres éléments reçoivent leur propre type complexe nommé, réutilisé partout où la balise réapparaît. Cette réutilisation empêche aussi qu'une structure récursive, comme une arborescence de dossiers construite avec des balises node imbriquées, produise un schéma sans fin.

Les préfixes d'espace de nommage sont retirés avant l'analyse, car deviner la bonne structure avec espaces de nommage à partir d'un seul document d'exemple est peu fiable. Rien de ce que vous collez ou importez ne quitte votre navigateur : le XML est analysé puis abandonné dès que le schéma s'affiche à l'écran.

Comment utiliser Convertisseur XML en XSD

1

Collez ou importez votre XML

Déposez un fichier .xml ou collez directement le balisage. Un catalogue d'exemple est chargé par défaut pour que vous puissiez d'abord voir l'outil en action.

2

Réglez les options du schéma (facultatif)

Ajoutez un espace de nommage cible si votre schéma en a besoin, puis choisissez si les nouveaux éléments sont qualifiés ou non qualifiés. Laissez les deux champs vides pour un schéma simple sans espace de nommage.

3

Générez le schéma

L'outil parcourt tout le document, fusionne les balises répétées et déduit minOccurs, maxOccurs et les types de données de chaque élément et attribut.

4

Copiez ou téléchargez le XSD

Copiez le schéma dans le presse-papiers ou téléchargez-le sous forme de fichier .xsd, puis validez votre XML d'origine avec celui-ci dans votre éditeur ou votre chaîne de traitement.

Exemple d'utilisation

L'élément <price> devient xs:decimal, et <inStock> reçoit minOccurs="0" car un seul des deux livres le contient :

Entrée
Un <catalog> de deux livres avec un attribut de devise et un champ facultatif
Sortie
<xs:element name="catalog" type="CatalogType"/> <xs:complexType name="BookType"> <xs:sequence> <xs:element name="title" type="xs:string" minOccurs="1"/> <xs:element name="price" type="xs:decimal" minOccurs="1"/> <xs:element name="inStock" type="xs:boolean" minOccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> </xs:complexType>

Questions fréquentes

Qu'est-ce qu'un schéma XSD et pourquoi en générer un à partir d'un fichier XML ?
Un XSD (XML Schema Definition) décrit la forme que doit suivre une famille de documents XML : quels éléments et attributs sont autorisés, dans quel ordre, combien de fois ils peuvent se répéter et quel type de données doit porter chaque valeur. L'écrire à la main est long ; cet outil lit un document XML réel et construit un schéma qui lui correspond.
Comment l'outil détermine-t-il si un élément est obligatoire ou facultatif ?
Il examine chaque endroit où une balise apparaît sous la même balise parente dans votre document. Si elle figure sous chaque instance de ce parent, le schéma définit minOccurs="1". Si une seule instance du parent ne la contient pas, minOccurs passe à "0" pour que le schéma accepte aussi les documents où ce champ est absent.
Pourquoi certains éléments reçoivent-ils maxOccurs="unbounded" ?
Cela se produit dès que l'outil trouve plusieurs frères portant le même nom sous une instance du parent, par exemple plusieurs balises <book> dans <catalog>. Une balise qui n'apparaît jamais qu'une fois conserve maxOccurs="1", valeur par défaut du XSD, qui est omise de la sortie pour garder le schéma lisible.
L'outil détecte-t-il automatiquement les nombres, les booléens et les dates ?
Oui. L'outil échantillonne le texte ou les valeurs d'attributs de chaque élément et les compare à des motifs d'entiers, de décimaux, de booléens vrai/faux, de dates et de date-heures. Si tous les échantillons correspondent au même motif, celui-ci devient le type XSD, par exemple xs:integer ou xs:date. Des entiers mélangés à des décimaux donnent xs:decimal, car tout entier est une valeur décimale valide. Si les valeurs ne concordent pas, l'outil revient à xs:string pour ne rejeter aucune donnée.
Que deviennent les espaces de nommage et les préfixes XML ?
Les préfixes d'espace de nommage sont retirés avant la construction du schéma, qui ne décrit alors que les noms locaux des éléments. Déduire de façon fiable une structure avec espaces de nommage à partir d'un seul document d'exemple n'est pas toujours possible pour un outil générique ; c'est donc une limite connue plutôt qu'une supposition silencieuse.
Peut-il gérer un XML très imbriqué ou récursif, comme une arborescence de dossiers ?
Oui. Chaque nom de balise distinct reçoit un seul type complexe partagé. Une structure récursive, comme un <node> qui contient d'autres éléments <node>, réutilise donc la même définition de type au lieu de se dérouler à l'infini. Le schéma reste fini, quelle que soit la profondeur de votre document d'exemple.
Le schéma généré validera-t-il mon fichier XML d'origine ?
Il est construit pour correspondre au document que vous avez fourni, donc la validation de ce même fichier avec le schéma devrait réussir. Un schéma déduit d'un seul exemple est un bon point de départ pour des documents de même forme, mais il peut être plus strict ou plus souple que souhaité pour des cas absents de l'échantillon. Relisez-le avant de l'utiliser en production.
Que se passe-t-il si mon XML mélange texte et éléments enfants dans la même balise ?
On parle de contenu mixte, par exemple <p>Bonjour <b>le monde</b></p>. L'outil le détecte et ajoute mixed="true" au type complexe de cet élément pour que le schéma reste valide, sans chercher à préciser où se situe exactement le texte entre les éléments enfants.
Mon XML est-il envoyé à un serveur ?
Non. L'analyse et la génération du schéma s'exécutent toutes deux dans votre navigateur, en JavaScript. Rien de ce que vous collez ou importez ne quitte votre appareil.
Puis-je définir un espace de nommage cible pour le schéma généré ?
Oui. Saisissez un URI d'espace de nommage dans les options du schéma : l'outil ajoute targetNamespace et xmlns à l'élément <xs:schema> généré et applique le elementFormDefault que vous avez choisi. Laissez le champ vide pour un schéma sans espace de nommage, cas le plus courant pour les XML internes ou de configuration.

Outils associés

Commentaires

Les commentaires sont fournis par Disqus. Les charger vous connecte à Disqus, qui dépose des cookies et traite des données selon sa propre politique de confidentialité.

Convertisseur XML en XSD est maintenu par CodeItBro. Notre objectif est de proposer les meilleurs outils gratuits pour développeurs sur le web. Si vous avez des remarques ou des suggestions, rendez-vous sur notre page de contact.

Cité par

CodeItBro - Free dev tools + practical guides to help you ship faster | Product HuntCodeItBro - Free Online Developer Tools badgeCodeItBro badge