Représenter la lettre officielle suivante en utilisant le formalisme XML.
Repérer la structure physique du document.
Déduire une structure logique depuis la structure physique et écrire le document XML correspondant.
<?xml version="1.0"?>
<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>
s</corps>
</lettre>
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.
Écrire le schéma RelaxNG des lettres respectant ce modèle.
Utiliser :
Des patterns, par exemple Texte = paragraphe+
Des datatype, par exemple pour la date
Proposer votre propre namespace
<?xml version="1.0" encoding="UTF-8"?>
<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"></ref>
</element>
<element name="date"><data type="date"></data></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>