Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Fichier RDF dans le chrome

Envoyé par : Vilya

Date : 30/04/2006 22:36

Bonsoir,

J'arrive au bout d'une première mouture de mon extension mais bien évidemment les vraies difficultés surviennent lorsqu'il faut tout remettre en ordre pour une distribution.

Je travaillais jusqu'à présent sur une installation un peu batarde dans laquelle j'appelais certains fichiers en local (pas dans le chrome donc). J'avais par exemple un fichier .RDF en local ("file://c:/...") dans lequel j'insérais et supprimais des entrées sans aucun problème.

J'ai tout passé en chrome et curieusement, si mes fonctions de lecture du RDF fonctionnent toujours, mes fonctions d'écriture non. J'ai retourné mon code dans tous les sens et je suis quasi persuadée de ne rien avoir oublié dans la transition.

Concrètement, avec mon rdf déclaré en chrome://monExt/content/myRDF.rdf :

<RDF:Description RDF:about="http://www.monsite.com/data"
   JOL:nom="Elessar"
   JOL:prenom="Vilya" />

Mon code :

var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
var ds = rdfService.GetDataSourceBlocking("chrome://monExt/content/myRDF.rdf");
var subjectResource = rdfService.GetResource("http://www.monsite.com/data");
var predicateResource = rdfService.GetResource("http://www.monsite.com/rdf#prenom");
var target = ds.GetTarget(subjectResource, predicateResource, true);
alert(target.Value);

renverra bien "Vilya"

Mais :

var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
var ds = rdfService.GetDataSourceBlocking("chrome://monExt/content/myRDF.rdf");
var subjectResource = rdfService.GetResource(http://www.monsite.com/data);
var predicateResource = rdfService.GetResource(http://www.monsite.com/rdf#prenom);
var oldValue = rdfService.GetLiteral("Vilya");
var newValue = rdfService.GetLiteral("Nenya");
ds.Change(subjectResource, predicateResource, oldValue, newValue);

ne modifiera rien du tout :/

  • Est-ce lié au fait que j'ai passé le fichier RDF dans le chrome ?
  • Est-ce un comportement normal ?
  • Est-ce une histoire de droit ?
  • Y a t'il une subtilité sur le GetDataSource au lieu de GetDataSourceBlocking ?

J'explore les spec et le web depuis cette après midi et je fais choux blanc.

En espérant que vous ayiez une idée,

Vilya

# Re: Fichier RDF dans le chrome

Envoyé par : Vilya

Date : 01/05/2006 00:55

Une donnée supplémentaire si ça peut réveiller des souvenirs lointains chez certains ?

Sans changer une ligne de code, je copie juste mon RDF dans un répertoire local et je change le

var ds = rdfService.GetDataSourceBlocking("chrome://monExt/content/myRDF.rdf");

en

var ds = rdfService.GetDataSourceBlocking("file://c:/myPath/myRDF.rdf");

et ça marche... mais ne résout pas du tout mon problème.

J'avoue que là je suis perdue et bluffée.

Pourquoi est-ce que le fait d'appeler le RDF lorsqu'il est dans le chrome bloquerait l'écriture ? Ce qui m'étonne également c'est de n'avoir aucun log sur la console JS, le grand blanc :/

# Re: Fichier RDF dans le chrome

Envoyé par : Eric

Date : 01/05/2006 13:17

En effet, c'est un comportement normal.

Les chrome datasources sont readonly.

http://lxr.mozilla.org/seamonkey/source/(..)

Tu peux peut-être essayer en ajoutant la ligne

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");

avant d'écrire dans la datasource mais je ne crois pas que cela va fonctionner.

# Re: Fichier RDF dans le chrome

Envoyé par : Vilya

Date : 01/05/2006 14:42

Merci Eric de confirmer mes doutes. Au moins ça m'évitera de continuer à chercher en vain.

Ce que je ne comprends pas bien alors c'est l'intérêt de travailler avec du RDF dans tout ça ? Typiquement, dans mon extension je peuple une liste à partir d'un rdf. Ce rdf est propre à chaque utilisateur donc stocké sur sa machine. Il a la main sur la liste et peut y rajouter ou supprimer des entrées. Pour une persistance de l'information (aka qu'il puisse retrouver la même liste à l'ouverture suivante de son navigateur) le plus intelligent me paraissait de manipuler le RDF. Ce qui n'est clairement pas possible quand ils sont dans le chrome.

  • Où puis-je placer le rdf dans ce cas pour que mon extension n'ait pas de problèmes de droits d'écriture et lecture dessus ?
  • Dois-je oublier l'idée du RDF ? J'ai pensé à utiliser le système de préférences utilisateurs de Mozilla mais ça ne me parait pas vraiment adapté lorsqu'il peut y avoir plus de 300 paramètres...
  • D'une manière générale, quel est le moyen pour une extension de manipuler de grandes quantités de données (genre source d'un tree important) sur le pc de l'utilisateur toujours dans un soucis de persistance ?

# Re: Fichier RDF dans le chrome

Envoyé par : Eric

Date : 01/05/2006 16:52

Même si ta datasource est dans le chrome, tu peux la récupérer en utilisant un uri du type file://...

Regarde sur le site :

http://www.xulfr.org/wiki/RessourcesLibs(..)

Ca devrait résoudre ton problème.

# Re: Fichier RDF dans le chrome

Envoyé par : laurentj

Date : 02/05/2006 10:37

Euh, Vilya, je trouve tout à fait logique que l'on ne puisse pas modifier un fichier déclaré dans le chrome, surtout quand ledit fichier est situé dans un jar, car cela veut dire alors que tu modifie l'extension. C'est normal que l'on ne puisse pas modifier une archive (et puis quoi encore ? :-)

Les données de l'utilisateur, on ne les mets pas dans une archive jar, on les stockes dans le profil. Donc à la première utilisation, tu copie le RDF stocké dans ton extension, dans le profil utilisateur (voir dans le wiki pour savoir récupérer le chemin du profil, pas de chemin en dur hein !!!), et ensuite, c'est sur ce fichier là que tu bosses, et non celui qui est dans l'extension..

# Re: Fichier RDF dans le chrome

Envoyé par : Vilya

Date : 02/05/2006 20:04

Dommage ça aurait été bien pratique mais effectivement pas très logique ;)

Moi qui pensait m'être débarassée du RDF j'ai visiblement pas encore tout vu, je m'en vais de ce pas mettre tout ça dans le profil utilisateur.

Merci encore pour vos conseils :)

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

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.