public function testRemoveOptionals() { $x = new Erfurt_Sparql_Query2_Var("x"); $triple = new Erfurt_Sparql_Query2_Triple($x, $x, $x); $optional = new Erfurt_Sparql_Query2_OptionalGraphPattern(); $optional->addElement($triple); $this->pattern->addElement($optional); $this->pattern->removeAllOptionals(); $elements = $this->pattern->getElements(); $this->assertTrue(empty($elements)); }
public function optionalGraphPattern() { $value = null; $groupGraphPattern15 = null; try { $this->match($this->input, $this->getToken('OPTIONAL'), self::$FOLLOW_OPTIONAL_in_optionalGraphPattern873); $this->pushFollow(self::$FOLLOW_groupGraphPattern_in_optionalGraphPattern875); $groupGraphPattern15 = $this->groupGraphPattern(); $this->state->_fsp--; $value = new Erfurt_Sparql_Query2_OptionalGraphPattern(); $value->addElement($groupGraphPattern15); } catch (RecognitionException $re) { $this->reportError($re); $this->recover($this->input, $re); } catch (Exception $e) { throw $e; } return $value; }
/** * addShownPropertyHelper * * adds a triple <classVar> $predicate ?newPropertyVar * and adds ?newPropertyVar as projectionvar * and keep track of that * * @param Erfurt_Sparql_Query2 $query * @param Erfurt_Sparql_Query2_Var $resVar * @param Erfurt_Sparql_Query2_IriRef|string $predicate * @param string|null $name * @param bool $inverse * @return array array('optional' => $optionalpart, 'var' => $var); */ public static function addShownPropertyHelper(Erfurt_Sparql_Query2 $query, Erfurt_Sparql_Query2_Var $resVar, $predicate, $name = null, $inverse = false) { if (is_string($predicate)) { $predicate = new Erfurt_Sparql_Query2_IriRef($predicate); } if (!$predicate instanceof Erfurt_Sparql_Query2_IriRef) { throw new RuntimeException('Argument 3 passed to Erfurt_Sparql_Query2_Abstraction_ClassNode::addShownPropertyHelper must be an instance of Erfurt_Sparql_Query2_IriRef, instance of ' . typeHelper($predicate) . ' given'); } if (!is_string($name)) { throw new RuntimeException('Argument 4 passed to Erfurt_Sparql_Query2_Abstraction_ClassNode::addShownPropertyHelper must be an instance of string, instance of ' . typeHelper($name) . ' given'); } if (!is_bool($inverse)) { throw new RuntimeException('Argument 5 passed to Erfurt_Sparql_Query2_Abstraction_ClassNode::addShownPropertyHelper must be an instance of bool, instance of ' . typeHelper($inverse) . ' given (' . $inverse . ')'); } $optionalpart = new Erfurt_Sparql_Query2_OptionalGraphPattern(); if ($name == null) { $var = new Erfurt_Sparql_Query2_Var($predicate); } else { $var = new Erfurt_Sparql_Query2_Var($name); } if (!$inverse) { $triple = new Erfurt_Sparql_Query2_Triple($resVar, $predicate, $var); } else { $triple = new Erfurt_Sparql_Query2_Triple($var, $predicate, $resVar); } $optionalpart->addElement($triple); $query->getWhere()->addElement($optionalpart); /* filtered now in php $filter = new Erfurt_Sparql_Query2_Filter( new Erfurt_Sparql_Query2_UnaryExpressionNot( new Erfurt_Sparql_Query2_isBlank($var) ) );*/ //$optionalpart->addElement($filter); $query->addProjectionVar($var); return array('optional' => $optionalpart, 'var' => $var, 'filter' => null); }
public static function getSearchTriples($setup, $forImplicit = false, $backend = 'zenddb') { $searchVar = new Erfurt_Sparql_Query2_Var('resourceUri'); $classVar = new Erfurt_Sparql_Query2_Var('classUri'); $subVar = new Erfurt_Sparql_Query2_Var('subResourceUri'); $elements = array(); // if deeper query if (isset($setup->state->parent)) { $mainUnion = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); // in relations if (isset($setup->config->hierarchyRelations->in)) { // default stuff if (count($setup->config->hierarchyRelations->in) > 1) { // parse config gile foreach ($setup->config->hierarchyRelations->in as $rel) { // set type $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), new Erfurt_Sparql_Query2_IriRef($setup->state->parent)); // add triplet to union var $mainUnion->addElement($ggp); } } else { $rel = $setup->config->hierarchyRelations->in; $queryOptional = new Erfurt_Sparql_Query2_GroupGraphPattern(); $queryOptional->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel[0]), new Erfurt_Sparql_Query2_IriRef($setup->state->parent)); $mainUnion->addElement($queryOptional); } } // out relations if (isset($setup->config->hierarchyRelations->out)) { // if there's out relations if (count($setup->config->hierarchyRelations->out) > 1) { // parse config gile foreach ($setup->config->hierarchyRelations->out as $rel) { // set type $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple(new Erfurt_Sparql_Query2_IriRef($setup->state->parent), new Erfurt_Sparql_Query2_IriRef($rel), $searchVar); // add triplet to union var $mainUnion->addElement($ggp); } } else { // get one relation $rel = $setup->config->hierarchyRelations->out; $queryOptional = new Erfurt_Sparql_Query2_GroupGraphPattern(); $queryOptional->addTriple(new Erfurt_Sparql_Query2_IriRef($setup->state->parent), new Erfurt_Sparql_Query2_IriRef($rel[0]), $searchVar); $mainUnion->addElement($queryOptional); } } $elements[] = $mainUnion; } else { // if default request if (!$forImplicit) { // set hierarchy types //$u1 = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen // $u1->addTriple( $searchVar, // new Erfurt_Sparql_Query2_IriRef(EF_RDF_TYPE), // $classVar // ); $elements[] = new Erfurt_Sparql_Query2_Triple($searchVar, new Erfurt_Sparql_Query2_IriRef(EF_RDF_TYPE), $classVar); //$mainUnion = new Erfurt_Sparql_Query2_GroupGraphPattern();//OrUnion //$mainUnion->addElement($u1); // request sub elements // in relations $optional = new Erfurt_Sparql_Query2_OptionalGraphPattern(); $unionSub = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); if (isset($setup->config->hierarchyRelations->in)) { if (count($setup->config->hierarchyRelations->in) > 1) { // init union var //$unionSub = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); // parse config gile foreach ($setup->config->hierarchyRelations->in as $rel) { // sub stuff $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel), $searchVar); // add triplet to union var $unionSub->addElement($ggp); } } else { $rel = $setup->config->hierarchyRelations->in; // add optional sub relation // create optional graph to load sublacsses of selected class //$queryOptional = new Erfurt_Sparql_Query2_GroupGraphPattern(); $optional->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel[0]), $searchVar); //$unionSub->addElement($queryOptional); } } if (isset($setup->config->hierarchyRelations->out)) { // init union var //$unionSub = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); if (count($setup->config->hierarchyRelations->out) > 1) { // parse config gile foreach ($setup->config->hierarchyRelations->out as $rel) { // sub stuff $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), $subVar); // add triplet to union var $unionSub->addElement($ggp); } } else { $rel = $setup->config->hierarchyRelations->out; // add optional sub relation // create optional graph to load sublacsses of selected class //$queryOptional = new Erfurt_Sparql_Query2_GroupGraphPattern(); $optional->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel[0]), $subVar); //$unionSub->addElement($queryOptional); } } //$mainUnion->addElement($unionSub); if ($unionSub->size() > 0) { $optional->addElement($unionSub); } $elements[] = $optional; // create filter for types $filterType = array(); $filterUris = array(); foreach ($setup->config->hierarchyTypes as $type) { $uriElem = new Erfurt_Sparql_Query2_IriRef($type); $filterUris[] = $uriElem; $filterType[] = new Erfurt_Sparql_Query2_sameTerm($classVar, $uriElem); } $owApp = OntoWiki::getInstance(); $store = $owApp->erfurt->getStore(); if ($store->isInSyntaxSupported()) { // e.g. Virtuoso $elements[] = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_InExpression($classVar, $filterUris)); } else { // sameTerm || sameTerm ... as supported by EfZendDb adapter // add filter $elements[] = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_ConditionalOrExpression($filterType)); } } else { // define subvar $subVar = new Erfurt_Sparql_Query2_Var('sub'); // init union var $union = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); // parse config if (isset($setup->config->hierarchyRelations->out)) { if (is_string($setup->config->hierarchyRelations->out)) { $setup->config->hierarchyRelations->out = array($setup->config->hierarchyRelations->out); } foreach ($setup->config->hierarchyRelations->out as $rel) { // create new graph pattern $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), $subVar); // add triplet to union var $union->addElement($ggp); } } // parse config if (isset($setup->config->hierarchyRelations->in)) { if (is_string($setup->config->hierarchyRelations->in)) { $setup->config->hierarchyRelations->in = array($setup->config->hierarchyRelations->in); } foreach ($setup->config->hierarchyRelations->in as $rel) { // create new graph pattern $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel), $searchVar); // add triplet to union var $union->addElement($ggp); } } // parse config if (isset($setup->config->instanceRelation->out)) { if (is_string($setup->config->instanceRelation->out)) { $setup->config->instanceRelation->out = array($setup->config->instanceRelation->out); } foreach ($setup->config->instanceRelation->out as $rel) { // create new graph pattern $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($subVar, new Erfurt_Sparql_Query2_IriRef($rel), $searchVar); // add triplet to union var $union->addElement($ggp); } } // parse config if (isset($setup->config->instanceRelation->in)) { if (is_string($setup->config->instanceRelation->in)) { $setup->config->instanceRelation->in = array($setup->config->instanceRelation->in); } foreach ($setup->config->instanceRelation->in as $rel) { // create new graph pattern $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), $subVar); // add triplet to union var $union->addElement($ggp); } } $elements[] = $union; } } if (isset($setup->config->rootElement)) { $union = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); if (isset($setup->config->hierarchyRelations->in)) { foreach ($setup->config->hierarchyRelations->in as $rel) { // create new graph pattern $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), new Erfurt_Sparql_Query2_IriRef($setup->config->rootElement)); // add triplet to union var $union->addElement($ggp); } $superUsed = true; } if (isset($setup->config->hierarchyRelations->out)) { foreach ($setup->config->hierarchyRelations->out as $rel) { // create new graph pattern $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); // add triplen $ggp->addTriple(new Erfurt_Sparql_Query2_IriRef($setup->config->rootElement), new Erfurt_Sparql_Query2_IriRef($rel), $searchVar); // add triplet to union var $union->addElement($ggp); } $superUsed = true; } if ($superUsed) { $elements[] = $union; } } $elements[] = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_isBlank(new Erfurt_Sparql_Query2_Var('resourceUri')))); // namespaces to be ignored, rdfs/owl-defined objects if (!isset($setup->state->showHidden)) { if (isset($setup->config->hiddenRelation)) { // optional var $queryOptional = new Erfurt_Sparql_Query2_OptionalGraphPattern(); // parse config if (is_string($setup->config->hiddenRelation)) { $setup->config->hiddenRelation = array($setup->config->hiddenRelation); } foreach ($setup->config->hiddenRelation as $ignore) { $queryOptional->addTriple(new Erfurt_Sparql_Query2_Var('resourceUri'), new Erfurt_Sparql_Query2_IriRef($ignore), new Erfurt_Sparql_Query2_Var('reg')); $regUsed = true; } if ($regUsed) { $elements[] = $queryOptional; $elements[] = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_bound(new Erfurt_Sparql_Query2_Var('reg')))); } } if (isset($setup->config->hiddenNS)) { // parse config foreach ($setup->config->hiddenNS as $ignore) { $elements[] = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_Regex(new Erfurt_Sparql_Query2_Str(new Erfurt_Sparql_Query2_Var('resourceUri')), new Erfurt_Sparql_Query2_RDFLiteral('^' . $ignore)))); } } } // dont't show rdfs/owl entities and subtypes in the first level if (!isset($setup->state->parent) && !isset($setup->config->rootElement)) { OntoWiki::getInstance()->logger->info("BACKEND: " . $backend); // optional var if ($backend == "zenddb") { $queryUnion = new Erfurt_Sparql_Query2_OptionalGraphPattern(); } else { $queryUnion = new Erfurt_Sparql_Query2_GroupOrUnionGraphPattern(); } if (isset($setup->config->hierarchyRelations->in)) { if (count($setup->config->hierarchyRelations->in) > 1) { foreach ($setup->config->hierarchyRelations->in as $rel) { $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); $ggp->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel), new Erfurt_Sparql_Query2_Var('super')); $queryUnion->addElement($ggp); } } else { $rel = $setup->config->hierarchyRelations->in; // add optional sub relation if ($backend == "zenddb") { $queryUnion->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel[0]), new Erfurt_Sparql_Query2_Var('super')); } else { $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); $ggp->addTriple($searchVar, new Erfurt_Sparql_Query2_IriRef($rel[0]), new Erfurt_Sparql_Query2_Var('super')); $queryUnion->addElement($ggp); } } //$mainUnion->addElement($u1); $superUsed = true; } if (isset($setup->config->hierarchyRelations->out)) { if (count($setup->config->hierarchyRelations->out) > 1) { foreach ($setup->config->hierarchyRelations->out as $rel) { $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); $ggp->addTriple(new Erfurt_Sparql_Query2_Var('super'), new Erfurt_Sparql_Query2_IriRef($rel), $searchVar); $queryUnion->addElement($ggp); } } else { $rel = $setup->config->hierarchyRelations->out; // add optional sub relation if ($backend == "zenddb") { $queryUnion->addTriple(new Erfurt_Sparql_Query2_Var('super'), new Erfurt_Sparql_Query2_IriRef($rel[0]), $searchVar); } else { $ggp = new Erfurt_Sparql_Query2_GroupGraphPattern(); $ggp->addTriple(new Erfurt_Sparql_Query2_Var('super'), new Erfurt_Sparql_Query2_IriRef($rel[0]), $searchVar); $queryUnion->addElement($ggp); } } //$mainUnion->addElement($u1); $superUsed = true; } if ($superUsed) { if ($backend == "zenddb") { $elements[] = $queryUnion; } else { $queryOptional = new Erfurt_Sparql_Query2_OptionalGraphPattern(); $queryOptional->addElement($queryUnion); $elements[] = $queryOptional; } $filter[] = new Erfurt_Sparql_Query2_Regex(new Erfurt_Sparql_Query2_Str(new Erfurt_Sparql_Query2_Var('super')), new Erfurt_Sparql_Query2_RDFLiteral('^' . EF_OWL_NS)); $filter[] = new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_bound(new Erfurt_Sparql_Query2_Var('super'))); $elements[] = new Erfurt_Sparql_Query2_Filter(new Erfurt_Sparql_Query2_ConditionalOrExpression($filter)); } } if (isset($setup->state->sorting)) { $sortRel = new Erfurt_Sparql_Query2_IriRef($setup->state->sorting); $sortVar = new Erfurt_Sparql_Query2_Var('sortRes'); $queryOptional = new Erfurt_Sparql_Query2_OptionalGraphPattern(); $queryOptional->addTriple(new Erfurt_Sparql_Query2_Var('resourceUri'), $sortRel, $sortVar); $elements[] = $queryOptional; } return $elements; }
/** * add a filter from the filter box - these filters match some predefined schemes * (like "equals", "contains") * * @param string $property * @param boolean $isInverse whether the property is a indirect property of the resources * @param string $propertyLabel label affects the created variable * @param string $filter the type of filter ("equals", "bound", "larger", "smaller", "between", "contains") * @param string $value * @param string $valueSecondary * @param string $valuetype ("uri" or "literal" or "typed-literal") * @param string $literaltype (if valuetype is set to "typed-literal", you can pass a URI here) * @param boolean $hidden whether to hide this filter in the filter box GUI * @param string $id optional predined ID, will be generated normally * @param boolean $negate whether to invert the condition * @param boolean $optional * * @return string id * @throws RuntimeException */ public function addFilter($property, $isInverse, $propertyLabel, $filter, $value = null, $valueSecondary = null, $valuetype = 'literal', $literaltype = null, $hidden = false, $id = null, $negate = false, $optional = false) { if ($id == null) { $id = 'box' . count($this->_filter); } else { if (isset($this->_filter[$id])) { $this->removeFilter($id); } } $prop = new Erfurt_Sparql_Query2_IriRef($property); if (!empty($value)) { switch ($valuetype) { case 'uri': $valueObj = new Erfurt_Sparql_Query2_IriRef($value); if (!empty($valueSecondary)) { $valueSecondaryObj = new Erfurt_Sparql_Query2_IriRef($valueSecondary); } break; case 'literal': if (!empty($literaltype)) { //with language tags $valueObj = new Erfurt_Sparql_Query2_RDFLiteral($value, $literaltype); if (!empty($valueSecondary)) { $valueSecondaryObj = new Erfurt_Sparql_Query2_RDFLiteral($valueSecondary, $literaltype); } } else { //no language tags if (is_array($value)) { $value = current($value); } $meta = ''; if (is_scalar($value) && !is_string($value) && !is_array($value)) { $meta = gettype($value); } $valueObj = new Erfurt_Sparql_Query2_RDFLiteral($value, $meta); if (!empty($valueSecondary)) { $valueSecondaryObj = new Erfurt_Sparql_Query2_RDFLiteral($valueSecondary, $meta); } } break; case 'typed-literal': if (in_array($literaltype, Erfurt_Sparql_Query2_RDFLiteral::$knownShortcuts)) { //is something like "bool" or "int" - will be converted from "1"^^xsd:int to 1 $valueObj = new Erfurt_Sparql_Query2_RDFLiteral($value, $literaltype); if (!empty($valueSecondary)) { $valueSecondaryObj = new Erfurt_Sparql_Query2_RDFLiteral($valueSecondary, $literaltype); } } else { // is a uri $valueObj = new Erfurt_Sparql_Query2_RDFLiteral($value, new Erfurt_Sparql_Query2_IriRef($literaltype)); if (!empty($valueSecondary)) { $valueSecondaryObj = new Erfurt_Sparql_Query2_RDFLiteral($valueSecondary, new Erfurt_Sparql_Query2_IriRef($literaltype)); } } break; default: throw new RuntimeException('called Ontowiki_Model_Instances::addFilter with ' . 'unknown param-value: valuetype = "' . $valuetype . '"'); } } switch ($filter) { case 'contains': $var = new Erfurt_Sparql_Query2_Var($propertyLabel); if (!$isInverse) { $triple = $this->_resourceQuery->addTriple($this->_resourceVar, $prop, $var); } else { $triple = $this->_resourceQuery->addTriple($var, $prop, $this->_resourceVar); } $valueObj->setValue(str_replace("\\", "\\\\", preg_quote($valueObj->getValue()))); $addFilter = null; if (!$negate) { $addFilter = new Erfurt_Sparql_Query2_Regex(new Erfurt_Sparql_Query2_Str($var), $valueObj); } else { $addFilter = new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_Regex(new Erfurt_Sparql_Query2_Str($var), $valueObj)); } $filterObj = $this->_resourceQuery->addFilter($addFilter); break; case 'equals': if ($valuetype == 'literal') { $valueVar = new Erfurt_Sparql_Query2_Var($propertyLabel); if (!$isInverse) { $triple = new Erfurt_Sparql_Query2_Triple($this->_resourceVar, $prop, $valueVar); } else { throw new RuntimeException('literal as value for an inverse property ' . 'is a literal subject which is not allowed'); } if ($negate) { $optionalGP = new Erfurt_Sparql_Query2_OptionalGraphPattern(); $optionalGP->addElement($triple); if ($optional) { $orExpression = new Erfurt_Sparql_Query2_ConditionalOrExpression(); $orExpression->addElement(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_bound($valueVar))); $orExpression->addElement(new Erfurt_Sparql_Query2_NotEquals($valueVar, $valueObj)); $filterObj = $optionalGP->addFilter($orExpression); } else { $filterObj = $optionalGP->addFilter(new Erfurt_Sparql_Query2_NotEquals($valueVar, $valueObj)); } $this->_resourceQuery->addElement($optionalGP); $triple = $optionalGP; } else { $this->_resourceQuery->addElement($triple); $filterObj = $this->_resourceQuery->addFilter(new Erfurt_Sparql_Query2_Regex(new Erfurt_Sparql_Query2_Str($valueVar), new Erfurt_Sparql_Query2_RDFLiteral('^' . str_replace("\\", "\\\\", preg_quote($value)) . '$'))); } } else { if (!$isInverse) { $triple = $this->_resourceQuery->addTriple($this->_resourceVar, $prop, $valueObj); } else { $triple = $this->_resourceQuery->addTriple($valueObj, $prop, $this->_resourceVar); } } break; case 'larger': $var = new Erfurt_Sparql_Query2_Var($propertyLabel); if (!$isInverse) { $triple = $this->_resourceQuery->addTriple($this->_resourceVar, $prop, $var); } else { $triple = $this->_resourceQuery->addTriple($var, $prop, $this->_resourceVar); } $filterObj = $this->_resourceQuery->addFilter(new Erfurt_Sparql_Query2_Larger($var, $valueObj)); break; case 'smaller': $var = new Erfurt_Sparql_Query2_Var($propertyLabel); if (!$isInverse) { $triple = $this->_resourceQuery->addTriple($this->_resourceVar, $prop, $var); } else { $triple = $this->_resourceQuery->addTriple($var, $prop, $this->_resourceVar); } $filterObj = $this->_resourceQuery->addFilter(new Erfurt_Sparql_Query2_Smaller($var, $valueObj)); break; case 'between': $var = new Erfurt_Sparql_Query2_Var($propertyLabel); if (!$isInverse) { $triple = $this->_resourceQuery->addTriple($this->_resourceVar, $prop, $var); } else { $triple = $this->_resourceQuery->addTriple($var, $prop, $this->_resourceVar); } $filterObj = $this->_resourceQuery->addFilter(new Erfurt_Sparql_Query2_ConditionalAndExpression(array(new Erfurt_Sparql_Query2_Larger($var, $valueObj), new Erfurt_Sparql_Query2_Smaller($var, $valueSecondaryObj)))); break; case 'bound': $var = new Erfurt_Sparql_Query2_Var($propertyLabel); if (!$isInverse) { $triple = new Erfurt_Sparql_Query2_Triple($this->_resourceVar, $prop, $var); } else { $triple = new Erfurt_Sparql_Query2_Triple($var, $prop, $this->_resourceVar); } if ($negate) { $optionalGP = new Erfurt_Sparql_Query2_OptionalGraphPattern(); $optionalGP->addElement($triple); $this->_resourceQuery->addElement($optionalGP); $triple = $optionalGP; // to save this obj (see underneath 20 lines) } else { $this->_resourceQuery->addElement($triple); } if ($negate) { $filterObj = $this->_resourceQuery->addFilter(new Erfurt_Sparql_Query2_UnaryExpressionNot(new Erfurt_Sparql_Query2_bound($var))); } break; default: throw new RuntimeException('called Ontowiki_Model_Instances::addFilter with ' . 'unknown param-value: filtertype=' . $filter); } //these filters bring their own triple $this->removeAllTriple(); //save $this->_filter[$id] = array('id' => $id, 'mode' => 'box', 'property' => $property, 'isInverse' => $isInverse, 'propertyLabel' => $propertyLabel, 'filter' => $filter, 'value1' => $value, 'value2' => $valueSecondary, 'valuetype' => $valuetype, 'literaltype' => $literaltype, 'hidden' => $hidden, 'negate' => $negate, 'objects' => array($triple, isset($filterObj) ? $filterObj : null)); $this->invalidate(); return $id; }