danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2 /**
|
danielebarchiesi@4
|
3 * ARC2 MicroRDF Serializer
|
danielebarchiesi@4
|
4 *
|
danielebarchiesi@4
|
5 * @author Benjamin Nowack
|
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 * @version 2010-11-16
|
danielebarchiesi@4
|
10 */
|
danielebarchiesi@4
|
11
|
danielebarchiesi@4
|
12 ARC2::inc('RDFSerializer');
|
danielebarchiesi@4
|
13
|
danielebarchiesi@4
|
14 class ARC2_MicroRDFSerializer extends ARC2_RDFSerializer {
|
danielebarchiesi@4
|
15
|
danielebarchiesi@4
|
16 function __construct($a, &$caller) {
|
danielebarchiesi@4
|
17 parent::__construct($a, $caller);
|
danielebarchiesi@4
|
18 }
|
danielebarchiesi@4
|
19
|
danielebarchiesi@4
|
20 function __init() {
|
danielebarchiesi@4
|
21 parent::__init();
|
danielebarchiesi@4
|
22 $this->content_header = 'text/html';
|
danielebarchiesi@4
|
23 $this->label_store = $this->v('label_store', '', $this->a);
|
danielebarchiesi@4
|
24 }
|
danielebarchiesi@4
|
25
|
danielebarchiesi@4
|
26 /* */
|
danielebarchiesi@4
|
27
|
danielebarchiesi@4
|
28 function getLabel($res, $ps = '') {
|
danielebarchiesi@4
|
29 if (!$ps) $ps = array();
|
danielebarchiesi@4
|
30 foreach ($ps as $p => $os) {
|
danielebarchiesi@4
|
31 if (preg_match('/[\/\#](name|label|summary|title|fn)$/i', $p)) {
|
danielebarchiesi@4
|
32 return $os[0]['value'];
|
danielebarchiesi@4
|
33 }
|
danielebarchiesi@4
|
34 }
|
danielebarchiesi@4
|
35 if (preg_match('/^\_\:/', $res)) return "An unnamed resource";
|
danielebarchiesi@4
|
36 return $this->extractTermLabel($res);
|
danielebarchiesi@4
|
37 return preg_replace("/^(.*[\/\#])([^\/\#]+)$/", '\\2', str_replace('_', ' ', $res));
|
danielebarchiesi@4
|
38 }
|
danielebarchiesi@4
|
39
|
danielebarchiesi@4
|
40 function getSerializedIndex($index, $res = '') {
|
danielebarchiesi@4
|
41 $r = '';
|
danielebarchiesi@4
|
42 $n = "\n";
|
danielebarchiesi@4
|
43 if ($res) $index = array($res => $index[$res]);
|
danielebarchiesi@4
|
44 //return Trice::dump($index);
|
danielebarchiesi@4
|
45 $types = $this->v($this->expandPName('rdf:type'), array(), $index);
|
danielebarchiesi@4
|
46 $main_type = $types ? $types[0]['value'] : '';
|
danielebarchiesi@4
|
47 foreach ($index as $s => $ps) {
|
danielebarchiesi@4
|
48 /* node */
|
danielebarchiesi@4
|
49 $r .= '
|
danielebarchiesi@4
|
50 <div class="rdf-item" ' . $this->mdAttrs($s, $main_type) . '>
|
danielebarchiesi@4
|
51 <h3 class="rdf-itemlabel"><a href="' . $s . '">' . ucfirst($this->getLabel($s, $ps)) . '</a></h3>
|
danielebarchiesi@4
|
52 ';
|
danielebarchiesi@4
|
53 /* arcs */
|
danielebarchiesi@4
|
54 foreach ($ps as $p => $os) {
|
danielebarchiesi@4
|
55 $p_cls = strtolower($this->getPName($p));
|
danielebarchiesi@4
|
56 $p_cls = str_replace(':', '-', $p_cls);
|
danielebarchiesi@4
|
57 $r .= '
|
danielebarchiesi@4
|
58 <div class="rdf-prop ' . $p_cls . '">
|
danielebarchiesi@4
|
59 <a class="rdf-proplabel" href="' . $p . '">' . ucfirst($this->getLabel($p)) . ':</a>
|
danielebarchiesi@4
|
60 <ul class="rdf-values">
|
danielebarchiesi@4
|
61 ';
|
danielebarchiesi@4
|
62 $oc = count($os);
|
danielebarchiesi@4
|
63 foreach ($os as $i => $o) {
|
danielebarchiesi@4
|
64 $val = $this->getObjectValue($o, $p);
|
danielebarchiesi@4
|
65 $cls = '';
|
danielebarchiesi@4
|
66 if ($i == 0) $cls .= ($cls ? ' ' : '') . 'first';
|
danielebarchiesi@4
|
67 if ($i == $oc - 1) $cls .= ($cls ? ' ' : '') . 'last';
|
danielebarchiesi@4
|
68 $r .= $n . '<li' . ($cls ? ' class="' . $cls . '"' : '') . '>' . $val . '</li>';
|
danielebarchiesi@4
|
69 }
|
danielebarchiesi@4
|
70 $r .= '
|
danielebarchiesi@4
|
71 </ul>
|
danielebarchiesi@4
|
72 <div class="clb"></div>
|
danielebarchiesi@4
|
73 </div>
|
danielebarchiesi@4
|
74 ';
|
danielebarchiesi@4
|
75 }
|
danielebarchiesi@4
|
76 /* /node */
|
danielebarchiesi@4
|
77 $r .= '
|
danielebarchiesi@4
|
78 <div class="clb"></div>
|
danielebarchiesi@4
|
79 </div>
|
danielebarchiesi@4
|
80 ';
|
danielebarchiesi@4
|
81 }
|
danielebarchiesi@4
|
82 return $r;
|
danielebarchiesi@4
|
83 }
|
danielebarchiesi@4
|
84
|
danielebarchiesi@4
|
85 function getObjectValue($o, $p) {
|
danielebarchiesi@4
|
86 if ($o['type'] == 'uri') {
|
danielebarchiesi@4
|
87 if (preg_match('/(jpe?g|gif|png)$/i', $o['value'])) {
|
danielebarchiesi@4
|
88 return $this->getImageObjectValue($o, $p);
|
danielebarchiesi@4
|
89 }
|
danielebarchiesi@4
|
90 return $this->getURIObjectValue($o, $p);
|
danielebarchiesi@4
|
91 }
|
danielebarchiesi@4
|
92 if ($o['type'] == "bnode") {
|
danielebarchiesi@4
|
93 return $this->getBNodeObjectValue($o, $p);
|
danielebarchiesi@4
|
94 }
|
danielebarchiesi@4
|
95 return $this->getLiteralObjectValue($o, $p);
|
danielebarchiesi@4
|
96 }
|
danielebarchiesi@4
|
97
|
danielebarchiesi@4
|
98 function getImageObjectValue($o, $p) {
|
danielebarchiesi@4
|
99 return '<img class="rdf-value" itemprop="' . $p. '" src="' . htmlspecialchars($o['value']) . '" alt="img" />';
|
danielebarchiesi@4
|
100 }
|
danielebarchiesi@4
|
101
|
danielebarchiesi@4
|
102 function getURIObjectValue($o, $p) {
|
danielebarchiesi@4
|
103 $id = htmlspecialchars($o['value']);
|
danielebarchiesi@4
|
104 $label = $this->getObjectLabel($o['value']);
|
danielebarchiesi@4
|
105 /* differing href */
|
danielebarchiesi@4
|
106 $href = htmlspecialchars($this->v('href', $o['value'], $o));
|
danielebarchiesi@4
|
107 if ($id != $href) {
|
danielebarchiesi@4
|
108 return '<a class="rdf-value" itemprop="' . $p. '" href="' . $id . '" onclick="location.href=\'' . $href . '\';return false">' . $label . '</a>';
|
danielebarchiesi@4
|
109 }
|
danielebarchiesi@4
|
110 return '<a class="rdf-value" itemprop="' . $p. '" href="' . $id . '">' . $label . '</a>';
|
danielebarchiesi@4
|
111 //$label = $o['value'];
|
danielebarchiesi@4
|
112 //$label = preg_replace('/^https?\:\/\/(www\.)?/', '', $label);
|
danielebarchiesi@4
|
113 }
|
danielebarchiesi@4
|
114
|
danielebarchiesi@4
|
115 function getBNodeObjectValue($o, $p) {
|
danielebarchiesi@4
|
116 return '<div class="rdf-value" itemprop="' . $p. '" itemscope="">' . $o['value'] . '</div>';
|
danielebarchiesi@4
|
117 return '<div class="rdf-value" itemprop="' . $p. '" itemscope="">An unnamed resource</div>';
|
danielebarchiesi@4
|
118 }
|
danielebarchiesi@4
|
119
|
danielebarchiesi@4
|
120 function getLiteralObjectValue($o, $p) {
|
danielebarchiesi@4
|
121 return '<div class="rdf-value" itemprop="' . $p. '">' . $o['value'] . '</div>';
|
danielebarchiesi@4
|
122 }
|
danielebarchiesi@4
|
123
|
danielebarchiesi@4
|
124 /* */
|
danielebarchiesi@4
|
125
|
danielebarchiesi@4
|
126 function getObjectLabel($id) {
|
danielebarchiesi@4
|
127 $r = $this->extractTermLabel($id);
|
danielebarchiesi@4
|
128 if (!$this->label_store) return $r;
|
danielebarchiesi@4
|
129 $q = '
|
danielebarchiesi@4
|
130 SELECT ?val WHERE {
|
danielebarchiesi@4
|
131 <' . $id . '> ?p ?val .
|
danielebarchiesi@4
|
132 FILTER(REGEX(str(?p), "(label|title|name|summary)$"))
|
danielebarchiesi@4
|
133 } LIMIT 1
|
danielebarchiesi@4
|
134 ';
|
danielebarchiesi@4
|
135 $row = $this->label_store->query($q, 'row');
|
danielebarchiesi@4
|
136 return $row ? $row['val'] : $r;
|
danielebarchiesi@4
|
137 }
|
danielebarchiesi@4
|
138
|
danielebarchiesi@4
|
139 /* */
|
danielebarchiesi@4
|
140
|
danielebarchiesi@4
|
141 }
|
danielebarchiesi@4
|
142
|