Écrit par Neil Deakin.
Traduit par René-Luc D'Hont (13/06/2005).
Page originale :
http://www.xulplanet.com/tutorials/mozsdk/rdfresources.php
Cette section décrit les ressources et literals 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);
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.
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.
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.