1998-10-30 09:09:28 +08:00
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
1998-07-15 03:00:46 +08:00
< html >
< head >
1998-10-30 09:09:28 +08:00
< title > DDL for HDF5< / title >
1998-07-15 03:00:46 +08:00
< / head >
1998-12-22 06:52:56 +08:00
< body bgcolor = "#FFFFFF" >
< hr >
< center >
< table border = 0 width = 98% >
< tr > < td valign = top align = left >
< a href = "H5.intro.html" > Introduction to HDF5< / a > < br >
< a href = "RM_H5Front.html" > HDF5 Reference Manual< / a > < br >
< a href = "index.html" > Other HDF5 documents and links< / a > < br >
<!--
< a href = "Glossary.html" > Glossary< / a > < br >
-->
< / td >
< td valign = top align = right >
And in this document, the
< a href = "H5.user.html" > HDF5 User's Guide< / a > :
< a href = "Files.html" > Files< / a >
< br >
< a href = "Datasets.html" > Datasets< / a >
< a href = "Datatypes.html" > Data Types< / a >
< a href = "Dataspaces.html" > Dataspaces< / a >
< a href = "Groups.html" > Groups< / a >
< a href = "References.html" > References< / a >
< br >
< a href = "Attributes.html" > Attributes< / a >
< a href = "Properties.html" > Property Lists< / a >
< a href = "Errors.html" > Error Handling< / a >
< a href = "Filters.html" > Filters< / a >
< a href = "Caching.html" > Caching< / a >
< br >
< a href = "Chunking.html" > Chunking< / a >
< a href = "Debugging.html" > Debugging< / a >
< a href = "Environment.html" > Environment< / a >
DDL
< a href = "Ragged.html" > Ragged Arrays< / a >
<!--
< hr >
And in this document, the
< a href = "H5.user.html" > HDF5 User's Guide< / a > :
< a href = "Attributes.html" > H5A< / a >
< a href = "Datasets.html" > H5D< / a >
< a href = "Errors.html" > H5E< / a >
< a href = "Files.html" > H5F< / a >
< a href = "Groups.html" > H5G< / a >
< a href = "Properties.html" > H5P< / a >
< a href = "References.html" > H5R & H5I< / a >
< a href = "Ragged.html" > H5RA< / a >
< a href = "Dataspaces.html" > H5S< / a >
< a href = "Datatypes.html" > H5T< / a >
< a href = "Filters.html" > H5Z< / a >
< a href = "Caching.html" > Caching< / a >
< a href = "Chunking.html" > Chunking< / a >
< a href = "Debugging.html" > Debugging< / a >
< a href = "Environment.html" > Environment< / a >
< a href = "ddl.html" > DDL< / a >
-->
< / td > < / tr >
< / table >
< / center >
< hr >
1998-10-30 09:09:28 +08:00
< h1 > DDL in BNF for HDF5< / h1 >
< h2 > 1. Introduction< / h2 >
This document contains the data description language (DDL) for an HDF5 file.
The description is in Backus-Naur Form.
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< h2 > 2. Explanation of Symbols< / h2 >
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
This section contains a brief explanation of the symbols used in the DDL.
1998-07-15 03:00:46 +08:00
< PRE >
1998-10-30 09:09:28 +08:00
::= defined as
< tname> a token with the name tname
< a> | < b> one of < a> or < b>
< a> < FONT SIZE = 1.7 > opt< / FONT > zero or one occurrence of < a>
< a> * zero or more occurrence of < a>
< a> + one or more occurrence of < a>
TBD To Be Decided
< / pre >
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< h2 > 3. The DDL< / h2 >
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< dir >
< pre >
1999-06-25 02:52:06 +08:00
< file> ::= HDF5 < file_name> { < file_boot_block> < FONT SIZE = 1.7 > opt< / FONT > < root_group> }
1998-07-15 03:00:46 +08:00
< file_name> ::= < identifier>
1998-10-30 09:09:28 +08:00
< file_boot_block> ::= BOOT_BLOCK { < boot_block_content> }
1998-07-15 03:00:46 +08:00
< boot_block_content> ::= TBD
1998-10-30 09:09:28 +08:00
< root_group> ::= GROUP "/" { < unamed_datatype> * < group_attribute> * < group_member> * }
1999-06-25 02:52:06 +08:00
< unamed_datatype& gt ::= DATATYPE < unamed_type_name> { < compound_type> }
1998-10-30 09:09:28 +08:00
< unamed_type_name> ::= the assigned name for unamed type is in the form of
#oid1:oid2, where oid1 and oid2 are the object ids of the type
1998-12-22 06:54:16 +08:00
< compound_type> ::= < member_type_def> +
1998-08-28 05:44:08 +08:00
1998-12-22 06:54:16 +08:00
< member_type_def> ::= < scalar_type_def> | < array_type_def>
1998-08-28 05:44:08 +08:00
1999-06-25 02:52:06 +08:00
< scalar_type_def> ::= < atomic_type> < field_name> ;
1998-12-22 06:54:16 +08:00
1999-06-25 02:52:06 +08:00
< atomic_type> ::= < integer> | < float> | < time> | < string> | < bitfield> | < opaque> |
< reference> | < enum>
1998-12-22 06:54:16 +08:00
1999-02-10 02:07:59 +08:00
< integer> ::= H5T_STD_I8BE | H5T_STD_I8LE | H5T_STD_I16BE | H5T_STD_I16LE | H5T_STD_I32BE |
1998-12-22 06:54:16 +08:00
H5T_STD_I32LE | H5T_STD_I64BE | H5T_STD_I64LE | H5T_STD_U8BE |
H5T_STD_U8LE | H5T_STD_U16BE | H5T_STD_U16LE | H5T_STD_U32BE |
H5T_STD_U32LE | H5T_STD_U64BE | H5T_STD_U64LE | H5T_NATIVE_CHAR |
H5T_NATIVE_UCHAR | H5T_NATIVE_SHORT | H5T_NATIVE_USHORT |
H5T_NATIVE_INT | H5T_NATIVE_UINT | H5T_NATIVE_LONG | H5T_NATIVE_ULONG |
H5T_NATIVE_LLONG | H5T_NATIVE_ULLONG
< float> ::= H5T_IEEE_F32BE | H5T_IEEE_F32LE | H5T_IEEE_F64BE | H5T_IEEE_F64LE |
H5T_NATIVE_FLOAT | H5T_NATIVE_DOUBLE | H5T_NATIVE_LDOUBLE
< time> ::= TBD
< string> ::= { STRSIZE < strsize> ;
STRPAD < strpad> ;
CSET < cset> ;
CTYPE < ctype> ; }
< strsize> ::= an integer
< strpad> ::= H5T_STR_NULLTERM | H5T_STR_NULLPAD | H5T_STR_SPACEPAD
< cset> ::= H5T_CSET_ASCII
< ctype> ::= H5T_C_S1 | H5T_FORTRAN_S1
< bitfield> ::= TBD
< opaque> ::= TBD
1998-10-30 09:09:28 +08:00
1999-06-25 02:52:06 +08:00
< reference> ::= H5T_REFERENCE
1998-10-30 09:09:28 +08:00
< field_name> ::= < identifier>
1999-06-25 02:52:06 +08:00
< array_type_def> ::= < atomic_type> < field_name> < dim_sizes> ;
1998-10-30 09:09:28 +08:00
1999-06-25 02:52:06 +08:00
< dim_sizes> ::= [dimsize1][dimsize2]..., where dimsize1, dimsize2 are integers
1998-07-15 03:00:46 +08:00
< group_attribute> ::= < attribute>
1999-06-25 02:52:06 +08:00
< attribute> ::= ATTRIBUTE < attr_name& gt { < datatype>
1998-10-30 09:09:28 +08:00
< dataspace>
< data> < FONT SIZE = 1.7 > opt< / FONT > }
// < datatype> and < dataspace> must appear before < data> .
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< attr_name> ::= < identifier& gt
< datatype> ::= DATATYPE { < atomic_type> } |
1999-06-25 02:52:06 +08:00
DATATYPE { < compound_type> } |
1998-12-22 06:54:16 +08:00
DATATYPE { < named_type> }
1998-07-15 03:00:46 +08:00
1999-06-25 02:52:06 +08:00
< enum> ::= H5T_ENUM { < integer> ; < enum_def> + }
< enum_def> ::= < enum_symbol> < enum_val> ;
< enum_symbol> ::= < identifier>
< enum_val> ::= an integer;
< named_type> ::= < path_name>
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< path_name> ::= < identifier& gt
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< dataspace> ::= DATASPACE { SCALAR } |
DATASPACE { SIMPLE < current_dims> / < max_dims> } |
DATASPACE { COMPLEX < ds_definition> + }
1999-06-25 02:52:06 +08:00
DATASPACE { < dataspace_name> } |
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< current_dims> ::= (< i > i< FONT SIZE = 1.0 > 1< / i > < / FONT > , < i > i< FONT SIZE = 1.0 > 2< / i > < / FONT > , ... ), where < i > i< FONT SIZE = 1.0 > k< / i > < / FONT > is an integer, < i > k< / i > = 1,2,...
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< max_dims> ::= (< i > i< FONT SIZE = 1.0 > 1< / i > < / FONT > , < i > i< FONT SIZE = 1.0 > 2< / i > < / FONT > , ... ) where < i > i< FONT SIZE = 1.0 > k< / i > < / FONT > is an integer or H5S_UNLIMITED
< ds_definition> ::= TBD
1998-07-15 03:00:46 +08:00
< dataspace_name> ::= < identifier>
1998-12-22 06:54:16 +08:00
< data> ::= DATA { < scalar_space_data> | < simple_space_data> | < complex_space_data> }
< scalar_space_data> ::= < atomic_scalar_data> | < compound_scalar_data>
1998-07-15 03:00:46 +08:00
1999-06-25 02:52:06 +08:00
< atomic_scalar_data> :: = < integer_data> | < float_data> | < time_data> | < string_data> |
< bitfield_data> | < opaque_data> | < enum_data> | < reference_data>
< integer_data> ::= an integer
< float_data> ::= a floating point number
< time_data> ::= TBD
< string_data> ::= a string
1999-02-10 02:07:59 +08:00
// A string is enclosed in double quotes.
1999-06-25 02:52:06 +08:00
// If a string is displayed on more than one line, string concatenate operator '//'is used.
< bitfield_data> ::= TBD
< opaque_data> ::= TBD
< enum_data> ::= an integer
//maybe will be < enum_symbol> in the future
< reference_data> ::= < object_ref_data> | < data_region_data> | NULL
< object_ref_data> ::= < object_type> < object_id>
< object_type> ::= DATASET | GROUP | DATATYPE
< object_id> ::= an integer:an integer
< data_region_data> ::= H5T_STD_REF_DSETREG < object_id> {< data_region_data_info> ,
< data_region_data_info> , ...}
< data_region_data_info> ::= < region_info> | < point_info>
< region_info> ::= (< lower_bound> :< upper_bound> , < lower_bound> :< upper_bound> , ...)
< lower_bound> ::= an integer
< upper_bound> ::= an integer
< point_info> ::= (an integer, an integer, ...)
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< compound_scalar_data> ::= { [ < member_data> ], [ < member_data> ], ... }
< member_data> ::= < atomic_scalar_data> | < atomic_simple_data>
1998-07-15 03:00:46 +08:00
1999-06-25 02:52:06 +08:00
< atomic_simple_data> :: = < atomic_element> , < atomic_element> , ...
1998-12-22 06:54:16 +08:00
< atomic_element> ::= < atomic_scalar_data>
< simple_space_data> :: = < atomic_simple_data> | < compound_simple_data>
< compound_simple_data> ::= < compoud_element> , < compound_element> , ...
< compound_element> ::= < compound_scalar_data>
< complex_space_data> ::= TBD
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< group_member> ::= < named_datatype> | < named_dataspace> | < group> | < dataset> |
< softlink>
1998-07-15 03:00:46 +08:00
1999-06-25 02:52:06 +08:00
< named_datatype> ::= DATATYPE < type_name> { < compound_type> }
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< type_name> ::= < identifier>
1998-07-15 03:00:46 +08:00
1998-12-22 06:54:16 +08:00
< named_dataspace> ::= TBD
1998-07-15 03:00:46 +08:00
1999-06-25 02:52:06 +08:00
< group> ::= GROUP < group_name> { < hardlink> } |
GROUP < group_name> { < group_attribute> * < group_member> * }
1998-10-30 09:09:28 +08:00
1998-07-15 03:00:46 +08:00
< group_name> ::= < identifier>
1999-06-25 02:52:06 +08:00
< hardlink> ::= HARDLINK < path_name>
1998-12-22 06:54:16 +08:00
1999-06-25 02:52:06 +08:00
< dataset> ::= DATASET < dataset_name> { < hardlink> } |
DATASET < dataset_name> { < datatype>
1998-07-15 03:00:46 +08:00
< dataspace>
< storagelayout> < FONT SIZE = 1.7 > opt< / FONT >
< compression> < FONT SIZE = 1.7 > opt< / FONT >
< dataset_attribute> *
< data> < FONT SIZE = 1.7 > opt< / FONT > }
1998-10-30 09:09:28 +08:00
// Tokens within {} can be in any order as long as < data> and < dataset_attribute>
// are after < datatype> and < dataspace> .
1998-07-15 03:00:46 +08:00
< dataset_name> ::= < identifier>
1998-10-30 09:09:28 +08:00
< storagelayout> :: = STORAGELAYOUT < contiguous_layout> |
STORAGELAYOUT < chunked_layout> |
STORAGELAYOUT < compact_layout> |
STORAGELAYOUT < external_layout>
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< contiguous_layout> ::= {CONTIGUOUS} // default
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< chunked_layout> ::= {CHUNKED < dims> }
1998-07-15 03:00:46 +08:00
1998-08-21 23:44:36 +08:00
< dims> ::= (< i > i< FONT SIZE = 1.0 > 1< / i > < / FONT > , < i > i< FONT SIZE = 1.0 > 2< / i > < / FONT > , ... ), < i > i< FONT SIZE = 1.0 > k< / i > < / FONT > is an integer, < i > k< / i > = 1,2,...
1998-07-15 03:00:46 +08:00
1998-08-21 23:44:36 +08:00
< compact_layout> ::= TBD
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< external_layout> ::= {EXTERNAL < external_file> + }
1998-07-15 03:00:46 +08:00
< external_file> ::= (< file_name> < offset> < size> )
< offset> ::= an integer
< size> ::= an integer
1998-10-30 09:09:28 +08:00
< compression> :: = COMPRESSION { TBD }
1998-07-15 03:00:46 +08:00
1998-08-21 23:44:36 +08:00
< dataset_attribute> ::= < attribute>
1998-07-15 03:00:46 +08:00
1999-06-25 02:52:06 +08:00
< softlink> ::= SOFTLINK < softlink_name> { LINKTARGET < target> }
1998-07-15 03:00:46 +08:00
< softlink_name> ::= < identifier>
1998-08-28 05:44:08 +08:00
< target> ::= < identifier>
1998-07-15 03:00:46 +08:00
< identifier> ::= string
1998-10-30 09:09:28 +08:00
// character '/' should be used with care.
1998-07-15 03:00:46 +08:00
< / PRE >
1998-10-30 09:09:28 +08:00
< / dir >
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< h2 > 4. An Example of an HDF5 File in DDL< / h2 >
1998-07-15 03:00:46 +08:00
1998-10-30 09:09:28 +08:00
< dir >
< PRE >
HDF5 "example.h5" {
GROUP "/" {
1999-01-07 04:57:54 +08:00
ATTRIBUTE "attr1" {
DATATYPE {
{ STRSIZE 17;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
}
DATASPACE { SCALAR }
DATA {
1999-02-10 02:07:59 +08:00
"string attribute"
1999-01-07 04:57:54 +08:00
}
}
1998-10-30 09:09:28 +08:00
DATASET "dset1" {
1999-01-07 04:57:54 +08:00
DATATYPE { H5T_STD_I32BE }
DATASPACE { SIMPLE ( 10, 10 ) / ( 10, 10 ) }
DATA {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
}
}
DATASET "dset2" {
1998-10-30 09:09:28 +08:00
DATATYPE {
1999-01-07 04:57:54 +08:00
H5T_STD_I32BE "a";
H5T_IEEE_F32BE "b";
H5T_IEEE_F64BE "c";
}
DATASPACE { SIMPLE ( 5 ) / ( 5 ) }
DATA {
1999-02-10 02:07:59 +08:00
{
[ 1 ],
[ 0.1 ],
[ 0.01 ]
},
{
[ 2 ],
[ 0.2 ],
[ 0.02 ]
},
{
[ 3 ],
[ 0.3 ],
[ 0.03 ]
},
{
[ 4 ],
[ 0.4 ],
[ 0.04 ]
},
{
[ 5 ],
[ 0.5 ],
[ 0.05 ]
}
1998-10-30 09:09:28 +08:00
}
1998-07-15 03:00:46 +08:00
}
1998-10-30 09:09:28 +08:00
GROUP "group1" {
1999-01-07 04:57:54 +08:00
DATASET "dset3" {
1998-10-30 09:09:28 +08:00
DATATYPE {
1999-01-07 04:57:54 +08:00
"/type1"
}
DATASPACE { SIMPLE ( 5 ) / ( 5 ) }
DATA {
1999-02-10 02:07:59 +08:00
{
[ 0, 1, 2, 3 ],
[ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
},
{
[ 0, 1, 2, 3 ],
[ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
},
{
[ 0, 1, 2, 3 ],
[ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
},
{
[ 0, 1, 2, 3 ],
[ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
},
{
[ 0, 1, 2, 3 ],
[ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
}
1998-07-15 03:00:46 +08:00
}
1998-10-30 09:09:28 +08:00
}
1998-07-15 03:00:46 +08:00
}
1998-10-30 09:09:28 +08:00
GROUP "group2" {
1999-01-07 04:57:54 +08:00
HARDLINK "/group1"
1998-07-15 03:00:46 +08:00
}
1998-10-30 09:09:28 +08:00
SOFTLINK "slink1" {
LINKTARGET "somevalue"
1998-07-15 03:00:46 +08:00
}
1998-10-30 09:09:28 +08:00
DATATYPE "type1" {
1999-02-10 02:07:59 +08:00
H5T_STD_I32BE "a"[4];
H5T_IEEE_F32BE "b"[5][6];
1998-10-30 09:09:28 +08:00
}
}
1998-07-15 03:00:46 +08:00
}
1998-10-30 09:09:28 +08:00
< / pre >
< / dir >
1998-12-22 06:52:56 +08:00
< hr >
< center >
< table border = 0 width = 98% >
< tr > < td valign = top align = left >
< a href = "H5.intro.html" > Introduction to HDF5< / a > < br >
< a href = "RM_H5Front.html" > HDF5 Reference Manual< / a > < br >
< a href = "index.html" > Other HDF5 documents and links< / a > < br >
<!--
< a href = "Glossary.html" > Glossary< / a > < br >
-->
< / td >
< td valign = top align = right >
And in this document, the
< a href = "H5.user.html" > HDF5 User's Guide< / a > :
< a href = "Files.html" > Files< / a >
< br >
< a href = "Datasets.html" > Datasets< / a >
< a href = "Datatypes.html" > Data Types< / a >
< a href = "Dataspaces.html" > Dataspaces< / a >
< a href = "Groups.html" > Groups< / a >
< a href = "References.html" > References< / a >
< br >
< a href = "Attributes.html" > Attributes< / a >
< a href = "Properties.html" > Property Lists< / a >
< a href = "Errors.html" > Error Handling< / a >
< a href = "Filters.html" > Filters< / a >
< a href = "Caching.html" > Caching< / a >
< br >
< a href = "Chunking.html" > Chunking< / a >
< a href = "Debugging.html" > Debugging< / a >
< a href = "Environment.html" > Environment< / a >
DDL
< a href = "Ragged.html" > Ragged Arrays< / a >
<!--
< hr >
And in this document, the
< a href = "H5.user.html" > HDF5 User's Guide< / a > :
< a href = "Attributes.html" > H5A< / a >
< a href = "Datasets.html" > H5D< / a >
< a href = "Errors.html" > H5E< / a >
< a href = "Files.html" > H5F< / a >
< a href = "Groups.html" > H5G< / a >
< a href = "Properties.html" > H5P< / a >
< a href = "References.html" > H5R & H5I< / a >
< a href = "Ragged.html" > H5RA< / a >
< a href = "Dataspaces.html" > H5S< / a >
< a href = "Datatypes.html" > H5T< / a >
< a href = "Filters.html" > H5Z< / a >
< a href = "Caching.html" > Caching< / a >
< a href = "Chunking.html" > Chunking< / a >
< a href = "Debugging.html" > Debugging< / a >
< a href = "Environment.html" > Environment< / a >
< a href = "ddl.html" > DDL< / a >
-->
< / td > < / tr >
< / table >
< / center >
1998-10-30 09:09:28 +08:00
< hr >
< address >
< a href = "mailto:hdfhelp@ncsa.uiuc.edu" > HDF Help Desk< / a >
< / address >
1998-12-22 06:52:56 +08:00
Last modified: 30 October 1998
1998-10-30 09:09:28 +08:00
< / body >
< / html >