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:
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 '
';
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: