protected function _buildStringSearchQuery($setup)
 {
     // define vars
     $searchVar = new Erfurt_Sparql_Query2_Var('resourceUri');
     $subVar = new Erfurt_Sparql_Query2_Var('sub');
     // define query
     $query = new Erfurt_Sparql_Query2();
     $query->addProjectionVar($searchVar);
     $query->setDistinct();
     // init union var
     $union = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern();
     // parse config
     if (isset($setup->config->hierarchyRelations->out)) {
         foreach ($setup->config->hierarchyRelations->out as $rel) {
             // create new graph pattern
             $groupPattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
             // add triplen
             $groupPattern->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), $subVar);
             // add triplet to union var
             $union->addElement($groupPattern);
         }
     }
     // parse config
     if (isset($setup->config->hierarchyRelations->in)) {
         foreach ($setup->config->hierarchyRelations->in as $rel) {
             // create new graph pattern
             $groupPattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
             // add triplen
             $groupPattern->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel), $searchVar);
             // add triplet to union var
             $union->addElement($groupPattern);
         }
     }
     // parse config
     if (isset($setup->config->instanceRelation->out)) {
         foreach ($setup->config->instanceRelation->out as $rel) {
             // create new graph pattern
             $groupPattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
             // add triplen
             $groupPattern->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel), $searchVar);
             // add triplet to union var
             $union->addElement($groupPattern);
         }
     }
     // parse config
     if (isset($setup->config->instanceRelation->in)) {
         foreach ($setup->config->instanceRelation->in as $rel) {
             // create new graph pattern
             $groupPattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
             // add triplen
             $groupPattern->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), $subVar);
             // add triplet to union var
             $union->addElement($groupPattern);
         }
     }
     $query->addElement($union);
     // add regex filter for search string
     $query->addFilter(new Erfurt_Sparql_Query2_Regex(new Erfurt_Sparql_Query2_Str($searchVar), new Erfurt_Sparql_Query2_RDFLiteral($setup->state->searchString)));
     return $query;
 }
Ejemplo n.º 2
0
 /**
  * Builds the SPARQL query
  */
 private function _buildQueries()
 {
     $query = new Erfurt_Sparql_Query2();
     $uri = new Erfurt_Sparql_Query2_IriRef($this->_uri);
     $predVar = new Erfurt_Sparql_Query2_Var('predicate');
     $objVar = new Erfurt_Sparql_Query2_Var('object');
     $query->addTriple($uri, $predVar, $objVar);
     $query->addFilter(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_isBlank($objVar)));
     if (!empty($this->_ignoredPredicates)) {
         $or = new Erfurt_Sparql_Query2_ConditionalAndExpression();
         $filter = new Erfurt_Sparql_Query2_Filter($or);
         foreach ($this->_ignoredPredicates as $ignored) {
             $or->addElement(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_sameTerm($predVar, new Erfurt_Sparql_Query2_IriRef($ignored))));
         }
         $query->getWhere()->addElement($filter);
     }
     $query->setDistinct(true)->addProjectionVar($predVar)->addProjectionVar($objVar)->getOrder()->add($predVar);
     $queries = array();
     $closure = Erfurt_App::getInstance()->getStore()->getImportsClosure($this->_model->getModelUri(), true);
     $queryGraphs = array_merge(array($this->_graph), $closure);
     foreach ($queryGraphs as $currentGraph) {
         $query->setFroms(array($currentGraph));
         $queries[$currentGraph] = clone $query;
     }
     return $queries;
 }
 /**
  * Method that counts already existing distinct datasets for given uri
  *
  * @param $uri uri string
  *
  * @return int distinct existing datasets
  */
 private function countUriPattern($uri)
 {
     $query = new Erfurt_Sparql_Query2();
     $query->setDistinct(true);
     $unions = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern();
     $subjectVar = new Erfurt_Sparql_Query2_Var('s');
     $query->addProjectionVar($subjectVar);
     // create six temporary vars (not selected in query)
     $tempVars = array();
     for ($i = 0; $i < 6; $i++) {
         $tempVars[] = new Erfurt_Sparql_Query2_Var('var' . $i);
     }
     $singlePattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
     $singlePattern->addTriple($subjectVar, $tempVars[0], $tempVars[1]);
     $unions->addElement($singlePattern);
     $singlePattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
     $singlePattern->addTriple($tempVars[2], $subjectVar, $tempVars[3]);
     $unions->addElement($singlePattern);
     $singlePattern = new Erfurt_Sparql_Query2_GroupGraphPattern();
     $singlePattern->addTriple($tempVars[4], $tempVars[5], $subjectVar);
     $unions->addElement($singlePattern);
     $query->getWhere()->addElement($unions);
     $filter = new Erfurt_Sparql_Query2_ConditionalOrExpression();
     $filter->addElement(new Erfurt_Sparql_Query2_Regex($subjectVar, new Erfurt_Sparql_Query2_RDFLiteral('^' . $uri), new Erfurt_Sparql_Query2_RDFLiteral('i')));
     $query->addFilter($filter);
     $result = $this->_owApp->erfurt->getStore()->countWhereMatches($this->_model->getModelIri(), $query->getWhere(), 's', true);
     return $result;
 }