Datatype#

{
    "$schema": "https://json-schema.org/draft/2020-12/schema#",
    "$id": "https://hdfgroup.org/schemas/hdf5/json/datatypes.schema.json",
    "title": "HDF5 Datatype JSON Schema",
    "description": "JSON Schema describing HDF5/JSON datatypes.",
    "type": "object",
    "$defs": {
        "committed": {
            "description": "HDF5 committed datatype.",
            "type": "object",
            "patternProperties": {
                "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$": {
                    "type": "object",
                    "properties": {
                        "alias": {
                            "description": "HDF5 committed datatype path names",
                            "type": "array",
                            "minItems": 1,
                            "items": {
                                "type": "string",
                                "pattern": "^(/[^/]+)+$"
                            }
                        },
                        "type": {
                            "$ref": "#/$defs/datatype"
                        }
                    },
                    "required": [
                        "type"
                    ]
                }
            },
            "additionalProperties": false
        },
        "datatype": {
            "oneOf": [
                {
                    "$ref": "#/$defs/array_datatype"
                },
                {
                    "$ref": "#/$defs/bitfield_datatype"
                },
                {
                    "$ref": "#/$defs/compound_datatype"
                },
                {
                    "$ref": "#/$defs/enumeration_datatype"
                },
                {
                    "$ref": "#/$defs/floating_point_datatype"
                },
                {
                    "$ref": "#/$defs/integer_datatype"
                },
                {
                    "$ref": "#/$defs/opaque_datatype"
                },
                {
                    "$ref": "#/$defs/reference_datatype"
                },
                {
                    "$ref": "#/$defs/string_datatype"
                },
                {
                    "$ref": "#/$defs/vlen_datatype"
                },
                {
                    "type": "string",
                    "pattern": "^datatypes/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
                }
            ]
        },
        "string_datatype": {
            "description": "HDF5 string datatype.",
            "type": "object",
            "properties": {
                "class": {
                    "const": "H5T_STRING"
                },
                "charSet": {
                    "type": "string",
                    "enum": [
                        "H5T_CSET_ASCII",
                        "H5T_CSET_UTF8"
                    ]
                },
                "length": {
                    "oneOf": [
                        {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        {
                            "const": "H5T_VARIABLE"
                        }
                    ]
                },
                "strPad": {
                    "type": "string",
                    "enum": [
                        "H5T_STR_NULLTERM",
                        "H5T_STR_NULLPAD",
                        "H5T_STR_SPACEPAD"
                    ]
                }
            },
            "required": [
                "class",
                "length",
                "strPad"
            ]
        },
        "integer_datatype": {
            "description": "HDF5 integer datatypes",
            "type": "object",
            "oneOf": [
                {
                    "description": "HDF5 predefined integer datatypes.",
                    "type": "object",
                    "properties": {
                        "class": {
                            "const": "H5T_INTEGER"
                        },
                        "base": {
                            "type": "string",
                            "enum": [
                                "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"
                            ]
                        }
                    },
                    "required": [
                        "class",
                        "base"
                    ]
                },
                {
                    "description": "HDF5 user-defined integer datatypes.",
                    "type": "object",
                    "properties": {
                        "class": {
                            "const": "H5T_INTEGER"
                        },
                        "bitOffset": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "byteOrder": {
                            "type": "string",
                            "enum": [
                                "H5T_ORDER_LE",
                                "H5T_ORDER_BE"
                            ]
                        },
                        "lsbPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "msbPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "precision": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "size": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "signType": {
                            "type": "string",
                            "enum": [
                                "H5T_SGN_NONE",
                                "H5T_SGN_2"
                            ]
                        }
                    },
                    "required": [
                        "class",
                        "size",
                        "precision",
                        "bitOffset"
                    ]
                }
            ]
        },
        "floating_point_datatype": {
            "description": "HDF5 floating-point datatypes",
            "oneOf": [
                {
                    "description": "HDF5 predefined floating-point datatypes.",
                    "type": "object",
                    "properties": {
                        "class": {
                            "const": "H5T_FLOAT"
                        },
                        "base": {
                            "type": "string",
                            "enum": [
                                "H5T_IEEE_F32BE",
                                "H5T_IEEE_F32LE",
                                "H5T_IEEE_F64BE",
                                "H5T_IEEE_F64LE"
                            ]
                        }
                    },
                    "required": [
                        "class",
                        "base"
                    ]
                },
                {
                    "description": "HDF5 user-defined floating-point datatypes.",
                    "type": "object",
                    "properties": {
                        "class": {
                            "const": "H5T_FLOAT"
                        },
                        "bitOffset": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "byteOrder": {
                            "type": "string",
                            "enum": [
                                "H5T_ORDER_LE",
                                "H5T_ORDER_BE"
                            ]
                        },
                        "expBias": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "expBits": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "expBitPos": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "intlbPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "lsbPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "mantBits": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "mantBitPos": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "mantNorm": {
                            "type": "string",
                            "enum": [
                                "H5T_NORM_IMPLIED",
                                "H5T_NORM_MSBSET",
                                "H5T_NORM_NONE"
                            ]
                        },
                        "msbitPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "msbPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "precision": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "signBitPos": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "size": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        }
                    },
                    "additionalProperties": false,
                    "required": [
                        "class",
                        "size",
                        "precision",
                        "bitOffset"
                    ]
                }
            ]
        },
        "array_datatype": {
            "type": "object",
            "properties": {
                "class": {
                    "const": "H5T_ARRAY"
                },
                "base": {
                    "allOf": [
                        {
                            "$comment": "Placeholder for what the grammar calls datatype_object_ref."
                        },
                        {
                            "$ref": "#/$defs/datatype"
                        }
                    ]
                },
                "dims": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "integer",
                        "exclusiveMinimum": 0
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "class",
                "base",
                "dims"
            ]
        },
        "bitfield_datatype": {
            "description": "HDF5 bitfield datatypes",
            "oneOf": [
                {
                    "description": "HDF5 predefined bitfield datatypes.",
                    "type": "object",
                    "properties": {
                        "class": {
                            "const": "H5T_BITFIELD"
                        },
                        "base": {
                            "type": "string",
                            "enum": [
                                "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"
                            ]
                        }
                    },
                    "additionalProperties": false,
                    "required": [
                        "class",
                        "base"
                    ]
                },
                {
                    "description": "HDF5 user-defined bitfield datatypes.",
                    "type": "object",
                    "properties": {
                        "class": {
                            "const": "H5T_BITFIELD"
                        },
                        "bitOffset": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "byteOrder": {
                            "type": "string",
                            "enum": [
                                "H5T_ORDER_LE",
                                "H5T_ORDER_BE"
                            ]
                        },
                        "lsbPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "msbPad": {
                            "type": "string",
                            "enum": [
                                "H5T_PAD_ZERO",
                                "H5T_PAD_ONE",
                                "H5T_PAD_BACKGROUND"
                            ]
                        },
                        "precision": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        },
                        "size": {
                            "type": "integer",
                            "exclusiveMinimum": 0
                        }
                    },
                    "additionalProperties": false,
                    "required": [
                        "class",
                        "size",
                        "precision",
                        "bitOffset",
                        "byteOrder"
                    ]
                }
            ]
        },
        "compound_datatype": {
            "description": "HDF5 compound datatype.",
            "type": "object",
            "properties": {
                "class": {
                    "const": "H5T_COMPOUND"
                },
                "fields": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string",
                                "minLength": 1
                            },
                            "type": {
                                "allOf": [
                                    {
                                        "$comment": "Placeholder for what the grammar calls datatype_object_ref."
                                    },
                                    {
                                        "$ref": "#/$defs/datatype"
                                    }
                                ]
                            }
                        },
                        "additionalProperties": false,
                        "required": []
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "class",
                "fields"
            ]
        },
        "enumeration_datatype": {
            "description": "HDF5 enumerated datatype.",
            "type": "object",
            "properties": {
                "class": {
                    "const": "H5T_ENUM"
                },
                "base": {
                    "allOf": [
                        {
                            "$ref": "#/$defs/integer_datatype"
                        },
                        {
                            "$comment": "The grammar calls this datatype_reference."
                        }
                    ]
                },
                "members": {
                    "type": "array",
                    "minItems": 1,
                    "items": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string",
                                "minLength": 1
                            },
                            "value": {
                                "type": "integer"
                            }
                        },
                        "additionalProperties": false,
                        "required": [
                            "name",
                            "value"
                        ]
                    }
                }
            },
            "additionalProperties": false,
            "required": [
                "class",
                "base",
                "members"
            ]
        },
        "opaque_datatype": {
            "description": "HDF5 opaque datatype.",
            "type": "object",
            "properties": {
                "class": {
                    "const": "H5T_OPAQUE"
                },
                "size": {
                    "type": "integer",
                    "exclusiveMinimum": 0
                },
                "tag": {
                    "type": "string",
                    "minLength": 1
                }
            },
            "additionalProperties": false,
            "required": [
                "class",
                "size"
            ]
        },
        "reference_datatype": {
            "description": "HDF5 object and region reference datatypes.",
            "type": "object",
            "properties": {
                "class": {
                    "const": "H5T_REFERENCE"
                },
                "base": {
                    "type": "string",
                    "enum": [
                        "H5T_STD_REF_OBJ",
                        "H5T_STD_REF_DSETREG"
                    ]
                }
            },
            "required": [
                "class",
                "base"
            ]
        },
        "vlen_datatype": {
            "type": "object",
            "properties": {
                "class": {
                    "const": "H5T_VLEN"
                },
                "base": {
                    "allOf": [
                        {
                            "$comment": "Placeholder for what the grammar calls datatype_object_ref."
                        },
                        {
                            "$ref": "#/$defs/datatype"
                        }
                    ]
                }
            },
            "additionalProperties": false,
            "required": [
                "class",
                "base"
            ]
        }
    }
}