Source for file HTML.php

Documentation is available at HTML.php

  1. <?php
  2. require_once RDFAPI_INCLUDE_DIR 'sparql/SparqlEngineDb/ResultRenderer.php';
  3.  
  4. /**
  5. *   Sparql DB HTML result renderer.
  6. *
  7. *   @author Christian Weiske <cweiske@cweiske.de>
  8. *
  9. *   @package sparql
  10. */
  11. class SparqlEngineDb_ResultRenderer_HTML implements SparqlEngineDb_ResultRenderer
  12. {
  13.     /**
  14.     *   If the result HTML should be wrapped in a div
  15.     *   @var boolean 
  16.     */
  17.     protected $bWrap = true;
  18.  
  19.     /**
  20.     *   Defines the methods needed to create the types
  21.     *   in $arVarAssignments.
  22.     *   Key is the type (e.g. "s" for subject), and
  23.     *   value the method's name.
  24.     *
  25.     *   @see $arVarAssignments
  26.     *
  27.     *   @var array 
  28.     */
  29.     protected $arCreationMethods = array(
  30.         's' => 'createSubjectFromDbRecordSetPart',
  31.         'p' => 'createPredicateFromDbRecordSetPart',
  32.         'o' => 'createObjectFromDbRecordSetPart'
  33.     );
  34.  
  35.  
  36.  
  37.     /**
  38.     *   Converts the database results into nice HTML.
  39.     *
  40.     *   @param array $arRecordSets  Array of (possibly several) SQL query results.
  41.     *   @param Query $query     SPARQL query object
  42.     *   @param SparqlEngineDb $engine   Sparql Engine to query the database
  43.     *   @return mixed   HTML code
  44.     */
  45.     public function convertFromDbResults($arRecordSetsQuery $querySparqlEngineDb $engine)
  46.     {
  47.         $this->query $query;
  48.         $this->sg    $engine->getSqlGenerator();
  49.         $strCode     '';
  50.  
  51.         $strResultForm $query->getResultForm();
  52.         switch ($strResultForm{
  53.             case 'select':
  54.             case 'select distinct':
  55.                 $strCode $this->createTableFromRecords($arRecordSets);
  56.                 break;
  57.  
  58.             case 'construct':
  59.             case 'describe':
  60.                 throw new Exception(
  61.                     'Construct and describe are currently not supported by the'
  62.                     . ' HTML renderer'
  63.                 );
  64.  
  65.             case 'count':
  66.             case 'ask':
  67.                 if (count($arRecordSets1{
  68.                     throw new Exception(
  69.                         'More than one result set for a '
  70.                         . $strResultForm ' query!'
  71.                     );
  72.                 }
  73.  
  74.                 $nCount 0;
  75.                 $dbRecordSet reset($arRecordSets);
  76.                 foreach ($dbRecordSet as $row{
  77.                     $nCount intval($row['count']);
  78.                     break;
  79.                 }
  80.  
  81.                 if ($strResultForm == 'ask'{
  82.                     $strCode 'There were results.';
  83.                 else {
  84.                     $strCode 'There are ' $nCount ' results.';
  85.                 }
  86.                 break;
  87.  
  88.             default:
  89.                 throw new Exception('Unsupported result form: ' $strResultForm);
  90.         }
  91.  
  92.         return $this->wrapCode($strCode);
  93.     }//public function convertFromDbResults($arRecordSets, Query $query, SparqlEngineDb $engine)
  94.  
  95.  
  96.  
  97.     protected function wrapCode($strCode)
  98.     {
  99.         if (!$this->bWrap{
  100.             return $strCode;
  101.         }
  102.  
  103.         return
  104.             '<div class="SparqlEngineDb_ResultRenderer_HTML_result">' "\n"
  105.             . $strCode "\n"
  106.             . "</div>\n";
  107.     }//protected function wrapCode($strCode)
  108.  
  109.  
  110.  
  111.     protected function createTableFromRecords($arRecordSets)
  112.     {
  113.         $arResultVars $this->query->getResultVars();
  114.  
  115.         if (in_array('*'$arResultVars)) {
  116.             $arResultVars   array_keys($this->sg->arVarAssignments);
  117.         }
  118.  
  119.         $arResult array();
  120.         foreach ($arRecordSets as $dbRecordSet{
  121.             //work around bug in adodb:
  122.             // ADORecordSet_empty does not implement php5 iterators
  123.             if ($dbRecordSet->RowCount(<= 0{
  124.                 return array();
  125.             }
  126.  
  127.             foreach ($dbRecordSet as $row{
  128.                 $arResultRow array();
  129.                 foreach ($arResultVars as $strVarName{
  130.                     if (!isset($this->sg->arVarAssignments[$strVarName])) {
  131.                         //variable is in select, but not in result (test: q-select-2)
  132.                         $arResultRow[$strVarName'';
  133.                     else {
  134.                         $arVarSettings  $this->sg->arVarAssignments[$strVarName];
  135.                         $strMethod      $this->arCreationMethods[$arVarSettings[1]];
  136.                         list($strCode$strColor$this->$strMethod($dbRecordSet$arVarSettings[0]$strVarName);
  137.                         $arResultRow[$strVarName'<td style="background-color: '
  138.                             . $strColor '">' $strCode '</td>';
  139.                     }
  140.                 }
  141.                 $arResult[$arResultRow;
  142.             }
  143.         }
  144.  
  145.         //I always wanted to to this :)
  146.         return
  147.             "<table border='1'>\n"
  148.             . " <caption>SPARQL result with " count($arResult" rows</caption>\n"
  149.             . " <thead><th>"
  150.                 . implode('</th><th>'array_keys(reset($arResult)))
  151.             . "</th></thead>\n"
  152.             . " <tbody>\n  <tr>"
  153.             . implode(
  154.                 "</tr>\n  <tr>",
  155.                 array_map(
  156.                     create_function(
  157.                         '$ar',
  158.                         'return implode("", $ar);'
  159.                     ),
  160.                     $arResult
  161.                 )
  162.               )
  163.             . "</tr>\n </tbody>\n"
  164.             . "</table>\n";
  165.     }//protected function createTableFromRecords($arRecordSets)
  166.  
  167.  
  168.  
  169.     /**
  170.     *   Creates an RDF subject object
  171.     *   contained in the given $dbRecordSet object.
  172.     *
  173.     *   @see convertFromDbResult() to understand $strVarBase necessity
  174.     *
  175.     *   @param ADORecordSet $dbRecordSet    Record set returned from ADOConnection::Execute()
  176.     *   @param string       $strVarBase     Prefix of the columns the recordset fields have.
  177.     *
  178.     *   @return string HTML code
  179.     */
  180.     protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet$strVarBase$strVarName)
  181.     {
  182.         if ($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_value']] === null{
  183.             return $this->getHtmlNull();
  184.         }
  185.         if ($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_is']] == 'r'
  186.             //null should be predicate which is always a resource
  187.          || $dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_is']] === null
  188.         {
  189.             return $this->getHtmlResource($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_value']]);
  190.         else {
  191.             return $this->getHtmlBlank($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_value']]);
  192.         }
  193.     }//protected function createSubjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
  194.  
  195.  
  196.  
  197.     /**
  198.     *   Creates an RDF predicate object
  199.     *   contained in the given $dbRecordSet object.
  200.     *
  201.     *   @see convertFromDbResult() to understand $strVarBase necessity
  202.     *
  203.     *   @param ADORecordSet $dbRecordSet    Record set returned from ADOConnection::Execute()
  204.     *   @param string       $strVarBase     Prefix of the columns the recordset fields have.
  205.     *
  206.     *   @return string HTML code
  207.     */
  208.     protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet$strVarBase$strVarName)
  209.     {
  210.         if ($dbRecordSet->fields[$strVarBase .  '.' $this->sg->arVarAssignments[$strVarName]['sql_value']] === null{
  211.             return $this->getHtmlNull();
  212.         }
  213.  
  214.         return $this->getHtmlResource($dbRecordSet->fields[$strVarBase .  '.' $this->sg->arVarAssignments[$strVarName]['sql_value']]);
  215.     }//protected function createPredicateFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
  216.  
  217.  
  218.  
  219.     /**
  220.     *   Creates an RDF object object
  221.     *   contained in the given $dbRecordSet object.
  222.     *
  223.     *   @see convertFromDbResult() to understand $strVarBase necessity
  224.     *
  225.     *   @param ADORecordSet $dbRecordSet    Record set returned from ADOConnection::Execute()
  226.     *   @param string       $strVarBase     Prefix of the columns the recordset fields have.
  227.     *
  228.     *   @return string HTML code
  229.     */
  230.     protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet$strVarBase$strVarName)
  231.     {
  232.         if ($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_value']] === null{
  233.             return $this->getHtmlNull();
  234.         }
  235.         switch ($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_is']]{
  236.             case 'r':
  237.                 return $this->getHtmlResource($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_value']]);
  238.                 break;
  239.             case 'b':
  240.                 return $this->getHtmlBlank($dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_value']]);
  241.                 break;
  242.             default:
  243.                 return $this->getHtmlLiteral(
  244.                     $dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_value']],
  245.                     $dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_lang']],
  246.                     $dbRecordSet->fields[$strVarBase '.' $this->sg->arVarAssignments[$strVarName]['sql_type']]
  247.                 );
  248.         }
  249.     }//protected function createObjectFromDbRecordSetPart(ADORecordSet $dbRecordSet, $strVarBase, $strVarName)
  250.  
  251.  
  252.  
  253.     protected function getHtmlNull()
  254.     {
  255.         return array('<pre>NULL</pre>''#FFF');
  256.     }//protected function getHtmlNull()
  257.  
  258.  
  259.  
  260.     protected function getHtmlBlank($value)
  261.     {
  262.         return array('<i>Blank node</i>'HTML_TABLE_BNODE_COLOR);
  263.     }//protected function getHtmlBlank($value)
  264.  
  265.  
  266.  
  267.     protected function getHtmlResource($value)
  268.     {
  269.         return array(
  270.             htmlspecialchars($value),
  271.             HTML_TABLE_RESOURCE_COLOR
  272.         );
  273.     }//protected function getHtmlResource($value)
  274.  
  275.  
  276.  
  277.     protected function getHtmlLiteral($value$language$datatype)
  278.     {
  279.         $strCode htmlspecialchars($value);
  280.         if ($language{
  281.             $strCode ' <i>xml:lang</i>=' $language;
  282.         }
  283.         if ($datatype{
  284.             $strCode ' <i>rdf:type</i>=' $datatype;
  285.         }
  286.         return array($strCodeHTML_TABLE_LITERAL_COLOR);
  287.     }//protected function getHtmlLiteral($value, $language, $datatype)
  288.  
  289.  
  290. }//class SparqlEngineDb_ResultRenderer_HTML implements SparqlEngineDb_ResultRenderer
  291.  
  292. ?>

Documentation generated on Fri, 1 Jun 2007 16:49:17 +0200 by phpDocumentor 1.3.2