Conditions | 6 |
Paths | 38 |
Total Lines | 30 |
Code Lines | 22 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
1 | <?php |
||
5 | public function resolve(int $timeout): ?EasyRdf\Resource |
||
6 | { |
||
7 | $graph = new EasyRdf\Graph($this->uri); |
||
8 | // guess the concept scheme based on the URI |
||
9 | if (preg_match('|(http://id.loc.gov/[^/]+/[^/]+)/.*|', $this->uri, $matches)) { |
||
10 | $graph->addResource($this->uri, 'skos:inScheme', $matches[1]); |
||
11 | } |
||
12 | |||
13 | try { |
||
14 | $opts = array('http' => array('method' => 'HEAD', |
||
15 | 'user_agent' => 'Skosmos', |
||
16 | 'timeout' => $timeout)); |
||
17 | $context = stream_context_create($opts); |
||
18 | $fd = fopen($this->uri, 'rb', false, $context); |
||
19 | if ($fd === false) { |
||
20 | return null; |
||
21 | } |
||
22 | $headers = stream_get_meta_data($fd)['wrapper_data']; |
||
23 | foreach ($headers as $header) { |
||
24 | if (strpos(strtolower($header), 'x-preflabel:') === 0) { |
||
25 | $elems = explode(' ', $header, 2); |
||
26 | $prefLabel = $elems[1]; |
||
27 | $graph->addLiteral($this->uri, 'skos:prefLabel', $prefLabel, 'en'); |
||
28 | } |
||
29 | } |
||
30 | fclose($fd); |
||
31 | return $graph->resource($this->uri); |
||
32 | } catch (Exception $e) { |
||
33 | $this->model->getLogger()->info("LOC resolution failed for <{$this->uri}>: $e"); |
||
34 | return null; |
||
35 | } |
||
38 |