コード例 #1
0
 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);
 }