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