The HDDM (Hierarchical Document Data Model) is an xml schema for expressing the meaning and relationships of streaming data from scientific instruments. The design is based on a hierarchical network where each node in the graph has a single parent node, multiple key-value attributes, and an arbitrary number of child nodes, similar to a the elements in an xml document. The model is adapted specifically to the case of repetitive data models such as appear in the data stream from a high-energy physics experiment. HDDM is designed to support the evolution of a data model over time, such that the same binary can read streams generated with previous versions of the model, and old binaries can read streams generated with more recent versions of the model, subject to very general constraints on model evolution. Conceptual representation of the data as an xml document is an essential design feature, but instantiation in memory does not involve the creation of explicit textual elements or construction of an explicit Document Object Model (DOM) for the data. The HDDM toolkit includes tools to express HDDM streams in xml, check their validity against the schema, and serialize/deserialize from container objects in memory. Originally written in c, HDDM provides application programmer interfaces for C++ and python as well. In addition to its own native data format, applications that use HDDM to access their data can also read/write standard HDF5 files and ROOT trees.