function runQueryEvaluationTest($id) { $nl = "\n"; $r = ''; /* get action */ $q = ' PREFIX mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> . PREFIX qt: <http://www.w3.org/2001/sw/DataAccess/tests/test-query#> . SELECT DISTINCT ?query ?data ?graph_data ?result WHERE { <' . $id . '> mf:action ?action ; mf:result ?result . ?action qt:query ?query . OPTIONAL { ?action qt:data ?data . } OPTIONAL { ?action qt:graphData ?graph_data . } } '; $qr = $this->store->query($q); $rows = $qr['result']['rows']; $infos = array(); foreach (array('query', 'data', 'result', 'graph_data') as $var) { $infos[$var] = array(); $infos[$var . '_value'] = array(); foreach ($rows as $row) { if (isset($row[$var])) { if (!in_array($row[$var], $infos[$var])) { $infos[$var][] = $row[$var]; $infos[$var . '_value'][] = $this->getFile($row[$var]); } } } ${$var} = $infos[$var]; ${$var . '_value'} = $infos[$var . '_value']; if (count($infos[$var]) == 1) { ${$var} = $infos[$var][0]; ${$var . '_value'} = $infos[$var . '_value'][0]; } if (${$var} && $var != '-result') { //echo '<pre>' . $$var . $nl . $nl . htmlspecialchars(${$var . '_value'}) . '</pre><hr />'; } } /* query infos */ ARC2::inc('SPARQLPlusParser'); $parser = new ARC2_SPARQLPlusParser($this->a, $this); $parser->parse($query_value, $query); $infos = $parser->getQueryInfos(); $rest = $parser->getUnparsedCode(); $errors = $parser->getErrors(); $q_type = !$errors ? $infos['query']['type'] : ''; /* add data */ $dsets = array(); $gdsets = array(); if ($data) { $dsets = is_array($data) ? array_merge($dsets, $data) : array_merge($dsets, array($data)); } if ($graph_data) { $gdsets = is_array($graph_data) ? array_merge($gdsets, $graph_data) : array_merge($gdsets, array($graph_data)); } if (!$dsets && !$gdsets) { foreach ($infos['query']['dataset'] as $set) { if ($set['named']) { $gdsets[] = $set['graph']; } else { $dsets[] = $set['graph']; } } } $store = $this->data_store; $store->reset(); foreach ($dsets as $graph) { $qr = $store->query('LOAD <' . $graph . '>'); } foreach ($gdsets as $graph) { $qr = $store->query('LOAD <' . $graph . '> INTO <' . $graph . '>'); } /* run query */ if ($query) { $sql = $store->query($query_value, 'sql', $query); $qr = $store->query($query_value, '', $query); $qr_result = $qr['result']; if ($q_type == 'select') { $qr_result = $this->adjustBnodes($qr['result'], $id); } elseif ($q_type == 'construct') { $ser = ARC2::getTurtleSerializer($this->a); $qr_result = $ser->getSerializedIndex($qr_result); } } //echo '<pre>query result: ' . $nl . htmlspecialchars(print_r($qr_result, 1)) . '</pre>'; if (!$query || $errors || $rest) { return array('pass' => 0, 'info' => 'query could not be parsed' . htmlspecialchars($query_value)); } $m = 'isSame' . $q_type . 'Result'; $sub_r = $this->{$m}($qr_result, $result_value, $result, $id); $pass = $sub_r['pass']; if (in_array($id, array('http://www.w3.org/2001/sw/DataAccess/tests/data-r2/sort/manifest#dawg-sort-6', 'http://www.w3.org/2001/sw/DataAccess/tests/data-r2/sort/manifest#dawg-sort-8', 'http://www.w3.org/2001/sw/DataAccess/tests/data-r2/sort/manifest#dawg-sort-builtin'))) { $pass = 0; /* manually checked 2007-09-18 */ } if (in_array($id, array('http://www.w3.org/2001/sw/DataAccess/tests/data-r2/sort/manifest#dawg-sort-function', 'http://www.w3.org/2001/sw/DataAccess/tests/data-r2/reduced/manifest#reduced-1', 'http://www.w3.org/2001/sw/DataAccess/tests/data-r2/reduced/manifest#reduced-2'))) { $pass = 1; /* manually checked 2007-11-28 */ } $pass_info = $sub_r['info']; $info = print_r($pass_info, 1) . $nl; $info .= '<hr />sql: ' . $nl . htmlspecialchars($sql['result']) . '<hr />'; $info .= $pass ? '' : print_r($graph_data, 1) . $nl . htmlspecialchars(print_r($graph_data_value, 1)) . '<hr />'; $info .= $pass ? '' : print_r($data, 1) . $nl . htmlspecialchars(print_r($data_value, 1)) . '<hr />'; $info .= $pass ? '' : $query . $nl . htmlspecialchars($query_value) . '<hr />'; $info .= $pass ? '' : '<pre>query result: ' . $nl . htmlspecialchars(print_r($qr_result, 1)) . '</pre>' . '<hr />'; $info .= $pass ? '' : print_r($infos, 1); return array('pass' => $pass, 'info' => $info); }