Mercurial > hg > rr-repo
comparison sites/all/libraries/ARC2/arc/serializers/ARC2_RDFJSONSerializer.php @ 4:ce11bbd8f642
added modules
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 19 Sep 2013 10:38:44 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:b28be78d8160 | 4:ce11bbd8f642 |
---|---|
1 <?php | |
2 /** | |
3 * ARC2 RDF/JSON Serializer | |
4 * | |
5 * @author Benjamin Nowack <bnowack@semsol.com> | |
6 * @license http://arc.semsol.org/license | |
7 * @homepage <http://arc.semsol.org/> | |
8 * @package ARC2 | |
9 */ | |
10 | |
11 ARC2::inc('RDFSerializer'); | |
12 | |
13 class ARC2_RDFJSONSerializer extends ARC2_RDFSerializer { | |
14 | |
15 function __construct($a, &$caller) { | |
16 parent::__construct($a, $caller); | |
17 } | |
18 | |
19 function __init() { | |
20 parent::__init(); | |
21 $this->content_header = 'application/json'; | |
22 } | |
23 | |
24 /* */ | |
25 | |
26 function getTerm($v, $term = 's') { | |
27 if (!is_array($v)) { | |
28 if (preg_match('/^\_\:/', $v)) { | |
29 return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'bnode'), 'o') : '"' . $v . '"'; | |
30 } | |
31 return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'uri'), 'o') : '"' . $v . '"'; | |
32 } | |
33 if (!isset($v['type']) || ($v['type'] != 'literal')) { | |
34 if ($term != 'o') { | |
35 return $this->getTerm($v['value'], $term); | |
36 } | |
37 if (preg_match('/^\_\:/', $v['value'])) { | |
38 return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "bnode" }'; | |
39 } | |
40 return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "uri" }'; | |
41 } | |
42 /* literal */ | |
43 $r = '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "literal"'; | |
44 $suffix = isset($v['datatype']) ? ', "datatype" : "' . $v['datatype'] . '"' : ''; | |
45 $suffix = isset($v['lang']) ? ', "lang" : "' . $v['lang'] . '"' : $suffix; | |
46 $r .= $suffix . ' }'; | |
47 return $r; | |
48 } | |
49 | |
50 function jsonEscape($v) { | |
51 if (function_exists('json_encode')) { | |
52 return preg_replace('/^"(.*)"$/', '\\1', str_replace("\/","/",json_encode($v))); | |
53 } | |
54 $from = array("\\", "\r", "\t", "\n", '"', "\b", "\f"); | |
55 $to = array('\\\\', '\r', '\t', '\n', '\"', '\b', '\f'); | |
56 return str_replace($from, $to, $v); | |
57 } | |
58 | |
59 function getSerializedIndex($index, $raw = 0) { | |
60 $r = ''; | |
61 $nl = "\n"; | |
62 foreach ($index as $s => $ps) { | |
63 $r .= $r ? ',' . $nl . $nl : ''; | |
64 $r .= ' ' . $this->getTerm($s). ' : {'; | |
65 $first_p = 1; | |
66 foreach ($ps as $p => $os) { | |
67 $r .= $first_p ? $nl : ',' . $nl; | |
68 $r .= ' ' . $this->getTerm($p). ' : ['; | |
69 $first_o = 1; | |
70 if (!is_array($os)) {/* single literal o */ | |
71 $os = array(array('value' => $os, 'type' => 'literal')); | |
72 } | |
73 foreach ($os as $o) { | |
74 $r .= $first_o ? $nl : ',' . $nl; | |
75 $r .= ' ' . $this->getTerm($o, 'o'); | |
76 $first_o = 0; | |
77 } | |
78 $first_p = 0; | |
79 $r .= $nl . ' ]'; | |
80 } | |
81 $r .= $nl . ' }'; | |
82 } | |
83 $r .= $r ? ' ' : ''; | |
84 return '{' . $nl . $r . $nl . '}'; | |
85 } | |
86 | |
87 /* */ | |
88 | |
89 } |