Tout d'abord, définissons le format d'un fichier XML de news. Ce dossier ne portant pas directement sur XML, je vous épargnerai l'étape de la DTD, et nous définirons ce format par l'exemple. Par ailleurs, vous noterez que le fichier de news, tout comme celui des changements plus loin, n'est rien d'autre qu'une base de données. En SQL très rudimentaire, nous aurions eu ceci:
1 CREATE TABLE item ( 2 day int, 3 month int, 4 year int, 5 text text 6 )
Evidemment, s'il s'agissait de SQL, les puristes auraient optimisé ceci avec par exemple le type adéquat pour la date. Mais il s'agit de comparer un peu les deux types de bases pour un cas simple. Avant d'abandonner définitivement le sujet du SQL, une remarque. Pour une grosse base de données, il est en général préférable, et de loin, d'utiliser un SGDB relationnel. Mais pour une petite base simple, qui est en plus quasi en lecture seule, un document XML est tout a fait approprié. Les deux sont donc complémentaires, et dans notre cas, c'est le document XML le plus approprié.
Une nouvelle consiste en une date et un contenu, éventuellement un auteur, voire un modérateur quand le site devient assez gros. Dans notre cas, nous nous contenterons que la date et du contenu, l'ajout des auteur et modérateur se faisant simplement ensuite.
Une date peut s'exprimer de différentes manières en XML, comme <date y='yyyy' m='mm' d='dd'/>, ou en allant fouiller du côté du format RDF, ou comme ce que j'ai choisi, <date><year>YYYY</year><month>MM</month><day>DD</day></date>. Le contenu d'une nouvelle s'exprime simplement: <text>nouvelle</text>. Et le tout peut s'encapsuler dans un <item>. Ainsi, il n'y a qu'à mettre autant d'<item> que de nouvelles.
Notre site web a cette particularité de parler plusieurs langues. Il y a donc deux améliorations majeures à apporter. L'une est de supporter différentes langues dans les <text>. Pour cela, rien de tel que que ce tag <span> et son attribut xml:lang que l'on a déjà utilisé pour générer notre site web à partir des pages pseudo-xhtml. Plus compliqué par contre, la génération des dates. En effet, même si cela n'est pas propre à la langue, certains pays ont une notation différente de la date que notre JJ/MM/AAAA. Aux Etats-Unis par exemple, on note MM/DD/YYYY. Mais hors de question de tenir compte de cela dans chaque item. C'est au processeur XSLT d'effectuer la bonne transformation. Cependant, il faut quand même fournir la liste des langues dont l'affichage se fait dans le sens MM/DD/YYYY, le sens par défaut étant DD/MM/YYYY (et pour info, le format ISO 8601 est YYYYMMDD). Pour cela, plusieurs solutions:
un fichier de configuration XML contenant cette liste (le mieux, mais le plus lourd)
une liste dans la feuille XSLT (pas si trivial que cela)
une liste dans le fichier news.db.xml (à éviter absolument: on ne mélange pas les données avec la configuration)
un test exhaustif sur toutes les langues
Pour rester simple, je préfère cette dernière solution, d'autant plus que non seulement c'est simple à faire, mais en plus la liste exhaustive est petite, et se limite à l'anglais dans notre cas.
Voici ce qu'un fichier de nouvelles peut donner...
1 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> 2 <news> 3 <title> 4 <span xml:lang="en">News</span> 5 <span xml:lang="fr">Infos</span> 6 <span xml:lang="es">Noticias</span> 7 </title> 8 <item> 9 <date><year>2003</year><month>03</month><day>21</day></date> 10 <text> 11 <span xml:lang="en">0.2 is out! See <a href="changes.en.html">Changes</a>.</span> 12 <span xml:lang="fr">0.2 est sortie! Voyez les <a href="changes.fr.html">Changements</a>.</span> 13 <span xml:lang="es">0.2 está disponible! Ver <a href="changes.en.html">Cambios</a>.</span> 14 </text> 15 </item> 16 <item> 17 <date><year>2003</year><month>02</month><day>01</day></date> 18 <text> 19 <span xml:lang="en">0.1 is out! See <a href="changes.en.html">Changes</a>.</span> 20 <span xml:lang="fr">0.1 est sortie! Voyez les <a href="changes.fr.html">Changements</a>.</span> 21 <span xml:lang="es">0.1 está disponible! Ver <a href="changes.en.html">Cambios</a>.</span> 22 </text> 23 </item> 24 </news>
Vous excuserez le manque de traduction allemande, mais après tout, cela me permet de vous montrer comment s'en sortir quand on ne connait pas toutes les langues.
© 2003 Yves Mettier