<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.2" -->
<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/"
	>

<channel>
	<title>théorie et pratique...</title>
	<link>http://blog.codeconsult.ch</link>
	<description>le blog francophone de bertrand delacrétaz</description>
	<pubDate>Fri, 06 Mar 2009 10:39:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.2</generator>
	<language>en</language>
			<item>
		<title>Google Summer Of Code 2009 - très bientôt!</title>
		<link>http://blog.codeconsult.ch/2009/03/06/google-summer-of-code-2009-tres-bientot/</link>
		<comments>http://blog.codeconsult.ch/2009/03/06/google-summer-of-code-2009-tres-bientot/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 10:31:53 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>opensource</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2009/03/06/google-summer-of-code-2009-tres-bientot/</guid>
		<description><![CDATA[Le logo 2009 est fantastique non? Le flower power n&#8217;est pas mort, apparemment.
Le Google Summer Of Code commence très bientôt, les projets open source peuvent s&#8217;inscrire dès lundi 9 mars (date importante sur la planète s&#8217;il en est), et les étudiants dès le 23 mars. 
Si vous êtes étudiant ou enseignant en informatique ou dans [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/soc/"><img src="http://codeconsult.ch/blog/wp-content/uploads/2009/03//gsoc-2009-logo.jpg" alt="gsoc-2009-logo.jpg" border="0" width="220" height="129" align="right" /></a>Le logo 2009 est fantastique non? Le flower power n&#8217;est pas mort, apparemment.</p>
<p>Le <a href="http://code.google.com/soc/">Google Summer Of Code</a> commence très bientôt, les projets open source peuvent s&#8217;inscrire dès lundi 9 mars (date importante sur la planète s&#8217;il en est), et les étudiants dès le 23 mars. </p>
<p>Si vous êtes étudiant ou enseignant en informatique ou dans une branche apparentée, merci de diffuser le <a href="http://codeconsult.ch/blog/wp-content/uploads/2009/03//gsoc2009flyer_fr.pdf" title="gsoc2009flyer_fr.pdf">flyer</a> ci-joint dans votre école.</p>
<p>En admettant que nous soyons acceptés comme organisation, les projets de la <a href="http://apache.org">fondation Apache</a> seront annoncés sur notre <a href="http://wiki.apache.org/general/SummerOfCode2009">wiki</a>, je vais probablement en proposer un ou deux pour <a href="http://incubator.apache.org/sling">Sling</a>.</p>
<p>La <a href="http://www.youtube.com/watch?v=vBRRR0BQyz0">vidéo de Philip Johnson</a> donne un bon aperçu du programme et de ses exigences, à l&#8217;intention des étudiants.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2009/03/06/google-summer-of-code-2009-tres-bientot/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Le blues en français c&#8217;est Bill (et Paul bien sûr)</title>
		<link>http://blog.codeconsult.ch/2008/09/10/le-blues-en-francais-cest-bill-et-paul-bien-sur/</link>
		<comments>http://blog.codeconsult.ch/2008/09/10/le-blues-en-francais-cest-bill-et-paul-bien-sur/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 19:39:03 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>musique</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/09/10/le-blues-en-francais-cest-bill-et-paul-bien-sur/</guid>
		<description><![CDATA[On revient toujours à ses grands classiques - cette vidéo de Bill Deraime contient le secret du travail bien fait: il n&#8217;y a qu&#8217;à voir l&#8217;énergie que Bilou met dans sa guitare et sa voix (dès 2:00)!




]]></description>
			<content:encoded><![CDATA[<p>On revient toujours à ses grands classiques - cette vidéo de Bill Deraime contient le secret du travail bien fait: il n&#8217;y a qu&#8217;à voir l&#8217;énergie que Bilou met dans sa guitare et sa voix (dès 2:00)!</p>
<p><object width="425" height="344"><br />
<param name="movie" value="http://www.youtube.com/v/279nBvUUG_w&#038;hl=en&#038;fs=1"></param>
<param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/279nBvUUG_w&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/09/10/le-blues-en-francais-cest-bill-et-paul-bien-sur/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>XSLT sans douleur</title>
		<link>http://blog.codeconsult.ch/2008/07/29/xslt-sans-douleur/</link>
		<comments>http://blog.codeconsult.ch/2008/07/29/xslt-sans-douleur/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 20:15:44 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>programmation</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/07/29/xslt-sans-douleur/</guid>
		<description><![CDATA[
Certains lecteurs s&#8217;étant plaints de mon manque d&#8217;enthousiasme pour le français, voici comme promis le texte intégral de mon article, paru dans le numéro 109 du magazine Programmez!.


Les transformations XSLT sont sans pareil pour le traitement de documents XML: transformation, analyse, publication, tout ou presque est possible à qui maîtrise ce langage.



Les principes de base [...]]]></description>
			<content:encoded><![CDATA[<p>
Certains lecteurs s&#8217;étant plaints de mon manque d&#8217;enthousiasme pour le français, voici comme promis le texte intégral de mon article, paru dans le <a href="http://codeconsult.ch/blog/2008/06/02/xslt-sans-douleur-dans-le-magazine-programmez/">numéro 109</a> du magazine <a href="http://www.programmez.com/">Programmez!</a>.
</p>
<p>
Les transformations XSLT sont sans pareil pour le traitement de documents XML: transformation, analyse, publication, tout ou presque est possible à qui maîtrise ce langage.
</p>
<p><a id="more-114"></a></p>
<p>
Les principes de base du langage sont cependant trop souvent méconnus des débutants, la tendance étant d&#8217;abuser des instructions procédurales de XSLT: <em>xsl:if</em>, <em>xsl:choose</em>, <em>xsl:for-each</em>. On crée ainsi des transformations peu flexibles et peu efficaces, qui n&#8217;utilisent pas le modèle XPath/XSLT à bon escient.</p>
<p>
Cet article propose une manière d&#8217;aborder XSLT basée sur une bonne connaissance de XPath, combinée avec un jeu d&#8217;instructions XSLT volontairement réduit. Ce &#8220;chemin d&#8217;apprentissage&#8221; de XSLT a fait ses preuves lors de nos sessions d&#8217;enseignement, en permettant aux programmeurs de faire les bons choix lors de la création de leurs transformations.
</p>
<p>
Une connaissance de base de XSLT sera utile pour comprendre nos exemples, et nous ne donnerons pas de détails quant à la syntaxe des instructions XPath et XSLT utilisées. Il est recommandé d&#8217;utiliser les références citées en fin d&#8217;article pour compléter ces informations.
</p>
<h2>XPath</h2>
<p>
XPath est trop souvent ignoré par les débutants en XSLT, car quasiment invisible dans des expressions simples, comme celle ci-dessous:
</p>
<pre>&lt;xsl:template match="section"/></pre>
<p>
Cette instruction XSLT déclare une <em>template</em>, un ensemble d&#8217;instructions (vide dans cet exemple) qui sera appliqué lorsqu&#8217;on rencontre un certain <em>pattern</em> dans le document d&#8217;entrée.</p>
<p>
On peut penser que <em>section</em> est simplement un nom d&#8217;élément; ce n&#8217;est pas faux, mais il s&#8217;agit en fait d&#8217;une expression XPath, mieux visible dans ce second exemple:
</p>
<pre>&lt;xsl:template match="section[@id]"/></pre>
<p>
Cette seconde template ne s&#8217;appliquera qu&#8217;aux éléments <em>section</em> qui possèdent un attribut <em>id</em>. L&#8217;important est de noter que l&#8217;attribut <em>match</em> est une expression XPath. En pratiquant XSLT, on constate rapidement que ces expressions sont responsables pour une grande part de la puissance des transformations XSLT, et que la maîtrise de XPath nous aidera énormément dans la conception de transformations concises et efficaces. </p>
<p>
Dans ce qui suit, nous passons en revue les concepts principaux de XPath, en indiquant leur importance dans notre processus d&#8217;apprentissage.
</p>
<h3>L&#8217;arborescence XPath</h3>
<p>
La structure &#8220;textuelle&#8221; et les balises du document XML sont ignorés par le processeur XPath, qui considère seulement l&#8217;arbre résultant de l&#8217;analyse (parsing) du document XML.
</p>
<p>
Les deux éléments &lt;para&gt; ci-dessous, par exemple, sont absolument identiques du point de vue du processeur:
</p>
<pre>&lt;para/&gt;<br/>
&lt;para&gt;&lt;/para/&gt;</pre>
<p>
L&#8217;arbre XPath contient sept types de noeuds différents: quatre sont utilisés fréquemment (racine, élément, attribut, texte) et les trois autres (commentaires, instructions de traitement et espaces de noms) nettement plus rarement.
</p>
<p>
Rappelons que le noeud racine n&#8217;existe pas vraiment dans le document XML d&#8217;entrée, ce noeud est rajouté artificiellement dans l&#8217;arborescence XPath comme conteneur pour le document. L&#8217;expression XPath <em>/html</em> sélectionne donc bien l&#8217;élément racine <em>html</em> du document d&#8217;entrée, situé en-dessous du noeud racine artificiel dans l&#8217;arbre XPath.
</p>
<p>
La connaissance de ces types de noeuds aidera à l&#8217;élaboration d&#8217;expressions XPath précises. Les notations utilisées pour sélectionner les noeuds de ces différents types sont parfois peu évidentes. L&#8217;expression <em>//text()</em>, par exemple n&#8217;est pas un appel de fonction mais bien la sélection de tous les noeuds de type texte du document.
</p>
<h3>Chemins de sélection</h3>
<p>
Les chemins XPath sont en apparence très semblables à ceux que l&#8217;on utilise dans les systèmes de fichiers, comme <em>/section/para</em>. La différence essentielle est qu&#8217;un tel chemin pointe dans un système de fichiers sur un seul objet, alors que dans XPath cette expression sélectionne tous les éléments dont le nom est &#8220;para&#8221;, qui sont enfants d&#8217;un élément &#8220;section&#8221; situé à la racine du document. Le résultat est donc un ensemble de noeuds, qui seront des éléments dans notre exemple, mais peuvent selon l&#8217;expression utilisée être de n&#8217;importe quel type parmi les sept types de noeuds mentionnés ci-dessus.
</p>
<p>
Les chemins XPath sont donc plus proches conceptuellement des requêtes SQL que de chemins sur un disque: on peut les considérer comme des filtres qui, appliqués sur l&#8217;arborescence du document XML, laissent passer certains noeuds et pas d&#8217;autres.
</p>
<p>Les chemins absolus commencent par un slash, comme <em>/section/para</em>, et s&#8217;appliquent donc à partir du noeud racine. Les chemins relatifs comme <em>section/para</em>, sans le slash initial, s&#8217;appliquent à partir du <em>noeud contextuel</em>, celui que le<br />
processeur XSLT est en train de traiter au moment de l&#8217;évaluation de l&#8217;expression XPath.
</p>
<p>
Le double slash permet de faire la différence entre une relation parent-enfant, comme dans le chemin <em>section/para</em>, ou parent-descendant, comme dans le chemin  <em>section//para</em> qui utilise ce double slash. Le premier exemple sélectionne les éléments <em>para</em> qui sont juste en-dessous d&#8217;un élément <em>section</em>, alors que le second sélectionne les éléments <em>para</em> qui ont un élément <em>section</em> comme ancêtre, quel que soit le nombre de niveaux hiérarchiques qui les séparent.
</p>
<p>
Ces principes de construction de chemins XPath sont très importants pour la bonne construction et compréhension de transformations XSLT.
</p>
<h3>Prédicats</h3>
<p>
Les prédicats XPath sont similaires à la clause <em>where</em> du langage SQL: ils permettent des sélections précises, en ignorant les noeuds  d&#8217;un chemin qui ne  remplissent pas les conditions définies par le prédicat.  </p>
<p>
L&#8217;exemple ci-dessous sélectionne tous les éléments <em>div</em> possédant un attribut <em>style</em> qui vaut <em>abc</em>, et qui sont situés en-dessous d&#8217;un élément <em>section</em> qui contient au moins un élément enfant <em>para</em>.
</p>
<pre>section[para]//div[@style=’abc’]</pre>
<p>
La concision d&#8217;une telle expression, par rapport à sa description en langue française, démontre combien la syntaxe XPath est expressive.
 </p>
<p>
 Les prédicats sont utilisés très fréquemment dans les transformations XSLT. Ils permettent souvent d&#8217;éviter les constructions procédurales comme <em>xsl:if</em>, par l&#8217;utilisation de templates XSLT plus &#8220;ciblées&#8221;. Il est donc important de connaître leur principe, ainsi que l&#8217;étendue des fonctions XPath que les prédicats peuvent utiliser.
 </p>
<h3>Axes</h3>
<p>
 En XPath, les <em>axes</em> permettent de naviguer dans l&#8217;arborescence du document XML, dans toutes les directions: parents/enfants (directs ou à plusieurs niveaux), noeuds frères précédents ou suivants, et noeuds précédents ou suivants sans tenir compte de la hiérarchie.
 </p>
<p>
 L&#8217;exemple ci-dessous sélectionne les éléments <em>table</em> qui ont le même parent et suivent un élément <em>para</em> ancêtre du noeud courant.
 </p>
<pre>ancestor::para/following-sibling::table</pre>
<p>
 L&#8217;utilisation des axes XPath n&#8217;est pas très fréquente, mais il est important de connaître les types d&#8217;axes à disposition pour savoir les utiliser à bon escient.
 </p>
<h2>Tout ceci n&#8217;est pas très simple&#8230;</h2>
<p>
 La promesse d&#8217;un XSLT <em>sans douleur</em> semble un peu lointaine au vu de l&#8217;étendue des connaissances XPath mentionnées comme nécessaires. Mais le plus dur est fait, XPath étant effectivement ce qui fait la puissance<br />
des transformations, plus que les instructions XSLT qui sont comme on le verra relativement simples.
 </p>
<p>
 Bien comprendre le rôle de XPath dans XSLT, et le principe de sélection des noeuds par le processeur XPath, est capital pour utiliser XSLT de manière efficace. Il est donc conseillé, à partir des références figurant en fin d&#8217;article, d&#8217;étudier les éléments XPath mentionnés ci-dessus, avant même d&#8217;aborder l&#8217;utilisation de XSLT, ou en tout cas tout au début de l&#8217;apprentissage.
 </p>
<h2>XSLT</h2>
<p>
 L&#8217;exemple ci-dessous démontre une fois de plus l&#8217;importance de XPath dans les transformations XSLT. Les valeurs des attributs <em>match</em>, <em>class</em> et <em>select</em> de cette transformation sont toutes des expressions XPath.
 </p>
<pre>
 &lt;xsl:template
  match="section[para[normalize-space(.)]]">
  &lt;div class="{@style}">
    &lt;h1>&lt;xsl:value-of select="title"/>&lt;/h1>
    &lt;xsl:apply-templates select="para[@ok='true']"/>
  &lt;/div>
&lt;/xsl:template>
</pre>
<p>
En supprimant ces expressions, on fait apparaître les instructions XSLT et les éléments HTML littéraux de notre transformation:
</p>
<pre>
 &lt;xsl:template
  match="">
  &lt;div class="">
    &lt;h1>&lt;xsl:value-of select=""/>&lt;/h1>
    &lt;xsl:apply-templates select=""/>
  &lt;/div> 

&lt;/xsl:template>
</pre>
<p>
Cette nouvelle transformation n&#8217;est bien entendu pas utilisable telle quelle, mais sa simplicité montre bien qu&#8217;une grande partie de la complexité et de la puissance des transformations XSLT provient de XPath.
</p>
<p>
Nous présentons dans ce qui suit, les éléments XSLT indispensables à l&#8217;apprentissage.
</p>
<h3>Jeu d&#8217;instructions réduit</h3>
<p>
Notre premier conseil pour XSLT est de se limiter à un jeu d&#8217;instructions réduit, pour éviter de tomber dans le piège des constructions procédurales. On se limitera dans un premier temps à ce jeu d&#8217;instructions:</p>
<ul>
<li>
    <em>xsl:stylesheet</em></p>
</li>
<li>
    <em>xsl:template</em>
  </li>
<li>
    <em>xsl:apply-templates</em>
  </li>
<li>
<em>xsl:value-of</em> (y compris la variante utilisée pour les attributs, comme dans <em>&lt;p class=&#8221;{@id}&#8221;&gt;</em> ou les accolades sont équivalentes à une instruction <em>value-of</em>.
  </li>
</ul>
<p>
Ces quelques instructions permettent de réaliser des transformations relativement complexes, pour autant que l&#8217;on profite au maximum de la puissance de XPath dans leurs attributs <em>match</em> et <em>select</em>.</p>
<p>
On sera assez rapidement amené à utiliser également les instructions <em>xsl:variable</em> <em>xsl:param</em>, et plus tard <em>xsl:call-template</em>, les modes d&#8217;exécution de <em>xsl:template</em>, et <em>xsl:key</em> pour la création de tableaux associatifs. Ces instructions influencent cependant peu la structure générale de la transformation, qui est déterminée principalement par les quatre instructions de notre jeu réduit.
</p>
<p>
Les instructions <em>xsl:include</em> et <em>xsl:import</em> permettent de mieux modulariser et réutiliser nos templates XSLT, mais, comme les instructions de la liste ci-dessus, influencent peu la structure générale des transformations.  </p>
<p>
Avec XPath, les quatre instructions de base constituent les pièces maîtresses de nos transformations et méritent donc d&#8217;être étudiées en détail.
</p>
<h3>xsl:if, xsl:choose, xsl:for-each</h3>
<p>
Attention, danger! Ces instructions &#8220;procédurales&#8221; sont parfois nécessaires, mais nettement moins souvent que la plupart des débutants en XSLT ne le pensent.
</p>
<p>
L&#8217;exemple typique est celui d&#8217;une template basée sur <em>xsl:choose</em>, qui sera avantageusement remplacée par plusieurs templates avec des expressions de sélection XPath plus spécifiques.
</p>
<p>
Avec <em>xsl:choose</em>, notre template (exemple ci-dessous) ressemble un peu à un fragment de code Java ou C:</p>
<pre>
&lt;xsl:template match="something">
    &lt;xsl:choose>
      &lt;xsl:when test="@id">
        ...cas 1
      &lt;/xsl:when>
      &lt;xsl:otherwise>
        ...cas 2
      &lt;/xsl:otherwise>
    &lt;/xsl:choose>
  &lt;/xsl:template>&lt;
</pre>
<p>
Alors qu&#8217;il suffit de faire de chaque <em>xsl:when</em> une template séparée pour obtenir un code plus lisible, plus facile à maintenir et que le processeur exécute en général bien plus efficacement:
</p>
<pre>
&lt;xsl:template match="something[@id]">
     ...cas 1
  &lt;/xsl:template> 

  &lt;xsl:template match="something">
     ...cas 2
  &lt;/xsl:template>
</pre>
<p>
De la même manière, l&#8217;instruction <em>xsl:if</em> peut souvent être évitée en utilisant des expressions XPath plus précises dans les attributes <em>match</em> de <em>xsl:template</em>, alors que <em>xsl:for-each</em> sera avantageusement remplacée par une template XSLT récursive. </p>
<p>
Ces instructions procédurales ne peuvent pas être évitées totalement, elles ont leur utilité. Il est cependant recommandé de ne les utiliser qu&#8217;en dernier ressort.
</p>
<h3>Scénario de traitement du processeur XSLT</h3>
<p>
Le principe de traitement de l&#8217;arbre d&#8217;entrée par le processeur XSLT est simple, mais souvent méconnu:</p>
<ul>
<li>
    Le processeur commence par visiter le noeud racine du document.
  </li>
<li>
<p>    Pour chaque noeud qui est visité, le processeur:
  </li>
<li>
    1. Définit ce noeud comme &#8220;noeud contextuel&#8221; pour les expressions XPath
  </li>
<li>
    2. Vérifie si une template s&#8217;applique à ce noeud
  </li>
<li>
    3a. Si oui, il exécute la template, le traitement est alors terminé.
  </li>
<li>
    3b. Si non, il exécute les règles par défaut.
  </li>
</ul>
<p>
Rien de compliqué dans ce scénario, qui s&#8217;exécute tant qu&#8217;il reste des noeuds à traiter, ce qui dépend de la manière dont le document est visité par les instructions XSLT et les règles par défaut.
</p>
<p>
Ce scénario explique pourquoi la transformation ci-dessous s&#8217;arrête immédiatement, après avoir visité le noeud racine.
</p>
<pre>&lt;xsl:stylesheet&gt;
&lt;xsl:template match="/"/&gt;

&lt;/xsl:stylesheet&gt;</pre>
<p>
Le processeur comment la visite par le noeud racine, trouve une template qui s&#8217;applique à ce noeud et l&#8217;exécute. La template ne fait rien, car son corps est vide, et le traitement se termine selon la règle 3a. Aucun autre noeud n&#8217;est visité, car la template exécutée n&#8217;utilise pas d&#8217;instruction de visite comme <em>xsl:apply-templates</em>.
</p>
<h3>Régles par défaut</h3>
<p>
Selon la règle 3b ci-dessus, les règles par défaut sont exécutées pour chaque noeud que le processeur visite et auquel aucune template ne s&#8217;applique.
</p>
<p>
Il est donc nécessaire de connaître ces règles par défaut, pour comprendre par exemple que la transformation ci-dessous visite complètement le document d&#8217;entrée, en copiant les noeuds de texte sur sa sortie:
</p>
<pre>&lt;xsl:stylesheet/&gt;</pre>
<p>
Cette transformation minimale est tout à fait valide, et son comportement s&#8217;explique en combinant le scénario d&#8217;exécution du processeur, ci-dessus, avec les règles par défaut
</p>
<p>
Ces règles définissent que, si aucune template ne s&#8217;applique:
</p>
<ul>
<li>
    Le noeud racine et les éléments sont visités.
  </li>
<li>
    Les noeuds de texte sont copiés sur la sortie.
  </li>
<li>
    Les autres types de noeuds sont ignorés.
  </li>
</ul>
<p>
La connaissance de ces règles par défaut est essentielle, pour comprendre le comportement de nos transformations et pour éviter d&#8217;écrire des templates inutiles, comme dans cet exemple:
</p>
<pre>&lt;xsl:template match="p"&gt;
  &lt;xsl:apply-templates/&gt;
&lt;/xsl:template&gt;</pre>
<p>
Cette template reproduit exactement la règle par défaut qui dit qu&#8217;un noeud est visité, ce que fait aussi xsl:apply-templates. On peut donc, dans le cas général, la supprimer sans modifier le comportement  de la transformation XSLT.
</p>
<h2>Conclusion</h2>
<p>
Notre rapide tour d&#8217;horizon nous montre qu&#8217;une bonne connaissance de XPath est essentielle pour utiliser efficacement XSLT. Les instructions XSLT elles-mêmes posent en général moins de problèmes de compréhension, et l&#8217;utilisation de notre jeu d&#8217;instructions réduit aide à utiliser XSLT de la manière préconisée par ses concepteurs.
</p>
<p>
Le &#8220;chemin d&#8217;apprentissage&#8221; proposé dans cet article devrait vous aider à aborder XSLT dans le bon sens - bonne chance dans votre exploration!
</p>
<h2>Références</h2>
<ul>
<li>
    Spécification XPath: http://www.w3.org/TR/xpath
  </li>
<li>
    Spécification XSLT: http://www.w3.org/TR/1999/REC-xslt-19991116
  </li>
<li>
    Tutoriels XPath/XSLT: http://www.zvon.org - partiellement traduits en français.
  </li>
<li>
    Ouvrage de Michael Kay, <em>XSLT 2.0 and XPath 2.0 Programmer&#8217;s Reference, 4th Edition</em>, ISBN: 978-0-470-19274-0
  </li>
</ul>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/07/29/xslt-sans-douleur/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Pas beaucoup d&#8217;action ici&#8230;</title>
		<link>http://blog.codeconsult.ch/2008/07/26/pas-beaucoup-daction-ici/</link>
		<comments>http://blog.codeconsult.ch/2008/07/26/pas-beaucoup-daction-ici/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 12:34:45 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>whitenoise</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/07/26/pas-beaucoup-daction-ici/</guid>
		<description><![CDATA[J&#8217;ai un peu délaissé ce blog francophone dernièrement, il y a plus d&#8217;action sur grep.codeconsult.ch. Par example en ce qui concerne la récente annonce de Microsoft qui devient un sponsor de la fondation Apache.

]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai un peu délaissé ce blog francophone dernièrement, il y a plus d&#8217;action sur <a href="http://grep.codeconsult.ch">grep.codeconsult.ch</a>. Par example en ce qui concerne la récente annonce de Microsoft qui devient un <a href="http://grep.codeconsult.ch/2008/07/26/hey-el-reg-microsoft-is-not-becoming-an-asf-member/">sponsor de la fondation Apache</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/07/26/pas-beaucoup-daction-ici/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Coworking L&#233;man</title>
		<link>http://blog.codeconsult.ch/2008/06/17/coworking-lman/</link>
		<comments>http://blog.codeconsult.ch/2008/06/17/coworking-lman/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 07:29:01 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>whitenoise</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/06/17/coworking-lman/</guid>
		<description><![CDATA[Stephanie Booth vient de cr&#233;er la liste de discussion Coworking L&#233;man. 
La liste et ses archives sont publiques, et l&#8217;inscription est ouverte &#224; tous, si cela vous int&#233;resse.

]]></description>
			<content:encoded><![CDATA[<p><a href="http://stephanie-booth.com/">Stephanie Booth</a> vient de cr&eacute;er la liste de discussion <a href="http://groups.google.com/group/coworking-leman/">Coworking L&eacute;man</a>. </p>
<p>La liste et ses archives sont publiques, et l&#8217;inscription est ouverte &agrave; tous, si cela vous int&eacute;resse.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/06/17/coworking-lman/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Mon slogan pour l&#8217;euro 2008</title>
		<link>http://blog.codeconsult.ch/2008/06/07/mon-slogan-pour-leuro-2008/</link>
		<comments>http://blog.codeconsult.ch/2008/06/07/mon-slogan-pour-leuro-2008/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 11:06:56 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>whitenoise</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/06/07/mon-slogan-pour-leuro-2008/</guid>
		<description><![CDATA[En primeur pour mes lecteurs, voici l&#8217;habile slogan que j&#8217;ai concocté en mettant à contribution plusieurs de mes neurones:
Tous à l&#8217;euro!
 Comme ça on aura la paix à la plage, au cinéma et dans plein d&#8217;autres endroits sympathiques  
(bon, pour la plage il faudra que la météo s&#8217;y mette&#8230;)

]]></description>
			<content:encoded><![CDATA[<p>En primeur pour mes lecteurs, voici l&#8217;habile slogan que j&#8217;ai concocté en mettant à contribution plusieurs de mes neurones:</p>
<p><b>Tous à l&#8217;<a href="http://www.euro2008.uefa.com/">euro</a>!</b></p>
<p> Comme ça on aura la paix à la plage, au cinéma et dans plein d&#8217;autres endroits sympathiques <img src='http://blog.codeconsult.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>(bon, pour la plage il faudra que la météo s&#8217;y mette&#8230;)
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/06/07/mon-slogan-pour-leuro-2008/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>XSLT sans douleur dans le magazine &#8220;programmez&#8221;</title>
		<link>http://blog.codeconsult.ch/2008/06/02/xslt-sans-douleur-dans-le-magazine-programmez/</link>
		<comments>http://blog.codeconsult.ch/2008/06/02/xslt-sans-douleur-dans-le-magazine-programmez/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 09:30:40 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>programmation</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/06/02/xslt-sans-douleur-dans-le-magazine-programmez/</guid>
		<description><![CDATA[Mon article intitulé XSLT sans douleur est publié ce mois dans le magazine &#8220;programmez&#8221;, numéro 109, courez chez votre marchand de journaux!
L&#8217;article se base sur la présentation du même nom que j&#8217;ai utilisé dans plusieurs conférences. Pas facile de résumer cela dans l&#8217;espace réduit d&#8217;un magazine, je me réjouis d&#8217;avoir un feedback des lecteurs.
Plus tard: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.programmez.com/"><img src="http://codeconsult.ch/blog/wp-content/uploads/2008/06//programmez_couverture_109.jpg" alt="programmez_couverture_109.jpg" border="0" width="120" height="163" align="right" /></a>Mon article intitulé <em>XSLT sans douleur</em> est publié ce mois dans le magazine <a href="http://www.programmez.com/">&#8220;programmez&#8221;</a>, numéro 109, courez chez votre marchand de journaux!</p>
<p>L&#8217;article se base sur la <a href="http://grep.codeconsult.ch/2007/11/21/xslt-and-xpath-without-the-pain/">présentation du même nom</a> que j&#8217;ai utilisé dans plusieurs conférences. Pas facile de résumer cela dans l&#8217;espace réduit d&#8217;un magazine, je me réjouis d&#8217;avoir un feedback des lecteurs.</p>
<p><em>Plus tard: le <a href="http://codeconsult.ch/blog/2008/07/29/xslt-sans-douleur">texte intégral</a> est disponible.</em>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/06/02/xslt-sans-douleur-dans-le-magazine-programmez/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>r2j &#224; Aubonne, c&#8217;est ce vendredi!</title>
		<link>http://blog.codeconsult.ch/2008/06/02/r2j-a-aubonne-cest-ce-vendredi/</link>
		<comments>http://blog.codeconsult.ch/2008/06/02/r2j-a-aubonne-cest-ce-vendredi/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 06:54:02 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>musique</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/06/02/r2j-a-aubonne-cest-ce-vendredi/</guid>
		<description><![CDATA[Vendredi, concert du groupe r2j (&#8221;envoyez-nous en prison&#8221;) &#224; la piscine d&#8217;Aubonne, o&#249; on sert semble-t-il aussi d&#8217;excellentes raclettes! 
Extraits musicaux ici.
Nous serons aussi en concert &#224; la f&#234;te de la musique &#224; Lausanne, le 21 juin, &#224; 17h &#224; la place Centrale et &#224; 22h au bistrot du Flon. Sauf changements de derni&#232;re minute [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.r2j.ch"><img src="http://codeconsult.ch/blog/wp-content/uploads/2008/06//r2j-concert.jpg" alt="r2j-concert.jpg" border="0" width="217" height="190" align="right" /></a>Vendredi, concert du groupe <a href="http://www.r2j.ch/">r2j</a> (&#8221;envoyez-nous en prison&#8221;) &agrave; la <a href="http://map.search.ch/aubonne/chateau-verd">piscine d&#8217;Aubonne</a>, o&ugrave; on sert semble-t-il aussi d&#8217;excellentes raclettes! </p>
<p>Extraits musicaux <a href="http://www.r2j.ch/cd.htm">ici</a>.</p>
<p>Nous serons aussi en concert &agrave; la f&ecirc;te de la musique &agrave; Lausanne, le 21 juin, &agrave; 17h &agrave; la place Centrale et &agrave; 22h au bistrot du Flon. Sauf changements de derni&egrave;re minute - voir le <a href="http://www.lausanne.ch/view.asp?DomID=64406">programme officiel</a>.</p>
<p><em>Plus tard: Le concert a lieu par tous les temps, &agrave; l&#8217;int&eacute;rieur en cas de pluie.</em>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/06/02/r2j-a-aubonne-cest-ce-vendredi/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>WLAN dans les trains, seulement 4 francs de l&#8217;heure, wow!</title>
		<link>http://blog.codeconsult.ch/2008/04/01/wlan-dans-les-trains-seulement-4-francs-de-lheure-wow/</link>
		<comments>http://blog.codeconsult.ch/2008/04/01/wlan-dans-les-trains-seulement-4-francs-de-lheure-wow/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 06:44:17 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>humeur</category>
	<category>technologie</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/04/01/wlan-dans-les-trains-seulement-4-francs-de-lheure-wow/</guid>
		<description><![CDATA[En plus d&#8217;avoir un nouveau logo diversement appr&#233;ci&#233;, swisscom nous gratifie maintenant de son offre canon (ou est-ce plut&#244;t p&#233;tard mouill&#233;?) pour les voyageurs: pour seulement 4 francs par heure, on peut surfer  sur une connexion WLAN dans le train. 
Seulement en premi&#232;re classe bien s&#251;r, et seulement dans certains wagons et seulement sur [...]]]></description>
			<content:encoded><![CDATA[<p>En plus d&#8217;avoir un nouveau logo <a href="http://www.lunchoverip.com/2007/12/swisscoms-new-l.html">diversement appr&eacute;ci&eacute;</a>, swisscom nous gratifie maintenant de son offre canon (ou est-ce plut&ocirc;t p&eacute;tard mouill&eacute;?) pour les voyageurs: pour <em>seulement</em> <a href="http://www.swisscom.ch/GHQ/content/Media/Medienmitteilungen/2008/20080331_01_Online_im_Zug.htm?lang=fr">4 francs par heure</a>, on peut surfer  sur une connexion WLAN dans le train. </p>
<p>Seulement en premi&egrave;re classe bien s&ucirc;r, et seulement dans certains wagons et seulement sur certaines lignes. Il faut bien commencer quelque part, et cela fait seulement sept ans que nous ne sommes plus au vingti&egrave;me si&egrave;cle!</p>
<p>On reconna&icirc;t la strat&eacute;gie habituelle du monopole: proposer des services a des prix exorbitants, pour les (pauvres) riches qui sont fier de montrer ainsi qu&#8217;ils ont beaucoup d&#8217;argent &agrave; jeter par les fen&ecirc;tres (mais attention: e pericoloso sporgersi). Ensuite, tenir le plus longtemps possible ces tarifs avant d&#8217;offrir un service r&eacute;aliste. Je suppose que cela s&#8217;appelle <em>traire la vache grasse</em> en termes de marketing?</p>
<p>Les offres de modem 3G (m&ecirc;me chez swisscom) sont bien plus int&eacute;ressantes, et exp&eacute;rience faite le r&eacute;seau EDGE, au minimum, est disponible sur une tr&egrave;s grande partie de notre r&eacute;seau CFF . Cinq francs par mois et un peu plus de trois francs par jour d'&#8217;utilisation pour mon abonnement actuel chez <a href="http://www.sunrise.ch/fr/business/business-aktuell/business-sparoptionen/business-gratis-mobiles-internet.htm">sunrise</a>, c&#8217;est quand m&ecirc;me un peu plus d&eacute;mocratique.</p>
<p>Les logos &#8220;bonnet d&#8217;&acirc;ne pour swisscom&#8221; sont bien entendus autoris&eacute;s dans les commentaires. Les logos &#8220;poisson d&#8217;avril&#8221; aussi, mais malheureusement je ne pense pas que ce soit le cas&#8230;.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/04/01/wlan-dans-les-trains-seulement-4-francs-de-lheure-wow/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Google Summer of Code 2008</title>
		<link>http://blog.codeconsult.ch/2008/02/25/google-summer-of-code-2008/</link>
		<comments>http://blog.codeconsult.ch/2008/02/25/google-summer-of-code-2008/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 10:00:41 +0000</pubDate>
		<dc:creator>bdelacretaz</dc:creator>
		
	<category>opensource</category>
	<category>programmation</category>
	<category>enseignement</category>
		<guid isPermaLink="false">http://codeconsult.ch/blog/2008/02/25/google-summer-of-code-2008/</guid>
		<description><![CDATA[Le Google Summer of Code 2008 vient d&#8217;&#234;tre annonc&#233;. 
Ce programme m&#233;riterait &#224; mon avis une plus grande participation d&#8217;&#233;tudiants de Suisse romande - et pour 4500$ par &#233;tudiant, sans parler de l&#8217;exp&#233;rience et de la r&#233;putation que l&#8217;on peut acqu&#233;rir, cela vaut la peine d&#8217;y consacrer quelques efforts!
Je proposerais plusieurs projets autour de Sling [...]]]></description>
			<content:encoded><![CDATA[<p>Le <a href="http://code.google.com/soc/2008/">Google Summer of Code 2008</a> vient d&#8217;&ecirc;tre annonc&eacute;. </p>
<p>Ce programme m&eacute;riterait &agrave; mon avis une plus grande participation d&#8217;&eacute;tudiants de Suisse romande - et pour 4500$ par &eacute;tudiant, sans parler de l&#8217;exp&eacute;rience et de la r&eacute;putation que l&#8217;on peut acqu&eacute;rir, cela vaut la peine d&#8217;y consacrer quelques efforts!</p>
<p>Je proposerais plusieurs projets autour de <a href="http://incubator.apache.org/sling">Sling</a> et peut-&ecirc;tre <a href="http://incubator.apache.org/tika">Tika</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.codeconsult.ch/2008/02/25/google-summer-of-code-2008/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
