source: pmb4.1/trunk/fuentes/pmb/classes/rdf/arc2/serializers/ARC2_RDFJSONSerializer.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 2.6 KB
Line 
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
11ARC2::inc('RDFSerializer');
12
13class 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}
Note: See TracBrowser for help on using the repository browser.