Mercurial > hg > rr-repo
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/libraries/ARC2/arc/serializers/ARC2_RDFJSONSerializer.php Thu Sep 19 10:38:44 2013 +0100 @@ -0,0 +1,89 @@ +<?php +/** + * ARC2 RDF/JSON Serializer + * + * @author Benjamin Nowack <bnowack@semsol.com> + * @license http://arc.semsol.org/license + * @homepage <http://arc.semsol.org/> + * @package ARC2 +*/ + +ARC2::inc('RDFSerializer'); + +class ARC2_RDFJSONSerializer extends ARC2_RDFSerializer { + + function __construct($a, &$caller) { + parent::__construct($a, $caller); + } + + function __init() { + parent::__init(); + $this->content_header = 'application/json'; + } + + /* */ + + function getTerm($v, $term = 's') { + if (!is_array($v)) { + if (preg_match('/^\_\:/', $v)) { + return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'bnode'), 'o') : '"' . $v . '"'; + } + return ($term == 'o') ? $this->getTerm(array('value' => $v, 'type' => 'uri'), 'o') : '"' . $v . '"'; + } + if (!isset($v['type']) || ($v['type'] != 'literal')) { + if ($term != 'o') { + return $this->getTerm($v['value'], $term); + } + if (preg_match('/^\_\:/', $v['value'])) { + return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "bnode" }'; + } + return '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "uri" }'; + } + /* literal */ + $r = '{ "value" : "' . $this->jsonEscape($v['value']) . '", "type" : "literal"'; + $suffix = isset($v['datatype']) ? ', "datatype" : "' . $v['datatype'] . '"' : ''; + $suffix = isset($v['lang']) ? ', "lang" : "' . $v['lang'] . '"' : $suffix; + $r .= $suffix . ' }'; + return $r; + } + + function jsonEscape($v) { + if (function_exists('json_encode')) { + return preg_replace('/^"(.*)"$/', '\\1', str_replace("\/","/",json_encode($v))); + } + $from = array("\\", "\r", "\t", "\n", '"', "\b", "\f"); + $to = array('\\\\', '\r', '\t', '\n', '\"', '\b', '\f'); + return str_replace($from, $to, $v); + } + + function getSerializedIndex($index, $raw = 0) { + $r = ''; + $nl = "\n"; + foreach ($index as $s => $ps) { + $r .= $r ? ',' . $nl . $nl : ''; + $r .= ' ' . $this->getTerm($s). ' : {'; + $first_p = 1; + foreach ($ps as $p => $os) { + $r .= $first_p ? $nl : ',' . $nl; + $r .= ' ' . $this->getTerm($p). ' : ['; + $first_o = 1; + if (!is_array($os)) {/* single literal o */ + $os = array(array('value' => $os, 'type' => 'literal')); + } + foreach ($os as $o) { + $r .= $first_o ? $nl : ',' . $nl; + $r .= ' ' . $this->getTerm($o, 'o'); + $first_o = 0; + } + $first_p = 0; + $r .= $nl . ' ]'; + } + $r .= $nl . ' }'; + } + $r .= $r ? ' ' : ''; + return '{' . $nl . $r . $nl . '}'; + } + + /* */ + +}