Exemple #1
0
 /**
  * if the selected resources changed (due to filters or limit or offset)
  * we have to change the value query as well (because the resources are mentioned as subjects)
  *
  * @return OntoWiki_Model_Instances $this
  */
 protected function updateValueQuery()
 {
     if ($this->_valueQueryUptodate) {
         return $this;
     }
     $resources = $this->getShownResources();
     foreach ($resources as $key => $resource) {
         $resources[$key] = new Erfurt_Sparql_Query2_SameTerm($this->_resourceVar, new Erfurt_Sparql_Query2_IriRef($resource['value']));
     }
     if ($this->_valueQueryResourceFilter == null) {
         $this->_valueQueryResourceFilter = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_BooleanLiteral(false));
         $this->_valueQuery->addElement($this->_valueQueryResourceFilter);
     }
     $this->_valueQueryResourceFilter->setConstraint(empty($resources) ? new Erfurt_Sparql_Query2_BooleanLiteral(false) : new Erfurt_Sparql_Query2_ConditionalOrExpression($resources));
     //fix for a strange issue where a query with only optionals fails
     //(but there is a magic/unkown condition, that makes it work for some queries!?)
     //if($this->_store->getBackendName() == 'ZendDb'){
     $hasTriple = false;
     foreach ($this->_valueQuery->getWhere()->getElements() as $element) {
         if ($element instanceof Erfurt_Sparql_Query2_IF_TriplesSameSubject) {
             $hasTriple = true;
             break;
         }
     }
     if (!$hasTriple) {
         $this->_valueQuery->getWhere()->addElement(new Erfurt_Sparql_Query2_Triple($this->_resourceVar, new Erfurt_Sparql_Query2_Var('p'), new Erfurt_Sparql_Query2_Var('o')));
     }
     //}
     //remove duplicate triples...
     $this->_valueQuery->optimize();
     $this->_valueQueryUptodate = true;
     return $this;
 }