mirror of
https://github.com/Babibubebon/lodfe.git
synced 2024-09-22 17:34:19 +09:00
Improve view and query for describing resource
This commit is contained in:
parent
3394884640
commit
d4aaf6ae00
5 changed files with 118 additions and 47 deletions
|
@ -16,12 +16,11 @@ class ResourceController extends Controller
|
|||
];
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
* ResourceController constructor.
|
||||
*/
|
||||
protected function getCurrentDatasetConfig($request) {
|
||||
$datasetName = explode('.', $request->route()[1]['as'])[1];
|
||||
return config('datasets.' . $datasetName);
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('dataset');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -31,31 +30,45 @@ class ResourceController extends Controller
|
|||
*/
|
||||
protected function querySparql($request, $id)
|
||||
{
|
||||
$datasetConfig = $this->getCurrentDatasetConfig($request);
|
||||
$client = new \EasyRdf_Sparql_Client($datasetConfig['endpoint']);
|
||||
|
||||
$resourceUri = str_replace('{id}', $id, $datasetConfig['resource_uri']);
|
||||
$query = 'DESCRIBE <' . $resourceUri . '>';
|
||||
$client = new \EasyRdf_Sparql_Client($request->datasetConfig['endpoint']);
|
||||
$query = <<<EOT
|
||||
CONSTRUCT {
|
||||
<{$request->resourceUri}> ?p ?o .
|
||||
?s ?ip <{$request->resourceUri}> .
|
||||
}
|
||||
WHERE {
|
||||
<{$request->resourceUri}> ?p ?o .
|
||||
?s ?ip <{$request->resourceUri}> .
|
||||
}
|
||||
EOT;
|
||||
return $client->query($query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param $id
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function html(Request $request, $id)
|
||||
{
|
||||
$graph = $this->querySparql($request, urldecode($id));
|
||||
if ($graph->isEmpty()) {
|
||||
abort(404);
|
||||
}
|
||||
$subject = key($graph->toRdfPhp());
|
||||
$datasetConfig = $this->getCurrentDatasetConfig($request);
|
||||
$dataUri = str_replace('{id}', $id, $datasetConfig['data_uri']);
|
||||
|
||||
return view('resource')->with([
|
||||
'graph' => $graph,
|
||||
'subject' => $subject,
|
||||
'dataUri' => $dataUri,
|
||||
'primaryTopic' => $request->resourceUri,
|
||||
'dataUri' => $request->dataUri,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param $id
|
||||
* @param $ext
|
||||
* @return \Illuminate\Http\Response|\Laravel\Lumen\Http\ResponseFactory
|
||||
*/
|
||||
public function data(Request $request, $id, $ext)
|
||||
{
|
||||
if (!in_array($ext, $this->acceptableFileExtensions)) {
|
||||
|
|
37
app/Http/Middleware/DatasetMiddleware.php
Normal file
37
app/Http/Middleware/DatasetMiddleware.php
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class DatasetMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (!$request->route()) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
$datasetName = explode('.', $request->route()[1]['as'])[1];
|
||||
$currentDatasetConfig = config('datasets.' . $datasetName);
|
||||
|
||||
$id = $request->route('id');
|
||||
$resourceUri = str_replace('{id}', $id, $currentDatasetConfig['resource_uri']);
|
||||
$dataUri = str_replace('{id}', $id, $currentDatasetConfig['data_uri']);
|
||||
|
||||
$request->merge([
|
||||
'datasetConfig' => $currentDatasetConfig,
|
||||
'resourceUri' => $resourceUri,
|
||||
'dataUri' => $dataUri,
|
||||
]);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
|
@ -72,6 +72,7 @@ $app->singleton(
|
|||
|
||||
$app->routeMiddleware([
|
||||
'content_negotiation' => App\Http\Middleware\ContentNegotiatorMiddleware::class,
|
||||
'dataset' => App\Http\Middleware\DatasetMiddleware::class,
|
||||
]);
|
||||
|
||||
/*
|
||||
|
|
34
resources/views/parts/row.blade.php
Normal file
34
resources/views/parts/row.blade.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<tr>
|
||||
<td>
|
||||
@if($subject !== $primaryTopic)
|
||||
is
|
||||
@endif
|
||||
<a href="{{ $predicate }}">{{ \EasyRdf_Namespace::shorten($predicate) ?? $predicate }}</a>
|
||||
@if($subject !== $primaryTopic)
|
||||
of
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
@if($subject === $primaryTopic)
|
||||
@foreach($objects as $object)
|
||||
<li>
|
||||
@if($object['type'] === 'uri')
|
||||
<a href="{{ $object['value'] }}">{{ $object['value'] }}</a>
|
||||
@elseif($object['type'] === 'literal')
|
||||
{{ $object['value'] }}
|
||||
@if(isset($object['lang']))
|
||||
<small>{{ '@'.$object['lang'] }}</small>
|
||||
@endif
|
||||
@if(isset($object['datatype']))
|
||||
<small>^^{{ \EasyRdf_Namespace::shorten($object['datatype']) ?? $object['datatype'] }}</small>
|
||||
@endif
|
||||
@endif
|
||||
</li>
|
||||
@endforeach
|
||||
@else
|
||||
<a href="{{ $subject }}">{{ $subject }}</a>
|
||||
@endif
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
|
@ -1,12 +1,12 @@
|
|||
@extends('base')
|
||||
@section('title')
|
||||
About: {{ $graph->label($subject) ?? $graph->getLiteral($subject, 'schema:name') }}
|
||||
About: {{ $graph->label($primaryTopic) ?? $graph->getLiteral($primaryTopic, 'schema:name') }}
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<section>
|
||||
<h1>@yield('title')</h1>
|
||||
<code class="h5">{{ $subject }}</code>
|
||||
<code class="h5">{{ $primaryTopic }}</code>
|
||||
|
||||
<div class="float-right">
|
||||
<div class="dropdown">
|
||||
|
@ -33,40 +33,26 @@
|
|||
<th>Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($graph->toRdfPhp() as $subject => $predicateObjects)
|
||||
@foreach($predicateObjects as $predicate => $objects)
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ $predicate }}">{{ \EasyRdf_Namespace::shorten($predicate) ?? $predicate }}</a>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
@foreach($objects as $object)
|
||||
<li>
|
||||
@if($object['type'] === 'uri')
|
||||
<a href="{{ $object['value'] }}">{{ $object['value'] }}</a>
|
||||
@elseif($object['type'] === 'literal')
|
||||
{{ $object['value'] }}
|
||||
@if(isset($object['lang']))
|
||||
<small>{{ '@'.$object['lang'] }}</small>
|
||||
@endif
|
||||
@if(isset($object['datatype']))
|
||||
<small>^^{{ \EasyRdf_Namespace::shorten($object['datatype']) ?? $object['datatype'] }}</small>
|
||||
@endif
|
||||
@endif
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@endforeach
|
||||
@if($subject === $primaryTopic)
|
||||
@foreach($predicateObjects as $predicate => $objects)
|
||||
@include('parts.row')
|
||||
@endforeach
|
||||
@break
|
||||
@endif
|
||||
@endforeach
|
||||
@foreach($graph->toRdfPhp() as $subject => $predicateObjects)
|
||||
@if($subject !== $primaryTopic)
|
||||
@foreach($predicateObjects as $predicate => $objects)
|
||||
@include('parts.row')
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script type="application/ld+json">
|
||||
{!! $graph->serialise('jsonld') !!}
|
||||
{!! $graph->serialise('jsonld') !!}
|
||||
</script>
|
||||
@endsection
|
||||
|
|
Loading…
Reference in a new issue