annotate 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
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2 /*
danielebarchiesi@4 3 homepage: http://arc.semsol.org/
danielebarchiesi@4 4 license: http://arc.semsol.org/license
danielebarchiesi@4 5
danielebarchiesi@4 6 class: ARC2 SPARQL Result XML Parser
danielebarchiesi@4 7 author: Benjamin Nowack
danielebarchiesi@4 8 version: 2010-11-16
danielebarchiesi@4 9 */
danielebarchiesi@4 10
danielebarchiesi@4 11 ARC2::inc('LegacyXMLParser');
danielebarchiesi@4 12
danielebarchiesi@4 13 class ARC2_SPARQLXMLResultParser extends ARC2_LegacyXMLParser {
danielebarchiesi@4 14
danielebarchiesi@4 15 function __construct($a, &$caller) {
danielebarchiesi@4 16 parent::__construct($a, $caller);
danielebarchiesi@4 17 }
danielebarchiesi@4 18
danielebarchiesi@4 19 function __init() {/* reader */
danielebarchiesi@4 20 parent::__init();
danielebarchiesi@4 21 $this->srx = 'http://www.w3.org/2005/sparql-results#';
danielebarchiesi@4 22 $this->nsp[$this->srx] = 'srx';
danielebarchiesi@4 23 $this->allowCDataNodes = 0;
danielebarchiesi@4 24 }
danielebarchiesi@4 25
danielebarchiesi@4 26 /* */
danielebarchiesi@4 27
danielebarchiesi@4 28 function done() {
danielebarchiesi@4 29 }
danielebarchiesi@4 30
danielebarchiesi@4 31 /* */
danielebarchiesi@4 32
danielebarchiesi@4 33 function getVariables() {
danielebarchiesi@4 34 $r = array();
danielebarchiesi@4 35 foreach ($this->nodes as $node) {
danielebarchiesi@4 36 if ($node['tag'] == $this->srx . 'variable') {
danielebarchiesi@4 37 $r[] = $node['a']['name'];
danielebarchiesi@4 38 }
danielebarchiesi@4 39 }
danielebarchiesi@4 40 return $r;
danielebarchiesi@4 41 }
danielebarchiesi@4 42
danielebarchiesi@4 43 function getRows() {
danielebarchiesi@4 44 $r = array();
danielebarchiesi@4 45 $index = $this->getNodeIndex();
danielebarchiesi@4 46 foreach ($this->nodes as $node) {
danielebarchiesi@4 47 if ($node['tag'] == $this->srx . 'result') {
danielebarchiesi@4 48 $row = array();
danielebarchiesi@4 49 $row_id = $node['id'];
danielebarchiesi@4 50 $bindings = isset($index[$row_id])? $index[$row_id] : array();
danielebarchiesi@4 51 foreach ($bindings as $binding) {
danielebarchiesi@4 52 $row = array_merge($row, $this->getBinding($binding));
danielebarchiesi@4 53 }
danielebarchiesi@4 54 if ($row) {
danielebarchiesi@4 55 $r[] = $row;
danielebarchiesi@4 56 }
danielebarchiesi@4 57 }
danielebarchiesi@4 58 }
danielebarchiesi@4 59 return $r;
danielebarchiesi@4 60 }
danielebarchiesi@4 61
danielebarchiesi@4 62 function getBinding($node) {
danielebarchiesi@4 63 $r = array();
danielebarchiesi@4 64 $index = $this->getNodeIndex();
danielebarchiesi@4 65 $var = $node['a']['name'];
danielebarchiesi@4 66 $term = $index[$node['id']][0];
danielebarchiesi@4 67 $r[$var . ' type'] = preg_replace('/^uri$/', 'uri', substr($term['tag'], strlen($this->srx)));
danielebarchiesi@4 68 $r[$var] = ($r[$var . ' type'] == 'bnode') ? '_:' . $term['cdata'] : $term['cdata'];
danielebarchiesi@4 69 if (isset($term['a']['datatype'])) {
danielebarchiesi@4 70 $r[$var . ' datatype'] = $term['a']['datatype'];
danielebarchiesi@4 71 }
danielebarchiesi@4 72 elseif (isset($term['a'][$this->xml . 'lang'])) {
danielebarchiesi@4 73 $r[$var . ' lang'] = $term['a'][$this->xml . 'lang'];
danielebarchiesi@4 74 }
danielebarchiesi@4 75 return $r;
danielebarchiesi@4 76 }
danielebarchiesi@4 77
danielebarchiesi@4 78 function getBooleanInsertedDeleted() {
danielebarchiesi@4 79 foreach ($this->nodes as $node) {
danielebarchiesi@4 80 if ($node['tag'] == $this->srx . 'boolean') {
danielebarchiesi@4 81 return ($node['cdata'] == 'true') ? array('boolean' => true) : array('boolean' => false);
danielebarchiesi@4 82 }
danielebarchiesi@4 83 elseif ($node['tag'] == $this->srx . 'inserted') {
danielebarchiesi@4 84 return array('inserted' => $node['cdata']);
danielebarchiesi@4 85 }
danielebarchiesi@4 86 elseif ($node['tag'] == $this->srx . 'deleted') {
danielebarchiesi@4 87 return array('deleted' => $node['cdata']);
danielebarchiesi@4 88 }
danielebarchiesi@4 89 elseif ($node['tag'] == $this->srx . 'results') {
danielebarchiesi@4 90 return '';
danielebarchiesi@4 91 }
danielebarchiesi@4 92 }
danielebarchiesi@4 93 return '';
danielebarchiesi@4 94 }
danielebarchiesi@4 95
danielebarchiesi@4 96 /* */
danielebarchiesi@4 97
danielebarchiesi@4 98 function getStructure() {
danielebarchiesi@4 99 $r = array('variables' => $this->getVariables(), 'rows' => $this->getRows());
danielebarchiesi@4 100 /* boolean|inserted|deleted */
danielebarchiesi@4 101 if ($sub_r = $this->getBooleanInsertedDeleted()) {
danielebarchiesi@4 102 foreach ($sub_r as $k => $v) {
danielebarchiesi@4 103 $r[$k] = $v;
danielebarchiesi@4 104 }
danielebarchiesi@4 105 }
danielebarchiesi@4 106 return $r;
danielebarchiesi@4 107 }
danielebarchiesi@4 108
danielebarchiesi@4 109 /* */
danielebarchiesi@4 110
danielebarchiesi@4 111
danielebarchiesi@4 112 }