Exercices sur les XML-Schemas

Quelques liens

Voici la spécification de XML schema .

Quelques autres liens :

Ecrire un schéma et valider un document

Pour valider un document xml par rapport à un schéma, celui-ci doit contenir dans son élément racine l'attribut


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Par exemple, soit le schéma monschema.xsd :


<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="prenom" type="xs:string"/>
</xs:schema>

Soit le document XML undoc.xml


<?xml version="1.0" encoding="iso-8859-1"?>

<prenom xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
je ne donnerai pas mon nom.
</prenom>

On peut le valider à l'aide de xmllint par


>xmllint --schema monschema.xsd undoc.xml

Le résultat est


<?xml version="1.0" encoding="iso-8859-1"?>
<prenom xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
je ne donnerai pas mon nom.
</prenom>
undoc.xml validates
Testez l'exemple ci-dessus!

A partir d'un Curriculum Vitae

On se base sur la DTD suivante :


<!ELEMENT moncv (identification,section+)>
<!ELEMENT identification (nom,prenom,mel,adresse,age?)>
<!ELEMENT section (titre,etape+)>
<!ELEMENT etape (titre,descriptif?)>

<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT mel (#PCDATA)>
<!ELEMENT adresse (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT descriptif (#PCDATA)>

<!ATTLIST section type NMTOKEN #REQUIRED>

Ecrivez, dans un premier temps, le schéma XML équivalent à cette DTD. Pour plus de facilité, on déclarera tous les éléments en global, afin de simplifier (notamment) le test de votre schéma.

On désire maintenant assouplir notre DTD. Ecrivez les règles de schéma qui permettent de prendre en compte les modifications suivantes.

L'identification d'une personne peut se faire en indiquant le prénom, ou le nom ou les deux.

On veut pouvoir remplacer le nom et le prénom par un surnom.

Complétez l'identification d'une personne par un élément contact qui contiendra plusieurs numéros de téléphone. Le numéro de téléphone doit être muni d'un attribut qui permettra d'indiquer s'il s'agit d'un numéro de portable, domicile, travail...

Une section commence toujours par un titre, mais peut être suivie d'une série d'étapes et de paragraphes de texte en nombre quelconque. La seule contrainte est qu'il y ait au moins un paragraphe ou une étape (non, actuellement paragraphe n'est pas défini dans la DTD).

Une étape doit avoir deux attributs qui sont les dates de la période de cette étape. La date de début est obligatoire mais la date de fin est optionnelle.

Les observations ornithologiques

Proposez un schéma pour des documents contenant des fiches d'observations ornithologiques comme le document oiseaux2.xml.