summaryrefslogtreecommitdiffstats
path: root/doc/html/H5.format.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/html/H5.format.html')
-rw-r--r--doc/html/H5.format.html5956
1 files changed, 0 insertions, 5956 deletions
diff --git a/doc/html/H5.format.html b/doc/html/H5.format.html
deleted file mode 100644
index 8d2ba87..0000000
--- a/doc/html/H5.format.html
+++ /dev/null
@@ -1,5956 +0,0 @@
-<html>
- <head>
- <title>
- HDF5 File Format Specification
- </title>
-
-<STYLE TYPE="text/css">
-
-P { text-indent: 2em}
-P.item { margin-left: 2em; text-indent: -2em}
-P.item2 { margin-left: 2em; text-indent: 2em}
-
-TABLE.format { border:solid; border-collapse:collapse; caption-side:top; text-align:center; width:80%;}
-TABLE.format TH { border:ridge; padding:4px; width:25%;}
-TABLE.format TD { border:ridge; padding:4px; }
-TABLE.format CAPTION { font-weight:bold; font-size:larger;}
-
-TABLE.note {border:none; text-align:right; width:80%;}
-
-TABLE.desc { border:solid; border-collapse:collapse; caption-size:top; text-align:left; width:80%;}
-TABLE.desc TR { vertical-align:top;}
-TABLE.desc TH { border-style:ridge; font-size:larger; padding:4px; text-decoration:underline;}
-TABLE.desc TD { border-style:ridge; padding:4px; }
-TABLE.desc CAPTION { font-weight:bold; font-size:larger;}
-
-TABLE.list { border:none; }
-TABLE.list TR { vertical-align:top;}
-TABLE.list TH { border:none; text-decoration:underline;}
-TABLE.list TD { border:none; }
-
-</STYLE>
-
-<!-- #BeginLibraryItem "/ed_libs/styles_Format.lbi" -->
-<!--
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- -->
-
-<link href="ed_styles/FormatElect.css" rel="stylesheet" type="text/css">
-<!-- #EndLibraryItem --></head>
- <body bgcolor="#FFFFFF">
-
-
-<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" --><hr>
-<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
- <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
- <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
- <!--
- <a href="Glossary.html">Glossary</a><br>
- -->
-</td>
-<td valign=top align=right>
- <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
- <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
- <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
-</td></tr>
-</table>
-</center>
-<hr>
-<!-- #EndLibraryItem --><center><h1>HDF5 File Format Specification</h1></center>
-
- <center>
- <table border=0 width=90%>
- <tr>
- <td valign=top>
- <ol type=I>
- <li><a href="#Intro">Introduction</a>
- <li><a href="#FileMetaData">Disk Format Level 0 - File Metadata</a>
- <font size=-2>
- <ol type=A>
- <li><a href="#SuperBlock">Disk Format Level 0A - File Signature and Super Block</a>
- <li><a href="#DriverInfo">Disk Format Level 0B - File Driver Info</a>
- </ol>
- </font>
- <li><a href="#FileInfra">Disk Format Level 1 - File Infrastructure</a>
- <font size=-2>
- <ol type=A>
- <li><a href="#Btrees">Disk Format Level 1A - B-link Trees and B-tree Nodes</a>
- <li><a href="#SymbolTable">Disk Format Level 1B - Group</a>
- <li><a href="#SymbolTableEntry">Disk Format Level 1C - Group Entry</a>
- <li><a href="#LocalHeap">Disk Format Level 1D - Local Heaps</a>
- <li><a href="#GlobalHeap">Disk Format Level 1E - Global Heap</a>
- <li><a href="#FreeSpaceIndex">Disk Format Level 1F - Free-space Index</a>
- </ol>
- </font>
- <li><a href="#DataObject">Disk Format Level 2 - Data Objects</a>
- <font size=-2>
- <ol type=A>
- <li><a href="#ObjectHeader">Disk Format Level 2a - Data Object Headers</a>
- <ol type=1>
- <li><a href="#NILMessage">Name: NIL</a> <!-- 0x0000 -->
- <li><a href="#SimpleDataSpace">Name: Simple Dataspace</a> <!-- 0x0001 -->
-<!-- <li><a href="#DataSpaceMessage">Name: Complex Dataspace</a> --> <!-- 0x0002 -->
- <li><a href="#ReservedMessage_0002">Name: Reserved - not assigned yet</a> <!-- 0x0002 -->
- <li><a href="#DataTypeMessage">Name: Datatype</a> <!-- 0x0003 -->
- <li><a href="#OldFillValueMessage">Name: Data Storage - Fill Value (Old)</a> <!-- 0x0004 -->
- <li><a href="#FillValueMessage">Name: Data Storage - Fill Value</a> <!-- 0x0005 -->
- </ol>
- </ol>
- </font>
- </ol>
- </td><td>&nbsp;&nbsp;</td><td valign=top>
- <ol type=I start=4>
-
- <li><a href="#DataObject">Disk Format Level 2 - Data Objects</a>
- <font size=-2><i>(Continued)</i>
- <ol type=A>
- <li><a href="#ObjectHeader">Disk Format Level 2a - Data Object Headers</a><i>(Continued)</i>
- <ol type=1 start=6>
-<!-- <li><a href="#CompactDataStorageMessage">Name: Data Storage - Compact</a> --> <!-- 0x0006 -->
- <li><a href="#ReservedMessage_0006">Name: Reserved - not assigned yet</a> <!-- 0x0006 -->
- <li><a href="#ExternalFileListMessage">Name: Data Storage - External Data Files</a> <!-- 0x0007 -->
- <li><a href="#LayoutMessage">Name: Data Storage - Layout</a> <!-- 0x0008 -->
- <li><a href="#ReservedMessage_0009">Name: Reserved - not assigned yet</a> <!-- 0x0009 -->
- <li><a href="#ReservedMessage_000A">Name: Reserved - not assigned yet</a> <!-- 0x000a -->
- <li><a href="#FilterMessage">Name: Data Storage - Filter Pipeline</a> <!-- 0x000b -->
- <li><a href="#AttributeMessage">Name: Attribute</a> <!-- 0x000c -->
- <li><a href="#CommentMessage">Name: Object Comment</a> <!-- 0x000d -->
- <li><a href="#OldModifiedMessage">Name: Object Modification Date and Time (Old)</a> <!-- 0x000e -->
- <li><a href="#SharedMessage">Name: Shared Object Message</a> <!-- 0x000f -->
- <li><a href="#ContinuationMessage">Name: Object Header Continuation</a> <!-- 0x0010 -->
- <li><a href="#SymbolTableMessage">Name: Group Message</a> <!-- 0x0011 -->
- <li><a href="#ModifiedMessage">Name: Object Modification Date and Time</a> <!-- 0x0012 -->
- </ol>
- <li><a href="#SharedObjectHeader">Disk Format: Level 2b - Shared Data Object Headers</a>
- <li><a href="#DataStorage">Disk Format: Level 2c - Data Object Data Storage</a>
- </ol>
- </font>
- <LI><A href="#Appendix">Appendix</A>
- </ol>
-</td></tr>
-</table>
-</center>
-
- <BR>
- <HR>
-
-
- <h2>Introduction</h2>
-
- <table align=right width=100>
- <tr><td>&nbsp;</td><td align=center>
- <hr>
- <img src="FF-IH_FileGroup.gif" alt="HDF5 Groups" hspace=15 vspace=15>
- </td><td>&nbsp;</td></tr>
- <tr><td>&nbsp;</td><td align=center>
- <strong>Figure 1:</strong> Relationships among the HDF5 root group, other groups, and objects
- <hr>
- </td><td>&nbsp;</td></tr>
-
- <tr><td>&nbsp;</td><td align=center>
- <img src="FF-IH_FileObject.gif" alt="HDF5 Objects" hspace=15 vspace=15>
- </td><td>&nbsp;</td></tr>
- <tr><td>&nbsp;</td><td align=center>
- <strong>Figure 2:</strong> HDF5 objects -- datasets, datatypes, or dataspaces
- <hr>
- </td><td>&nbsp;</td></tr>
- </table>
-
-
- <P>The format of an HDF5 file on disk encompasses several
- key ideas of the HDF4 and AIO file formats as well as
- addressing some shortcomings therein. The new format is
- more self-describing than the HDF4 format and is more
- uniformly applied to data objects in the file.
-
- <P>An HDF5 file appears to the user as a directed graph.
- The nodes of this graph are the higher-level HDF5 objects
- that are exposed by the HDF5 APIs:
-
- <ul>
- <li>Groups
- <li>Datasets
- <li>Named datatypes
- </ul>
-
- <P>At the lowest level, as information is actually written to the disk,
- an HDF5 file is made up of the following objects:
- <ul>
- <li>A super block
- <li>B-tree nodes (containing either symbol nodes or raw data chunks)
- <li>Object headers
- <li>A global heap
- <li>Local heaps
- <li>Free space
- </ul>
-
- <P>The HDF5 library uses these low-level objects to represent the
- higher-level objects that are then presented to the user or
- to applications through the APIs.
- For instance, a group is an object header that contains a message that
- points to a local heap and to a B-tree which points to symbol nodes.
- A dataset is an object header that contains messages that describe
- datatype, space, layout, filters, external files, fill value, etc
- with the layout message pointing to either a raw data chunk or to a
- B-tree that points to raw data chunks.
-
-
- <h3>This Document</h3>
-
- <p>This document describes the lower-level data objects;
- the higher-level objects and their properties are described
- in the <a href="H5.user.html"><cite>HDF5 User's Guide</cite></a>.
-
- <P>Three levels of information comprise the file format.
- Level 0 contains basic information for identifying and
- defining information about the file. Level 1 information contains
- the information about the pieces of a file shared by many objects
- in the file (such as a B-trees and heaps). Level 2 is the rest
- of the file and contains all of the data objects, with each object
- partitioned into header information, also known as
- <em>metadata</em>, and data.
-
- <p>The sizes of various fields in the following layout tables are
- determined by looking at the number of columns the field spans
- in the table. There are three exceptions: (1) The size may be
- overridden by specifying a size in parentheses, (2) the size of
- addresses is determined by the <em>Size of Offsets</em> field
- in the super block and is indicated in this document with a
- superscripted 'O', and (3) the size of length fields is determined
- by the <em>Size of Lengths</em> field in the super block and is
- indicated in this document with a superscripted 'L'.
-
- <P>Values for all fields in this document should be treated as unsigned
- integers, unless otherwise noted in the description of a field.
- Additionally, all metadata fields are stored in little-endian byte
- order.
- </P>
-
- <BR>
- <HR>
-
- <h2><a name="FileMetaData">
- Disk Format: Level 0 - File Metadata</a></h2>
-
- <H3><A name="SuperBlock">
- Disk Format: Level 0A - File Signature and Super Block</A></H3>
-
- <P>The super block may begin at certain predefined offsets within
- the HDF5 file, allowing a block of unspecified content for
- users to place additional information at the beginning (and
- end) of the HDF5 file without limiting the HDF5 library's
- ability to manage the objects within the file itself. This
- feature was designed to accommodate wrapping an HDF5 file in
- another file format or adding descriptive information to the
- file without requiring the modification of the actual file's
- information. The super block is located by searching for the
- HDF5 file signature at byte offset 0, byte offset 512 and at
- successive locations in the file, each a multiple of two of
- the previous location, i.e. 0, 512, 1024, 2048, etc.
-
- <P>The super block is composed of a file signature, followed by
- super block and group version numbers, information
- about the sizes of offset and length values used to describe
- items within the file, the size of each group page,
- and a group entry for the root object in the file.
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- HDF5 Super Block Layout
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td colspan=4><br>HDF5 File Signature (8 bytes)<br><br></td>
- </tr>
-
- <tr>
- <td>Version # of Super Block</td>
- <td>Version # of Global Free-space Storage</td>
- <td>Version # of Root Group Symbol Table Entry</td>
- <td>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td>Version # of Shared Header Message Format</td>
- <td>Size of Offsets</td>
- <td>Size of Lengths</td>
- <td>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td colspan=2>Group Leaf Node K</td>
- <td colspan=2>Group Internal Node K</td>
- </tr>
-
- <tr>
- <td colspan=4>File Consistency Flags</td>
- </tr>
-
- <tr>
- <td colspan=2 style="border:dotted;">Indexed Storage Internal Node K<sup>1</sup></td>
- <td colspan=2 style="border:dotted;">Reserved (zero)<sup>1</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Base Address<sup>O</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Address of Global Free-space Heap<sup>O</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>End of File Address<sup>O</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Driver Information Block Address<sup>O</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Root Group Symbol Table Entry</td>
- </tr>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'O' the above table are
- <br>
- of the size specified in "Size of Offsets.")
- </td></tr>
- <tr><td>
- (Items marked with an '1' the above table are
- <br>
- new in version 1 of the superblock)
- </td></tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>HDF5 File Signature</td>
- <td>
- <P>This field contains a constant value and can be used to
- quickly identify a file as being an HDF5 file. The
- constant value is designed to allow easy identification of
- an HDF5 file and to allow certain types of data corruption
- to be detected. The file signature of an HDF5 file always
- contains the following values:
- </P>
-
- <center>
- <table border align=center cellpadding=4>
- <tr align=center>
- <td align=right>Decimal:</td>
- <td width="8%">137</td>
- <td width="8%">72</td>
- <td width="8%">68</td>
- <td width="8%">70</td>
- <td width="8%">13</td>
- <td width="8%">10</td>
- <td width="8%">26</td>
- <td width="8%">10</td>
- </tr>
-
- <tr align=center>
- <td align=right>Hexadecimal:</td>
- <td>89</td>
- <td>48</td>
- <td>44</td>
- <td>46</td>
- <td>0d</td>
- <td>0a</td>
- <td>1a</td>
- <td>0a</td>
- </tr>
-
- <tr align=center>
- <td align=right>ASCII C Notation:</td>
- <td>\211</td>
- <td>H</td>
- <td>D</td>
- <td>F</td>
- <td>\r</td>
- <td>\n</td>
- <td>\032</td>
- <td>\n</td>
- </tr>
- </table>
- </center>
- <br>
-
- <P>This signature both identifies the file as an HDF5 file
- and provides for immediate detection of common
- file-transfer problems. The first two bytes distinguish
- HDF5 files on systems that expect the first two bytes to
- identify the file type uniquely. The first byte is
- chosen as a non-ASCII value to reduce the probability
- that a text file may be misrecognized as an HDF5 file;
- also, it catches bad file transfers that clear bit
- 7. Bytes two through four name the format. The CR-LF
- sequence catches bad file transfers that alter newline
- sequences. The control-Z character stops file display
- under MS-DOS. The final line feed checks for the inverse
- of the CR-LF translation problem. (This is a direct
- descendent of the <A href="http://www.libpng.org/pub/png/spec/PNG-Rationale.html#R.PNG-file-signature">PNG</A> file
- signature.)
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Version Number of the Super Block</td>
- <td>
- <P>This value is used to determine the format of the
- information in the super block. When the format of the
- information in the super block is changed, the version number
- is incremented to the next integer and can be used to
- determine how the information in the super block is
- formatted.
- </P>
-
- <P>Values of 0 and 1 are defined for this field.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Version Number of the File Free-space Information</td>
- <td>
- <P>This value is used to determine the format of the
- information in the File Free-space Information.
- </P>
- <P>The only value currently valid in this field is '0', which
- indicates that the free space index is formatted as described
- <A href="#FreeSpaceIndex">below</A>.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Version Number of the Root Group Symbol Table Entry</td>
- <td>
- <P>This value is used to determine the format of the
- information in the Root Group Symbol Table Entry. When the
- format of the information in that field is changed, the
- version number is incremented to the next integer and can be
- used to determine how the information in the field
- is formatted.
- </P>
- <P>The only value currently valid in this field is '0', which
- indicates that the root group symbol table entry is formatted as
- described <A href="#SymbolTableEntry">below</A>.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Version Number of the Shared Header Message Format</td>
- <td>
- <P>This value is used to determine the format of the
- information in a shared object header message, which is
- stored in the global small-data heap. Since the format
- of the shared header messages differs from the private
- header messages, a version number is used to identify changes
- in the format.
- </P>
- <P>The only value currently valid in this field is '0', which
- indicates that shared header messages are formatted as
- described <A href="#SharedObjectHeader">below</A>.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Size of Offsets</td>
- <td>
- <P>This value contains the number of bytes used to store
- addresses in the file. The values for the addresses of
- objects in the file are offsets relative to a base address,
- usually the address of the super block signature. This
- allows a wrapper to be added after the file is created
- without invalidating the internal offset locations.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Size of Lengths</td>
- <td>
- <P>This value contains the number of bytes used to store
- the size of an object.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Group Leaf Node K</td>
- <td>
- <P>Each leaf node of a group B-tree will have at
- least this many entries but not more than twice this
- many. If a group has a single leaf node then it
- may have fewer entries.
- </P>
- <P>This value must be greater than zero.
- </P>
- <P>See the <A href="#Btrees">description</A> of B-trees below.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Group Internal Node K</td>
- <td>
- <P>Each internal node of a group B-tree will have at
- least this many entries but not more than twice this
- many. If the group has only one internal
- node then it might have fewer entries.
- </P>
- <P>This value must be greater than zero.
- </P>
- <P>See the <A href="#Btrees">description</A> of B-trees below.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>File Consistency Flags</td>
- <td>
- <P>This value contains flags to indicate information
- about the consistency of the information contained
- within the file. Currently, the following bit flags are
- defined:
- <ul>
- <li>Bit 0 set indicates that the file is opened for
- write-access.
- <li>Bit 1 set indicates that the file has
- been verified for consistency and is guaranteed to be
- consistent with the format defined in this document.
- <li>Bits 2-31 are reserved for future use.
- </ul>
- Bit 0 should be
- set as the first action when a file is opened for write
- access and should be cleared only as the final action
- when closing a file. Bit 1 should be cleared during
- normal access to a file and only set after the file's
- consistency is guaranteed by the library or a
- consistency utility.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Indexed Storage Internal Node K</td>
- <td>
- <P>Each internal node of a indexed storage B-tree will have at
- least this many entries but not more than twice this
- many. If the group has only one internal
- node then it might have fewer entries.
- </P>
- <P>This value must be greater than zero.
- </P>
- <P>See the <A href="#Btrees">description</A> of B-trees below.
- </P>
-
- <P><EM>This field is present in version 1+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Base Address</td>
- <td>
- <P>This is the absolute file address of the first byte of
- the HDF5 data within the file. The library currently
- constrains this value to be the absolute file address
- of the super block itself when creating new files;
- future versions of the library may provide greater
- flexibility. When opening an existing file and this address does
- not match the offset of the superblock, the library assumes
- that the entire contents of the HDF5 file have been adjusted in
- the file and adjusts the base address and end of file address to
- reflect their new positions in the file. Unless otherwise noted,
- all other file addresses are relative to this base
- address.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Address of Global Free-space Index</td>
- <td>
- <P>Free-space management is not yet defined in the HDF5
- file format and is not handled by the library.
- Currently this field always contains the
- <A href="#UndefinedAddress">undefined address</A>.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>End of File Address</td>
- <td>
- <P>This is the absolute file address of the first byte past
- the end of all HDF5 data. It is used to determine whether a
- file has been accidently truncated and as an address where
- file data allocation can occur if space from the free list is
- not used.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Driver Information Block Address</td>
- <td>
- <P>This is the relative file address of the file driver
- information block which contains driver-specific
- information needed to reopen the file. If there is no
- driver information block then this entry should be the
- <A href="#UndefinedAddress">undefined address</A>.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Root Group Symbol Table Entry</td>
- <td>
- <P>This is the <A href="#SymbolTableEntry">symbol table entry</A>
- of the root group, which serves as the entry point into
- the group graph for the file.
- </P>
-
- <P><EM>This field is present in version 0+ of the superblock.</EM>
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- <H3><A name="DriverInfo">
- Disk Format: Level 0B - File Driver Info</A></H3>
-
- <p>The <em>file driver information block</em> is an optional region of the
- file which contains information needed by the file driver in
- order to reopen a file. The format of the file driver information
- block is:
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Driver Information Block
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td colspan=3>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td colspan=4>Driver Information Size (4 bytes)</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Driver Identification (8 bytes)<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4><br><br>Driver Information (<em>n</em> bytes)<br><br><br></td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>
- <P>The version number of the driver information block. The
- file format documented here is version zero.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Driver Information Size</td>
- <td>
- <P>The size in bytes of the Driver Information part of this
- structure.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Driver Identification</td>
- <td>
- <P>This is an eight-byte ASCII string without null
- termination which identifies the driver and version number
- of the Driver Information block. The predefined drivers
- supplied with the HDF5 library are identified by the
- letters <code>NCSA</code> followed by the first four characters of
- the driver name. If the Driver Information block is not
- the original version then the last letter(s) of the
- identification will be replaced by a version number in
- ASCII.
- </P>
- <P>
- For example, the various versions of the <em>family driver</em>
- will be identified by <code>NCSAfami</code>, <code>NCSAfam0</code>,
- <code>NCSAfam1</code>, etc.
- (<code>NCSAfami</code> is simply <code>NCSAfamily</code> truncated
- to eight characters. Subsequent identifiers will be created by
- substituting sequential numerical values for the final character,
- starting with zero.)
- </P>
- <P>
- Identification for user-defined drivers
- is arbitrary but should be unique and avoid the four character
- prefix "NCSA".
- </P>
- </td>
- </tr>
-
- <tr valign=top>
- <td>Driver Information</td>
- <td>Driver information is stored in a format defined by the
- file driver and encoded/decoded by the driver callbacks
- invoked from the <code>H5FD_sb_encode</code> and
- <code>H5FD_sb_decode</code> functions.</td>
- </tr>
- </table>
- </div>
-
- <BR>
- <HR>
-
- <h2><a name="FileInfra">
- Disk Format: Level 1 - File Infrastructure</a></h2>
- <h3><a name="Btrees">Disk Format: Level 1A - B-link Trees and B-tree Nodes</a></h3>
-
- <p>B-link trees allow flexible storage for objects which tend to grow
- in ways that cause the object to be stored discontiguously. B-trees
- are described in various algorithms books including "Introduction to
- Algorithms" by Thomas H. Cormen, Charles E. Leiserson, and Ronald
- L. Rivest. The B-link tree, in which the sibling nodes at a
- particular level in the tree are stored in a doubly-linked list,
- is described in the "Efficient Locking for Concurrent Operations
- on B-trees" paper by Phillip Lehman and S. Bing Yao as published
- in the <cite>ACM Transactions on Database Systems</cite>, Vol. 6,
- No. 4, December 1981.
-
- <p>The B-link trees implemented by the file format contain one more
- key than the number of children. In other words, each child
- pointer out of a B-tree node has a left key and a right key.
- The pointers out of internal nodes point to sub-trees while
- the pointers out of leaf nodes point to symbol nodes and
- raw data chunks.
- Aside from that difference, internal nodes and leaf nodes
- are identical.
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- B-tree Nodes
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
-
- <tr>
- <td colspan=4>Signature</td>
-
- <tr>
- <td>Node Type</td>
- <td>Node Level</td>
- <td colspan=2>Entries Used</td>
-
- <tr>
- <td colspan=4>Address of Left Sibling<sup>O</sup></td>
-
- <tr>
- <td colspan=4>Address of Right Sibling<sup>O</sup></td>
-
- <tr>
- <td colspan=4>Key 0 (variable size)</td>
-
- <tr>
- <td colspan=4>Address of Child 0<sup>O</sup></td>
-
- <tr>
- <td colspan=4>Key 1 (variable size)</td>
-
- <tr>
- <td colspan=4>Address of Child 1<sup>O</sup></td>
-
- <tr>
- <td colspan=4>...</td>
-
- <tr>
- <td colspan=4>Key 2<em>K</em> (variable size)</td>
-
- <tr>
- <td colspan=4>Address of Child 2<em>K</em><sup>O</sup></td>
-
- <tr>
- <td colspan=4>Key 2<em>K</em>+1 (variable size)</td>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'O' the above table are
- <br>
- of the size specified in "Size of Offsets.")
- </td></tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Signature</td>
- <td>
- <P>The ASCII character string "<code>TREE</code>" is
- used to indicate the
- beginning of a B-link tree node. This gives file
- consistency checking utilities a better chance of
- reconstructing a damaged file.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Node Type</td>
- <td>
- <P>Each B-link tree points to a particular type of data.
- This field indicates the type of data as well as
- implying the maximum degree <em>K</em> of the tree and
- the size of each Key field.
- </P>
-
- <table class=list>
- <tr>
- <th width="30%">Node Type</th>
- <th align=left>Description</th>
- </tr>
- <tr>
- <td align=center>0</td>
- <td>This tree points to group nodes.</td>
- </tr>
- <tr>
- <td align=center>1</td>
- <td>This tree points to raw data chunk nodes.</td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr>
- <td>Node Level</td>
- <td>
- <P>The node level indicates the level at which this node
- appears in the tree (leaf nodes are at level zero). Not
- only does the level indicate whether child pointers
- point to sub-trees or to data, but it can also be used
- to help file consistency checking utilities reconstruct
- damanged trees.
- </P>
- </td>
- </tr>
-
- <tr valign=top>
- <td>Entries Used</td>
- <td>
- <P>This determines the number of children to which this
- node points. All nodes of a particular type of tree
- have the same maximum degree, but most nodes will point
- to less than that number of children. The valid child
- pointers and keys appear at the beginning of the node
- and the unused pointers and keys appear at the end of
- the node. The unused pointers and keys have undefined
- values.
- </P>
- </td>
- </tr>
-
- <tr valign=top>
- <td>Address of Left Sibling</td>
- <td>
- <P>This is the relative file address of the left sibling of
- the current node. If the current
- node is the left-most node at this level then this field
- is the <A href="#UndefinedAddress">undefined address</A>.
- </P>
- </td>
- </tr>
-
- <tr valign=top>
- <td>Address of Right Sibling</td>
- <td>
- <P>This is the relative file address of the right sibling of
- the current node. If the current
- node is the right-most node at this level then this
- field is the <A href="#UndefinedAddress">undefined address</A>.
- </P>
- </td>
- </tr>
-
- <tr valign=top>
- <td>Keys and Child Pointers</td>
- <td>
- <P>Each tree has 2<em>K</em>+1 keys with 2<em>K</em>
- child pointers interleaved between the keys. The number
- of keys and child pointers actually containing valid
- values is determined by the node's <em>Entries Used</em> field.
- If that field is <em>N</em> then the B-link tree contains
- <em>N</em> child pointers and <em>N</em>+1 keys.
- </P>
- </td>
- </tr>
-
- <tr valign=top>
- <td>Key</td>
- <td>
- <P>The format and size of the key values is determined by
- the type of data to which this tree points. The keys are
- ordered and are boundaries for the contents of the child
- pointer; that is, the key values represented by child
- <em>N</em> fall between Key <em>N</em> and Key
- <em>N</em>+1. Whether the interval is open or closed on
- each end is determined by the type of data to which the
- tree points.
- </P>
-
- <P>
- The format of the key depends on the node type.
- For nodes of node type 0 (group nodes), the key is formatted as
- follows:
- <center>
- <table class=list>
- <tr>
- <td width=30%>A single field of <i>Size of Lengths</i>
- bytes:</td>
- <td>Indicates the byte offset into the local heap
- for the first object name in the subtree which
- that key describes.
- </td>
- </tr>
- </table>
- </center>
- </P>
-
- <P>
- For nodes of node type 1 (chunked raw data nodes), the key is
- formatted as follows:
- <center>
- <table class=list>
- <tr>
- <td width=30%>Bytes 1-4:</td>
- <td>Size of chunk in bytes.</td>
- </tr>
- <tr>
- <td>Bytes 4-8:</td>
- <td>Filter mask, a 32-bit bitfield indicating which
- filters have been skipped for this chunk. Each filter
- has an index number in the pipeline (starting at 0, with
- the first filter to apply) and if that filter is skipped,
- the bit corresponding to it's index is set.</td>
- </tr>
- <tr>
- <td><em>N</em> 64-bit fields:</td>
- <td>A 64-bit index indicating the offset of the
- chunk within the dataset where <i>N</i> is the number
- of dimensions of the dataset. For example, if
- a chunk in a 3-dimensional dataset begins at the
- position <code>[5,5,5]</code>, there will be three
- such 64-bit indices, each with the value of
- <code>5</code>.</td>
- </tr>
- </table>
- </center>
- </P>
- </td>
- </tr>
-
- <tr valign=top>
- <td>Child Pointer</td>
- <td>
- <P>The tree node contains file addresses of subtrees or
- data depending on the node level. Nodes at Level 0 point
- to data addresses, either raw data chunk or group nodes.
- Nodes at non-zero levels point to other nodes of the
- same B-tree.
- </P>
- <P>For raw data chunk nodes, the child pointer is the address
- of a single raw data chunk. For group nodes, the child pointer
- points to a <A href="#SymbolTable">symbol table</A>, which contains
- information for multiple symbol table entries.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- <p>
- Conceptually, each B-tree node looks like this:
- <center>
- <table>
- <tr valign=top align=center>
- <td>key[0]</td><td>&nbsp;</td>
- <td>child[0]</td><td>&nbsp;</td>
- <td>key[1]</td><td>&nbsp;</td>
- <td>child[1]</td><td>&nbsp;</td>
- <td>key[2]</td><td>&nbsp;</td>
- <td>...</td><td>&nbsp;</td>
- <td>...</td><td>&nbsp;</td>
- <td>key[<i>N</i>-1]</td><td>&nbsp;</td>
- <td>child[<i>N</i>-1]</td><td>&nbsp;</td>
- <td>key[<i>N</i>]</td>
- </tr>
- </table>
- </center>
- <br>
-
- where child[<i>i</i>] is a pointer to a sub-tree (at a level
- above Level 0) or to data (at Level 0).
- Each key[<i>i</i>] describes an <i>item</i> stored by the B-tree
- (a chunk or an object of a group node). The range of values
- represented by child[<i>i</i>] is indicated by key[<i>i</i>]
- and key[<i>i</i>+1].
-
-
- <p>The following question must next be answered:
- "Is the value described by key[<i>i</i>] contained in
- child[<i>i</i>-1] or in child[<i>i</i>]?"
- The answer depends on the type of tree.
- In trees for groups (node type 0) the object described by
- key[<i>i</i>] is the greatest object contained in
- child[<i>i</i>-1] while in chunk trees (node type 1) the
- chunk described by key[<i>i</i>] is the least chunk in
- child[<i>i</i>].
-
- <p>That means that key[0] for group trees is sometimes unused;
- it points to offset zero in the heap, which is always the
- empty string and compares as "less-than" any valid object name.
-
- <p>And key[<i>N</i>] for chunk trees is sometimes unused;
- it contains a chunk offset which compares as "greater-than"
- any other chunk offset and has a chunk byte size of zero
- to indicate that it is not actually allocated.
-
-
- <h3><a name="SymbolTable">Disk Format: Level 1B - Group and Symbol Nodes</a></h3>
-
- <p>A group is an object internal to the file that allows
- arbitrary nesting of objects within the file (including other groups).
- A group maps a set of names in the group to a set of relative
- file addresses where objects with those names are located in
- the file. Certain metadata for an object to which the group points
- can be cached in the group's symbol table in addition to the
- object's header.
-
- <p>An HDF5 object name space can be stored hierarchically by
- partitioning the name into components and storing each
- component in a group. The group entry for a
- non-ultimate component points to the group containing
- the next component. The group entry for the last
- component points to the object being named.
-
- <p>A group is a collection of group nodes pointed
- to by a B-link tree. Each group node contains entries
- for one or more symbols. If an attempt is made to add a
- symbol to an already full group node containing
- 2<em>K</em> entries, then the node is split and one node
- contains <em>K</em> symbols and the other contains
- <em>K</em>+1 symbols.
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Group Node (A Leaf of a B-tree)
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
-
- <tr>
- <td colspan=4>Signature</td>
-
- <tr>
- <td>Version Number</td>
- <td>Reserved (0)</td>
- <td colspan=2>Number of Symbols</td>
-
- <tr>
- <td colspan=4><br><br>Group Entries<br><br><br></td>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Signature</td>
- <td>
- <P>The ASCII character string "<code>SNOD</code>" is
- used to indicate the
- beginning of a group node. This gives file
- consistency checking utilities a better chance of
- reconstructing a damaged file.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Version Number</td>
- <td>
- <P>The version number for the group node. This
- document describes version 1. (There is no version '0'
- of the group node)
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Number of Symbols</td>
- <td>
- <P>Although all group nodes have the same length,
- most contain fewer than the maximum possible number of
- symbol entries. This field indicates how many entries
- contain valid data. The valid entries are packed at the
- beginning of the group node while the remaining
- entries contain undefined values.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Group Entries</td>
- <td>
- <P>Each symbol has an entry in the group node.
- The format of the entry is described below.
- There are 2<EM>K</EM> entries in each group node, where
- <EM>K</EM> is the "Group Leaf Node K" value from the
- <A href="#SuperBlock">super block</A>.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- <h3><a name="SymbolTableEntry">
- Disk Format: Level 1C - Group Entry </a></h3>
-
- <p>Each group entry in a group node is designed
- to allow for very fast browsing of stored objects.
- Toward that design goal, the group entries
- include space for caching certain constant metadata from the
- object header.
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Group Entry
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td colspan=4>Name Offset<sup>O</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Object Header Address<sup>O</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Cache Type</td>
- </tr>
-
- <tr>
- <td colspan=4>Reserved</td>
- </tr>
-
- <tr>
- <td colspan=4><br><br>Scratch-pad Space (16 bytes)<br><br><br></td>
- </tr>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'O' the above table are
- <br>
- of the size specified in "Size of Offsets.")
- </td></tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Name Offset</td>
- <td>
- <P>This is the byte offset into the group local
- heap for the name of the object. The name is null
- terminated.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Object Header Address</td>
- <td>
- <P>Every object has an object header which serves as a
- permanent location for the object's metadata. In addition
- to appearing in the object header, some metadata can be
- cached in the scratch-pad space.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Cache Type</td>
- <td>
- <P>The cache type is determined from the object header.
- It also determines the format for the scratch-pad space:
- <br>
- <table class=list>
- <tr align=left>
- <th>Type:</th>
- <th>Description:</th>
- </tr>
- <tr>
- <td width="10%" align=center>0</td>
- <td>No data is cached by the group entry. This
- is guaranteed to be the case when an object header
- has a link count greater than one.
- </td>
- </tr>
- <tr>
- <td align=center>1</td>
- <td>Object header metadata is cached in the group
- entry. This implies that the group
- entry refers to another group.
- </td>
- </tr>
- <tr>
- <td align=center>2</td>
- <td>The entry is a symbolic link. The first four bytes
- of the scratch-pad space are the offset into the local
- heap for the link value. The object header address
- will be undefined.
- </td>
- </tr>
- <tr>
- <td align=center><em>N</em></td>
- <td>Other cache values can be defined later and
- libraries that do not understand the new values will
- still work properly.
- </td>
- </tr>
- </table>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Reserved</td>
- <td>
- <P>These four bytes are present so that the scratch-pad
- space is aligned on an eight-byte boundary. They are
- always set to zero.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Scratch-pad Space</td>
- <td>
- <P>This space is used for different purposes, depending
- on the value of the Cache Type field. Any metadata
- about a dataset object represented in the scratch-pad
- space is duplicated in the object header for that
- dataset. This metadata can include the datatype
- and the size of the dataspace for a dataset whose datatype
- is atomic and whose dataspace is fixed and less than
- four dimensions.
- </P>
- <P>
- Furthermore, no data is cached in the group
- entry scratch-pad space if the object header for
- the group entry has a link count greater than
- one.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- <h4>Format of the Scratch-pad Space</h4>
-
- <p>The group entry scratch-pad space is formatted
- according to the value in the Cache Type field.
-
- <p>If the Cache Type field contains the value zero
- <code>(0)</code> then no information is
- stored in the scratch-pad space.
-
- <p>If the Cache Type field contains the value one
- <code>(1)</code>, then the scratch-pad space
- contains cached metadata for another object header
- in the following format:
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Object Header Scratch-pad Format
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
-
- <tr>
- <td colspan=4>Address of B-tree<sup>O</sup></td>
-
- <tr>
- <td colspan=4>Address of Name Heap<sup>O</sup></td>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'O' the above table are
- <br>
- of the size specified in "Size of Offsets.")
- </td></tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Address of B-tree</td>
- <td>
- <P>This is the file address for the root of the
- group's B-tree.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Address of Name Heap</td>
- <td>
- <P>This is the file address for the group's local
- heap, in which are stored the group's symbol names.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
-
- <P>If the Cache Type field contains the value two
- <code>(2)</code>, then the scratch-pad space
- contains cached metadata for another symbolic link
- in the following format:
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Symbolic Link Scratch-pad Format
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td colspan=4>Offset to Link Value</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Offset to Link Value</td>
- <td>
- <P>The value of a symbolic link (that is, the name of the
- thing to which it points) is stored in the local heap.
- This field is the 4-byte offset into the local heap for
- the start of the link value, which is null terminated.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- <h3><a name="LocalHeap">Disk Format: Level 1D - Local Heaps</a></h3>
-
- <P>A heap is a collection of small heap objects. Objects can be
- inserted and removed from the heap at any time.
- The address of a heap does not change once the heap is created.
- References to objects are stored in the group table;
- the names of those objects are stored in the local heap.
- </P>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Local Heap
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td colspan=4>Signature</td>
- </tr>
-
- <tr>
- <td>Version</td>
- <td colspan=3>Reserved (zero)</td>
- </td>
-
- <tr>
- <td colspan=4>Data Segment Size<sup>L</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Offset to Head of Free-list<sup>L</sup></td>
- </tr>
-
- <tr>
- <td colspan=4>Address of Data Segment<sup>O</sup></td>
- </tr>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'L' the above table are
- <br>
- of the size specified in "Size of Lengths.")
- </td></tr>
- <tr><td>
- (Items marked with an 'O' the above table are
- <br>
- of the size specified in "Size of Offsets.")
- </td></tr>
- </table>
- </div>
-
- <p>
- <center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Signature</td>
- <td>
- <P>The ASCII character string "<code>HEAP</code>"
- is used to indicate the
- beginning of a heap. This gives file consistency
- checking utilities a better chance of reconstructing a
- damaged file.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>
- <P>Each local heap has its own version number so that new
- heaps can be added to old files. This document
- describes version zero (0) of the local heap.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Data Segment Size</td>
- <td>
- <P>The total amount of disk memory allocated for the heap
- data. This may be larger than the amount of space
- required by the objects stored in the heap. The extra
- unused space in the heap holds a linked list of free blocks.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Offset to Head of Free-list</td>
- <td>
- <P>This is the offset within the heap data segment of the
- first free block (or the
- <A href="#UndefinedAddress">undefined address</A> if there is no
- free block). The free block contains "Size of Lengths" bytes that
- are the offset of the next free block (or the
- value '1' if this is the
- last free block) followed by "Size of Lengths" bytes that store
- the size of this free block. The size of the free block includes
- the space used to store the offset of the next free block and
- the of the current block, making the minimum size of a free block
- 2 * "Size of Lengths".
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Address of Data Segment</td>
- <td>
- <P>The data segment originally starts immediately after
- the heap header, but if the data segment must grow as a
- result of adding more objects, then the data segment may
- be relocated, in its entirety, to another part of the
- file.
- </P>
- </td>
- </tr>
- </table>
- </center>
-
- <p>Objects within the heap should be aligned on an 8-byte boundary.
-
- <h3><a name="GlobalHeap">Disk Format: Level 1E - Global Heap</a></h3>
-
- <P>Each HDF5 file has a global heap which stores various types of
- information which is typically shared between datasets. The
- global heap was designed to satisfy these goals:
-
- <ol type="A">
- <li>Repeated access to a heap object must be efficient without
- resulting in repeated file I/O requests. Since global heap
- objects will typically be shared among several datasets, it is
- probable that the object will be accessed repeatedly.
- <li>Collections of related global heap objects should result in
- fewer and larger I/O requests. For instance, a dataset of
- object references will have a global heap object for each
- reference. Reading the entire set of object references
- should result in a few large I/O requests instead of one small
- I/O request for each reference.
- <li>It should be possible to remove objects from the global heap
- and the resulting file hole should be eligible to be reclaimed
- for other uses.
- </ol>
- </P>
-
- <P>The implementation of the heap makes use of the memory
- management already available at the file level and combines that
- with a new top-level object called a <em>collection</em> to
- achieve Goal B. The global heap is the set of all collections.
- Each global heap object belongs to exactly one collection and
- each collection contains one or more global heap objects. For
- the purposes of disk I/O and caching, a collection is treated as
- an atomic object.
- </P>
-
- <P>The HDF5 library creates global heap collections as needed, so there may
- be multiple collections throughout the file. The set of all of them is
- abstractly called the "global heap", although they don't actually link
- to each other, and there is no global place in the file where you can
- discover all of the collections. The collections are found simply by
- finding a reference to one through another object in the file (eg.
- variable-length datatype elements, etc).
- </P>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- A Global Heap Collection
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td colspan=4>Signature</td>
- </tr>
-
- <tr>
- <td>Version</td>
- <td colspan=3>Reserved (zero)</td>
- </td>
-
- <tr>
- <td colspan=4>Collection Size<sup>L</sup></td>
- </tr>
-
- <tr>
- <td colspan=4><br>Global Heap Object 1<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4><br>Global Heap Object 2<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4><br>...<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4><br>Global Heap Object <em>N</em><br><br></td>
- </tr>
-
- <tr>
- <td colspan=4><br>Global Heap Object 0 (free space)<br><br></td>
- </tr>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'L' the above table are
- <br>
- of the size specified in "Size of Lengths.")
- </td></tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Signature</td>
- <td>
- <P>The ASCII character string "<code>GCOL</code>"
- is used to indicate the
- beginning of a collection. This gives file consistency
- checking utilities a better chance of reconstructing a
- damaged file.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>
- <P>Each collection has its own version number so that new
- collections can be added to old files. This document
- describes version one (1) of the collections (there is no
- version zero (0)).
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Collection Size</td>
- <td>
- <P>This is the size in bytes of the entire collection
- including this field. The default (and minimum)
- collection size is 4096 bytes which is a typical file
- system block size. This allows for 127 16-byte heap
- objects plus their overhead (the collection header of 16 bytes
- and the 16 bytes of information about each heap object).
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Global Heap Object 1 through <em>N</em></td>
- <td>
- <P>The objects are stored in any order with no
- intervening unused space.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Global Heap Object 0</td>
- <td>
- <P>Global Heap Object 0 (zero), when present, represents the free
- space in the collection. Free space always appears at the end of
- the collection. If the free space is too small to store the header
- for Object 0 (described below) then the header is implied and the
- collection contains no free space.
- </P>
- </td>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Global Heap Object
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td colspan=2>Heap Object ID</td>
- <td colspan=2>Reference Count</td>
- </tr>
-
- <tr>
- <td colspan=4>Reserved</td>
- </tr>
-
- <tr>
- <td colspan=4>Object Size<sup>L</sup></td>
- </tr>
-
- <tr>
- <td colspan=4><br>Object Data<br><br></td>
- </tr>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'L' the above table are
- <br>
- of the size specified in "Size of Lengths.")
- </td></tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Heap Object ID</td>
- <td>
- <P>Each object has a unique identification number within a
- collection. The identification numbers are chosen so that
- new objects have the smallest value possible with the
- exception that the identifier <code>0</code> always refers to the
- object which represents all free space within the
- collection.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Reference Count</td>
- <td>
- <P>All heap objects have a reference count field. An
- object which is referenced from some other part of the
- file will have a positive reference count. The reference
- count for Object 0 is always zero.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Reserved</td>
- <td>
- <P>Zero padding to align next field on an 8-byte boundary.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Object Size</td>
- <td>
- <P>This is the size of the object data stored for the object.
- The actual storage space allocated for the object data is rounded
- up to a multiple of eight.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Object Data</td>
- <td>
- <P>The object data is treated as a one-dimensional array
- of bytes to be interpreted by the caller.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- <h3><a name="FreeSpaceIndex">Disk Format: Level 1F - Free-space Index</a></h3>
-
- <p>The free-space index is a collection of blocks of data,
- dispersed throughout the file, which are currently not used by
- any file objects.
-
- <p>The super block contains a pointer to root of the free-space description;
- that pointer is currently required to be the
- <A href="#UndefinedAddress">undefined address</A>.
-
- <p>The format of the free-space index is not defined at this time.
-
-<!--
- <p>The Free-space Index is a collection of blocks of data,
- dispersed throughout the file, which are currently not used by
- any file objects. The blocks of data are indexed by a B-tree of
- their length within the file.
-
-
- <p>Each B-tree page is composed of the following entries and
- B-tree management information, organized as follows:
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=bottom>
- <B>HDF5 Free-space Heap Page</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
-
- <tr align=center>
- <td colspan=4>Signature</td>
- <tr align=center>
- <td colspan=4>B-tree Left-link Offset</td>
- <tr align=center>
- <td colspan=4><br>Length of Free-block #1<br> <br></td>
- <tr align=center>
- <td colspan=4><br>Offset of Free-block #1<br> <br></td>
- <tr align=center>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr align=center>
- <td colspan=4><br>Length of Free-block #n<br> <br></td>
- <tr align=center>
- <td colspan=4><br>Offset of Free-block #n<br> <br></td>
- <tr align=center>
- <td colspan=4>"High" Offset</td>
- <tr align=center>
- <td colspan=4>Right-link Offset</td>
- </table>
- </center>
-
- <p>
- <dl>
- <dt> The elements of the free-space heap page are described below:
- <dd>
- <dl>
- <dt>Signature: (4 bytes)
- <dd>The ASCII character string <code>FREE</code>
- is used to indicate the
- beginning of a free-space heap B-tree page. This gives
- file consistency checking utilities a better chance of
- reconstructing a damaged file.
-
- <dt>B-tree Left-link Offset: (&lt;offset&gt; bytes)
- <dd>This value is used to indicate the offset of all offsets
- in the B-link-tree which are smaller than the value of the
- offset in entry #1. This value is also used to indicate a
- leaf node in the B-link-tree by being set to all ones.
-
- <dt>Length of Free-block #n: (&lt;length&gt; bytes)
- <dd>This value indicates the length of an unused block in
- the file.
-
- <dt>Offset of Free-block #n: (&lt;offset&gt; bytes)
- <dd>This value indicates the offset in the file of an
- unused block in the file.
-
- <dt>"High" Offset: (4-bytes)
- <dd>This offset is used as the upper bound on offsets
- contained within a page when the page has been split.
-
- <dt>Right-link Offset: (&lt;offset&gt; bytes)
- <dd>This value is used to indicate the offset of the next
- child to the right of the parent of this group
- page. When there is no node to the right, this value is
- all zeros.
- </dl>
- </dl>
-
- <p>The algorithms for searching and inserting objects in the
- B-tree pages are described fully in the Lehman and Yao paper,
- which should be read to provide a full description of the
- B-tree's usage.
--->
-
- <BR>
- <HR>
-
- <h2><a name="DataObject">Disk Format: Level 2 - Data Objects </a></h2>
-
- <P>Data objects contain the real information in the file. These
- objects compose the scientific data and other information which
- are generally thought of as "data" by the end-user. All the
- other information in the file is provided as a framework for
- these data objects.
- </P>
-
- <P>A data object is composed of header information and data
- information. The header information contains the information
- needed to interpret the data information for the data object as
- well as additional "metadata" or pointers to additional
- "metadata" used to describe or annotate each data object.
- </P>
-
- <h3><a name="ObjectHeader">
- Disk Format: Level 2A - Data Object Headers</a></h3>
-
- <P>The header information of an object is designed to encompass
- all the information about an object, except for the data itself.
- This information includes
- the dataspace, datatype, information about how the data
- is stored on disk (in external files, compressed, broken up in
- blocks, etc.), as well as other information used by the library
- to speed up access to the data objects or maintain a file's
- integrity. Information stored by user applications as attributes
- is also stored in the object's header. The header of each object is
- not necessarily located immediately prior to the object's data in the
- file and in fact may be located in any position in the file. The order
- of the messages in an object header is not significant.
- </P>
-
- <P>Header messages are aligned on 8-byte boundaries.
- </P>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Object Headers
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>Reserved (zero)</td>
- <td colspan=2>Number of Header Messages</td>
- </tr>
-
- <tr>
- <td colspan=4>Object Reference Count</td>
- </tr>
-
- <tr>
- <td colspan=4>Object Header Size</td>
- </tr>
-
- <tr>
- <td colspan=2>Header Message Type #1</td>
- <td colspan=2>Size of Header Message Data #1</td>
- </tr>
-
- <tr>
- <td>Header Message #1 Flags</td>
- <td colspan=3>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Header Message Data #1<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4>.<br>.<br>.<br></td>
- </tr>
-
- <tr>
- <td colspan=2>Header Message Type #n</td>
- <td colspan=2>Size of Header Message Data #n</td>
- </tr>
-
- <tr>
- <td>Header Message #n Flags</td>
- <td colspan=3>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Header Message Data #n<br><br></td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>
- <P>This value is used to determine the format of the
- information in the object header. When the format of the
- information in the object header is changed, the version number
- is incremented and can be used to determine how the
- information in the object header is formatted. This
- document describes version one (1) (there was no version
- zero (0)).
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Number of Header Messages</td>
- <td>
- <P>This value determines the number of messages listed in
- object headers for this object. This value includes the messages
- in continuation messages for this object.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Object Reference Count</td>
- <td>
- <P>This value specifies the number of "hard links" to this object
- within the current file. References to the object from external
- files, "soft links" in this file and object references in this
- file are not tracked.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Object Header Size</td>
- <td>
- <P>This value specifies the number of bytes of header message data
- following this length field that contain object header messages
- for this object header. This value does not include the size of
- object header continuation blocks for this object elsewhere in the
- file.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Header Message Type</td>
- <td>
- <P>This value specifies the type of information included in the
- following header message data. The header message types for the
- pre-defined header messages are included in sections below.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Size of Header Message Data</td>
- <td>
- <P>This value specifies the number of bytes of header
- message data following the header message type and length
- information for the current message. The size includes
- padding bytes to make the message a multiple of eight
- bytes.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Header Message Flags</td>
- <td>
- <P>This is a bit field with the following definition:
- <table class=list>
- <tr>
- <th width="30%">Bit</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>If set, the message data is constant. This is used
- for messages like the datatype message of a dataset.
- </td>
- </tr>
- <tr>
- <td align=center><code>1</code></td>
- <td>If set, the message is stored in the global heap.
- The Header Message Data field contains a Shared Object
- message and the Size of Header Message Data field
- contains the size of that Shared Object message.
- </td>
- </tr>
- <tr>
- <td align=center><code>2-7</code></td>
- <td>Reserved</td>
- </tr>
- </table>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Header Message Data</td>
- <td>
- <P>The format and length of this field is determined by the
- header message type and size respectively. Some header
- message types do not require any data and this information
- can be eliminated by setting the length of the message to
- zero. The data is padded with enough zeros to make the
- size a multiple of eight.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- <P>The header message types and the message data associated with
- them compose the critical "metadata" about each object. Some
- header messages are required for each object while others are
- optional. Some optional header messages may also be repeated
- several times in the header itself, the requirements and number
- of times allowed in the header will be noted in each header
- message description below.
- </P>
-
- <P>The following is a list of currently defined header messages:
- </P>
-
- <hr>
- <h4><a name="NILMessage">Name: NIL</a></h4>
-
- <P class=item><B>Header Message Type: </B>0x0000
- </P>
- <P class=item><B>Length:</B> varies
- </P>
- <P class=item><B>Status:</B> Optional, may be repeated.
- </P>
- <P class=item><B>Purpose and Description:</B> The NIL message is used to indicate a
- message which is to be ignored when reading the header messages for a
- data object. [Possibly one which has been deleted for some reason.]
- </P>
- <P class=item><B>Format of Data:</B> Unspecified.
- </P>
-
- <hr>
- <h4><a name="SimpleDataSpace">Name: Simple Dataspace</a></h4>
-
- <P class=item><B>Header Message Type: </B>0x0001
- </P>
- <P class=item><B>Length:</B> Varies according to the number of dimensions,
- as described in the following table.
- </P>
- <P class=item><B>Status:</B> Required for dataset objects, may not be
- repeated.
- </P>
- <P class=item><B>Description:</B> The simple dataspace message describes the
- number of dimensions (i.e. "rank") and size of each dimension that the
- data object has. This message is only used for datasets which have a
- simple, rectilinear grid layout; datasets requiring a more complex
- layout (irregularly structured or unstructured grids, etc.) must use
- the <em>Complex Dataspace</em> message for expressing the space the
- dataset inhabits. <i>(Note: The <em>Complex Dataspace</em>
- functionality is not yet implemented and it is not described in this
- document.)</i>
- </P>
-
- <P class=item><B>Format of Data:</B>
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Simple Dataspace Message
- </caption>
-
- <tr>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- <th>byte</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>Dimensionality</td>
- <td>Flags</td>
- <td>Reserved</td>
- </tr>
-
- <tr>
- <td colspan=4>Reserved</td>
- </tr>
-
- <tr>
- <td colspan=4>Dimension #1 Size<sup>L</sup></td>
- <tr>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr>
- <td colspan=4>Dimension #n Size<sup>L</sup></td>
- <tr>
- <td colspan=4>Dimension #1 Maximum Size<sup>L</sup></td>
- <tr>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr>
- <td colspan=4>Dimension #n Maximum Size<sup>L</sup></td>
- <tr>
- <td colspan=4>Permutation Index #1<sup>L</sup></td>
- <tr>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr>
- <td colspan=4>Permutation Index #n<sup>L</sup></td>
- </table>
-
- <table class=note>
- <tr><td>
- (Items marked with an 'L' the above table are
- <br>
- of the size specified in "Size of Lengths.")
- </td></tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>
- <P>This value is used to determine the format of the
- Simple Dataspace Message. When the format of the
- information in the message is changed, the version number
- is incremented and can be used to determine how the
- information in the object header is formatted. This
- document describes version one (1) (there was no version
- zero (0)).
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Dimensionality</td>
- <td>
- <P>This value is the number of dimensions that the data
- object has.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Flags</td>
- <td>
- <P>This field is used to store flags to indicate the
- presence of parts of this message. Bit 0 (the least
- significant bit) is used to indicate that maximum
- dimensions are present. Bit 1 is used to indicate that
- permutation indices are present.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Dimension #n Size</td>
- <td>
- <P>This value is the current size of the dimension of the
- data as stored in the file. The first dimension stored in
- the list of dimensions is the slowest changing dimension
- and the last dimension stored is the fastest changing
- dimension.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Dimension #n Maximum Size</td>
- <td>
- <P>This value is the maximum size of the dimension of the
- data as stored in the file. This value may be the special
- "<A href="#UnlimitedDim">unlimited</A>" size which indicates
- that the data may expand along this dimension indefinitely.
- If these values are not stored, the maximum size of each
- dimension is assumed to be the dimension's current size.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Permutation Index #n</td>
- <td>
- <P>This value is the index permutation used to map
- each dimension from the canonical representation to an
- alternate axis for each dimension. If these values are
- not stored, the first dimension stored in the list of
- dimensions is the slowest changing dimension and the last
- dimension stored is the fastest changing dimension.
- </P>
- </td>
- </tr>
- </table>
- </div>
-
- </P>
-
-<!--
- <hr>
- <h4><a name="DataSpaceMessage">Name: Complex Dataspace (Fiber Bundle?)</a></h4>
- <b>Header Message Type: </b>0x0002<br>
- <b>Length:</b> varies<br>
-
- <b>Status:</b> One of the <em>Simple Dataspace</em> or
- <em>Complex Dataspace</em> messages is required (but not both) and may
- not be repeated.<br> <b>Purpose and Description:</b> The
- <em>Dataspace</em> message describes space that the dataset is
- mapped onto in a more comprehensive way than the <em>Simple
- Dimensionality</em> message is capable of handling. The
- dataspace of a dataset encompasses the type of coordinate system
- used to locate the dataset's elements as well as the structure and
- regularity of the coordinate system. The dataspace also
- describes the number of dimensions which the dataset inhabits as
- well as a possible higher dimensional space in which the dataset
- is located within.
-
- <br>
- <b>Format of Data:</b>
-
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=bottom>
- <B>HDF5 Dataspace Message Layout</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
-
- <tr align=center>
- <td colspan=4>Mesh Type</td>
- <tr align=center>
- <td colspan=4>Logical Dimensionality</td>
- </table>
- </center>
-
- <p>
- <dl>
- <dt>The elements of the dimensionality message are described below:
- <dd>
- <dl>
- <dt>Mesh Type: (unsigned 32-bit integer)
- <dd>This value indicates whether the grid is
- polar/spherical/cartesion,
- structured/unstructured and regular/irregular. <br>
- The mesh type value is broken up as follows: <br>
-
- <P>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=bottom>
- <B>HDF5 Mesh-type Layout</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
-
- <tr align=center>
- <td colspan=1>Mesh Embedding</td>
- <td colspan=1>Coordinate System</td>
- <td colspan=1>Structure</td>
- <td colspan=1>Regularity</td>
- </table>
- </center>
- The following are the definitions of mesh-type bytes:
- <dl>
- <dt>Mesh Embedding
- <dd>This value indicates whether the dataset dataspace
- is located within
- another dataspace or not:
- <dl> <dl>
- <dt>&lt;STANDALONE&gt;
- <dd>The dataset mesh is self-contained and is not
- embedded in another mesh.
- <dt>&lt;EMBEDDED&gt;
- <dd>The dataset's dataspace is located within
- another dataspace, as
- described in information below.
- </dl> </dl>
- <dt>Coordinate System
- <dd>This value defines the type of coordinate system
- used for the mesh:
- <dl> <dl>
- <dt>&lt;POLAR&gt;
- <dd>The last two dimensions are in polar
- coordinates, higher dimensions are
- cartesian.
- <dt>&lt;SPHERICAL&gt;
- <dd>The last three dimensions are in spherical
- coordinates, higher dimensions
- are cartesian.
- <dt>&lt;CARTESIAN&gt;
- <dd>All dimensions are in cartesian coordinates.
- </dl> </dl>
- <dt>Structure
- <dd>This value defines the locations of the grid-points
- on the axes:
- <dl> <dl>
- <dt>&lt;STRUCTURED&gt;
- <dd>All grid-points are on integral, sequential
- locations, starting from 0.
- <dt>&lt;UNSTRUCTURED&gt;
- <dd>Grid-points locations in each dimension are
- explicitly defined and
- may be of any numeric datatype.
- </dl> </dl>
- <dt>Regularity
- <dd>This value defines the locations of the dataset
- points on the grid:
- <dl> <dl>
- <dt>&lt;REGULAR&gt;
- <dd>All dataset elements are located at the
- grid-points defined.
- <dt>&lt;IRREGULAR&gt;
- <dd>Each dataset element has a particular
- grid-location defined.
- </dl> </dl>
- </dl>
- <p>The following grid combinations are currently allowed:
- <dl> <dl>
- <dt>&lt;POLAR-STRUCTURED-REGULAR&gt;
- <dt>&lt;SPHERICAL-STRUCTURED-REGULAR&gt;
- <dt>&lt;CARTESIAN-STRUCTURED-REGULAR&gt;
- <dt>&lt;POLAR-UNSTRUCTURED-REGULAR&gt;
- <dt>&lt;SPHERICAL-UNSTRUCTURED-REGULAR&gt;
- <dt>&lt;CARTESIAN-UNSTRUCTURED-REGULAR&gt;
- <dt>&lt;CARTESIAN-UNSTRUCTURED-IRREGULAR&gt;
- </dl> </dl>
- All of the above grid types can be embedded within another
- dataspace.
- <br> <br>
- <dt>Logical Dimensionality: (unsigned 32-bit integer)
- <dd>This value is the number of dimensions that the dataset occupies.
-
- <P>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=bottom>
- <B>HDF5 Dataspace Embedded Dimensionality Information</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
-
- <tr align=center>
- <td colspan=4>Embedded Dimensionality</td>
- <tr align=center>
- <td colspan=4>Embedded Dimension Size #1</td>
- <tr align=center>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr align=center>
- <td colspan=4>Embedded Dimension Size #n</td>
- <tr align=center>
- <td colspan=4>Embedded Origin Location #1</td>
- <tr align=center>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr align=center>
- <td colspan=4>Embedded Origin Location #n</td>
- </table>
- </center>
-
- <dt>Embedded Dimensionality: (unsigned 32-bit integer)
- <dd>This value is the number of dimensions of the space the
- dataset is located
- within. i.e. a planar dataset located within a 3-D space,
- or a 3-D dataset
- which is a subset of another 3-D space, etc.
- <dt>Embedded Dimension Size: (unsigned 32-bit integer)
- <dd>These values are the sizes of the dimensions of the
- embedded dataspace
- that the dataset is located within.
- <dt>Embedded Origin Location: (unsigned 32-bit integer)
- <dd>These values comprise the location of the dataset's
- origin within the embedded dataspace.
- </dl>
- </dl>
- [Comment: need some way to handle different orientations of the
- dataset dataspace
- within the embedded dataspace]<br>
-
- <P>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=bottom>
- <B>HDF5 Dataspace Structured/Regular Grid Information</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
-
- <tr align=center>
- <td colspan=4>Logical Dimension Size #1</td>
- <tr align=center>
- <td colspan=4>Logical Dimension Maximum #1</td>
- <tr align=center>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr align=center>
- <td colspan=4>Logical Dimension Size #n</td>
- <tr align=center>
- <td colspan=4>Logical Dimension Maximum #n</td>
- </table>
- </center>
-
- <p>
- <dl>
- <dt>The elements of the dimensionality message are described below:
- <dd>
- <dl>
- <dt>Logical Dimension Size #n: (unsigned 32-bit integer)
- <dd>This value is the current size of the dimension of the
- data as stored in
- the file. The first dimension stored in the list of
- dimensions is the slowest
- changing dimension and the last dimension stored is the
- fastest changing
- dimension.
- <dt>Logical Dimension Maximum #n: (unsigned 32-bit integer)
- <dd>This value is the maximum size of the dimension of the
- data as stored in
- the file. This value may be the special value
- &lt;UNLIMITED&gt; which
- indicates that the data may expand along this dimension
- indefinitely.
- </dl>
- </dl>
- <P>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=bottom>
- <B>HDF5 Dataspace Structured/Irregular Grid Information</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
-
- <tr align=center>
- <td colspan=4># of Grid Points in Dimension #1</td>
- <tr align=center>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr align=center>
- <td colspan=4># of Grid Points in Dimension #n</td>
- <tr align=center>
- <td colspan=4>Datatype of Grid Point Locations</td>
- <tr align=center>
- <td colspan=4>Location of Grid Points in Dimension #1</td>
- <tr align=center>
- <td colspan=4>.<br>.<br>.<br></td>
- <tr align=center>
- <td colspan=4>Location of Grid Points in Dimension #n</td>
- </table>
- </center>
-
- <P>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=bottom>
- <B>HDF5 Dataspace Unstructured Grid Information</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
-
- <tr align=center>
- <td colspan=4># of Grid Points</td>
- <tr align=center>
- <td colspan=4>Datatype of Grid Point Locations</td>
- <tr align=center>
- <td colspan=4>Grid Point Locations<br>.<br>.<br></td>
- </table>
- </center>
--->
-
- <hr>
- <h4><a name="ReservedMessage_0002">Name: Reserved - Not Assigned Yet</a></h4>
- <b>Header Message Type:</b> 0x0002<BR>
- <b>Length:</b> N/A<BR>
- <b>Status:</b> N/A<BR>
- <b>Format of Data:</b> N/A<BR>
-
- <p><b>Purpose and Description:</b> This message type was skipped during
- the initial specification of the file format and may be used in a
- future expansion to the format.
-
-
- <hr>
- <h4><a name="DataTypeMessage">Name: Datatype</a></h4>
-
- <P class=item><B>Header Message Type:</B> 0x0003
- </P>
- <P class=item><B>Length:</B> variable
- </P>
- <P class=item><B>Status:</B> Required for dataset or named datatype objects,
- may not be repeated.
- </P>
-
- <P class=item><B>Description:</B> The datatype message defines the datatype
- for each element of a dataset. A datatype can describe an atomic type
- like a fixed- or floating-point type or a compound type like a C
- struct.
- Datatypes messages are stored
- as a list of datatype classes and
- their associated properties.
- </P>
-
- <P class=item2>Datatype messages that are part of a dataset object,
- do not describe how elements are related to one another, the dataspace
- message is used for that purpose. Datatype messages that are part of
- a named datatype message describe an "abstract" datatype that can be
- used by other objects in the file.
- </P>
-
- <P class=item><B>Format of Data:</B>
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Datatype Message
- </caption>
-
- <tr>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr>
- <td>Class and Version</td>
- <td>Class Bit Field, Bits 0-7</td>
- <td>Class Bit Field, Bits 8-15</td>
- <td>Class Bit Field, Bits 16-23</td>
- </tr>
-
- <tr>
- <td colspan=4>Size</td>
- </tr>
-
- <tr>
- <td colspan=4><br><br>Properties<br><br><br></td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Class and Version</td>
- <td>
- <P>The version of the datatype message and the datatype's class
- information are packed together in this field. The version
- number is packed in the top 4 bits of the field and the class
- is contained in the bottom 4 bits.
- </P>
- <P>The version number information is used for changes in the
- format of the datatype message and is described here:
- <table class=list>
- <tr>
- <th width="30%">Version</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>Never used
- </td>
- </tr>
- <tr>
- <td align=center><code>1</code></td>
- <td>Used by early versions of the library to encode
- compound datatypes with explicit array fields.
- See the compound datatype description below for
- further details.
- </td>
- </tr>
- <tr>
- <td align=center><code>2</code></td>
- <td>The current version used by the library.
- </td>
- </tr>
- </table>
- </P>
- <P>The class of the datatype determines the format for the class
- bit field and properties portion of the datatype message, which
- are described below. The
- following classes are currently defined:
- <table width=100% class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>Fixed-Point</td>
- </tr>
-
- <tr>
- <td align=center><code>1</code></td>
- <td>Floating-Point</td>
- </tr>
-
- <tr>
- <td align=center><code>2</code></td>
- <td>Time</td>
- </tr>
-
- <tr>
- <td align=center><code>3</code></td>
- <td>String</td>
- </tr>
-
- <tr>
- <td align=center><code>4</code></td>
- <td>Bitfield</td>
- </tr>
-
- <tr>
- <td align=center><code>5</code></td>
- <td>Opaque</td>
- </tr>
-
- <tr>
- <td align=center><code>6</code></td>
- <td>Compound</td>
- </tr>
-
- <tr>
- <td align=center><code>7</code></td>
- <td>Reference</td>
- </tr>
-
- <tr>
- <td align=center><code>8</code></td>
- <td>Enumerated</td>
- </tr>
-
- <tr>
- <td align=center><code>9</code></td>
- <td>Variable-Length</td>
- </tr>
-
- <tr>
- <td align=center><code>10</code></td>
- <td>Array</td>
- </tr>
- </table>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Class Bit Fields</td>
- <td>
- <P>The information in these bit fields is specific to each datatype
- class and is described below. All bits not defined for a
- datatype class are set to zero.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Size</td>
- <td>
- <P>The size of the datatype in bytes.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Properties</td>
- <td>
- <P>This variable-sized field encodes information specific to each
- datatype class and is described below. If there is no
- property information specified for a datatype class, the size
- of this field is zero.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
- </P>
-
- <P>Class specific information for Fixed-Point Numbers (Class 0):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0</td>
- <td><b>Byte Order.</b> If zero, byte order is little-endian;
- otherwise, byte order is big endian.</td>
- </tr>
-
- <tr>
- <td>1, 2</td>
- <td><b>Padding type.</b> Bit 1 is the lo_pad type and bit 2
- is the hi_pad type. If a datum has unused bits at either
- end, then the lo_pad or hi_pad bit is copied to those
- locations.</td>
- </tr>
-
- <tr>
- <td>3</td>
- <td><b>Signed.</b> If this bit is set then the fixed-point
- number is in 2's complement form.</td>
- </tr>
-
- <tr>
- <td>4-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Descriptions
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=2>Bit Offset</td>
- <td colspan=2>Bit Precision</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Bit Offset</td>
- <td>
- <P>The bit offset of the first significant bit of the fixed-point
- value within the datatype. The bit offset specifies the number
- of bits "to the right of" the value.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Bit Precision</td>
- <td>
- <P>The number of bits of precision of the fixed-point value
- within the datatype.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
- </P>
-
- <P>Class specific information for Floating-Point Numbers (Class 1):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0</td>
- <td><b>Byte Order.</b> If zero, byte order is little-endian;
- otherwise, byte order is big endian.</td>
- </tr>
-
- <tr>
- <td>1, 2, 3</td>
- <td><b>Padding type.</b> Bit 1 is the low bits pad type, bit 2
- is the high bits pad type, and bit 3 is the internal bits
- pad type. If a datum has unused bits at either end or between
- the sign bit, exponent, or mantissa, then the value of bit
- 1, 2, or 3 is copied to those locations.</td>
- </tr>
-
- <tr>
- <td>4-5</td>
- <td><b>Normalization.</b> The value can be 0 if there is no
- normalization, 1 if the most significant bit of the
- mantissa is always set (except for 0.0), and 2 if the most
- signficant bit of the mantissa is not stored but is
- implied to be set. The value 3 is reserved and will not
- appear in this field.</td>
- </tr>
-
- <tr>
- <td>6-7</td>
- <td>Reserved (zero).</td>
- </tr>
-
- <tr>
- <td>8-15</td>
- <td><b>Sign Location.</b> This is the bit position of the sign
- bit. Bits are numbered with the least significant bit zero.</td>
- </tr>
-
- <tr>
- <td>16-23</td>
- <td>Reserved (zero).</td>
- </tr>
-
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Descriptions
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=2>Bit Offset</td>
- <td colspan=2>Bit Precision</td>
- </tr>
-
- <tr>
- <td>Exponent Location</td>
- <td>Exponent Size</td>
- <td>Mantissa Location</td>
- <td>Mantissa Size</td>
- </tr>
-
- <tr>
- <td colspan=4>Exponent Bias</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Bit Offset</td>
- <td>
- <P>The bit offset of the first significant bit of the floating-point
- value within the datatype. The bit offset specifies the number
- of bits "to the right of" the value.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Bit Precision</td>
- <td>
- <P>The number of bits of precision of the floating-point value
- within the datatype.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Exponent Location</td>
- <td>
- <P>The bit position of the exponent field. Bits are numbered with
- the least significant bit number zero.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Exponent Size</td>
- <td>
- <P>The size of the exponent field in bits.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Mantissa Location</td>
- <td>
- <P>The bit position of the mantissa field. Bits are numbered with
- the least significant bit number zero.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Mantissa Size</td>
- <td>
- <P>The size of the mantissa field in bits.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Exponent Bias</td>
- <td>
- <P>The bias of the exponent field.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
- </P>
-
- <P>Class specific information for Time (Class 2):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0</td>
- <td><b>Byte Order.</b> If zero, byte order is little-endian;
- otherwise, byte order is big endian.</td>
- </tr>
-
- <tr>
- <td>1-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Descriptions
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=2>Bit Precision</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Bit Precision</td>
- <td>
- <P>The number of bits of precision of the time value.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
- </P>
-
- <P>Class specific information for Strings (Class 3):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0-3</td>
- <td><b>Padding type.</b> This four-bit value determines the
- type of padding to use for the string. The values are:
-
- <table width=100% class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>Null Terminate: A zero byte marks the end of the
- string and is guaranteed to be present after
- converting a long string to a short string. When
- converting a short string to a long string the value is
- padded with additional null characters as necessary.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>1</code></td>
- <td>Null Pad: Null characters are added to the end of
- the value during conversions from short values to long
- values but conversion in the opposite direction simply
- truncates the value.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>2</code></td>
- <td>Space Pad: Space characters are added to the end of
- the value during conversions from short values to long
- values but conversion in the opposite direction simply
- truncates the value. This is the Fortran
- representation of the string.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>3-15</code></td>
- <td>Reserved
- </td>
- </tr>
- </table>
- </tr>
-
- <tr>
- <td>4-7</td>
- <td><b>Character Set.</b> The character set to use for
- encoding the string. The only character set supported is
- the 8-bit ASCII (zero) so no translations have been defined
- yet.</td>
- </tr>
-
- <tr>
- <td>8-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <P>There are no properties defined for the string class.
- </P>
- </P>
-
- <P>Class specific information for Bitfields (Class 4):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0</td>
- <td><b>Byte Order.</b> If zero, byte order is little-endian;
- otherwise, byte order is big endian.</td>
- </tr>
-
- <tr>
- <td>1, 2</td>
- <td><b>Padding type.</b> Bit 1 is the lo_pad type and bit 2
- is the hi_pad type. If a datum has unused bits at either
- end, then the lo_pad or hi_pad bit is copied to those
- locations.</td>
- </tr>
-
- <tr>
- <td>3-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Description
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=2>Bit Offset</td>
- <td colspan=2>Bit Precision</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Bit Offset</td>
- <td>
- <P>The bit offset of the first significant bit of the bitfield
- within the datatype. The bit offset specifies the number
- of bits "to the right of" the value.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Bit Precision</td>
- <td>
- <P>The number of bits of precision of the bitfield
- within the datatype.
- </P>
- </td>
- </tr>
- </table>
- </div>
- </P>
-
- <P>Class specific information for Opaque (Class 5):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0-7</td>
- <td>Length of ASCII tag in bytes.</td>
- </tr>
-
- <tr>
- <td>8-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Description
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=4><br>ASCII Tag<br>
- <br></td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>ASCII Tag</td>
- <td>
- <P>This NUL-terminated string provides a description for the
- opaque type. It is NUL-padded to a multiple of 8 bytes.
- </P>
- </td>
- </tr>
- </table>
- </div>
- </P>
-
- <P>Class specific information for Compound (Class 6):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0-15</td>
- <td><b>Number of Members.</b> This field contains the number
- of members defined for the compound datatype. The member
- definitions are listed in the Properties field of the data
- type message.
- </tr>
-
- <tr>
- <td>15-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
- </P>
-
- <P>The Properties field of a compound datatype is a list of the
- member definitions of the compound datatype. The member
- definitions appear one after another with no intervening bytes.
- The member types are described with a recursive datatype
- message.
-
- <P>Note that the property descriptions are different for different
- versions of the datatype version. Additionally note that the version
- 0 properties are deprecated and have been replaced with the version
- 1 properties in versions of the HDF5 library from the 1.4 release
- onward.
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Properties Description for Datatype Version 1
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=4><br>Name<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4>Byte Offset of Member</td>
- </tr>
-
- <tr>
- <td>Dimensionality</td>
- <td colspan=3>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td colspan=4>Dimension Permutation</td>
- </tr>
-
- <tr>
- <td colspan=4>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td colspan=4>Dimension #1 Size (required)</td>
- </tr>
-
- <tr>
- <td colspan=4>Dimension #2 Size (required)</td>
- </tr>
-
- <tr>
- <td colspan=4>Dimension #3 Size (required)</td>
- </tr>
-
- <tr>
- <td colspan=4>Dimension #4 Size (required)</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Member Type Message<br><br></td>
- </tr>
-
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Name</td>
- <td>
- <P>This NUL-terminated string provides a description for the
- opaque type. It is NUL-padded to a multiple of 8 bytes.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Byte Offset of Member</td>
- <td>
- <P>This is the byte offset of the member within the datatype.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Dimensionality</td>
- <td>
- <P>If set to zero, this field indicates a scalar member. If set
- to a value greater than zero, this field indicates that the
- member is an array of values. For array members, the size of
- the array is indicated by the 'Size of Dimension n' field in
- this message.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Dimension Permutation</td>
- <td>
- <P>This field was intended to allow an array field to have
- it's dimensions permuted, but this was never implemented.
- This field should always be set to zero.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Dimension #n Size</td>
- <td>
- <P>This field is the size of a dimension of the array field as
- stored in the file. The first dimension stored in the list of
- dimensions is the slowest changing dimension and the last
- dimension stored is the fastest changing dimension.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Member Type Message</td>
- <td>
- <P>This field is a datatype message describing the datatype of
- the member.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Properties Description for Datatype Version 2
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=4><br>Name<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4>Byte Offset of Member</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Member Type Message<br><br></td>
- </tr>
-
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Name</td>
- <td>
- <P>This NUL-terminated string provides a description for the
- opaque type. It is NUL-padded to a multiple of 8 bytes.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Byte Offset of Member</td>
- <td>
- <P>This is the byte offset of the member within the datatype.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Member Type Message</td>
- <td>
- <P>This field is a datatype message describing the datatype of
- the member.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
- </P>
-
- <P>Class specific information for Reference (Class 7):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0-3</td>
- <td><b>Type.</b> This four-bit value contains the type of reference
- described. The values defined are:
-
- <table width=100% class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>Object Reference: A reference to another object in this
- HDF5 file.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>1</code></td>
- <td>Dataset Region Reference: A reference to a region within
- a dataset in this HDF5 file.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>2</code></td>
- <td>Internal Reference: A reference to a region within the
- current dataset. (Not currently implemented)
- </td>
- </tr>
-
- <tr>
- <td align=center><code>3-15</code></td>
- <td>Reserved
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-
- <tr>
- <td>15-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <P>There are no properties defined for the reference class.
- </P>
- </P>
-
- <P>Class specific information for Enumeration (Class 8):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0-15</td>
- <td><b>Number of Members.</b> The number of name/value
- pairs defined for the enumeration type.</td>
- </tr>
-
- <tr>
- <td>16-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Description
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=4><br>Base Type<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4><br>Names<br><br></td>
- </tr>
-
- <tr>
- <td colspan=4><br>Values<br><br></td>
- </tr>
-
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Base Type</td>
- <td>
- <P>Each enumeration type is based on some parent type, usually an
- integer. The information for that parent type is described
- recursively by this field.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Names</td>
- <td>
- <P>The name for each name/value pair. Each name is stored as a null
- terminated ASCII string in a multiple of eight bytes. The names
- are in no particular order.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Values</td>
- <td>
- <P>The list of values in the same order as the names. The values
- are packed (no inter-value padding) and the size of each value
- is determined by the parent type.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
- </P>
-
-
- <P>Class specific information for Variable-Length (Class 9):
-
- <br>
- <div align=center>
- <table class=desc>
- <caption>
- Bit Field Description
- </caption>
-
- <tr>
- <th width="10%">Bits</th>
- <th>Meaning</th>
- </tr>
-
- <tr>
- <td>0-3</td>
- <td><b>Type.</b> This four-bit value contains the type of
- variable-length datatype described. The values defined are:
-
- <table width=100% class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>Sequence: A variable-length sequence of any sequence of
- data. Variable-length sequences do not have padding or
- character set information.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>1</code></td>
- <td>String: A variable-length sequence of characters.
- Variable-length strings have padding and character set
- information.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>2-15</code></td>
- <td>Reserved
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-
- <tr>
- <td>4-7</td>
- <td><b>Padding type.</b> (variable-length string only)
- This four-bit value determines the type of padding
- used for variable-length strings. The values are the same
- as for the string padding type, as follows:
- <table width=100% class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>Null terminate: A zero byte marks the end of a string
- and is guaranteed to be present after converting a long
- string to a short string. When converting a short string
- to a long string, the value is padded with additional null
- characters as necessary.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>1</code></td>
- <td>Null pad: Null characters are added to the end of the
- value during conversion from a short string to a longer
- string. Conversion from a long string to a shorter string
- simply truncates the value.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>2</code></td>
- <td>Space pad: Space characters are added to the end of the
- value during conversion from a short string to a longer
- string. Conversion from a long string to a shorter string
- simply truncates the value. This is the Fortran
- representation of the string.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>3-15</code></td>
- <td>Reserved
- </td>
- </tr>
- </table>
-
- This value is set to zero for variable-length sequences.
-
- </td>
- </tr>
-
- <tr>
- <td>8-11</td>
- <td><b>Character Set.</b> (variable-length string only)
- This four-bit value specifies the character set
- to be used for encoding the string:
- <table width=100% class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>ASCII: As of this writing (July 2003, Release 1.6.0),
- 8-bit ASCII is the only character set supported. Therefore,
- no translations have been defined.
- </td>
- </tr>
-
- <tr>
- <td align=center><code>1-15</code></td>
- <td>Reserved
- </td>
- </tr>
- </table>
-
- This value is set to zero for variable-length sequences.
-
- </td>
- </tr>
-
- <tr>
- <td>12-23</td>
- <td>Reserved (zero).</td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Description
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td colspan=4><br>Base Type<br><br></td>
- </tr>
-
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Base Type</td>
- <td>
- <P>Each variable-length type is based on some parent type. The
- information for that parent type is described recursively by
- this field.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
- </P>
-
- <P>Class specific information for Array (Class 10):
-
- <P>There are no bit fields defined for the array class.
- </P>
-
- <P>Note that the dimension information defined in the property for this
- datatype class is independent of dataspace information for a dataset.
- The dimension information here describes the dimensionality of the
- information within a data element (or a component of an element, if the
- array datatype is nested within another datatype) and the dataspace for a
- dataset describes the location of the elements in a dataset.
- </P>
-
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Property Description
- </caption>
-
- <tr>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- <th width="25%">Byte</th>
- </tr>
-
- <tr>
- <td>Dimensionality</td>
- <td colspan=3>Reserved (zero)</td>
- </tr>
-
- <tr>
- <td colspan=4>Dimension #1 Size</td>
- </tr>
- <tr>
- <td colspan=4>.<br>.<br>.<br></td>
- </tr>
- <tr>
- <td colspan=4>Dimension #n Size</td>
- </tr>
-
- <tr>
- <td colspan=4>Permutation Index #1</td>
- </tr>
- <tr>
- <td colspan=4>.<br>.<br>.<br></td>
- </tr>
- <tr>
- <td colspan=4>Permutation Index #n</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Base Type<br><br></td>
- </tr>
-
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Dimensionality</td>
- <td>
- <P>This value is the number of dimensions that the array has.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Dimension #n Size</td>
- <td>
- <P>This value is the size of the dimension of the array
- as stored in the file. The first dimension stored in
- the list of dimensions is the slowest changing dimension
- and the last dimension stored is the fastest changing
- dimension.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Permutation Index #n</td>
- <td>
- <P>This value is the index permutation used to map
- each dimension from the canonical representation to an
- alternate axis for each dimension. Currently, dimension
- permutations are not supported and these indices should be set
- to the index position minus one (i.e. the first dimension should
- be set to 0, the second dimension should be set to 1, etc.)
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Base Type</td>
- <td>
- <P>Each array type is based on some parent type. The
- information for that parent type is described recursively by
- this field.
- </P>
- </td>
- </tr>
-
- </table>
- </div>
-
- </P>
-
- <hr>
- <h4><a name="OldFillValueMessage">Name: Data Storage - Fill Value (Old)</a></h4>
-
- <P class=item><B>Header Message Type:</B> 0x0004
- </P>
- <P class=item><B>Length:</B> varies
- </P>
- <P class=item><B>Status:</B> Optional, may not be repeated.
- </P>
-
- <P class=item><B>Description:</B> The fill value message stores a single
- data value which is returned to the application when an uninitialized
- data element is read from a dataset. The fill value is interpreted
- with the same datatype as the dataset. If no fill value message is
- present then a fill value of all zero bytes is assumed.
- </P>
-
- <P class=item2>This fill value message is deprecated in favor of the "new"
- fill value message (Message Type 0x0005) and is only written to the
- file for forward compatibility with versions of the HDF5 library before
- the 1.6.0 version. Additionally, it only appears for datasets with a
- user defined fill value (as opposed to the library default fill value
- or an explicitly set "undefined" fill value).
- </P>
-
- <P class=item><B>Format of Data:</B>
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Fill Value Message (Old)
- </caption>
-
- <tr>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr>
- <td colspan=4>Size</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Fill Value<br><br></td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Size</td>
- <td>
- <P>This is the size of the Fill Value field in bytes.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Fill Value</td>
- <td>
- <P>The fill value. The bytes of the fill value are interpreted
- using the same datatype as for the dataset.
- </P>
- </td>
- </tr>
- </table>
- </div>
- </P>
-
- <hr>
- <h4><a name="FillValueMessage">Name: Data Storage - Fill Value </a></h4>
-
- <P class=item><B>Header Message Type:</B> 0x0005
- </P>
- <P class=item><B>Length:</B> varies
- </P>
- <P class=item><B>Status:</B> Required for dataset objects, may not be repeated.
- </P>
-
- <P class=item><B>Description:</B> The fill value message stores a single
- data value which is returned to the application when an uninitialized
- data element is read from a dataset. The fill value is interpreted
- with the same datatype as the dataset.
- </P>
-
- <P class=item><B>Format of Data:</B>
- <br>
- <div align=center>
- <table class=format>
- <caption>
- Fill Value Message
- </caption>
-
- <tr>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>Space Allocation Time</td>
- <td>Fill Value Write Time</td>
- <td>Fill Value Defined</td>
- </tr>
-
- <tr>
- <td colspan=4>Size</td>
- </tr>
-
- <tr>
- <td colspan=4><br>Fill Value<br><br></td>
- </tr>
- </table>
- </div>
-
- <br>
- <div align=center>
- <table class=desc>
- <tr>
- <th width="30%">Field Name</th>
- <th>Description</th>
- </tr>
-
- <tr>
- <td>Version</td>
- <td>
- <P>The version number information is used for changes in the
- format of the fill value message and is described here:
- <table class=list>
- <tr>
- <th width="30%">Version</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>Never used
- </td>
- </tr>
- <tr>
- <td align=center><code>1</code></td>
- <td>Used by version 1.6.x of the library to encode
- fill values. In this version, the Size field is
- always present.
- </td>
- </tr>
- <tr>
- <td align=center><code>2</code></td>
- <td>The current version used by the library (version
- 1.7.3 or later). In this version, the Size and
- Fill Value fields are
- only present if the Fill Value Defined field is set
- to 1.
- </td>
- </tr>
- </table>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Space Allocation Time</td>
- <td>
- <P>When the storage space for the dataset's raw data will be
- allocated. The allowed values are:
- <table class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>1</code></td>
- <td>Early allocation. Storage space for the entire dataset
- should be allocated in the file when the dataset is
- created.
- </td>
- </tr>
- <tr>
- <td align=center><code>2</code></td>
- <td>Late allocation. Storage space for the entire dataset
- should not be allocated until the dataset is written
- to.
- </td>
- </tr>
- <tr>
- <td align=center><code>3</code></td>
- <td>Incremental allocation. Storage space for the
- dataset should not be allocated until the portion
- of the dataset is written to. This is currently
- used in conjunction with chunked data storage for
- datasets.
- </td>
- </tr>
- </table>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Fill Value Write Time</td>
- <td>
- <P>At the time that storage space for the dataset's raw data is
- allocated, this value indicates whether the fill value should
- be written to the raw data storage elements. The allowed values
- are:
- <table class=list>
- <tr>
- <th width="30%">Value</th>
- <th align=left>Description</th>
- </tr>
-
- <tr>
- <td align=center><code>0</code></td>
- <td>On allocation. The fill value is always written to
- the raw data storage when the storage space is allocated.
- </td>
- </tr>
- <tr>
- <td align=center><code>1</code></td>
- <td>Never. The fill value should never be written to
- the raw data storage.
- </td>
- </tr>
- <tr>
- <td align=center><code>2</code></td>
- <td>Fill value written if set by user. The fill value
- will be written to the raw data storage when the storage
- space is allocated only if the user explicitly set
- the fill value. If the fill value is the library
- default or is undefined, it will not be written to
- the raw data storage.
- </td>
- </tr>
- </table>
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Fill Value Defined</td>
- <td>
- <P>This value indicates if a fill value is defined for this
- dataset. If this value is 0, the fill value is undefined.
- If this value is 1, a fill value is defined for this dataset.
- For version 2 or later of the fill value message, this value
- controls the presence of the Size field.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Size</td>
- <td>
- <P>This is the size of the Fill Value field in bytes. This field
- is not present if the Version field is >1 and the Fill Value
- Defined field is set to 0.
- </P>
- </td>
- </tr>
-
- <tr>
- <td>Fill Value</td>
- <td>
- <P>The fill value. The bytes of the fill value are interpreted
- using the same datatype as for the dataset. This field is
- not present if the Version field is >1 and the Fill Value
- Defined field is set to 0.
- </P>
- </td>
- </tr>
- </table>
- </div>
- </P>
-
-<!--
- <hr>
- <h4><a name="CompactDataStorageMessage">Name: Data Storage - Compact</a></h4>
-
- <b>Header Message Type:</b> 0x0006<br>
- <b>Length:</b> varies<br>
- <b>Status:</b> Optional, may not be repeated.<br>
-
- <p>This message indicates that the data for the data object is
- stored within the current HDF file by including the actual
- data as the header data for this message. The data is
- stored internally in
- the <em>normal format</em>, i.e. in one chunk, uncompressed, etc.
-
- <P>Note that one and only one of the <em>Data Storage</em> headers can be
- stored for each data object.
-
- <P><b>Format of Data:</b> The message data is actually composed
- of dataset data, so the format will be determined by the dataset
- format.
--->
-
- <hr>
- <h4><a name="ReservedMessage_0006">Name: Reserved - Not Assigned Yet</a></h4>
- <b>Header Message Type:</b> 0x0006<BR>
- <b>Length:</b> N/A<BR>
- <b>Status:</b> N/A<BR>
- <b>Format of Data:</b> N/A<BR>
-
- <p><b>Purpose and Description:</b> This message type was skipped during
- the initial specification of the file format and may be used in a
- future expansion to the format.
-
- <hr>
- <h4><a name="ExternalFileListMessage">Name: Data Storage -
- External Data Files</a></h4>
- <b>Header Message Type:</b> 0x0007<BR>
- <b>Length:</b> varies<BR>
- <b>Status:</b> Optional, may not be repeated.<BR>
-
- <p><b>Purpose and Description:</b> The external object message
- indicates that the data for an object is stored outside the HDF5
- file. The filename of the object is stored as a Universal
- Resource Location (URL) of the actual filename containing the
- data. An external file list record also contains the byte offset
- of the start of the data within the file and the amount of space
- reserved in the file for that data.
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <b>External File List Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td>Version</td>
- <td colspan=3>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=2>Allocated Slots</td>
- <td colspan=2>Used Slots</td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Heap Address<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Slot Definitions...<br><br></td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Version </td>
- <td>This value is used to determine the format of the
- External File List Message. When the format of the
- information in the message is changed, the version number
- is incremented and can be used to determine how the
- information in the object header is formatted.</td>
- </tr>
-
- <tr valign=top>
- <td>Reserved</td>
- <td>This field is reserved for future use.</td>
- </tr>
-
- <tr valign=top>
- <td>Allocated Slots</td>
- <td>The total number of slots allocated in the message. Its
- value must be at least as large as the value contained in
- the Used Slots field.</td>
- </tr>
-
- <tr valign=top>
- <td>Used Slots</td>
- <td>The number of initial slots which contain valid
- information. The remaining slots are zero filled.</td>
- </tr>
-
- <tr valign=top>
- <td>Heap Address</td>
- <td>This is the address of a local name heap which contains
- the names for the external files. The name at offset zero
- in the heap is always the empty string.</td>
- </tr>
-
- <tr valign=top>
- <td>Slot Definitions</td>
- <td>The slot definitions are stored in order according to
- the array addresses they represent. If more slots have
- been allocated than what has been used then the defined
- slots are all at the beginning of the list.</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <b>External File List Slot</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Name Offset (&lt;size&gt; bytes)<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>File Offset (&lt;size&gt; bytes)<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Size<br><br></td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Name Offset (&lt;size&gt; bytes)</td>
- <td>The byte offset within the local name heap for the name
- of the file. File names are stored as a URL which has a
- protocol name, a host name, a port number, and a file
- name:
- <code><em>protocol</em>:<em>port</em>//<em>host</em>/<em>file</em></code>.
- If the protocol is omitted then "file:" is assumed. If
- the port number is omitted then a default port for that
- protocol is used. If both the protocol and the port
- number are omitted then the colon can also be omitted. If
- the double slash and host name are omitted then
- "localhost" is assumed. The file name is the only
- mandatory part, and if the leading slash is missing then
- it is relative to the application's current working
- directory (the use of relative names is not
- recommended).</td>
- </tr>
-
- <tr valign=top>
- <td>File Offset (&lt;size&gt; bytes)</td>
- <td>This is the byte offset to the start of the data in the
- specified file. For files that contain data for a single
- dataset this will usually be zero.</td>
- </tr>
-
- <tr valign=top>
- <td>Size</td>
- <td>This is the total number of bytes reserved in the
- specified file for raw data storage. For a file that
- contains exactly one complete dataset which is not
- extendable, the size will usually be the exact size of the
- dataset. However, by making the size larger one allows
- HDF5 to extend the dataset. The size can be set to a value
- larger than the entire file since HDF5 will read zeros
- past the end of the file without failing.</td>
- </tr>
- </table>
- </center>
-
-
- <hr>
- <h4><a name="LayoutMessage">Name: Data Storage - Layout</a></h4>
-
- <b>Header Message Type:</b> 0x0008<BR>
- <b>Length:</b> varies<BR>
- <b>Status:</b> Required for datasets, may not be repeated.
-
- <p><b>Purpose and Description:</b> Data layout describes how the
- elements of a multi-dimensional array are arranged in the linear
- address space of the file. Three types of data layout are
- supported:
-
- <ol>
- <li>The array can be stored in one contiguous area of the file.
- The layout requires that the size of the array be constant and
- does not permit chunking, compression, checksums, encryption,
- etc. The message stores the total size of the array and the
- offset of an element from the beginning of the storage area is
- computed as in C.
-
- <li>The array domain can be regularly decomposed into chunks and
- each chunk is allocated separately. This layout supports
- arbitrary element traversals, compression, encryption, and
- checksums, and the chunks can be distributed across external
- raw data files (these features are described in other
- messages). The message stores the size of a chunk instead of
- the size of the entire array; the size of the entire array can
- be calculated by traversing the B-tree that stores the chunk
- addresses.
-
- <li>The array can be stored in one contiguous block, as part of
- this object header message (this is called "compact" storage below).
- </ol>
-
- <P>Version 3 of this message re-structured the format into specific
- properties that are required for each layout class.
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Data Layout Message, Versions 1 and 2</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td>Version</td>
- <td>Dimensionality</td>
- <td>Layout Class</td>
- <td>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Address<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Dimension 0 (4-bytes)</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Dimension 1 (4-bytes)</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>...</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Compact Data Size (4-bytes)</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Compact Data</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>...</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Version</td>
- <td>A version number for the layout message. This value can be
- either 1 or 2.</td>
- </tr>
-
- <tr valign=top>
- <td>Dimensionality</td>
- <td>An array has a fixed dimensionality. This field
- specifies the number of dimension size fields later in the
- message.</td>
- </tr>
-
- <tr valign=top>
- <td>Layout Class</td>
- <td>The layout class specifies how the other fields of the
- layout message are to be interpreted. A value of one
- indicates contiguous storage, a value of two
- indicates chunked storage,
- while a value of zero
- indicates compact storage. Other values will be defined
- in the future.</td>
- </tr>
-
- <tr valign=top>
- <td>Address</td>
- <td>For contiguous storage, this is the address of the first
- byte of storage. For chunked storage this is the address
- of the B-tree that is used to look up the addresses of the
- chunks. This field is not present for compact storage.
- If the version for this message is set to 2, the address
- may have the "undefined address" value, to indicate that
- storage has not yet been allocated for this array.</td>
- </tr>
-
- <tr valign=top>
- <td>Dimensions</td>
- <td>For contiguous storage the dimensions define the entire
- size of the array while for chunked storage they define
- the size of a single chunk.</td>
- </tr>
-
- <tr valign=top>
- <td>Compact Data Size</td>
- <td>This field is only present for compact data storage.
- It contains the size of the raw data for the dataset array.</td>
-
- <tr valign=top>
- <td>Compact Data</td>
- <td>This field is only present for compact data storage.
- It contains the raw data for the dataset array.</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Data Layout Message, Version 3</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td>Version</td>
- <td>Layout Class</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Properties</td>
- </tr>
-
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Version</td>
- <td>A version number for the layout message. This value can be
- either 1, 2 or 3.</td>
- </tr>
-
- <tr valign=top>
- <td>Layout Class</td>
- <td>The layout class specifies how the other fields of the
- layout message are to be interpreted. A value of one
- indicates contiguous storage, a value of two
- indicates chunked storage,
- while a value of three
- indicates compact storage.</td>
- </tr>
-
- <tr valign=top>
- <td>Properties</td>
- <td>This variable-sized field encodes information specific to each
- layout class and is described below. If there is no property
- information specified for a layout class, the size of this field
- is zero bytes.</td>
- </tr>
-
- </table>
- </center>
-
- <P>Class-specific information for contiguous layout (Class 0):
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Property Descriptions</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Address<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Size<br><br></td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Address</td>
- <td>This is the address of the first byte of raw data storage.
- The address may have the "undefined address" value, to indicate
- that storage has not yet been allocated for this array.</td>
- </tr>
-
- <tr valign=top>
- <td>Size</td>
- <td>This field contains the size allocated to store the raw data.</td>
- </table>
- </center>
-
- <P>Class-specific information for chunked layout (Class 1):
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Property Descriptions</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td>Dimensionality</td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Address<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Dimension 0 (4-bytes)</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Dimension 1 (4-bytes)</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>...</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Dimensionality</td>
- <td>A chunk has a fixed dimensionality. This field
- specifies the number of dimension size fields later in the
- message.</td>
- </tr>
-
- <tr valign=top>
- <td>Address</td>
- <td>This is the address
- of the B-tree that is used to look up the addresses of the
- chunks.
- The address
- may have the "undefined address" value, to indicate that
- storage has not yet been allocated for this array.</td>
- </tr>
-
- <tr valign=top>
- <td>Dimensions</td>
- <td>The dimension sizes define the size of a single chunk.</td>
- </tr>
- </table>
- </center>
-
- <P>Class-specific information for compact layout (Class 2):
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Property Descriptions</B>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td colspan=2>Size</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Raw Data</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>...</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Size</td>
- <td>This field contains the size of the raw data for the dataset array.</td>
-
- <tr valign=top>
- <td>Raw Data</td>
- <td>This field contains the raw data for the dataset array.</td>
- </tr>
- </table>
- </center>
-
-
- <hr>
- <h4><a name="ReservedMessage_0009">Name: Reserved - Not Assigned Yet</a></h4>
- <b>Header Message Type:</b> 0x0009<BR>
- <b>Length:</b> N/A<BR>
- <b>Status:</b> N/A<BR>
- <b>Format of Data:</b> N/A<BR>
-
- <p><b>Purpose and Description:</b> This message type was skipped during
- the initial specification of the file format and may be used in a
- future expansion to the format.
-
- <hr>
- <h4><a name="ReservedMessage_000A">Name: Reserved - Not Assigned Yet</a></h4>
- <b>Header Message Type:</b> 0x000A<BR>
- <b>Length:</b> N/A<BR>
- <b>Status:</b> N/A<BR>
- <b>Format of Data:</b> N/A<BR>
-
- <p><b>Purpose and Description:</b> This message type was skipped during
- the initial specification of the file format and may be used in a
- future expansion to the format.
-
- <hr>
- <h4><a name="FilterMessage">Name: Data Storage - Filter Pipeline</a></h4>
- <b>Header Message Type:</b> 0x000B<BR>
- <b>Length:</b> varies<BR>
- <b>Status:</b> Optional, may not be repeated.
-
- <p><b>Purpose and Description:</b> This message describes the
- filter pipeline which should be applied to the data stream by
- providing filter identification numbers, flags, a name, an
- client data.
-
- <p>
- <center>
- <table border align=center cellpadding=4 width="80%">
- <caption align=top>
- <b>Filter Pipeline Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td>Version</td>
- <td>Number of Filters</td>
- <td colspan=2>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Filter List<br><br></td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Version</td>
- <td>The version number for this message. This document
- describes version one.</td>
- </tr>
-
- <tr valign=top>
- <td>Number of Filters</td>
- <td>The total number of filters described by this
- message. The maximum possible number of filters in a
- message is 32.</td>
- </tr>
-
- <tr valign=top>
- <td>Filter List</td>
- <td>A description of each filter. A filter description
- appears in the next table.</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table border align=center cellpadding=4 width="80%">
- <caption align=top>
- <b>Filter Pipeline Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td colspan=2>Filter Identification</td>
- <td colspan=2>Name Length</td>
- </tr>
-
- <tr align=center>
- <td colspan=2>Flags</td>
- <td colspan=2>Client Data Number of Values</td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Name<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Client Data<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Padding</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Filter Identification</td>
- <td>This is a unique (except in the case of testing)
- identifier for the filter. Values from zero through 255
- are reserved for filters defined by the NCSA HDF5
- library. Values 256 through 511 have been set aside for
- use when developing/testing new filters. The remaining
- values are allocated to specific filters by contacting the
- <a href="mailto:hdf5dev@ncsa.uiuc.edu">HDF5 Development
- Team</a>.</td>
- </tr>
-
- <tr valign=top>
- <td>Name Length</td>
- <td>Each filter has an optional null-terminated ASCII name
- and this field holds the length of the name including the
- null termination padded with nulls to be a multiple of
- eight. If the filter has no name then a value of zero is
- stored in this field.</td>
- </tr>
-
- <tr valign=top>
- <td>Flags</td>
- <td>The flags indicate certain properties for a filter. The
- bit values defined so far are:
-
- <dl>
- <dt><code>bit 1</code>
- <dd>If set then the filter is an optional filter.
- During output, if an optional filter fails it will be
- silently removed from the pipeline.
- </dl>
- </tr>
-
- <tr valign=top>
- <td>Client Data Number of Values</td>
- <td>Each filter can store a few integer values to control
- how the filter operates. The number of entries in the
- Client Data array is stored in this field.</td>
- </tr>
-
- <tr valign=top>
- <td>Name</td>
- <td>If the Name Length field is non-zero then it will
- contain the size of this field, a multiple of eight. This
- field contains a null-terminated, ASCII character
- string to serve as a comment/name for the filter.</td>
- </tr>
-
- <tr valign=top>
- <td>Client Data</td>
- <td>This is an array of four-byte integers which will be
- passed to the filter function. The Client Data Number of
- Values determines the number of elements in the
- array.</td>
- </tr>
-
- <tr valign=top>
- <td>Padding</td>
- <td>Four bytes of zeros are added to the message at this
- point if the Client Data Number of Values field contains
- an odd number.</td>
- </tr>
- </table>
- </center>
-
- <hr>
- <h4><a name="AttributeMessage">Name: Attribute</a></h4>
- <b>Header Message Type:</b> 0x000C<BR>
- <b>Length:</b> varies<BR>
- <b>Status:</b> Optional, may be repeated.<BR>
-
- <p><b>Purpose and Description:</b> The <em>Attribute</em>
- message is used to list objects in the HDF file which are used
- as attributes, or "metadata" about the current object. An
- attribute is a small dataset; it has a name, a datatype, a data
- space, and raw data. Since attributes are stored in the object
- header they must be relatively small (<64KB) and can be
- associated with any type of object which has an object header
- (groups, datasets, named types and spaces, etc.).
-
- <p>Note: Attributes on an object must have unique names. (The HDF5 library
- currently enforces this by causing the creation of an attribute with
- a duplicate name to fail)
- Attributes on different objects may have the same name, however.
-
- <p>
- <center>
- <table border align=center cellpadding=4 width="80%">
- <caption align=top>
- <b>Attribute Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td>Version</td>
- <td>Reserved</td>
- <td colspan=2>Name Size</td>
- </tr>
-
- <tr align=center>
- <td colspan=2>Type Size</td>
- <td colspan=2>Space Size</td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Name<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Type<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Space<br><br></td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Data<br><br></td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Version</td>
- <td>Version number for the message. This document describes
- version 1 of attribute messages.</td>
- </tr>
-
- <tr valign=top>
- <td>Reserved</td>
- <td>This field is reserved for later use and is set to
- zero.</td>
- </tr>
-
- <tr valign=top>
- <td>Name Size</td>
- <td>The length of the attribute name in bytes including the
- null terminator. Note that the Name field below may
- contain additional padding not represented by this
- field.</td>
- </tr>
-
- <tr valign=top>
- <td>Type Size</td>
- <td>The length of the datatype description in the Type
- field below. Note that the Type field may contain
- additional padding not represented by this field.</td>
- </tr>
-
- <tr valign=top>
- <td>Space Size</td>
- <td>The length of the dataspace description in the Space
- field below. Note that the Space field may contain
- additional padding not represented by this field.</td>
- </tr>
-
- <tr valign=top>
- <td>Name</td>
- <td>The null-terminated attribute name. This field is
- padded with additional null characters to make it a
- multiple of eight bytes.</td>
- </tr>
-
- <tr valign=top>
- <td>Type</td>
- <td>The datatype description follows the same format as
- described for the datatype object header message. This
- field is padded with additional zero bytes to make it a
- multiple of eight bytes.</td>
- </tr>
-
- <tr valign=top>
- <td>Space</td>
- <td>The dataspace description follows the same format as
- described for the dataspace object header message. This
- field is padded with additional zero bytes to make it a
- multiple of eight bytes.</td>
- </tr>
-
- <tr valign=top>
- <td>Data</td>
- <td>The raw data for the attribute. The size is determined
- from the datatype and dataspace descriptions. This
- field is <em>not</em> padded with additional zero
- bytes.</td>
- </tr>
- </table>
- </center>
-
- <hr>
- <h4><a name="CommentMessage">Name: Object Comment</a></h4>
-
- <p><b>Header Message Type:</b> 0x000D<br>
- <b>Length:</b> varies<br>
- <b>Status:</b> Optional, may not be repeated.
-
- <p><b>Purpose and Description:</b> The object comment is
- designed to be a short description of an object. An object comment
- is a sequence of non-zero (<code>\0</code>) ASCII characters with no other
- formatting included by the library.
-
- <p>
- <center>
- <table border align=center cellpadding=4 width="80%">
- <caption align=top>
- <b>Name Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Comment<br><br></td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Name</td>
- <td>A null terminated ASCII character string.</td>
- </tr>
- </table>
- </center>
-
- <hr>
- <h4><a name="OldModifiedMessage">Name: Object Modification Date &amp; Time (Old)</a></h4>
-
- <p><b>Header Message Type:</b> 0x000E<br>
- <b>Length:</b> fixed<br>
- <b>Status:</b> Optional, may not be repeated.
-
- <p><b>Purpose and Description:</b> The object modification date
- and time is a timestamp which indicates (using ISO-8601 date and
- time format) the last modification of an object. The time is
- updated when any object header message changes according to the
- system clock where the change was posted.
-
- <p>This modification time message is deprecated in favor of the "new"
- modification time message (Message Type 0x0012) and is no longer written
- to the file in versions of the HDF5 library after the 1.6.0 version.
- </p>
-
-
- <p>
- <center>
- <table border align=center cellpadding=4 width="80%">
- <caption align=top>
- <b>Modification Time Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td colspan=4>Year</td>
- </tr>
-
- <tr align=center>
- <td colspan=2>Month</td>
- <td colspan=2>Day of Month</td>
- </tr>
-
- <tr align=center>
- <td colspan=2>Hour</td>
- <td colspan=2>Minute</td>
- </tr>
-
- <tr align=center>
- <td colspan=2>Second</td>
- <td colspan=2>Reserved</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Year</td>
- <td>The four-digit year as an ASCII string. For example,
- <code>1998</code>. All fields of this message should be interpreted
- as coordinated universal time (UTC)</td>
- </tr>
-
- <tr valign=top>
- <td>Month</td>
- <td>The month number as a two digit ASCII string where
- January is <code>01</code> and December is <code>12</code>.</td>
- </tr>
-
- <tr valign=top>
- <td>Day of Month</td>
- <td>The day number within the month as a two digit ASCII
- string. The first day of the month is <code>01</code>.</td>
- </tr>
-
- <tr valign=top>
- <td>Hour</td>
- <td>The hour of the day as a two digit ASCII string where
- midnight is <code>00</code> and 11:00pm is <code>23</code>.</td>
- </tr>
-
- <tr valign=top>
- <td>Minute</td>
- <td>The minute of the hour as a two digit ASCII string where
- the first minute of the hour is <code>00</code> and
- the last is <code>59</code>.</td>
- </tr>
-
- <tr valign=top>
- <td>Second</td>
- <td>The second of the minute as a two digit ASCII string
- where the first second of the minute is <code>00</code>
- and the last is <code>59</code>.</td>
- </tr>
-
- <tr valign=top>
- <td>Reserved</td>
- <td>This field is reserved and should always be zero.</td>
- </tr>
- </table>
- </center>
-
- <hr>
- <h4><a name="SharedMessage">Name: Shared Object Message</a></h4>
- <b>Header Message Type:</b> 0x000F<br>
- <b>Length:</b> 4 Bytes<br>
- <b>Status:</b> Optional, may be repeated.
-
- <p>A constant message can be shared among several object headers
- by writing that message in the global heap and having the object
- headers all point to it. The pointing is accomplished with a
- Shared Object message which is understood directly by the object
- header layer of the library. It is also possible to have a
- message of one object header point to a message in some other
- object header, but care must be exercised to prevent cycles.
-
- <p>If a message is shared, then the message appears in the global
- heap and its message ID appears in the Header Message Type
- field of the object header. Also, the Flags field in the object
- header for that message will have bit two set (the
- <code>H5O_FLAG_SHARED</code> bit). The message body in the
- object header will be that of a Shared Object message defined
- here and not that of the pointed-to message.
-
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <b>Shared Message Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</td>
- <th width="25%">byte</td>
- <th width="25%">byte</td>
- <th width="25%">byte</td>
- </tr>
-
- <tr align=center>
- <td>Version</td>
- <td>Flags</td>
- <td colspan=2>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=4><br>Pointer<br><br></td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Version</td>
- <td>The version number for the message. This document
- describes version one of shared messages.</td>
- </tr>
-
- <tr valign=top>
- <td>Flags</td>
- <td>The Shared Message message points to a message which is
- shared among multiple object headers. The Flags field
- describes the type of sharing:
-
- <dl>
- <dt><code>Bit 0</code>
- <dd>If this bit is clear then the actual message is the
- first message in some other object header; otherwise
- the actual message is stored in the global heap.
-
- <dt><code>Bits 2-7</code>
- <dd>Reserved (always zero)
- </dl>
- </tr>
-
- <tr valign=top>
- <td>Pointer</td>
- <td>This field points to the actual message. The format of
- the pointer depends on the value of the Flags field. If
- the actual message is in the global heap then the pointer
- is the file address of the global heap collection that
- holds the message, and a four-byte index into that
- collection. Otherwise the pointer is a group entry
- that points to some other object header.</td>
- </tr>
- </table>
- </center>
-
-
-<hr>
-<h4><a name="ContinuationMessage">Name: Object Header Continuation</a></h4>
-<b>Header Message Type:</b> 0x0010<BR>
-<b>Length:</b> fixed<BR>
-<b>Status:</b> Optional, may be repeated.<BR>
-<b>Purpose and Description:</b> The object header continuation is the location
-in the file of more header messages for the current data object. This can be
-used when header blocks are large, or likely to change over time.<BR>
-<b>Format of Data:</b><p>
- The object header continuation is formatted as follows (assuming a 4-byte
-length &amp; offset are being used in the current file):
-
-<P>
-<center>
-<table border cellpadding=4 width=60%>
-<caption align=bottom>
-<B>HDF5 Object Header Continuation Message Layout</B>
-</caption>
-
-<tr align=center>
-<th width=25%>byte</th>
-<th width=25%>byte</th>
-<th width=25%>byte</th>
-<th width=25%>byte</th>
-
-<tr align=center>
-<td colspan=4>Header Continuation Offset</td>
-<tr align=center>
-<td colspan=4>Header Continuation Length</td>
-</table>
-</center>
-
-<P>
-<dl>
-<dt>The elements of the Header Continuation Message are described below:
-<dd>
-<dl>
-<dt>Header Continuation Offset: (&lt;offset&gt; bytes)
-<dd>This value is the offset in bytes from the beginning of the file where the
-header continuation information is located.
-<dt>Header Continuation Length: (&lt;length&gt; bytes)
-<dd>This value is the length in bytes of the header continuation information in
-the file.
-</dl>
-</dl>
-
-<hr>
-<h4><a name="SymbolTableMessage">Name: Group Message</a></h4>
-<b>Header Message Type:</b> 0x0011<BR>
-<b>Length:</b> fixed<BR>
-<b>Status:</b> Required for groups, may not be repeated.<BR>
-<b>Purpose and Description:</b> Each group has a B-tree and a
-name heap which are pointed to by this message.<BR>
-<b>Format of data:</b>
-<p>The group message is formatted as follows:
-
-<p>
-<center>
-<table border cellpadding=4 width="80%">
-<caption align=bottom>
-<b>HDF5 Object Header Group Message Layout</b>
-</caption>
-
-<tr align=center>
-<th width="25%">byte</th>
-<th width="25%">byte</th>
-<th width="25%">byte</th>
-<th width="25%">byte</th>
-
-<tr align=center>
-<td colspan=4>B-tree Address</td>
-
-<tr align=center>
-<td colspan=4>Heap Address</td>
-</table>
-</center>
-
-<P>
-<dl>
-<dt>The elements of the Group Message are described below:
-<dd>
-<dl>
-<dt>B-tree Address (&lt;offset&gt; bytes)
-<dd>This value is the offset in bytes from the beginning of the file
-where the B-tree is located.
-<dt>Heap Address (&lt;offset&gt; bytes)
-<dd>This value is the offset in bytes from the beginning of the file
-where the group name heap is located.
-</dl>
-</dl>
-
- <hr>
- <h4><a name="ModifiedMessage">Name: Object Modification Date &amp; Time</a></h4>
-
- <P class=item><B>Header Message Type:</B> 0x0012
- </P>
- <P class=item><B>Length:</B> Fixed
- </P>
- <P class=item><B>Status:</B> Optional, may not be repeated.
- </P>
-
- <P class=item><B>Description:</B> The object modification date
- and time is a timestamp which indicates
- the last modification of an object. The time is
- updated when any object header message changes according to the
- system clock where the change was posted.
- </P>
-
- <p>
- <center>
- <table border align=center cellpadding=4 width="80%">
- <caption align=top>
- <b>Modification Time Message</b>
- </caption>
-
- <tr align=center>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- <th width="25%">byte</th>
- </tr>
-
- <tr align=center>
- <td colspan=1>Version</td>
- <td colspan=3>Reserved</td>
- </tr>
-
- <tr align=center>
- <td colspan=4>Seconds After Epoch</td>
- </tr>
- </table>
- </center>
-
- <p>
- <center>
- <table align=center width="80%">
- <tr align=left>
- <th width="30%"><U><font size=+1>Field Name</font></U></th>
- <th><U><font size=+1>Description</font></U></th>
- </tr>
-
- <tr valign=top>
- <td>Version</td>
- <td>The version number for the message. This document
- describes version one of the new modification time message.</td>
- </tr>
-
- <tr valign=top>
- <td>Reserved</td>
- <td>This field is reserved and should always be zero.</td>
- </tr>
-
- <tr valign=top>
- <td>Seconds After Epoch</td>
- <td>The number of seconds since 0 hours, 0
- minutes, 0 seconds, January 1, 1970, Coordinated Universal Time.
- </tr>
- </table>
- </center>
-
-<h3><a name="SharedObjectHeader">Disk Format: Level 2b - Shared Data Object Headers</a></h3>
-<P>In order to share header messages between several dataset objects, object
-header messages may be placed into the global heap. Since these
-messages require additional information beyond the basic object header message
-information, the format of the shared message is detailed below.
-
-<BR> <BR>
-<center>
-<table border cellpadding=4 width=60%>
-<caption align=bottom>
-<B>HDF5 Shared Object Header Message</B>
-</caption>
-
-<tr align=center>
-<th width=25%>byte</th>
-<th width=25%>byte</th>
-<th width=25%>byte</th>
-<th width=25%>byte</th>
-
-<tr align=center>
-<td colspan=4>Reference Count of Shared Header Message</td>
-<tr align=center>
-<td colspan=4><br> Shared Object Header Message<br> <br></td>
-</table>
-</center>
-
-<p>
-<dl>
-<dt> The elements of the shared object header message are described below:
-<dd>
-<dl>
-<dt>Reference Count of Shared Header Message: (32-bit unsigned integer)
-<dd>This value is used to keep a count of the number of dataset objects which
-refer to this message from their dataset headers. When this count reaches zero,
-the shared message header may be removed from the global heap.
-<dt>Shared Object Header Message: (various lengths)
-<dd>The data stored for the shared object header message is formatted in the
-same way as the private object header messages described in the object header
-description earlier in this document and begins with the header message Type.
-</dl>
-</dl>
-
-
-<h3><a name="DataStorage">Disk Format: Level 2c - Data Object Data Storage</a></h3>
-<P>The data for an object is stored separately from the header
-information in the file and may not actually be located in the HDF5 file
-itself if the header indicates that the data is stored externally. The
-information for each record in the object is stored according to the
-dimensionality of the object (indicated in the dimensionality header message).
-Multi-dimensional data is stored in C order [same as current scheme], i.e. the
-"last" dimension changes fastest.
-<P>Data whose elements are composed of simple number-types are stored in
-native-endian IEEE format, unless they are specifically defined as being stored
-in a different machine format with the architecture-type information from the
-number-type header message. This means that each architecture will need to
-[potentially] byte-swap data values into the internal representation for that
-particular machine.
-<P> Data with a variable-length datatype is stored in the global heap
-of the HDF5 file. Global heap identifiers are stored in the
-data object storage.
-<P>Data whose elements are composed of pointer number-types are stored in several
-different ways depending on the particular pointer type involved. Simple
-pointers are just stored as the dataset offset of the object being pointed to with the
-size of the pointer being the same number of bytes as offsets in the file.
-Dataset region references are stored as a heap-ID which points to the following
-information within the file-heap: an offset of the object pointed to, number-type
-information (same format as header message), dimensionality information (same
-format as header message), sub-set start and end information (i.e. a coordinate
-location for each), and field start and end names (i.e. a [pointer to the]
-string indicating the first field included and a [pointer to the] string name
-for the last field).
-
-<P>Data of a compound datatype is stored as a contiguous stream of the items
-in the structure, with each item formatted according to its datatype.</p>
-
-<h3><a name="Appendix">Appendix</a></h3>
-<P>Definitions of various terms used in this document.
-</P>
-<P>The <A name="UndefinedAddress">"undefined address"</A> for a file is a
-file address with all bits set, i.e. <code>0xffff...ff</code>.
-<P>The <A name="UnlimitedDim">"unlimited size"</A> for a size is a
-value with all bits set, i.e. <code>0xffff...ff</code>.
-
-<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" --><hr>
-<center>
-<table border=0 width=98%>
-<tr><td valign=top align=left>
- <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
- <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
- <!--
- <a href="Glossary.html">Glossary</a><br>
- -->
-</td>
-<td valign=top align=right>
- <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
- <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
- <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
-</td></tr>
-</table>
-</center>
-<hr>
-<!-- #EndLibraryItem --><!--
-<address><a href="mailto:koziol@ncsa.uiuc.edu">Quincey Koziol</a></address>
-<address><a href="mailto:matzke@llnl.gov">Robb Matzke</a></address>
--->
-
-
-<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" --><address>
-<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
-<br>
-Describes HDF5 Release 1.7, the unreleased development branch; working toward HDF5 Release 1.8.0
-</address><!-- #EndLibraryItem --><!-- hhmts start -->
-Last modified: 12 July 2004
-<!-- hhmts end -->
-
-</body>
-</html>