server/src/app/Http/Controllers/Sparql/SparqlClientController.php
author ymh <ymh.work@gmail.com>
Mon, 31 Oct 2016 14:24:23 +0100
changeset 386 c731ab9b934d
child 387 7fba86fa8604
permissions -rw-r--r--
implement first version of sparql client interface
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
386
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
namespace CorpusParole\Http\Controllers\Sparql;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
use Log;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
use Illuminate\Http\Request;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
use GuzzleHttp\Client;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
use EasyRdf\Sparql\Result as SparqlResult;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
use EasyRdf\Graph;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
use EasyRdf\RdfNamespace;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
use CorpusParole\Http\Controllers\Controller;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
use CorpusParole\Libraries\Utils;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
use CorpusParole\Libraries\Sparql\SparqlClient;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
use CorpusParole\Libraries\Sparql\SparqlQueryAnalyser;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
use RdfHelper;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
class SparqlClientController extends Controller
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
{
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    const HEADERS_FORWARDED = [ "host", "user-agent", "accept", "accept-language", "accept-encoding", "connection" ];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    const SELECT_RESULT_FORMAT = [
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        "SPARQL/CSV" => "text/csv",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        "SPARQL/JSON" => "application/sparql-results+json",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        "SPARQL/XML" => "application/sparql-results+xml",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        "SPARQL/TSV" => "text/tab-separated-values",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        "BINARY" => "application/x-binary-rdf-results-table"
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    ];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    const GRAPH_RESULT_FORMAT = [
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        "N-Triples" => "application/n-triples",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        "RDF/XML" => "application/rdf+xml",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        "Turtle" => "text/turtle",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
        "N3" => "text/n3",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
        "RDF/JSON" => "application/rdf+json",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        "TriG" => "application/trig",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        "N-Quads" => "application/n-quads",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        "BinaryRDF" => "application/x-binary-rdf",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        "TriX" => "application/trix",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        "JSON-LD" => "application/ld+json"
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    ];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    private $sparqlClient;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    private $httpClient;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    public function __construct(SparqlClient $sparqlClient, Client $httpClient) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        $this->sparqlClient = $sparqlClient;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        $this->httpClient = $httpClient;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    // display form
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    public function index() {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        return view('sparql/sparqlClientForm');
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    private function querySelect(Request $request, $query, $analyser) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        $countResult = $this->sparqlClient->query($analyser->getCountQuery());
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        $countField = $countResult->getFields()[0];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        $count = $countResult->current()->$countField;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
        $docs = $this->sparqlClient->query($query);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        $fields = $docs->getFields();
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        $results = [];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        foreach($docs as $row) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            $results[] = array_reduce($fields, function($res, $field) use ($row) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
                if(isset($row->$field)) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
                    $res[$field] = RdfHelper::serialiseValue($row->$field);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
                } else {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
                    $res[$field] = "<span class=\"corpus-rdf-blank-value\">&nbsp;</span>";
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
                }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
                return $res;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
            }, []);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        $namespaces = array_reduce(array_keys(RdfHelper::getPrefixes()), function($res, $p) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
            $res[$p] = RdfNamespace::namespaces()[$p];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
            return $res;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        }, []);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        $data = [
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
            'query' => $query,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
            'count' => $count,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            'fields' => $fields,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            'fieldPrefix' => "?",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
            'results' => $results,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
            'namespaces' => $namespaces,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
            'downloadFormats' => self::SELECT_RESULT_FORMAT
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        ];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
        $view = 'sparql/sparqlClientResultList';
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
        return [$view, $data];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    private function queryGraph(Request $request, $query, $analyser) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        $docs = $this->sparqlClient->query($query);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        $fields = ["subject", "predicate", "object"];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
        $results = [];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        foreach ($docs->resources() as $resource ) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
            foreach ($resource->propertyUris() as $property) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
                $propertyResource = $docs->resource($property);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
                foreach ($resource->all($propertyResource) as $value) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
                    $results[] = [
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                        'subject' => RdfHelper::serialiseValue($resource),
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                        'predicate'=> RdfHelper::serialiseValue($propertyResource),
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
                        'object'=> RdfHelper::serialiseValue($value)
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
                    ];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
                }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
            }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        $namespaces = array_reduce(array_keys(RdfHelper::getPrefixes()), function($res, $p) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
            $res[$p] = RdfNamespace::namespaces()[$p];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
            return $res;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        }, []);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        $data = [
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
            'query' => $query,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
            'count' => count($results),
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
            'fields' => $fields,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
            'fieldPrefix' => "",
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
            'results' => $results,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
            'namespaces' => $namespaces,
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
            'downloadFormats' => self::GRAPH_RESULT_FORMAT
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
        ];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        $view = 'sparql/sparqlClientResultList';
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
        return [$view, $data];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    private function queryAsk(Request $request, $query, $analyser) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        $data = [
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
            'results' => $this->sparqlClient->query($query),
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
            'namespaces' => $analyser->getPrefixes()
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        ];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
        $view = 'sparql/sparqlClientResultBoolean';
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
        return [$view, $data];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
    private function showHtml(Request $request) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
        $query = $request->input('query');
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        $analyser = new SparqlQueryAnalyser($query);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
        $queryType = $analyser->getQueryType();
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
        $namespaces = $analyser->getPrefixes();
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
        foreach($namespaces as $prefix => $nUri) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
            RdfNamespace::set($prefix,$nUri);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        if($queryType === SparqlQueryAnalyser::SELECT_QUERY) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
            list($view, $data) = $this->querySelect($request, $query, $analyser);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
        } elseif($queryType === SparqlQueryAnalyser::GRAPH_QUERY) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
            list($view, $data) = $this->queryGraph($request, $query, $analyser);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
        } elseif($queryType === SparqlQueryAnalyser::ASK_QUERY) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
            list($view, $data) = $this->queryAsk($request, $query, $analyser);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
        } else {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
            //return 500
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
            abort(500, "Serialization format unknown");
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
        return view($view, $data);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
    private function proxyQuery(Request $request, $format=null) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
        $query = $request->input('query');
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
        $headers = [];
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        foreach (self::HEADERS_FORWARDED as $h) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
            $headerValue = $request->header($h);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
            if($headerValue) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
                $headers[$h] = $headerValue;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
            }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        if(!empty($format)){
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
            $headers['Accept'] = $format;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
        $sesameResp = $this->httpClient->get(config('corpusparole.sesame_query_url'), ['query' => $request->all(), 'headers' => $headers]);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
        $resp = response((string)$sesameResp->getBody(), $sesameResp->getStatusCode());
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
        foreach ($sesameResp->getHeaders() as $name => $values) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
            if($name != 'Transfer-Encoding') {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
                $resp->header($name, $values);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
            }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        return $resp;
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
    // display result
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
    public function show(Request $request) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        $format = $request->input('format');
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        if($format === 'text/html') {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
            return $this->showHtml($request);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        } else {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
            return $this->proxyQuery($request, $format);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
        }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
    // do the query
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
    public function query(Request $request) {
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
        return $this->proxyQuery($request);
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
    }
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
c731ab9b934d implement first version of sparql client interface
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
}