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 nom, ou le pré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 oiseaux.xml.

Dériver de nouveaux types

À partir du schema pour les cvs.

Contraignez le type pour l'attribut qui précise l'origine du numéro de téléphone.
Les numéros de téléphone sont des listes de cinq entiers à deux chiffres.
Contraignez la valeur possible pour l'âge.
Les périodes doivent maintenant être données avec une date de début au format année-mois (exemples de valeurs valides : 2004-7, 2004-12) et une date de fin au même format.

Contraintes CSP - Un TP à rendre pour le Jeudi 11 Décembre 2008

Ce sujet sera (légèrement) étendu la semaine prochaine.

Récupérez le fichier ci-joint exempleCSP2.xml .

Vous devez proposer un schéma qui modélise une contrainte CSP exprimée en XML. Voilà quelques indications complémentaires :

Ce qui n'a pas à être vérifié par le schéma :

Le schéma devra être rendu avec des commentaires sur la structure utilisée. Pour cela, vous utiliserez les éléments xs:annotation et xs:documentation :


  <xsd:simpleType name="monTypeAmoi">
    <xsd:annotation>
      <xsd:documentation>
         Ici j'attends une description du type et à quoi il sert, ou
         toute autre information utile à sa compréhension.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:token">
      <xsd:enumeration value="toto fait du vélo."/>
      <xsd:enumeration value="titi fait du bateau."/>
    </xsd:restriction>
  </xsd:simpleType>