2.5 - Les liaisons

Écrit par Neil Deakin. Traduit par Alain B. (17/09/2005).
Page originale : http://developer.mozilla.org/en/docs/XUL:Template_Guide:Bindings xulplanet.com

Attention : Ce tutoriel est ancien, incomplet, et n'est pas mis à jour. Il ne contient pas toutes les nouveautés du système de template de Gecko 1.9 / Firefox 3.0 qui est largement simplifié et permet d'utiliser sqlite ou xml comme source de données. Aussi est-il préférable d'aller consulter la version anglaise sur developer.mozilla.org.

Nous pouvons ajouter d'autres triplets dans l'exemple précédent pour afficher plus d'informations. Par exemple, une description pourrait être ajoutée à une photo. Pour cela, tout ce que nous avons à faire est d'ajouter les données nécessaires dans la source de données RDF et d'ajouter un autre élément triple dans les conditions du gabarit.

<conditions>
  <content uri="?start"/>
  <member container="?start" child="?photo"/>
  <triple subject="?photo"
          predicate="http://purl.org/dc/elements/1.1/title"
          object="?title"/>
  <triple subject="?photo"
          predicate="http://purl.org/dc/elements/1.1/description"
          object="?description"/>
</conditions>

Il fonctionne de manière similaire au triple précédent. La variable ?photo est remplie avec la valeur connue et ensuite, l'arc est recherché dans la source de données afin de remplir la valeur de la variable ?description. La variable ?description sera alors utilisée dans le corps d'action. Supposons maintenant que nous ayons juste commencé à renseigner une seule description des photos ; les deux autres photos n'ayant pas de description. Cela signifie que la description n'est pas connue, ou qu'elle n'a pas été renseignée par l'utilisateur.

<rdf:Description rdf:about="http://www.xulplanet.com/ndeakin/images/t/palace.jpg"
  dc:title="Le palais vu de dessus"
  dc:description="Prise de vue à partir du sommet de la tour en regardant vers l'Est du palais des Doges"/>

Si vous essayez d'ouvrir un exemple complet basé sur ces données, vous constaterez qu'un seul résultat a été généré. Ceci s'explique parce qu'un seul item a une description. Voici les données après que le premier triple ait été évalué, mais avant que celui des descriptions ne le soit :

(?start = http://www.xulplanet.com/rdf/myphotos,
 ?photo = http://www.xulplanet.com/ndeakin/images/t/palace.jpg,
 ?title = 'Le palais vu de dessus')
(?start = http://www.xulplanet.com/rdf/myphotos,
 ?photo = http://www.xulplanet.com/ndeakin/images/t/canal.jpg,
 ?title = 'Canal')
(?start = http://www.xulplanet.com/rdf/myphotos,
 ?photo = http://www.xulplanet.com/ndeakin/images/t/obelisk.jpg,
 ?title = 'Obelisque')

Le second triple ajoutera une ?description pour la première photo, en ajoutant une quatrième paire variable-valeur aux données existantes. Toutefois, lorsque le constructeur ne trouve pas de valeur pour une condition, tout le résultat potentiel est écarté. Pour la seconde photo, la source de données ne trouve aucune correspondance pour la description, donc le résultat potentiel est supprimé. La même chose se produit avec la troisième photo. Au final, une seule photo subsiste.

(?start = http://www.xulplanet.com/rdf/myphotos,
 ?photo = http://www.xulplanet.com/ndeakin/images/t/palace.jpg,
 ?title = 'Le palais vu de dessus',
 ?description = 'Prise de vue à partir du sommet de la tour en regardant vers l'Est du palais des Doges')

Ainsi, une seule correspondance existe, donc une seule série de contenu est générée.

Parfois, il peut être utile d'obtenir des triplets selon des correspondances conditionnelles, c'est-à-dire, d'avoir un triple qui ne rejette pas un résultat lors d'une correspondance possible. Dans ce cas, il faut utiliser un élément binding. Cet élément ne se place pas dans un bloc conditions mais plutôt à l'intérieur de l'élément bindings. La syntaxe est la suivante :

<rule>
  <conditions>
    ...
  </conditions>
  <bindings>
    <binding subject="?photo"
             predicate="http://purl.org/dc/elements/1.1/description"
             object="?description"/>
  </bindings>
</rule>

Le triple pour la description a été modifié en un élément binding, mais les attributs restent les mêmes. Ceci permet à une correspondance de se produire même si la description n'est pas spécifiée dans la source de données. Le constructeur de gabarits examine les liaisons binding après que toutes les conditions aient été appliquées. Dans cet exemple, il a déjà été déterminé que trois correspondances ont été trouvées. Le constructeur continue à compléter les valeurs pour chacune des liaisons. Elles sont évaluées de manière similaire, quoique plus simplement, aux triple. La valeur de la variable ?photo est connue pour chaque correspondance, et la valeur de la variable ?description est déterminée à partir de l'examen de la source de données. L'effet obtenu est trois correspondances dont une seule affichera une description. Les photos qui n'ont pas de description seront traitées comme si la description était vide. C'est-à-dire que la variable ?description sera remplacée avec une chaîne de caractères vide lors de l'analyse des attributs dans le corps d'action.

En voici l'exemple.

Vous pouvez avoir plus d'une liaison si vous le souhaiter. Les autres seront évaluées de manière similaire. Par exemple, le triple 'title' pourrait être déplacé vers une liaison afin de rendre également le titre facultatif.


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.