danielebarchiesi@4: danielebarchiesi@4: * @license http://arc.semsol.org/license danielebarchiesi@4: * @homepage danielebarchiesi@4: * @package ARC2 danielebarchiesi@4: */ danielebarchiesi@4: danielebarchiesi@4: ARC2::inc('RDFSerializer'); danielebarchiesi@4: danielebarchiesi@4: class ARC2_RDFJSONSerializer extends ARC2_RDFSerializer { danielebarchiesi@4: danielebarchiesi@4: function __construct($a, &$caller) { danielebarchiesi@4: parent::__construct($a, $caller); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function __init() { danielebarchiesi@4: parent::__init(); danielebarchiesi@4: $this->content_header = 'application/json'; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /* */ danielebarchiesi@4: danielebarchiesi@4: function getTerm($v, $term = 's') { danielebarchiesi@4: if (!is_array($v)) { danielebarchiesi@4: if (preg_match('/^\_\:/', $v)) { danielebarchiesi@4: return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'bnode'), 'o') : '"' . $v . '"'; danielebarchiesi@4: } danielebarchiesi@4: return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'uri'), 'o') : '"' . $v . '"'; danielebarchiesi@4: } danielebarchiesi@4: if (!isset($v['type']) || ($v['type'] != 'literal')) { danielebarchiesi@4: if ($term != 'o') { danielebarchiesi@4: return $this->getTerm($v['value'], $term); danielebarchiesi@4: } danielebarchiesi@4: if (preg_match('/^\_\:/', $v['value'])) { danielebarchiesi@4: return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "bnode" }'; danielebarchiesi@4: } danielebarchiesi@4: return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "uri" }'; danielebarchiesi@4: } danielebarchiesi@4: /* literal */ danielebarchiesi@4: $r = '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "literal"'; danielebarchiesi@4: $suffix = isset($v['datatype']) ? ', "datatype" : "' . $v['datatype'] . '"' : ''; danielebarchiesi@4: $suffix = isset($v['lang']) ? ', "lang" : "' . $v['lang'] . '"' : $suffix; danielebarchiesi@4: $r .= $suffix . ' }'; danielebarchiesi@4: return $r; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function jsonEscape($v) { danielebarchiesi@4: if (function_exists('json_encode')) { danielebarchiesi@4: return preg_replace('/^"(.*)"$/', '\\1', str_replace("\/","/",json_encode($v))); danielebarchiesi@4: } danielebarchiesi@4: $from = array("\\", "\r", "\t", "\n", '"', "\b", "\f"); danielebarchiesi@4: $to = array('\\\\', '\r', '\t', '\n', '\"', '\b', '\f'); danielebarchiesi@4: return str_replace($from, $to, $v); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function getSerializedIndex($index, $raw = 0) { danielebarchiesi@4: $r = ''; danielebarchiesi@4: $nl = "\n"; danielebarchiesi@4: foreach ($index as $s => $ps) { danielebarchiesi@4: $r .= $r ? ',' . $nl . $nl : ''; danielebarchiesi@4: $r .= ' ' . $this->getTerm($s). ' : {'; danielebarchiesi@4: $first_p = 1; danielebarchiesi@4: foreach ($ps as $p => $os) { danielebarchiesi@4: $r .= $first_p ? $nl : ',' . $nl; danielebarchiesi@4: $r .= ' ' . $this->getTerm($p). ' : ['; danielebarchiesi@4: $first_o = 1; danielebarchiesi@4: if (!is_array($os)) {/* single literal o */ danielebarchiesi@4: $os = array(array('value' => $os, 'type' => 'literal')); danielebarchiesi@4: } danielebarchiesi@4: foreach ($os as $o) { danielebarchiesi@4: $r .= $first_o ? $nl : ',' . $nl; danielebarchiesi@4: $r .= ' ' . $this->getTerm($o, 'o'); danielebarchiesi@4: $first_o = 0; danielebarchiesi@4: } danielebarchiesi@4: $first_p = 0; danielebarchiesi@4: $r .= $nl . ' ]'; danielebarchiesi@4: } danielebarchiesi@4: $r .= $nl . ' }'; danielebarchiesi@4: } danielebarchiesi@4: $r .= $r ? ' ' : ''; danielebarchiesi@4: return '{' . $nl . $r . $nl . '}'; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /* */ danielebarchiesi@4: danielebarchiesi@4: }