36 #define PUGIXML_NO_XPATH
37 #define PUGIXML_HEADER_ONLY
38 #include <pugixml.hpp>
40 #include <libdap/Type.h>
74 pugi::xml_document d_xml_doc;
75 std::shared_ptr<http::url> d_dataset_elem_href;
77 void process_dataset(libdap::DMR *dmr,
const pugi::xml_node &xml_root);
78 pugi::xml_node get_variable_xml_node(libdap::BaseType *btp)
const;
82 static void process_compact(libdap::BaseType *btp,
const pugi::xml_node &compact);
84 static pugi::xml_node get_variable_xml_node_helper(
const pugi::xml_node &var_node, std::stack<libdap::BaseType*> &bt);
85 static void build_basetype_chain(libdap::BaseType *btp, std::stack<libdap::BaseType*> &bt);
87 static void process_group(libdap::DMR *dmr, libdap::D4Group *parent,
const pugi::xml_node &var_node);
88 static void process_dimension(libdap::D4Group *grp,
const pugi::xml_node &dimension_node);
89 static void process_variable(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Constructor *parent,
const pugi::xml_node &var_node);
90 static void process_dim(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Array *array,
const pugi::xml_node &dim_node);
91 static void process_map(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Array *array,
const pugi::xml_node &map_node);
92 static libdap::BaseType *build_variable(libdap::DMR *dmr, libdap::D4Group *group,
libdap::Type t,
const pugi::xml_node &var_node);
93 static libdap::BaseType *add_scalar_variable(libdap::DMR *dmr, libdap::D4Group *group, libdap::Constructor *parent,
libdap::Type t,
const pugi::xml_node &var_node);
94 static libdap::BaseType *add_array_variable(libdap::DMR *dmr, libdap::D4Group *grp, libdap::Constructor *parent,
libdap::Type t,
const pugi::xml_node &var_node);
95 static void process_attribute(libdap::D4Attributes *attributes,
const pugi::xml_node &dap_attr_node);
99 void load_attributes(libdap::BaseType *btp, pugi::xml_node var_node)
const;
101 friend class DMZTest;
108 explicit DMZ(
const std::string &file_name);
110 virtual ~
DMZ() =
default;
117 virtual void load_attributes(libdap::BaseType *btp);
118 virtual void load_attributes(libdap::Constructor *constructor);
119 virtual void load_attributes(libdap::D4Group *group);
127 std::string get_attribute_xml(std::string path);
128 std::string get_variable_xml(std::string path);
131 virtual void load_all_attributes(libdap::DMR *dmr);
138 virtual void load_global_attributes(libdap::DMR *dmr);
Interface to hide the DMR++ information storage format.
DMZ()=default
Build a DMZ without simultaneously parsing an XML document.
virtual void load_chunks(libdap::BaseType *btp)
Load the chunk information into a variable.
void parse_xml_doc(const std::string &filename)
Build the DOM tree for a DMR++ XML document.
virtual void build_thin_dmr(libdap::DMR *dmr)
populate the DMR instance as a 'thin DMR'
Size and offset information of data included in DMR++ files.
utility class for the HTTP catalog module