Spécifier un format d'échange permettant notamment :
Dans le but d'améliorer le service fourni par l'ACM, il est proposé les éléments suivants :
Un laboratoire souhaitant faire référencer ses séminaires sur le serveur de dépôt commun peut facilement les soumettre au format OSEF depuis son propre serveur web.
par exemple : http://mon-laboratoire.mon-domaine.fr/umr9089.osef
Un script exécuté à interval régulier (chaque jour) sur le serveur de dépôt récupère ce fichier depuis les serveurs des laboratoires ayant demandé leur affiliation et le valide à l'aide du schéma XML-OSEF.
Si un fichier est valide, les données qu'il contient sont importées dans le dépôt commun SQL (dans la négative, on peut par exemple envoyer un mail au contact ACM du laboratoire).
Pour garder la compatibilité avec la méthodologie d'alimentation du dépôt SQL de l'ACM 1.0, le référentiel est l'ensemble des fichiers XML OSEF, pas le dépôt SQL qui est détruit avant chaque nouvelle alimentation.
Ainsi la mise à jour ou la supression d'un séminaire se fait dans les fichiers XML OSEF eux mêmes et sont répercutées au dépôt SQL lors de l'alimentation suivante.
Les fichiers XML OSEF valides (au sens XML Schéma) sont ajoutés au dépot, en séquence.
Nous définissons ci-dessous une API indépendante du format XML-OSEF lui même.
Note 1 : les notations correspondent au langage Ruby mais sont assez proches d'un langage de spécification Objet.
Note 2 : OSEF est un module, Osef un objet, new une methode.
Méthode | Description |
---|---|
OSEF::Osef.new("fichier.osef") | crée un objet OSEF abstrait à partir du fichier XML OSEF |
OSEF::Osef.echo | retourne une chaine de caractère au format XML OSEF |
OSEF::Osef.version | retourne un réel positif représentant le numéro de version OSEF ex: 0.1 |
OSEF::Osef.etablissement | retourne une chaine de caractère représentant le nom de l'établissement auquel est rataché le laboratoire. ex: "CNRS" |
OSEF::Osef.id | retourne une chaine de caractère représentant l'identifiant du laboratoire dans son établissement. ex: "UMR 8050" |
Méthode | Description |
---|---|
OSEF::Osef.nom | retourne une chaine de caractère représentant le nom du laboratoire. ex: "Laboratoire d'Analyse et de Mathématiques Appliquées" |
OSEF::Osef.url | retourne une chaine de caractère contenant un lien vers la page internet du laboratoire ex: "http://umr-math.univ-mlv.fr/" |
OSEF::Osef.maj | retourne une table de hashage contenant l'horodate de dernière mise à jour. ex: { :jour=>"26", :mois=>"05", :annee=>"2005", :heure=>"12", :minute=>"30" } |
Méthode | Description |
---|---|
OSEF::Osef.seminaires | retourne un tableau de séminaires |
OSEF::Seminaire.horodate | retourne une table de hashage contenant l'horodate à laquelle se déroule le séminaire. ex: { :jour=>"15", :mois=>"06", :annee=>"2005", :heure=>"9", :minute=>"30" } |
OSEF::Seminaire.lieu | retourne une chaine de caractère représentant le lieu où se déroule le séminaire ex: "UMLV 3.075" |
OSEF::Seminaire.cadre | retourne une chaine de caractère représentant le cadre dans lequel se déroule le séminaire ex: "Groupe de travail méthodes probabilistes en convexité" |
Méthode | Description |
---|---|
OSEF::Seminaire.domaine | retourne une chaine de caractère représentant le domaine d'appartenance du séminaire ex: "Probabilités" |
OSEF::Seminaire.intervenant | retourne une table de hashage contenant les caractéristiques de l'intervenant. ex: { :prenom=>"Grigoris", :nom=>"PAOURIS", :etablissement_nom=> "University of Crete", :etablissement_nationalite=>"Grèce" } |
OSEF::Seminaire.sujet | retourne une chaine de caractère représentant le sujet du séminaire ex: "A short proof of the Harris-Kesten theorem on the percolation Z2 d'après Bollobas and Riordan" |
Le bloc XML « references » permet de définir les informations administratives relatives au laboratoire. Le bloc XML « seminaires » contient la succession de blocs XML décrivant un séminaire.
<?xml version='1.1' encoding='iso-8859-1'?> <osef xmlns="http://acm.smai.emath.fr/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://acm.smai.emath.fr seminaires.xsd"> <references> ... </references> <seminaires> ... </seminaires> </osef>
<?xml version='1.1' encoding='iso-8859-1'?> <osef xmlns="http://seminaire.math.cnrs.fr/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://seminaire.math.cnrs.fr osef.xsd"> <description>seminar exchange format</description> <version>0.1</version> <references> <etablissement>CNRS</etablissement> <nom>Laboratoire d'Analyse et de Mathématiques Appliquées</nom> <id>UMR 8050</id> <url>http://umr-math.univ-mlv.fr/</url> <maj> <jour>26</jour> <mois>05</mois> <annee>2005</annee> <heure>12</heure> <minute>30</minute> </maj> </references> ...
... <seminaires> <seminaire> <horodate> <jour>24</jour> <mois>05</mois> <annee>2005</annee> <heure>10</heure> <minute>30</minute> </horodate> <lieu>UMLV 3.075</lieu> <cadre>Groupe de travail méthodes probabilistes en convexité</cadre> <domaine>Probabilités</domaine> <intervenant> <prenom>Grigoris</prenom> <nom>PAOURIS</nom> <etablissement> <nom>University of Crete</nom> <nationalite>Grèce</nationalite> </etablissement> </intervenant> <sujet> A short proof of the Harris-Kesten theorem on the percolation Z2 d'après Bollobas and Riordan </sujet> <url>http://umr-math.univ-mlv.fr/seminaires/documents/conf-p12-13012005-1430-mendes.pdf</url> </seminaire> ...
... <seminaire> <horodate> <jour>24</jour> <mois>05</mois> <annee>2005</annee> <heure>10</heure> <minute>30</minute> </horodate> <lieu>UMLV 3.075</lieu> <cadre>Groupe de travail méthodes probabilistes en convexité</cadre> <domaine>Probabilités</domaine> <intervenant> <prenom>Matthieu</prenom> <nom>FRADELIZI</nom> <etablissement> <nom>Université de Marne-la-Vallée</nom> <nationalite>France</nationalite> </etablissement> </intervenant> <sujet> A short proof of the Harris-Kesten theorem on the percolation Z2 d'après Bollobas and Riordan </sujet> </seminaire> </seminaires> </osef>
require 'rexml/document' module OSEF class Osef attr_reader :version, :etablissement, :id, :nom, :url, :maj, :seminaires def initialize(_filename) @xml = REXML::Document.new(File.new(_filename)) @version = @xml.elements["//version"].text @etablissement = @xml.elements["//references/etablissement"].text @id = @xml.elements["//references/id"].text @nom = @xml.elements["//references/nom"].text @url = @xml.elements["//references/url"].text @maj = { :jour => @xml.elements["//references/maj/jour"].text, :mois => @xml.elements["//references/maj/mois"].text, :annee => @xml.elements["//references/maj/annee"].text, :heure => @xml.elements["//references/maj/heure"].text, :minute => @xml.elements["//references/maj/minute"].text } @seminaires = @xml.elements.to_a("//seminaires/seminaire/") @seminaires.collect!{|seminaire| Seminaire.new(seminaire) } end def echo return @xml end end
class Seminaire attr_reader :horodate, :lieu, :cadre, :intervenant, :sujet def initialize(_xml_entity) @xml = _xml_entity @horodate = { :jour => @xml.elements["horodate/jour"].text, :mois => @xml.elements["horodate/mois"].text, :annee => @xml.elements["horodate/annee"].text, :heure => @xml.elements["horodate/minute"].text, :minute => @xml.elements["horodate/minute"].text } @lieu = @xml.elements["lieu"].text @cadre = @xml.elements["cadre"].text @intervenant = { :prenom => @xml.elements["intervenant/prenom"].text, :nom => @xml.elements["intervenant/nom"].text, :etablissement_nom => @xml.elements["intervenant/etablissement/nom"].text, :etablissement_nationalite => @xml.elements["intervenant/etablissement/nationalite"].text } @sujet = @xml.elements["sujet"].text end def echo return @xml end end end
On fournit une liste définie de RPC permettant de soumettre des requêtes programmées auprès de l'ACM.
Les données sont retournées en XHTML 1.1 permettant à la fois l'affichage à destination humaine
et le traitement par des robots.
requête | description |
---|---|
http://domaine.tld/rpc/?action=display_current_day | affiche tous les séminaires du jour courant |
http://domaine.tld/rpc/?action=display_current_day&id=UMR8050 | affiche tous les séminaires de l'UMR8050 du jour courant |
http://domaine.tld/rpc/?action=display_known_days | affiche tous les séminaires du jour courant et à venir |
http://domaine.tld/rpc/?action=display_known_days&id=UMR8050 | affiche tous les séminaires de l'UMR8050 du jour courant et à venir |
D'autres requêtes assez simples pourraient être ajoutées à cette liste.
Really Simple Syndication / Rich Site Summary est une technologie utilisée par le monde de la presse pour diffuser de l'information sans que le diffuseur ait une connaissance explicite du consommateur de cette information.
C'est le consommateur qui fait la démarche de se syndiquer/désyndiquer directement sur son poste informatique.
Il est dès lors assez simple de définir des flux RSS correspondant aux séminaires publiés par l'ACM par domaine d'intérêt.
L'utilisateur a la liberté de s'abonner au(x) flux de son choix et d'être prévenu automatiquement des nouveaux séminaires publiés par l'ACM sans intervention spécifique de celui-ci.
Il est à noter que le fonctionnement actuel de l'ACM est incompatible avec l'usage de RSS; via Thunderbird par exemple.
NB : Un service web de validation de fil RSS est disponible à l'adresse http://feedvalidator.org/
<?xml version="1.0" encoding="iso-8859-1"?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> <title>UMR8050 - Laboratoire d'Analyse et de Mathématiques Appliquées</title> <link>http://umr-math.univ-mlv.fr/</link> <description>Séminaires de l'UMR8050</description> <language>fr</language> <generator>Ruby Web Engine</generator> <lastBuildDate>08 Jun 2005 17:40:00 CEST</lastBuildDate> <item> ... </item> ... <item> ... </item> </channel> </rss>
... <item> <title>Groupe de travail méthodes probabilistes en convexité</title> <link>http://umr-math.univ-mlv.fr/seminaires/#UMR8050-GTMPC-21062005-MLV-0.375-1030</link> <description> Intervenant: Grigouris PAOURIS Etablissement: University of Crete, Grèce Lieu: Université de Marne-la-Vallée Salle: 3.075 Titre: P-centroid bodies </description> <pubDate>Tue, 21 Jun 2005 10:30:00 +0200</pubDate> </item> ...
Les dates doivent être exprimées au format date-time de la RFC-822
date-time = [ day "," ] date time ; dd mm yy | hh:mm:ss zzz day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" date = 1*2DIGIT month 2DIGIT ; day month year ; e.g. 20 Jun 82 month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" time = hour zone ; ANSI and Military hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT] ; 00:00:00 - 23:59:59 zone = "UT" / "GMT" ; Universal Time ; North American : UT / "EST" / "EDT" ; Eastern: - 5/ - 4 / "CST" / "CDT" ; Central: - 6/ - 5 / "MST" / "MDT" ; Mountain: - 7/ - 6 / "PST" / "PDT" ; Pacific: - 8/ - 7 / 1ALPHA ; Military: Z = UT; ; A:-1; (J not used) ; M:-12; N:+1; Y:+12 / ( ("+" / "-") 4DIGIT ) ; Local differential ; hours+min. (HHMM)
Une description doit comporter uniquement du texte, pas de formatage HTML.
Les marque-pages dynamiques sont une nouvelle technologie de Firefox qui permet de visualiser les titres des actualités et des blogs RSS dans la barre d'outils et le menu des marque-pages.
D'un coup d'oeil, vous pouvez consulter les grands titres de vos sites favoris et vous rendre directement sur les pages qui vous intéressent. Un site est compatible avec les marque-pages dynamiques quand vous voyez cette icône dans le coin inférieur droit du navigateur.
En cliquant sur cette icône, vous pourrez choisir "s'inscrire à RSS" et ajouter un marque-page dynamique qui apparaîtra avec vos autres marque-pages. Firefox signale un fil RSS associé à une page web sous réserve de le déclarer dans l'entête.
<link rel="alternate" type="application/rss+xml" title="Mozilla Europe - News" href="/fr/news.rdf" />
Beaucoup de sites utilisent RSS pour publier leurs mises à jour.
Le site détermine le nombre de titres affichés et à quelle fréquence ils sont mis à jour.
Titres de Slashdot et de BBC News affichés dans la barre latérale.
Un clic sur un titre vous amène directement à l'article.
Thunderbird propose l'abonnement aux flux RSS et présente les nouvelles comme des
courriers électroniques classiques.