Ejemplo n.º 1
0
 /**
  * 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);
 }