2.11 - Propriétés de conteneurs

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.

Jusqu'à présent, nous avons vu comment des règles simplifiées peuvent générer des résultats à partir des fils d'un conteneur RDF. Toutefois, les règles simplifiées peuvent aussi parcourir un unique prédicat pointant vers une ressource, plutôt que d'utiliser un fils. Cette méthode vous permet de parcourir les données n'étant pas dans un conteneur. Pour cela, utilisez l'attribut containment sur le noeud racine, en lui affectant le prédicat à parcourir.

Regardons de nouveau le tout premier exemple. Il ne contient aucun conteneur, mais nous voulons parcourir le prédicat 'relatedItem' en utilisant la syntaxe de règle simplifiée. Nous pouvons ajouter l'attribut containment comme ceci :

<vbox datasources="template-guide-ex1.rdf"
         ref="http://www.xulplanet.com/rdf/A"
         containment="http://www.xulplanet.com/rdf/relatedItem">
  <template>
    <rule>
      <label uri="rdf:*" value="rdf:*"/>
    </rule>
  </template>
</vbox>

Plutôt que de parcourir un conteneur, cet exemple parcourt un prédicat spécifique. Cet attribut est utile lorsque les données RDF sont structurées de telle manière qu'un conteneur RDF n'est pas employé.

Le constructeur traite le prédicat dans l'attribut containment pour indiquer qu'un élément est un conteneur. Si le noeud de départ (ou ref) a ce prédicat comme l'un de ses triplets dans la source de données RDF, le constructeur l'utilisera en plus de vérifier s'il s'agit d'un conteneur. Notez la distinction ici. L'attribut containment ne remplace pas la vérification de l'existence d'un conteneur. Si la ressource http://www.xulplanet.com/rdf/A était également un Seq RDF avec quelques fils, alors ces fils seraient également ajoutés aux résultats. Cet exemple vous le démontre. La seule différence avec l'exemple précédent est une paire de lignes supplémentaires ajoutée au RDF/XML :

<rdf:Seq rdf:about="http://www.xulplanet.com/rdf/A">
  <rdf:li rdf:resource="http://www.xulplanet.com/rdf/E"/>
  <rdf:li rdf:resource="http://www.xulplanet.com/rdf/F"/>
</rdf:Seq>

L'effet serait qu'il y aurait cinq résultats au lieu de trois. Trois générés via l'utilisation de l'attribut containment, et deux générés parce que la ressource de départ est un conteneur avec deux fils. Effectivement, l'attribut containment vous permet de spécifier des prédicats supplémentaires fournis par les fils.

Vous pouvez définir de multiples prédicats dans l'attribut containment en les séparant par des espaces. Chacun d'eux sera appliqué de façon séquentielle.

L'attribut containment s'applique également aux tests dans member lors de l'emploi de la syntaxe étendue de gabarit. Ainsi, en plus de parcourir les fils, il permet de parcourir les prédicats listés dans l'attribut containment. Par exemple, l'exemple suivant est équivalent au précédent, excepté qu'il utilise la syntaxe de règles étendues :

<vbox datasources="template-guide-ex3.rdf"
         ref="http://www.xulplanet.com/rdf/A"
         containment="http://www.xulplanet.com/rdf/relatedItem">
  <template>
    <rule>
      <conditions>
        <content uri="?start"/>
        <member container="?start" child="?child"/>
      </conditions>
      <action>
        <label uri="?child" value="?child"/>
      </action>
    </rule>
  </template>
</vbox>

Essayez cet exemple. Le constructeur génère des valeurs possibles supplémentaires pour la variable ?child en créant donc un résultat supplémentaire pour chacune d'elle.


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.