source: pmb4.2/trunk/fuentes/pmb/classes/rdf/arc2/parsers/ARC2_SPARQLXMLResultParser.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

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