Beispiel #1
0
 /**
  * Query the database with the given SPARQL query.
  *
  * @param Erfurt_SparqlQuery $query Parsed SPARQL query.
  * @param string $resultform Result form. If set to 'xml' the result will be
  * SPARQL Query Results XML Format as described in @link http://www.w3.org/TR/rdf-sparql-XMLres/.
  *
  * @return array/string  array of triple arrays, or XML. 
  * Format depends on $resultform parameter.
  */
 public function queryModel(Erfurt_Sparql_Query $query, $resultform = 'plain')
 {
     $this->query = $query;
     require_once 'Erfurt/Sparql/EngineDb/QuerySimplifier.php';
     $qsimp = new Erfurt_Sparql_EngineDb_QuerySimplifier();
     $qsimp->simplify($this->query);
     require_once 'Erfurt/Sparql/EngineDb/QueryOptimizer.php';
     $queryOptimizer = new Erfurt_Sparql_EngineDb_QueryOptimizer($this);
     $result = $queryOptimizer->optimize($this->query);
     if ($result instanceof Erfurt_Sparql_Query) {
         $this->query = $result;
     }
     $resultform = strtolower($resultform);
     switch ($resultform) {
         case 'xml':
             require_once 'Erfurt/Sparql/EngineDb/ResultRenderer/Xml.php';
             $rc = new Erfurt_Sparql_EngineDb_ResultRenderer_Xml();
             break;
             //require_once 'Erfurt/Exception.php';
             //throw new Erfurt_Exception('XML result format not supported yet.');
             //require_once 'Erfurt/Sparql/EngineDb/ResultRenderer/EfZendDb/Xml.php';
             //$this->rc = new Erfurt_Sparql_EngineDb_ResultRenderer_RapZendDb_Xml();
             //break;
         //require_once 'Erfurt/Exception.php';
         //throw new Erfurt_Exception('XML result format not supported yet.');
         //require_once 'Erfurt/Sparql/EngineDb/ResultRenderer/EfZendDb/Xml.php';
         //$this->rc = new Erfurt_Sparql_EngineDb_ResultRenderer_RapZendDb_Xml();
         //break;
         case 'extended':
             require_once 'Erfurt/Sparql/EngineDb/ResultRenderer/Extended.php';
             $rc = new Erfurt_Sparql_EngineDb_ResultRenderer_Extended();
             break;
         case 'json':
             require_once 'Erfurt/Sparql/EngineDb/ResultRenderer/Json.php';
             $rc = new Erfurt_Sparql_EngineDb_ResultRenderer_Json();
             break;
         case 'plain':
         default:
             require_once 'Erfurt/Sparql/EngineDb/ResultRenderer/Plain.php';
             $rc = new Erfurt_Sparql_EngineDb_ResultRenderer_Plain();
     }
     if (is_array($result)) {
         $result = $rc->convertFromDbResults($result['data'], $this->query, $this, $result['vars']);
         return $result;
     }
     require_once 'Erfurt/Sparql/EngineDb/SqlGenerator/Adapter/Ef.php';
     $this->sg = new Erfurt_Sparql_EngineDb_SqlGenerator_Adapter_Ef($this->query, $this->arModelIdMapping);
     require_once 'Erfurt/Sparql/EngineDb/TypeSorter.php';
     $this->ts = new Erfurt_Sparql_EngineDb_TypeSorter($this->query, $this);
     $this->_setOptions();
     $arSqls = $this->sg->createSql();
     #var_dump($arSqls);exit;
     $this->ts->setData($this->sg);
     return $rc->convertFromDbResults($this->_queryMultiple($this->ts->getOrderifiedSqls($arSqls)), $this->query, $this, $this->sg->arVarAssignments);
 }
Beispiel #2
0
 /**
  *   Create a prepared statement that can be executed later.
  *
  *   @param  Dataset       $dataset    RDF Dataset
  *   @param  Query         $query      Parsed SPARQL query
  *
  *   @return SparqlEngineDb_PreparedStatement Prepared statment that can
  *           be execute()d later.
  */
 public function prepare(Dataset $dataset, Query $query)
 {
     require_once RDFAPI_INCLUDE_DIR . 'sparql/SparqlEngineDb/PreparedStatement.php';
     require_once RDFAPI_INCLUDE_DIR . 'sparql/SparqlEngineDb/Preparator.php';
     $this->query = $query;
     $this->dataset = $dataset;
     $this->sg = new SparqlEngineDb_SqlGenerator($this->query, $this->dbConn, $this->arModelIds);
     $this->rc = new SparqlEngineDb_ResultConverter($this->query, $this->sg, $this);
     $this->ts = new SparqlEngineDb_TypeSorter($this->query, $this->dbConn);
     $this->pr = new SparqlEngineDb_Preparator($this->query, $this->dbConn);
     $this->arPrepared = $this->sg->createSql();
     $this->ts->setData($this->sg);
     if ($this->ts->willBeDataDependent()) {
         $this->bRealPrepared = false;
     } else {
         $this->bRealPrepared = true;
         list($strSelect, $strFrom, $strWhere) = $this->arPrepared;
         $this->arPreparedQueries = $this->ts->getOrderifiedSqls($strSelect, $strFrom, $strWhere);
         $this->arDbStatements = $this->pr->prepareInDb($this->arPreparedQueries, $this->sg->getPlaceholders());
     }
     return new SparqlEngineDb_PreparedStatement($this);
 }