From: Markus S. <m.s...@hi...> - 2006-03-08 18:51:17
|
Hi again, i fixed the problem in ../rap/api/sparql/SparqlEngine.php in method _buildResultSet(). The problem was, that the value of $triple in the foreach loop is a Statement object if queried against the default graph and otherwise the value is a Quad object if queried against a named graph. I hope this fits to your needs and is a real bugfix without following a new bug! regards, markus /** * Builds the resultset. * * @param GraphPattern $pattern * @param Array $resmodel * @return Array */ protected function _buildResultSet($pattern,$resmodel){ // determine variables and their corresponding values $result = null; if(is_string($pattern->getSubject())){ $n = 0; foreach($resmodel['trip'] as $key => $triple){ if(isset($resmodel['graphvar'][$key])) $result[$n][$resmodel['graphvar'][$key]] = $resmodel['graph'][$key]; // FIXED if(isset($triple->subj)) { $result[$n++][$pattern->getSubject()] = $triple->subj; } else { $result[$n++][$pattern->getSubject()] = $triple->statement->subj; } } } if(is_string($pattern->getPredicate())){ $n = 0; foreach($resmodel['trip'] as $key => $triple){ if(isset($resmodel['graphvar'][$key])) $result[$n][$resmodel['graphvar'][$key]] = $resmodel['graph'][$key]; // FIXED if(isset($triple->pred)) { $result[$n++][$pattern->getPredicate()] = $triple->pred; } else { $result[$n++][$pattern->getPredicate()] = $triple->statement->pred; } } } if(is_string($pattern->getObject())){ $n = 0; foreach($resmodel['trip'] as $key => $triple){ if(isset($resmodel['graphvar'][$key])) $result[$n][$resmodel['graphvar'][$key]] = $resmodel['graph'][$key]; // FIXED if(isset($triple->obj)) { $result[$n++][$pattern->getObject()] = $triple->obj; } else { $result[$n++][$pattern->getObject()] = $triple->statement->obj; } } } return $result; } |
From: <tob...@we...> - 2006-03-09 10:56:55
|
Hi Markus, thank you for your bug report. The problem is in method findInNamedGraphs($graphnode,$subject,$predicate,$object) of DatasetMem and DatasetDb. The method of DatasetMem returns an iterator over all matched triples OR quads depending on the value of $graphnode. The method of DatasetDb returns always an iterator over all matched quads. I fixed it and put it in our CVS. Regards, Tobias > Hi again, > > i fixed the problem in ../rap/api/sparql/SparqlEngine.php in method > _buildResultSet(). The problem was, that the value of $triple in the > foreach loop is a Statement object if queried against the default > graph and otherwise the value is a Quad object if queried against a > named graph. I hope this fits to your needs and is a real bugfix > without following a new bug! > > regards, markus > > > /** > * Builds the resultset. > * > * @param GraphPattern $pattern > * @param Array $resmodel > * @return Array > */ > protected function _buildResultSet($pattern,$resmodel){ > // determine variables and their corresponding values > $result = null; > if(is_string($pattern->getSubject())){ > $n = 0; > foreach($resmodel['trip'] as $key => $triple){ > if(isset($resmodel['graphvar'][$key])) > $result[$n][$resmodel['graphvar'][$key]] = > $resmodel['graph'][$key]; > > // FIXED > if(isset($triple->subj)) { > $result[$n++][$pattern->getSubject()] = $triple->subj; > } else { > $result[$n++][$pattern->getSubject()] = $triple->statement->subj; > } > } > } > if(is_string($pattern->getPredicate())){ > $n = 0; > foreach($resmodel['trip'] as $key => $triple){ > if(isset($resmodel['graphvar'][$key])) > $result[$n][$resmodel['graphvar'][$key]] = > $resmodel['graph'][$key]; > > // FIXED > if(isset($triple->pred)) { > $result[$n++][$pattern->getPredicate()] = $triple->pred; > } else { > $result[$n++][$pattern->getPredicate()] = > $triple->statement->pred; > } > } > } > if(is_string($pattern->getObject())){ > $n = 0; > foreach($resmodel['trip'] as $key => $triple){ > if(isset($resmodel['graphvar'][$key])) > $result[$n][$resmodel['graphvar'][$key]] = > $resmodel['graph'][$key]; > > // FIXED > if(isset($triple->obj)) { > $result[$n++][$pattern->getObject()] = $triple->obj; > } else { > $result[$n++][$pattern->getObject()] = $triple->statement->obj; > } > } > } > > return $result; > } > > > ------------------------------------------------------- > This SF.Net email is sponsored by xPML, a groundbreaking scripting > language > that extends applications into web and mobile media. Attend the live > webcast > and join the prime developer group breaking into this new coding > territory! > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 > _______________________________________________ > Rdfapi-php-interest mailing list > Rdf...@li... > https://lists.sourceforge.net/lists/listinfo/rdfapi-php-interest |