Add link header parse method.
This commit is contained in:
parent
82e93347c1
commit
944e9ee886
61
jsonld.php
61
jsonld.php
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* PHP implementation of the JSON-LD API.
|
* PHP implementation of the JSON-LD API.
|
||||||
* Version: 0.1.0
|
* Version: 0.2.0
|
||||||
*
|
*
|
||||||
* @author Dave Longley
|
* @author Dave Longley
|
||||||
*
|
*
|
||||||
|
@ -161,6 +161,58 @@ function jsonld_to_rdf($input, $options=array()) {
|
||||||
return $p->toRDF($input, $options);
|
return $p->toRDF($input, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses a link header. The results will be key'd by the value of "rel".
|
||||||
|
*
|
||||||
|
* Link: <http://json-ld.org/contexts/person.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"
|
||||||
|
*
|
||||||
|
* Parses as: {
|
||||||
|
* 'http://www.w3.org/ns/json-ld#context': {
|
||||||
|
* target: http://json-ld.org/contexts/person.jsonld,
|
||||||
|
* type: 'application/ld+json'
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* If there is more than one "rel" with the same IRI, then entries in the
|
||||||
|
* resulting map for that "rel" will be arrays.
|
||||||
|
*
|
||||||
|
* @param string $header the link header to parse.
|
||||||
|
*
|
||||||
|
* @return assoc the parsed result.
|
||||||
|
*/
|
||||||
|
function jsonld_parse_link_header($header) {
|
||||||
|
$rval = array();
|
||||||
|
// split on unbracketed/unquoted commas
|
||||||
|
if(!preg_match_all('/(?:<[^>]*?>|"[^"]*?"|[^,])+/', $header, $entries)) {
|
||||||
|
return $rval;
|
||||||
|
}
|
||||||
|
$r_link_header = '/\s*<([^>]*?)>\s*(?:;\s*(.*))?/';
|
||||||
|
foreach($entries as $entry) {
|
||||||
|
$match = preg_match($r_link_header, $entry[0]);
|
||||||
|
if(!$match) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$result = array('target' => $match[1]);
|
||||||
|
$params = $match[2];
|
||||||
|
$r_params = '/(.*?)=(?:(?:"([^"]*?)")|([^"]*?))\s*(?:(?:;\s*)|$)/';
|
||||||
|
$matches = preg_match_all($r_params, $params);
|
||||||
|
foreach($matches as $match) {
|
||||||
|
$result[$match[1]] = $match[2] ?: $match[3];
|
||||||
|
}
|
||||||
|
$rel = $result['rel'] ?: '';
|
||||||
|
if(!isset($rval, $rel)) {
|
||||||
|
$rval[$rel] = $result;
|
||||||
|
}
|
||||||
|
else if(is_array($rval, $rel)) {
|
||||||
|
$rval[$rel][] = $result;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$rval[$rel] = array($rval[$rel], $result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $rval;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Relabels all blank nodes in the given JSON-LD input.
|
* Relabels all blank nodes in the given JSON-LD input.
|
||||||
*
|
*
|
||||||
|
@ -5355,11 +5407,10 @@ jsonld_register_rdf_parser(
|
||||||
* A JSON-LD Exception.
|
* A JSON-LD Exception.
|
||||||
*/
|
*/
|
||||||
class JsonLdException extends Exception {
|
class JsonLdException extends Exception {
|
||||||
protected $type;
|
public function __construct(
|
||||||
protected $details;
|
$msg, $type, /*$code='error',*/ $details=null, $previous=null) {
|
||||||
protected $cause;
|
|
||||||
public function __construct($msg, $type, $details=null, $previous=null) {
|
|
||||||
$this->type = $type;
|
$this->type = $type;
|
||||||
|
//$this->code = $code;
|
||||||
$this->details = $details;
|
$this->details = $details;
|
||||||
$this->cause = $previous;
|
$this->cause = $previous;
|
||||||
parent::__construct($msg, 0, $previous);
|
parent::__construct($msg, 0, $previous);
|
||||||
|
|
Loading…
Reference in a new issue