<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>z720.net &#187; Traductions</title>
	<atom:link href="http://z720.net/blog/categories/web/traductions/feed" rel="self" type="application/rss+xml" />
	<link>http://z720.net</link>
	<description>Web / Inspiration / Photos</description>
	<lastBuildDate>Sun, 30 Oct 2011 17:02:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>DashBar en chinois</title>
		<link>http://z720.net/blog/archives/2006/11/21/dashbar-en-chinois</link>
		<comments>http://z720.net/blog/archives/2006/11/21/dashbar-en-chinois#comments</comments>
		<pubDate>Tue, 21 Nov 2006 21:21:57 +0000</pubDate>
		<dc:creator>Seb</dc:creator>
				<category><![CDATA[DÃ©veloppement]]></category>
		<category><![CDATA[DashBar]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Traductions]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://v05.z720.net/blog/archives/2006/11/21/dashbar-en-chinois</guid>
		<description><![CDATA[Le plugin DashBar s&#8217;attaque Ã  la Chine&#8230; Merci Ã  Mimosa pour sa traduction en chinois simplfiÃ©e du plugin.]]></description>
			<content:encoded><![CDATA[<p>Le <a href="http://v05.z720.net/produits/wordpress/dashbar/">plugin DashBar</a> s&#8217;attaque Ã  la Chine&#8230; Merci Ã  <a href="http://www.shareday.com">Mimosa</a> pour sa <a href="http://www.shareday.com/blog/wp-content/plugins/DashBar/" title="TÃ©lÃ©charger la localisation chnoise du plugin DashBar">traduction en chinois simplfiÃ©e du plugin</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://z720.net/blog/archives/2006/11/21/dashbar-en-chinois/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2 en franÃ§ais</title>
		<link>http://z720.net/blog/archives/2005/12/27/wordpress-2-en-francais</link>
		<comments>http://z720.net/blog/archives/2005/12/27/wordpress-2-en-francais#comments</comments>
		<pubDate>Tue, 27 Dec 2005 11:15:05 +0000</pubDate>
		<dc:creator>Seb</dc:creator>
				<category><![CDATA[Traductions]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://v05.z720.net/blog/archives/2005/12/27/wordpress-2-en-francais</guid>
		<description><![CDATA[La version 2.0 de WordPress vient de sortir. Je vous anonce donc la sortie de la version franÃ§aise. Le package, les thÃ¨mes et les messages sont maintenant disponibles au tÃ©lÃ©chargement. Voici les liens : Package Version FranÃ§aise Les thÃ¨mes de &#8230; <a href="http://z720.net/blog/archives/2005/12/27/wordpress-2-en-francais">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>La version 2.0 de WordPress vient de sortir.</p>
<p>Je vous anonce donc la sortie de la version franÃ§aise. Le package, les thÃ¨mes et les messages sont maintenant disponibles au tÃ©lÃ©chargement.</p>
<p><span id="more-154"></span></p>
<p> Voici les liens :</p>
<ul>
<li><a href="http://svn.automattic.com/wordpress-i18n/fr_FR/branches/2.0/wordpress-2.0-fr_FR.zip">Package Version FranÃ§aise</a></li>
<li><a href="http://svn.automattic.com/wordpress-i18n/fr_FR/branches/2.0/theme/themes-classic-default.zip">Les thÃ¨mes de base en VF</a></li>
<li>Le fichier de traduction <a href="http://svn.automattic.com/wordpress-i18n/fr_FR/branches/2.0/messages/fr_FR.po">po</a> et <a href="http://svn.automattic.com/wordpress-i18n/fr_FR/branches/2.0/messages/fr_FR.mo">mo</a> en UTF-8</li>
</ul>
<p>Retrouvez toutes les informations sur <a href="http://xavier.borderie.net/wp-fr/">le blog de la traduction franÃ§aise</a> et le <a href="http://codex.wordpress.org/WordPress_in_Your_Language#Version_2.0_FR">codex</a></p>
<p>A installer sans modÃ©ration&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://z720.net/blog/archives/2005/12/27/wordpress-2-en-francais/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Contribution Ã  la communautÃ© franÃ§aise de WordPress</title>
		<link>http://z720.net/blog/archives/2005/07/28/contribution-a-la-communaute-francaise-de-wordpress</link>
		<comments>http://z720.net/blog/archives/2005/07/28/contribution-a-la-communaute-francaise-de-wordpress#comments</comments>
		<pubDate>Thu, 28 Jul 2005 06:26:35 +0000</pubDate>
		<dc:creator>Seb</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Traductions]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://v05.z720.net/?p=103/index.php</guid>
		<description><![CDATA[Version franÃ§aise de WordPress 1.5. Avec un train de retard. Je viens de retrouver tout Ã  fait par hasard un billet sur la traduction de WordPress en franÃ§ais Ã  laquelle j&#8217;ai participÃ©. Bien Ã©videmment, je ne me souvenais plus du &#8230; <a href="http://z720.net/blog/archives/2005/07/28/contribution-a-la-communaute-francaise-de-wordpress">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Version franÃ§aise de WordPress 1.5. Avec un train de retard.</p>
<p><span id="more-103"></span></p>
<p>Je viens de retrouver tout Ã  fait par hasard <a href="http://xavier.borderie.net/wp-fr/?p=35">un billet sur la traduction de WordPress en franÃ§ais </a> Ã  laquelle j&#8217;ai participÃ©. Bien Ã©videmment, je ne me souvenais plus du tout de cette contribution.</p>
<p>A l&#8217;Ã©poque, je cherchais Ã  traduire WordPress en FranÃ§ais et je suis tombÃ© sur le <a href="http://xavier.borderie.net/blog/">site de Xavier Broderie</a> et <a href="http://xavier.borderie.net/wp-fr">son site de dÃ©mo de la VF</a>. En croisant, avec d&#8217;autres weblog, j&#8217;Ã©tais tombÃ© sur <a href="https://launchpad.ubuntu.com/rosetta/products/wordpress/wordpress-1.5">le projet de traduction sur la plate-forme Rosetta </a>. J&#8217;avais tant bien que mal utilisÃ© l&#8217;outil pour donner un coup de main. Mais au moment d&#8217;extraire le fichier pour le tester chez moi, la fonctionnalitÃ© d&#8217;extraction ne voulait obstinÃ©ment pas fonctionner, je m&#8217;Ã©tais donc rÃ©signÃ© Ã  utiliser <a href="http://www.poedit.org/">poEdit</a> pour achever le travail.</p>
<p>Je suis trÃ¨s content que le projet soit sorti, mÃªme si je ne m&#8217;en suis pas rendu compte&#8230; Je vais voir le rÃ©sultat pour le comparer Ã  &laquo;&nbsp;ma version&nbsp;&raquo; franÃ§aise. En tout cas, Ã§a donne en vie de s&#8217;investir et surtout cela donne un cadre pour le faire.</p>
<p>Point d&#8217;entrÃ©s dans la communautÃ© franÃ§ais de WordPress :</p>
<ul>
<li><a href="http://codex.wordpress.org/fr:Main_Page">Accueil FranÃ§ais du Codex WordPress</a></li>
<li><a href="http://comox.textdrive.com/pipermail/wp-polyglots/">Liste de diffusion WP-Polygots</a></li>
</ul>
<p><a href="http://codex.wordpress.org/User:SebErard">Ma page sur le codex</a></p>
]]></content:encoded>
			<wfw:commentRss>http://z720.net/blog/archives/2005/07/28/contribution-a-la-communaute-francaise-de-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Liens interessants</title>
		<link>http://z720.net/blog/archives/2005/06/18/liens-interessants</link>
		<comments>http://z720.net/blog/archives/2005/06/18/liens-interessants#comments</comments>
		<pubDate>Sat, 18 Jun 2005 09:12:17 +0000</pubDate>
		<dc:creator>Seb</dc:creator>
				<category><![CDATA[DÃ©veloppement]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Traductions]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WebStandards]]></category>

		<guid isPermaLink="false">http://v05.z720.net/blog/archives/2005/04/26/embellir-les</guid>
		<description><![CDATA[Voici quelques liens intÃ©ressants. Relooker la balise select : comment faire pour modiifer l&#8217;aspect des select dans les formulaires Relooker la balise select le retour : La suite de l&#8217;article prÃ©cÃ©dent qui se penche sur les problÃ¨mes d&#8217;accessibilitÃ©s Top 50 &#8230; <a href="http://z720.net/blog/archives/2005/06/18/liens-interessants">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Voici quelques liens intÃ©ressants.</p>
<p><span id="more-83"></span></p>
<ul>
<li><a href="http://easy-designs.net/articles/replaceSelect/">Relooker la balise select</a> : comment faire pour modiifer l&#8217;aspect des select dans les formulaires</li>
<li><a href="http://easy-designs.net/articles/replaceSelect2/">Relooker la balise select le retour</a> : La suite de l&#8217;article prÃ©cÃ©dent qui se penche sur les problÃ¨mes d&#8217;accessibilitÃ©s</li>
<li><a href="http://www.cybercodeur.net/weblog/commentaires/detailsCarnet.php?idmessage=1158">Top 50 des sites francophones non-conforme</a> : Petite Ã©tude lancÃ©e par Denis Boudreau il y a quelques jours.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://z720.net/blog/archives/2005/06/18/liens-interessants/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DÃ©clencheurs JavaScript</title>
		<link>http://z720.net/blog/archives/2005/04/29/declencheurs-javascript</link>
		<comments>http://z720.net/blog/archives/2005/04/29/declencheurs-javascript#comments</comments>
		<pubDate>Fri, 29 Apr 2005 06:34:21 +0000</pubDate>
		<dc:creator>Seb</dc:creator>
				<category><![CDATA[DÃ©veloppement]]></category>
		<category><![CDATA[Traductions]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WebStandards]]></category>

		<guid isPermaLink="false">http://v05.z720.net/blog/archives/2005/04/29/declencheurs-javascript</guid>
		<description><![CDATA[En dÃ©pit de la stricte sÃ©paration, les couches de prÃ©sentation et de comportement ont besoin d&#8217;instructions de la couche structurelle. Elles ont besoin de savoir oÃ¹ ajouter cette jolie touche de style, quand initier ces petites actions qui font la &#8230; <a href="http://z720.net/blog/archives/2005/04/29/declencheurs-javascript">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p> En dÃ©pit de la stricte sÃ©paration, les couches de prÃ©sentation et de comportement ont besoin d&#8217;instructions de la couche structurelle. Elles ont besoin de savoir oÃ¹ ajouter cette jolie touche de style, quand initier ces petites actions qui font la diffÃ©rence. Elles ont besoin de dÃ©clencheurs. </p>
<p>Traduction de l&#8217;article <a href="http://alistapart.com/articles/javascripttriggers/" hreflang="en">JavaScript Triggers</a>. <br />Translated with the permission of A List Apart Magazine (<a href="http://www.alistapart.com" hreflang="en">http://alistapart.com</a>) and the author[s].</p>
<p><span id="more-69"></span>
<p> L&#8217;affichage d&#8217;une page web consiste en 3 couches. Le fichier XHTML reprÃ©sentent la couche structurelle qui contient la structure, la sÃ©mantique et le contenu du site. &Agrave; cette couche, il est possible de joindre une couche de mise en page (CSS) et une couche comportementale (JavaScript) afin de rendre le site plus beau et plus facile Ã  utiliser. Ces trois couches doivent rester strictement sÃ©parÃ©es. On peut de cette faÃ§on changer toute la mise en page sans toucher ni Ã  la structure ni aux comportements. </p>
<p>En dÃ©pit de la stricte sÃ©paration, les couches de prÃ©sentation et de comportement ont besoin d&#8217;instructions de la couche structurelle. Elles  en ont besoin pour savoir oÃ¹ ajouter cette jolie touche de style, quand initier cette petite action qui fait la diffÃ©rence. Elles ont besoin de dÃ©clencheurs</p>
<p>Les dÃ©clencheurs CSS sont bien connus. Les attributs <code>class</code> et <code>id</code> vous permettent de contrÃ´ler totalement la prÃ©sentation de vos sites web. Bien qu&#8217;il soit possible de travailler sans ces dÃ©clencheurs, en plaÃ§ant les instructions en ligne dans l&#8217;attribut <code>style</code>, cette mÃ©thode de codage est Ã  proscrire. Si vous voulez redÃ©finir la prÃ©sentation de votre site avec cette mÃ©thode, vous allez devoir modifier la couche structurelle en mÃªme temps, il s&#8217;agit d&#8217;une entorse Ã  la rÃ©gle de sÃ©paration de la prÃ©sentation et de la structure.</p>
<h2>DÃ©clencheurs JavaScript</h2>
<p>La couche comportementale doit fonctionner de la mÃªme maniÃ¨re. Il faut <a href="http://www.digital-web.com/articles/separating_behavior_and_structure_2/" hreflang="en"> sÃ©parer le comportement de la structure</a> en vous sÃ©parant des gestionnaires d&#8217;Ã©venements en ligne comme celui-ci : <code>onmouseover="switchImages('fearful',6,false)"</code>. &Agrave; la place, comme en CSS, nous allons utiliser des dÃ©clencheurs pour informer le script permettant la mise en oeuvre du comportement adÃ©quate.</p>
<p>Le dÃ©clencheur JavaScript le plus simple est l&#8217;attribut <code>id</code> :</p>
<pre class="html"><code>&lt;div id="navigation"&gt;
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="#"&gt;Link 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#"&gt;Link 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="#"&gt;Link 3&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/div&gt;
</code></pre>
<pre class="javascript"><code>var x = document.getElementById('navigation');
if (!x) return;
var y = x.getElementsByTagName('a');
for (var i=0;i&lt;y.length;i++)
 y[i].onmouseover = addBehavior;
</code></pre>
<p>Avec ce code, le comportement est dÃ©clenchÃ© par la prÃ©sence ou l&#8217;absence de <code>id="navigation"</code>. S&#8217;il est absent, il ne se passe rien (<code>if (!x) return</code>), mais s&#8217;il est prÃ©sent tous les Ã©lÃ©ments liens qui en descendent auront un comportement au survol. Cette solution est simple et Ã©lÃ©gante, et elle fonctionne dans tous les navigateurs. Si l&#8217;<code>id</code> permet de couvrir vos besoins, vous n&#8217;avez pas besoin de lire la suite de cet article.</p>
<h2>DÃ©clencheurs avancÃ©s</h2>
<p>Malheureusement, dans certaines situations il est impossible d&#8217;utiliser l&#8217;attribut <code>id</code> comme dÃ©clencheur:</p>
<ol>
<li>Un <code>id</code> doit Ãªtre unique dans tout le document et vous pouvez avoir besoin d&#8217;un mÃªme comportement pour plusieurs (un groupe) Ã©lÃ©ments.</li>
<li>Parfois un script a besoin de plus d&#8217;information que simplement &#8220;exÃ©cutez-moi ici.&#8221;</li>
</ol>
<p>Prenons pour ces 2 problÃ¨mes l&#8217;exemple d&#8217;un script de gestion de formulaire. Il serait pratique d&#8217;ajouter un dÃ©clencheur permettant d&#8217;indiquer qu&#8217;un champ est obligatoire. Si nous avions un tel dÃ©clencheur, nous pourrions utiliser un script aussi simple que le suivant.</p>
<pre class="javascript"><code>function validateForm()
{
 var x = document.forms[0].elements;
 for (var i=0;i&lt;x.length;i++)
 {
  if (<strong>[ce champ est obligatoire]</strong> &#038;&#038; !x[i].value)
    // Informer l'utilisateur de l'anomalie
 }
}
</code></pre>
<p>Mais comment crÃ©er un dÃ©clencheur XHTML permettant d&#8217;indiquer au script que certains champs sont obligatoires&nbsp;? Utilisez un <code>id</code> n&#8217;est pas envisageable : car nous avons besoin d&#8217;une solution qui puisse fonctionner sur plusieurs champs. Il serait possible d&#8217;utiliser l&#8217;attribut <code>class</code> pour piloter ce comportement :</p>
<pre class="html"><code>&lt;input name="name" class="required" /&gt;
</code></pre>
<pre class="javascript"><code>
if (<strong>x[i].className == 'required'</strong> &#038;&#038; !x[i].value)
  // Informer l'utilisateur de l'anomalie
</code></pre>
<p>Pourtant, <a href="http://www.w3.org/TR/xhtml1/#C_13" hreflang="en">l&#8217;attribut <code>class</code> est plutÃ´t dÃ©diÃ© Ã  la dÃ©finition de styles CSS</a>. MÃ©langer des dÃ©clencheurs CSS et JavaScript n&#8217;est pas impossible mais peut mener rapidement Ã  un amas de code confus: </p>
<pre class="html"><code>&lt;input name="name" class="largefield required" /&gt;
</code></pre>
<pre class="javascript"><code>
if (
  <strong>x[i].className.indexOf('required') != -1</strong> &#038;&#038;
  !x[i].value
)
</code></pre>
<p>&Agrave; mon avis, l&#8217;attribut <code>class</code> ne devrait Ãªtre utilisÃ© <em>que</em> pour le CSS. Les classes sont les premiers dÃ©clencheurs XHTML pour la couche de prÃ©sentation et les utiliser aussi pour porter une information de comportement complique les choses. DÃ©clencher la couche de prÃ©sentation et de comportement avec le mÃªme attribut <code>class</code> reprÃ©sente aussi une entorse Ã  la stricte <a href="http://www.digital-web.com/articles/separating_behavior_and_presentation/">sÃ©paration du comportement et de la prÃ©sentation </a>, bien qu&#8217;en fin de compte  c&#8217;est Ã  vous de choisir ce qui est acceptable Ã  ce sujet.</p>
<h2>DÃ©clencheurs porteurs d&#8217;information</h2>
<p>De plus ces dÃ©clencheurs peuvent prendre plus d&#8217;importance et Ãªtre plus compliquÃ©s que la simple commande &#8220;dÃ©ployez ce comportement ici&#8221;. Vous aurez certainement besoin de joindre une valeur Ã  un dÃ©clencheur. Une valeur de dÃ©clenchement rendrait la couche comportementale beaucoup plus souple, puisqu&#8217;elle pourrait rÃ©pondre Ã  diffÃ©rentes conditions d&#8217;exÃ©cution pour chaque Ã©lÃ©ment XHTML au lieu d&#8217;exÃ©cuter bÃªtement le mÃªme script.</p>
<p>Prenez un formulaire dans lequel des zones de texte ont des tailles maximum pour paramÃ¨tre. Le vieil attribut <code>MAXLENGTH</code> ne fonctionne pas avec les zones de texte, nous devons donc ecrire un petit script pour cela.  De plus toutes les zones de textes n&#8217;ont pas la mÃªme  longueur maximum, nous allons donc avoir Ã  renseigner cette information quelque part de faÃ§on individuelle pour chaque zone de texte.</p>
<p>Nous voulons avoir quelquechose de la forme :</p>
<pre class="javascript"><code>var x = document.getElementsByTagName('textarea');
for (var i=0;i&lt;x.length;i++)
{
 if (<strong>[cette zone de texte a une longueur max]</strong>)
  x[i].onkeypress = checkLength;
}

function checkLength()
{
 var max = <strong>[Lecture de la longueur max]</strong>;
 if (this.value.length > max)
  // Informer l'utilisateur de l'anomalie
}
</code></pre>
<p>Ce script a besoin de 2 paramÃ¨tres :</p>
<ol>
<li>Est-ce que cette zone de texte a une longueur maximum? Il s&#8217;agit ici du dÃ©clencheur qui informe le script qu&#8217;il y a un comportement Ã  gÃ©rer. </li>
<li>Quelle est la longueur max? C&#8217;est la valeur que le script doit vÃ©rifier pour valider la saisie utilisateur.</li>
</ol>
<p>Et c&#8217;est typiquement dans ce cas que la solution basÃ©e sur les classes montre ses limites. C&#8217;est toujours techniquement possible, mais le code Ã  implÃ©menter devient trop compliquÃ©. Prenez une zone de texte avec la classe CSS &laquo;&nbsp;large&nbsp;&raquo; qui soit aussi obligatoire et dont la longueur max. est de 300 caractÃ¨res: </p>
<pre class="html"><code>&lt;textarea class="large required maxlength=300"&gt;
&lt;/textarea&gt;
</code></pre>
<p>Non seulement cet exemple mÃ©lange de la prÃ©sentation et 2 types de comportement, mais cela rend la longueur maximum de la zone de texte plus difficile Ã  lire:</p>
<pre class="javascript"><code>var max = <strong>this.className.substring(this.className.indexOf('maxlength')+10)</strong>;
if (this.value.length > max)
 // Informer l'utilisateur de l'anomalie
</code></pre>
<p>&Agrave; noter que ce bout de code ne fonctionne que si le paramÃ¨tre longueur max. est placÃ© en fin de valeur de classe. Si on veut placer la longueur max. n&#8217;importe oÃ¹ dans la valeur de classe (au cas oÃ¹ on voudrait ajouter un autre dÃ©clencheur aprÃ¨s celui-ci) le code devient bien plus compliquÃ©.</p>
<h2>Le problÃ¨me</h2>
<p>C&#8217;est bien notre problÃ¨me du jour. Comment ajouter de bon dÃ©clencheurs JavaScript qui nous permettent Ã  la fois de couvrir le cas d&#8217;un simple dÃ©clenchement d&#8217;action (&#8220;exÃ©cutez-moi ici&#8221;) et celui du passage de valeur spÃ©cifique Ã  l&#8217;Ã©lÃ©ments ?</p>
<p>Techniquement, nous avons vu qu&#8217;il Ã©tait possible de gÃ©rer ces cas avec l&#8217;attribut <code>class</code>, mais avons-nous le droit de dÃ©tourner la fonction l&#8217;usage de cet attribut pour porter des informations pour lequel il n&#8217;est pas fait ? Est ce une entorse Ã  la rÃ¨gle de sÃ©paration de la prÃ©sentation et du comportement ? Et mÃªme si vous ne voyez pas d&#8217;obstacle Ã  cette solution, elle reste tout de mÃªme  compliquÃ©e Ã  mettre en oeuvre et requiert un code JavaScript assez ardu.</p>
<p>Il est tout de fois possible d&#8217;utiliser d&#8217;ajouter des dÃ©clencheurs sur d&#8217;autres attributs comme <code>lang</code> ou <code>dir</code>, mais , encore une fois, ce serait une utilisation dÃ©tournÃ©e d&#8217;attributs.</p>
<h2>Attributs personnalisÃ©es</h2>
<p>Je vos propose une autre solution. Reprenons l&#8217;exemple de la longueur max. de la zone de texte. Nous avons besoin de 2 informations:</p>
<ol>
<li>Est-ce que la zone de texte a une limite de taille ?</li>
<li>Quelle est cette limite ?</li>
</ol>
<p>La maniÃ¨re naturelle et sÃ©mantique d&#8217;exprimer cette information serait d&#8217;ajouter un attribut Ã  la zone de texte:</p>
<pre class="html"><code>&lt;textarea  class="large" maxlength="300" &gt;
&lt;/textarea&gt;
</code></pre>
<p>La prÃ©sence de l&#8217;attribut <code>maxlength</code> informe le script qu&#8217;il faut vÃ©rifier la saisie utilisateur dans cette zone de texte et il peut trouver la taille limite pour cette zone dans la valeur de l&#8217;attribut. De la mÃªme maniÃ¨re, pour le contrÃ´le d&#8217;obligation de saisie, nous pouvons aussi crÃ©er un attribut personnalisÃ©. <code>required="true"</code>, par exemple, mÃªme si n&#8217;importe quelle valeur permet de dÃ©clencher le contrÃ´le. </p>
<pre class="html"><code>&lt;textarea class="large" maxlength="300" required="true"&gt;
&lt;/textarea&gt;
</code></pre>
<p>Techniquement ce n&#8217;est pas un problÃ¨me. La mÃ©thode DOM du W3C <code>getAttribute()</code> permet de lire n&#8217;importe quel attribut d&#8217;une balise. Seul Opera jusqu&#8217;Ã  <a href="http://www.quirksmode.org/bugreports/archives/2005/01/existing_attrib.html" title="Bug report">sa version 7.54 ne permet pas  </a> de lire un attribut existant sur la mauvaise balise (comme <code>src</code> sur la balise <code>&lt;h2&gt;</code>). Heureusement les version ultÃ©rieur assure un support complet de la mÃ©thode <code>getAttribute()</code>.</p>
<p>Voici donc ma solution&nbsp;:</p>
<pre class="javascript"><code>function validateForm()
{
 var x = document.forms[0].elements;
 for (var i=0;i&lt;x.length;i++)
 {
  if (<strong>x[i].getAttribute('required')</strong> &#038;&#038; !x[i].value)
    // Informer l'utilisateur que le champ est obligatoire
 }
}

var x = document.getElementsByTagName('textarea');

for (var i=0;i&lt;x.length;i++)
{
 if (<strong>x[i].getAttribute('maxlength')</strong>)
  x[i].onkeypress = checkLength;
}

function checkLength()
{
 var max = <strong>this.getAttribute('maxlength')</strong>;
 if (this.value.length &gt; max)
  // Informer l'utilisateur que la longueur max est atteinte
}
</code></pre>
<p>&Agrave; mon avis cette solution est simple Ã  implÃ©menter et cohÃ©rente avec la forme que les dÃ©clencheurs JavaScript peuvent prendre: une paire clÃ©/valeur Ã  l&#8217;endroit oÃ¹ la clÃ© dÃ©clenche l&#8217;action et la valeur permet de conditionner l&#8217;action en fonction de chaque Ã©lÃ©ment. Finalement, ajouter ces dÃ©clencheurs au code XHTML est trÃ¨s simple mÃªme  pour des webmaster dÃ©butants.</p>
<h2>DTDs personnalisÃ©es</h2>
<p>AprÃ¨s l&#8217;implÃ©mentation de cette solution vous pourrez noter que la page rÃ©sultante n&#8217;est pas valide. &Agrave; la validation les attributs <code>required</code> et <code>maxlength</code>  sont rejetÃ©s car il ne sont pas autorisÃ©es dans le document. C&#8217;est bien sur complÃ¨tement vrai : le premier attribut ne fait pas partie des spÃ©cifications XHTML, tandis  que le second n&#8217;est valide que sur un Ã©lÃ©ment <code>&lt;input&gt;</code>.</p>
<p>Pour rÃ©soudre ce problÃ¨me, il suffit de les <em>rendre</em> valides; en crÃ©ant une DÃ©finition de Type de Document (DTD) personnalisÃ©e qui Ã©tend XHTML pour inclure ces attributs dÃ©clencheurs. Cette DTD personnalisÃ©e dÃ©finit nos attributs spÃ©ciaux et leur place dans le document, l&#8217;outil de validation permet de confronter la structure du document Ã  notre version personnalisÃ©e de XHTML  Si la DTD dÃ©clare les attributs valides, c&#8217;est qu&#8217;ils le sont.</p>
<p>Si vous ne savez pas crÃ©er de DTD personnalisÃ©e, vous pouvez lire l&#8217;article de J. David Eisenberg&#8217;s intitulÃ© <a href="http://www.alistapart.com/articles/customdtd/" hreflang="en">Creating Custom DTDs</a> (NDT: ou la traduction franÃ§ais <a href="http://v05.z720.net/blog/archives/2005/03/03/valider-une-dtd-personnalisee" hreflang="fr">Valider une DTD personnalisÃ©e</a>) pour tout savoir sur le sujet.</p>
<p>&Agrave; mon avis, utiliser des attributs personnalisÃ©s pour contrÃ´ler la couche comportementale et Ã©crire des DTD personnalisÃ©es pour dÃ©finir ces attributs correctement contribue Ã  sÃ©parer comportement et structure et Ã  Ã©crire des scripts simples et efficaces. De plus une fois ces attributs dÃ©clarÃ©s et les scripts rÃ©digÃ©s, mÃªme un webmaster dÃ©butant est capable d&#8217;ajouter facilement des comportements complexes dans les documents XHTML.</p>
<h3 class="byline">Version originale par <a href="http://alistapart.com/authors/peterpaulkoch/" title="Voir tous les articles de Peter-Paul Koch sur A List Apart" hreflang="en">Peter-Paul Koch</a></h3>
<p id="authorbio">Peter-Paul Koch est dÃ©veloppeur web indÃ©pendant  Ã  Amsterdam en Hollande. Il Ã©crit et maintient <a href="http://www.quirksmode.org/">www.quirksmode.org</a>, un condensÃ© d&#8217;environ 180 articles, trucs et astuces CSS et JavaScript, ainsi qu&#8217;un systÃ¨me de rapport de bogue et un blog</p>
]]></content:encoded>
			<wfw:commentRss>http://z720.net/blog/archives/2005/04/29/declencheurs-javascript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Valider une DTD personnalisÃ©e</title>
		<link>http://z720.net/blog/archives/2005/03/03/valider-une-dtd-personnalisee</link>
		<comments>http://z720.net/blog/archives/2005/03/03/valider-une-dtd-personnalisee#comments</comments>
		<pubDate>Thu, 03 Mar 2005 12:47:01 +0000</pubDate>
		<dc:creator>Seb</dc:creator>
				<category><![CDATA[DÃ©veloppement]]></category>
		<category><![CDATA[Traductions]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WebStandards]]></category>

		<guid isPermaLink="false">http://v05.z720.net/blog/archives/2005/02/18/valider-une-dtd-personnalisee</guid>
		<description><![CDATA[Comment valider des documents XHTML utilisant une DTD personnalisÃ©e. Traduction de l&#8217;article Validating a Custom DTD. Translated with the permission of A List Apart Magazine (http://alistapart.com) and the author[s]. Dans son article de cette mÃªme Ã©dition (NDT : sur A &#8230; <a href="http://z720.net/blog/archives/2005/03/03/valider-une-dtd-personnalisee">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Comment valider des documents XHTML utilisant une DTD personnalisÃ©e.</p>
<p>Traduction de l&#8217;article <a href="http://www.alistapart.com/articles/customdtd/">Validating a Custom DTD</a>. Translated with the permission of A List Apart Magazine (<a href="http://www.alistapart.com">http://alistapart.com</a>) and the author[s].</p>
<p><span id="more-65"></span>
<p>
Dans <a href="http://www.alistapart.com/articles/scripttriggers/">son article de cette mÃªme Ã©dition</a> (NDT : sur <a href="http://www.alistapart.com/issues/194/" >A List Apart &#8211; Edition NÂ°194</a>), Peter-Paul Koch propose l&#8217;ajout d&#8217;attributs personnalisÃ©s dans les Ã©lÃ©ments de formulaire pour dÃ©clencher des Ã©vÃ¨nements spÃ©ciaux. Le valideur du W3C ne validera pas un document avec de tels attributs, parce qu&#8217;ils ne font pas partie des spÃ©cifications XHTML. </p>
<p>Cet article va vous permettre : </p>
<ul>
<li> de dÃ©velopper des DTD sur mesure afin de dÃ©clarer des attributs personnalisÃ©s</li>
<li> de valider des documents utilisant ces attributs. </li>
</ul>
<p>Voici un exemple de balisage HTML personnalisÃ© qui nous permettra : </p>
<ul>
<li> de spÃ©cifier la longueur maximale de la zone de texte </li>
<li> de dÃ©terminer si un Ã©lÃ©ment du formulaire est obligatoire ou non :</li>
</ul>
<pre>
&lt;form action=&quot;http://example.com/cgi-bin/example.cgi&quot;&gt;
&lt;p&gt;
  Name:
  &lt;input type=&quot;text&quot; name=&quot;yourName&quot; size=&quot;40&quot; /&gt;

&lt;/p&gt;
&lt;p&gt;
  Email:
  &lt;input type=&quot;text&quot; name=&quot;email&quot; size=&quot;40&quot;
  required=&quot;true&quot; /&gt;

&lt;/p&gt;
&lt;p&gt;
  Comments:&lt;br /&gt;
  &lt;textarea maxlength=&quot;300&quot; required=&quot;false&quot;
  rows=&quot;7&quot; cols=&quot;50&quot;&gt;&lt;/textarea&gt;

&lt;/p&gt;
&lt;p&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Send Data&quot; /&gt;
&lt;/p&gt;
&lt;/form&gt;
</pre>
<h2> Qu&#8217;est ce qu&#8217;une DTD ? </h2>
<p>
La DÃ©finition du Type de Document (DTD) est un fichier qui spÃ©cifie quels Ã©lÃ©ments et attributs existent dans un langage balisÃ© et comment ils apparaissent. Ainsi la DTD XHTML prÃ©cise que &lt;p&gt; est un Ã©lÃ©ment valide et qu&#8217;il peut apparaÃ®tre dans une balise &lt;div&gt; mais pas dans &lt;b&gt;. L&#8217;adresse URL, Ã  la fin de la dÃ©claration DOCTYPE, pointe Ã  l&#8217;endroit oÃ¹ l&#8217;on va trouver le fichier de DTD pour la version HTML que l&#8217;on va utiliser. Ni votre navigateur, ni le valideur du W3C ne parcourt le web pour rÃ©cupÃ©rer la DTD &#8211; Ils ont une liste des DOCTYPEs valides en mÃ©moire et utilisent l&#8217;URL pour les identifier uniquement. Comme nous le verrons plus loin, ce comportement change en cas de DTD personnalisÃ©e.
</p>
<h2> SpÃ©cifier les attributs </h2>
<p>
Ajouter des attributs dans une DTD existante est facile. Pour chaque attribut, vous devez spÃ©cifier Ã  quel Ã©lÃ©ment il est associÃ©, quel est son nom, quel type de donnÃ©es il peut contenir et s&#8217;il est obligatoire ou facultatif. Ces informations sont spÃ©cifiÃ©es suivant le modÃ¨le :
</p>
<pre>
&lt;!ATTLIST
  elementName attributeName type optionalStatus
&gt;
</pre>
<p>
Pour ajouter l&#8217;attribut maxlength Ã  l&#8217;Ã©lÃ©ment &lt;textarea&gt;, il suffit d&#8217;Ã©crire :</p>
<pre>
&lt;!ATTLIST textarea maxlength CDATA #IMPLIED&gt;
</pre>
<p>
La spÃ©cification CDATA signifie que la valeur de l&#8217;attribut peut contenir n&#8217;importe quels caractÃ¨res; ainsi maxlength=&nbsp;&raquo;300&#8243; ou maxlength=&nbsp;&raquo;ten&nbsp;&raquo; seront tous les deux valides. Pour les donnÃ©es &laquo;&nbsp;ouvertes&nbsp;&raquo;, les DTD ne nous permettent pas d&#8217;Ãªtre plus prÃ©cis. La spÃ©cification #IMPLIED signifie que l&#8217;attribut est optionnel. Un attribut obligatoire serait spÃ©cifiÃ© par #REQUIRED.<br />
Quand un attribut peut contenir une liste de valeurs, vous pouvez les spÃ©cifier dans la DTD. C&#8217;est le cas pour notre attribut required, qui ne peut contenir que true ou false. Les valeurs sont sensibles Ã  la casse; dans notre exemple seule les valeurs en minuscules sont spÃ©cifiÃ©es, donc la valeur TRUE ne sera pas considÃ©rÃ©e comme valide.
</p>
<pre>
&lt;!ATTLIST textarea required (true|false) #IMPLIED&gt;
</pre>
<p>
Attention Ã  la confusion: l&#8217;attribut s&#8217;appelle &laquo;&nbsp;required&nbsp;&raquo; mais n&#8217;est pas obligatoire dans tous les Ã©lÃ©ments &lt;textarea&gt;, car c&#8217;est un attribut optionnel. Dans l&#8217;ensemble, les modifications des spÃ©cifications dans la DTD ressemblent Ã  ceci :</p>
<pre>
&lt;!ATTLIST textarea maxlength CDATA #IMPLIED&gt;
&lt;!ATTLIST textarea required (true|false) #IMPLIED&gt;
&lt;!ATTLIST input required (true|false) #IMPLIED&gt;
&lt;!ATTLIST select required (true|false) #IMPLIED&gt;
</pre>
<p class="note">
Note: Ajouter de nouveaux attributs Ã  des Ã©lÃ©ments existants est facile; ajouter de nouveaux Ã©lÃ©ments est plus compliquÃ© et n&#8217;est pas le sujet de cet article.
</p>
<h2> Placer les attributs </h2>
<p>
Maintenant que vous avez dÃ©fini des attributs personnalisÃ©s, comment les placer pour qu&#8217;ils soient pris en compte Ã  la validation? La meilleure place serait comme un sous-ensemble directement dans votre document:</p>
<pre>
&lt;!DOCTYPE html PUBLIC
&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;

&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;
[
  &lt;!ATTLIST textarea maxlength CDATA #IMPLIED&gt;
  &lt;!ATTLIST textarea required (true|false) #IMPLIED&gt;
  &lt;!ATTLIST input required (true|false) #IMPLIED&gt;
  &lt;!ATTLIST select required (true|false) #IMPLIED&gt;
]&gt;
</pre>
<p>
Si vous passez un tel fichier au travers de la validation du W3C, il va valider merveilleusement bien. Si vous tÃ©lÃ©chargez les fichiers d&#8217;exemple pour cet article et validez le fichier internal.html, vous pourrez le voir par vous-mÃªme. Malheureusement, quand vous affichez ce fichier dans votre navigateur, les caractÃ¨res <code><br />
]&gt;</code> vont apparaitre Ã  l&#8217;Ã©cran. Il n&#8217;y a aucun moyen de contourner ce bug, on peut donc abandonner directement cette mÃ©thode.
</p>
<h2> Modifier la DTD </h2>
<p>Une autre mÃ©thode consiste Ã  obtenir  la DTD de XHTML Transitional et d&#8217;ajouter les modifications directement dans ce fichier. La version originale de cette DTD est le fichier xhtml1-transitional.dtd dans le rÃ©pertoire dtd des fichiers d&#8217;exemples accompagnant cet article. Vous y trouverez aussi 3 fichiers avec l&#8217;extension .ent. Ces fichiers dÃ©finissent toutes les entitÃ©s que vous utilisez en HTML, comme &amp;rsquo; et &amp;ntilde;. Vous devez garder tous ces fichiers ensemble dans le mÃªme dossier.</p>
<p>Le fichier personnalisÃ©, nommÃ© xhtml1-custom.dtd est crÃ©Ã© en ajoutant les nouveaux attributs Ã  la fin du fichier xhtml1-transitional.dtd. Quand vous ajoutez des attributs, faites-le Ã  la fin du fichier pour vous assurer que tout ce Ã  quoi vous faites rÃ©fÃ©rence a dÃ©jÃ  Ã©tÃ© dÃ©fini.</p>
<h2> Changer le DOCTYPE </h2>
<p>Vous devez maintenant changer l&#8217;insrtuction &lt;!DOCTYPE &gt; de votre fichier HTML pour indiquer l&#8217;utilisation de votre &laquo;&nbsp;version&nbsp;&raquo; personnalisÃ© de XHTML. Comme la nouvelle DTD ne fait pas partie des DTD public enregistrÃ©e, le DOCTYPE n&#8217;utilisera pas le spÃ©cificateur PUBLIC. Il sera remplacer par le mot-clÃ© SYSTEM suivi de l&#8217;emplacement de la DTD personnalisÃ©e. Ce chemin peut Ãªtre relatif ou absolu, il peut mÃªme Ãªtre une URL si votre fichier DTD est sur un autre serveur. Le chemin doit pointer vers l&#8217;emplacement exact de votre fichier ! Le fichier custom.html dans les exemples de cet article utilise le chemin relatif:
</p>
<pre>
&lt;!DOCTYPE html SYSTEM &quot;dtd/xhtml1-custom.dtd&quot;&gt;
</pre>
<p>
Quand vous essayez d&#8217;utiliser le valideur du W3C sur ce fichier, il rejette le document parce qu&#8217;il n&#8217;utilise que les DTD qu&#8217;il connait et ne va pas chercher les DTD personnalisÃ©es.</p>
<h2> Utiliser un valideur diffÃ©rent </h2>
<p>
La solution consiste Ã  utiliser un valideur diffÃ©rent qui utilisera bien l&#8217;URL spÃ©cifiÃ©e pour vÃ©rifier la validitÃ© du document. Comme il s&#8217;agit d&#8217;un document XHTML, il est possible d&#8217;utiliser n&#8217;importe quel analyseur XML qui fait de la validation. Dans cet article nous allons utiliser l&#8217;analyseur Xerces disponible sur <a href="http://xml.apache.org">xml.apache.org</a>. Cet analyseur est Ã©crit en Java(tm), donc Java doit Ãªtre installÃ© sur votre systÃ¨me. La dÃ©compression de l&#8217;archive Xerces va crÃ©er un doccier xerces-2_6_2 (ou n&#8217;importe quelle autre version courante). Par la suite, nous supposerons que vous avez dÃ©compresser l&#8217;archive Ã  la racine du disque C: sous Windows ou vers /usr/local sous Linux.
</p>
<p>
Le programme Counter fait partie des exemples fournis avec Xerces. Ce programme compte le nombre d&#8217;Ã©lÃ©ments, d&#8217;attributs, d&#8217;espace ignorables et de caractÃ¨res apparaissants dans un document XML (ou dans notre cas XHTML). Ce programme permet d&#8217;activer une option de validation lors de l&#8217;analyse, le rendant parfait pour cette tache. Vous pouvez lancer le programme Counter (qui devient notre &laquo;&nbsp;valideur&nbsp;&raquo;) Ã  partir d&#8217;un fichier batch dans Windows ou Ã  partir d&#8217;un script shell dans Linux. Voici le fichier batch, nommÃ© validate.bat. Il n&#8217;y a qu&#8217;une ligne de commande, mais nous l&#8217;afficherons sur plusieurs lignes pour que cela tienne sur la page.<br />
Notez qu&#8217;il y a un espace avant le mot &laquo;&nbsp;dom&nbsp;&raquo; et aprÃ¨s &laquo;&nbsp;-v&nbsp;&raquo;.</p>
<pre>
java -cp c:\xerces-2_6_2\xercesImpl.jar; &raquo;
c:\xerces-2_6_2\xmlParserAPIs.jar; &raquo;
c:\xerces-2_6_2\xercesSamples.jar dom/Counter -v &raquo;
%1 %2 %3 %4 %5 %6 %7 %8
</pre>
<p>
Voici le script shell, nommÃ© validate.sh.</p>
<pre>
java -cp /usr/local/xerces-2_6_2/xercesImpl.jar:\
/usr/local/xerces-2_6_2/xmlParserAPIs.jar:\
/usr/local/xerces-2_6_2/xercesSamples.jar \
dom/Counter -v $1 $2 $3 $4 $5 $6 $7 $8
</pre>
<p>
Bien sur si vous avez dÃ©compressÃ© l&#8217;archive de Xerces Ã  un autre endroit, vous devrez changer les noms de chemin. Une fois ceci mis en place, il vous suffit de taper la commande suivante sous l&#8217;invite de commande Windows pour valider le fichier custom.html :</p>
<pre>
validate custom.html
</pre>
<p>
Ou celle-ci sous l&#8217;invite de commande Linux:</p>
<pre>
./validate.sh custom.html
</pre>
<p>
Si le fichier est valide, vous recevrez un message donnant le nom du fichier et quelques statistiques Ã  son propos, comme ceci:
</p>
<pre>
custom.html: 543;50;0 ms
  (15 elems, 20 attrs, 9 spaces, 43 chars)
</pre>
<p>
Si le fichier n&#8217;est pas valide, vous obtiendrez des messages d&#8217;erreur. Par exemple, si vous essayer de valider un fichier badfile.html contenant ces erreurs:</p>
<pre>
&lt;p&gt;Email: &lt;input type=&quot;text&quot; name=&quot;email&quot; size=&quot;40&quot;
	required=&quot;yes&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Comments:&lt;br /&gt;
&lt;textarea maxlength=&quot;300&quot; inquirer=&quot;false&quot;
   rows=&quot;7&quot; cols=&quot;50&quot;&gt;&lt;/textarea&gt;
</pre>
<p>
Vous obtiendrez cette sortie de l&#8217;analyseur:</p>
<pre>
[Error] badfile.html:12:70: Attribute &quot;required&quot;
  with value &quot;yes&quot; must have a value from the
  list &quot;true false &quot;.
[Error] badfile.html:14:63: Attribute &quot;inquirer&quot;
  must be declared for element type &quot;textarea&quot;
badfile.html:
  611;82;0 ms (15 elems, 20 attrs, 9 spaces, 43 chars)
</pre>
<h2> Autre mÃ©thode de validation </h2>
<p>Si vous utilisez l&#8217;Ã©diteur <a href="http://www.jEdit.org">jEdit</a>, vous pouvez tÃ©lÃ©charger le plugin XML. Si votre fichier porte l&#8217;extension xhtml, jEdit utilisera la DTD personnalisÃ©e pour la validation comme spÃ©cifiÃ© dans le DOCTYPE.</p>
<h2> Conclusion </h2>
<p>
Il est facile de spÃ©cifier des attributs supplÃ©mentaires pour des Ã©lÃ©ments XHTML; avec un peu de travail, vous pourrez mettre en place un valideur pour vÃ©rifier vos fichiers avec votre version personnalisÃ©e HTML. <a href="http://www.alistapart.com/d/customdtd/custom_dtd_sample_files.zip">TÃ©lÃ©charger tous les fichiers d&#8217;exemple de cet article</a> et c&#8217;est parti!
</p>
<h2>&Agrave; propos de l&#8217;auteur</h2>
<p><a href="mailto:catcode@catcode.com">J. David Eisenberg</a> est programmeur et professeur habitant &agrave; San Jose, CA avec son chat, Marco Polo. La plupart de son travail porte sur XML, Java, JavaScript et Perl. Il est aussi l&#8217;auteur d&#8217;un livre sur <a href="http://oreilly.com/catalog/9780596002237/">le format d&#8217;images vectorielles SVG</a>. Plus d&#8217;information sur <a href="http://catcode.com/narrative.html">catcode.com/narrative.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://z720.net/blog/archives/2005/03/03/valider-une-dtd-personnalisee/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

