1.5 Ressources et literals RDF

Écrit par Neil Deakin. Traduit par René-Luc D'Hont (13/06/2005).
Page originale : http://www.xulplanet.com/tutorials/mozsdk/rdfresources.php xulplanet.com

Cette section décrit les ressources et literals RDF.

Ressources RDF

Des ressources RDF peuvent être recherchées en utilisant le service RDF. Elles sont identifiées par une URI. Vous ne pouvez pas employer une chaîne de caractère directement, vous devez obtenir un objet ressource en utilisant le service RDF. Les datasources enregistrent les références de ces ressources. Comme avec des datasources, le service RDF a un service pour mettre en cache des objets ressource. Quand une demande est faite pour une ressource qui est déjà dans le cache, la version du cache sera retournée. Cela signifie que chaque référence à une ressource sera identique. En code natif, chaque référence aura le même indicateur ainsi ils peuvent être comparés sans devoir faire une comparaison potentiellement plus coûteuse de chaîne de caractère.

Puisque la ressource est dans le cache, elle est globalement unique. Si plusieurs datasources se rapportent à la même ressource, ils se référeront tous à la même chose. Ceci permet facilement de combiner plusieurs datasources ensemble dans un unique composite-datasource et avoir toutes les données de tous les datasources comme si elles avaient été mélangées ensemble.

Les objets ressource implémente l'interface nsIRDFResource. Ne mettez jamais en application vos ressources propres dans le Javascript -- employez toujours le service RDF pour les rechercher. Autrement, le cache et la manipulation des ressources ne fonctionneront pas correctement. Heureusement, il n'y a aucune raison de mettre en application vos objets ressource propres car l'exécution standard est très bien pour la plupart des objectifs.

Une ressource peut être recherchée par le service RDF en utilisant la méthode GetResource. L'Uri de la ressource devrait être passée à cette méthode et elle renverra un objet ressource correspondant à cette URI. Par exemple:


var res = rdfService.GetResource("http://www.xulplanet.com/rdf/people/Karen");

Les noeuds anonymes sont ceux qui n'ont pas d'URI, et sont souvent employés comme des gardiens de place ou conteneur dans le graphique RDF. Mozilla manipule les noeuds blancs ou noeuds anonymes en leur assignant une URI aléatoirement produite. Cela signifie que des ressources anonymes sont manipulées de la même manière que d'autres ressources sauf que les URIs sont produites. Bien que vous ne devriez pas employer les URIs de ressource directement, elles commencent toujours par la chaîne de caractère 'rdf:#$' suivie de quelques lettres et nombres aléatoires. La méthode GetAnonymousResource du service RDF peut être employé pour rechercher les ressources anonymes. Il ne prend pas une URI comme argument, puisqu'elle sera produite.


var res = rdfService.GetAnonymousResource();

Quand la méthode GetResource est appelé, le service RDF regardera dans le cache pour voir si la ressource est déjà cachée. Si elle l'est, la ressource cachée sera retournée. Si la ressource n'est pas cachée, le service RDF créera un nouvel objet ressource et le renverra. Semblable à la façon dont le service RDF manipule des datasources, les ressources ne sont pas mises en cache directement par le service RDF. Ceci est manipulé dans la méthode Init de la ressource, qui sera appelé juste avant le revois de la méthode GetResource.

La ressource appellera la méthode RegisterResource du service RDF pour mettre en cache la ressource. Quand la dernière référence à la ressource est dépassée, l'objet ressource sera supprimé et la ressource appellera la méthode UnregisterResource du service RDF pour enlever la ressource du cache.

Quand le service crée une nouvelle ressource, il trouve un objet de fabrique qui est capable de créer la ressource. La fabrique est responsable d'allouer la ressource. Dans presque tous les cas, on emploiera la fabrique par défaut qui crée les objets standards de ressource. Il est possible de faire créer par une fabrique différente les ressources s'il y a un besoin de processus spécial. La fabrique saura employer le schéma de l'URI de la ressource. Par exemple, si l'Uri de la ressource était 'http://www.example.com/resource/', l'arrangement de l'Uri serait 'HTTP', ainsi une fabrique qui a produit des ressources 'HTTP' serait employée. Notez que ceci n'a rien à voir avec le HTTP des sites Web. Si l'Uri était 'urn:sample', une fabrique d' 'urn:'serait employée.

Ce mécanisme permet à un composant particulier fait sur commande d'avoir une implémentation ressource différente. Le service RDF recherchera un composant de la forme @mozilla.org/rdf/resource-factory;1?name=<scheme> où <scheme> est l'arrangement de URL. Ce composant sera employé pour créer les objets ressource. Ce dispositif est employé par l'application mail de Mozilla pour créer les ressources spécialisées. Cependant, ce dispositif n'est pas particulièrement nécessaire pour des usages généraux et devrait être évité. Dans la plupart des cas, une fabrique ne sera pas trouvée et une ressource par défaut sera créée.

Une fois que vous avez un objet ressource, vous pouvez obtenir son URI en recherchant la propriété Value. Vous ne pouvez pas changer l'Uri avec cette propriété -- vous devez obtenir un objet ressource en utilisant la méthode GetResource du service RDF. Voici un exemple qui recherche une ressource et donne son URI:


var res = rdfService.GetResource("http://www.xulplanet.com/rdf/people/Sandra");
alert(res.Value);

literals RDF

Mozilla manipule des literals RDF dans un mode semblable. Ils devraient être recherchées en utilisant le service RDF et sont mis en cache de sorte que le même objet soit retourné chaque fois qu'un literal est demandé. Les literals sont identifiées par le contenu de leur chaîne de caractère. Vous ne pouvez pas créer vos propres types literal et les rechercher avec le service RDF.

Mozilla soutient un certain nombre de différents types de literal, la plupart du temps pour la convenance. Les types sont récapitulés ci-dessous:

Type Interface de XPCOM Méthode du service RDF Description
String nsIRDFLiteral GetLiteral chaîne de caractères de toute longueur
Integer nsIRDFInt GetIntLiteral nombre entier de 32 bits
Date nsIRDFDate GetDateLiteral Un date/heure, initialisé en utilisant un nombre 64-bit de micro-secondes depuis janvier 1, 1970 GMT
Blob nsIRDFBlob GetBlobLiteral Toutes données binaires. Ce type n'est pas scriptable.

En outre énumérée dans la table, la méthode du service RDF qu'on appellerait pour rechercher un literal du type désiré. Tous les types literals sont en cache, ce qui signifient que chaque demande pour obtenir le literal '7' de nombre entier renverra le même objet.

Par exemple, pour rechercher un literal de type string, on peut employer:


var house = rdfService.GetLiteral("House");

Dans des fichiers RDF/XML, vous pouvez employer un attribut supplémentaire pour indiquer quel type de literal à employer. Dans les plus récentes propositions de spécifications du RDF, on devrait employer l'attribut rdf:datatype pour indiquer le type d'un literal. Le parseur RDF de Mozilla ne met pas en application ceci, encore car il a été écrit longtemps avant que les dispositifs plus nouveaux aient été indiqués, mais un dispositif semblable est disponible. Au lieu de cela, le type est indiqué en ajoutant un attribut NC:parseType à un literal. Le namespace 'NC' est 'http://home.netscape.com/NC-rdf#'. Ci-après un exemple:


<?xml version="1.0"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:NC="http://home.netscape.com/NC-rdf#">
         xmlns:sample="http://www.xulplanet.com/rdf/example/">

  <rdf:Description rdf:about="urn:person:Sandra">
    <sample:age NC:parseType="Integer">16</sample:age>
  </rdf:Description>

</rdf:RDF>

Comme avec des ressources, les literals ont également une propriété Value qui peut être employée pour obtenir la valeur du literal.

Noeuds RDF

Toutes les ressources RDF implémente nsIRDFResource et tous les literals implémente une des interfaces énumérées dans la table ci-dessus. Toutes les ressource et interfaces literals sont des sous-interfaces de l'interface plus général nsIRDFNode. Cette interface représente un noeud dans le graphique RDF et est disponible pour toutes les ressources et literals. Les méthodes d'interrogation du Datasource, qui peuvent renvoyer ou une ressource ou un literal, renverra un noeud et vous pouvez employer QueryInterface pour obtenir un noeud au type plus spécifique. Interrogez les méthodes qui peuvent seulement renvoyer une ressource renverraient directement nsIRDFResource.

L'interface nsIRDFNode a une méthode simple, EqualsNode ce qui peut être employé pour comparer deux noeuds sans devoir les obtenir. Cette méthode renverra vrai si les deux noeuds sont de même type et ont la même valeur.

Délégués RDF

Les délégués RDF sont une manière d'attacher un objet à une ressource RDF qui sera automatiquement gardée jusqu'à ce que la ressource ne soit plus employée. Quand la ressource est supprimée, le délégué est libéré et peut être ensuite supprimé, en supposant qu'elle n'est pas employée par autre chose. Vous n'emploierez probablement pas de délégués pour vos propres besoins, ainsi ils sont décrits seulement brièvement ci-dessous.


Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.