/** * Finds Tuples matching one TriplePattern. * * @param TriplePattern $pattern * @param Array $graphlist * @return Array */ protected function findTuplesMatchingOnePattern($pattern, $graphlist) { $var = null; $sub = $pattern->getSubject(); $pred = $pattern->getPredicate(); $obj = $pattern->getObject(); if (is_string($sub) || $sub instanceof BlankNode) { if (is_string($sub)) { $var['sub'] = $sub; } $sub = null; } if (is_string($pred) || $pred instanceof BlankNode) { if (is_string($pred)) { $var['pred'] = $pred; } $pred = null; } if (is_string($obj) || $obj instanceof BlankNode) { if (is_string($obj)) { $var['obj'] = $obj; } $obj = null; } $intBindings = $this->_buildIntBindings($var); $k = 0; $key = 0; // search in named graphs if ($graphlist['var'][0] != null || $graphlist['list'][0] != null) { foreach ($graphlist['list'] as $key => $graphnode) { // query the dataset $it = $this->dataset->findInNamedGraphs($graphnode, $sub, $pred, $obj, false); if ($it->valid()) { // add statements to the result list while ($it->valid()) { if ($graphnode == null) { $element = $it->current()->getStatement(); $grname = $it->current()->getGraphname(); } else { if ($it->current() instanceof Quad) { $element = $it->current()->getStatement(); } else { $element = $it->current(); } $grname = $graphnode; } if ($this->checkIntBindings($element, $intBindings)) { $resmodel['trip'][$k] = $element; $resmodel['graph'][$k] = $grname; // $resmodel['graphvar'][$k] = $graphlist['var'][$key]; $resmodel['graphvar'][$k] = $graphlist['var'][0]; $k++; } $it->next(); } } } } // search in the default graph if ($graphlist['list'][0] == null && $graphlist['var'][0] == null) { $gr = $this->dataset->getDefaultGraph(); $res = $gr->find($sub, $pred, $obj); foreach ($res->triples as $innerkey => $element) { if ($this->checkIntBindings($element, $intBindings)) { $resmodel['trip'][$k] = $element; $resmodel['graph'][$k] = null; $resmodel['graphvar'][$k] = $graphlist['var'][$key]; $k++; } } } if ($k == 0) { return false; } return $this->_buildResultSet($pattern, $resmodel); }