public static function initFromString($queryString, $parserOptions = array()) { require_once 'Erfurt/Sparql/ParserException.php'; $retval = null; $errors = null; $parser = new Erfurt_Sparql_Parser($queryString); try { $retval = $parser->parse(); } catch (Erfurt_Sparql_ParserException $e) { $errors = $e->__toString(); } return array('retval' => $retval, 'errors' => $errors); }
/** * parsing the Query * @access private * @param string $queryString SparqlQuery * @return array $queryParts $queryParts['triples'] = $triples; * $queryParts['graphs'] = $graphs; */ private function parseQuery($queryString) { // Creation of SPARQL Parser and parsing the query string $parser = new Erfurt_Sparql_Parser(); //hack to get Construct queries running. $queryString = preg_replace("/CONSTRUCT\\s*\\{[^\\}]*\\}/mix", "SELECT *", $queryString); $parsedQuery = $parser->parse($queryString); //extract graphUris from FromPart and from FromNamedPart $graphs = $parsedQuery->getFromPart(); $fromNamedParts = $parsedQuery->getFromNamedPart(); foreach ($fromNamedParts as $fromNamedPart) { array_push($graphs, $fromNamedPart); } //extract triplePattern from parsed query and put them in an array. $triples = array(); //triples[0,1,2...] = array('subject' => <subject>, 'predicate' => <predicate>, 'object' => <object>,) $graphPatterns = $parsedQuery->getResultPart(); foreach ($graphPatterns as $gid => $graphPattern) { $triplePatterns = $graphPattern->getTriplePatterns(); foreach ($triplePatterns as $tid => $triplePattern) { $subject = (string) $triplePattern->getSubject(); $predicate = (string) $triplePattern->getPredicate(); $object = (string) $triplePattern->getObject(); $triple = array(); $this->_isVariable($subject) ? null : ($triple['subject'] = $subject); $this->_isVariable($predicate) ? null : ($triple['predicate'] = $predicate); $this->_isVariable($object) ? null : ($triple['object'] = $object); $triples[] = $triple; } } $queryParts['triples'] = $triples; $queryParts['graphs'] = $graphs; return $queryParts; }
/** @see Erfurt_Store_Adapter_Interface */ public function sparqlQuery($query, $options = array()) { $resultform = isset($options[Erfurt_Store::RESULTFORMAT]) ? $options[Erfurt_Store::RESULTFORMAT] : Erfurt_Store::RESULTFORMAT_PLAIN; $start = microtime(true); require_once 'Erfurt/Sparql/EngineDb/Adapter/EfZendDb.php'; $engine = new Erfurt_Sparql_EngineDb_Adapter_EfZendDb($this->_dbConn, $this->_getModelInfos()); require_once 'Erfurt/Sparql/Parser.php'; $parser = new Erfurt_Sparql_Parser(); if (!$query instanceof Erfurt_Sparql_Query) { $query = $parser->parse((string) $query); } $result = $engine->queryModel($query, $resultform); // Debug executed SPARQL queries in debug mode (7) $logger = Erfurt_App::getInstance()->getLog(); $time = (microtime(true) - $start) * 1000; $debugText = 'SPARQL Query (' . $time . ' ms)'; $logger->debug($debugText); return $result; }