Écrit par Neil Deakin.
Traduit par Alain B. (24/07/2005).
Page originale :
http://www.xulplanet.com/tutorials/xulqa/q_tmpl_tree-recurse-match.html
Ce long exemple est utilisé pour afficher l'arbre des animaux où la seconde colonne provient d'un arc entrant pointant sur un noeud. Deux règles sont nécessaires, la première pour un animal qui est le compagnon de quelqu'un et l'autre pour un animal qui ne l'est pas. La première règle parcourt les animaux comme indiqué par l'attribut uri
. La balise member
génère la liste des animaux et lie les résultats à la variable ?animal. Le premier triplet dans la première règle trouve les arcs entrants en utilisant le prédicat 'favoriteAnimal'. Les arcs entrants sont trouvés parce que les valeurs pour la variable '?animal' ont été générées par la balise member
et que la valeur de la variable '?human' n'est pas connue. Le résultat est que la variable '?human' est remplie avec les humains qui ont un animal de compagnie. Deux triplets supplémentaires récupèrent les noms de l'animal et de son propriétaire. Notez que même si deux personnes aiment la Tarentule, un seul sera affiché. La raison est que c'est la liste des animaux qui est parcourue, pas celle des humains. Si nous voulions afficher les deux, nous devrions écrire des règles supplémentaires permettant de parcourir les humains.
La première règle permet seulement de trouver s'il existe un humain ayant animal donné pour compagnon. Ensuite, une seconde règle est nécessaire pour les autres animaux. Elle est similaire sauf qu'elle n'a pas les conditions appropriées pour récupérer les données des humains.
Voir Voir la source de données
<tree rows="10" datasources="animals.rdf"
ref="http://www.some-fictitious-zoo.com/all-animals">
<treecols>
<treecol id="name" label="Nom" primary="true" flex="1"/>
<treecol id="favorite" label="Compagnon" flex="1"/>
</treecols>
<template>
<rule>
<conditions>
<content uri="?uri"/>
<member container="?uri" child="?animal"/>
<triple subject="?human"
predicate="http://www.some-fictitious-zoo.com/rdf#favoriteAnimal"
object="?animal"/>
<triple subject="?animal"
predicate="http://www.some-fictitious-zoo.com/rdf#name"
object="?name"/>
<triple subject="?human"
predicate="http://www.some-fictitious-zoo.com/rdf#name"
object="?humanname"/>
</conditions>
<action>
<treechildren flex="1">
<treeitem uri="?animal">
<treerow>
<treecell label="?name"/>
<treecell label="?humanname"/>
</treerow>
</treeitem>
</treechildren>
</action>
</rule>
<rule>
<conditions>
<content uri="?uri"/>
<member container="?uri" child="?animal"/>
<triple subject="?animal"
predicate="http://www.some-fictitious-zoo.com/rdf#name"
object="?name"/>
</conditions>
<action>
<treechildren flex="1">
<treeitem uri="?animal">
<treerow>
<treecell label="?name"/>
<treecell label=""/>
</treerow>
</treeitem>
</treechildren>
</action>
</rule>
</template>
</tree>
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.