Raccourcis : Contenu - rubriques - sous rubriques
EN FR

jResponseRdf permet de générer un document au format RDF. Cela est utile entre autre lors de la réalisation d'application en XUL, pour les templates XUL. Son alias est "rdf".

Vous avez deux moyens d'utiliser jResponseRdf :

  • soit vous fournissez une liste de données et la classe s'occupe de générer du RDF
  • soit vous écrivez vous-même le code RDF dans un template, ce qui est nécessaire pour les graphes RDF complexes.

Génération automatique de RDF

Cela ne fonctionne que pour les RDF qui representent qu'une liste simple de données (pas de sous arbres par exemple).

Vous indiquez la liste des données au niveau de la propriété $datas : cela peut être une liste de tableaux associatifs, un objet jResultSet (iterateur) que retourne jDb::query ou les méthodes de type "select" des daos.


 $rep = $this->getResponse("rdf");

 $dao = jDao::get('users');
 $rep->datas = $dao->findAll();

Ou encore


 $rep->datas = array(
         array('nom'=>'dupont', 'prenom'=>'georges'),
         array('nom'=>'durant', 'prenom'=>'paul'),
         array('nom'=>'duchemin', 'prenom'=>'jacques'),
   );

Ce dernier exemple va générer le RDF suivant :


<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:row="http://dummy/rdf#">

   <Bag RDF:about="urn:data:row">
      <li><Description>
              <row:nom>dupont</row:nom>
              <row:prenom>georges</row:prenom>
           </Description></li>
      <li><Description>
              <row:nom>durant</row:nom>
              <row:prenom>paul</row:prenom>
           </Description></li>
      <li><Description>
              <row:nom>duchemin</row:nom>
              <row:prenom>jacques</row:prenom>
           </Description></li>
   </Bag>
</RDF>

jResponseRdf donne par défaut le namespace "http:dummy/rdf#" aux éléments contenant les données, namespace déclaré avec le préfixe "row". Vous pouvez changer cela via respectivement les propriétés $resNs et $resNsPrefix//.


  $rep->resNs = 'http://monsite.com/ns/users/';
  $rep->resNsPrefix = 'user';

Vous pouvez aussi changer l'identifiant de la liste qui est par défaut "urn:data:row" :


  $rep->resUriRoot = 'urn:monsite:users';

Enfin, pour diverses raisons, vous voudriez peut être mettre certaines informations en tant qu'attributs, et d'autres en tant qu'elements. Il faut alors l'indiquer via les propriétés $asElement et $asAttribute.


  $rep->asAttribute = array('prenom');
  $rep->asElement = array('nom');

Note : à partir du moment où vous changez l'une de ces deux propriétés, il faut alors indiquer tous les noms des données que vous voulez voir apparaitre dans le RDF.

Cela donne alors :


<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:user="http://monsite.com/ns/users/">

   <Bag RDF:about="urn:monsite:users">
      <li><Description user:prenom="georges">
              <user:nom>dupont</user:nom>
           </Description></li>
      <li><Description user:prenom="paul">
              <user:nom>durant</user:nom>
           </Description></li>
      <li><Description user:prenom="jacques">
              <user:nom>duchemin</user:nom>
           </Description></li>
   </Bag>
</RDF>

Génération à partir d'un template

L'autre façon d'utiliser jResponseRdf est de passer par un template pour générer le contenu RDF. Vous devez indiquer les données pour le template via la propriété $datas, elles seront ainsi disponibles via la variable de template "datas". Et vous devez indiquez le sélecteur du template dans la propriété $template.


 $rep = $this->getResponse("rdf");

 $rep->datas = array(
         array('nom'=>'dupont', 'prenom'=>'georges'),
         array('nom'=>'durant', 'prenom'=>'paul'),
         array('nom'=>'duchemin', 'prenom'=>'jacques'),
   );
 $rep->template = 'monmodule~datasrdf';

Et dans datasrdf.tpl :



<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:user="http://monsite.com/ns/users/">

   <Bag RDF:about="urn:monsite:users">

   {foreach $datas as $dt}
      <li><Description user:prenom="{$data['prenom']|escxml}">
              <user:nom>{$data['nom']|escxml}</user:nom>
           </Description></li>
   {/foreach}

   </Bag>
</RDF>

Note : vous n'avez pas à mettre le prologue xml (<?xml... )

Note : les propriétés $resNs, $resNsPrefix, $resUriRoot, $asElement et $asAttribute sont inutiles dans le cas de l'utilisation d'un template.