summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/html/H5.format.html1436
1 files changed, 837 insertions, 599 deletions
diff --git a/doc/html/H5.format.html b/doc/html/H5.format.html
index 5494b20..5ecff0f 100644
--- a/doc/html/H5.format.html
+++ b/doc/html/H5.format.html
@@ -15,10 +15,15 @@ TABLE.format CAPTION { font-weight:bold; font-size:larger;}
TABLE.note {border:none; text-align:right; width:80%;}
-TABLE.desc { border:none; width:80%;}
-TABLE.desc TH { }
-TABLE.desc TR { }
-TABLE.desc TD { }
+TABLE.desc { border:solid; border-collapse:collapse; 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.list { border:none; }
+TABLE.list TR { vertical-align:top;}
+TABLE.list TH { border:none; text-decoration:underline;}
+TABLE.list TD { border:none; }
</STYLE>
@@ -257,8 +262,8 @@ TABLE.desc TD { }
items within the file, the size of each group page,
and a group entry for the root object in the file.
- <p>
- <center>
+ <br>
+ <div align=center>
<table class=format>
<caption>
HDF5 Super Block Layout
@@ -299,19 +304,24 @@ TABLE.desc TD { }
</tr>
<tr>
- <td colspan=4>Base Address<sup><font size="-2">O</font></sup></td>
+ <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>Address of Global Free-space Heap<sup><font size="-2">O</font></sup></td>
+ <td colspan=4>Base Address<sup>O</sup></td>
</tr>
<tr>
- <td colspan=4>End of File Address<sup><font size="-2">O</font></sup></td>
+ <td colspan=4>Address of Global Free-space Heap<sup>O</sup></td>
</tr>
<tr>
- <td colspan=4>Driver Information Block Address<sup><font size="-2">O</font></sup></td>
+ <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>
@@ -325,30 +335,37 @@ TABLE.desc TD { }
<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>
- </center>
+ </div>
- <p>
- <center>
- <table 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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>HDF5 File Signature</td>
- <td>This field contains a constant value and can be used to
+ <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
- <br><br><center>
- <table border align=center cellpadding=4 width="100%">
+ <center>
+ <table border align=center cellpadding=4>
<tr align=center>
- <td>decimal</td>
+ <td align=right>Decimal:</td>
<td width="8%">137</td>
<td width="8%">72</td>
<td width="8%">68</td>
@@ -360,33 +377,33 @@ TABLE.desc TD { }
</tr>
<tr align=center>
- <td>hexadecimal</td>
- <td width="8%">89</td>
- <td width="8%">48</td>
- <td width="8%">44</td>
- <td width="8%">46</td>
- <td width="8%">0d</td>
- <td width="8%">0a</td>
- <td width="8%">1a</td>
- <td width="8%">0a</td>
+ <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>ASCII C Notation</td>
- <td width="8%">\211</td>
- <td width="8%">H</td>
- <td width="8%">D</td>
- <td width="8%">F</td>
- <td width="8%">\r</td>
- <td width="8%">\n</td>
- <td width="8%">\032</td>
- <td width="8%">\n</td>
+ <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>
- This signature both identifies the file as an HDF5 file
+ <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
@@ -400,10 +417,15 @@ TABLE.desc TD { }
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.)</td>
+ signature.)
+ </P>
+
+ <P><EM>This field is present in version 0+ of the superblock.</EM>
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Version Number of the Super Block</td>
<td>
<P>This value is used to determine the format of the
@@ -413,13 +435,16 @@ TABLE.desc TD { }
determine how the information in the super block is
formatted.
</P>
- <P>The only value currently valid in this field is '0', which
- indicates that the super block is formatted as described above.
+
+ <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 valign=top>
+ <tr>
<td>Version Number of the File Free-space Information</td>
<td>
<P>This value is used to determine the format of the
@@ -429,10 +454,13 @@ TABLE.desc TD { }
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 valign=top>
+ <tr>
<td>Version Number of the Root Group Symbol Table Entry</td>
<td>
<P>This value is used to determine the format of the
@@ -446,10 +474,13 @@ TABLE.desc TD { }
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 valign=top>
+ <tr>
<td>Version Number of the Shared Header Message Format</td>
<td>
<P>This value is used to determine the format of the
@@ -463,26 +494,41 @@ TABLE.desc TD { }
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 valign=top>
+ <tr>
<td>Size of Offsets</td>
- <td>This value contains the number of bytes used to store
+ <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.</td>
+ without invalidating the internal offset locations.
+ </P>
+
+ <P><EM>This field is present in version 0+ of the superblock.</EM>
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Size of Lengths</td>
- <td>This value contains the number of bytes used to store
- the size of an object.</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 valign=top>
+ <tr>
<td>Group Leaf Node K</td>
<td>
<P>Each leaf node of a group B-tree will have at
@@ -494,27 +540,34 @@ TABLE.desc TD { }
</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 valign=top>
+ <tr>
<td>Group Internal Node K</td>
<td>
- <P>Each internal node of a group B-tree will have
- at least K pointers to other nodes but not more than 2K
- pointers. If the group has only one internal
- node then it might have fewer than K pointers.
+ <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 valign=top>
+ <tr>
<td>File Consistency Flags</td>
- <td>This value contains flags to indicate information
+ <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:
@@ -533,39 +586,79 @@ TABLE.desc TD { }
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 valign=top>
+ <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>This is the absolute file address of the first byte of
+ <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. Unless otherwise noted,
all other file addresses are relative to this base
- address.</td>
+ address.
+ </P>
+
+ <P><EM>This field is present in version 0+ of the superblock.</EM>
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Address of Global Free-space Index</td>
- <td>Free-space management is not yet defined in the HDF5
+ <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 valign=top>
+ <tr>
<td>End of File Address</td>
- <td>This is the relative file address of the first byte past
+ <td>
+ <P>This is the relative 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.</td>
+ not used.
+ </P>
+
+ <P><EM>This field is present in version 0+ of the superblock.</EM>
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Driver Information Block Address</td>
<td>
<P>This is the relative file address of the file driver
@@ -574,17 +667,26 @@ TABLE.desc TD { }
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 valign=top>
+ <tr>
<td>Root Group Symbol Table Entry</td>
- <td>This is the <A href="##SymbolTableEntry">symbol table entry</A>
+ <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.</td>
+ the group graph for the file.
+ </P>
+
+ <P><EM>This field is present in version 0+ of the superblock.</EM>
+ </P>
+ </td>
</tr>
</table>
- </center>
+ </div>
<H3><A name="DriverInfo">
Disk Format: Level 0B - File Driver Info</A></H3>
@@ -594,62 +696,69 @@ TABLE.desc TD { }
order to reopen a file. The format of the file driver information
block is:
- <p>
- <center>
- <table border align=center cellpadding=4 width="80%">
- <caption align=top>
- <B>Driver Information Block</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Driver Information Block
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
</tr>
- <tr align=center>
+ <tr>
<td>Version</td>
<td colspan=3>Reserved (zero)</td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4>Driver Information Size (4 bytes)</td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br>Driver Identification (8 bytes)<br><br></td>
</tr>
- <tr align=center>
- <td colspan=4><br><br>Driver Information<br><br><br></td>
+ <tr>
+ <td colspan=4><br><br>Driver Information (<em>n</em> bytes)<br><br><br></td>
</tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Version</td>
- <td>The version number of the driver information block. The
- file format documented here is version zero.</td>
+ <td>
+ <P>The version number of the driver information block. The
+ file format documented here is version zero.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Driver Information Size</td>
- <td>The size in bytes of the Driver Information part of this
- structure.</td>
+ <td>
+ <P>The size in bytes of the Driver Information part of this
+ structure.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Driver Identification</td>
- <td>This is an eight-byte ASCII string without null
+ <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
@@ -658,6 +767,8 @@ TABLE.desc TD { }
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.
@@ -665,10 +776,13 @@ TABLE.desc TD { }
to eight characters. Subsequent identifiers will be created by
substituting sequential numerical values for the final character,
starting with zero.)
- <p>
+ </P>
+ <P>
Identification for user-defined drivers
is arbitrary but should be unique and avoid the four character
- prefix "NCSA".</td>
+ prefix "NCSA".
+ </P>
+ </td>
</tr>
<tr valign=top>
@@ -679,7 +793,7 @@ TABLE.desc TD { }
<code>H5FD_sb_decode</code> functions.</td>
</tr>
</table>
- </center>
+ </div>
<BR>
<HR>
@@ -708,97 +822,100 @@ TABLE.desc TD { }
Aside from that difference, internal nodes and leaf nodes
are identical.
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>B-tree Nodes</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ B-tree Nodes
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
- <tr align=center>
+ <tr>
<td colspan=4>Signature</td>
- <tr align=center>
+ <tr>
<td>Node Type</td>
<td>Node Level</td>
<td colspan=2>Entries Used</td>
- <tr align=center>
- <td colspan=4>Address of Left Sibling<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of Left Sibling<sup>O</sup></td>
- <tr align=center>
- <td colspan=4>Address of Right Sibling<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of Right Sibling<sup>O</sup></td>
- <tr align=center>
+ <tr>
<td colspan=4>Key 0 (variable size)</td>
- <tr align=center>
- <td colspan=4>Address of Child 0<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of Child 0<sup>O</sup></td>
- <tr align=center>
+ <tr>
<td colspan=4>Key 1 (variable size)</td>
- <tr align=center>
- <td colspan=4>Address of Child 1<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of Child 1<sup>O</sup></td>
- <tr align=center>
+ <tr>
<td colspan=4>...</td>
- <tr align=center>
+ <tr>
<td colspan=4>Key 2<em>K</em> (variable size)</td>
- <tr align=center>
- <td colspan=4>Address of Child 2<em>K</em><sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of Child 2<em>K</em><sup>O</sup></td>
- <tr align=center>
+ <tr>
<td colspan=4>Key 2<em>K</em>+1 (variable size)</td>
</table>
- <table width="80%" border=0>
+ <table class=note>
<tr><td>
- <div align=right>
(Items marked with an 'O' the above table are
<br>
of the size specified in "Size of Offsets.")
- </div>
</td></tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Signature</td>
- <td>The ASCII character string "<code>TREE</code>" is
+ <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.</td>
+ reconstructing a damaged file.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Node Type</td>
- <td>Each B-link tree points to a particular type of data.
+ <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.
- <br>
- <table>
+ </P>
+
+ <table class=list>
<tr>
- <th width="30%"><U>Node Type</U></th>
- <th width="70%" align=left><U>Description</U></th>
+ <th width="30%">Node Type</th>
+ <th width="70%" align=left>Description</th>
</tr>
<tr>
<td align=center>0</td>
@@ -812,57 +929,73 @@ TABLE.desc TD { }
</td>
</tr>
- <tr valign=top>
+ <tr>
<td>Node Level</td>
- <td>The node level indicates the level at which this node
+ <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.</td>
+ damanged trees.
+ </P>
+ </td>
</tr>
<tr valign=top>
<td>Entries Used</td>
- <td>This determines the number of children to which this
+ <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.</td>
+ values.
+ </P>
+ </td>
</tr>
<tr valign=top>
<td>Address of Left Sibling</td>
- <td>This is the relative file address of the left sibling of
+ <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>.</td>
+ is the <A href="#UndefinedAddress">undefined address</A>.
+ </P>
+ </td>
</tr>
<tr valign=top>
<td>Address of Right Sibling</td>
- <td>This is the relative file address of the right sibling of
+ <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>.</td>
+ field is the <A href="#UndefinedAddress">undefined address</A>.
+ </P>
+ </td>
</tr>
<tr valign=top>
<td>Keys and Child Pointers</td>
- <td>Each tree has 2<em>K</em>+1 keys with 2<em>K</em>
+ <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.</td>
+ <em>N</em> child pointers and <em>N</em>+1 keys.
+ </P>
+ </td>
</tr>
<tr valign=top>
<td>Key</td>
- <td>The format and size of the key values is determined by
+ <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
@@ -870,37 +1003,42 @@ TABLE.desc TD { }
<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>
+
+ <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>
- <tr valign=top align=left>
- <td width=40%>A single field of <i>Size of Lengths</i>
- bytes</td>
+ <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>
+ that key describes.
+ </td>
</tr>
</table>
</center>
- <p>
+ </P>
+
+ <P>
For nodes of node type 1 (chunked raw data nodes), the key is
formatted as follows:
<center>
- <table>
- <tr valign=top align=left>
- <td width=40%>Bytes 1-4</td>
+ <table class=list>
+ <tr>
+ <td width=30%>Bytes 1-4:</td>
<td>Size of chunk in bytes.</td>
</tr>
- <tr valign=top align=left>
- <td>Bytes 4-8</td>
+ <tr>
+ <td>Bytes 4-8:</td>
<td>Filter mask, a 32-bit bitfield indicating which
filters have been applied to that chunk.</td>
</tr>
- <tr valign=top align=left>
- <td><em>N</em> 64-bit fields</td>
+ <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
@@ -911,7 +1049,8 @@ TABLE.desc TD { }
</tr>
</table>
</center>
- </td>
+ </P>
+ </td>
</tr>
<tr valign=top>
@@ -931,27 +1070,27 @@ TABLE.desc TD { }
</td>
</tr>
</table>
- </center>
+ </div>
<p>
Conceptually, each B-tree node looks like this:
-
<center>
<table>
<tr valign=top align=center>
- <td>key[0]</td><td>&nbsp;&nbsp;</td>
- <td>child[0]</td><td>&nbsp;&nbsp;</td>
- <td>key[1]</td><td>&nbsp;&nbsp;</td>
- <td>child[1]</td><td>&nbsp;&nbsp;</td>
- <td>key[2]</td><td>&nbsp;&nbsp;</td>
- <td>...</td><td>&nbsp;&nbsp;</td>
- <td>...</td><td>&nbsp;&nbsp;</td>
- <td>key[<i>N</i>-1]</td><td>&nbsp;&nbsp;</td>
- <td>child[<i>N</i>-1]</td><td>&nbsp;&nbsp;</td>
+ <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).
@@ -1006,67 +1145,76 @@ TABLE.desc TD { }
contains <em>K</em> symbols and the other contains
<em>K</em>+1 symbols.
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Group Node (A Leaf of a B-tree)</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Group Node (A Leaf of a B-tree)
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
- <tr align=center>
+ <tr>
<td colspan=4>Signature</td>
- <tr align=center>
+ <tr>
<td>Version Number</td>
<td>Reserved (0)</td>
<td colspan=2>Number of Symbols</td>
- <tr align=center>
+ <tr>
<td colspan=4><br><br>Group Entries<br><br><br></td>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Signature</td>
- <td>The ASCII character string "<code>SNOD</code>" is
+ <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.</td>
+ reconstructing a damaged file.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Version Number</td>
- <td>The version number for the group node. This
+ <td>
+ <P>The version number for the group node. This
document describes version 1. (There is no version '0'
- of the group node)</td>
+ of the group node)
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Number of Symbols</td>
- <td>Although all group nodes have the same length,
+ <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.</td>
+ entries contain undefined values.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Group Entries</td>
<td>
<P>Each symbol has an entry in the group node.
@@ -1074,10 +1222,11 @@ TABLE.desc TD { }
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>
- </center>
+ </div>
<h3><a name="SymbolTableEntry">
Disk Format: Level 1C - Group Entry </a></h3>
@@ -1088,124 +1237,138 @@ TABLE.desc TD { }
include space for caching certain constant metadata from the
object header.
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Group Entry</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Group Entry
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
</tr>
- <tr align=center>
- <td colspan=4>Name Offset<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Name Offset<sup>O</sup></td>
</tr>
- <tr align=center>
- <td colspan=4>Object Header Address<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Object Header Address<sup>O</sup></td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4>Cache Type</td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4>Reserved</td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br><br>Scratch-pad Space (16 bytes)<br><br><br></td>
</tr>
</table>
- <table width="80%" border=0>
+ <table class=note>
<tr><td>
- <div align=right>
(Items marked with an 'O' the above table are
<br>
of the size specified in "Size of Offsets.")
- </div>
</td></tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Name Offset</td>
- <td>This is the byte offset into the group local
+ <td>
+ <P>This is the byte offset into the group local
heap for the name of the object. The name is null
- terminated.</td>
+ terminated.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Object Header Address</td>
- <td>Every object has an object header which serves as a
+ <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.</td>
+ cached in the scratch-pad space.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Cache Type</td>
- <td>The cache type is determined from the object header.
+ <td>
+ <P>The cache type is determined from the object header.
It also determines the format for the scratch-pad space:
<br>
- <table>
- <tr valign=top align=left>
- <td width="10%">0</td>
+ <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 valign=top align=left>
- <td>1</td>
+ <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 valign=top align=left>
- <td>2</td>
+ <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 valign=top align=left>
- <td><em>N</em></td>
+ <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 valign=top>
+ <tr>
<td>Reserved</td>
- <td>These four bytes are present so that the scratch-pad
+ <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.</td>
+ always set to zero.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Scratch-pad Space</td>
- <td>This space is used for different purposes, depending
+ <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
@@ -1213,13 +1376,17 @@ TABLE.desc TD { }
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.</td>
+ one.
+ </P>
+ </td>
</tr>
</table>
- </center>
+ </div>
<h4>Format of the Scratch-pad Space</h4>
@@ -1235,216 +1402,235 @@ TABLE.desc TD { }
contains cached metadata for another object header
in the following format:
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Object Header Scratch-pad Format</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Object Header Scratch-pad Format
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
- <tr align=center>
- <td colspan=4>Address of B-tree<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of B-tree<sup>O</sup></td>
- <tr align=center>
- <td colspan=4>Address of Name Heap<sup><font size=-2>O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of Name Heap<sup>O</sup></td>
</table>
- <table width="80%" border=0>
+ <table class=note>
<tr><td>
- <div align=right>
(Items marked with an 'O' the above table are
<br>
of the size specified in "Size of Offsets.")
- </div>
</td></tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Address of B-tree</td>
- <td>This is the file address for the root of the
- group's B-tree.</td>
+ <td>
+ <P>This is the file address for the root of the
+ group's B-tree.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Address of Name Heap</td>
- <td>This is the file address for the group's local
- heap, in which are stored the group's symbol names.</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>
- </center>
+ </div>
- <p>If the Cache Type field contains the value two
+ <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:
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Symbolic Link Scratch-pad Format</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Symbolic Link Scratch-pad Format
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4>Offset to Link Value</td>
</tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Offset to Link Value</td>
- <td>The value of a symbolic link (that is, the name of the
+ <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.</td>
+ the start of the link value, which is null terminated.
+ </P>
+ </td>
</tr>
</table>
- </center>
+ </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
+ <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>
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <b>Local Heaps</b>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Local Heap
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4>Signature</td>
</tr>
- <tr align=center>
+ <tr>
<td>Version</td>
<td colspan=3>Reserved (zero)</td>
</td>
- <tr align=center>
- <td colspan=4>Data Segment Size<sup><font size="-2">L</font></sup></td>
+ <tr>
+ <td colspan=4>Data Segment Size<sup>L</sup></td>
</tr>
- <tr align=center>
- <td colspan=4>Offset to Head of Free-list<sup><font size="-2">L</font></sup></td>
+ <tr>
+ <td colspan=4>Offset to Head of Free-list<sup>L</sup></td>
</tr>
- <tr align=center>
- <td colspan=4>Address of Data Segment<sup><font size="-2">O</font></sup></td>
+ <tr>
+ <td colspan=4>Address of Data Segment<sup>O</sup></td>
</tr>
</table>
- <table width="80%" border=0>
+ <table class=note>
<tr><td>
- <div align=right>
(Items marked with an 'L' the above table are
<br>
of the size specified in "Size of Lengths.")
- </div>
</td></tr>
<tr><td>
- <div align=right>
(Items marked with an 'O' the above table are
<br>
of the size specified in "Size of Offsets.")
- </div>
</td></tr>
</table>
- </center>
+ </div>
<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>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Signature</td>
- <td>The ASCII character string "<code>HEAP</code>"
+ <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.</td>
+ damaged file.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Version</td>
- <td>Each local heap has its own version number so that new
+ <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 valign=top>
+ <tr>
<td>Data Segment Size</td>
- <td>The total amount of disk memory allocated for the heap
+ <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.</td>
+ unused space in the heap holds a linked list of free blocks.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Offset to Head of Free-list</td>
- <td>This is the offset within the heap data segment of the
+ <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 &lt;Size of Lengths&gt; bytes that
+ free block). The free block contains "Size of Lengths" bytes that
are the offset of the next free chunk (or the
- <A href="#UndefinedAddress">undefined address</A>
- if this is the last free chunk) followed by &lt;Size of Lengths&gt;
- bytes that store the size of this free chunk.</td>
+ <A href="#UndefinedAddress">undefined address</A> if this is the
+ last free chunk) followed by "Size of Lengths" bytes that store
+ the size of this free chunk.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Address of Data Segment</td>
- <td>The data segment originally starts immediately after
+ <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.</td>
+ file.
+ </P>
+ </td>
</tr>
</table>
</center>
@@ -1453,7 +1639,7 @@ TABLE.desc TD { }
<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
+ <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:
@@ -1462,23 +1648,19 @@ TABLE.desc TD { }
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.
-
- <br><br>
<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.
-
- <br><br>
<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.
- <br><br>
</ol>
+ </P>
- <p>The implementation of the heap makes use of the memory
+ <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.
@@ -1486,195 +1668,223 @@ TABLE.desc TD { }
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>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>A Global Heap Collection</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ A Global Heap Collection
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4>Signature</td>
</tr>
- <tr align=center>
+ <tr>
<td>Version</td>
<td colspan=3>Reserved (zero)</td>
</td>
- <tr align=center>
+ <tr>
<td colspan=4>Collection Size</td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br>Global Heap Object 1<br><br></td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br>Global Heap Object 2<br><br></td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br>...<br><br></td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br>Global Heap Object <em>N</em><br><br></td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br>Global Heap Object 0 (free space)<br><br></td>
</tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Signature</td>
- <td>The ASCII character string "<code>GCOL</code>"
+ <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.</td>
+ damaged file.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Version</td>
- <td>Each collection has its own version number so that new
+ <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 valign=top>
+ <tr>
<td>Collection Data Size</td>
- <td>This is the size in bytes of the entire collection
+ <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 and which allows for 170 16-byte heap
- objects plus their overhead.</td>
+ objects plus their overhead.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Global Heap Object 1 through <em>N</em></td>
- <td>The objects are stored in any order with no
- intervening unused space.</td>
+ <td>
+ <P>The objects are stored in any order with no
+ intervening unused space.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Global Heap Object 0</td>
- <td>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.
+ <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>
- </center>
+ </div>
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Global Heap Object</B>
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Global Heap Object
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
</tr>
- <tr align=center>
+ <tr>
<td colspan=2>Object ID</td>
<td colspan=2>Reference Count</td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4>Reserved</td>
</tr>
- <tr align=center>
- <td colspan=4>Object Data Size<sup><font size="-2">L</font></sup></td>
+ <tr>
+ <td colspan=4>Object Data Size<sup>L</sup></td>
</tr>
- <tr align=center>
+ <tr>
<td colspan=4><br>Object Data<br><br></td>
</tr>
</table>
- <table width="80%" border=0>
+ <table class=note>
<tr><td>
- <div align=right>
(Items marked with an 'L' the above table are
<br>
of the size specified in "Size of Lengths.")
- </div>
</td></tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
+ <tr>
<td>Object ID</td>
- <td>Each object has a unique identification number within a
+ <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.</td>
+ collection.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Reference Count</td>
- <td>All heap objects have a reference count field. An
+ <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.</td>
+ count for Object 0 is always zero.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Reserved</td>
- <td>Zero padding to align next field on an 8-byte
- boundary.</td>
+ <td>
+ <P>Zero padding to align next field on an 8-byte boundary.
+ </P>
+ </td>
</tr>
- <tr valign=top>
- <td>Object Size</td> <td>This is the size of the the fields
- above plus the object data stored for the object. The
- actual storage size is rounded up to a multiple of
- eight.</td>
+ <tr>
+ <td>Object Size</td>
+ <td>
+ <P>This is the size of the the fields above plus the object data
+ stored for the object. The actual storage size is rounded up to a
+ multiple of eight.
+ </P>
+ </td>
</tr>
- <tr valign=top>
+ <tr>
<td>Object Data</td>
- <td>The object data is treated as a one-dimensional array
- of bytes to be interpreted by the caller.</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>
- </center>
+ </div>
<h3><a name="FreeSpaceIndex">Disk Format: Level 1F - Free-space Index</a></h3>
@@ -1686,7 +1896,7 @@ TABLE.desc TD { }
that pointer is currently required to be the
<A href="#UndefinedAddress">undefined address</A>.
- <p>The free-space index is not otherwise publicly defined at this time.
+ <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,
@@ -1781,22 +1991,24 @@ TABLE.desc TD { }
<h2><a name="DataObject">Disk Format: Level 2 - Data Objects </a></h2>
- <p>Data objects contain the real information in the file. These
+ <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
+ <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>
+ Disk Format: Level 2A - Data Object Headers</a></h3>
- <p>The header information of an object is designed to encompass
+ <P>The header information of an object is designed to encompass
all the information about an object which would be desired to be
known, except for the data itself. This information includes
the dataspace, datatype, information about how the data
@@ -1807,194 +2019,233 @@ TABLE.desc TD { }
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.
+ </P>
- <p>
- <center>
- <table border cellpadding=4 width="80%">
- <caption align=top>
- <B>Object Headers</B>
+ <P>Header messages are aligned on 8-byte boundaries.
+ </P>
+
+ <br>
+ <div align=center>
+ <table class=format>
+ <caption>
+ Object Headers
</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>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
+ <th>byte</th>
</tr>
- <tr align=center>
- <td colspan=1 width="25%">Version Number</td>
- <td colspan=1 width="25%">Reserved</td>
- <td colspan=2 width="50%">Number of Header Messages</td>
+ <tr>
+ <td>Version</td>
+ <td>Reserved (zero)</td>
+ <td colspan=2>Number of Header Messages</td>
</tr>
- <tr align=center>
+
+ <tr>
<td colspan=4>Object Reference Count</td>
</tr>
- <tr align=center>
- <td colspan=4><br>Total Object Header Size<br><br></td>
+
+ <tr>
+ <td colspan=4>Object Header Size</td>
</tr>
- <tr align=center>
+
+ <tr>
<td colspan=2>Header Message Type #1</td>
<td colspan=2>Size of Header Message Data #1</td>
</tr>
- <tr align=center>
- <td>Flags</td>
- <td colspan=3>Reserved</td>
+
+ <tr>
+ <td>Header Message #1 Flags</td>
+ <td colspan=3>Reserved (zero)</td>
</tr>
- <tr align=center>
+
+ <tr>
<td colspan=4><br>Header Message Data #1<br><br></td>
</tr>
- <tr align=center>
+
+ <tr>
<td colspan=4>.<br>.<br>.<br></td>
</tr>
- <tr align=center>
+
+ <tr>
<td colspan=2>Header Message Type #n</td>
<td colspan=2>Size of Header Message Data #n</td>
</tr>
- <tr align=center>
- <td>Flags</td>
- <td colspan=3>Reserved</td>
+
+ <tr>
+ <td>Header Message #n Flags</td>
+ <td colspan=3>Reserved (zero)</td>
</tr>
- <tr align=center>
+
+ <tr>
<td colspan=4><br>Header Message Data #n<br><br></td>
</tr>
</table>
- </center>
+ </div>
- <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>
+ <br>
+ <div align=center>
+ <table class=desc>
+ <tr>
+ <th width="30%">Field Name</th>
+ <th>Description</th>
</tr>
- <tr valign=top>
- <td>Version number</td>
- <td>This value is used to determine the format of the
+ <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)).</td>
- </tr>
-
- <tr valign=top>
- <td>Reserved</td>
- <td>Always set to zero.</td>
+ zero (0)).
+ </P>
+ </td>
</tr>
- <tr valign=top>
- <td>Number of header messages</td>
- <td>This value determines the number of messages listed in
- this object header. This provides a fast way for software
- to prepare storage for the messages in the header.</td>
+ <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 valign=top>
+ <tr>
<td>Object Reference Count</td>
- <td>This value specifies the number of references to this
- object within the current file. References to the
- data object from external files are not tracked.</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 valign=top>
- <td>Total Object Header Size</td>
- <td>This value specifies the total number of bytes of header
- message data following this length field for the current
- message as well as any continuation data located elsewhere
- in the file.</td>
+ <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 valign=top>
+ <tr>
<td>Header Message Type</td>
- <td>The header message type specifies the type of
- information included in the header message data following
- the type along with a small amount of other information.
- Bit 15 of the message type is set if the message is
- constant (constant messages cannot be changed since they
- may be cached in group entries throughout the
- file). The header message types for the pre-defined
- header messages will be included in further discussion
- below.</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 valign=top>
+ <tr>
<td>Size of Header Message Data</td>
- <td>This value specifies the number of bytes of header
+ <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.</td>
+ bytes.
+ </P>
+ </td>
</tr>
- <tr valign=top>
- <td>Flags</td>
- <td>This is a bit field with the following definition:
- <dl>
- <dt><code>0</code>
- <dd>If set, the message data is constant. This is used
- for messages like the datatype message of a dataset.
- <dt><code>1</code>
- <dd>If set, the message is stored in the global heap and
- 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.
- <dt><code>2-7</code>
- <dd>Reserved
- </dl>
- </td>
+ <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 width="70%" align=left>Description</th>
+ </tr>
- <tr valign=top>
+ <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 and
+ 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>The format and length of this field is determined by the
+ <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.</td>
+ size a multiple of eight.
+ </P>
+ </td>
</tr>
</table>
- </center>
+ </div>
- <p>The header message types and the message data associated with
+ <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>
- <b>Type: </b>0x0000<br>
- <b>Length:</b> varies<br>
- <b>Status:</b> Optional, may be repeated.<br>
- <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.
- [Probably one which has been deleted for some reason.]<br>
- <b>Format of Data:</b> Unspecified.<br>
-
-<!-- Delete examples throughout doc
- <b>Examples:</b> None.
--->
+ <B>Type: </B>0x0000<br>
+ <B>Length:</B> varies<br>
+ <B>Status:</B> Optional, may be repeated.<br>
+ <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.]<br>
+ <B>Format of Data:</B> Unspecified.<br>
+ <br>
<hr>
<h4><a name="SimpleDataSpace">Name: Simple Dataspace</a></h4>
- <b>Type: </b>0x0001<br>
- <b>Length:</b> Varies according to the number of dimensions,
- as described in the following table<br>
- <b>Status:</b> The <em>Simple Dataspace</em> message is required
- and may not be repeated. This message is currently used with
- datasets and named dataspaces.<br>
+ <B>Type: </B>0x0001<br>
+ <B>Length:</B> Varies according to the number of dimensions,
+ as described in the following table.<br>
+ <B>Status:</B> The <em>Simple Dataspace</em> message is required
+ and may not be repeated.<br>
- <p>The <em>Simple Dataspace</em> message describes the number
+ <P>The <em>Simple Dataspace</em> message describes the number
of dimensions 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
@@ -2002,8 +2253,8 @@ TABLE.desc TD { }
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 (as of HDF5 Release 1.2). It is not described
- in this document.)</i>
+ not yet implemented. It is not described in this document.)</i>
+ </P>
<p>
<center>
@@ -2436,9 +2687,6 @@ TABLE.desc TD { }
<td colspan=4>Grid Point Locations<br>.<br>.<br></td>
</table>
</center>
-
- <h4><a name="DataSpaceExample">Examples:</a></h4>
- Need some good examples, this is complex!
-->
@@ -3167,11 +3415,6 @@ TABLE.desc TD { }
of dataset data, so the format will be determined by the dataset
format.
-<!-- Delete examples throughout doc
- <h4><a name="CompactDataStorageExample">Examples:</a></h4>
- [very straightforward]
--->
-
<hr>
<h4><a name="ExternalFileListMessage">Name: Data Storage -
External Data Files</a></h4>
@@ -4095,11 +4338,6 @@ the file.
</dl>
</dl>
-<!-- Delete examples throughout doc
-<h4><a name="ContinuationExample">Examples:</a></h4>
- [straightforward]
--->
-
<hr>
<h4><a name="SymbolTableMessage">Name: Group Message</a></h4>
<b>Type:</b> 0x0011<BR>