Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# manipuler des RDF avec javascript

Envoyé par : David@site

Date : 20/08/2004 10:42

bonjour tout le monde!

suite de mes peripeties dans le monde du XUL....

Voila je voudrais faire le meme truc que dans le chap 8.3 du tutorials XULplanet pour une application Chrome (voir ici). A savoir une menulist qui va chercher les valeurs des ses menuitem dans un fichier RDF (facile ça) mais aussi dans lequel l'utlisateur puisse inserer ses propres textes (donc reecrire le fichier RDF, aie! plus dur ça)

alors voila les portions de codes: fichier.xul

<menulist id="apigoogle-panel-find-text" flex="1" style="min-width: 15em;"
         editable="true"
         datasources="chrome://xugle/content/recents.rdf"
         ref="http://www.xugle.net/allrecent">
 	<template>
   		<menupopup>
     		    <menuitem label="rdf:http://www.xugle.net/rdf#label" uri="rdf:*"/>
   		</menupopup>
 	</template>
</menulist>
<button id="apigoogle-panel-button1" label="Enregistrer" oncommand="apidoFind()" />

un extrait du javascript:

try {
var RDFC = '@mozilla.org/rdf/container;1';
RDFC = Components.classes[RDFC].createInstance(Components.interfaces.nsIRDFContainer);
var RDFCUtils = '@mozilla.org/rdf/container-utils;1';
RDFCUtils = Components.classes[RDFCUtils].getService(Components.interfaces.nsIRDFContainerUtils);
var RDF = '@mozilla.org/rdf/rdf-service;1'
RDF = Components.classes[RDF].getService(Components.interfaces.nsIRDFService);
} catch (ex){
alert(ex); }
var dsource;
function initSearchList()
{var recentlist=document.getElementById("apigoogle-panel-find-text");
 var sources=recentlist.database.GetDataSources();
 var rootnode=RDF.GetResource("http://www.xugle.net/allrecent");  
 while (sources.hasMoreElements())
 { 
   try
   {
     dsource=sources.getNext();
     dsource=dsource.QueryInterface(Components.interfaces.nsIRDFDataSource);
     RDFC.Init(dsource,rootnode); 
   } catch (e) {
     RDFCUtils.MakeSeq(dsource,rootnode); 
     RDFC.Init(dsource,rootnode);  
   }
 }
}
function apidoFind()
{
 var recentlist=document.getElementById("apigoogle-panel-find-text");
 var fldval = recentlist.value;
 addSearchedItem(fldval);
}
function addSearchedItem(txt)
{ var newnode = RDF.GetResource("http://www.xugle.net/allrecent/item"+(RDFC.GetCount()+1));
 var labelprop = RDF.GetResource("http://www.xugle.net/rdf#label");
 var newvalue = RDF.GetLiteral(txt);
 alert("newvalue: "+newvalue);
 dsource.Assert(newnode,labelprop,newvalue,true);
 RDFC.InsertElementAt(newnode,1,true);
    dsource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
}

Et enfin le fichier RDF:

<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:RECENTDATA="http://www.xugle.net/rdf#">
 <RDF:Seq RDF:about="http://www.xugle.net/allrecent">
   <RDF:li>
      <RDF:Description RDF:about="http://www.xugle.net/allrecent/item1">
        <RECENTDATA:label>http://www.site-en-stock.net</RECENTDATA:label>
      </RDF:Description>
   </RDF:li>
   <RDF:li>
      <RDF:Description RDF:about="http://www.xugle.net/allrecent/item2">
        <RECENTDATA:label>http://www.webrankinfo.com/</RECENTDATA:label>
      </RDF:Description>
   </RDF:li>
   <RDF:li>
      <RDF:Description RDF:about="http://www.xugle.net/allrecent/item3">
        <RECENTDATA:label>http://www.xulplanet.com/</RECENTDATA:label>
      </RDF:Description>
   </RDF:li>
   <RDF:li>
      <RDF:Description RDF:about="http://www.xugle.net/allrecent/item4">
        <RECENTDATA:label>http://www.ouirock.com/</RECENTDATA:label>
      </RDF:Description>
   </RDF:li>
 </RDF:Seq>
</RDF:RDF> 

la liste des RECENTDATA:label s'affiche bien dans mon menulist, super! Mais si je veux entrer une nouvelle valeur lors de l'appui sur le bouton apigoogle-panel-button1 (pour appeler la fonction apidoFind()), le javascript debugger (de mozilla-1.6) me retourne l'erreur suivante: @@ uncaught eception [Exception... "Component returned failure code:0x80004005 (NS_ERROR_FAILURE) nsIRDFContainer.InsertElementAt" nsresult:"0x80004005(NS_ERROR_FAILURE)" location: "JS frame::chrome://xugle/content/xugle.js:: addSearchedItem::lin 98" data: no@@ et la ligne 98 en question c'est RDFC.InsertElementAt(newnode,1,true); J'avoue ne pas comprendre parce que la variable txt me renvoie bien ce que j'ai saisi dans le champ du menuitem, apres je n'ai fais que suivre l'exemple du chapitre 8.3, sauf que moi c'est pour appli chrome et que dans leur exemple c'est pour un file://

voila alors si qqun a une idee pour debugger, ou un lien avec des exemple de manipulation de RDF par javascript je suis preneur.

@+ David

# Re: manipuler des RDF avec javascript

Envoyé par : Franck (odb)

Date : 30/08/2004 12:08

Salut,

j'ai trouvé dans les sources de l'appli 'BUGZULA' un fichier rdflib.js qui manipulerait (je ne m'en suis jamais servi) les rdf

il y a aussi un ensemble de fichier js dans l'appli "calendar" de thunderbird

si cela peut t'aider a resoudre tes pbs

A+, F.

# Re: manipuler des RDF avec javascript

Envoyé par : David@site

Date : 31/08/2004 13:03

Salut Franck,

bugzula je connais pas, bugzilla si par contre, t'as pas confondus le nom? Pour calendar je vais m'y pencher, sinon au pire je m'inspirerais du projet MAB lui, il a carrement fait son propre format de fichier (c'est en fait du xml avec l'extension .mab)

@+ David

# Re: manipuler des RDF avec javascript

Envoyé par : David@site

Date : 05/09/2004 15:53

Voila j'ai regle mon probleme d'ecriture de RDF, j'utilise jslib: http://jslib.mozdev.org/index.html c'est pas super bien documente pour les RDF mais les sources aide bien, bon il me reste plus qu'a afficher en temps reel le contenu de mon RDF et ca sera parfait!

@+ David

# Re: manipuler des RDF avec javascript

Envoyé par : Utilisateur anonyme

Date : 04/01/2005 23:37

Merci pour la publicité libre ! ! !

http://www.xugle.com

# Re: manipuler des RDF avec javascript

Envoyé par : Utilisateur anonyme

Date : 05/01/2005 11:07

Jim a écrit:

Merci pour la publicité libre ! ! !


http://www.xugle.com

De rien :-)) C'est juste le nom de code pour le développement en interne ;-), je changerai de nom quand mon extension sera prête. C'est dommage ça me plaisait bien comme nom :-(.

David

# Re: manipuler des RDF avec javascript

Envoyé par : Utilisateur anonyme

Date : 03/05/2005 02:29

Salut David,

j'ai eu la même galère que toi, en essayant de parcourir / modifier un RDF avec l'exemple de xulplanet, ça n'a pas marché (avec la même erreur que toi). J'ai essayé la jslib comme tu le dis, mais, en essayant la fonction walk_rdf() j'ai une erreur comme quoi la classe RDFFile n'existe pas ! Est ce que tu peux me dire comment tu as fait, ou me montrer ton code ? C'est peut être une erreur d'include de ma part ...

bye

guillaume

# Re: manipuler des RDF avec javascript

Envoyé par : DavidB

Date : 03/05/2005 08:05

Salut guillaume,

voici ce que j'ai dans mon fichier monappli.xul:

<script type="application/x-javascript" src="chrome://jslib/content/jslib.js" />
<script type="application/x-javascript" src="chrome://jslib/content/rdf/rdf.js" />
<script type="application/x-javascript" src="chrome://jslib/content/rdf/rdfResource.js" />
<script type="application/x-javascript" src="chrome://jslib/content/rdf/rdfFile.js" />
<script type="application/x-javascript" src="chrome://jslib/content/rdf/rdfContainer.js" />
<script type="application/x-javascript" src="chrome://jslib/content/rdf/rdfBase.js" />
<script type="application/x-javascript" src="chrome://jslib/content/rdf/inMemoryRDF.js" />

Tu devrais avoir besoin des 2 premiers plus celui qui contient la fonction walk_rdf(), pour les autres ça depned de ton application.

David

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.