1 | <?php
|
---|
2 | require_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 | */
|
---|
13 | class 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 | ?> |
---|