Trucsweb.com

Trucsweb.com

XML

RSS

RDFFav

XML - Stylisez vos fichiers RSS avec le langage XSL

Le grand oublié XML ou comment utiliser un script XSL avec CSS pour styliser vos fichiers RSS de format RDF sans aucun langage serveur ni base de données.rss, syndication, css, xml, Really Simple SyndicationXML - Stylisez vos fichiers RSS avec le langage XSL

Paul-Émile Borduas
Paul-Émile Borduas, probablement une huile sur canevas vers 1955
Désolé, les sites d’art où on trouve cette magnifique peinture ne donnent aucune information! Informez-moi si vous en savez plus !

Le XML et son langage de programmation XSL me fascinent depuis le siècle dernier et je ne comprends toujours pas pourquoi personne ne s’y intéresse vraiment. Je suis tombé dernièrement sur un vieux texte du Dr A. J. Trickett « Processing RSS Files with XSLT » qui ressemble beaucoup à mon histoire. Seul dans son monde XML qu’il a visiblement abandonné depuis...

Et pourtant c’est génial, efficace, rapide et surtout eXtensible. Super cool quoi. À l’époque, les navigateurs n’étaient pas encore compatibles avec le langage XSL, mais on espérait. C’est peut-être ce qui en décourageait plusieurs. Il y a aussi le très populaire PHP qui a dû attendre la version 5 pour avoir un véritable moteur XML. Et que dire de l’actionScript de Macromedia et son simili moteur XML ensuite détruit par Apple. On peut aussi ajouter à la liste Google qui a ressuscité le simple, et rapide d’usage, JSON qui a fini par éclipser le XML.

Mais l’espoir a depuis longtemps porté fruit. Prenez ce texte par exemple, vous avez une version en pur XML (http://www.trucsweb.com/tutoriels/xml/rss-styliser-xsl-css/default.rdf) comme tous les tutoriels des Trucsweb, et ce depuis 10 ans ! Vous vous dites peut-être à quoi bon ? Et il n’existe assurément aucun plug-in Wordpress pour ce faire. Mais si tout le monde connait l’expression Web 2, quoique galvaudé à de nombreuses sauces, on semble oublier que c’est avant tout la révolution de la séparation du contenu du contenant.

Exactement comme la feuille de styles qui détermine comment sera affichée une page HTML. C’est le même principe, mais au lieu d’une base de données et d’un langage serveur pour rendre au départ une page HTML, les données XML sont envoyées directement au navigateur, avec son code XSL et finalement sa feuille de style CSS en texte clair pour être interprété par le navigateur pour générer la page HTML. Directement sur la machine de l’usager. Le serveur fait un seul travail, celui de servir des fichiers via HTTP, comme son nom l’indique en fait, un serveur !

...in whichever browser you use, turn off cross-site tracking (désactiver le suivi intersite) where you can and consider using private browsing modes... - « Why You Shouldn’t Use Google Chrome After New Privacy Disclosure » par Zak DoffmanContributor, Cybersecurity

Si le XML n’a pas toujours de lettre de noblesse sur le Web, outre quelques usages limités à l’import/export, c’est fou tout ce qu’un serveur peut faire pour retourner une banale page Web. Et aujourd’hui, en plus des nombreuses dépendances, c’est souvent un contenu qui provient de plusieurs serveurs, question de laisser les « majors » monopoliser le contrôle du contenu. Sans le savoir, une bête page HTML peut charger plusieurs versions de la même librairie jQuery. Un peu comme les multiples versions de Microsoft Visual C++ Redistribuable qui embourbe votre Windows.

Quand je navigue avec mon Firefox sécurisé qui bloc les scripts intersites (Cross Site Scripting) il y a partout des trous. Les pictogrammes, les avatars à gauche, le contenu sur un nuage en haut, les commentaires en bas sur un autre serveur, la carte Google Map. Aucun formulaire ne fonctionne, car il manque le Captcha Google. Et que dire des fichiers témoins, aucune page Web n’a besoin de témoins pour fonctionner. Mais ils sont proposés comme indispensable, pour faire rouler un serveur qui n’a que faire du principe de précaution et d’économie que procure une page Web autonome. Mais on s’en fout, on est encore à l’heure de l’abondance en 2021 (!). Voilà aussi pourquoi bouder le XML et le contenu généré localement. Ils n’ont rien à gagner et tout à perdre...

Je radote encore, mais j’ai terminé ma montée de lait ; -) Revenons à nos moutons.

Exemple en temps réel de la syndication des Trucsweb.com

S’il y a un domaine que le XML a réussi à prendre le marché, c’est bien la syndication de contenu, le RSS (Really Simple Syndication). Fouillez moi pourquoi ce n’est pas Google qui a pris le contrôle, il a même créé son propre format RSS, l’Atom. Twitter aussi était historiquement un grand serveur de RSS. J’ai bien aimé Twitter à sa sortie. On pouvait utiliser à notre guise les RSS poussés par lui. Était, car on a déchanté rapidement quand Twitter a décidé de cessé de publier des flux RSS, libre et gratuit, au profit de ses satanés widgets. Enfin, le RSS est plus que jamais vivant grâce sans doute aux nombreux plug-ins WordPress ou aux services comme feedreader.com. Toujours est-il qu’il est là pour de bon et je vous offre un petit script fort sympathique pour afficher, en toute liberté, vos RSS sans langage serveur.

Attention toutefois, bien qu’on permet de plus en plus le contenu et dangereux JavaScript de tiers serveurs (XSS), au grand bonheur des Gafam, le RSS anodin plus inoffensif (en texte clair) n’a pas ce privilège. Votre script XSL doit être sur le même serveur et précisément le même domaine que votre fichier RSS. Par exemple, un RSS sous www ne pourra pas ouvrir un XSL sans www !! Et on parle de progrès ; -)
Code complet

Sans tarder, et comme promis, voilà un exemple qui parle de lui même. Ouvrez la syndication RSS des Trucsweb.com : http://www.trucsweb.com/documents/syndication/rss.rdf. C’est un simple fichier d’une syndication RSS en format RDF, manipulé par votre navigateur en XSL et stylisé par un fichier CSS exactement comme une page Web conventionnelle. À la différence qu’aucun langage serveur n’est requis ni aucune base de données. Si ce n’est pas cool ça, c’est probablement parce qu’il manque un « j’aime » quelque part ; -))

Shéma de contenu XML / XSL / CSS
Shéma de contenu XML / XSL / CSS

Le XSL est un langage "complexe" et l’on trouve peu de ressource sur le Web, ce qui explique en partie son impopularité. Je ne vais donc pas vous décrire ici ce langage récursif plutôt difficile à saisir pour le néophyte ou l’amateur de langage-objet que j’adore aussi n’en douter pas. J’ai bien l’intention toutefois de pondre plusieurs tutoriels sur le sujet d’ici peu. Mais pour l’instant, je vais me contenter de démontrer le principe de séparation du contenu, du contenant et de la manipulation à la base de mon travail depuis 20 ans...

La première étape consiste à ajouter à votre fichier XML, de format RSS, l’instruction suivante pour appeler le script XSL :

// Le fichier rss10.xsl pour la version RDF 1.0 (rdf:RDF/channel/item)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="http://www.trucsweb.com/css/rss10.xsl"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"...

// Ou rss20.xsl pour la version 2.0 plus simple (rss/channel/item)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="http://www.trucsweb.com/css/rss20.xsl"?>
<rss version="2.0"...
Exemple complet de syndication RSS 2.0
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="http://www.trucsweb.com/tutoriels/xml/rss-styliser-xsl-css/rss20.xsl"?>
<rss version="2.0" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:media="http://search.yahoo.com/mrss/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">
   <channel>
      <title>Syndication - Trucsweb.com</title>
      <link>http://www.trucsweb.com/</link>
      <atom:link href="http://www.trucsweb.com/tutoriels/xml/rss-styliser-xsl-css/rss20.xml" rel="self" type="application/rss+xml" />
      <description>Aide, tutoriels et outils pour Webmestre.</description>
      <lastBuildDate>Sun, 28 Mar 2021 20:09:00 GMT</lastBuildDate>
      <!-- docs>http://blogs.law.harvard.edu/tech/rss</docs -->
      <generator>Neural v7.3.6</generator>
      <category>Webmasterie</category>
      <ttl>60</ttl>
      <image>
        <title>Syndication - Trucsweb.com</title>
        <url>http://www.trucsweb.com/img/t_tut3.png</url>
        <link>http://www.trucsweb.com/</link>
      </image>
      <dc:language>fr-ca</dc:language>
      <dc:creator>Django (Oznog) Blais</dc:creator>
      <dc:rights>Copyright © 1998-2021 https://neural.quebec/propos/</dc:rights>
      <dc:date>2021-03-30T07:49:54-04:00</dc:date>
      <sy:updatePeriod>daily</sy:updatePeriod>
      <sy:updateFrequency>2</sy:updateFrequency>
      <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
      <item>
         <title>XML - Stylisez vos fichiers RSS avec le langage XSL</title>
         <link>http://www.trucsweb.com/tutoriels/xml/rss-styliser-xsl-css/</link>
         <description>Le grand oublié XML ou comment utiliser un script XSL avec CSS pour styliser vos fichiers RSS de format RDF sans aucun langage serveur ni base de données.</description>
         <dc:creator>Django (Oznog) Blais</dc:creator>
         <guid>http://www.trucsweb.com/tutoriels/xml/rss-styliser-xsl-css/</guid>   
         <category>XML</category>
         <enclosure url="http://www.trucsweb.com/documents/images/2021/paul-emile_borduas.jpeg" length="406" type="image/jpeg" /><!--  length="1069871" type="audio/mpeg" -->
         <media:content medium="image" url="http://www.trucsweb.com/documents/images/2021/paul-emile_borduas.jpeg" />
         <source url="http://www.trucsweb.com/documents/syndication/rss.rdf">Syndication RSS - Trucsweb.com</source>
         <content:encoded><![CDATA[<p>Le grand oublié XML ou comment utiliser un script XSL avec CSS pour styliser vos fichiers RSS de format RDF sans aucun langage serveur ni base de données.</p>]]></content:encoded>
         <pubDate>Sun, 28 Mar 2021 20:09:00 GMT</pubDate>
      </item>
      <item>
         <title>Bootstrap 5 - Ouvrir une vidéo YouTube dans une fenêtre modale</title>
         <link>http://www.trucsweb.com/tutoriels/javascript/bootstrap_5_modal_youtube/</link>
         <description>Une fenêtre modale dynamique avec une vidéo YouTube ou Vimeo avec arrêt automatiquement à la fermeture de la fenêtre.</description>
         <dc:creator>Django (Oznog) Blais</dc:creator>
         <guid>http://www.trucsweb.com/tutoriels/javascript/bootstrap_5_modal_youtube/</guid>   
         <category>JavaScript</category>
         <enclosure url="http://www.trucsweb.com/documents/images/2021/riopelle-70197.webp" length="406" type="image/webp" />
         <source url="http://www.trucsweb.com/documents/syndication/rss.rdf">Syndication RSS - Trucsweb.com</source>
         <content:encoded><![CDATA[<p>Une fenêtre modale dynamique avec une vidéo YouTube ou Vimeo avec arrêt automatiquement à la fermeture de la fenêtre.</p>]]></content:encoded>
         <pubDate>Sun, 28 Mar 2021 20:00:00 GMT</pubDate>
      </item>
      <item>
         <title>CSS - Personnalisez vos hyperliens avec un pictogramme (icon)</title>
         <link>http://www.trucsweb.com/tutoriels/css/css_htperliens_avec_pictogramme/</link>
         <description>Identifier vos documents PDF, Word ou tout autres hyperlien à l’aide d’un pictogramme personnalisé Font Awesome.</description>
         <dc:creator>Django (Oznog) Blais</dc:creator>
         <guid>http://www.trucsweb.com/tutoriels/css/css_htperliens_avec_pictogramme/</guid>   
         <category>JavaScript</category>
         <enclosure url="http://www.trucsweb.com/documents/images/2021/terre_masque.jpg" length="406" type="image/jpeg" />
         <source url="http://www.trucsweb.com/documents/syndication/rss.rdf">Syndication RSS - Trucsweb.com</source>
         <content:encoded><![CDATA[<p>Identifier vos documents PDF, Word ou tout autres hyperlien à l’aide d’un pictogramme personnalisé Font Awesome.</p>]]></content:encoded>
         <pubDate>Fri, 26 Feb 2021 21:00:00 GMT</pubDate>
      </item>
   </channel>
</rss>

La feuille de styles rss.css compatible avec les deux versions. Cette feuille de styles offre aussi une version adaptative (responsive).

/* Fichier rss.css */
body {
  font: 14px 'Open Sans', Helvetica, Arial, sans-serif;
  margin: 0;
}
a {
  color: #3498db;
  text-decoration: none;
}
h1 {
  margin: 0;
}
#description {
  background-color: #343a40;
  color: #FFF;
  padding: 30px 30px 20px;
}
#description a {
  color: #fff;
}
#content {
  padding: 0px 0px 0px;
  background: #fff;
}
@media (min-width: 768px) {#content {padding: 10px 30px 30px;}}
a:hover {
  border-bottom: 1px solid;
}
th, td {
  font-size: 12px;
}
th {
  text-align: left;
  border-bottom: 1px solid #ccc;
}
th, td {
  padding: 10px 15px;
}
tr:hover {
  background-color: #eeeeee;
}
.odd {
  background-color: #eeeeee;
}
.odd:hover {
  background-color: #ccc;
}
#footer {
  margin: 20px 30px;
  font-size: 12px;
  color: #999;
}
#footer a {
  color: inherit;
}
#description a, #footer a {
  border-bottom: 1px solid;
}
#description a:hover, #footer a:hover {
  border-bottom: none;
}
img.thumbnail {
  max-height: 100px;
  max-width: 100px;
}
.pasmobile, .paspad {display:none;}
@media (min-width: 768px) {.pasmobile {display:table-cell;}}
@media (min-width: 1000px) {.paspad {display:table-cell;}}

Et le fichier ou script XSL pour la version standard RSS 2.0 rss20.xsl. Noter le « template multiple » pour convertir la date anglaise en français. Et une petite passe pour récupérer le dc:creator pour un RSS valide, car l’élément author de base demande une adresse courriel (!). D’ailleurs il y a plein de petits trucs que j’ai acquis au fil des années dans ce petit bout de code :

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0'
  xmlns:html="http://www.w3.org/TR/REC-html40"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
	<title>Syndication <xsl:value-of select="rss/channel/title"/></title>
        <link rel="stylesheet" href="/tutoriels/xml/rss-styliser-xsl-css/rss.css" />
	<meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
      </head>	
      <xsl:apply-templates select="rss/channel"/>		
    </html>
  </xsl:template>

  <xsl:template match="channel">
    <body>
      <div id="description">        
	<img src="{image/url}" style="max-height:100px;float:right;margin-left:20px;" alt="{image/title}" />
	<h1>Syndication <xsl:value-of select="title"/></h1>
    	<p>Fil de nouvelle RSS poussé par <a href="{image/link}"><xsl:value-of select="image/title"/></a></p>
    	<p><small>
    	  <xsl:value-of select="description"/><br />Dernière mise à jour : <xsl:apply-templates select="lastBuildDate"/>
    	</small></p>
      </div>
      <div id="content">
	<table style="width:100%">
	  <tr>
	    <th class="pasmobile">#</th>
	    <th class="pasmobile">Image</th>
	    <th class="pasmobile">Titre</th>
	    <th class="paspad">Auteur</th>
	    <th class="pasmobile">Date</th>
	  </tr>
          <xsl:apply-templates select="item"/>
        </table>
      </div>
      <div id="footer">
	<img src="/neural/images/l_oz2012.png" style="float:right;margin-left:20px;" alt="Oznogco" />
	<p>Généré par <a href="https://neural.quebec" target="_blank">Neural v7.3.0</a></p>
      </div>
    </body>
  </xsl:template>
  <xsl:template match="item">
    <tr>
      <xsl:choose>
    	<xsl:when test="position() mod 2 != 1">
    	  <xsl:attribute name="class">odd</xsl:attribute>
    	</xsl:when>
      </xsl:choose>
      <td class="pasmobile">
        <xsl:value-of select = "position()" />
      </td>
      <td>
	<xsl:if test="enclosure/@url">
      	  <div style="border:1px solid #ccc;background: #ffffff url({enclosure/@url}) center top no-repeat; background-size: cover;width:30px;height:30px;"></div>
        </xsl:if>
      </td>
      <td>
        <a href="{link}"><xsl:value-of disable-output-escaping="yes" select="title"/></a><br />
        <small><xsl:value-of disable-output-escaping="yes" select="description" /></small>
      </td>
      <td class="paspad">
        <xsl:value-of select="child::*[local-name()='creator']"/>
      </td>
      <td class="pasmobile">
        <xsl:apply-templates select="pubDate" />
      </td>
    </tr>		
  </xsl:template>
  <xsl:template match="pubDate|lastBuildDate">
    <xsl:choose>
      <xsl:when test="substring(., 6,2) = '01'">
        <xsl:value-of select="substring(., 7,1)" />er
      </xsl:when>
      <xsl:when test="substring(., 6,1) = '0'">
        <xsl:value-of select="substring(., 7,1)" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="substring(., 6,2)" />
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text> </xsl:text>
    <xsl:choose>
      <xsl:when test="substring(., 9,3) = 'Jan'">janvier</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Feb'">février</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Mar'">mars</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Avr'">avril</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Mai'">mai</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Jun'">juin</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Jui'">juillet</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Aou'">août</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Sep'">septembre</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Oct'">octobre</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Nov'">novembre</xsl:when>
      <xsl:when test="substring(., 9,3) = 'Dec'">décembre</xsl:when>
      <xsl:otherwise>erreur</xsl:otherwise>
    </xsl:choose>
    <xsl:text> </xsl:text><xsl:value-of select="substring(., 13, 4)"/>
  </xsl:template>
</xsl:stylesheet>

DÉMO RSS 2.0 [RSS valide]


Fichier ou script XSL pour la version RSS 1.0 RDF rss10.xsl comme les Trucsweb.com. Noter le « template » pour convertir la date ISO en français :

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0'
	xmlns:html='http://www.w3.org/TR/REC-html40'
	xmlns:sitemap='http://www.sitemaps.org/schemas/sitemap/0.9'
	xmlns:rss="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.0/"
	exclude-result-prefixes="#default xsl rdf dc rss"
	xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
<xsl:template match="/">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<title>Communiqués (RSS) - <xsl:value-of select="rdf:RDF/rss:channel/rss:title"/></title>
        <link rel="stylesheet" href="/neural/xsl/rss.css" />
    	<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
    </head>
    <body>
    	<div id="description">
    	  <img src="http://www.trucsweb.com/img/t_tut3.png" style="max-height:100px;float:right;margin-left:20px;" alt="{rdf:RDF/rss:channel/rss:title}" />
    	  <h1><xsl:value-of select="rdf:RDF/rss:channel/rss:title"/></h1>
    	  <xsl:choose>
    	    <xsl:when test='not(sitemap:sitemapindex/sitemap:sitemap)'>
    	      <p><strong></strong></p>
    	    </xsl:when>
    	  </xsl:choose>
    	  <p>Fil de nouvelle RSS poussé par <a href="{rdf:RDF/rss:channel/rss:link}"><xsl:value-of select="rdf:RDF/rss:channel/rss:title"/></a></p>
    	  <p><small><xsl:value-of select="rdf:RDF/rss:channel/rss:description"/><br /><xsl:value-of select="rdf:RDF/rss:channel/rss:date"/></small></p>
    	</div>
    	<div id='content'>
    	  <table style="width:100%">
    	    <tr>
    	      <th class="pasmobile">#</th>
    	      <th class="pasmobile">Image</th>
    	      <th class="pasmobile">Titre</th>
    	      <th class="paspad">Auteur</th>
    	      <th class="pasmobile">Date</th>
    	    </tr>
    	    <xsl:for-each select="rdf:RDF/rss:item">
    	      <tr>
    		<xsl:choose>
    		  <xsl:when test='position() mod 2 != 1'>
    		    <xsl:attribute name="class">odd</xsl:attribute>
    		  </xsl:when>
    		</xsl:choose>
    		<td class="pasmobile">
    		  <xsl:value-of select = "position()" />
    		</td>
    		<td>
    		  <xsl:if test="rss:image/@rdf:resource">
          	    <div style="border:1px solid #ccc;background: #ffffff url({rss:image/@rdf:resource}) center top no-repeat; background-size: cover;width:30px;height:30px;"></div>
          	  </xsl:if>
          	</td>
    		<td><a href="{rss:link}"><xsl:value-of select="rss:title"/></a><br /><small><xsl:value-of select="rss:description"/></small></td>
    		<td class="paspad"><xsl:value-of select="child::*[local-name()='creator']"/></td>
                <td class="pasmobile"><xsl:apply-templates select="child::*[local-name()='date']" /></td>
    	      </tr>
    	    </xsl:for-each>
    	  </table>
    	</div>
    	<div id="footer">
    	  <img src="http://www.trucsweb.com/neural/images/l_oz2012.png" style="float:right;margin-left:20px;" alt="Oznogco" />
    	  <p>Généré par <a href="https://neural.quebec" target="_blank">Neural v7.3.0</a></p>
    	</div>
    </body>
  </html>
</xsl:template>

  <xsl:template match="child::*[local-name()='date']">
    <xsl:choose>
       <xsl:when test="substring(., 9,2) = '01'">
         <xsl:value-of select="substring(., 10,1)" />er
       </xsl:when>
       <xsl:when test="substring(., 9,1) = '0'">
         <xsl:value-of select="substring(., 10,1)" />
       </xsl:when>
       <xsl:otherwise>
         <xsl:value-of select="substring(., 9,2)" />
       </xsl:otherwise>
     </xsl:choose>
     <xsl:text> </xsl:text>
     <xsl:choose>
       <xsl:when test="substring(., 6,2) = '01'">janvier</xsl:when>
       <xsl:when test="substring(., 6,2) = '02'">février</xsl:when>
       <xsl:when test="substring(., 6,2) = '03'">mars</xsl:when>
       <xsl:when test="substring(., 6,2) = '04'">avril</xsl:when>
       <xsl:when test="substring(., 6,2) = '05'">mai</xsl:when>
       <xsl:when test="substring(., 6,2) = '06'">juin</xsl:when>
       <xsl:when test="substring(., 6,2) = '07'">juillet</xsl:when>
       <xsl:when test="substring(., 6,2) = '08'">août</xsl:when>
       <xsl:when test="substring(., 6,2) = '09'">septembre</xsl:when>
       <xsl:when test="substring(., 6,2) = '10'">octobre</xsl:when>
       <xsl:when test="substring(., 6,2) = '11'">novembre</xsl:when>
       <xsl:when test="substring(., 6,2) = '12'">décembre</xsl:when>
       <xsl:otherwise>erreur</xsl:otherwise>
     </xsl:choose>
     <xsl:text> </xsl:text><xsl:value-of select="substring(., 1, 4)"/>
  </xsl:template>
  
</xsl:stylesheet>

Noter que les Trucsweb.com utilisent le format RDF. C’est un RSS 1.0 de 2000 format « Resource Description Framework (RDF) » extensible. Il faut ajouter le Type MIME « application/rdf+xml » sur la grande majorité des serveurs, originalité oblige... Il permet entre autres les dates ISO 8601 au lieu du format anglais Sat, 07 Sep 2002 00:00:01 GMT probablement idéale quand on est anglais et localisé directement sur le « Greenwich Mean Time » (Temps moyen de Greenwich ;-)


DÉMO RSS 1.0 (RDF)



Conclusion

Le résultat est pas mal : http://www.trucsweb.com/documents/syndication/rss.rdf. Et si vous m’avez suivi, vous pouvez comprendre que chaque tutoriel des Trucsweb.com est généré de la même manière, avec un langage serveur certes, mais sans l’aide d’une base de données...

J’ajouterais en terminant que le XML est par définition un langage extensible. C’est-à-dire qu’il est possible d’ajouter à volonté des noms d’éléments et d’attributs en respectant les règles bien sûr. Et une des règles est essentiellement les espaces de noms (namespaces), par exemple les espaces de noms des Trucsweb.com. Les espaces de noms XML fournissent une méthode simple pour qualifier les balises ou noms d’éléments et d’attributs utilisés dans les documents extensibles (Extensible Markup Language) en les associant à des espaces de noms identifiés par des références URI. La liberté totale en principe. En principe, car le problème avec les espaces de noms XML c’est les valideurs en ligne qui retourne des erreurs si vous n’êtes pas Amazone ou un autre Big Brother du Web. C’est toujours possible de demander d’ajouter vos espaces de noms, mais je n’ai jamais réussi avec les miens. Une incongruité chauvine de Web dit ouvert...

Pourquoi créer ses propres espaces de nom ? La syndication décrit tout type de contenu, c’est déjà une bonne raison. Mais pour les RSS? Les formats RSS 0.98, 0.99, 1.0, 2.0, 2.0.11, dates déjà de 20 ans. Bien avant l’ère du mobile moderne. Juste l’exemple de l’image, une vignette accompagnant un texte. Les experts que j’appelle amicalement appelés les maniaques ; -) Impose d’indiquer le type, mais aussi le poids des images ! Mon gestionnaire compile bien le poids des images, mais pas dans un code HTML. Il ne faut pas se demande pourquoi un géant comme la BBC ne mentionne aucune image dans ses RSS. La BBC n’a pas d’image ?

J’utilise les noms d’espaces d’amazone justement pour ajouter des images, et rester valide (!). Cette fois, c’est les dimensions de l’image, par chance elles ne sont pas requises, probablement par manque de rigueur du valideur. Mais dans un contexte adaptatif (responsive) on n’indique plus les dimensions de l’image qui varie aux pixels prêts en fonction de l’espace disponible ! Il est peut-être le temps de revoir le format RSS ? Ha! c’est vrai, j’oubliais le Big des Bigs qui a sa propre solution ; -))

Références
, Analyste programmeurConception oznogco multimédia (https://oznogco.com), Trucsweb
Dernière mise à jour :

Commentaires

  • Cool, un article sur le XSL ! Nostalgie. Peut-être une technologie trop simple (et un peu trop différente) pour des programmeurs qui se sont beaucoup investis dans d'autres langages. Dommage, car c'est une belle approche, qui aurait pu rendre pâle Web un peu plus sémantique, ouvert, standardisé... Il me semble (je ne suis pas un expert).
    64x64
    Thomas
    Date (GMT) : 2021-09-02 15:00:50 (UTC +0000)
    Date local : Thu Sep 02 2021 11:08:52 GMT-0400 (EDT)
    • Héhé, en fait c'est bien plus moderne, mais c'est trop libre et probablement trop ouvert pour les GAFAM. Alors les moutons suivent le troupeau tout simplement. Mais le duo XML/XSL est aussi plus complexe, enfin plus complexe que le format JSON (lui est vraiment très vieux) et les langages serveur largement utilisés par Google par exemple. Quand je pense qu'on a fait un retour aux dinosaures avec les applications mobiles, les compilateurs, les ID Apple et Android, les boutiques Apple et Google. Alors que le Web libre était déjà là, indépendant, les bras grands ouverts sans aucun arrière pensé. Faut croire que nous ne somment pas assez libre d'esprit pour réveiller ! Heil, on est encore au iFrame dans un Web lourd, tellement lourd et redondant ! Mais le XSL c'est encore l'avenir (et c'est le fun !) même si ça fait plus de 20 ans que ça existe, on est juste en retard. C'est le vrai Web 2 aujourd’hui galvaudé, c'est le vrai web sémantique, et c'est le Web rêvé par Tim Berners-Lee qui va probablement mourir avant que le monde s'en aperçoivent ;- ) J'ai vu des institutions, des professeurs, des concours Web et même un concourt d'informatique officielle lever le nez sur cette technologie. On appelle ça de bêtes préjugés d'une culture imbu d'elle-même et surtout bandé sur la réussite essentiellement pécuniaire et l'attrait du gigantisme... Mais bon, ils se bruleront les ailes ;- )) Merci pour ton commentaire.
      64x64
      oznog
      Date (GMT) : 2021-09-02 15:21:26 (UTC +0000)
      Date local : Thu Sep 02 2021 11:29:28 GMT-0400 (heure avancée d


    Ajouter un commentaire
    Votre adresse de courriel ne sera pas publiée. * L'astérisque indique les champs obligatoires.
    Votre évaluation du tutoriel

    8/10 sur 1 revues.
           Visites : 3922 - Pages vues : 3989
    X

    Trucsweb.com Connexion

    Connexion

    X

    Trucsweb.com Mot de passe perdu

    Connexion

    X

    Trucsweb.com Conditions générales

    Conditions

    Responsabilité

    La responsabilité des Trucsweb.com ne pourra être engagée en cas de faits indépendants de sa volonté. Les informations mises à disposition sur ce site le sont uniquement à titre purement informatif et ne sauraient constituer en aucun cas un conseil ou une recommandation de quelque nature que ce soit.

    Aucun contrôle n'est exercé sur les références et ressources externes, l'utilisateur reconnaît que les Trucsweb.com n'assume aucune responsabilité relative à la mise à disposition de ces ressources, et ne peut être tenue responsable quant à leur contenu.

    Droit applicable et juridiction compétente

    Les règles en matière de droit, applicables aux contenus et aux transmissions de données sur et autour du site, sont déterminées par la loi canadienne. En cas de litige, n'ayant pu faire l'objet d'un accord à l'amiable, seuls les tribunaux canadien sont compétents.

    X

    Trucsweb.com Trucsweb

    X

    Trucsweb.com Glossaire

    X

    Trucsweb.com Trucsweb

    X

    Trucsweb.com Trucsweb

    Conditions

    Aucun message!

    Merci.

    X
    Aucun message!
    X

    Trucsweb.com Créer un compte

    Créer un compte

    .
    @