Forums : Template et RDF

Aller à la discussion :  Plus récente Plus ancienne

# [Resolu ]Template et condition

Envoyé par : xiii29

Date : 20/11/2007 13:51

Bonjour,

Venant de finir le tuto et après lecture du wiki, je m'essaye avec difficulté a l'utilisation des RDF.

Je me suis généré un petit fichier comme suit :

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:COMMENTS="http://www.isiswebsites.bzh/rdf#">
 <RDF:Seq RDF:about="http://www.isiswebsites.bzh/all-comments">
   <RDF:li>
      <RDF:Description RDF:about="http://www.isiswebsites.bzh/c1">
        <COMMENTS:date>19/06/2007</COMMENTS:date>
        <COMMENTS:auteur>Thierry</COMMENTS:auteur>
        <COMMENTS:auteur_url>http://www.free.fr</COMMENTS:auteur_url>
        <COMMENTS:note>0</COMMENTS:note>
        <COMMENTS:commentaires>
        	<![CDATA[
        		Vraiment tout pourri ce site ... une perte de temps ...
        	]]>
        </COMMENTS:commentaires>
      </RDF:Description>
[...]
   </RDF:li>
 </RDF:Seq>
</RDF:RDF>

Histoire de maniper sur un exemple perso ...

J'arrive à afficher mon contenu via le fichier XUL suivant :

<vbox datasources="commentaires.rdf" ref="http://www.isiswebsites.bzh/all-comments" flex="1">
	<template>
		<vbox uri="rdf:*"  >
			<hbox>
				<label value="rdf:http://www.isiswebsites.bzh/rdf#date"/>
				<label value="rdf:http://www.isiswebsites.bzh/rdf#auteur"/>
				<label value="rdf:http://www.isiswebsites.bzh/rdf#auteur_url"/>
				<label value="rdf:http://www.isiswebsites.bzh/rdf#note"/>
			</hbox>
			<description value="rdf:http://www.isiswebsites.bzh/rdf#commentaires" />
		</vbox>
 		</template>
</vbox>

Maintenant, j'aimerais pouvoir faire un contenu différent suivant que l'element auteur_url est présent ou pas ...

J'ai donc commencé un code comme celui-ci :

<vbox datasources="commentaires.rdf" ref="http://www.isiswebsites.bzh/all-comments" flex="1">
	<template>
		<vbox uri="rdf:*"  >
			<rule>
     					<conditions>
       					<content uri="?list"/>
       					<member container="?list" child="?comments"/>
       					<triple subject="?comments"
               					predicate="http://www.isiswebsites.bzh/rdf#auteur_url"
               					object=""/>
               						
       				</conditions>
     					<action>
					<hbox>
						<label value="rdf:http://www.isiswebsites.bzh/rdf#date"/>
						<label value="rdf:http://www.isiswebsites.bzh/rdf#auteur"/>
						<label value="rdf:http://www.isiswebsites.bzh/rdf#note"/>
					</hbox>
					<description value="rdf:http://www.isiswebsites.bzh/rdf#commentaires" />
			      	</action>
   				</rule>
		</vbox>
 		</template>
</vbox>

En gros, si http://www.isiswebsites.bzh/rdf#auteur_url est vide, j'affiche le même contenu moins la zone pour l'URL ...

Si quelqu'un a une piste ...

Merci d'avance !

# Re: Template et condition

Envoyé par : jcs

Date : 20/11/2007 14:30

Bonjour,

Enlève l'attribut uri="rdf:*" de la vbox et remplace ton élément label par :

<label uri="?comments" value="?date"/>

L'attribut uri est nécessaire pour itérer les éléments dans ton template.

# Re: Template et condition

Envoyé par : xiii29

Date : 20/11/2007 15:49

Désolé mais je n'arrive pas à afficher du contenu ... (j'ai enlevé les autres colonnes pour le moment ...)

<vbox datasources="commentaires.rdf" ref="http://www.isiswebsites.bzh/all-comments" flex="1">
  <template>
     <vbox>
        <rule>
          <conditions>
             <content uri="?list"/>
      		<member container="?list" child="?comments"/>
      		<triple subject="?comments"
              	predicate="http://www.isiswebsites.bzh/rdf#auteur_url"
	object=""/>
          </conditions>
    	   <action>
      <hbox>
	<label uri="?comments" value="?date"/>
      </hbox>
          </action>
        </rule>
      </vbox>
   </template>
 </vbox>

Je ne vois d'ailleurs pas bien comment il peut récupérer la date ...

# Re: Template et condition

Envoyé par : jcs

Date : 20/11/2007 16:40

Désolé, j'ai été un peu vite en besogne et j'ai mal lu ton code. En fait il te manque un élément triple dans tes conditions. J'ai repris le code :

<vbox datasources="commentaires.rdf" ref="http://www.isiswebsites.bzh/all-comments" flex="1">
 <template>
    <vbox>
       <rule>
         <conditions>
            <content uri="?list"/>
            <member container="?list" child="?comments"/>
            <triple subject="?comments"
             predicate="http://www.isiswebsites.bzh/rdf#auteur_url"
             object=""/>
            <triple subject="?comments"
             predicate="http://www.isiswebsites.bzh/rdf#date"
             object="?date"/>
         </conditions>
   	  <action>
           <hbox>
             <label uri="?comments" value="?date"/>
           </hbox>
         </action>
       </rule>
     </vbox>
  </template>
</vbox>

Avec la première condition on se limite aux entrée qui ont un auteur_url vide (je ne sais pas si object="" fonctionne comme tu veux il faudrait faire un test) et avec la seconde ont extrait la date.

# Re: Template et condition

Envoyé par : xiii29

Date : 20/11/2007 17:11

Je dois avoir une autre erreur car rien ne s'affiche ...

Je vais essayer de tout reprendre de zéro ...

# Re: Template et condition

Envoyé par : jcs

Date : 21/11/2007 14:22

J'ai fait quelques test chez moi et voilà un exemple qui fonctionne (par rapport au code dans les messages précédents j'ai supprimé le tag vbox premier fils de template, sinon cela ne marche pas) :

 <vbox id="template" datasources="./commentaires.rdf" ref="http://www.isiswebsites.bzh/all-comments" flex="1">
   <template>
       <rule>
         <conditions>
           <content uri="?list"/>
           <member container="?list" child="?comment"/>
           <triple subject="?comment"
                   predicate="http://www.isiswebsites.bzh/rdf#note"
                   object="0" />
           <triple subject="?comment"
                   predicate="http://www.isiswebsites.bzh/rdf#date"
                   object="?date"/>
         </conditions>
         <action>
           <hbox>
             <label uri="?comment" value="?date"/>
           </hbox>
         </action>
       </rule>
   </template>
 </vbox>

Il affiche les dates pour les commentaires qui ont une note égale à 0.

Mais j'ai rencontré 2 problèmes avec auteur_url :

  1. object="" ne fonctionne pas pour sélectionner les commentaires qui n'ont pas d'url
  2. d'après la documentation, l'attribut object du tag triple accepte soit une variable (en ?xxx), soit un littéral (une chaîne de caractères), soit une URI. Or ici, ce que tu veux utiliser comme littéral est en fait une URL (donc une URI) et les éléments du template ne sont pas correctement générés. Je ne sais pas comment faire utiliser une URL comme un littéral ; quelqu'un de plus calé que moi dans les templates XUL a sûrement déjà rencontré le problème.

Sinon tu peux en partie régler le problème en modifiant le RDF comme cela :

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:COMMENTS="http://www.isiswebsites.bzh/rdf#">
<RDF:Seq RDF:about="http://www.isiswebsites.bzh/all-comments">
  <RDF:li>
     <RDF:Description RDF:about="http://www.isiswebsites.bzh/c1">
       <COMMENTS:date>19/06/2007</COMMENTS:date>
       <COMMENTS:auteur>Thierry</COMMENTS:auteur>
       <COMMENTS:auteur_url RDF:resource="http://www.free.fr"/>
       <COMMENTS:note>0</COMMENTS:note>
       <COMMENTS:commentaires>
       	<![CDATA[
       		Vraiment tout pourri ce site ... une perte de temps ...
       	]]>
       </COMMENTS:commentaires>
     </RDF:Description>
  </RDF:li>
</RDF:Seq>
</RDF>

Et tu utilise une URI bidon pour les commentaires sans URL :

<COMMENTS:auteur_url RDF:resource="http://no_url"/>

Finalement pour afficher les dates des commentaires sans URL il suffit d'adapter le template de cette façon :

 <vbox id="template" datasources="./commentaires.rdf" ref="http://www.isiswebsites.bzh/all-comments" flex="1">
   <template>
       <rule>
         <conditions>
           <content uri="?list"/>
           <member container="?list" child="?comment"/>
           <triple subject="?comment"
                   predicate="http://www.isiswebsites.bzh/rdf#auteur_url"
                   object="http://no_url" />
           <triple subject="?comment"
                   predicate="http://www.isiswebsites.bzh/rdf#date"
                   object="?date"/>
         </conditions>
         <action>
           <hbox>
             <label uri="?comment" value="?date"/>
           </hbox>
         </action>
       </rule>
   </template>
 </vbox>

# Re: Template et condition

Envoyé par : xiii29

Date : 21/11/2007 15:06

Merci beaucoup ! Quand je vous la clarté de ce que tu as fait, je me dis que j'ai encore beaucoup de chemin à parcourir ... Et des docs à lire :) !

Merci encore !

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.