/** * 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); }
/** * 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); }