Fixes bug in SPARQL results XML serializer
//! Implementation of [SPARQL Query Results XML Format](http://www.w3.org/TR/rdf-sparql-XMLres/)
use model::*;
+use quick_xml::events::BytesDecl;
use quick_xml::events::BytesEnd;
use quick_xml::events::BytesStart;
use quick_xml::events::BytesText;
@@ -21,6 +22,7 @@ pub fn write_xml_results<W: Write>(results: QueryResult, sink: W) -> Result<W> {
let mut writer = Writer::new(sink);
match results {
QueryResult::Boolean(value) => {
+ writer.write_event(Event::Decl(BytesDecl::new(b"1.0", None, None)))?;
let mut sparql_open = BytesStart::borrowed_name(b"sparql");
sparql_open.push_attribute(("xmlns", "http://www.w3.org/2005/sparql-results#"));
writer.write_event(Event::Start(sparql_open))?;
@@ -37,6 +39,7 @@ pub fn write_xml_results<W: Write>(results: QueryResult, sink: W) -> Result<W> {
}
QueryResult::Bindings(bindings) => {
let (variables, results) = bindings.destruct();
+ writer.write_event(Event::Decl(BytesDecl::new(b"1.0", None, None)))?;
let mut sparql_open = BytesStart::borrowed_name(b"sparql");
sparql_open.push_attribute(("xmlns", "http://www.w3.org/2005/sparql-results#"));
writer.write_event(Event::Start(sparql_open))?;
@@ -51,9 +54,11 @@ pub fn write_xml_results<W: Write>(results: QueryResult, sink: W) -> Result<W> {
for result in results {
let result = result?;
writer.write_event(Event::Start(BytesStart::borrowed_name(b"result")))?;
- for (k, value) in result.into_iter().enumerate() {
+ for (i, value) in result.into_iter().enumerate() {
if let Some(term) = value {
- writer.write_event(Event::Start(BytesStart::borrowed_name(b"binding")))?;
+ let mut binding_tag = BytesStart::borrowed_name(b"binding");
+ binding_tag.push_attribute(("name", variables[i].name()?));
+ writer.write_event(Event::Start(binding_tag))?;
match term {
Term::NamedNode(uri) => {
writer
