Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'êtes peut-être pas le premier...Les traductions en français des bibles XML.Ces articles sont des références dans leur domaine.Tout ce qu'il faut savoir pour démarrer sur un sujet XML...


Introduction à RSS 1.0

L’objectif de RSS est de permettre l’alimentation d’un site Web avec des composants documentaires provenant d’un autre site web. Nous allons décrire dans ce tutoriel le modèle et la syntaxe de RSS.

Philippe Lahaye, http://lahayenadeau.free.fr/. Extrait de "Les systèmes de gestion de contenu : description, classification et évaluation" (http://lahayenadeau.free.fr/memoire_cms.htm).
vendredi 22 octobre 2004

Table des matières

RDF Site Summary (RSS)

Introduction

Structure de base

Modules

Le module Dublin Core

Le module Syndication

Le module « content »

conclusion

Annexes

Schéma RDF des documents RSS

Exemple de fichier RSS de syndication

Pour en savoir plus

En anglais

En français

Sur XMLfr

RDF Site Summary (RSS)

Ce tutoriel présente le modèle et la syntaxe de RSS de telle sorte que le lecteur puisse s’approprier ce cadre (par référence au terme anglo-saxon « framework », qui est aussi traduit par ossature, squelette...) et l’utiliser dans un système de gestion de contenu et en particulier un système de gestion de site web. Elle est aussi une illustration de l’utilisation de RDF et des méta données de Dublin Core.

Introduction

L’objectif de RSS est de permettre l’alimentation d’un site Web avec des composants documentaires provenant d’un autre site web.

Il a été initialement mis en œuvre pour afficher les entêtes de nouvelles (news, annonces, brèves…) de sites Web d’informations et notamment pour les agréger. Ainsi sur une même page, à propos d’un thème particulier, sont regroupées des entêtes de nouvelles provenant de plusieurs sites web distincts. Chaque site source nourrit le site fédérateur (d’où le terme anglais “RSS feed”, utilisé comme concept RSS). Simple en apparence et dans ses spécifications, RSS est très puissant et est utilisé dans de nombreux portails.

Un des fondements de la version 1.0 de RSS, comme son nom développé nous l’indique (RDF Site Summary), est la mise en œuvre de RDF pour réaliser un document RSS. RSS s’appuie donc aussi sur la notion d'espaces de noms (namespaces). RSS est un exemple d’application et de l’extensibilité de RDF à travers l’utilisation des schémas RDF.

La version RSS couverte dans ce tutoriel est 1.0. RSS 1.0 est un format de syndication à vocation normative développé par un groupe indépendant : le groupe de travail RSS (RSS Working Group : http://web.resource.org/rss). Elle ne devrait plus évoluer, seuls de nouveaux modules permettent de l’étendre.

Une version 2.0 de RSS a été également proposée par un autre groupe indépendant. Directement dérivée de RSS 0.91 et RSS 0.92 (qui n'utilisent pas RDF), RSS 2.0 doit être considérée comme une proposition concurrente à RSS 1.0 et non comme une de ces évolutions.

RSS n’est donc pas prévu initialement pour échanger des documents, mais plutôt les méta données des documents. Cependant, avec la version 1.0 et son mécanisme d’extension à travers l’utilisation et le rajout possible de modules, il est théoriquement possible d’échanger des documents. Un module est un schéma RDF complémentaire. En tant qu’application de RDF, RSS montre bien que ce premier convient bien à l’échange de méta données, comme cela est son objectif. Concrètement, dans le CMS important les composants documentaires, seul le fichier RSS et donc les méta données sont intégrées. Le document n’est relié que par un lien (un URI) permettant d’accéder au document dans le système source.

Le format RSS est concrètement un document XML qui obéit à une structure de base. Les modules permettent d’enrichir la structure de base. Nous allons maintenant aborder ces éléments du format de syndication RSS.

Structure de base

La structure de base d’un document RSS est la suivante :

  • déclaration XML,
  • le conteneur ,
  • description du canal,
  • description de l’image (optionnelle),
  • description du ou des articles,
  • description du champ de saisie (optionnelle).

Cette structure est toujours la même dans les documents RSS. Elle est conforme au schéma RDF des données RSS. Aussi, un exemple permet d’aborder chaque élément de la structure.

<?xml version="1.0"?>

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
>

  <channel rdf:about="http://www.xml.com/xml/news.rss">
    <title>XML.com</title>
    <link>http://xml.com/pub</link>
    <description>
      XML.com features a rich mix of information and services 
      for the XML community.
    </description>

    <image rdf:resource="http://xml.com/universal/images/xml_tiny
.gif" />

    <items>
      <rdf:Seq>
        <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt
.html" />
        <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/ind
ex.html" />
      </rdf:Seq>
    </items>

    <textinput rdf:resource="http://search.xml.com" />

  </channel>
  
  <image rdf:about="http://xml.com/universal/images/xml_tiny.gif"
>
    <title>XML.com</title>
    <link>http://www.xml.com</link>
    <url>http://xml.com/universal/images/xml_tiny.gif</url>
  </image>
  
  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
    <title>Processing Inclusions with XSLT</title>
    <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
    <description>
     Processing document inclusions with general XML tools can be
 
     problematic. This article proposes a way of preserving inclu
sion 
     information through SAX-based processing.
    </description>
  </item>
  
  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html
">
    <title>Putting RDF to Work</title>
    <link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>
    <description>
     Tool and API support for the Resource Description Framework 
     is slowly coming of age. Edd Dumbill takes a look at RDFDB, 
     one of the most exciting new RDF toolkits.
    </description>
  </item>

  <textinput rdf:about="http://search.xml.com">
    <title>Search XML.com</title>
    <description>Search XML.com's XML collection</description>
    <name>s</name>
    <link>http://search.xml.com</link>
  </textinput>

</rdf:RDF>

Cet exemple requiert bien sûr des commentaires supplémentaires. Notons déjà que chaque élément est décrit par des propriétés title, link, description. La propriété link contient une URL pointant vers l’élément décrit. La propriété description est optionnelle (pour l’élément item), absente pour l’élément image ou obligatoire pour les autres éléments (channel et textinput).

L’élément channel définit le site ou la page web (la ressource) syndiquée. Un fichier RSS décrit un « canal » RSS. L’élément channel contient une référence aux éléments associés : image, items, textinput. On peut penser qu’il s’agit d’une redondance puisqu’on les trouve dans la suite du document RSS de l’exemple, mais c’est surtout une facilité pour des traitements complémentaires.

L’élément image permet d’associer une image au canal RSS dans le site Web fédérateur. L’image doit être normalement d’une dimension de 88x33 pixels.

L’élément item définit le composant documentaire recherché pour la syndication. Il peut être répété 15 fois au maximum dans les versions 0.9x de RSS. C’est le cœur du document RSS.

Enfin l’élément textinput permet d’associer un champ de saisie à une URL qui reçoit via la méthode HTTP GET la valeur de la variable de requête saisie. Cet élément est l’objet de controverses dans le groupe de travail RSS. Il est utilisé traditionnellement comme boîte de recherche ou comme champ de formulaire.

Comme cela a été dit. Cela paraît simple et çà l’est. Mais cela offre déjà des mécanismes d’agrégation (fédération) puissant. Cependant, il est possible de les étendre encore via l’utilisation des modules RSS, objet du chapitre suivant.

Modules

La structure de base d’un document RSS peut être enrichie grâce à l’utilisation des modules RSS. La modularisation est basée sur la capacité d’extension de RDF.

Les modules reconnus comme normes associées à RSS 1.0 par ses auteurs sont les suivants :

  • Dublin Core,
  • Syndication,
  • Content.

Un exemple d’enrichissement de la structure d’un « canal » RSS par l’utilisation des modules est donné en annexe.

Le module Dublin Core

RSS adopte le schéma de méta données de Dublin Core pour définir un ensemble de méta données normalisées associé à RSS 1.0.

Le module Syndication

Ce module est conçu pour fournir un exemple de variables de fréquence de mise à jour à ceux qui utilisent RSS pour agréger des informations. Il contient 3 éléments : updatePeriod, updateFrequency et updateBase.

L’élément updatePeriod définit la période au delà de laquelle le « canal » est mis à jour. C’est à dire qu’il définit la période de rafraîchissement du fichier RSS importé par le CMS "agrégateur". Les valeurs acceptées sont hourly, daily, weekly, monthly, yearly, soit en français, toutes les heures, quotidiennement, hebdomadairement, mensuellement et annuellement.

L’élément updateFrequency est utilisé pour décrire la fréquence des mises à jour en relation avec la valeur définie pour la période de mise à jour. Un entier positif indique combien de fois dans cette période le « canal » est mis à jour. Par exemple, une période quotidienne et une fréquence de mise à jour de « 2 » indiquent que le canal RSS est mis à jour deux fois par jour.

Enfin, l’élément updateBase définit, en concert avec les deux éléments précédent, la date et l’horaire de la mise à jour de la publication. L’élément updateBase permet de calculer cette date. On s’aperçoit ici que RSS a bien été conçu et utilisé pour la gestion de site web. Le format de date se conforme au format de date définit par le W3C.

Ces éléments montrent que RSS est prévu pour que cela soit le site fédérateur qui interroge le site d’origine du document. Cela a cependant un coût important au regard de ce qu’il serait si, à l’inverse, il était prévu que cela soit le site d’origine qui mette à jour le site "syndicateur" uniquement en cas de mise à jour du composant documentaire original.

Le module « content »

C’est un module qui permet de répliquer le contenu effectif du site web fédéré et qui permet de définir les formats du contenu. La partie concernant les contenus encodés (content:encoded) n’est pas « normalisée » par le groupe de travail RSS.

Aussi ce module définit un seul élément central : item. que nous écrivons content:item afin de le diffrencier de l’élément item de la structure de base de RSS (cf. section «  »). Les éléments content:item sont inclus dans un élément englobant content:items qui est lui-même un sous-élément de l’élément item ou de l’élément channel de RSS.

Un élément content:item peut inclure les sous-éléments suivants : content:format, content:encoding, rdf:value.

L’élément content:format est obligatoire. C’est un élément vide (au sens XML) contenant un attribut rdf:resource qui pointe vers un URI représentant le format de l’élément content:item. La meilleure pratique suggérée est d’utiliser la liste des « natures » RDDL (Resource Directory Description Language, http://www.rddl.org/ ). RDDL définit les valeurs possibles de la nature d’une ressource référencée de la manière suivante : « Quand une ressource référencée est un document XML et que sa nature peut-être déduite de l’URI du domaine nominal de l’élément racine du document XML, l’URI de domaine nominal est la nature de la ressource référencée. Quand une ressource référencée n’est pas un document XML et que sa nature peut être déduite de son type MIME, la nature de la ressource référencée est obtenue en attachant le type de contenu au préfixe http://www.isi.edu/in-notes/iana/assignments/media-types/ ». Cette référence à tout type de document XML et aux types de contenu MIME offre une couverture largement acceptable et presque universelle des types de documents existants dans le monde. Il semble cependant qu’il y ait là une ambiguïté entre le « type de document » et le « format » tel qu’ils sont décrit par le DCES (Dublin Core Element Set).

L’élément rdf:value est obligatoire si aucune URI n’est définie dans l’attribut rdf:about de l’élément content:item. L’élément contient le contenu du composant documentaire. C’est donc le cœur du module et en tout cas son objet. Il est encodé comme spécifié dans l’élément content:encoding. Si le contenu est en XML et que l’élément content:encoding ne précise rien, alors l’attribut rdf:parseType doit avoir la valeur "Literal" (rdf:parseType="Literal") afin de respecter la syntaxe RDF.

content:encoding est un élément optionnel vide (au sens de XML) avec un attribut rdf:resource pointant vers une URI qui doit représenter l’encodage du contenu de content:item.

A travers les exemples des spécifications du module « content » et la préférence affichée pour l’utilisation de valeurs contenues dans la liste RDDL des natures, on s’aperçoit avec ce dernier élément (content:encoding) que le module « content » est surtout prévu pour échanger des documents de type XML ou HTML, c’est à dire des formats de documents contenus dans des serveurs web.

conclusion

RSS est un exemple de format de syndication de documents issu et utilisé principalement pour la gestion de site web et par extension dans les portails. La structure de base de RSS permet la réplication des méta données des composants documentaires. Ces méta données peuvent être étendues de manière non-limitative grâce aux modules. RSS est aussi assez complet pour pouvoir autoriser la réplication des documents eux-mêmes grâce au module « Content ».

RSS est donc un exemple intéressant de protocole d’EDI pour la gestion de contenu qui illustre l’échange de méta données et de composants documentaires. Le respect de XML et de RDF par RSS fait qu’il est par ailleurs largement substituable par un format propriétaire offrant les mêmes services.

Annexes

Schéma RDF des documents RSS

<?xml version="1.0" ?> 
<!-- 

RDF Schema declaration for Rich Site Summary (RSS) 1.0 <http://pu
rl.org/rss/1.0/>

note: This schema currently is defining RSS-specific constructs 
(resource and relationship types) only. No contraints have been 
introduced.

Note: this schema is represented in the RDF M&S abbreviated 
syntax <http://www.w3.org/TR/REC-rdf-syntax/#abbreviatedSyntax> f
or 
syntactic inclusion in an HTML/XHTML document


  --> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:dc="http
://purl.org/dc/elements/1.1/">
<!--   Class declarations   
  --> 
<rdfs:Class rdf:about="http://purl.org/rss/1.0/channel" rdfs:labe
l="Channel" rdfs:comment="An RSS information channel.">
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdfs:Class>
<rdfs:Class rdf:about="http://purl.org/rss/1.0/image" rdfs:label=
"Image" rdfs:comment="An RSS image.">
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdfs:Class>
<rdfs:Class rdf:about="http://purl.org/rss/1.0/item" rdfs:label="
Item" rdfs:comment="An RSS item.">
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdfs:Class>
<rdfs:Class rdf:about="http://purl.org/rss/1.0/textinput" rdfs:la
bel="Text Input" rdfs:comment="An RSS text input.">
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdfs:Class>
<!--   Property declarations   
  --> 
<rdf:Property rdf:about="http://purl.org/rss/1.0/items" rdfs:labe
l="Items" rdfs:comment="Points to a list of rss:item elements tha
t are members of the subject channel.">
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdf:Property>
<rdf:Property rdf:about="http://purl.org/rss/1.0/title" rdfs:labe
l="Title" rdfs:comment="A descriptive title for the channel.">
  <rdfs:subPropertyOf rdf:resource="http://purl.org/dc/elements/1
.1/title" /> 
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdf:Property>
<rdf:Property rdf:about="http://purl.org/rss/1.0/link" rdfs:label
="Link" rdfs:comment="The URL to which an HTML rendering of the s
ubject will link.">
  <rdfs:subPropertyOf rdf:resource="http://purl.org/dc/elements/1
.1/identifier" /> 
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdf:Property>
<rdf:Property rdf:about="http://purl.org/rss/1.0/url" rdfs:label=
"URL" rdfs:comment="The URL of the image to used in the 'src' att
ribute of the channel's image tag when rendered as HTML.">
  <rdfs:subPropertyOf rdf:resource="http://purl.org/dc/elements/1
.1/identifier" /> 
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdf:Property>
<rdf:Property rdf:about="http://purl.org/rss/1.0/description" rdf
s:label="Description" rdfs:comment="A short text description of t
he subject.">
  <rdfs:subPropertyOf rdf:resource="http://purl.org/dc/elements/1
.1/description" /> 
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdf:Property>
<rdf:Property rdf:about="http://purl.org/rss/1.0/name" rdfs:label
="Name" rdfs:comment="The text input field's (variable) name.">
  <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/" /> 
  </rdf:Property>
  </rdf:RDF>

Source : http://purl.org/rss/1.0/schema.rdf

Exemple de fichier RSS de syndication

<?xml version="1.0" encoding="utf-8"?> 

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:co="http://purl.org/rss/1.0/modules/company/"
  xmlns:ti="http://purl.org/rss/1.0/modules/textinput/"
  xmlns="http://purl.org/rss/1.0/"
> 

  <channel rdf:about="http://meerkat.oreillynet.com/?_fl=rss1.0">
    <title>Meerkat</title>
    <link>http://meerkat.oreillynet.com</link>
    <description>Meerkat: An Open Wire Service</description>
    <dc:publisher>The O'Reilly Network</dc:publisher>
    <dc:creator>Rael Dornfest (mailto:rael@oreilly.com)</dc:creat
or>
    <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, I
nc.</dc:rights>
    <dc:date>2000-01-01T12:00+00:00</dc:date>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>2</sy:updateFrequency>
    <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>

    <image rdf:resource="http://meerkat.oreillynet.com/icons/meer
kat-powered.jpg" />

    <items>
      <rdf:Seq>
        <rdf:li resource="http://c.moreover.com/click/here.pl?r12
3" />
      </rdf:Seq>
    </items>

    <textinput rdf:resource="http://meerkat.oreillynet.com" />

  </channel>

  <image rdf:about="http://meerkat.oreillynet.com/icons/meerkat-p
owered.jpg">
    <title>Meerkat Powered!</title>
    <url>http://meerkat.oreillynet.com/icons/meerkat-powered.jpg<
/url>
    <link>http://meerkat.oreillynet.com</link>
  </image>

  <item rdf:about="http://c.moreover.com/click/here.pl?r123">
    <title>XML: A Disruptive Technology</title> 
    <link>http://c.moreover.com/click/here.pl?r123</link>
    <dc:description>
      XML is placing increasingly heavy loads on the existing tec
hnical
      infrastructure of the Internet.
    </dc:description>
    <dc:publisher>The O'Reilly Network</dc:publisher>
    <dc:creator>Simon St.Laurent (mailto:simonstl@simonstl.com)</
dc:creator>
    <dc:rights>Copyright &#169; 2000 O'Reilly &amp; Associates, I
nc.</dc:rights>
    <dc:subject>XML</dc:subject>
    <co:name>XML.com</co:name>
    <co:market>NASDAQ</co:market>
    <co:symbol>XML</co:symbol>
  </item> 

  <textinput rdf:about="http://meerkat.oreillynet.com">
    <title>Search Meerkat</title>
    <description>Search Meerkat's RSS Database...</description>
    <name>s</name>
    <link>http://meerkat.oreillynet.com/</link>
    <ti:function>search</ti:function>
    <ti:inputType>regex</ti:inputType>
  </textinput>

</rdf:RDF>

Pour en savoir plus

En anglais

  • RDF Site Summary (RSS) 1.0 / specifications / The members of the RSS-DEV Working Group / version 1.3.4 / 2001-05-30 / URL de la Dernière version : http://purl.org/rss/1.0/spec
  • RSS Tutorial for Content Publishers and Webmasters / ©2002 Mark Nottingham <mnot@pobox.com> / Version 0.72 / September 4, 2002 / URL dernière version : http://www.mnot.net/rss/tutorial/
  • RDF Site Summary 1.0 Modules / The members of the RSS-DEV Working Group / version 1.3.2 / 2001-03-20 / URL de la dernière version : http://purl.org/rss/1.0/modules/
  • RDF Site Summary 1.0 Modules: Dublin Core / The members of the RSS-DEV Working Group / version 1.4.1 / 2000-12-20 / URL de la dernière version : http://purl.org/rss/1.0/modules/dc/
  • RDF Site Summary 1.0 Modules: Syndication / The members of the RSS-DEV Working Group / version 1.4.1 / 2000-12-20 / URL de la dernière version : http://purl.org/rss/1.0/modules/syndication/
  • RDF Site Summary 1.0 Modules: Content / Gabe Beged-Dov - JFinity Systems LLC, Aaron Swartz - AaronSw.com, Eric van der Vlist – Dyomedea / version 1.02 / 2001-04-05 / URL de la dernière version http://purl.org/rss/1.0/modules/content/

En français

Sur XMLfr


 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org