示例#1
0
 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);
 }
示例#2
0
 /**
  * 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;
 }
示例#3
0
 /** @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;
 }