3 * ARC2 RDF/JSON Serializer
5 * @author Benjamin Nowack <bnowack@semsol.com>
6 * @license http://arc.semsol.org/license
7 * @homepage <http://arc.semsol.org/>
12 ARC2::inc('RDFSerializer');
14 class ARC2_RDFJSONSerializer extends ARC2_RDFSerializer {
16 function __construct($a = '', &$caller) {
17 parent::__construct($a, $caller);
20 function ARC2_RDFJSONSerializer($a = '', &$caller) {
21 $this->__construct($a, $caller);
26 $this->content_header = 'application/json';
31 function getTerm($v, $term = 's') {
33 if (preg_match('/^\_\:/', $v)) {
34 return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'bnode'), 'o') : '"' . $v . '"';
36 return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'uri'), 'o') : '"' . $v . '"';
38 if (!isset($v['type']) || ($v['type'] != 'literal')) {
40 return $this->getTerm($v['value'], $term);
42 if (preg_match('/^\_\:/', $v['value'])) {
43 return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "bnode" }';
45 return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "uri" }';
48 $r = '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "literal"';
49 $suffix = isset($v['datatype']) ? ', "datatype" : "' . $v['datatype'] . '"' : '';
50 $suffix = isset($v['lang']) ? ', "lang" : "' . $v['lang'] . '"' : $suffix;
55 function jsonEscape($v) {
56 if (function_exists('json_encode')) return trim(json_encode($v), '"');
57 $from = array("\\", "\r", "\t", "\n", '"', "\b", "\f", "/");
58 $to = array('\\\\', '\r', '\t', '\n', '\"', '\b', '\f', '\/');
59 return str_replace($from, $to, $v);
62 function getSerializedIndex($index) {
65 foreach ($index as $s => $ps) {
66 $r .= $r ? ',' . $nl . $nl : '';
67 $r .= ' ' . $this->getTerm($s). ' : {';
69 foreach ($ps as $p => $os) {
70 $r .= $first_p ? $nl : ',' . $nl;
71 $r .= ' ' . $this->getTerm($p). ' : [';
73 if (!is_array($os)) {/* single literal o */
74 $os = array(array('value' => $os, 'type' => 'literal'));
77 $r .= $first_o ? $nl : ',' . $nl;
78 $r .= ' ' . $this->getTerm($o, 'o');
87 return '{' . $nl . $r . $nl . '}';