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

1
<?xml version="1.0" encoding="UTF-8"?>
2
<personnes>
3
    <personne>
4
        <nom>Personne</nom>
5
        <prenom>Terence</prenom>
6
    </personne>
7
    <personne>
8
        <nom>Trinita</nom>
9
        <prenom>Terence</prenom>
10
        <age>40</age>
11
    </personne>
12
</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

1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE personnes SYSTEM "pers.dtd">
3
<personnes>
4
    <personne>
5
        <nom>Personne</nom>
6
        <prenom>Terence</prenom>
7
    </personne>
8
    <personne>
9
        <nom>Trinita</nom>
10
        <prenom>Terence</prenom>
11
        <age>40</age>
12
    </personne>
13
</personnes>
1
<!ELEMENT personnes (personne+) >
2
<!ELEMENT personne (nom, prenom, age?) >
3
<!ELEMENT nom (#PCDATA)>
4
<!ELEMENT prenom (#PCDATA)>
5
<!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

1
<grammar 
2
    xmlns="http://relaxng.org/ns/structure/1.0" 
3
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
4
    <start>
5
        <element name="personnes">
6
            <oneOrMore>
7
                <element name="personne">
8
                    <element name="nom"><text/></element>
9
                    <element name="prenom"><text/></element>
10
                    <optional>
11
                        <element name="age"><data type="integer"/></element>                        
12
                    </optional>
13
                </element>
14
            </oneOrMore>
15
        </element>
16
    </start>
17
</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éments personne, qui appartiennent à l'élément personnes 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 &gt; 30]/nom

Question

Testez vos propositions avec un éditeur XML validant.