Schéma XSD pour valider un fichier XML
Le fichier XML
<?xml version="1.0" encoding="UTF-8"?>
<contacts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="contacts.xsd">
<person>
<avatar>avatars/avatar3.png</avatar>
<firstname>Jane</firstname>
<lastname>Doe</lastname>
<email>jane.doe@example.com</email>
<phone>0600000000</phone>
</person>
<person>
<firstname>John</firstname>
<lastname>Doe</lastname>
<email>john.doe@example.com</email>
<phone>0600000001</phone>
</person>
<person>
<avatar>avatars/avatar1.png</avatar>
<firstname>Sherlock</firstname>
<lastname>Holmes</lastname>
<email>sherlock.holmes@example.com</email>
<phone>0600000002</phone>
</person>
<person>
<avatar>avatars/avatar2.png</avatar>
<firstname>Bruce</firstname>
<lastname>Wayne</lastname>
<email>bruce.wayne@example.com</email>
<phone>0600000003</phone>
</person>
<person>
<avatar>avatars/avatar4.png</avatar>
<firstname>John</firstname>
<lastname>Smith</lastname>
<email>john.smith@example.com</email>
<phone>0600000004</phone>
</person>
</contacts>
Le schéma XSD
Pour valider le fichier XML on peut utiliser le schéma suivant (Russian Doll Design) :
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="contacts">
<xs:complexType>
<xs:sequence>
<xs:element name="person" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<!-- Avatar est optionnel et n'apparait qu'une seule fois -->
<xs:element name="avatar" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- L'URL doit avoir le format avatars/avatar[nombre].png (Regex) -->
<xs:pattern value="avatars\/avatar\d+\.png" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- firstname est requis et n'apparait qu'une seule fois -->
<xs:element name="firstname">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Commence par une majuscule et se termine par un mot de 0 à
30 caractères (Regex) -->
<xs:pattern value="[A-Z]\w{0,30}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- lastname est requis et n'apparait qu'une seule fois -->
<xs:element name="lastname">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Commence par une majuscule et se termine par un mot de 0 à
30 caractères (Regex) -->
<xs:pattern value="[A-Z]\w{0,30}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- email ou phone est requis (les deux peuvent être indiqués) -->
<xs:choice>
<xs:sequence>
<xs:element name="email">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Valide le format d'un email (Regex) -->
<xs:pattern
value="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="phone" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Valide le format d'un numéro de téléphone commencant par
06 (Regex) -->
<xs:pattern value="06[0-9]{8}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="email" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Valide le format d'un email (Regex) -->
<xs:pattern
value="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="phone">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Valide le format d'un numéro de téléphone commencant par
06 (Regex) -->
<xs:pattern value="06[0-9]{8}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
L'élément contacts peut contenir aucun, un ou plusieurs éléments person
Chaque élément person doit contenir les éléments dans l'ordre.
Chaque élément est validé avec une expression régulière (les expressions sont des exemples pas forcément adéquats pour toutes les situations)
Il faut au moins un élément email ou phone (ou les deux).
Schéma dans Eclipse
Vous pouvez effectuer un clic droit sur votre fichier XML et validate pour valider le fichier XML. Vous pouvez consulter les schémas en cliquant sur l'onglet Design (en bas du fichier XSD ouvert)
Le schéma contacts
Le schéma contactsType
Le schéma personType
Commentaires
Enregistrer un commentaire