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
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.
À partir du schema pour les cvs.
2004-7
, 2004-12
) et une date de fin au même
format.
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 :
variables
, domaines
, relations
, predicats
,
etc ... qui contiennent chacun au moins un
élément variable
, domaine
, relation
, predicat
,
etc ...instance
sont présentés dans l'ordre où ils se trouvent dans
l'exemple;supports
soit conflicts
;int
comme type valide;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>