Représenter la lettre officielle suivante en utilisant le formalisme XML.

Une lettre

Question

Repérer la structure physique du document.

Solution

Structure physique de la lettre XML

Question

Déduire une structure logique depuis la structure physique et écrire le document XML correspondant.

Solution

Exemple
1
<?xml version="1.0"?>
2
<lettre>
3
    <entete>
4
        <emetteur>
5
            <prenom>Stéphane</prenom>
6
            <nom>Crozat</nom>
7
            <adresse>
8
                <texte>
9
                    <paragraphe>UTC</paragraphe>
10
                    <paragraphe>60200 Compiègne</paragraphe>
11
                </texte>
12
            </adresse>
13
        </emetteur>
14
        <destinataire>
15
            <titre>Monsieur</titre>
16
            <nom>Dupont</nom>
17
        </destinataire>
18
        <date>2001-03-01</date>
19
        <lieu>Compiègne</lieu>
20
        <objet>Démonstration XML</objet>
21
    </entete>
22
    <corps>
23
        <texte>
24
            <paragraphe>XXXXXXXXXXX...</paragraphe>
25
            <paragraphe>XXXXXXXXXXX...</paragraphe>
26
            <paragraphe>XXXXXXXXXXX...</paragraphe>
27
        </texte>
28
    </corps>
29
</lettre>
RemarqueQuelques remarques

La structure logique est très éloignée de la mise en forme dans la page. En particulier aucune information n'est présente sur la localisation dans la page des informations, c'est la structure d'une lettre qui les prescrira à partir des descripteurs logiques.

On note que certains éléments, s'ils sont calculables, n'ont pas besoins d'être spécifiés dans la structure logique, comme ici la formule de politesse et la signature.

Question

Écrire le schéma RelaxNG des lettres respectant ce modèle.

Indice

Utiliser :

  • Des patterns, par exemple Texte = paragraphe+

  • Des datatype, par exemple pour la date

  • Proposer votre propre namespace

Solution

1
<?xml version="1.0" encoding="UTF-8"?>
2
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
3
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="www.utc.fr/nf29/tdXml">
4
    <start>
5
        <element name="lettre">
6
            <element name="entete">
7
                <element name="emetteur">
8
                    <ref name="personne"/>
9
                </element>
10
                <element name="destinataire">
11
                    <ref name="personne"/>
12
                </element>
13
                <element name="date">
14
                    <data type="date"/>
15
                </element>
16
                <element name="lieu">
17
                    <text/>
18
                </element>
19
                <element name="objet">
20
                    <text/>
21
                </element>
22
            </element>
23
            <element name="corps">
24
                <ref name="texte"/>
25
            </element>
26
        </element>
27
    </start>
28
    <define name="personne">
29
        <optional>
30
            <element name="titre">
31
                <text/>
32
            </element>
33
        </optional>
34
        <zeroOrMore>
35
            <element name="prenom">
36
                <text/>
37
            </element>
38
        </zeroOrMore>
39
        <element name="nom">
40
            <text/>
41
        </element>
42
        <optional>
43
            <element name="adresse">
44
                <ref name="texte"/>
45
            </element>
46
        </optional>
47
    </define>
48
    <define name="texte">
49
        <element name="texte">
50
            <oneOrMore>
51
                <element name="paragraphe">
52
                    <text/>
53
                </element>
54
            </oneOrMore>
55
        </element>
56
    </define>
57
</grammar>