Représenter la lettre officielle suivante en utilisant le formalisme XML.
Question
Repérer la structure physique du document.
Question
Déduire une structure logique depuis la structure physique et écrire le document XML correspondant.
Solution
Exemple :
<lettre>
<entete>
<emetteur>
<prenom>Stéphane</prenom>
<nom>Crozat</nom>
<adresse>
<texte>
<paragraphe>UTC</paragraphe>
<paragraphe>60200 Compiègne</paragraphe>
</texte>
</adresse>
</emetteur>
<destinataire>
<titre>Monsieur</titre>
<nom>Dupont</nom>
</destinataire>
<date>2001-03-01</date>
<lieu>Compiègne</lieu>
<objet>Démonstration XML</objet>
</entete>
<corps>
<texte>
<paragraphe>XXXXXXXXXXX...</paragraphe>
<paragraphe>XXXXXXXXXXX...</paragraphe>
<paragraphe>XXXXXXXXXXX...</paragraphe>
</texte>
</corps>
</lettre>
Remarque : Quelques 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
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="www.utc.fr/nf29/tdXml">
<start>
<element name="lettre">
<element name="entete">
<element name="emetteur">
<ref name="personne"/>
</element>
<element name="destinataire">
<ref name="personne"/>
</element>
<element name="date">
<data type="date"/>
</element>
<element name="lieu">
<text/>
</element>
<element name="objet">
<text/>
</element>
</element>
<element name="corps">
<ref name="texte"/>
</element>
</element>
</start>
<define name="personne">
<optional>
<element name="titre">
<text/>
</element>
</optional>
<zeroOrMore>
<element name="prenom">
<text/>
</element>
</zeroOrMore>
<element name="nom">
<text/>
</element>
<optional>
<element name="adresse">
<ref name="texte"/>
</element>
</optional>
</define>
<define name="texte">
<element name="texte">
<oneOrMore>
<element name="paragraphe">
<text/>
</element>
</oneOrMore>
</element>
</define>
</grammar>