Bonjour à tous,

J'ai un peu de mal avec les spécifications des formats XML utilisés pour la syndication de contenu Web (Atom, RSS 1.0 et RSS 2.0), et tout particulièrement avec les éléments optionnels (dc:date, dc:creator, etc).

Pour donner un exemple plus ou moins cohérent, je vais prendre l'exemple du fil RSS d'Aslacréations. Lorsqu'on regarde le code source du fichier XML on voit que c'est sur la version RSS 2.0 que s'appuie la structure du document.

<rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/" 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">


Selon la spécification de RSS 2.0,c'est l'élément pubDate qui doit être utilisé pour indiquer la date de publication. Or, sur le fichier XML on voit que c'est l'élément dc:date qui est utilisé. Cela engendre de la part de mon parseur XML qu'il ne reconnaît pas cet élément vu qu'il se base sur la version de l'élément rss.

J'imagine qu'une partie de la réponse à ma question est présente dans les espaces de nom xmlns:* situés dans l'élément rss ci-dessus. Mais vu que je suis un peu perdu je la pose tout de même.

Doit-on spécifier quelque part dans la structure du document XML qu'on utilise des éléments d'une version antérieure de RSS ou Atom? Si oui (car j'imagine que c'est la réponse), comment le spécifier? Peut-on également mettre les éléments normalement dédiés à la version 2.0 de RSS.

Voila, j'espère avoir été assez clair et que quelqu'un pourra m'aider.

À bientôt.
Salut,

Personnellement pour être sûr de récuperer l'élément correspondant à la date, je me suis écrit cette fonction :
<?php
function item_time($item){
$f=false;
if(isset($item['date_timestamp'])){
	$t=$item['date_timestamp'];
	$f=($t!=='');
}
elseif(isset($item['pubdate'])){
	$pubdate=$item['pubdate'];
	if($pubdate!=='')$f=(($t=@strtotime($pubdate))!==false);
}
elseif(isset($item['dc']['date'])){
	$pubdate=$item['dc']['date'];
	if($pubdate!=='')$f=(($t=@strtotime($pubdate))!==false);
}
if(($f)and(($pubdate=@date('d/m/Y',$t))!==false))return $pubdate;
return '';
}
?>