Mercurial > hg > rr-repo
diff sites/all/libraries/ARC2/arc/parsers/ARC2_SPARQLXMLResultParser.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/parsers/ARC2_SPARQLXMLResultParser.php Thu Sep 19 10:38:44 2013 +0100 @@ -0,0 +1,112 @@ +<?php +/* +homepage: http://arc.semsol.org/ +license: http://arc.semsol.org/license + +class: ARC2 SPARQL Result XML Parser +author: Benjamin Nowack +version: 2010-11-16 +*/ + +ARC2::inc('LegacyXMLParser'); + +class ARC2_SPARQLXMLResultParser extends ARC2_LegacyXMLParser { + + function __construct($a, &$caller) { + parent::__construct($a, $caller); + } + + function __init() {/* reader */ + parent::__init(); + $this->srx = 'http://www.w3.org/2005/sparql-results#'; + $this->nsp[$this->srx] = 'srx'; + $this->allowCDataNodes = 0; + } + + /* */ + + function done() { + } + + /* */ + + function getVariables() { + $r = array(); + foreach ($this->nodes as $node) { + if ($node['tag'] == $this->srx . 'variable') { + $r[] = $node['a']['name']; + } + } + return $r; + } + + function getRows() { + $r = array(); + $index = $this->getNodeIndex(); + foreach ($this->nodes as $node) { + if ($node['tag'] == $this->srx . 'result') { + $row = array(); + $row_id = $node['id']; + $bindings = isset($index[$row_id])? $index[$row_id] : array(); + foreach ($bindings as $binding) { + $row = array_merge($row, $this->getBinding($binding)); + } + if ($row) { + $r[] = $row; + } + } + } + return $r; + } + + function getBinding($node) { + $r = array(); + $index = $this->getNodeIndex(); + $var = $node['a']['name']; + $term = $index[$node['id']][0]; + $r[$var . ' type'] = preg_replace('/^uri$/', 'uri', substr($term['tag'], strlen($this->srx))); + $r[$var] = ($r[$var . ' type'] == 'bnode') ? '_:' . $term['cdata'] : $term['cdata']; + if (isset($term['a']['datatype'])) { + $r[$var . ' datatype'] = $term['a']['datatype']; + } + elseif (isset($term['a'][$this->xml . 'lang'])) { + $r[$var . ' lang'] = $term['a'][$this->xml . 'lang']; + } + return $r; + } + + function getBooleanInsertedDeleted() { + foreach ($this->nodes as $node) { + if ($node['tag'] == $this->srx . 'boolean') { + return ($node['cdata'] == 'true') ? array('boolean' => true) : array('boolean' => false); + } + elseif ($node['tag'] == $this->srx . 'inserted') { + return array('inserted' => $node['cdata']); + } + elseif ($node['tag'] == $this->srx . 'deleted') { + return array('deleted' => $node['cdata']); + } + elseif ($node['tag'] == $this->srx . 'results') { + return ''; + } + } + return ''; + } + + /* */ + + function getStructure() { + $r = array('variables' => $this->getVariables(), 'rows' => $this->getRows()); + /* boolean|inserted|deleted */ + if ($sub_r = $this->getBooleanInsertedDeleted()) { + foreach ($sub_r as $k => $v) { + $r[$k] = $v; + } + } + return $r; + } + + /* */ + + +}