danielebarchiesi@4: danielebarchiesi@4: * @homepage danielebarchiesi@4: * @package ARC2 danielebarchiesi@4: * @version 2010-11-16 danielebarchiesi@4: */ danielebarchiesi@4: danielebarchiesi@4: ARC2::inc('RDFSerializer'); danielebarchiesi@4: danielebarchiesi@4: class ARC2_MicroRDFSerializer extends ARC2_RDFSerializer { danielebarchiesi@4: danielebarchiesi@4: function __construct($a, &$caller) { danielebarchiesi@4: parent::__construct($a, $caller); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function __init() { danielebarchiesi@4: parent::__init(); danielebarchiesi@4: $this->content_header = 'text/html'; danielebarchiesi@4: $this->label_store = $this->v('label_store', '', $this->a); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /* */ danielebarchiesi@4: danielebarchiesi@4: function getLabel($res, $ps = '') { danielebarchiesi@4: if (!$ps) $ps = array(); danielebarchiesi@4: foreach ($ps as $p => $os) { danielebarchiesi@4: if (preg_match('/[\/\#](name|label|summary|title|fn)$/i', $p)) { danielebarchiesi@4: return $os[0]['value']; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: if (preg_match('/^\_\:/', $res)) return "An unnamed resource"; danielebarchiesi@4: return $this->extractTermLabel($res); danielebarchiesi@4: return preg_replace("/^(.*[\/\#])([^\/\#]+)$/", '\\2', str_replace('_', ' ', $res)); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function getSerializedIndex($index, $res = '') { danielebarchiesi@4: $r = ''; danielebarchiesi@4: $n = "\n"; danielebarchiesi@4: if ($res) $index = array($res => $index[$res]); danielebarchiesi@4: //return Trice::dump($index); danielebarchiesi@4: $types = $this->v($this->expandPName('rdf:type'), array(), $index); danielebarchiesi@4: $main_type = $types ? $types[0]['value'] : ''; danielebarchiesi@4: foreach ($index as $s => $ps) { danielebarchiesi@4: /* node */ danielebarchiesi@4: $r .= ' danielebarchiesi@4:
mdAttrs($s, $main_type) . '> danielebarchiesi@4:

' . ucfirst($this->getLabel($s, $ps)) . '

danielebarchiesi@4: '; danielebarchiesi@4: /* arcs */ danielebarchiesi@4: foreach ($ps as $p => $os) { danielebarchiesi@4: $p_cls = strtolower($this->getPName($p)); danielebarchiesi@4: $p_cls = str_replace(':', '-', $p_cls); danielebarchiesi@4: $r .= ' danielebarchiesi@4:
danielebarchiesi@4: ' . ucfirst($this->getLabel($p)) . ': danielebarchiesi@4:
    danielebarchiesi@4: '; danielebarchiesi@4: $oc = count($os); danielebarchiesi@4: foreach ($os as $i => $o) { danielebarchiesi@4: $val = $this->getObjectValue($o, $p); danielebarchiesi@4: $cls = ''; danielebarchiesi@4: if ($i == 0) $cls .= ($cls ? ' ' : '') . 'first'; danielebarchiesi@4: if ($i == $oc - 1) $cls .= ($cls ? ' ' : '') . 'last'; danielebarchiesi@4: $r .= $n . '' . $val . ''; danielebarchiesi@4: } danielebarchiesi@4: $r .= ' danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4: '; danielebarchiesi@4: } danielebarchiesi@4: /* /node */ danielebarchiesi@4: $r .= ' danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4: '; danielebarchiesi@4: } danielebarchiesi@4: return $r; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function getObjectValue($o, $p) { danielebarchiesi@4: if ($o['type'] == 'uri') { danielebarchiesi@4: if (preg_match('/(jpe?g|gif|png)$/i', $o['value'])) { danielebarchiesi@4: return $this->getImageObjectValue($o, $p); danielebarchiesi@4: } danielebarchiesi@4: return $this->getURIObjectValue($o, $p); danielebarchiesi@4: } danielebarchiesi@4: if ($o['type'] == "bnode") { danielebarchiesi@4: return $this->getBNodeObjectValue($o, $p); danielebarchiesi@4: } danielebarchiesi@4: return $this->getLiteralObjectValue($o, $p); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function getImageObjectValue($o, $p) { danielebarchiesi@4: return 'img'; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function getURIObjectValue($o, $p) { danielebarchiesi@4: $id = htmlspecialchars($o['value']); danielebarchiesi@4: $label = $this->getObjectLabel($o['value']); danielebarchiesi@4: /* differing href */ danielebarchiesi@4: $href = htmlspecialchars($this->v('href', $o['value'], $o)); danielebarchiesi@4: if ($id != $href) { danielebarchiesi@4: return '' . $label . ''; danielebarchiesi@4: } danielebarchiesi@4: return '' . $label . ''; danielebarchiesi@4: //$label = $o['value']; danielebarchiesi@4: //$label = preg_replace('/^https?\:\/\/(www\.)?/', '', $label); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function getBNodeObjectValue($o, $p) { danielebarchiesi@4: return '
' . $o['value'] . '
'; danielebarchiesi@4: return '
An unnamed resource
'; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function getLiteralObjectValue($o, $p) { danielebarchiesi@4: return '
' . $o['value'] . '
'; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /* */ danielebarchiesi@4: danielebarchiesi@4: function getObjectLabel($id) { danielebarchiesi@4: $r = $this->extractTermLabel($id); danielebarchiesi@4: if (!$this->label_store) return $r; danielebarchiesi@4: $q = ' danielebarchiesi@4: SELECT ?val WHERE { danielebarchiesi@4: <' . $id . '> ?p ?val . danielebarchiesi@4: FILTER(REGEX(str(?p), "(label|title|name|summary)$")) danielebarchiesi@4: } LIMIT 1 danielebarchiesi@4: '; danielebarchiesi@4: $row = $this->label_store->query($q, 'row'); danielebarchiesi@4: return $row ? $row['val'] : $r; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /* */ danielebarchiesi@4: danielebarchiesi@4: } danielebarchiesi@4: