Envoyé par : bross
Date : 25/04/2006 11:42
Bonjour, je n'arrive pas a modifier une sequence RDF. J'arrive à modifier la description (en suivant le tuto). par exemple :
<RDF:Description RDF:about="http://www.site.com/ACHCDA2C/MAGASIN"> <MODIF:name>MAGASIN</MODIF:name>
devient sans probleme:
<RDF:Description RDF:about="http://www.site.com/ACHCDA2C/TOTO"> <MODIF:name>TOTO</MODIF:name>
mais je ne sais pas comment changer
<RDF:Seq RDF:about="http://www.site.com/ACHCDA2C"> <RDF:li RDF:resource="http://www.site.com/ACHCDA2C/MAGASIN"/> </RDF:Seq>
en
<RDF:Seq RDF:about="http://www.site.com/ACHCDA2C"> <RDF:li RDF:resource="http://www.site.com/ACHCDA2C/TOTO"/> </RDF:Seq>
Comment faire ? Merci d'avance
Envoyé par : alexp
Date : 25/04/2006 13:08
Seq est un élément RDF conteneur, et il y'a des objets XPCOM spéciaux pour les modifier : voir le tutoriel sur les conteneurs RDF
Tu devrais donc arriver à faire ce que tu veux avec un code proche de ceci :
var container = Components.classes["@mozilla.org/rdf/container;1"]. createInstance(Components.interfaces.nsIRDFContainer); try { container.Init(datasource, le_seq_a_modifier); container.RemoveElement(ancien_element,true);// ou container.RemoveElementAt(0,true); container.AppendElement(nouveau_element); } catch (ex){}
Envoyé par : bross
Date : 25/04/2006 14:18
c'est bien ce que je fais et ça fonctionne mais le problème est lorsque ça modifie et ecrit dans le fichier, le fichier se trouve complètement désorganisé, les Seq se retrouvent avant les descriptions et du coup, si je modifie un élément se trouvant au milieu de la seq, tous les autres éléments suivant ne sont plus afficher lors du rechargement Comment résoudre ce problème ?
Envoyé par : alexp
Date : 25/04/2006 14:37
Etrange, pour moi, le fichier RDF est toujours réorganisé en interne mais l'ordre des déclarations dans le fichier ne doit pas avoir d'importance ? Si un pro peut confirmer ...
Envoyé par : laurentj
Date : 25/04/2006 14:52
Comment résoudre ce problème ?
il n'y a pas de problème à resoudre. Du moment que les references sont toujours bonne, l'ordre de la description des elements n'a aucune importance.
Envoyé par : bross
Date : 25/04/2006 15:15
peut etre que je m'y prend mal voila mon code :
extrait du rdf (sans toutes les descriptions)
<?xml version="1.0" encoding="iso-8859-1"?> <RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:MODIF="http://www.site.com/rdf#"> <RDF:Description RDF:about="http://www.site.com/GCHAXFAC"> <MODIF:name>GCHAXFAC</MODIF:name> </RDF:Description> <RDF:Description RDF:about="http://www.site.com/ACHCDA2C"> <MODIF:name>ACHCDA2C</MODIF:name> </RDF:Description> <RDF:Description RDF:about="http://www.site.com/ACHCDA2C/JLESUEUR"> <MODIF:name>JLESUEUR</MODIF:name> <MODIF:nid>d0e137</MODIF:nid> </RDF:Description> <RDF:Description RDF:about="http://www.site.com/ACHCDA2C/MAGASIN"> <MODIF:name>MAGASIN</MODIF:name> <MODIF:nid>d0e141</MODIF:nid> </RDF:Description>
<RDF:Seq RDF:about="http://www.site.com/all-elts"> <RDF:li> <RDF:Seq RDF:about="http://www.site.com/ACHCDA2C"> <RDF:li RDF:resource="http://www.site.com/ACHCDA2C/JLESUEUR"/> <RDF:li RDF:resource="http://www.site.com/ACHCDA2C/MAGASIN"/> </RDF:Seq> </RDF:li> <RDF:li> <RDF:Seq RDF:about="http://www.site.com/GCHAXBON"> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/JECOUDER"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/MLJOANNES"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/EBERLEMON"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/EDEPIERRE"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/EC"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/JUAN"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/ELEBORGNE"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/GJEAN"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/CCROISSANT"/> <RDF:li RDF:resource="http://www.site.com/GCHAXBON/CMALLET"/> </RDF:Seq> </RDF:li> </RDF:Seq> </RDF:RDF>
code :
var classdoc = document.getElementById("labelClasse").value; var ancienNom = document.getElementById("selectedLabel").value; var nouveauNom = document.getElementById("nouveau-nom").value; var nid = document.getElementById("labelNid").value; var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]. getService(Components.interfaces.nsIRDFService); var ds = rdfService.GetDataSourceBlocking("file:///home/users.rdf"); var subject = rdfService.GetResource("http://www.site.com/" +classdoc +"/" + ancienNom ); var predicate = rdfService.GetResource("http://www.site.com/rdf#name"); var oldName = rdfService.GetLiteral(ancienNom); var newName = rdfService.GetLiteral(nouveauNom); ds.Change(subject, predicate, oldName, newName); var newSubject = rdfService.GetResource("http://www.site.com/"+classdoc + "/" + nouveauNom); ds.Move(subject, newSubject, predicate, newName); var predicate2 = rdfService.GetResource("http://www.site.com/rdf#nid"); var newNid = rdfService.GetLiteral(nid); ds.Assert(newSubject, predicate2, newNid, true); ds.Unassert(subject,predicate2,newNid); var container = Components.classes["@mozilla.org/rdf/container;1"]. createInstance(Components.interfaces.nsIRDFContainer); var folderRes = rdfService.GetResource("http://www.site.com/"+ classdoc); try { container.Init(ds, folderRes); container.RemoveElement(subject,true); container.AppendElement(newSubject); } catch (ex){}; ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); ds.Flush(); recharger();
Envoyé par : bross
Date : 25/04/2006 16:19
vous avez raison, ce n'est pas un problème rdf mais un problème de rechargement, ma méthode de rechargement ne doit pas etre correcte :(
Envoyé par : bross
Date : 25/04/2006 17:44
ce qui est bizarre c'est que lorsque je recharge en utilisant :
var conteneurTreeUser = document.getElementById("treeUser"); conteneurTreeUser.builder.refresh();
alors je n'ai que la partie supérieure visible de mon tree (au dessus de l'element modifie), alors que si je ferme l'appli et que je recompile, le tree s'affiche correctement. Quelqu'un a-t-il une solution ?
Envoyé par : bross
Date : 26/04/2006 16:09
je n'ai toujours pas de solution à mon problème, avez vous des pistes afin que ça fonctionne correctement car je ne vois plus ou chercher actuellement
Envoyé par : alexp
Date : 26/04/2006 16:30
Le problème ne doit pas se situer au niveau du refresh, puisque l'arbre devrait être modifié directement après les appels : assert, change, removeelement, appendelement, ...
(il n'y a pas besoin de faire un refresh pour voir apparaitre les modifications du datasource)
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.