* @homepage
* @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 .= '
mdAttrs($s, $main_type) . '>
';
/* arcs */
foreach ($ps as $p => $os) {
$p_cls = strtolower($this->getPName($p));
$p_cls = str_replace(':', '-', $p_cls);
$r .= '
' . ucfirst($this->getLabel($p)) . ':
';
$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 . '- ' . $val . '
';
}
$r .= '
';
}
/* /node */
$r .= '
';
}
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 '';
}
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 '' . $label . '';
}
return '' . $label . '';
//$label = $o['value'];
//$label = preg_replace('/^https?\:\/\/(www\.)?/', '', $label);
}
function getBNodeObjectValue($o, $p) {
return '' . $o['value'] . '
';
return 'An unnamed resource
';
}
function getLiteralObjectValue($o, $p) {
return '' . $o['value'] . '
';
}
/* */
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;
}
/* */
}