private function runQuery($q, $qt = '', $infos = '') { /* ep */ $ep = $this->_arc2_RemoteStore->v('remote_store_endpoint', 0, $this->_arc2_RemoteStore->a); if (!$ep) { return $this->_arc2_RemoteStore->addError('No Endpoint defined.'); } /* prefixes */ $q = $this->_arc2_RemoteStore->completeQuery($q); /* custom handling */ $mthd = 'run' . $this->_arc2_RemoteStore->camelCase($qt) . 'Query'; if (method_exists($this, $mthd)) { return $this->_arc2_RemoteStore->{$mthd}($q, $infos); } if (in_array($qt, array('insert', 'delete'))) { if ($this->_readOnly) { return $this->_arc2_RemoteStore->addError('No right to write in the triplestore.'); } else { $s = new FourStore_Store($ep, $this->_debug); $r = $s->queryUpdate($q); if (!$r) { $errmsg = "Error unknown."; if (Net::ping($ep) == -1) { $errmsg = "Could not connect to " . $ep; } return $this->_arc2_RemoteStore->addError($errmsg); } } } else { $s = new FourStore_Store($ep, $this->_debug); $resp = $s->queryRead($q); if ($resp == "") { $errmsg = "Error unknown."; if (Net::ping($ep) == -1) { $errmsg = "Could not connect to " . $ep; } return $this->_arc2_RemoteStore->addError($errmsg); } if (preg_match_all('%<!--(.*error.*)-->%m', $resp, $errorResponse)) { $message4s = $errorResponse[1][0]; return $this->_arc2_RemoteStore->addError("4Store message : " . $message4s . "\n query :\n" . $q); } $parser = @ARC2::getSPARQLXMLResultParser(); $parser->parse('', $resp); $err = $parser->getErrors(); if ($err) { return $this->_arc2_RemoteStore->addError($err); } if ($qt == 'ask') { $bid = $parser->getBooleanInsertedDeleted(); $r = $bid['boolean']; } elseif ($qt == 'select' && !method_exists($parser, 'getRows')) { $r = $resp; } elseif ($qt == 'select') { $r = array('rows' => $parser->getRows(), 'variables' => $parser->getVariables()); } else { $r = $parser->getSimpleIndex(0); } unset($parser); } return $r; }
function parseXMLResultDoc($url, $type, &$reader) { $parser = ARC2::getSPARQLXMLResultParser(); $parser->reader =& $reader; # @@@ Should really be: $parser->setReader($reader); $parser->parse($url); if ($parser->getErrors()) { $this->errors = $parser->errors; # @@@ Could do with (improved) addError(s)? return; } $this->result = $parser->getStructure(); if ('ask' == $type) { $this->result = $this->result['boolean']; } }
function isSameSelectResult($qr, $result, $result_base) { if (strpos($result, 'http://www.w3.org/2001/sw/DataAccess/tests/result-set#')) { $parser = ARC2::getRDFParser($this->a); $parser->parse($result_base, $result); $index = $parser->getSimpleIndex(0); //echo '<pre>' . print_r($index, 1) .'</pre>'; $valid_qr = $this->buildTurtleSelectQueryResult($index); } else { $parser = ARC2::getSPARQLXMLResultParser($this->a); $parser->parse('', $result); $valid_qr = $parser->getStructure(); } if (isset($valid_qr['boolean'])) { $pass = $valid_qr['boolean'] == $this->v('boolean', '', $qr); } else { $pass = 1; if (count($valid_qr['variables']) != count($qr['variables'])) { $pass = 0; } if (count($valid_qr['rows']) != count($qr['rows'])) { $pass = 0; } if ($pass) { foreach ($valid_qr['variables'] as $var) { if (!in_array($var, $qr['variables'])) { $pass = 0; break; } } } if ($pass) { $index = $this->buildArrayHashIndex($qr['rows']); $valid_index = $this->buildArrayHashIndex($valid_qr['rows']); if (($diff = array_diff($index, $valid_index)) || ($diff = array_diff($valid_index, $index))) { $pass = 0; //echo '<pre>' . print_r($diff, 1) . '</pre>'; } } } return array('pass' => $pass, 'info' => $valid_qr); }