Source for file jResponseRdf.class.php

Documentation is available at jResponseRdf.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  core_response
  5. @author      Laurent Jouanneau
  6. @contributor
  7. @copyright   2006-2008 Laurent Jouanneau
  8. @link        http://www.jelix.org
  9. @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  10. */
  11.  
  12.  
  13. /**
  14. * output RDF content.
  15. * This is a basic RDF generator, which generates content from
  16. * an array of data.
  17. @package  jelix
  18. @subpackage core_response
  19. @see jResponse
  20. */
  21.  
  22. final class jResponseRdf extends jResponse {
  23.     /**
  24.     * @var string 
  25.     */
  26.     protected $_type = 'rdf';
  27.     protected $_acceptSeveralErrors=true;
  28.  
  29.     /**
  30.      * List of object or array, which will be transform into RDF content
  31.      * @var array 
  32.      */
  33.     public $data;
  34.  
  35.     /**
  36.      * a template selector for complex RDF content.
  37.      * keep empty if you have a simple array of array in $data :
  38.      * RDF content will be generated by a simple generator.
  39.      * if you specify a template, you don't have to fill other
  40.      * properties (except data)
  41.      * @var string 
  42.      */
  43.     public $template;
  44.  
  45.     /**
  46.      * namespace of the attributes and elements that will content your data.
  47.      * @var string 
  48.      */
  49.     public $resNs="http://dummy/rdf#";
  50.     /**
  51.      * namespace prefix
  52.      * @var string 
  53.      */
  54.     public $resNsPrefix='row';
  55.     /**
  56.      * uri prefix of all ressources
  57.      * @var string 
  58.      */
  59.     public $resUriPrefix = "urn:data:row:";
  60.     /**
  61.      * uri of the root sequence
  62.      * @var string 
  63.      */
  64.     public $resUriRoot = "urn:data:row";
  65.     /**
  66.      * list of array values you want to put in attributes
  67.      * @var string 
  68.      */
  69.     public $asAttribute=array();
  70.     /**
  71.      * list of array values you want to put in elements
  72.      * @var string 
  73.      */
  74.     public $asElement=array();
  75.     /**
  76.      *
  77.      */
  78.     protected $prologSent=false;
  79.  
  80.     public function output(){
  81.         if($this->hasErrors()) return false;
  82.         $this->_httpHeaders['Content-Type']='text/xml;charset='.$GLOBALS['gJConfig']->charset;
  83.         $this->sendHttpHeaders();
  84.  
  85.         echo '<?xml version="1.0" encoding="'.$GLOBALS['gJConfig']->charset.'"?>';
  86.         $this->prologSent = true;
  87.         if($this->template !=''){
  88.             $tplnew jTpl();
  89.             $tpl->assign('data',$this->data);
  90.             $tpl->display($this->template);
  91.         }else{
  92.             $this->generateContent();
  93.         }
  94.         return true;
  95.     }
  96.  
  97.     protected function generateContent(){
  98.         $EOL="\n";
  99.         echo '<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'.$EOL;
  100.         echo '  xmlns:',$this->resNsPrefix,'="',$this->resNs,'"  xmlns:NC="http://home.netscape.com/NC-rdf#">',$EOL;
  101.  
  102.         echo '<Bag RDF:about="'.$this->resUriRoot.'">'.$EOL;
  103.         foreach($this->data as $dt){
  104.             echo "<li>\n<Description ";
  105.             // NC:parseType="Integer"
  106.             if(is_object($dt))
  107.                 $dt=get_object_vars ($dt);
  108.             if(count($this->asAttribute|| count($this->asElement)){
  109.                 foreach($this->asAttribute as $name){
  110.                     echo $this->resNsPrefix,':',$name,'="',htmlspecialchars($dt[$name]),'" ';
  111.                 }
  112.                 if(count($this->asElement)){
  113.                     echo ">\n";
  114.                     foreach($this->asElement as $name){
  115.                         echo '<',$this->resNsPrefix,':',$name,'>',htmlspecialchars($dt[$name]),'</',$this->resNsPrefix,':',$name,">\n";
  116.                     }
  117.                     echo "</Description>\n</li>\n";
  118.                 }else
  119.                     echo "/>\n</li>\n";
  120.  
  121.             }else{
  122.                 if(count($dt)){
  123.                     echo ">\n";
  124.                     foreach($dt as $name=>$val){
  125.                         echo '<',$this->resNsPrefix,':',$name,'>',htmlspecialchars($val),'</',$this->resNsPrefix,':',$name,">\n";
  126.                     }
  127.                     echo "</Description>\n</li>\n";
  128.                 }else{
  129.                     echo "/>\n</li>\n";
  130.                 }
  131.             }
  132.         }
  133.         echo "</Bag>\n</RDF>\n";
  134.     }
  135.  
  136.  
  137.     public function outputErrors(){
  138.         global $gJCoord;
  139.         $EOL="\n";
  140.         if(!$this->_httpHeadersSent){
  141.             header("HTTP/1.0 500 Internal Server Error");
  142.             header("Content-Type: text/xml;charset=".$GLOBALS['gJConfig']->charset);
  143.         }
  144.         if(!$this->prologSent){
  145.             echo '<?xml version="1.0" encoding="ISO-8859-1"?>'.$EOL;
  146.         }
  147.         echo '<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'.$EOL;
  148.         echo '  xmlns:err="http://jelix.org/ns/rdferr#"  xmlns:NC="http://home.netscape.com/NC-rdf#">'.$EOL;
  149.  
  150.         echo '<Bag RDF:about="urn:jelix:error">'.$EOL;
  151.         if(count($gJCoord->errorMessages)){
  152.             foreach($gJCoord->errorMessages as $e){
  153.                 echo "<li>\n";
  154.                 echo '<Description err:code="'.$e[1].'" err:type="'.$e[0].'" err:file="'.$e[3].'" err:line="'.$e[4].'">';
  155.                 echo '<err:message>'.htmlspecialchars($e[2]).'</err:message>';
  156.                 echo "</Description>\n";
  157.                 echo "</li>\n";
  158.             }
  159.         }else{
  160.             echo "<li>\n";
  161.             echo '<Description err:code="-1" err:type="error" err:file="" err:line="">';
  162.             echo '<err:message>Unknown error</err:message>';
  163.             echo "</Description>\n";
  164.             echo "</li>\n";
  165.         }
  166.         echo "</Bag>\n";
  167.         echo "</RDF>\n";
  168.     }
  169. }

Documentation generated on Thu, 22 Mar 2012 22:16:47 +0100 by phpDocumentor 1.4.3