Envoyé par : nicotaika
Date : 21/06/2006 11:53
Bonjour à tous, je vous soumets mon problème pour lequel je ne sais pas si la solution existe :
j'ai créé un exemple de RDF et de template permettant de lister des livres et leurs auteurs. J'aimerai tester la possibilité de lister tous les auteurs et pour chacun tous ses livres.
Mon RDF est le suivant :
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:auteurs="http://www.taika.fr/auteurs/" xmlns:livres="http://www.taika.fr/livres/"> <rdf:Description rdf:about="http://www.taika.fr/auteurs/1"> <auteurs:name>Hugo</auteurs:name> <auteurs:first-name>Victor</auteurs:first-name> </rdf:Description> <rdf:Description rdf:about="http://www.taika.fr/auteurs/2"> <auteurs:name>De Balzac</auteurs:name> <auteurs:first-name>Honoré</auteurs:first-name> </rdf:Description> <rdf:Seq rdf:about="http://www.taika.fr/all-auteurs"> <rdf:li rdf:resource="http://www.taika.fr/auteurs/1" /> <rdf:li rdf:resource="http://www.taika.fr/auteurs/2" /> </rdf:Seq> <rdf:Description rdf:about="http://www.taika.fr/livres/miserables"> <livres:title>Les Misérables</livres:title> <livres:auteur rdf:resource="http://www.taika.fr/auteurs/1"/> </rdf:Description> <rdf:Description rdf:about="http://www.taika.fr/livres/notredame"> <livres:title>Notre Dame de Paris</livres:title> <livres:auteur rdf:resource="http://www.taika.fr/auteurs/1"/> </rdf:Description> <rdf:Description rdf:about="http://www.taika.fr/livres/germinal"> <livres:title>Germinal</livres:title> <livres:auteur rdf:resource="http://www.taika.fr/auteurs/2"/> </rdf:Description> <rdf:Description rdf:about="http://www.taika.fr/livres/peregoriot"> <livres:title>Le père Goriot</livres:title> <livres:auteur rdf:resource="http://www.taika.fr/auteurs/2"/> </rdf:Description> <rdf:Seq rdf:about="http://www.taika.fr/livres/all-livres"> <rdf:li rdf:resource="http://www.taika.fr/livres/miserables" /> <rdf:li rdf:resource="http://www.taika.fr/livres/notredame" /> <rdf:li rdf:resource="http://www.taika.fr/livres/germinal" /> <rdf:li rdf:resource="http://www.taika.fr/livres/peregoriot" /> </rdf:Seq> </rdf:RDF>
Et mon xul dans lequel j'affiche tous les livres avec leur auteur (pour vérifier le bon fonctionnement) puis un deuxième template dans lequel j'imbrique un autre :
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window id="test-window" title="Test" orient="horizontal" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <vbox> <hbox> <label value="Affichage des livres et de leurs auteurs"/> </hbox> <vbox id="livresliste" datasources="livres_auteurs.rdf" ref="http://www.taika.fr/livres/all-livres"> <template> <rule> <conditions> <content uri="?start"/> <member container="?start" child="?livre"/> <triple subject="?livre" predicate="http://www.taika.fr/livres/title" object="?title"/> </conditions> <bindings> <binding subject="?livre" predicate="http://www.taika.fr/livres/auteur" object="?auteur"/> <binding subject="?auteur" predicate="http://www.taika.fr/auteurs/name" object="?auteurname"/> <binding subject="?auteur" predicate="http://www.taika.fr/auteurs/first-name" object="?auteurfirstname"/> </bindings> <action> <vbox uri="?livre" style="border-bottom:1px solid black;"> <label value="Titre : ?title"/> <label value="auteur : ?auteurfirstname ?auteurname"/> </vbox> </action> </rule> </template> </vbox> <spacer style="height:25px;"/> <hbox> <label value="Affichage des livres pour chaque auteur (template imbriqué)"/> </hbox> <vbox> <hbox id="livresliste" datasources="livres_auteurs.rdf" ref="http://www.taika.fr/all-auteurs"> <template> <rule> <conditions> <content uri="?start"/> <member container="?start" child="?auteur"/> <triple subject="?auteur" predicate="http://www.taika.fr/auteurs/name" object="?auteurname"/> <triple subject="?auteur" predicate="http://www.taika.fr/auteurs/first-name" object="?auteurfirst-name"/> </conditions> <action> <vbox id="auteurdetail" datasources="livres_auteurs.rdf" uri="?auteur" ref="http://www.taika.fr/livres/all-livres"> <hbox style="border:1px solid blue;border-bottom:1px solid black;"> <label value="?auteurfirst-name"/> <label value="?auteurname"/> <label value="subject = ?auteur"/> </hbox> <template> <rule> <conditions> <content uri="?startlivre" /> <member container="?startlivre" child="?livre"/> <triple subject="?livre" predicate="http://www.taika.fr/livres/auteur" object="?auteur"/> <triple subject="?livre" predicate="http://www.taika.fr/livres/title" object="?title"/> </conditions> <action> <vbox uri="?livre" style="border:3px solid green;"> <label value="Titre : ?title" /> <label value="?auteur"/> </vbox> </action> </rule> </template> </vbox> </action> </rule> </template> </hbox> </vbox> <spacer style="height:25px;"/> </vbox> </window>
Le résultat me liste TOUS livres pour chaque auteur (même ceux qui ne lui appartiennent pas). Ceci apparemment à cause du fait que la variable ?auteur n'est pas connue dans le deuxième template, il n'y a pas d'effet de bord, ce qui paraît assez logique, mais du coup, comment passer une variable d'un template à un "sous template" ?
Merci pour votre aide
Nicolas
Envoyé par : laurentj
Date : 22/06/2006 13:08
impossible de mettre des templates imbriqués. Il faut plutôt que tu fasses plusieurs rules
Envoyé par : ferry jeremie
Date : 22/06/2006 13:18
Je ne sais pas d'où tu tiens tes templates imbriqués mais à priori ça ne s'utilise pas. Le mieux est de créer plusieurs <rule> comme dans les tutos de xulplanet .(qui sont traduit ici d'ailleurs).
Mais ton problème ne vient pas de là à priori.
regarde ici : http://www.xulplanet.com/testcases/example-viewer.xul Il y a des exemples très proche de ton problème.
Envoyé par : wajsberg
Date : 10/07/2006 11:00
Je crois que j'avais réussi à faire des templates imbriqués en les créant "à part", et en utilisant l'attribut "template" dans les éléments générés par le premier template appelé.
Envoyé par : trblft
Date : 22/06/2009 20:32
Je déterre le post (bonjour à tous), il se trouve que c'est ce que je veux faire, mais le lien de Jeremie n'existe plus, donc je me demande... comment faire la chose suivante :
Tout marche sauf que le listbox ne se remplit pas, puis-je retrouver ce lien donné pour voir comment faire plusieurs rules? Merci d'avance.
Je poste ici le code que j'ai essayé de faire, qui marche "presque".
<hbox datasources="test.xml" ref="*" querytype="xml" seltype="single" onselect="update_matiere(event);"> <template> <vbox uri="?"> <caption uri="?" label="?object_description" /> <listbox uri="?" datasources="?object_url" ref="*" querytype="xml" seltype="single" onselect="update_matiere(event);"> <template> <listitem uri="?" label="?description"/> </template> </listbox> </vbox> </template> </hbox>
Envoyé par : laurentj
Date : 24/06/2009 16:32
Encapsule tes listbox dans des xbl...
Envoyé par : trblft
Date : 24/06/2009 17:25
Merci. Je pense que j'ai trouvé une solution avec une génération par php d'éléments Xul.
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.