Venant en remplacement de la notion de DTD, la norme XSD propose une syntaxe detype XML pour décrire la forme que peut (ou doit) prendre un document conforme. Elle permet de décrire l'ensemble des niveaux d'imbrications d'un document XML, de préciser le type de chaque objet élémentaire, le nombre d'occurences, ... L'écriture d'un schéma "à la main" semble être une activité relativement complexe, du moins si on se réfère au texte de la norme ou aux divers ouvrages sur le sujet, car les possibilités sont multiples. Cela reste cependant une tâche assez standardidée et donc automatisable et de nombreux outils peuvent cependant faciliter cette écriture en proposant un éditeur graphique adapté. Ainsi, Visual Studio .Net offre un tel éditeur graphique et peut même construire le schéma à partir d'un fichier exemple, donnant un diagramme comme celui qui est représenté ci-contre. Ce schéma (créé par VS .Net) correspond au fichier xml que nous avons utilisé dans les exemples précédents et son code complet est reproduit ci-dessous. Ici encore la lecture en est relativement aisée. Après la création, l'éditeur modifie le fichier XML pour inclure une référence au schéma sous la forme : <GENS xmlns="http://tempuri.org/personne21.xsd"> | : |
<?xml version="1.0" ?>
<xs:schema id="GENS" targetNamespace="http://tempuri.org/personne2.xsd"
xmlns:mstns="http://tempuri.org/personne2.xsd" xmlns="http://tempuri.org/personne2.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="GENS" msdata:IsDataSet="true" msdata:Locale="fr-FR"
msdata:EnforceConstraints="False">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="PERSONNE">
<xs:complexType>
<xs:sequence>
<xs:element name="NOM" type="xs:string"
minOccurs="0" />
<xs:element name="TEL" type="xs:string"
minOccurs="0" />
<xs:element name="ADRESSE"
minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="RUE"
type="xs:string" minOccurs="0" />
<xs:element name="CODE"
type="xs:string" minOccurs="0" />
<xs:element name="VILLE"
type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>