mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-21 01:04:10 +08:00
[svn-r835] New DDL for Release 1.0.
This commit is contained in:
parent
ed5859ad80
commit
0cf4d3a79c
@ -1,72 +1,91 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<TITLE>DDL for HDF5</TITLE>
|
||||
<title>DDL for HDF5</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>DDL in BNF for HDF5</h1>
|
||||
|
||||
<B> DDL in BNF </B> <br>
|
||||
|
||||
<P>
|
||||
The following describes the data description language for HDF5 file.
|
||||
The description is in Backus-Naur Form. A quick explanation
|
||||
of the some symbols used.
|
||||
<h2>1. Introduction</h2>
|
||||
|
||||
This document contains the data description language (DDL) for an HDF5 file.
|
||||
The description is in Backus-Naur Form.
|
||||
|
||||
<h2>2. Explanation of Symbols</h2>
|
||||
|
||||
This section contains a brief explanation of the symbols used in the DDL.
|
||||
|
||||
<PRE>
|
||||
::= 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
|
||||
::= 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>
|
||||
|
||||
<h2>3. The DDL</h2>
|
||||
|
||||
<file> ::= hdf5 "<file_name>" { <file_boot_block><FONT SIZE=1.7>opt</FONT> <root_group> }
|
||||
<dir>
|
||||
<pre>
|
||||
<file> ::= HDF5 "<file_name>" { <file_boot_block><FONT SIZE=1.7>opt</FONT> <root_group> }
|
||||
|
||||
<file_name> ::= <identifier>
|
||||
|
||||
<file_boot_block> ::= boot_block { <boot_block_content> }
|
||||
<file_boot_block> ::= BOOT_BLOCK { <boot_block_content> }
|
||||
|
||||
<boot_block_content> ::= TBD
|
||||
|
||||
<root_group> ::= group "/" { <nlink><FONT SIZE=1.7>opt</FONT> <group_attribute>* <group_member>* }
|
||||
// nlink must appear before attributes and members.
|
||||
<root_group> ::= GROUP "/" { <unamed_datatype>* <group_attribute>* <group_member>* }
|
||||
|
||||
<nlink><FONT SIZE=1.7>opt</FONT> ::= { nlink <no_of_hardlinks> }
|
||||
<unamed_datatype> ::= DATATYPE "<unamed_type_name>" { <compound_type_def>+ }
|
||||
|
||||
<no_of_hardlinks> ::= an integer larger than 1
|
||||
<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
|
||||
|
||||
<group_attribute> ::= <attribute>
|
||||
<compound_type_def> ::= <named_scalar_type> | <named_array_type>
|
||||
|
||||
<attribute> ::= attribute "attr_name" { <datatype>
|
||||
<dataspace>
|
||||
<data><FONT SIZE=1.7>opt</FONT> }
|
||||
// <datatype>, <dataspace> and <data> can be in any order
|
||||
// as long as <data> comes the last.
|
||||
<named_scalar_type> ::= <scalar_type> <field_name> ;
|
||||
|
||||
<attr_name> ::= <identifier>
|
||||
|
||||
<datatype> ::= datatype { "<datatype_name>" } | // shared data type
|
||||
datatype { <scalar_datatype> } |
|
||||
datatype { <dt_definition>+ }
|
||||
|
||||
<datatype_name> ::= <identifier>
|
||||
|
||||
<scalar_datatype> ::= H5T_NATIVE_CHAR | H5T_NATIVE_INT | ... // data types supported by HDF5
|
||||
|
||||
<dt_definition> ::= <scalar_datatype> <field_name> ;
|
||||
<scalar_type> ::= H5T_STD_I8BE | H5T_STD_I8LE | ...
|
||||
|
||||
<field_name> ::= <identifier>
|
||||
|
||||
<dataspace> ::= dataspace { "<dataspace_name>" } |
|
||||
dataspace { array <current_dims> <max_dims> } |
|
||||
dataspace { other <ds_definition>+ }
|
||||
<named_array_type> ::= <scalar_type> <field_name> <dim_sizes> ;
|
||||
|
||||
<dim_sizes> ::= dimension sizes in the form of [dimsize1][dimzise2]...,
|
||||
where dimsize1, dimsize2 are integers
|
||||
|
||||
<group_attribute> ::= <attribute>
|
||||
|
||||
<attribute> ::= ATTRIBUTE "<attr_name>" { <datatype>
|
||||
<dataspace>
|
||||
<data><FONT SIZE=1.7>opt</FONT> }
|
||||
// <datatype> and <dataspace> must appear before <data>.
|
||||
|
||||
<attr_name> ::= <identifier>
|
||||
|
||||
<datatype> ::= DATATYPE { <named_type> } |
|
||||
DATATYPE { "<scalar_type>" } |
|
||||
DATATYPE { <compound_type_def>+ }
|
||||
|
||||
<named_type> ::= <hardlink>
|
||||
|
||||
<hardlink> ::= HARDLINK { "<abs_name>" }
|
||||
|
||||
<abs_name> ::= object absolute name
|
||||
|
||||
<dataspace> ::= DATASPACE { "<dataspace_name>" } |
|
||||
DATASPACE { ARRAY <current_dims> <max_dims> } |
|
||||
DATASPACE { OTHER <ds_definition>+ }
|
||||
|
||||
<dataspace_name> ::= <identifier>
|
||||
|
||||
<current_dims> ::= a list of integers represented as (<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,...
|
||||
<current_dims> ::= a list of integers in the form of (<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,...
|
||||
|
||||
<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
|
||||
|
||||
@ -74,44 +93,47 @@ of the some symbols used.
|
||||
|
||||
<data> ::= data {TBD}
|
||||
|
||||
<group_member> ::= <named_datatype> | <named_dataspace> | <group> | <dataset> | <softlink>
|
||||
<group_member> ::= <named_datatype> | <named_dataspace> | <group> | <dataset> |
|
||||
<softlink>
|
||||
|
||||
<named_datatype> ::= datatype "<datatype_name>" { <dt_definition>+ }
|
||||
<named_datatype> ::= DATATYPE "<type_name>" { <compound_type_def>+ }
|
||||
|
||||
<named_dataspace> ::= dataspace "<dataspace_name>" { array <current_dims> <max_dims> } |
|
||||
dataspace "<dataspace_name>" { other <ds_definition>+ }
|
||||
<type_name> ::= "<identifier>"
|
||||
|
||||
<group> ::= group "<group_name>" { <nlink><FONT SIZE=1.7>opt</FONT> <group_attribute>* <group_member>* }
|
||||
<named_dataspace> ::= DATASPACE "<dataspace_name>" { ARRAY <current_dims> <max_dims> } |
|
||||
DATASPACE "<dataspace_name>" { OTHER <ds_definition>+ }
|
||||
|
||||
<group> ::= GROUP "<group_name>" { <hardlink> } |
|
||||
GROUP "<group_name>" { <group_attribute>* <group_member>* }
|
||||
|
||||
<group_name> ::= <identifier>
|
||||
|
||||
<dataset> ::= dataset "<dataset_name>" { <nlink><FONT SIZE=1.7>opt</FONT>
|
||||
<datatype>
|
||||
<dataset> ::= DATASET "<dataset_name>" { <hardlink> } |
|
||||
DATASET "<dataset_name>" { <datatype>
|
||||
<dataspace>
|
||||
<storagelayout><FONT SIZE=1.7>opt</FONT>
|
||||
<compression><FONT SIZE=1.7>opt</FONT>
|
||||
<dataset_attribute>*
|
||||
<data><FONT SIZE=1.7>opt</FONT> }
|
||||
// Any order is ok as long as <data> and <dataset_attribute> are
|
||||
// after <datatype> and <dataspace>.
|
||||
// nlink must appear before others.
|
||||
// Tokens within {} can be in any order as long as <data> and <dataset_attribute>
|
||||
// are after <datatype> and <dataspace>.
|
||||
|
||||
<dataset_name> ::= <identifier>
|
||||
|
||||
<storagelayout> :: = storagelayout <contiguous_layout> |
|
||||
storagelayout <chunked_layout> |
|
||||
storagelayout <compact_layout> |
|
||||
storagelayout <external_layout>
|
||||
<storagelayout> :: = STORAGELAYOUT <contiguous_layout> |
|
||||
STORAGELAYOUT <chunked_layout> |
|
||||
STORAGELAYOUT <compact_layout> |
|
||||
STORAGELAYOUT <external_layout>
|
||||
|
||||
<contiguous_layout> ::= {contiguous} // default
|
||||
<contiguous_layout> ::= {CONTIGUOUS} // default
|
||||
|
||||
<chunked_layout> ::= {chunked <dims> }
|
||||
<chunked_layout> ::= {CHUNKED <dims> }
|
||||
|
||||
<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,...
|
||||
|
||||
<compact_layout> ::= TBD
|
||||
|
||||
<external_layout> ::= {external <external_file>+ }
|
||||
<external_layout> ::= {EXTERNAL <external_file>+ }
|
||||
|
||||
<external_file> ::= (<file_name> <offset> <size>)
|
||||
|
||||
@ -119,86 +141,68 @@ of the some symbols used.
|
||||
|
||||
<size> ::= an integer
|
||||
|
||||
<compression> :: = compression { TBD }
|
||||
<compression> :: = COMPRESSION { TBD }
|
||||
|
||||
<dataset_attribute> ::= <attribute>
|
||||
|
||||
<softlink> ::= softlink "<softlink_name>" { linktarget "<target>" }
|
||||
<softlink> ::= SOFTLINK "<softlink_name>" { LINKTARGET "<target>" }
|
||||
|
||||
<softlink_name> ::= <identifier>
|
||||
|
||||
<target> ::= <identifier>
|
||||
|
||||
<identifier> ::= string
|
||||
// character "/" should be used with care.
|
||||
// <dataset_name> cannot contain "/", for example.
|
||||
// character '/' should be used with care.
|
||||
|
||||
</PRE>
|
||||
<HR>
|
||||
<B> An example of HDF5 File in DDL </B>
|
||||
</dir>
|
||||
|
||||
|
||||
<h2>4. An Example of an HDF5 File in DDL</h2>
|
||||
|
||||
<dir>
|
||||
<PRE>
|
||||
|
||||
Consider an HDF5 file, example.h5, with the following structure:
|
||||
|
||||
/
|
||||
|
||||
/ | \
|
||||
group1 group3 dataset3
|
||||
/ \ |
|
||||
group2 dataset2 softlink
|
||||
/
|
||||
dataset1
|
||||
|
||||
|
||||
|
||||
hdf5 "example" {
|
||||
|
||||
group "/" {
|
||||
|
||||
datatype "shared_datatype" { // named data type
|
||||
H5T_NATIVE_CHAR c[20];
|
||||
H5T_NATIVE_INT i;
|
||||
HDF5 "example.h5" {
|
||||
GROUP "/" {
|
||||
DATASET "dset1" {
|
||||
DATATYPE {
|
||||
H5T_STD_I32BE int_name;
|
||||
H5T_IEEE_F32BE float_name;
|
||||
H5T_IEEE_F64BE double_name;
|
||||
}
|
||||
DATASPACE { ARRAY ( 5 ) ( 5 ) }
|
||||
DATA {{0,0,1}, {1,1,0.5}, {2,4,0.333333}, {3,9,0.25}, {4,16,0.2}}
|
||||
}
|
||||
|
||||
attribute "group_attribute" { //attribute
|
||||
datatype {H5T_NATIVE_CHAR}
|
||||
dataspace {array (20) (20)}
|
||||
data { "group attribute" }
|
||||
}
|
||||
|
||||
group "group1" {
|
||||
|
||||
group "group2" {
|
||||
|
||||
dataset "dataset1" {
|
||||
dataspace {array (4) (4)}
|
||||
datatype {"shared_datatype"}
|
||||
attribute "dataset1_attr" {
|
||||
datatype {H5T_NATIVE_CHAR}
|
||||
dataspace {array (10) (10)}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dataset "dataset2" {
|
||||
datatype {H5T_NATIVE_INT}
|
||||
dataspace {array (2,5) (H5S_UNLIMITED, 5)}
|
||||
data {0,0,0,0,0,0,0,0,0,0}
|
||||
GROUP "group1" {
|
||||
DATASET "dset2" {
|
||||
DATATYPE {
|
||||
HARDLINK { "/type1" }
|
||||
}
|
||||
DATASPACE { ARRAY ( 5 ) ( 5 ) }
|
||||
DATA {{0,0}, {1,1.1}, {2,2.2}, {3,3.3}, {4,4.4}}
|
||||
}
|
||||
}
|
||||
|
||||
group "group3" {
|
||||
softlink "slink" {
|
||||
linktarget "/sometarget"
|
||||
}
|
||||
GROUP "group2" {
|
||||
HARDLINK { "/group1" }
|
||||
}
|
||||
|
||||
|
||||
dataset "dataset3" {
|
||||
datatype {H5T_NATIVE_FLOAT}
|
||||
dataspace {array (100,100) (100,100)}
|
||||
SOFTLINK "slink1" {
|
||||
LINKTARGET "somevalue"
|
||||
}
|
||||
DATATYPE "type1" {
|
||||
H5T_STD_I32BE int_name;
|
||||
H5T_IEEE_F32BE float_name;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
</dir>
|
||||
|
||||
<hr>
|
||||
<address>
|
||||
<a href="mailto:hdfhelp@ncsa.uiuc.edu">HDF Help Desk</a>
|
||||
</address>
|
||||
|
||||
Last modified: 28 October 1998
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user