Résumé
Les schémas contiennent les règles que doit respecter un document XML pour être valide. Autrement dit, quels sont les éléments et attributs autorisés, et dans quel ordre. De la même façon qu'on ne conçoit pas une base de données sans avoir déterminé sa structure, on ne devrait pas concevoir un système d'informations basé sur XML sans en avoir conçu le ou les schémas.
Avant même de définir des types, un schéma définit un vocabulaire (d'éléments et d'attributs). A l'imitation de l'anglais, on parle d'"espace de noms" (namespace). L'utilisateur d'un schéma finit un jour ou l'autre par être en contact avec ces noms (exemple: un éditeur XML). Le développeur travaille tout le temps avec. C'est ici qu'il faut réfléchir au choix de la langue, des conventions textuelles, du vocabulaire...
Un projet de modélisation engage avant tout un travail intellectuel de définition. Cependant à terme, il faut choisir un langage de schéma qui recueille au mieux le résultat de cette réflexion. Plusieurs langages sont actuellement disponibles.
Un schéma spécifie des noms (éléments et attributs)
Un schéma peut spécifier des contenus. La plupart des langages permettent de définir des contraintes sur le contenu des attributs (listes) <fichier type="image|texte|son"/>. Certaines syntaxes permettent de définir des motifs plus élaborés, tant sur les attributs que dans les éléments <date>2003-02-08</date>.
Quels attributs et éléments peuvent être associés pour définir une structure.
Tous les langages de schémas permettent ainsi de définir des structures de ce genre, ou chaque <adresse/> devra au moins contenir <no/><rue/><cp/><ville/>, et parfois, un <complement/> facultatif, qui sera toujours au début.
<adresse>
<complement>facultatif</complement>
<no>17</no>
<rue>Vital-Carles</rue>
<cp>33 0000</cp>
<ville>Bordeaux</ville>
</adresse>
On peut aussi définir des structures plus abstraites, mais aussi plus documentaires. Exemple, un livre sera une suite de sections imbriquées ayant toute un titre et un résumé :
<livre>
<titre>livre</titre>
<section>
<titre>Chapitre I</titre>
<resume>résumé</resume>
[...]
</section>
<section>
<titre>Chapitre II</titre>
<resume/>
[...]
<section>
<titre>Partie II.A</titre>
<resume/>
[...]
</section>
</section>
</livre>