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