{
    "$id": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "additionalProperties": false,
    "definitions": {
        "AccessConstraintsType": {
            "additionalProperties": false,
            "description": "Information about any physical constraints for accessing the data set.",
            "properties": {
                "Description": {
                    "description": "Free-text description of the constraint. In ECHO 10, this field is called RestrictionComment. Additional detailed instructions on how to access the granule data may be entered in this field.",
                    "maxLength": 4000,
                    "minLength": 1,
                    "type": "string"
                },
                "Value": {
                    "description": "Numeric value that is used with Access Control Language (ACLs) to restrict access to this granule. For example, a provider might specify a granule level ACL that hides all granules with a value element set to 15. In ECHO, this field is called RestrictionFlag.",
                    "type": "number"
                }
            },
            "required": [
                "Value"
            ],
            "type": "object"
        },
        "AdditionalAttributeType": {
            "additionalProperties": false,
            "description": "A reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the  same name must exist in the parent collection.",
            "properties": {
                "Name": {
                    "description": "The additional attribute's name.",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                },
                "Values": {
                    "description": "Values of the additional attribute.",
                    "items": {
                        "maxLength": 500,
                        "minLength": 1,
                        "type": "string"
                    },
                    "minItems": 1,
                    "type": "array"
                }
            },
            "required": [
                "Name",
                "Values"
            ],
            "type": "object"
        },
        "ArchiveAndDistributionInformationType": {
            "anyOf": [
                {
                    "$ref": "#/definitions/FilePackageType"
                },
                {
                    "$ref": "#/definitions/FileType"
                }
            ],
            "description": "This set of elements describes a file package or a file that contains other files.  Normally this is either a tar or a zip file."
        },
        "BoundaryType": {
            "additionalProperties": false,
            "description": "A boundary is set of points connected by straight lines representing a polygon on the earth. It takes a minimum of three points to make a boundary. Points must be specified in counter-clockwise order and closed (the first and last vertices are the same).",
            "properties": {
                "Points": {
                    "items": {
                        "$ref": "#/definitions/PointType"
                    },
                    "minItems": 3,
                    "type": "array"
                }
            },
            "required": [
                "Points"
            ],
            "type": "object"
        },
        "BoundingRectangleType": {
            "additionalProperties": false,
            "description": "This entity holds the horizontal spatial coverage of a bounding box.",
            "properties": {
                "EastBoundingCoordinate": {
                    "$ref": "#/definitions/LongitudeType"
                },
                "NorthBoundingCoordinate": {
                    "$ref": "#/definitions/LatitudeType"
                },
                "SouthBoundingCoordinate": {
                    "$ref": "#/definitions/LatitudeType"
                },
                "WestBoundingCoordinate": {
                    "$ref": "#/definitions/LongitudeType"
                }
            },
            "required": [
                "WestBoundingCoordinate",
                "NorthBoundingCoordinate",
                "EastBoundingCoordinate",
                "SouthBoundingCoordinate"
            ],
            "type": "object"
        },
        "CampaignType": {
            "description": "Information describing campaign names with which the granule is associated.",
            "maxLength": 40,
            "minLength": 1,
            "type": "string"
        },
        "CharacteristicType": {
            "additionalProperties": false,
            "description": "This entity is used to reference characteristics defined in the parent collection.",
            "properties": {
                "Name": {
                    "description": "The name of the characteristic attribute.",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                },
                "Value": {
                    "description": "The value of the Characteristic attribute.",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "required": [
                "Name",
                "Value"
            ],
            "type": "object"
        },
        "ChecksumType": {
            "additionalProperties": false,
            "description": "Allows the provider to provide a checksum value and checksum algorithm name to allow the user to calculate the checksum.",
            "properties": {
                "Algorithm": {
                    "description": "The algorithm name by which the checksum was calulated. This allows the user to re-calculate the checksum to verify the integrity of the downloaded data.",
                    "enum": [
                        "Adler-32",
                        "BSD checksum",
                        "Fletcher-32",
                        "Fletcher-64",
                        "MD5",
                        "POSIX",
                        "SHA-1",
                        "SHA-2",
                        "SHA-256",
                        "SHA-384",
                        "SHA-512",
                        "SM3",
                        "SYSV"
                    ],
                    "type": "string"
                },
                "Value": {
                    "description": "Describes the checksum value for a file.",
                    "maxLength": 128,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "required": [
                "Value",
                "Algorithm"
            ],
            "type": "object"
        },
        "CollectionReferenceType": {
            "description": "A reference to a collection metadata record's short name and version, or entry title to which this granule metadata record belongs.",
            "oneOf": [
                {
                    "additionalProperties": false,
                    "properties": {
                        "ShortName": {
                            "description": "The collection's short name as per the UMM-C.",
                            "maxLength": 85,
                            "minLength": 1,
                            "type": "string"
                        },
                        "Version": {
                            "description": "The collection's version as per the UMM-C.",
                            "maxLength": 80,
                            "minLength": 1,
                            "type": "string"
                        }
                    },
                    "required": [
                        "ShortName",
                        "Version"
                    ]
                },
                {
                    "additionalProperties": false,
                    "properties": {
                        "EntryTitle": {
                            "description": "The collections entry title as per the UMM-C.",
                            "maxLength": 1030,
                            "minLength": 1,
                            "type": "string"
                        }
                    },
                    "required": [
                        "EntryTitle"
                    ]
                }
            ],
            "type": "object"
        },
        "DataFormatEnum": {
            "enum": [
                "ASCII",
                "BINARY",
                "BMP",
                "BUFR",
                "CSV",
                "GEOTIFF",
                "GIF",
                "GEOTIFFINT16",
                "GEOTIFFFLOAT32",
                "GRIB",
                "GZIP",
                "HDF4",
                "HDF5",
                "HDF-EOS2",
                "HDF-EOS5",
                "HTML",
                "ICARTT",
                "JPEG",
                "JSON",
                "KML",
                "NETCDF-3",
                "NETCDF-4",
                "NETCDF-CF",
                "PNG",
                "PNG24",
                "TAR",
                "TIFF",
                "XLSX",
                "XML",
                "ZIP",
                "DMRPP",
                "Not provided"
            ],
            "type": "string"
        },
        "DataGranuleType": {
            "additionalProperties": false,
            "description": "This entity stores the basic descriptive characteristics associated with a granule.",
            "properties": {
                "ArchiveAndDistributionInformation": {
                    "description": "A list of the file(s) or file package(s) that make up the granule. A file package is something like a tar or zip file.",
                    "items": {
                        "$ref": "#/definitions/ArchiveAndDistributionInformationType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "DayNightFlag": {
                    "description": "This attribute is used to identify if a granule was collected during the day, night (between  sunset and sunrise) or both.",
                    "enum": [
                        "Day",
                        "Night",
                        "Both",
                        "Unspecified"
                    ],
                    "type": "string"
                },
                "Identifiers": {
                    "description": "This holds any granule identifiers the provider wishes to provide.",
                    "items": {
                        "$ref": "#/definitions/IdentifierType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "ProductionDateTime": {
                    "_format": "date-time",
                    "description": "The date and time a specific granule was produced by a PGE.",
                    "type": "string"
                },
                "ReprocessingActual": {
                    "description": "Granule level, stating what reprocessing has been performed on this granule.",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                },
                "ReprocessingPlanned": {
                    "description": "Granule level, stating what reprocessing may be performed on this granule.",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "required": [
                "DayNightFlag",
                "ProductionDateTime"
            ],
            "type": "object"
        },
        "DistributionMediaType": {
            "description": "This element defines the media by which the end user can obtain the distributable item. Each media type is listed separately. Examples of media include: CD-ROM, 9 track tape, diskettes, hard drives, online, transparencies, hardcopy, etc.",
            "maxLength": 80,
            "minLength": 1,
            "type": "string"
        },
        "ExclusiveZoneType": {
            "additionalProperties": false,
            "description": "Contains the excluded boundaries from the GPolygon.",
            "properties": {
                "Boundaries": {
                    "items": {
                        "$ref": "#/definitions/BoundaryType"
                    },
                    "minItems": 1,
                    "type": "array"
                }
            },
            "required": [
                "Boundaries"
            ],
            "type": "object"
        },
        "FileNameType": {
            "description": "This field describes the name of the actual file.",
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
        },
        "FilePackageType": {
            "additionalProperties": false,
            "dependencies": {
                "Size": [
                    "SizeUnit"
                ]
            },
            "description": "This set of elements describes a file package or a file that contains other files.  Normally this is either a tar or a zip file.",
            "properties": {
                "Checksum": {
                    "$ref": "#/definitions/ChecksumType",
                    "description": "Allows the provider to provide the checksum value for the file."
                },
                "Files": {
                    "description": "Allows the provider to add the list of the files that are included in this one.",
                    "items": {
                        "$ref": "#/definitions/FileType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "Format": {
                    "$ref": "#/definitions/DataFormatEnum",
                    "description": "This element defines a single format for a distributable artifact."
                },
                "MimeType": {
                    "$ref": "#/definitions/MimeTypeEnum",
                    "description": "The mime type of the resource."
                },
                "Name": {
                    "$ref": "#/definitions/FileNameType",
                    "description": "This field describes the name of the actual file."
                },
                "Size": {
                    "description": "The size of the volume of data contained in the granule. Please use the SizeInBytes element either instead of this one or inclusive of this one. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.",
                    "type": "number"
                },
                "SizeInBytes": {
                    "description": "The size in Bytes of the volume of data contained in the granule. Bytes are defined as eight bits. Please use this element instead of or inclusive with the Size element. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.",
                    "type": "integer"
                },
                "SizeUnit": {
                    "$ref": "#/definitions/FileSizeUnitEnum",
                    "description": "The unit of the file size."
                }
            },
            "required": [
                "Name"
            ],
            "type": "object"
        },
        "FileSizeUnitEnum": {
            "description": "The unit of the file size.",
            "enum": [
                "KB",
                "MB",
                "GB",
                "TB",
                "PB",
                "NA"
            ],
            "type": "string"
        },
        "FileType": {
            "additionalProperties": false,
            "dependencies": {
                "Size": [
                    "SizeUnit"
                ]
            },
            "description": "This set of elements describes a file. The file can be a part of the entire granule or is the granule.",
            "properties": {
                "Checksum": {
                    "$ref": "#/definitions/ChecksumType",
                    "description": "Allows the provider to provide the checksum value for the file."
                },
                "Format": {
                    "$ref": "#/definitions/DataFormatEnum",
                    "description": "This element defines a single format for a distributable artifact."
                },
                "FormatType": {
                    "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.",
                    "enum": [
                        "Native",
                        "Supported",
                        "NA"
                    ],
                    "type": "string"
                },
                "MimeType": {
                    "$ref": "#/definitions/MimeTypeEnum",
                    "description": "The mime type of the resource."
                },
                "Name": {
                    "$ref": "#/definitions/FileNameType",
                    "description": "This field describes the name of the actual file."
                },
                "Size": {
                    "description": "The size of the volume of data contained in the granule. Please use the SizeInBytes element either instead of this one or inclusive of this one. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.",
                    "type": "number"
                },
                "SizeInBytes": {
                    "description": "The size in Bytes of the volume of data contained in the granule. Bytes are defined as eight bits. Please use this element instead of or inclusive with the Size element. The issue with the size element is that if CMR data providers use a unit other than Bytes, end users don't know how the granule size was calculated. For example, if the unit was MegaBytes, the size could be calculated by using 1000xE2 Bytes (MegaBytes) or 1024xE2 Bytes (mebibytes) and therefore there is no systematic way to know the actual size of a granule by using the granule metadata record.",
                    "type": "integer"
                },
                "SizeUnit": {
                    "$ref": "#/definitions/FileSizeUnitEnum",
                    "description": "The unit of the file size."
                }
            },
            "required": [
                "Name"
            ],
            "type": "object"
        },
        "GPolygonType": {
            "additionalProperties": false,
            "description": "A GPolygon specifies an area on the earth represented by a main boundary with optional boundaries for regions excluded from the main boundary.",
            "properties": {
                "Boundary": {
                    "$ref": "#/definitions/BoundaryType"
                },
                "ExclusiveZone": {
                    "$ref": "#/definitions/ExclusiveZoneType"
                }
            },
            "required": [
                "Boundary"
            ],
            "type": "object"
        },
        "GeometryType": {
            "additionalProperties": false,
            "anyOf": [
                {
                    "required": [
                        "Points"
                    ]
                },
                {
                    "required": [
                        "BoundingRectangles"
                    ]
                },
                {
                    "required": [
                        "GPolygons"
                    ]
                },
                {
                    "required": [
                        "Lines"
                    ]
                }
            ],
            "description": "This entity holds the geometry representing the spatial coverage information of a granule.",
            "properties": {
                "BoundingRectangles": {
                    "description": "This entity holds the horizontal spatial coverage of a bounding box.",
                    "items": {
                        "$ref": "#/definitions/BoundingRectangleType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "GPolygons": {
                    "description": "A GPolygon specifies an area on the earth represented by a main boundary with optional boundaries for regions excluded from the main boundary.",
                    "items": {
                        "$ref": "#/definitions/GPolygonType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "Lines": {
                    "description": "This entity holds the horizontal spatial coverage of a line. A line area contains at least two points.",
                    "items": {
                        "$ref": "#/definitions/LineType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "Points": {
                    "description": "The horizontal spatial coverage of a point.",
                    "items": {
                        "$ref": "#/definitions/PointType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                }
            },
            "type": "object"
        },
        "GranuleLocalityType": {
            "description": "Provides name which spatial/temporal entity is known. This could change on a granule by granule basis. This attribute is paralleled by the AggregationType which applies at the collection level although locality has a more restricted usage. Several locality measures could be included in each granule.",
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
        },
        "GridMappingNameType": {
            "description": "Represents the native grid mapping of the granule, if the granule is gridded. The grid name must match a grid that has been defined in the parent collection.",
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
        },
        "HorizontalSpatialDomainType": {
            "additionalProperties": false,
            "description": "Information about a granule with horizontal spatial coverage.",
            "oneOf": [
                {
                    "required": [
                        "Geometry"
                    ]
                },
                {
                    "required": [
                        "Orbit"
                    ]
                }
            ],
            "properties": {
                "Geometry": {
                    "$ref": "#/definitions/GeometryType",
                    "description": "This entity holds the geometry representing the spatial coverage information of a granule."
                },
                "Orbit": {
                    "$ref": "#/definitions/OrbitType",
                    "description": "This entity stores orbital coverage information of the granule. This coverage is an alternative way of expressing granule spatial coverage. This information supports orbital backtrack searching on a granule."
                },
                "Track": {
                    "$ref": "#/definitions/TrackType",
                    "description": "This element stores track information of the granule. Track information is used to allow a user to search for granules whose spatial extent is based on an orbital cycle, pass, and tile mapping. Though it is derived from the SWOT mission requirements, it is intended that this element type be generic enough so that other missions can make use of it. While track information is a type of spatial domain, it is expected that the metadata provider will provide geometry information that matches the spatial extent of the track information."
                },
                "ZoneIdentifier": {
                    "$ref": "#/definitions/ZoneIdentifierType",
                    "description": "The appropriate numeric or alpha code used to identify the various zones in the granule's grid coordinate system."
                }
            },
            "type": "object"
        },
        "IdentifierType": {
            "description": "This entity stores an identifier. If the identifier is part of the enumeration then use it. If the enumeration is 'Other',  the provider must specify the identifier's name.",
            "oneOf": [
                {
                    "additionalProperties": false,
                    "properties": {
                        "Identifier": {
                            "description": "The identifier value.",
                            "maxLength": 1024,
                            "minLength": 1,
                            "type": "string"
                        },
                        "IdentifierName": {
                            "description": "The name of the identifier.",
                            "maxLength": 1024,
                            "minLength": 1,
                            "type": "string"
                        },
                        "IdentifierType": {
                            "description": "The enumeration of known identifier types.",
                            "enum": [
                                "ProducerGranuleId",
                                "LocalVersionId",
                                "FeatureId",
                                "CRID"
                            ],
                            "type": "string"
                        }
                    },
                    "required": [
                        "Identifier",
                        "IdentifierType"
                    ]
                },
                {
                    "additionalProperties": false,
                    "properties": {
                        "Identifier": {
                            "description": "The identifier value.",
                            "maxLength": 1024,
                            "minLength": 1,
                            "type": "string"
                        },
                        "IdentifierName": {
                            "description": "The Name of identifier.",
                            "maxLength": 1024,
                            "minLength": 1,
                            "type": "string"
                        },
                        "IdentifierType": {
                            "description": "The enumeration of known identifier types.",
                            "enum": [
                                "Other"
                            ],
                            "type": "string"
                        }
                    },
                    "required": [
                        "Identifier",
                        "IdentifierType",
                        "IdentifierName"
                    ]
                }
            ],
            "type": "object"
        },
        "InstrumentType": {
            "additionalProperties": false,
            "description": "A reference to the device in the parent collection that was used to measure or record data, including direct human observation. In cases where instruments have a single composed of child instrument (sensor) or the instrument and composed of child instrument (sensor) are used synonymously (e.g. AVHRR) the both Instrument and composed of child instrument should be recorded. The child instrument information is represented by child entities. The instrument reference may contain granule specific characteristics and operation modes. These characteristics and modes are not checked against the referenced instrument.",
            "properties": {
                "Characteristics": {
                    "description": "This entity is used to define item additional attributes (unprocessed, custom data).",
                    "items": {
                        "$ref": "#/definitions/CharacteristicType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "ComposedOf": {
                    "description": "References to instrument subcomponents in the parent collection's instrument used by various sources in the granule. An instrument subcomponent reference may contain characteristics specific to the granule.",
                    "items": {
                        "$ref": "#/definitions/InstrumentType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "OperationalModes": {
                    "description": "This entity identifies the instrument's operational modes for a specific collection associated with the channel, wavelength, and FOV (e.g., launch, survival, initialization, safe, diagnostic, standby, crosstrack, biaxial, solar calibration).",
                    "items": {
                        "maxLength": 20,
                        "minLength": 1,
                        "type": "string"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "ShortName": {
                    "$ref": "#/definitions/ShortNameType"
                }
            },
            "required": [
                "ShortName"
            ],
            "type": "object"
        },
        "LatitudeType": {
            "description": "The latitude value of a spatially referenced point, in degrees. Latitude values range from -90 to 90.",
            "maximum": 90,
            "minimum": -90,
            "type": "number"
        },
        "LineType": {
            "additionalProperties": false,
            "description": "This entity holds the horizontal spatial coverage of a line. A line area contains at lease two points.",
            "properties": {
                "Points": {
                    "items": {
                        "$ref": "#/definitions/PointType"
                    },
                    "minItems": 2,
                    "type": "array"
                }
            },
            "required": [
                "Points"
            ],
            "type": "object"
        },
        "LongitudeType": {
            "description": "The longitude value of a spatially referenced point, in degrees. Longitude values range from -180 to 180.",
            "maximum": 180,
            "minimum": -180,
            "type": "number"
        },
        "MeasuredParameterType": {
            "additionalProperties": false,
            "description": "This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.",
            "properties": {
                "ParameterName": {
                    "description": "The measured science parameter expressed in the data granule.",
                    "maxLength": 250,
                    "minLength": 1,
                    "type": "string"
                },
                "QAFlags": {
                    "$ref": "#/definitions/QAFlagsType",
                    "description": "The associated quality flags."
                },
                "QAStats": {
                    "$ref": "#/definitions/QAStatsType",
                    "description": "The associated quality statistics."
                }
            },
            "required": [
                "ParameterName"
            ],
            "type": "object"
        },
        "MetadataSpecificationType": {
            "additionalProperties": false,
            "description": "This object requires any metadata record that is validated by this schema to provide information about the schema.",
            "properties": {
                "Name": {
                    "description": "This element represents the name of the schema.",
                    "enum": [
                        "UMM-G"
                    ],
                    "type": "string"
                },
                "URL": {
                    "description": "This element represents the URL where the schema lives. The schema can be downloaded.",
                    "enum": [
                        "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.1"
                    ],
                    "type": "string"
                },
                "Version": {
                    "description": "This element represents the version of the schema.",
                    "enum": [
                        "1.6.1"
                    ],
                    "type": "string"
                }
            },
            "required": [
                "URL",
                "Name",
                "Version"
            ],
            "type": "object"
        },
        "MimeTypeEnum": {
            "enum": [
                "application/json",
                "application/xml",
                "application/x-netcdf",
                "application/x-hdfeos",
                "application/gml+xml",
                "application/vnd.google-earth.kml+xml",
                "image/gif",
                "image/tiff",
                "image/bmp",
                "text/csv",
                "text/xml",
                "application/pdf",
                "application/x-hdf",
                "application/x-hdf5",
                "application/octet-stream",
                "application/vnd.google-earth.kmz",
                "image/jpeg",
                "image/png",
                "image/vnd.collada+xml",
                "text/html",
                "text/plain",
                "application/zip",
                "application/gzip",
                "application/tar",
                "application/tar+gzip",
                "application/tar+zip",
                "application/vnd.opendap.dap4.dmrpp+xml",
                "Not provided"
            ],
            "type": "string"
        },
        "OrbitCalculatedSpatialDomainType": {
            "additionalProperties": false,
            "allOf": [
                {
                    "not": {
                        "required": [
                            "OrbitNumber",
                            "BeginOrbitNumber"
                        ]
                    }
                },
                {
                    "not": {
                        "required": [
                            "OrbitNumber",
                            "EndOrbitNumber"
                        ]
                    }
                }
            ],
            "anyOf": [
                {
                    "required": [
                        "OrbitalModelName"
                    ]
                },
                {
                    "required": [
                        "EquatorCrossingLongitude"
                    ]
                },
                {
                    "required": [
                        "EquatorCrossingDateTime"
                    ]
                },
                {
                    "required": [
                        "OrbitNumber"
                    ]
                },
                {
                    "required": [
                        "BeginOrbitNumber",
                        "EndOrbitNumber"
                    ]
                }
            ],
            "description": "This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude.",
            "properties": {
                "BeginOrbitNumber": {
                    "description": "Orbit number at the start of the data granule.",
                    "type": "integer"
                },
                "EndOrbitNumber": {
                    "description": "Orbit number at the end of the data granule.",
                    "type": "integer"
                },
                "EquatorCrossingDateTime": {
                    "_format": "date-time",
                    "description": "This attribute represents the date and time of the descending equator crossing.",
                    "type": "string"
                },
                "EquatorCrossingLongitude": {
                    "$ref": "#/definitions/LongitudeType",
                    "description": "This attribute represents the terrestrial longitude of the descending equator crossing."
                },
                "OrbitNumber": {
                    "description": "The orbit number to be used in calculating the spatial extent of this data.",
                    "type": "integer"
                },
                "OrbitalModelName": {
                    "description": "The reference to the orbital model to be used to calculate the geo-location of this data in order to determine global spatial extent.",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "type": "object"
        },
        "OrbitDirectionTypeEnum": {
            "description": "Orbit start and end direction. A for ascending orbit and D for descending.",
            "enum": [
                "A",
                "D"
            ],
            "type": "string"
        },
        "OrbitType": {
            "additionalProperties": false,
            "description": "This entity stores orbital coverage information of the granule. This coverage is an alternative way of expressing granule spatial coverage. This information supports orbital backtrack searching on a granule.",
            "properties": {
                "AscendingCrossing": {
                    "$ref": "#/definitions/LongitudeType",
                    "description": "Equatorial crossing on the ascending pass in decimal degrees longitude. The convention we've been using is it's the first included ascending crossing if one is included, and the prior ascending crossing if none is included (e.g. descending half orbits)."
                },
                "EndDirection": {
                    "$ref": "#/definitions/OrbitDirectionTypeEnum",
                    "description": "Ascending or descending. Valid input: 'A' or 'D'"
                },
                "EndLatitude": {
                    "$ref": "#/definitions/LatitudeType",
                    "description": "Granule's ending latitude."
                },
                "StartDirection": {
                    "$ref": "#/definitions/OrbitDirectionTypeEnum",
                    "description": "Ascending or descending. Valid input: 'A' or 'D'"
                },
                "StartLatitude": {
                    "$ref": "#/definitions/LatitudeType",
                    "description": "Granule's starting latitude."
                }
            },
            "required": [
                "AscendingCrossing",
                "StartLatitude",
                "StartDirection",
                "EndLatitude",
                "EndDirection"
            ],
            "type": "object"
        },
        "PGEVersionClassType": {
            "additionalProperties": false,
            "description": "This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule.",
            "properties": {
                "PGEName": {
                    "description": "Name of product generation executable.",
                    "maxLength": 1024,
                    "minLength": 1,
                    "type": "string"
                },
                "PGEVersion": {
                    "description": "Version of the product generation executable that produced the granule.",
                    "maxLength": 10,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "required": [
                "PGEVersion"
            ],
            "type": "object"
        },
        "PlatformType": {
            "additionalProperties": false,
            "description": "A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc.",
            "properties": {
                "Instruments": {
                    "description": "References to the devices in the parent collection that were used to measure or record data, including direct human observation.",
                    "items": {
                        "$ref": "#/definitions/InstrumentType"
                    },
                    "minItems": 1,
                    "type": "array"
                },
                "ShortName": {
                    "$ref": "#/definitions/ShortNameType"
                }
            },
            "required": [
                "ShortName"
            ],
            "type": "object"
        },
        "PointType": {
            "additionalProperties": false,
            "description": "The longitude and latitude values of a spatially referenced point in degrees.",
            "properties": {
                "Latitude": {
                    "$ref": "#/definitions/LatitudeType"
                },
                "Longitude": {
                    "$ref": "#/definitions/LongitudeType"
                }
            },
            "required": [
                "Longitude",
                "Latitude"
            ],
            "type": "object"
        },
        "ProjectType": {
            "additionalProperties": false,
            "description": "Information describing the scientific endeavor with which the granule is associated.",
            "properties": {
                "Campaigns": {
                    "description": "The name of the campaign/experiment (e.g. Global climate observing system).",
                    "items": {
                        "$ref": "#/definitions/CampaignType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "ShortName": {
                    "description": "The unique identifier by which a project is known. The project is the scientific endeavor associated with the acquisition of the collection.",
                    "maxLength": 40,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "required": [
                "ShortName"
            ],
            "type": "object"
        },
        "ProjectionNameType": {
            "description": "Represents the native projection of the granule if the granule has a native projection. The projection name must match the projection that has been defined in the parent collection.",
            "enum": [
                "Geographic",
                "Mercator",
                "Spherical Mercator",
                "Space Oblique Mercator",
                "Universal Transverse Mercator",
                "Military Grid Reference",
                "MODIS Sinusoidal System",
                "Sinusoidal",
                "Lambert Equal Area",
                "NSIDC EASE Grid North and South (Lambert EA)",
                "NSIDC EASE Grid Global",
                "EASE Grid 2.0 N. Polar",
                "Plate Carree",
                "Polar Stereographic",
                "WELD Albers Equal Area",
                "Canadian Albers Equal Area Conic",
                "Lambert Conformal Conic",
                "State Plane Coordinates",
                "Albers Equal Area Conic",
                "Transverse Mercator",
                "Lambert Azimuthal Equal Area",
                "UTM Northern Hemisphere",
                "NAD83 / UTM zone 17N",
                "UTM Southern Hemisphere",
                "Cylindrical"
            ],
            "type": "string"
        },
        "ProviderDateType": {
            "additionalProperties": false,
            "description": "Specifies the date and its type that the provider uses for the granule. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository.",
            "properties": {
                "Date": {
                    "_format": "date-time",
                    "description": "This is the date that an event associated with the granule occurred.",
                    "type": "string"
                },
                "Type": {
                    "$ref": "#/definitions/ProviderDateTypeEnum",
                    "description": "This is the type of event associated with the date. For example, Creation or Upate."
                }
            },
            "required": [
                "Date",
                "Type"
            ],
            "type": "object"
        },
        "ProviderDateTypeEnum": {
            "description": "The types of dates that a metadata record can have.",
            "enum": [
                "Create",
                "Insert",
                "Update",
                "Delete"
            ],
            "type": "string"
        },
        "QAFlagsType": {
            "additionalProperties": false,
            "anyOf": [
                {
                    "required": [
                        "AutomaticQualityFlag"
                    ]
                },
                {
                    "required": [
                        "OperationalQualityFlag"
                    ]
                },
                {
                    "required": [
                        "ScienceQualityFlag"
                    ]
                }
            ],
            "description": "The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.",
            "properties": {
                "AutomaticQualityFlag": {
                    "description": "The granule level flag applying generally to the granule and specifically to parameters the granule level. When applied to parameter, the flag refers to the quality of that parameter for the granule (as applicable). The parameters determining whether the flag is set are defined by the developer and documented in the Quality Flag Explanation.",
                    "enum": [
                        "Passed",
                        "Failed",
                        "Suspect",
                        "Undetermined"
                    ],
                    "type": "string"
                },
                "AutomaticQualityFlagExplanation": {
                    "description": "A text explanation of the criteria used to set automatic quality flag; including thresholds or other criteria.",
                    "maxLength": 2048,
                    "minLength": 1,
                    "type": "string"
                },
                "OperationalQualityFlag": {
                    "description": "The granule level flag applying both generally to a granule and specifically to parameters at the granule level. When applied to parameter, the flag refers to the quality of that parameter for the granule (as applicable). The parameters determining whether the flag is set are defined by the developers and documented in the QualityFlagExplanation.",
                    "enum": [
                        "Passed",
                        "Failed",
                        "Being Investigated",
                        "Not Investigated",
                        "Inferred Passed",
                        "Inferred Failed",
                        "Suspect",
                        "Undetermined"
                    ],
                    "type": "string"
                },
                "OperationalQualityFlagExplanation": {
                    "description": "A text explanation of the criteria used to set operational quality flag; including thresholds or other criteria.",
                    "maxLength": 2048,
                    "minLength": 1,
                    "type": "string"
                },
                "ScienceQualityFlag": {
                    "description": "Granule level flag applying to a granule, and specifically to parameters. When applied to parameter, the flag refers to the quality of that parameter for the granule (as applicable). The parameters determining whether the flag is set are defined by the developers and documented in the Quality Flag Explanation.",
                    "enum": [
                        "Passed",
                        "Failed",
                        "Being Investigated",
                        "Not Investigated",
                        "Inferred Passed",
                        "Inferred Failed",
                        "Suspect",
                        "Hold",
                        "Undetermined"
                    ],
                    "type": "string"
                },
                "ScienceQualityFlagExplanation": {
                    "description": "A text explanation of the criteria used to set science quality flag; including thresholds or other criteria.",
                    "maxLength": 2048,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "type": "object"
        },
        "QAStatsType": {
            "additionalProperties": false,
            "anyOf": [
                {
                    "required": [
                        "QAPercentMissingData"
                    ]
                },
                {
                    "required": [
                        "QAPercentOutOfBoundsData"
                    ]
                },
                {
                    "required": [
                        "QAPercentInterpolatedData"
                    ]
                },
                {
                    "required": [
                        "QAPercentCloudCover"
                    ]
                }
            ],
            "description": "The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters.",
            "properties": {
                "QAPercentCloudCover": {
                    "description": "This attribute is used to characterize the cloud cover amount of a granule. This attribute may be repeated for individual parameters within a granule. (Note - there may be more than one way to define a cloud or it's effects within a product containing several parameters; i.e. this attribute may be parameter specific).",
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                },
                "QAPercentInterpolatedData": {
                    "description": "Granule level % interpolated data. This attribute can be repeated for individual parameters within a granule.",
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                },
                "QAPercentMissingData": {
                    "description": "Granule level % missing data. This attribute can be repeated for individual parameters within a granule.",
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                },
                "QAPercentOutOfBoundsData": {
                    "description": "Granule level % out of bounds data. This attribute can be repeated for individual parameters within a granule.",
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                }
            },
            "type": "object"
        },
        "RangeDateTimeType": {
            "additionalProperties": false,
            "description": "Stores the data acquisition start and end date/time for a granule.",
            "properties": {
                "BeginningDateTime": {
                    "_format": "date-time",
                    "description": "The time when the temporal coverage period being described began.",
                    "type": "string"
                },
                "EndingDateTime": {
                    "_format": "date-time",
                    "description": "The time when the temporal coverage period being described ended.",
                    "type": "string"
                }
            },
            "required": [
                "BeginningDateTime"
            ],
            "type": "object"
        },
        "RelatedUrlSubTypeEnum": {
            "enum": [
                "MOBILE APP",
                "APPEARS",
                "DATA COLLECTION BUNDLE",
                "DATA TREE",
                "DATACAST URL",
                "DIRECT DOWNLOAD",
                "EOSDIS DATA POOL",
                "Earthdata Search",
                "GIOVANNI",
                "GoLIVE Portal",
                "IceBridge Portal",
                "LAADS",
                "LANCE",
                "MIRADOR",
                "MODAPS",
                "NOAA CLASS",
                "NOMADS",
                "Order",
                "PORTAL",
                "Subscribe",
                "USGS EARTH EXPLORER",
                "VERTEX",
                "VIRTUAL COLLECTION",
                "MAP",
                "WORLDVIEW",
                "LIVE ACCESS SERVER (LAS)",
                "MAP VIEWER",
                "SIMPLE SUBSET WIZARD (SSW)",
                "SUBSETTER",
                "GRADS DATA SERVER (GDS)",
                "MAP SERVICE",
                "OPENDAP DATA",
                "OpenSearch",
                "SERVICE CHAINING",
                "TABULAR DATA STREAM (TDS)",
                "THREDDS DATA",
                "WEB COVERAGE SERVICE (WCS)",
                "WEB FEATURE SERVICE (WFS)",
                "WEB MAP SERVICE (WMS)",
                "WEB MAP TILE SERVICE (WMTS)",
                "ALGORITHM DOCUMENTATION",
                "ALGORITHM THEORETICAL BASIS DOCUMENT (ATBD)",
                "ANOMALIES",
                "CASE STUDY",
                "DATA CITATION POLICY",
                "DATA QUALITY",
                "DATA RECIPE",
                "DELIVERABLES CHECKLIST",
                "GENERAL DOCUMENTATION",
                "HOW-TO",
                "IMPORTANT NOTICE",
                "INSTRUMENT/SENSOR CALIBRATION DOCUMENTATION",
                "MICRO ARTICLE",
                "PI DOCUMENTATION",
                "PROCESSING HISTORY",
                "PRODUCT HISTORY",
                "PRODUCT QUALITY ASSESSMENT",
                "PRODUCT USAGE",
                "PRODUCTION HISTORY",
                "PUBLICATIONS",
                "READ-ME",
                "REQUIREMENTS AND DESIGN",
                "SCIENCE DATA PRODUCT SOFTWARE DOCUMENTATION",
                "SCIENCE DATA PRODUCT VALIDATION",
                "USER FEEDBACK PAGE",
                "USER'S GUIDE"
            ],
            "type": "string"
        },
        "RelatedUrlType": {
            "additionalProperties": false,
            "dependencies": {
                "Size": [
                    "SizeUnit"
                ]
            },
            "description": "This entity holds all types of online URL associated with the granule such as guide document or ordering site etc.",
            "properties": {
                "Description": {
                    "description": "Description of the web page at this URL.",
                    "maxLength": 4000,
                    "minLength": 1,
                    "type": "string"
                },
                "Format": {
                    "$ref": "#/definitions/DataFormatEnum",
                    "description": "The format of the resource."
                },
                "MimeType": {
                    "$ref": "#/definitions/MimeTypeEnum",
                    "description": "The mime type of the resource."
                },
                "Size": {
                    "description": "The size of the resource.",
                    "type": "number"
                },
                "SizeUnit": {
                    "$ref": "#/definitions/FileSizeUnitEnum",
                    "description": "Unit of information, together with Size determines total size in bytes of the resource."
                },
                "Subtype": {
                    "$ref": "#/definitions/RelatedUrlSubTypeEnum",
                    "description": "A keyword that provides more detailed information than Type of the online resource to this resource. For example if the Type=VIEW RELATED INFORMATION then the Subtype can be USER'S GUIDE or GENERAL DOCUMENTATION"
                },
                "Type": {
                    "$ref": "#/definitions/RelatedUrlTypeEnum",
                    "description": "A keyword describing the type of the online resource to this resource."
                },
                "URL": {
                    "description": "The URL for the relevant resource.",
                    "maxLength": 1024,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "required": [
                "URL",
                "Type"
            ],
            "type": "object"
        },
        "RelatedUrlTypeEnum": {
            "enum": [
                "DOWNLOAD SOFTWARE",
                "EXTENDED METADATA",
                "GET DATA",
                "GET RELATED VISUALIZATION",
                "GOTO WEB TOOL",
                "PROJECT HOME PAGE",
                "USE SERVICE API",
                "VIEW RELATED INFORMATION"
            ],
            "type": "string"
        },
        "ShortNameType": {
            "description": "The unique name of the platform or instrument.",
            "maxLength": 80,
            "minLength": 1,
            "type": "string"
        },
        "SpatialExtentType": {
            "additionalProperties": false,
            "anyOf": [
                {
                    "required": [
                        "GranuleLocalities"
                    ]
                },
                {
                    "required": [
                        "HorizontalSpatialDomain"
                    ]
                },
                {
                    "required": [
                        "VerticalSpatialDomains"
                    ]
                }
            ],
            "description": "This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain.",
            "properties": {
                "GranuleLocalities": {
                    "description": "This entity stores information used at the granule level to describe the labeling of granules with compounded time/space text values and which are subsequently used to define more phenomenological-based granules, thus the locality type and description are contained.",
                    "items": {
                        "$ref": "#/definitions/GranuleLocalityType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                },
                "HorizontalSpatialDomain": {
                    "$ref": "#/definitions/HorizontalSpatialDomainType",
                    "description": "This represents the granule horizontal spatial domain information."
                },
                "VerticalSpatialDomains": {
                    "description": "This represents the domain value and type for the granule's vertical spatial domain.",
                    "items": {
                        "$ref": "#/definitions/VerticalSpatialDomainType"
                    },
                    "minItems": 1,
                    "type": "array",
                    "_uniqueItems": true
                }
            },
            "type": "object"
        },
        "TemporalExtentType": {
            "description": "Information which describes the temporal extent of a specific granule.",
            "oneOf": [
                {
                    "additionalProperties": false,
                    "properties": {
                        "RangeDateTime": {
                            "$ref": "#/definitions/RangeDateTimeType",
                            "description": "Stores the data acquisition start and end date/time for a granule."
                        }
                    },
                    "required": [
                        "RangeDateTime"
                    ]
                },
                {
                    "additionalProperties": false,
                    "properties": {
                        "SingleDateTime": {
                            "_format": "date-time",
                            "description": "Stores the data acquisition date/time for a granule.",
                            "type": "string"
                        }
                    },
                    "required": [
                        "SingleDateTime"
                    ]
                }
            ],
            "type": "object"
        },
        "TilingCoordinateType": {
            "additionalProperties": false,
            "description": "Defines the minimum and maximum value for one dimension of a two dimensional coordinate system.",
            "properties": {
                "MaximumValue": {
                    "type": "number"
                },
                "MinimumValue": {
                    "type": "number"
                }
            },
            "required": [
                "MinimumValue"
            ],
            "type": "object"
        },
        "TilingIdentificationSystemNameEnum": {
            "enum": [
                "CALIPSO",
                "MISR",
                "MODIS Tile EASE",
                "MODIS Tile SIN",
                "SMAP Tile EASE",
                "WELD Alaska Tile",
                "WELD CONUS Tile",
                "WRS-1",
                "WRS-2"
            ],
            "type": "string"
        },
        "TilingIdentificationSystemType": {
            "additionalProperties": false,
            "description": "This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection.",
            "properties": {
                "Coordinate1": {
                    "$ref": "#/definitions/TilingCoordinateType"
                },
                "Coordinate2": {
                    "$ref": "#/definitions/TilingCoordinateType"
                },
                "TilingIdentificationSystemName": {
                    "$ref": "#/definitions/TilingIdentificationSystemNameEnum"
                }
            },
            "required": [
                "TilingIdentificationSystemName",
                "Coordinate1",
                "Coordinate2"
            ],
            "type": "object"
        },
        "TrackPassTileType": {
            "additionalProperties": false,
            "description": "This element stores a track pass and its tile information. It will allow a user to search by pass number and their tiles that are contained with in a cycle number.  While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granules spatial extent.",
            "properties": {
                "Pass": {
                    "description": "A pass number identifies a subset of a granule's spatial extent. This element holds a pass number that exists in the granule and will allow a user to search by pass number that is contained within a cycle number.  While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit.",
                    "type": "integer"
                },
                "Tiles": {
                    "description": "A tile is a subset of a pass' spatial extent. This element holds a list of tile identifiers that exist in the granule and will allow a user to search by tile identifier that is contained within a pass number within a cycle number. Though intended to be generic, this comes from a SWOT mission requirement where a tile is a spatial extent that encompasses either a square scanning swath to the left or right of the ground track or a rectangle that includes a full scanning swath both to the left and right of the ground track.",
                    "items": {
                        "type": "string"
                    },
                    "minItems": 1,
                    "type": "array"
                }
            },
            "required": [
                "Pass"
            ],
            "type": "object"
        },
        "TrackType": {
            "additionalProperties": false,
            "description": "This element stores track information of the granule. Track information is used to allow a user to search for granules whose spatial extent is based on an orbital cycle, pass, and tile mapping. Though it is derived from the SWOT mission requirements, it is intended that this element type be generic enough so that other missions can make use of it. While track information is a type of spatial domain, it is expected that the metadata provider will provide geometry information that matches the spatial extent of the track information.",
            "properties": {
                "Cycle": {
                    "description": "An integer that represents a specific set of orbital spatial extents defined by passes and tiles. Though intended to be generic, this comes from a SWOT mission requirement where each cycle represents a set of 1/2 orbits. Each 1/2 orbit is called a 'pass'. During science mode, a cycle represents 21 days of 14 full orbits or 588 passes.",
                    "type": "integer"
                },
                "Passes": {
                    "description": "A pass number identifies a subset of a granule's spatial extent. This element holds a list of pass numbers and their tiles that exist in the granule. It will allow a user to search by pass number and its tiles that are contained with in a cycle number.  While trying to keep this generic for all to use, this comes from a SWOT requirement where a pass represents a 1/2 orbit. This element will then hold a list of 1/2 orbits and their tiles that together represent the granule's spatial extent.",
                    "items": {
                        "$ref": "#/definitions/TrackPassTileType"
                    },
                    "minItems": 1,
                    "type": "array"
                }
            },
            "required": [
                "Cycle",
                "Passes"
            ],
            "type": "object"
        },
        "VerticalSpatialDomainType": {
            "additionalProperties": false,
            "allOf": [
                {
                    "not": {
                        "required": [
                            "Value",
                            "MinimumValue"
                        ]
                    }
                },
                {
                    "not": {
                        "required": [
                            "Value",
                            "MaximumValue"
                        ]
                    }
                }
            ],
            "description": "This entity contains the type and value for the granule's vertical spatial domain.",
            "oneOf": [
                {
                    "required": [
                        "Type",
                        "Value"
                    ]
                },
                {
                    "required": [
                        "Type",
                        "MinimumValue",
                        "MaximumValue"
                    ]
                }
            ],
            "properties": {
                "MaximumValue": {
                    "description": "Describes the extent of the area of vertical space covered by the granule. Use this and MinimumValue to represent a range of values (Min and Max).",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                },
                "MinimumValue": {
                    "description": "Describes the extent of the area of vertical space covered by the granule. Use this and MaximumValue to represent a range of values (Min and Max).",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                },
                "Type": {
                    "$ref": "#/definitions/VerticalSpatialDomainTypeEnum",
                    "description": "Describes the type of the area of vertical space covered by the granule locality."
                },
                "Unit": {
                    "description": "Describes the unit of the vertical extent value.",
                    "enum": [
                        "Fathoms",
                        "Feet",
                        "HectoPascals",
                        "Kilometers",
                        "Meters",
                        "Millibars",
                        "PoundsPerSquareInch",
                        "Atmosphere",
                        "InchesOfMercury",
                        "InchesOfWater"
                    ],
                    "type": "string"
                },
                "Value": {
                    "description": "Describes the extent of the area of vertical space covered by the granule. Use this for Atmosphere profiles or for a specific value.",
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                }
            },
            "type": "object"
        },
        "VerticalSpatialDomainTypeEnum": {
            "enum": [
                "Atmosphere Layer",
                "Pressure",
                "Altitude",
                "Depth"
            ],
            "type": "string"
        },
        "ZoneIdentifierType": {
            "description": "The appropriate numeric or alpha code used to identify the various zones in the granule's grid coordinate system.",
            "maxLength": 80,
            "minLength": 1,
            "type": "string"
        }
    },
    "properties": {
        "AccessConstraints": {
            "$ref": "#/definitions/AccessConstraintsType",
            "description": "Allows the author to constrain access to the granule. Some words that may be used in this element's value include: Public, In-house, Limited, None. The value field is used for special ACL rules (Access Control Lists (http://en.wikipedia.org/wiki/Access_control_list)). For example it can be used to hide metadata when it isn't ready for public consumption."
        },
        "AdditionalAttributes": {
            "description": "Reference to an additional attribute in the parent collection. The attribute reference may contain a granule specific value that will override the value in the parent collection for this granule. An attribute with the same name must exist in the parent collection.",
            "items": {
                "$ref": "#/definitions/AdditionalAttributeType"
            },
            "minItems": 1,
            "type": "array",
            "_uniqueItems": true
        },
        "CloudCover": {
            "description": "A percentage value indicating how much of the area of a granule (the EOSDIS data unit) has been obscured by clouds. It is worth noting that there are many different measures of cloud cover within the EOSDIS data holdings and that the cloud cover parameter that is represented in the archive is dataset-specific.",
            "type": "number"
        },
        "CollectionReference": {
            "$ref": "#/definitions/CollectionReferenceType",
            "description": "The collection metadata record's short name and version, or entry title to which this granule metadata record belongs."
        },
        "DataGranule": {
            "$ref": "#/definitions/DataGranuleType",
            "description": "This entity stores basic descriptive characteristics associated with a granule."
        },
        "GranuleUR": {
            "description": "The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider.",
            "maxLength": 250,
            "minLength": 1,
            "type": "string"
        },
        "GridMappingNames": {
            "description": "Represents the native grid mapping of the granule, if the granule is gridded.",
            "items": {
                "$ref": "#/definitions/GridMappingNameType"
            },
            "type": "array"
        },
        "InputGranules": {
            "description": "This entity contains the identification of the input granule(s) for a specific granule.",
            "items": {
                "maxLength": 500,
                "minLength": 1,
                "type": "string"
            },
            "minItems": 1,
            "type": "array",
            "_uniqueItems": true
        },
        "MeasuredParameters": {
            "description": "This entity contains the name of the geophysical parameter expressed in the data as well as associated quality flags and quality statistics. The quality statistics element contains measures of quality for the granule. The parameters used to set these measures are not preset and will be determined by the data producer. Each set of measures can occur many times either for the granule as a whole or for individual parameters. The quality flags contain the science, operational and automatic quality flags which indicate the overall quality assurance levels of specific parameter values within a granule.",
            "items": {
                "$ref": "#/definitions/MeasuredParameterType"
            },
            "minItems": 1,
            "type": "array",
            "_uniqueItems": true
        },
        "MetadataSpecification": {
            "$ref": "#/definitions/MetadataSpecificationType",
            "description": "Requires the user to add in schema information into every granule record. It includes the schema's name, version, and URL location. The information is controlled through enumerations at the end of this schema."
        },
        "NativeProjectionNames": {
            "description": "Represents the native projection of the granule if the granule has a native projection.",
            "items": {
                "$ref": "#/definitions/ProjectionNameType"
            },
            "type": "array"
        },
        "OrbitCalculatedSpatialDomains": {
            "description": "This entity is used to store the characteristics of the orbit calculated spatial domain to include the model name, orbit number, start and stop orbit number, equator crossing date and time, and equator crossing longitude.",
            "items": {
                "$ref": "#/definitions/OrbitCalculatedSpatialDomainType"
            },
            "minItems": 1,
            "type": "array",
            "_uniqueItems": true
        },
        "PGEVersionClass": {
            "$ref": "#/definitions/PGEVersionClassType",
            "description": "This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule."
        },
        "Platforms": {
            "description": "A reference to a platform in the parent collection that is associated with the acquisition of the granule. The platform must exist in the parent collection. For example, Platform types may include (but are not limited to): ADEOS-II, AEM-2, Terra, Aqua, Aura, BALLOONS, BUOYS, C-130, DEM, DMSP-F1,etc.",
            "items": {
                "$ref": "#/definitions/PlatformType"
            },
            "minItems": 1,
            "type": "array",
            "_uniqueItems": true
        },
        "Projects": {
            "description": "The name of the scientific program, field campaign, or project from which the data were collected. This element is intended for the non-space assets such as aircraft, ground systems, balloons, sondes, ships, etc. associated with campaigns. This element may also cover a long term project that continuously creates new data sets \u2014 like MEaSUREs from ISCCP and NVAP or CMARES from MISR. Project also includes the Campaign sub-element to support multiple campaigns under the same project.",
            "items": {
                "$ref": "#/definitions/ProjectType"
            },
            "minItems": 1,
            "type": "array",
            "_uniqueItems": true
        },
        "ProviderDates": {
            "description": "Dates related to activities involving the the granule and the data provider database with the exception for Delete. For Create, Update, and Insert the date is the date that the granule file is created, updated, or inserted into the provider database by the provider. Delete is the date that the CMR should delete the granule metadata record from its repository.",
            "items": {
                "$ref": "#/definitions/ProviderDateType"
            },
            "maxItems": 4,
            "minItems": 1,
            "type": "array",
            "_uniqueItems": true
        },
        "RelatedUrls": {
            "description": "This element describes any data/service related URLs that include project home pages, services, related data archives/servers, metadata extensions, direct links to online software packages, web mapping services, links to images, or other data.",
            "items": {
                "$ref": "#/definitions/RelatedUrlType"
            },
            "minItems": 1,
            "type": "array"
        },
        "SpatialExtent": {
            "$ref": "#/definitions/SpatialExtentType",
            "description": "This class contains attributes which describe the spatial extent of a granule. Spatial Extent includes any or all of Granule Localities, Horizontal Spatial Domain, and Vertical Spatial Domain."
        },
        "TemporalExtent": {
            "$ref": "#/definitions/TemporalExtentType",
            "description": "This class contains attributes which describe the temporal extent of a granule. Temporal Extent includes either a Range Date Time, or a Single Date Time"
        },
        "TilingIdentificationSystem": {
            "$ref": "#/definitions/TilingIdentificationSystemType",
            "description": "This entity stores the tiling identification system for the granule. The tiling identification system information is an alternative way to express granule's spatial coverage based on a certain two dimensional coordinate system defined by the providers. The name must match the name in the parent collection."
        }
    },
    "required": [
        "GranuleUR",
        "ProviderDates",
        "CollectionReference",
        "MetadataSpecification"
    ],
    "title": "UMM-G",
    "type": "object"
}