Forums : Template et RDF

Aller à la discussion :  Plus récente Plus ancienne

# Templates imbriqués

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

# Re: Templates imbriqués

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

# Re: Templates imbriqués

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.

# Re: Templates imbriqués

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é.

# Re: Templates imbriqués

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 :

  • Créer des listbox par un template xml
  • Chaque listbox puise dans le fichier xml un attribut datasource (ça ça marche)
  • Ensuite, chaque listbox contient un template pour se remplir

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>

# Re: Templates imbriqués

Envoyé par : laurentj

Date : 24/06/2009 16:32

Encapsule tes listbox dans des xbl...

# Re: Templates imbriqués

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.