source: Dev/trunk/rdfapi/sparql/SparqlEngine/ResultRenderer/XML.php @ 12

Last change on this file since 12 was 12, checked in by basvannuland, 14 years ago

Added RAP RDF API
Added RDF reader writer for save and load survey

File size: 4.4 KB
Line 
1<?php
2require_once RDFAPI_INCLUDE_DIR . 'sparql/SparqlEngineDb/ResultRenderer.php';
3
4/**
5*   XML result renderer for SparqlEngine
6*
7*   @author Tobias Gauß <tobias.gauss@web.de>
8*   @author Christian Weiske <cweiske@cweiske.de>
9*   @license http://www.gnu.org/licenses/lgpl.html LGPL
10*
11*   @package sparql
12*/
13class SparqlEngine_ResultRenderer_XML implements SparqlEngine_ResultRenderer
14{
15    /**
16    *   Converts the database results into the output format
17    *   and returns the result.
18    *
19    *   @param array $arVartable    Variable table
20    *   @param Query $query         SPARQL query object
21    *   @param SparqlEngine $engine Sparql Engine to query the database
22    *   @return string XML result
23    */
24    public function convertFromResult($arVartable, Query $query, SparqlEngine $engine)
25    {
26        $this->query   = $query;
27        $this->engine  = $engine;
28        $this->dataset = $engine->getDataset();
29
30        if ($arVartable instanceof NamedGraphMem) {
31            return $arVartable->writeRdfToString();
32        }
33
34        $result = '<sparql xmlns="http://www.w3.org/2005/sparql-results#">';
35        $header = '<head>';
36
37        // build header
38        if (is_array($arVartable)) {
39            $vars = $this->query->getResultVars();
40            $header = '<head>';
41            foreach ($vars as $value) {
42                $header = $header
43                        . '<variable name="' . substr($value, 1) . '"/>';
44            }
45            $header = $header . '</head>';
46
47            // build results
48            $solm = $this->query->getSolutionModifier();
49            $sel  = $this->query->getResultForm();
50
51            $distinct = 'false';
52            if ($sel == 'select distinct') {
53                $distinct = 'true';
54            }
55
56            $ordered = 'false';
57            if ($solm['order by'] != 0) {
58                $ordered = 'true';
59            }
60
61            $results = '<results ordered="'.$ordered.'" distinct="'.$distinct.'">';
62            foreach ($arVartable as $value) {
63                $results = $results.'<result>';
64                foreach ($value as $varname => $varvalue) {
65                    $results = $results
66                            . $this->_getBindingString(
67                                substr($varname, 1),
68                                $varvalue
69                            );
70                }
71                $results = $results . '</result>';
72            }
73            $results = $results . '</results>';
74        } else {
75            $results = '</head><boolean>' . $vartable . '</boolean>';
76        }
77
78        $result = $result . $header . $results . '</sparql>';
79        $result = simplexml_load_string($result);
80        return $result->asXML();
81    }//public function convertFromResult($arVartable, Query $query, SparqlEngine $engine)
82
83
84
85    /**
86    * Helper Function for function buildXmlResult($vartable). Generates
87    * an xml string for a single variable an their corresponding value.
88    *
89    * @param  String  $varname The variables name
90    * @param  Node    $varvalue The value of the variable
91    * @return String  The xml string
92    */
93    protected function _getBindingString($varname, $varvalue)
94    {
95        $binding = '<binding name="'.$varname.'">';
96        $value = '<unbound/>';
97
98        if ($varvalue instanceof BlankNode) {
99            $value = '<bnode>' . $varvalue->getLabel() . '</bnode>';
100        } else if ($varvalue instanceof Resource) {
101            $value = '<uri>' . $varvalue->getUri() . '</uri>';
102        } else if ($varvalue instanceof Literal) {
103            $label = htmlspecialchars($varvalue->getLabel());
104            $value = '<literal>'.$label.'</literal>';
105            if ($varvalue->getDatatype() != null) {
106                $value = '<literal datatype="'
107                        . $varvalue->getDatatype() . '">'
108                        . $label
109                        . '</literal>';
110            }
111            if ($varvalue->getLanguage() != null) {
112                $value = '<literal xml:lang="'
113                        . $varvalue->getLanguage() . '">'
114                        . $label
115                        . '</literal>';
116            }
117        }
118        $binding = $binding . $value . '</binding>';
119
120        return $binding;
121    }//protected function _getBindingString($varname, $varvalue)
122
123}//class SparqlEngine_ResultRenderer_XML implements SparqlEngine_ResultRenderer
124
125?>
Note: See TracBrowser for help on using the repository browser.