La bibliothèque Atom fournit un ensemble de fonctionnalités de base permettant d'utiliser des flux Atom. Elle fournit un modèle de données conçu pour gérer l'accès aux divers éléments d'entrées et de flux Atom. Elle fournit également un objet de transport destiné à gérer les diverses interactions avec les serveurs Web et à gérer les flux Atom standard ainsi que le protocole de publication Atom (APP).
Pour plus d'informations, reportez-vous à la section Spécification de syndication Atom. Pour plus d'informations, reportez-vous à la section Protocole de publication Atom.
Vous pouvez obtenir un flux de manière simple. Un objet AtomIO est créé à partir de toutes les interactions avec le serveur depuis le poste client. Ceci correspond à l'objet de transport mentionné ci-dessus, qui gère toute interaction avec le serveur Atom. Nous allons commencer par une tâche relativement simple, par exemple l'extraction d'un flux.
Le flux utilisé est identique à celui affiché dans l'exemple de page d'utilisation de widget. Ce flux est disponible ici. Le contenu de ce flux est affiché ci-dessous à titre de référence.
<?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xml:lang='en-US'> <title>Example.com</title> <link rel="alternate" type="text/html" href="http://example.com/" hreflang="en" title="Example.com" /> <subtitle type='text'>Exemple de flux Example.com</subtitle> <rights>Copyright Example.com</rights> <id>http://example.com/samplefeed.xml</id> <updated>2007-08-07T20:00:00-05:00</updated> <link rel="self" type="application/atom+xml" href="http://www.example.com/samplefeed.xml"/> <entry> <title>Entrée de test n°1</title> <id>http://example.com/samplefeed.xml/entry/1</id> <link rel='alternate' href='http://example.com/1.html'/> <summary type='html'> <p>Il s'agit d'un exemple d'entrée dans notre flux Atom, rien d'autre qu'un paragraphe de faux texte dans le résumé. <p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras cursus. Aliquam eget metus sed leo lacinia rutrum. Nunc lacus lacus, viverra placerat, laoreet nec, placerat vel, eros. Donec nec magna id sem commodo rutrum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Aenean pede. Quisque vel leo. In vitae nisi. Curabitur sodales congue nibh. Maecenas ultrices ante nec ipsum. Aenean quis nibh. Aenean semper, quam vitae ullamcorper euismod, arcu leo tincidunt nunc, vel pulvinar turpis dolor a elit. Praesent nonummy nunc faucibus nibh. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus laoreet, ante auctor condimentum venenatis, magna quam varius elit, at feugiat dolor metus id quam. Etiam enim.<p> </summary> <author> <name>Utilisateur du test</name> <email>test@example.com</email> </author> <updated>2007-08-07T04:00:00-05:00</updated> </entry> <entry> <title>Entrée de test n°2</title> <id>http://example.com/samplefeed.xml/entry/2</id> <link rel='alternate' href='http://example.com/2.html'/> <summary type='text'> Voici un exemple d'entrée dans notre flux Atom. Il s'agit simplement d'un paragraphe important dans le récapitulatif. Voici un texte simple. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras cursus. Aliquam eget metus sed leo lacinia rutrum. Nunc lacus lacus, viverra placerat, laoreet nec, placerat vel, eros. Donec nec magna id sem commodo rutrum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Aenean pede. Quisque vel leo. In vitae nisi. Curabitur sodales congue nibh. Maecenas ultrices ante nec ipsum. Aenean quis nibh. Aenean semper, quam vitae ullamcorper euismod, arcu leo tincidunt nunc, vel pulvinar turpis dolor a elit. Praesent nonummy nunc faucibus nibh. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus laoreet, ante auctor condimentum venenatis, magna quam varius elit, at feugiat dolor metus id quam. Etiam enim. </summary> <author> <email>test@example.com</email> </author> <updated>2007-08-07T06:00:00-05:00</updated> </entry> </feed>
A présent, utilisez le code suivant de manière à créer un objet de flux à partir de ce flux :
var _feed = null; var atomIO = new ibm_atom.io.atom.AtomIO(); function getComplete(feed, domNode){ _feed = feed; } atomIO.getFeed("samplefeed.xml", getComplete);
Ce bloc de code définit en premier lieu une variable_feed, puis crée un objet AtomIO. Il définit ensuite une fonction utilisée comme fonction de rappel et appelle enfin la fonction getFeed sur l'objet AtomIO afin d'extraire le flux. Dans le bloc de code précédent, la chaîne "samplefeed.xml" correspond à l'adresse URL donnant accès au flux.
Vous pouvez extraire tous les attributs du flux (tels que le titre, l'ID, les auteurs, les contributeurs, la date de mise à jour, etc.) à l'aide d'un objet de flux. En outre, les entrées se trouvant en-dessous de flux peuvent être extraites, soit sous forme de table soit individuellement en fonction de l'ID.
function getComplete(/* Atom Feed Object */ feed, /* DOM Node Object */ domNode){ _feed = feed; var id = _feed.id; // id now equals "http://www.onlamp.com/" var title = _feed.title.value; // _feed.title is a ibm_atom.io.atom.Content object, with a // value of "Example.com" var arrayOfEntries = _feed.entries; // an array of all entries. Current length is 3. var specificEntry = _feed.getEntry("http://example.com/samplefeed.xml/entry/2"); // the entry specified by the given ID string. In this case, // it is the first entry in our feed. }
Similairement à l'objet de flux, vous pouvez extraire plusieurs éléments, notamment le titre de l'entrée, l'id, la date de mise à jour, etc. à l'aide d'un objet d'entrée individuel. La seule et unique fonction sur un objet d'entrée permet d'obtenir l'adresse URL d'édition de cette entrée. Cette fonction n'est pas illustrée, car l'exemple de flux précédent n'inclut pas d'entrée éditable.
function getComplete(feed, domNode){ _feed = feed; var specificEntry = _feed.getEntry("http://example.com/samplefeed.xml/entry/2"); var id = specificEntry.id; // the id of the entry. var title = specificEntry.title.value; // the entry's title is an ibm_atom.io.atom.Content object, // the text value is in the 'value' attribute of that object. var updated = specificEntry.updated; // the entry's updated Date object. }
Les autres objets de modèle de données, tels que les auteurs et contributeurs, les liens, etc. fonctionnent tous de la même manière et ont leurs propres attributs et fonctions. Pour plus d'informations, reportez-vous à la page de référence.
L'objet AtomIO prend en charge d'autres fonctions afin de renvoyer des données vers le serveur et d'obtenir une seule entrée à l'aide de la fonction getEntry. Cela sert essentiellement à analyser le document relatif à une entrée Atom. En revanche, présentée avec un flux de document, il renvoie la première entrée de ce flux.
var _entry = null; var atomIO = new ibm_atom.io.atom.AtomIO(); function getComplete(/* Atom Entry Object */ entry, /* DOM Node Object */ domNode){ _entry = entry; var id = _entry.id; // the id of the entry. var title = _entry.title.value; // the entry's title is an ibm_atom.io.atom.Content object, // the text value is in the 'value' attribute of that object. var updated = _entry.updated; // the entry's updated Date object. } atomIO.getEntry("samplefeed.xml", getComplete);
En outre, grâce à l'objet AtomIO, vous pouvez renvoyer des entrées mises à jour vers le serveur avec l'adresse URL extraite à partir de l'entrée modifiée. Examinez l'exemple suivant :
var _entry = null; var atomIO = new ibm_atom.io.atom.AtomIO(); function getComplete(/* Atom Entry Object */ entry, /* DOM Node Object */ domNode){ _entry = entry; _entry.addLink("editURL", "edit"); _entry.title.value = "Test Title!"; function getComplete2(entry2, domNode){} atomIO.updateEntry(_entry, getComplete2); } atomIO.getEntry("samplefeedEdit.xml", getComplete);
Le code précédent ne fonctionne pas comme il se doit car 'editURL' doit être remplacée par une URL valide et un serveur APP doit répondre à la demande.
D'autres fonctions sont également disponibles sur l'objet AtomIO ; toutefois, la plupart d'entre elles sont identiques aux fonctions getFeed, getEntry et updateEntry mentionnées ci-dessus. Pour plus d'informations, reportez-vous à la page de référence.