Datatype#

datatype_object ::=  identifier ":" "{"
                     "alias" ":" hdf5_path_name_array
                     "type" ":" datatype
                     "}"
datatype        ::=   array_datatype
                    | bitfield_datatype
                    | compound_datatype
                    | enumeration_datatype
                    | floating_point_datatype
                    | integer_datatype
                    | opaque_datatype
                    | reference_datatype
                    | string_datatype
                    | vlen_datatype
array_datatype ::=  "{"
                    "class" ":" "H5T_ARRAY" ","
                    "base" ":" datatype | datatype_ref ","
                    "dims" ":" dims_array
                    "}"
bitfield_datatype ::=  "{"
                       "class" ":" "H5T_BITFIELD" ","
                       ( bitfield_predef | bitfield_user )
                       "}"
bitfield_predef   ::=  "base" ":"
                       ( "H5T_STD_B8BE"  | "H5T_STD_B8LE"
                      |  "H5T_STD_B16BE" | "H5T_STD_B16LE"
                      |  "H5T_STD_B32BE" | "H5T_STD_B32LE"
                      |  "H5T_STD_B64BE" | "H5T_STD_B64LE" )
bitfield_user     ::=  "bitOffset" ":" non_negative_integer ","
                       "byteOrder" ":" byte_order ","
                       "lsbPad" ":" bit_padding ","
                       "msbPad" ":" bit_padding ","
                       "precision" ":" positive_integer ","
                       "size" ":" positive_integer
bit_padding       ::=  "H5T_PAD_ZERO"
                      | "H5T_PAD_ONE"
                      | "H5T_PAD_BACKGROUND"
byte_order        ::=  "H5T_ORDER_LE" | "H5T_ORDER_BE"
compound_datatype ::=  "{"
                       "class" ":" "H5T_COMPOUND" ","
                       "fields" ":" "[" field_list "]"
                       "}"
field_list        ::=  field_def ("," field_def)*
field_def         ::=  "{"
                       "name" ":" ascii_string ","
                       "type" ":" datatype | datatype_ref ","
                       "}"
enumeration_datatype ::=  "{"
                          "base" ":" ( integer_datatype |
                                       datatype_reference ) ","
                          "class" ":" "H5T_ENUM" ","
                          "members" ":" "[" enum_member_list "]"
                          "}"
enum_member_list     ::=  enum_member ("," enum_member)*
enum_member          ::=  "{"
                          "name" ":" ascii_string ","
                          "value" ":" integer
                          "}"
floating_point_datatype ::=  "{"
                             "class" ":" "H5T_FLOAT" ","
                             ( float_predef | float_user )
                             "}"
float_predef            ::=  "base" ":"
                             ( "H5T_IEEE_F32BE" | "H5T_IEEE_F32LE"
                            |  "H5T_IEEE_F64BE" | "H5T_IEEE_F64LE" )
float_user              ::=  "{"
                             "bitOffset" ":" non_negative_integer ","
                             "byteOrder" ":" byte_order ","
                             "expBias" ":" positive_integer ","
                             "expBits" ":" positive_integer ","
                             "expBitPos" ":" positive_integer ","
                             "intlbPad" ":" bit_padding ","
                             "lsbPad" ":" bit_padding ","
                             "mantBits" ":" positive_integer ","
                             "mantBitPos" ":" non_negative_integer ","
                             "mantNorm" ":" mant_norm ","
                             "msbitPad" ":" bit_padding ","
                             "precision" ":" positive_integer ","
                             "signBitPos" ":" positive_integer ","
                             "size" ":" positive_integer
                             "}"
mant_norm               ::=  "H5T_NORM_IMPLIED"
                            | "H5T_NORM_MSBSET"
                            | "H5T_NORM_NONE"
integer_datatype ::=  "{"
                      "class" ":" "H5T_INTEGER" ","
                      ( integer_predef | integer_user )
                      "}"
integer_predef   ::=  "base" ":"
                      ( "H5T_STD_I8BE"  | "H5T_STD_I8LE"
                     |  "H5T_STD_I16BE" | "H5T_STD_I16LE"
                     |  "H5T_STD_I32BE" | "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" )
integer_user     ::=  "{"
                      "bitOffset" ":" non_negative_integer ","
                      "byteOrder" ":" byte_order ","
                      "lsbPad" ":" bit_padding ","
                      "msbPad" ":" bit_padding ","
                      "precision" ":" positive_integer ","
                      "signType" ":" sign_type ","
                      "size" ":" positive_integer
                      "}"
sign_type        ::=  "H5T_SGN_NONE" | "H5T_SGN_2"
opaque_datatype ::=  "{"
                     "class" ":" "H5T_OPAQUE" ","
                     "size" ":" positive_integer ","
                     "tag"  ":" ascii_string
                     "}"
reference_datatype     ::=  "{"
                            "class" ":" "H5T_REFERENCE" ","
                            "base" ":"
                            ( "H5T_STD_REF_OBJ"
                           |  "H5T_STD_REF_DSETREG" )
object_reference_value ::=  path
region_reference_value ::=  "{"
                            "dataset" ":" dataset_ref ";"
                            "selection" ":" dataspace_selection
                            "}"
dataset_ref            ::=  "datasets/" id_reference
datatype_ref           ::=  "datatypes/" id_reference
group_ref              ::=  "groups/" id_reference
string_datatype ::=  "{"
                     "charSet" ":" char_encoding
                     "class" ":" "H5T_STRING" ","
                     "length" " ":" string_length
                     "strPad" ":" string_padding ","
                     "}"
char_encoding   ::=  "H5T_CSET_ASCII" | "H5T_CSET_UTF8"
string_length   ::=  positive_integer | "H5T_VARIABLE"
string_padding  ::=   "H5T_STR_NULLTERM"
                    | "H5T_STR_NULLPAD"
                    | "H5T_STR_SPACEPAD"
vlen_datatype ::=  "{"
                   "class" ":" "H5T_VLEN" ","
                   "base" ":" datatype | datatype_ref ","
                   "}"