Mon nom est personne
Modélisation XML
45 min
Question
Écrivez un document XML bien formé permettant de représenter des personnes, avec leur nom, leur prénom et leur age.
On représentera deux personnes.
Solution
<personnes>
<personne>
<nom>Personne</nom>
<prenom>Terence</prenom>
</personne>
<personne>
<nom>Trinita</nom>
<prenom>Terence</prenom>
<age>40</age>
</personne>
</personnes>
Question
Écrivez un schéma au format DTD permettant de valider le document précédent, sachant que le nom et le prénom sont obligatoires, mais pas l'age.
Solution
<personnes>
<personne>
<nom>Personne</nom>
<prenom>Terence</prenom>
</personne>
<personne>
<nom>Trinita</nom>
<prenom>Terence</prenom>
<age>40</age>
</personne>
</personnes>
<!ELEMENT personnes (personne+) >
<!ELEMENT personne (nom, prenom, age?) >
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT age (#PCDATA)>
Question
Écrivez à nouveau le schéma, mais au formalisme RelaxNG, en utilisant le typage des données pour représenter l'age comme un integer.
Solution
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<element name="personnes">
<oneOrMore>
<element name="personne">
<element name="nom"><text/></element>
<element name="prenom"><text/></element>
<optional>
<element name="age"><data type="integer"/></element>
</optional>
</element>
</oneOrMore>
</element>
</start>
</grammar>
Question
Écrivez des expressions XPath permettant de sélectionner :
les noms des personnes, c'est à dire les éléments
nom
qui appartiennent à des élémentspersonne
, qui appartiennent à l'élémentpersonnes
qui est à la racine.le nom de la seconde personne
les noms des personnes dont l'age est renseigné
les noms des personnes qui ont plus de 30 ans
Solution
/personnes/personne/nom
/personnes/personne[2]/nom
/personnes/personne[age]/nom
/personnes/personne[age > 30]/nom
Question
Testez vos propositions avec un éditeur XML validant.