diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sites/all/libraries/ARC2/arc/serializers/ARC2_MicroRDFSerializer.php	Thu Sep 19 10:38:44 2013 +0100
@@ -0,0 +1,142 @@
+<?php
+/**
+ * ARC2 MicroRDF Serializer
+ *
+ * @author Benjamin Nowack
+ * @license <http://arc.semsol.org/license>
+ * @homepage <http://arc.semsol.org/>
+ * @package ARC2
+ * @version 2010-11-16
+*/
+
+ARC2::inc('RDFSerializer');
+
+class ARC2_MicroRDFSerializer extends ARC2_RDFSerializer {
+
+  function __construct($a, &$caller) {
+    parent::__construct($a, $caller);
+  }
+  
+  function __init() {
+    parent::__init();
+    $this->content_header = 'text/html';
+    $this->label_store = $this->v('label_store', '', $this->a);
+  }
+
+  /*  */
+  
+  function getLabel($res, $ps = '') {
+    if (!$ps) $ps = array();
+    foreach ($ps as $p => $os) {
+      if (preg_match('/[\/\#](name|label|summary|title|fn)$/i', $p)) {
+        return $os[0]['value'];
+      }
+    }
+    if (preg_match('/^\_\:/', $res)) return "An unnamed resource";
+    return $this->extractTermLabel($res);
+    return preg_replace("/^(.*[\/\#])([^\/\#]+)$/", '\\2', str_replace('_', ' ', $res));
+  }
+  
+  function getSerializedIndex($index, $res = '') {
+    $r = '';
+    $n = "\n";
+    if ($res) $index = array($res => $index[$res]);
+    //return Trice::dump($index);
+    $types = $this->v($this->expandPName('rdf:type'), array(), $index);
+    $main_type = $types ? $types[0]['value'] : '';
+    foreach ($index as $s => $ps) {
+      /* node */
+      $r .= '
+        <div class="rdf-item" ' . $this->mdAttrs($s, $main_type) . '>
+          <h3 class="rdf-itemlabel"><a href="' . $s . '">' . ucfirst($this->getLabel($s, $ps))  . '</a></h3>
+      ';
+      /* arcs */
+      foreach ($ps as $p => $os) {
+        $p_cls = strtolower($this->getPName($p));
+        $p_cls = str_replace(':', '-', $p_cls);
+        $r .= '
+          <div class="rdf-prop ' . $p_cls . '">
+            <a class="rdf-proplabel" href="' . $p . '">' . ucfirst($this->getLabel($p)) . ':</a>
+            <ul class="rdf-values">
+        ';
+        $oc = count($os);
+        foreach ($os as $i => $o) {
+          $val = $this->getObjectValue($o, $p);
+          $cls = '';
+          if ($i == 0) $cls .= ($cls ? ' ' : '') . 'first';
+          if ($i == $oc - 1) $cls .= ($cls ? ' ' : '') . 'last';
+          $r .= $n . '<li' . ($cls ? ' class="' . $cls . '"' : '') . '>' . $val . '</li>';
+        }
+        $r .= '
+            </ul>
+            <div class="clb"></div>
+          </div>
+        ';
+      }
+      /* /node */
+      $r .= '
+        <div class="clb"></div>
+        </div>
+      ';
+    }
+    return $r;
+  }
+  
+  function getObjectValue($o, $p) {
+    if ($o['type'] == 'uri') {
+      if (preg_match('/(jpe?g|gif|png)$/i', $o['value'])) {
+        return $this->getImageObjectValue($o, $p);
+      }
+      return $this->getURIObjectValue($o, $p);
+    }
+    if ($o['type'] == "bnode") {
+      return $this->getBNodeObjectValue($o, $p);
+    }
+    return $this->getLiteralObjectValue($o, $p);
+  }
+  
+  function getImageObjectValue($o, $p) {
+    return '<img class="rdf-value" itemprop="' . $p. '" src="' . htmlspecialchars($o['value']) . '" alt="img" />';
+  }
+  
+  function getURIObjectValue($o, $p) {
+    $id = htmlspecialchars($o['value']);
+    $label = $this->getObjectLabel($o['value']);
+    /* differing href */
+    $href = htmlspecialchars($this->v('href', $o['value'], $o));
+    if ($id != $href) {
+      return '<a class="rdf-value" itemprop="' . $p. '" href="' . $id . '" onclick="location.href=\'' . $href . '\';return false">' . $label . '</a>';
+    }
+    return '<a class="rdf-value" itemprop="' . $p. '" href="' . $id . '">' . $label . '</a>';
+    //$label = $o['value'];
+    //$label = preg_replace('/^https?\:\/\/(www\.)?/', '', $label);
+  }
+
+  function getBNodeObjectValue($o, $p) {
+    return '<div class="rdf-value" itemprop="' . $p. '" itemscope="">' . $o['value'] . '</div>';
+    return '<div class="rdf-value" itemprop="' . $p. '" itemscope="">An unnamed resource</div>';
+  }
+
+  function getLiteralObjectValue($o, $p) {
+    return '<div class="rdf-value" itemprop="' . $p. '">' . $o['value'] . '</div>';
+  }
+
+  /*  */
+
+  function getObjectLabel($id) {
+    $r = $this->extractTermLabel($id);
+    if (!$this->label_store) return $r;
+    $q = '
+      SELECT ?val WHERE {
+        <' . $id . '> ?p ?val .
+        FILTER(REGEX(str(?p), "(label|title|name|summary)$"))
+      } LIMIT 1
+    ';
+    $row = $this->label_store->query($q, 'row');
+    return $row ? $row['val'] : $r;
+  }
+
+  /*  */
+  
+}
+