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; }
/** * 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; }