annotate sites/all/libraries/ARC2/arc/serializers/ARC2_MicroRDFSerializer.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 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