From 2b25ae16b079e3afbd0cd057fb147872e50869b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 30 Sep 2021 15:10:27 -0500 Subject: [PATCH 001/261] Add more GCMD checks --- pyQuARC/code/constants.py | 16 +- pyQuARC/code/custom_validator.py | 32 ++- pyQuARC/code/gcmd_validator.py | 169 +++++++++++++--- pyQuARC/code/string_validator.py | 118 ++++++++++- pyQuARC/code/url_validator.py | 5 +- pyQuARC/schemas/MimeType.csv | 38 ++++ pyQuARC/schemas/check_messages.json | 52 ++++- pyQuARC/schemas/checks.json | 39 +++- pyQuARC/schemas/chronounits.csv | 185 ++++++++++++++++++ pyQuARC/schemas/horizontalresolutionrange.csv | 16 ++ pyQuARC/schemas/rule_mapping.json | 148 +++++++++++++- pyQuARC/schemas/temporalresolutionrange.csv | 21 ++ pyQuARC/schemas/verticalresolutionrange.csv | 9 + 13 files changed, 791 insertions(+), 57 deletions(-) create mode 100644 pyQuARC/schemas/MimeType.csv create mode 100644 pyQuARC/schemas/chronounits.csv create mode 100644 pyQuARC/schemas/horizontalresolutionrange.csv create mode 100644 pyQuARC/schemas/temporalresolutionrange.csv create mode 100644 pyQuARC/schemas/verticalresolutionrange.csv diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index e89ad327..f9fdda28 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -25,14 +25,19 @@ UMM_JSON ], "csv": [ + "chronounits", "granuledataformat", + "horizontalresolutionrange", "instruments", "locations", + "MimeType", + "platforms", "projects", "providers", - "platforms", + "rucontenttype", "sciencekeywords", - "rucontenttype" + "temporalresolutionrange", + "verticalresolutionrange" ], "xsd": [ f"{DIF}_xml", f"{ECHO10}_xml" ], "xml": [ "catalog" ] @@ -58,14 +63,19 @@ GCMD_BASIC_URL = "https://gcmdservices.gsfc.nasa.gov/kms/concepts/concept_scheme/" GCMD_KEYWORDS = [ + "chronounits", "granuledataformat", + "horizontalresolutionrange", "instruments", "locations", + "MimeType", "platforms", "projects", "providers", "rucontenttype", - "sciencekeywords" + "sciencekeywords", + "temporalresolutionrange", + "verticalresolutionrange", ] GCMD_LINKS = { diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 3171bcdc..85c5f088 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -68,32 +68,30 @@ def availability_check( } @staticmethod - def bounding_coordinate_logic_check(coordinates_dictionary): + def bounding_coordinate_logic_check(west, north, east, south): # Checks if the logic for coordinate values make sense - coordinates_dictionary = coordinates_dictionary or {} - coordinates = [ - "WestBoundingCoordinate", - "EastBoundingCoordinate", - "NorthBoundingCoordinate", - "SouthBoundingCoordinate" - ] - result = { "valid": False, "value": "" } - - values = { - coordinate: int(coordinates_dictionary.get(coordinate, 0)) - for coordinate in coordinates - } + west = float(west) + east = float(east) + south = float(south) + north = float(north) result["valid"] = ( - (values["NorthBoundingCoordinate"] > values["SouthBoundingCoordinate"]) + (south >= -90 and south <=90) + and + (north >= -90 and north <=90) and - (values["EastBoundingCoordinate"] > values["WestBoundingCoordinate"]) + (east >= -180 and east <=180) + and + (west >= -180 and west <=180) + and + (north > south) + and + (east > west) ) - return result @staticmethod diff --git a/pyQuARC/code/gcmd_validator.py b/pyQuARC/code/gcmd_validator.py index 2240ddd3..2304dd04 100644 --- a/pyQuARC/code/gcmd_validator.py +++ b/pyQuARC/code/gcmd_validator.py @@ -16,12 +16,13 @@ class GcmdValidator: downloaded = { keyword: False for keyword in GCMD_LINKS } def __init__(self): - GcmdValidator._download_files() + # GcmdValidator._download_files() + self.file_content = GcmdValidator._load_csvs() self.keywords = { "science": GcmdValidator._create_hierarchy_dict( - GcmdValidator._read_from_csv("sciencekeywords") + self._read_from_csv("sciencekeywords") ), - "spatial_keyword": GcmdValidator._read_from_csv( + "spatial_keyword": self._read_from_csv( "locations", columns=[ "Location_Category", @@ -31,42 +32,85 @@ def __init__(self): "Location_Subregion3", ], ), - "provider_short_name": GcmdValidator._read_from_csv( + "locations": GcmdValidator._create_hierarchy_dict( + self._read_from_csv("locations") + ), + "provider": GcmdValidator._create_hierarchy_dict( + self._read_from_csv( + "providers", + columns=["Short_Name", "Long_Name"], + hierarchy=True + ) + ), + "provider_short_name": self._read_from_csv( "providers", columns=["Short_Name"] ), + "provider_long_name": self._read_from_csv( + "providers", columns=["Long_Name"] + ), "instrument": GcmdValidator._create_hierarchy_dict( - GcmdValidator._read_from_csv("instruments") + self._read_from_csv( + "instruments", + columns=["Short_Name", "Long_Name"], + hierarchy=True + ) ), - "instrument_short_name": GcmdValidator._read_from_csv( + "instrument_short_name": self._read_from_csv( "instruments", columns=["Short_Name"] ), - "instrument_long_name": GcmdValidator._read_from_csv( + "instrument_long_name": self._read_from_csv( "instruments", columns=["Long_Name"] ), "campaign": GcmdValidator._create_hierarchy_dict( - GcmdValidator._read_from_csv("projects") + self._read_from_csv( + "projects", + columns=["Short_Name", "Long_Name"], + hierarchy=True + ) ), - "campaign_short_name": GcmdValidator._read_from_csv( + "campaign_short_name": self._read_from_csv( "projects", columns=["Short_Name"] ), - "campaign_long_name": GcmdValidator._read_from_csv( + "campaign_long_name": self._read_from_csv( "projects", columns=["Long_Name"] ), - "granule_data_format": GcmdValidator._read_from_csv( + "granule_data_format": self._read_from_csv( "granuledataformat", columns=["Short_Name", "Long_Name"] ), - "platform_short_name": GcmdValidator._read_from_csv( + "platform": GcmdValidator._create_hierarchy_dict( + self._read_from_csv( + "platforms", + columns=["Short_Name", "Long_Name"], + hierarchy=True + ) + ), + "platform_short_name": self._read_from_csv( "platforms", columns=["Short_Name"] ), - "platform_long_name": GcmdValidator._read_from_csv( + "platform_long_name": self._read_from_csv( "platforms", columns=["Long_Name"] ), - "platform_type": GcmdValidator._read_from_csv( + "platform_type": self._read_from_csv( "platforms", columns=["Category"] ), - "rucontenttype": GcmdValidator._read_from_csv( + "rucontenttype": self._read_from_csv( "rucontenttype", columns=["Type", "Subtype"] - ) + ), + "chronounits": GcmdValidator._create_hierarchy_dict( + self._read_from_csv("chronounits") + ), + "horizontalresolutionrange": self._read_from_csv( + "horizontalresolutionrange", columns=["Horizontal_Resolution_Range"] + ), + "verticalresolutionrange": self._read_from_csv( + "verticalresolutionrange", columns=["Vertical_Resolution_Range"] + ), + "temporalresolutionrange": self._read_from_csv( + "temporalresolutionrange", columns=["Temporal_Resolution_Range"] + ), + "mimetype": self._read_from_csv( + "MimeType", columns=["MimeType"] + ), } @staticmethod @@ -114,7 +158,19 @@ def _create_hierarchy_dict(keywords): return hierarchy_dict @staticmethod - def _read_from_csv(keyword_kind, columns=None): + def _load_csvs(): + content = {} + for key, _ in GCMD_LINKS.items(): + csvfile = open(SCHEMA_PATHS[key]) + reader = csv.reader(csvfile) + next(reader) # Remove the metadata (1st column) + headers = next(reader) # Get the headers (2nd column) + list_of_rows = list(reader) + csvfile.close() + content[key] = headers, list_of_rows + return content + + def _read_from_csv(self, keyword_kind, columns=None, hierarchy=False): """ Reads keywords from the corresponding csv based on the kind of keyword @@ -128,12 +184,8 @@ def _read_from_csv(keyword_kind, columns=None): Returns: (list): list of keywords or list of list of rows from the csv """ - csvfile = open(SCHEMA_PATHS[keyword_kind]) - reader = csv.reader(csvfile) - next(reader) # Remove the metadata (1st column) - headers = next(reader) # Get the headers (2nd column) - list_of_rows = list(reader) - if columns: + headers, list_of_rows = self.file_content[keyword_kind] + if (not hierarchy) and columns: return_value = [] for column in columns: return_value.extend( @@ -143,12 +195,13 @@ def _read_from_csv(keyword_kind, columns=None): ) else: start = 1 if keyword_kind == "projects" else 0 + start = headers.index(columns[0]) if columns else 0 + end = (headers.index(columns[-1]) + 1) if columns else None return_value = [ [kw for keyword in useful_data if (kw := keyword.strip())] for row in list_of_rows - if (useful_data := row[start : len(row) - 1]) # remove UUID (last column) + if (useful_data := row[start : end if end else (len(row) - 1)]) # remove UUID (last column) ] - csvfile.close() return return_value @staticmethod @@ -170,7 +223,7 @@ def merge_dicts(parent, child): return parent, child else: for key in child: - if parent.get(key): + if (parent.get(key) and not(parent.get(key) == LEAF)): parent[key], _ = GcmdValidator.merge_dicts(parent[key], child[key]) else: parent[key] = child[key] @@ -242,18 +295,48 @@ def validate_platform_type(self, input_keyword): """ return input_keyword in self.keywords["platform_type"] + def validate_platform_short_long_name_consistency(self, input_keyword): + """ + Validates GCMD platform short name and long name consistency + """ + return GcmdValidator.validate_recursively( + self.keywords["platform"], input_keyword + )[0] + def validate_provider_short_name(self, input_keyword): """ Validates GCMD provider short name """ return input_keyword in self.keywords["provider_short_name"] + def validate_provider_long_name(self, input_keyword): + """ + Validates GCMD provider long name + """ + return input_keyword in self.keywords["provider_long_name"] + + def validate_provider_short_long_name_consistency(self, input_keyword): + """ + Validates GCMD provider short name and long name consistency + """ + return GcmdValidator.validate_recursively( + self.keywords["provider"], input_keyword + )[0] + def validate_spatial_keyword(self, input_keyword): """ Validates GCMD spatial keyword """ return input_keyword in self.keywords["spatial_keyword"] + def validate_location_hierarchy(self, input_keyword): + """ + Validates the Location hierarchy against GCMD 'locations' list + """ + return GcmdValidator.validate_recursively( + self.keywords["locations"], input_keyword + ) + def validate_campaign_short_long_name_consistency(self, input_keyword): """ Validates GCMD campaign short name and long name consistency @@ -282,6 +365,38 @@ def validate_data_format(self, input_keyword): def validate_online_resource_type(self, input_keyword): """ - Validates the Online Resource Type agains GCMD 'rucontent' list + Validates the Online Resource Type against GCMD 'rucontent' list """ return input_keyword in self.keywords["rucontenttype"] + + def validate_mime_type(self, input_keyword): + """ + Validates the Mime Type against GCMD 'MimeType' list + """ + return input_keyword in self.keywords["mimetype"] + + def validate_horizontal_resolution_range(self, input_keyword): + """ + Validates the Horizontal Resolution Range against GCMD 'horizontalresolutionrange' list + """ + return input_keyword in self.keywords["horizontalresolutionrange"] + + def validate_vertical_resolution_range(self, input_keyword): + """ + Validates the vertical Resolution Range against GCMD 'verticalresolutionrange' list + """ + return input_keyword in self.keywords["verticalresolutionrange"] + + def validate_temporal_resolution_range(self, input_keyword): + """ + Validates the temporal Resolution Range against GCMD 'temporalresolutionrange' list + """ + return input_keyword in self.keywords["temporalresolutionrange"] + + def validate_chrono_unit_hierarchy(self, input_keyword): + """ + Validates GCMD science keywords + """ + return GcmdValidator.validate_recursively( + self.keywords["chronounits"], input_keyword + ) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index bac0ed7e..32667525 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -90,7 +90,7 @@ def science_keywords_gcmd_check(*args): @staticmethod @if_arg - def data_center_short_name_gcmd_check(value): + def organization_short_name_gcmd_check(value): return { "valid": StringValidator.gcmdValidator.validate_provider_short_name( value.upper() @@ -98,6 +98,27 @@ def data_center_short_name_gcmd_check(value): "value": value, } + @staticmethod + @if_arg + def organization_long_name_gcmd_check(value): + return { + "valid": StringValidator.gcmdValidator.validate_provider_long_name( + value.upper() + ), + "value": value, + } + + @staticmethod + @if_arg + def organization_short_long_name_consistency_check(*args): + received_keyword = [arg.upper().strip() for arg in args if arg] + return { + "valid": StringValidator.gcmdValidator.validate_provider_short_long_name_consistency( + received_keyword + ), + "value": (args[0], args[1]), + } + @staticmethod @if_arg def instrument_short_long_name_consistency_check(*args): @@ -159,6 +180,17 @@ def platform_type_gcmd_check(value): "value": value, } + @staticmethod + @if_arg + def platform_short_long_name_consistency_check(*args): + received_keyword = [arg.upper().strip() for arg in args if arg] + return { + "valid": StringValidator.gcmdValidator.validate_platform_short_long_name_consistency( + received_keyword + ), + "value": (args[0], args[1]), + } + @staticmethod @if_arg def spatial_keyword_gcmd_check(value): @@ -219,3 +251,87 @@ def online_resource_type_gcmd_check(resource_type): ), "value": resource_type, } + + @staticmethod + @if_arg + def location_gcmd_check(*args): + """ + Checks if the GCMD location keyword hierarchy is correct + + Args: + args (list): List of the keyword in order of hierarchy + example: ['CONTINENT', "AFRICA", "CENTRAL AFRICA", "ANGOLA", None] + + Returns: + (dict) An object with the validity of the check and the instance + """ + value = None + received_keyword = [arg.upper().strip() for arg in args if arg] + validity, invalid_value = StringValidator.gcmdValidator.validate_location_hierarchy( + received_keyword + ) + if not validity: + value = f"'{invalid_value}' in the hierarchy '{'/'.join(received_keyword)}'" + return {"valid": validity, "value": value if value else received_keyword} + + @staticmethod + @if_arg + def chrono_gcmd_check(*args): + """ + Checks if the Chrono Units keyword hierarchy is correct + + Args: + args (list): List of the keyword in order of hierarchy + example: ['PHANEROZOIC','CENOZOIC','QUATERNARY','PLEISTOCENE','CALABRIAN'] + + Returns: + (dict) An object with the validity of the check and the instance + """ + value = None + received_keyword = [arg.upper().strip() for arg in args if arg] + validity, invalid_value = StringValidator.gcmdValidator.validate_chrono_unit_hierarchy( + received_keyword + ) + if not validity: + value = f"'{invalid_value}' in the hierarchy '{'/'.join(received_keyword)}'" + return {"valid": validity, "value": value if value else received_keyword} + + @staticmethod + @if_arg + def horizontal_range_res_gcmd_check(resource_type): + return { + "valid": StringValidator.gcmdValidator.validate_horizontal_resolution_range( + resource_type.upper() + ), + "value": resource_type, + } + + @staticmethod + @if_arg + def vertical_range_res_gcmd_check(resource_type): + return { + "valid": StringValidator.gcmdValidator.validate_vertical_resolution_range( + resource_type.upper() + ), + "value": resource_type, + } + + @staticmethod + @if_arg + def temporal_range_res_gcmd_check(resource_type): + return { + "valid": StringValidator.gcmdValidator.validate_temporal_resolution_range( + resource_type.upper() + ), + "value": resource_type, + } + + @staticmethod + @if_arg + def mime_type_gcmd_check(resource_type): + return { + "valid": StringValidator.gcmdValidator.validate_mime_type( + resource_type.upper() + ), + "value": resource_type, + } diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index fc65baca..c8abd472 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -89,7 +89,10 @@ def doi_check(doi): Returns: (dict) An object with the validity of the check and the instance/results """ - url = f"https://www.doi.org/{doi}" + if "doi.org/" in doi: + url = doi + else: + url = f"https://www.doi.org/{doi}" return UrlValidator.health_and_status_check(url) @staticmethod diff --git a/pyQuARC/schemas/MimeType.csv b/pyQuARC/schemas/MimeType.csv new file mode 100644 index 00000000..95466ef9 --- /dev/null +++ b/pyQuARC/schemas/MimeType.csv @@ -0,0 +1,38 @@ +"Hits: 37","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:54","Timestamp: 2021-09-27 10:25:56","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/MimeType/?format=xml""Case native" +MimeType,UUID +"application/gml+xml","40bdf6e5-780c-43e2-ab8e-e5dfae4bd779" +"application/gzip","a8ee535a-8bc8-46fd-8b97-917bd7ea7666" +"application/json","8542dd4a-a11b-475d-8d46-cad785a7f510" +"application/msword","c79a0e11-2774-4cf3-a194-45b9e58a93fd" +"application/octet-stream","b77e64ef-ce80-4dab-b552-c6062990a6e0" +"application/opensearchdescription+xml","07bcc60e-1551-44d9-b87e-7c260d230ecb" +"application/pdf","627269ae-ba93-492e-8c31-cc4de1d69810" +"application/tar+gzip","43ca8ee0-04a5-4020-b0ec-998ec0e0f30e" +"application/tar+zip","17e82b7c-498d-4d69-993c-fd691aa25ce8" +"application/tar","84ef762f-e348-42a6-981c-563822a47806" +"application/vnd.google-earth.kml+xml","80045dcb-18ee-463a-8baf-ffcabed510ea" +"application/vnd.google-earth.kmz","f7328bf5-8ef2-4f95-a4e0-6fb16d122237" +"application/vnd.ms-excel","7c99ff72-5239-424d-a0bf-9712c33ea76d" +"application/vnd.opendap.dap4.dmrpp+xml","b26761fa-8d8e-4bd8-a8ba-db6575554ad7" +"application/x-bufr","e384b8a8-8cec-4230-9ebe-4db76bbef706" +"application/x-hdf5","4e80047b-c50b-4805-ac68-789dbc38803f" +"application/x-hdfeos","b1eac265-2b00-4c39-a429-797c13a2c640" +"application/x-hdf","b0a3e733-4d1b-486f-b56c-c405a5e4367b" +"application/x-netcdf","2b192915-32a8-4b68-a720-8ca8a84f04ca" +"application/x-tar-gz","5e70beda-396e-4cc8-bdd5-70dfc8a1142e" +"application/x-vnd.iso.19139-2+xml","c1a8dbb7-312d-4481-998e-58d126b32080" +"application/xml","dd6c5cea-4100-4973-9ba9-659fdd7fd608" +"application/zip","4e5db77b-bc1d-4f7c-9f13-e3e54e0b2e3b" +"image/bmp","b7687b8f-7a24-4150-bd9d-28e0d53f7554" +"image/gif","ad61b259-8131-4e0e-aac8-a800a0a51ca6" +"image/jpeg","3f697f52-6a1c-4e2c-bd4b-13aaaf45f2e6" +"image/png","edb9e800-ec31-4d5c-848d-c548fd151db2" +"image/tiff","3e048f9e-8f93-4f0c-9f0b-20bafb909c68" +"image/vnd.collada+xml","d3ef6fe7-b6cd-45b4-9a27-d42fa3289116" +"text/css","3195dfce-51db-4b40-aadb-808b43573743" +"text/csv","2065aabb-9beb-4c84-8ad7-0e16cfed17cf" +"text/html","415a10b5-7286-4195-a88e-00c7b995b7d0" +"text/javascript","40cb0bdd-67f4-43c8-aa57-2bdc260e6950" +"text/markdown","b403039f-a107-4a84-88a1-29e4d1b30b0b" +"text/plain","fea4e0a7-d794-481d-9915-52f1be226714" +"text/xml","091b6afc-ab75-4790-8e71-3b32ae8bd0a4" diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 1d22aa50..31513da7 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -95,6 +95,14 @@ }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." }, + "location_gcmd_check": { + "failure": "`{}` is not a valid GCMD keyword.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, "eosdis_doi_authority_check": { "failure": "`{}` may be an invalid value.", "help": { @@ -111,7 +119,7 @@ }, "remediation": "Consider updating the delete date to a future date or remove it from the metadata if it is no longer valid." }, - "data_center_short_name_gcmd_check": { + "organization_short_name_gcmd_check": { "failure": "The provided data center short name `{}` does not comply with the GCMD. ", "help": { "message": "", @@ -656,7 +664,7 @@ "remediation": "Consider updating the review date to a future date or remove it from the metadata if it is no longer valid." }, "iso_topic_category_check": { - "failure": "Invalid ISO Topic Category.", + "failure": "Invalid ISO Topic Category `{}`.", "help": { "message": "", "url": "" @@ -718,5 +726,45 @@ "url": "" }, "remediation": "Please provide a data access URL. This link should point as directly to the described data as possible. " + }, + "horizontal_resolution_range_check": { + "failure": "The provided Horizontal Resolution Range does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "vertical_resolution_range_check": { + "failure": "The provided Vertical Resolution Range `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "temporal_resolution_range_check": { + "failure": "The provided Temporal Resolution Range `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "mime_type_gcmd_check": { + "failure": "The provided Mime Type `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "chrono_unit_gcmd_check": { + "failure": "The provided Chronostratigraphic Unit `{}` does not comply with the GCMD hierarchy.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." } } diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index be86d0aa..323b36c2 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -64,9 +64,9 @@ "check_function": "mime_type_check", "available": true }, - "data_center_short_name_gcmd_check": { + "organization_short_name_gcmd_check": { "data_type": "string", - "check_function": "data_center_short_name_gcmd_check", + "check_function": "organization_short_name_gcmd_check", "available": true }, "instrument_short_long_name_consistency_check": { @@ -99,11 +99,21 @@ "check_function": "platform_type_gcmd_check", "available": true }, + "platform_short_long_name_consistency_check": { + "data_type": "string", + "check_function": "platform_short_long_name_consistency_check", + "available": true + }, "spatial_keyword_gcmd_check": { "data_type": "string", "check_function": "spatial_keyword_gcmd_check", "available": true }, + "location_gcmd_check": { + "data_type": "string", + "check_function": "location_gcmd_check", + "available": true + }, "campaign_short_long_name_consistency_check": { "data_type": "string", "check_function": "campaign_short_long_name_consistency_check", @@ -124,6 +134,31 @@ "check_function": "data_format_gcmd_check", "available": true }, + "mime_type_gcmd_check": { + "data_type": "string", + "check_function": "mime_type_gcmd_check", + "available": true + }, + "temporal_range_res_gcmd_check": { + "data_type": "string", + "check_function": "temporal_range_res_gcmd_check", + "available": true + }, + "vertical_range_res_gcmd_check": { + "data_type": "string", + "check_function": "vertical_range_res_gcmd_check", + "available": true + }, + "horizontal_range_res_gcmd_check": { + "data_type": "string", + "check_function": "horizontal_range_res_gcmd_check", + "available": true + }, + "chrono_unit_gcmd_check": { + "data_type": "string", + "check_function": "chrono_gcmd_check", + "available": true + }, "presence_check": { "data_type": "custom", "check_function": "presence_check", diff --git a/pyQuARC/schemas/chronounits.csv b/pyQuARC/schemas/chronounits.csv new file mode 100644 index 00000000..0f8d8301 --- /dev/null +++ b/pyQuARC/schemas/chronounits.csv @@ -0,0 +1,185 @@ +"Hits: 184","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:36:30","Timestamp: 2021-09-30 10:00:01","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/chronounits/?format=xml""Case native" +Eon,Era,Period,Epoch,Age,Sub-Age,UUID +"ARCHAEAN","EOARCHEAN","","","","","8dff752e-939d-4b16-a735-bb4af8dbd785" +"ARCHAEAN","MESOARCHEAN","","","","","27660bb3-982e-414c-991a-707abd861f46" +"ARCHAEAN","NEOARCHEAN","","","","","d2d0ac71-d27d-46cb-b95b-39a6f796c501" +"ARCHAEAN","PALEOARCHEAN","","","","","2cd7912b-8cf2-41a1-99b9-8797dcd94fa7" +"ARCHAEAN","","","","","","7160e90a-d7c4-4817-9b1c-e82211688bdb" +"HADEAN","","","","","","c7626c29-a1d3-4d0c-a263-616fe060f164" +"NOT APPLICABLE","NOT APPLICABLE","NOT APPLICABLE","NOT APPLICABLE","NOT APPLICABLE","","13e26688-3e0e-49da-b7cb-0d25d51a9e59" +"NOT APPLICABLE","NOT APPLICABLE","NOT APPLICABLE","NOT APPLICABLE","","","9b163dab-3afd-4084-b6c8-380f96a40f75" +"NOT APPLICABLE","NOT APPLICABLE","NOT APPLICABLE","","","","bf921c77-6ec0-494f-a9b8-54c01ca6560a" +"NOT APPLICABLE","NOT APPLICABLE","","","","","c3103f11-b82a-45fc-82b5-2ac7e353950d" +"NOT APPLICABLE","","","","","","0673738a-3751-4d6e-9df0-b2eda0bde993" +"PHANEROZOIC","CENOZOIC","NEOGENE","MIOCENE","AQUITANIAN","","027286de-800d-4141-b17b-6df71fbef30c" +"PHANEROZOIC","CENOZOIC","NEOGENE","MIOCENE","BURDIGALIAN","","d76017a5-c60a-4910-81f7-58a559d32990" +"PHANEROZOIC","CENOZOIC","NEOGENE","MIOCENE","LANGHIAN","","4faea12f-7425-42c4-abcc-e9253d312e57" +"PHANEROZOIC","CENOZOIC","NEOGENE","MIOCENE","MESSINIAN","","630bb839-bbf4-4183-92a2-d0aa25de6dcb" +"PHANEROZOIC","CENOZOIC","NEOGENE","MIOCENE","SERRAVALLIAN","","8f22650c-e749-4775-a99a-9978a89456d0" +"PHANEROZOIC","CENOZOIC","NEOGENE","MIOCENE","TORTONIAN","","a9eca563-b06d-433d-b00b-deb3a3572f02" +"PHANEROZOIC","CENOZOIC","NEOGENE","MIOCENE","","","32bf646d-d80c-49be-aee8-87ccdd4785af" +"PHANEROZOIC","CENOZOIC","NEOGENE","PLIOCENE","PIACENZIAN","","430b7535-b720-4b3e-a497-5517eb571a75" +"PHANEROZOIC","CENOZOIC","NEOGENE","PLIOCENE","ZANCLEAN","","cd16d901-1c9f-4373-ab7d-d5292049b7a6" +"PHANEROZOIC","CENOZOIC","NEOGENE","PLIOCENE","","","6cb96c3b-1a1c-4d26-a894-2638d5cd05d1" +"PHANEROZOIC","CENOZOIC","NEOGENE","","","","e5a3aed9-de46-4903-a999-f9f8bcdf1cd7" +"PHANEROZOIC","CENOZOIC","PALEOGENE","EOCENE","BARTONIAN","","67246f68-1e2e-48a8-b8c8-be04d247a4c2" +"PHANEROZOIC","CENOZOIC","PALEOGENE","EOCENE","LUTETIAN","","1fbdcab5-811a-4221-899a-3a0610cdcb26" +"PHANEROZOIC","CENOZOIC","PALEOGENE","EOCENE","PRIABONIAN","","788fb9ec-4963-40cc-8409-398dede7754b" +"PHANEROZOIC","CENOZOIC","PALEOGENE","EOCENE","YPRESIAN","","b5657be8-24d2-4cf0-90c2-c01922c74079" +"PHANEROZOIC","CENOZOIC","PALEOGENE","EOCENE","","","afd62c36-fd25-4673-a56d-85be8d47f3d0" +"PHANEROZOIC","CENOZOIC","PALEOGENE","OLIGOCENE","CHATTIAN","","9388f3a4-18df-45f6-ba3d-7a78579f6a6d" +"PHANEROZOIC","CENOZOIC","PALEOGENE","OLIGOCENE","RUPELIAN","","bb81d8bd-f837-4893-b560-921c28359975" +"PHANEROZOIC","CENOZOIC","PALEOGENE","OLIGOCENE","","","5e89981e-0ef5-4aec-b118-54fdf197eb05" +"PHANEROZOIC","CENOZOIC","PALEOGENE","PALEOCENE","DANIAN","","f2053865-d144-4d79-b18b-4fd361be25ae" +"PHANEROZOIC","CENOZOIC","PALEOGENE","PALEOCENE","SELANDIAN","","1f28f84d-f0ab-484e-8eea-2c9f5c141558" +"PHANEROZOIC","CENOZOIC","PALEOGENE","PALEOCENE","THANETIAN","","979bcb67-30f0-49c8-8e8e-fb7412e75efa" +"PHANEROZOIC","CENOZOIC","PALEOGENE","PALEOCENE","","","cb277225-be9e-4c22-954e-fe7352e9faa6" +"PHANEROZOIC","CENOZOIC","PALEOGENE","","","","a77f665d-345c-49b0-9e9b-f9f78a1415cc" +"PHANEROZOIC","CENOZOIC","QUATERNARY","HOLOCENE","GREENLANDIAN","","007cc0a7-cccf-47c9-a55d-af36592055b3" +"PHANEROZOIC","CENOZOIC","QUATERNARY","HOLOCENE","MEGHALAYAN","","078b8751-408f-4410-9925-0840a52e0b5c" +"PHANEROZOIC","CENOZOIC","QUATERNARY","HOLOCENE","NORTHGRIPPIAN","","faa0de65-292f-4a5e-9dc7-1893ca82180c" +"PHANEROZOIC","CENOZOIC","QUATERNARY","HOLOCENE","","","e000088a-8252-4603-ba55-38189c45612c" +"PHANEROZOIC","CENOZOIC","QUATERNARY","PLEISTOCENE","CALABRIAN","","4a8e2b77-e46a-4646-8a9d-1a99b6d8a4b0" +"PHANEROZOIC","CENOZOIC","QUATERNARY","PLEISTOCENE","GELASIAN","","ea3e9d14-1969-4add-83f3-a4c486b922e9" +"PHANEROZOIC","CENOZOIC","QUATERNARY","PLEISTOCENE","LATE","","9f54bcf3-64dc-480b-ba75-3298c2299f35" +"PHANEROZOIC","CENOZOIC","QUATERNARY","PLEISTOCENE","MIDDLE","","750b7e7e-8dd6-41ec-8e09-c3026baffd2b" +"PHANEROZOIC","CENOZOIC","QUATERNARY","PLEISTOCENE","","","a686e751-3639-4cd0-840b-c8ad25c441c1" +"PHANEROZOIC","CENOZOIC","QUATERNARY","","","","c7e7fb38-44ef-4c5b-aa1d-b3fdcf89d838" +"PHANEROZOIC","CENOZOIC","","","","","db5be985-d8dc-4063-abff-4cbd8eb39653" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","EARLY","ALBIAN","","f4da3849-801c-4b51-9403-45ec421dfa03" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","EARLY","APTIAN","","4542d23f-a390-4e21-a905-79ec5e9c66ec" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","EARLY","BARREMIAN","","a26a2ddd-4eb0-4aa8-a6db-8b47622b5dbe" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","EARLY","BERRIASIAN","","9d050d2d-3397-439c-86a5-0e41c3e8dfdc" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","EARLY","HAUTERIVIAN","","f270c702-4bc6-45bd-82ee-b8637073c96f" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","EARLY","VALANGINIAN","","9ff94259-fc2a-4899-b878-736daf6b3f94" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","EARLY","","","db06b2a9-4ed5-4222-8533-fbf3ed3bdc23" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","LATE","CAMPANIAN","","96713563-fdf4-4e05-ad85-36cf66a74260" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","LATE","CENOMANIAN","","66543c1a-4855-4ded-a610-c38a80cf158a" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","LATE","CONIACIAN","","f431ccfe-5f30-4faa-84d0-4621fb602f10" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","LATE","MAASTRICHTIAN","","8ce20eea-74f0-40cd-b611-4686427c5fa4" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","LATE","SANTONIAN","","2fc19a25-4320-4513-a4a3-f20548ed1daa" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","LATE","TURONIAN","","4912ab7c-dd62-48df-975c-e3e107a4b09b" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","LATE","","","d3928482-e056-4d2d-ae5a-1e7097099c2b" +"PHANEROZOIC","MESOZOIC","CRETACEOUS","","","","0d7a2c62-d0b0-4a13-8412-d7cc8d68aeff" +"PHANEROZOIC","MESOZOIC","JURASSIC","EARLY","HETTANGIAN","","fb29222e-8aaf-4b46-8672-8525a58e2b8d" +"PHANEROZOIC","MESOZOIC","JURASSIC","EARLY","PLIENSBACHIAN","","2dd020ac-d5ee-4f39-8a55-3d80a84854a7" +"PHANEROZOIC","MESOZOIC","JURASSIC","EARLY","SINEMURIAN","","071a00d6-29c6-460a-9d59-d593e430d263" +"PHANEROZOIC","MESOZOIC","JURASSIC","EARLY","TOARCIAN","","07d16792-c709-4db2-a744-97619e9bc680" +"PHANEROZOIC","MESOZOIC","JURASSIC","EARLY","","","bc9f3b87-69ff-4841-a227-309c69c952c2" +"PHANEROZOIC","MESOZOIC","JURASSIC","LATE","KIMMERIDGIAN","","19b97ca1-f6ae-4a27-be69-c67cd2bbd985" +"PHANEROZOIC","MESOZOIC","JURASSIC","LATE","OXFORDIAN","","97bead3b-1194-49ba-b39a-42f5462a36a4" +"PHANEROZOIC","MESOZOIC","JURASSIC","LATE","TITHONIAN","","a600cd3f-c92f-4a5b-a381-24e6f4904c9c" +"PHANEROZOIC","MESOZOIC","JURASSIC","LATE","","","47a5e636-ac8a-4c32-a356-d8c6a7172a8f" +"PHANEROZOIC","MESOZOIC","JURASSIC","MIDDLE","AALENIAN","","8d25cd2c-cb4e-4133-af8b-dcde0775c558" +"PHANEROZOIC","MESOZOIC","JURASSIC","MIDDLE","BAJOCIAN","","1386b377-26fd-49af-a7e3-7c8be3320997" +"PHANEROZOIC","MESOZOIC","JURASSIC","MIDDLE","BATHONIAN","","cd6d09ee-0c39-4a4f-9285-3bf616b0aae3" +"PHANEROZOIC","MESOZOIC","JURASSIC","MIDDLE","CALLOVIAN","","4e10cbfa-f2d3-4397-a353-752126197158" +"PHANEROZOIC","MESOZOIC","JURASSIC","MIDDLE","","","2df3bf58-8e9d-4c08-8370-3678b7bc94f6" +"PHANEROZOIC","MESOZOIC","JURASSIC","","","","2fc65458-428c-4d02-ae15-f4b0a1c1dc39" +"PHANEROZOIC","MESOZOIC","TRIASSIC","EARLY","INDUAN","","b7e63199-3f21-4dd3-900c-e9bfc68c158a" +"PHANEROZOIC","MESOZOIC","TRIASSIC","EARLY","OLENEKIAN","","38c83387-bfa9-46d4-8f17-43fc46ac891e" +"PHANEROZOIC","MESOZOIC","TRIASSIC","EARLY","","","5cf3e2f7-3753-4c2f-ae82-4b8eebf4547f" +"PHANEROZOIC","MESOZOIC","TRIASSIC","LATE","CARNIAN","","db75736c-28be-470c-b532-71b81ca3fbcd" +"PHANEROZOIC","MESOZOIC","TRIASSIC","LATE","NORIAN","","11fdca69-e5fb-4b41-97e5-de678fd7eade" +"PHANEROZOIC","MESOZOIC","TRIASSIC","LATE","RHAETIAN","","ff133a4b-a23a-4710-93d3-2b802b21c8c4" +"PHANEROZOIC","MESOZOIC","TRIASSIC","LATE","","","35aa6f1d-da5b-473d-b95c-24ba82cc0780" +"PHANEROZOIC","MESOZOIC","TRIASSIC","MIDDLE","ANISIAN","","a4d1651b-a5c2-463d-afea-c211da0d1ea5" +"PHANEROZOIC","MESOZOIC","TRIASSIC","MIDDLE","LADINIAN","","4eb7b9e2-0478-478d-8674-1798e5fb1b2b" +"PHANEROZOIC","MESOZOIC","TRIASSIC","MIDDLE","","","ee019c00-2300-4675-9dea-8f993a744a67" +"PHANEROZOIC","MESOZOIC","TRIASSIC","","","","b44427cd-4b20-42a3-9e14-8d1f6d8399d5" +"PHANEROZOIC","MESOZOIC","","","","","a0bd8bda-adb6-4ea2-ae02-5caef1557ad6" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","FURONGIAN","JIANGSHANIAN","","1349b331-a168-48fc-a548-5c0c962271cf" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","FURONGIAN","PAIBIAN","","a00ebef2-3976-401b-a9fe-6bbcfe536737" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","FURONGIAN","STAGE 10","","d1d5b9db-42c5-4dea-a9c6-c0074eb3f3e8" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","FURONGIAN","","","d5a694f5-630e-4164-8789-aaa164a5e34a" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","MIAOLINGIAN","DRUMIAN","","dddaa5c1-3f72-44aa-9147-9b171782956b" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","MIAOLINGIAN","GUZHANGIAN","","5172e1c2-f89f-4155-aca3-ff51eba0a976" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","MIAOLINGIAN","WULIUAN","","639cf686-6c06-42a9-8ed1-79fe81c690fa" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","MIAOLINGIAN","","","ea5250b7-79a4-4f27-a5c5-9ebd41ab627b" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","SERIES 2","STAGE 3","","16e234b5-5ecb-4e03-b4ec-7a5e03db8017" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","SERIES 2","STAGE 4","","81103299-c23d-4a11-9a04-c1041fea5d1b" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","SERIES 2","","","c98a4c91-1b1d-464d-8380-497a186db7eb" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","TERRENEUVIAN","FORTUNIAN","","c0fcada2-4e5b-4349-9611-5879f541d4e4" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","TERRENEUVIAN","STAGE 2","","81cc3a0f-1084-42b4-9e40-637aad46aff4" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","TERRENEUVIAN","","","411f36cf-8c87-474c-bfaf-614723a4b938" +"PHANEROZOIC","PALEOZOIC","CAMBRIAN","","","","167bba30-03d3-4898-8c53-6e50828d1749" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","MISSISSIPPIAN","EARLY","TOURNAISIAN","a3e3914d-7777-4e91-80ca-60264adb1e73" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","MISSISSIPPIAN","EARLY","","c0489a3d-7571-44f8-ae10-bc56da60a29e" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","MISSISSIPPIAN","LATE","SERPUKHOVIAN","a5aede69-96cd-45bf-8a53-fe5c8fa3f3dc" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","MISSISSIPPIAN","LATE","","03796134-4406-43d2-88e9-8334843e9153" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","MISSISSIPPIAN","MIDDLE","VISEAN","e7f66704-f02e-4480-89d8-f0d5c28a18a3" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","MISSISSIPPIAN","MIDDLE","","0f8853f9-6fc0-4a72-9e61-8b8a5e1fdae7" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","MISSISSIPPIAN","","","a9aac8e7-10bc-4fe9-bf8e-c45db58b5eca" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","EARLY","BASHKIRIAN","20a0db39-423d-4fd9-a89c-7f760d14f844" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","EARLY","EARLY","1e8dafc0-21c0-4f49-82a6-9d38d8b9f16d" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","EARLY","","981c3e53-263e-4a91-a2ca-f5896635bbbd" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","LATE","GZHELIAN","47a51602-f1de-4188-ab8d-9aedd88a1936" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","LATE","KASIMOVIAN","b8d669b7-ed07-4bcc-8698-cbab463fefc8" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","LATE","","5fab652d-b69a-4005-b6cf-6d9d4a533703" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","MIDDLE","MOSCOVIAN","c9924714-7cba-41ff-b2e8-f2395d00583a" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","MIDDLE","","26d10402-338b-433e-a90e-5952e3ae044d" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","PENNSYLVANIAN","","","b99b0ad0-93d2-4acf-912c-13d5a1ba12a6" +"PHANEROZOIC","PALEOZOIC","CARBONIFEROUS","","","","b5b2981d-1623-4988-8b28-4cb8085a62e1" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","EARLY","EMSIAN","","6d53c67e-1019-4c4f-9ed5-b0fadab11f55" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","EARLY","LOCHKOVIAN","","8ec111c5-b689-4482-9bfe-a9884c44f7f3" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","EARLY","PRAGIAN","","2c142df4-aede-4962-b141-3b84cea639b0" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","EARLY","","","599af9b7-4517-45c2-8505-a46fc204e524" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","LATE","FAMENNIAN","","2cdd9d46-afee-4566-9469-d043dc6d8acd" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","LATE","FRASNIAN","","55c20bf0-31dd-4a82-a9a4-928f1a84f219" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","LATE","","","d6b9b49c-667e-4da7-bd72-32b4b5d89c0e" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","MIDDLE","EIFELIAN","","d002ab48-1cd0-42e3-9fc1-608db632e75c" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","MIDDLE","GIVETIAN","","f6913b28-5a77-4042-97ef-fcbf743c2982" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","MIDDLE","","","62e5494d-c515-47dc-a4af-f870874add3d" +"PHANEROZOIC","PALEOZOIC","DEVONIAN","","","","866fbfc3-7395-4a77-bc1e-29272e8b795c" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","EARLY","FLOIAN","","a58844b9-65e5-4b5a-98ab-b99968769d4a" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","EARLY","TREMADOCIAN","","cb8eee5d-fd20-4465-a917-051562f5fcd1" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","EARLY","","","00c6f0f3-5734-4500-a69e-f6780e365985" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","LATE","HIRNANTIAN","","00b13a7e-4d16-4d89-bc47-2839331545e6" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","LATE","KATIAN","","cda85cc0-7711-471d-ab14-c034ce53f24b" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","LATE","SANDBIAN","","08eaa5b8-60b3-4872-a0ad-d3dc4bb00d83" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","LATE","","","479caf3a-2744-4cef-b992-745c1ffd3e96" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","MIDDLE","DAPINGIAN","","d8843625-1941-4c7e-85f3-86e0b552518f" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","MIDDLE","DARRIWILIAN","","51b449af-bc34-4bee-9f61-61ba9721717d" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","MIDDLE","","","e941d527-8935-4b63-b76f-5febd609b9b5" +"PHANEROZOIC","PALEOZOIC","ORDOVICIAN","","","","02f8be65-6bdd-4f4d-9e69-adac5aec33f6" +"PHANEROZOIC","PALEOZOIC","PERMIAN","CISURALIAN","ARTINSKIAN","","d5b05025-2467-4ba9-95cd-2e6c9568d33d" +"PHANEROZOIC","PALEOZOIC","PERMIAN","CISURALIAN","ASSELIAN","","d8919fb7-eb9e-4ec6-ac4a-80d6251562f4" +"PHANEROZOIC","PALEOZOIC","PERMIAN","CISURALIAN","KUNGURIAN","","2ef634c0-2e47-419e-873e-4649974f7e64" +"PHANEROZOIC","PALEOZOIC","PERMIAN","CISURALIAN","SAKMARIAN","","feb84480-e62e-4999-b8ce-ad7df84dae5d" +"PHANEROZOIC","PALEOZOIC","PERMIAN","CISURALIAN","","","7cf7423c-bc51-44ae-bccd-d0cffa85bed9" +"PHANEROZOIC","PALEOZOIC","PERMIAN","GUADALUPIAN","CAPITANIAN","","93443b1e-9f1e-4f35-9b3b-222bf35a51c0" +"PHANEROZOIC","PALEOZOIC","PERMIAN","GUADALUPIAN","ROADIAN","","5ba80ec4-1060-4228-ab97-d7c24980c97e" +"PHANEROZOIC","PALEOZOIC","PERMIAN","GUADALUPIAN","WORDIAN","","92c8e901-67e5-4d5a-8744-1ffb7f5ec4cb" +"PHANEROZOIC","PALEOZOIC","PERMIAN","GUADALUPIAN","","","c78b1ba6-5187-474e-a7ad-fd46cd6d93ae" +"PHANEROZOIC","PALEOZOIC","PERMIAN","LOPINGIAN","CHANGHSINGIAN","","677882a4-d01c-4858-b889-575f405dccb9" +"PHANEROZOIC","PALEOZOIC","PERMIAN","LOPINGIAN","WUCHIAPINGIAN","","4d1a1c38-1c05-4bae-8810-aa1bb03ed1d2" +"PHANEROZOIC","PALEOZOIC","PERMIAN","LOPINGIAN","","","219be745-055a-4b37-883a-a0fece613e4f" +"PHANEROZOIC","PALEOZOIC","PERMIAN","","","","50437b21-5bf8-4e7e-abe0-007b56c09cca" +"PHANEROZOIC","PALEOZOIC","SILURIAN","LLANDOVERY","AERONIAN","","3f87a2a4-2e77-4955-83a4-f3ecad41ec1c" +"PHANEROZOIC","PALEOZOIC","SILURIAN","LLANDOVERY","RHUDDANIAN","","4b67850f-0a8a-4e35-b6db-ea37d8cbfbea" +"PHANEROZOIC","PALEOZOIC","SILURIAN","LLANDOVERY","TELYCHIAN","","608cfddd-ac10-4617-815c-1171a00ab54a" +"PHANEROZOIC","PALEOZOIC","SILURIAN","LLANDOVERY","","","ec205df2-0e6a-4ffe-a7f6-8f20592345f7" +"PHANEROZOIC","PALEOZOIC","SILURIAN","LUDLOW","GORSTIAN","","a5bf9cd1-657c-4669-8794-2ca79d769677" +"PHANEROZOIC","PALEOZOIC","SILURIAN","LUDLOW","LUDFORDIAN","","da923214-120f-4ee4-8f62-9fde989e3c75" +"PHANEROZOIC","PALEOZOIC","SILURIAN","LUDLOW","","","15256b96-f71f-43d2-8c1b-ab5dca5dd3db" +"PHANEROZOIC","PALEOZOIC","SILURIAN","PRIDOLI","","","38271019-de23-4b2e-85ed-15af2f3a11bc" +"PHANEROZOIC","PALEOZOIC","SILURIAN","WENLOCK","HOMERIAN","","a67468bf-980b-4053-a26c-64fc5d9aa611" +"PHANEROZOIC","PALEOZOIC","SILURIAN","WENLOCK","SHEINWOODIAN","","a4ceb190-02b5-4eeb-b9c8-0d1445006f8e" +"PHANEROZOIC","PALEOZOIC","SILURIAN","WENLOCK","","","cda42e0a-bac4-4ca6-b20d-c09b45e8717b" +"PHANEROZOIC","PALEOZOIC","SILURIAN","","","","3be2d037-28aa-40c7-8877-530fbcaa2c03" +"PHANEROZOIC","PALEOZOIC","","","","","0e098a6e-2123-4566-9069-6a3401775ca3" +"PHANEROZOIC","","","","","","af145656-986a-4969-bb77-6e5b2cff1ede" +"PROTEROZOIC","MESOPROTEROZOIC","CALYMMIAN","","","","71103ecc-f291-48d4-a479-c1781850aee2" +"PROTEROZOIC","MESOPROTEROZOIC","ECTASIAN","","","","ee9ef5b8-884f-4f1d-97bb-463e2f06ac6e" +"PROTEROZOIC","MESOPROTEROZOIC","STENIAN","","","","4639c868-7e0e-46df-9c18-e04f9e0f042d" +"PROTEROZOIC","MESOPROTEROZOIC","","","","","17813394-7d77-4d08-857a-d3b045d49600" +"PROTEROZOIC","NEOPROTEROZOIC","CRYOGENIAN","","","","e26ff122-9c3a-4184-b580-bf74c5f1ba85" +"PROTEROZOIC","NEOPROTEROZOIC","EDIACARAN","","","","8081c24d-2a51-4f26-825c-8406b5bbf1f0" +"PROTEROZOIC","NEOPROTEROZOIC","TONIAN","","","","cc40a250-0fea-4668-9bc5-33ba16ccb2a6" +"PROTEROZOIC","NEOPROTEROZOIC","","","","","d0ab2b43-d68f-4ab0-8e5a-fd55974c3f29" +"PROTEROZOIC","PALEOPROTEROZOIC","OROSIRIAN","","","","61627988-014a-4c16-a986-3d90009a4841" +"PROTEROZOIC","PALEOPROTEROZOIC","RHYACIAN","","","","65e898c9-b329-4b1e-b34c-c3b36af720d3" +"PROTEROZOIC","PALEOPROTEROZOIC","SIDERIAN","","","","0b4a037a-03fb-475e-b1c4-f18bca899b80" +"PROTEROZOIC","PALEOPROTEROZOIC","STATHERIAN","","","","10a82168-ba73-426c-9cc5-ecaae260cf39" +"PROTEROZOIC","PALEOPROTEROZOIC","","","","","a4a66454-acdb-4493-b5db-765653e5b824" +"PROTEROZOIC","","","","","","4407ca3c-3dc0-402c-bfc3-4dabd23f283a" diff --git a/pyQuARC/schemas/horizontalresolutionrange.csv b/pyQuARC/schemas/horizontalresolutionrange.csv new file mode 100644 index 00000000..1a2c649c --- /dev/null +++ b/pyQuARC/schemas/horizontalresolutionrange.csv @@ -0,0 +1,16 @@ +"Hits: 15","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:31","Timestamp: 2021-09-30 15:14:16","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/horizontalresolutionrange/?format=xml""Case native" +Horizontal_Resolution_Range,UUID +"1 km - < 10 km or approximately .01 degree - < .09 degree","6dd8224f-944e-4798-ac48-44c23a567eeb" +"1 meter - < 30 meters","abf43d91-a65d-4b3b-a6dd-593e211b2c7b" +"10 km - < 50 km or approximately .09 degree - < .5 degree","3b36beea-9637-4213-bdbe-42e878ca14df" +"100 km - < 250 km or approximately 1 degree - < 2.5 degrees","2207b375-113b-4499-a5a6-0ae6edc2aae8" +"100 meters - < 250 meters","8d197170-3639-4850-b012-0cae4a288e2b" +"250 km - < 500 km or approximately 2.5 degrees - < 5.0 degrees","8d520e8b-e1c6-4c18-bf8a-7a41b006f66f" +"250 meters - < 500 meters","e5c4876e-47b7-4d53-90a2-081a6b150140" +"30 meters - < 100 meters","437daa1f-f584-4afc-9104-b245f3a3d26d" +"50 km - < 100 km or approximately .5 degree - < 1 degree","35a7a6f2-69fe-4ba7-a2b5-91f83f52afb3" +"500 km - < 1000 km or approximately 5 degrees - < 10 degrees","e2d588c7-76a5-4655-bfaf-bf66874b61c4" +"500 meters - < 1 km","9e5ebee1-3ba2-4522-8d90-7ddf47987581" +"< 1 meter","08e4b31c-0be3-49cd-9374-caac345e7402" +"> 1000 km or > 10 degrees","c19001e4-dfbf-491b-b6d5-c4d0cee8f2fe" +"Point Resolution","75c9d806-9e29-40f5-b479-4c63c90f77a9" diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 105abce5..8529730d 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -430,6 +430,11 @@ "fields": [ "DIF/Associated_DOIs/DOI" ] + }, + { + "fields": [ + "DIF/Extended_Metadata/Metadata/Value" + ] } ] }, @@ -1106,8 +1111,8 @@ "severity": "error", "check_id": "controlled_keywords_check" }, - "data_center_short_name_gcmd_check": { - "rule_name": "Data Center Shortname GCMD Check", + "organization_short_name_gcmd_check": { + "rule_name": "Organization Shortname GCMD Check", "fields_to_apply": { "echo10": [ { @@ -1122,7 +1127,22 @@ } ] }, - "severity": "error" + "severity": "error", + "check_id": "organization_short_name_gcmd_check" + }, + "organization_long_name_gcmd_check": { + "rule_name": "Organization Longname GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Organization/Organization_Name/Long_Name" + ] + } + ] + }, + "severity": "error", + "check_id": "organization_long_name_gcmd_check" }, "instrument_short_long_name_consistency_check": { "rule_name": "Instrument Short/Longname Consistency Check", @@ -1301,6 +1321,24 @@ }, "severity": "error" }, + "location_gcmd_check": { + "rule_name": "Location GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Location/Location_Category", + "DIF/Location/Location_Type", + "DIF/Location/Location_Subregion1", + "DIF/Location/Location_Subregion2", + "DIF/Location/Location_Subregion3" + ] + } + ] + }, + "severity": "error", + "check_id": "location_gcmd_check" + }, "platform_type_gcmd_check": { "rule_name": "Platform Type GCMD Check", "fields_to_apply": { @@ -1439,7 +1477,20 @@ "echo10": [ { "fields": [ - "Collection/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle" + "Collection/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/WestBoundingCoordinate", + "Collection/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/NorthBoundingCoordinate", + "Collection/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/EastBoundingCoordinate", + "Collection/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/SouthBoundingCoordinate" + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Westernmost_Longitude", + "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Northernmost_Latitude", + "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Easternmost_Longitude", + "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Southernmost_Latitude" ] } ] @@ -2219,5 +2270,94 @@ ] }, "severity": "error" + }, + "horizontal_resolution_range_check": { + "rule_name": "Horizontal resolution Range GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Data_Resolution/Horizontal_Resolution_Range" + ] + } + ] + }, + "severity": "error", + "check_id": "horizontal_range_res_gcmd_check" + }, + "vertical_resolution_range_check": { + "rule_name": "Vertical resolution Range GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Data_Resolution/Vertical_Resolution_Range" + ] + } + ] + }, + "severity": "error", + "check_id": "vertical_range_res_gcmd_check" + }, + "temporal_resolution_range_check": { + "rule_name": "Temporal resolution Range GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Data_Resolution/Temporal_Resolution_Range" + ] + } + ] + }, + "severity": "error", + "check_id": "temporal_range_res_gcmd_check" + }, + "mime_type_gcmd_check": { + "rule_name": "Mime Type GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Use_Constraints/License_URL/Mime_Type" + ] + } + ] + }, + "severity": "error", + "check_id": "mime_type_gcmd_check" + }, + "chrono_unit_gcmd_check": { + "rule_name": "Chrono Unit GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Temporal_Coverage/Paleo_DateTime/Chronostratigraphic_Unit/Eon", + "DIF/Temporal_Coverage/Paleo_DateTime/Chronostratigraphic_Unit/Era", + "DIF/Temporal_Coverage/Paleo_DateTime/Chronostratigraphic_Unit/Period", + "DIF/Temporal_Coverage/Paleo_DateTime/Chronostratigraphic_Unit/Epoch", + "DIF/Temporal_Coverage/Paleo_DateTime/Chronostratigraphic_Unit/Stage" + ] + } + ] + }, + "severity": "error", + "check_id": "chrono_unit_gcmd_check" + }, + "sensor_number_check": { + "rule_name": "Sensor Number Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Platform/Instrument/NumberOfSensors", + "DIF/Platform/Instrument/Sensor/Short_Name" + ] + } + ] + }, + "severity": "error", + "check_id": "count_check" } } diff --git a/pyQuARC/schemas/temporalresolutionrange.csv b/pyQuARC/schemas/temporalresolutionrange.csv new file mode 100644 index 00000000..1451eaa4 --- /dev/null +++ b/pyQuARC/schemas/temporalresolutionrange.csv @@ -0,0 +1,21 @@ +"Hits: 20","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:32","Timestamp: 2021-09-27 10:03:56","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/temporalresolutionrange/?format=xml""Case native" +Temporal_Resolution_Range,UUID +"1 minute - < 1 hour","bca20202-2b06-4657-a425-5b0e416bce0c" +"1 second - < 1 minute","48ff676f-836c-4cff-bc88-4c4cc06b2e1b" +"< 1 second","42a2f639-d1c3-4e82-a8b8-63f0f4a60ac6" +"Annual Climatology","af931dca-9a7d-4ba9-b40f-2a21e31f2d5b" +"Annual","40e09855-fb48-4a7d-9851-d6e809e6c309" +"Climate Normal (30-year climatology)","f308a8db-40ea-4932-a58c-fb0a093959dc" +"Daily - < Weekly","1ac968ef-a90a-4ffc-adbf-ea0c0d69a7f9" +"Daily Climatology","f86e464a-cf9d-4e15-a39b-501855d1dc5a" +"Decadal","3d97e993-dc6a-41ff-8a49-3e837c1fc2b1" +"Diurnal","99ef187e-6940-4c10-8d65-00d4426d493b" +"Hourly - < Daily","31765761-b153-478a-92b3-1088997fd74b" +"Hourly Climatology","027dee16-b361-481e-868d-add966eb5b71" +"Monthly - < Annual","8900c323-8789-4403-91e9-c399de369935" +"Monthly Climatology","8c8c70b1-f6c5-4f34-89b5-510049b8c8ab" +"Pentad Climatology","e0040d4b-e398-4b65-bd42-d39434b5cc95" +"Seasonal","7c5420a6-94e2-40ca-9dff-20309090d327" +"Subannual","7afdb8ba-a504-45b6-b301-730e3c69d23a" +"Weekly - < Monthly","7b2a303c-3cb7-4961-9851-650548964674" +"Weekly Climatology","2de882f0-d84a-471e-8fb5-9f8a1c7913c1" diff --git a/pyQuARC/schemas/verticalresolutionrange.csv b/pyQuARC/schemas/verticalresolutionrange.csv new file mode 100644 index 00000000..4f7c8f2f --- /dev/null +++ b/pyQuARC/schemas/verticalresolutionrange.csv @@ -0,0 +1,9 @@ +"Hits: 8","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:31","Timestamp: 2021-09-27 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/verticalresolutionrange/?format=xml""Case native" +Vertical_Resolution_Range,UUID +"1 meter - < 10 meters","201337ea-fa14-4e58-a538-e92c5ff734a4" +"10 meters - < 30 meters","20505a5b-4df8-4430-83a3-ad7b212c9bfc" +"100 meters - < 1 km","eccf8700-c503-46a3-b6f7-86cf7e48465a" +"30 meters - < 100 meters","a66aa809-5320-408d-9cbe-86ed7940b8ec" +"< 1 meter","cf1f085e-4948-4874-9640-e236fff7bc8d" +"> 1 km","3f0aa4fc-802c-4804-9f9f-8b666f3a2776" +"Point Resolution","0893353d-4e8c-4b31-bcc5-fce552ccfff3" From 600e4d889a26afc39cae6e47860cea5e94bd8752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 30 Sep 2021 16:37:58 -0500 Subject: [PATCH 002/261] Add helpful message to url checker --- pyQuARC/code/url_validator.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index c8abd472..0a20ff44 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -46,7 +46,6 @@ def health_and_status_check(text_with_urls): results = [] validity = True - value = text_with_urls # extract URLs from text extractor = URLExtract() @@ -58,6 +57,7 @@ def health_and_status_check(text_with_urls): # remove dots at the end (The URLExtract library catches URLs, but sometimes appends a '.' at the end) # remove duplicated urls urls = set(url[:-1] if url.endswith(".") else url for url in urls) + value = ", ".join(urls) # check that URL returns a valid response for url in urls: @@ -66,8 +66,14 @@ def health_and_status_check(text_with_urls): try: response_code = requests.get(url).status_code if response_code == 200: - continue - result = {"url": url, "status_code": response_code} + if url.startswith("http://"): + url = url.replace("http://", "https://") + if requests.get(url).status_code == 200: + result = {"url": url, "error": "The URL is secure. Please use 'https' instead of 'http'."} + else: + continue + else: + result = {"url": url, "error": f'Status code {response_code}'} except requests.ConnectionError: result = {"url": url, "error": "The URL does not exist on Internet."} except: @@ -78,7 +84,7 @@ def health_and_status_check(text_with_urls): validity = False value = results - return {"valid": validity, "value": ", ".join(urls)} + return {"valid": validity, "value": value} @staticmethod @if_arg From 84654e9a0a6a057b9fd8702ad3c18fdf8bb26f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 30 Sep 2021 16:38:15 -0500 Subject: [PATCH 003/261] Run bounding box check only if there's a value --- pyQuARC/code/custom_validator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 85c5f088..55c1ab9b 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -68,6 +68,7 @@ def availability_check( } @staticmethod + @if_arg def bounding_coordinate_logic_check(west, north, east, south): # Checks if the logic for coordinate values make sense result = { From 064fbdf0f97edce5f3157709bbb2f7f00cee55c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 30 Sep 2021 16:38:39 -0500 Subject: [PATCH 004/261] Update URL error message --- pyQuARC/schemas/check_messages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 31513da7..a2a465e3 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -24,12 +24,12 @@ "remediation": "Update the RevisionDate so that it comes chronologically after the InsertTime." }, "url_check": { - "failure": "Invalid URL/s: `{}`.", + "failure": "Incorrect/subpar URL/s: `{}`.", "help": { "message": "", "url": "" }, - "remediation": "Please provide valid URL/s." + "remediation": "Please provide valid/correct URL/s." }, "shortname_uniqueness": { "failure": "The DataSetId `{}` is identical to the ShortName `{}`.", From 02cdb242ce48e8cefccfdf575b17c3f09f4e0064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 30 Sep 2021 16:39:19 -0500 Subject: [PATCH 005/261] Add dif field to url checker --- CHECKS.md | 2 +- pyQuARC/schemas/rule_mapping.json | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHECKS.md b/CHECKS.md index 17258cab..75b03c7e 100644 --- a/CHECKS.md +++ b/CHECKS.md @@ -204,7 +204,7 @@ Checks whether the value adheres to GCMD, specifically the project list short na Checks whether the campaign (project) short name and long name GCMD keywords are consistent: basically that they belong to the same row. -#### `data_center_short_name_gcmd_check` +#### `organization_short_name_gcmd_check` Checks whether the value adheres to GCMD, specifically the provider list short name column. diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 8529730d..0e3180b4 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -350,6 +350,13 @@ "Collection/OnlineResources/OnlineResource/URL" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Summary/Abstract" + ] + } ] }, "severity": "error", @@ -430,11 +437,6 @@ "fields": [ "DIF/Associated_DOIs/DOI" ] - }, - { - "fields": [ - "DIF/Extended_Metadata/Metadata/Value" - ] } ] }, From 8dc3832a92e1f1023f23ba6412c7222dfec79999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 30 Sep 2021 16:53:10 -0500 Subject: [PATCH 006/261] Add `IDN_Node` shortname gcmd check --- pyQuARC/code/constants.py | 49 ++++------- pyQuARC/code/gcmd_validator.py | 9 ++ pyQuARC/code/string_validator.py | 10 +++ pyQuARC/schemas/check_messages.json | 8 ++ pyQuARC/schemas/checks.json | 5 ++ pyQuARC/schemas/idnnode.csv | 128 ++++++++++++++++++++++++++++ pyQuARC/schemas/rule_mapping.json | 14 +++ 7 files changed, 192 insertions(+), 31 deletions(-) create mode 100644 pyQuARC/schemas/idnnode.csv diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index f9fdda28..d2212db5 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -14,6 +14,23 @@ SCHEMAS_BASE_PATH = f"{ROOT_DIR}/schemas" +GCMD_KEYWORDS = [ + "chronounits", + "granuledataformat", + "horizontalresolutionrange", + "idnnode", + "instruments", + "locations", + "MimeType", + "platforms", + "projects", + "providers", + "rucontenttype", + "sciencekeywords", + "temporalresolutionrange", + "verticalresolutionrange", +] + SCHEMAS = { "json": [ "checks", @@ -24,21 +41,7 @@ "rules_override", UMM_JSON ], - "csv": [ - "chronounits", - "granuledataformat", - "horizontalresolutionrange", - "instruments", - "locations", - "MimeType", - "platforms", - "projects", - "providers", - "rucontenttype", - "sciencekeywords", - "temporalresolutionrange", - "verticalresolutionrange" - ], + "csv": GCMD_KEYWORDS, "xsd": [ f"{DIF}_xml", f"{ECHO10}_xml" ], "xml": [ "catalog" ] } @@ -62,22 +65,6 @@ GCMD_BASIC_URL = "https://gcmdservices.gsfc.nasa.gov/kms/concepts/concept_scheme/" -GCMD_KEYWORDS = [ - "chronounits", - "granuledataformat", - "horizontalresolutionrange", - "instruments", - "locations", - "MimeType", - "platforms", - "projects", - "providers", - "rucontenttype", - "sciencekeywords", - "temporalresolutionrange", - "verticalresolutionrange", -] - GCMD_LINKS = { keyword: f"{GCMD_BASIC_URL}{keyword}?format=csv" for keyword in GCMD_KEYWORDS } diff --git a/pyQuARC/code/gcmd_validator.py b/pyQuARC/code/gcmd_validator.py index 2304dd04..d7043042 100644 --- a/pyQuARC/code/gcmd_validator.py +++ b/pyQuARC/code/gcmd_validator.py @@ -111,6 +111,9 @@ def __init__(self): "mimetype": self._read_from_csv( "MimeType", columns=["MimeType"] ), + "idnnode_shortname": self._read_from_csv( + "idnnode", columns=["Short_Name"] + ) } @staticmethod @@ -400,3 +403,9 @@ def validate_chrono_unit_hierarchy(self, input_keyword): return GcmdValidator.validate_recursively( self.keywords["chronounits"], input_keyword ) + + def validate_idnnode_shortname(self, input_keyword): + """ + Validates GCMD science keywords + """ + return input_keyword in self.keywords["idnnode_shortname"] diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 32667525..3bee7780 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -335,3 +335,13 @@ def mime_type_gcmd_check(resource_type): ), "value": resource_type, } + + @staticmethod + @if_arg + def idnnode_shortname_gcmd_check(resource_type): + return { + "valid": StringValidator.gcmdValidator.validate_idnnode_shortname( + resource_type.upper() + ), + "value": resource_type, + } diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index a2a465e3..3cd8950b 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -766,5 +766,13 @@ "url": "" }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "idnnode_shortname_gcmd_check": { + "failure": "The provided IDN_Node `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." } } diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 323b36c2..8843543c 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -139,6 +139,11 @@ "check_function": "mime_type_gcmd_check", "available": true }, + "idnnode_shortname_gcmd_check": { + "data_type": "string", + "check_function": "idnnode_shortname_gcmd_check", + "available": true + }, "temporal_range_res_gcmd_check": { "data_type": "string", "check_function": "temporal_range_res_gcmd_check", diff --git a/pyQuARC/schemas/idnnode.csv b/pyQuARC/schemas/idnnode.csv new file mode 100644 index 00000000..bccb883a --- /dev/null +++ b/pyQuARC/schemas/idnnode.csv @@ -0,0 +1,128 @@ +"Hits: 127","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:28","Timestamp: 2021-09-29 06:55:24","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/idnnode/?format=xml""Case native" +Short_Name,Long_Name,UUID +"ACADIS","","913d42e2-1641-4f5e-8273-379ddd3812d5" +"ACE/CRC","","13381733-968f-4fd6-b70c-aac6a77b2657" +"AMD/AR","","81f394bf-aa57-4742-98d7-3b9c5fc0b27e" +"AMD/AU","","d7c402cb-af86-46a3-99ec-e507a1a04d2c" +"AMD/BE","","ef83cb9a-bcc3-49bc-bb29-7e95b3e8f55d" +"AMD/CA","","b23bda57-63ec-4f9e-be6c-c49dacb05190" +"AMD/CH","","0d3fac3b-eaab-46bf-aa67-985cae48032f" +"AMD/CL","","d9e5f883-a434-4ad9-b827-ae0709409397" +"AMD/CN","","101a20ca-88bd-45a3-9882-c2e8a1c4dd29" +"AMD/DE","","8875bcf1-a8e6-445c-b5bf-dabbe248265c" +"AMD/EE","","f518808a-38c7-410c-a987-0bbe967c9763" +"AMD/ES","","98d77582-2190-40cf-90b7-d5614920c149" +"AMD/FI","","2132cc3c-ab36-48d3-bc21-7b1d47e9fe53" +"AMD/FR","","61fb16eb-c889-4852-976c-9b638de7bfab" +"AMD/IND","","2736d700-1760-491e-9fe3-dea1907c10a9" +"AMD/INT","","b3c6dc17-6f4a-4ec0-afc0-0007fc20855e" +"AMD/IT","","f81093d9-6bc9-4211-8cfb-17064c7d0edf" +"AMD/JP","","21474392-1374-433e-b4b0-46c19c1561b2" +"AMD/KR","","4d2f1eed-4919-44b7-ac9e-9d0a372b99f3" +"AMD/MY","","76970a29-898b-4052-ac89-a6622241492c" +"AMD/NL","","170ec227-c44b-4787-9889-a50134bcc8da" +"AMD/NO","","0529a07c-08e1-48c0-8619-d9f6880e6d44" +"AMD/NZ","","c59cc5b3-f0ca-4519-af5b-b6a6a8330878" +"AMD/SCAR-MARBIN","","695d70f0-4ea0-4576-84bc-341785afc174" +"AMD/SE","","df312b2e-c2ff-45f7-851c-b5a92dccb848" +"AMD/UA","","8a0868ba-a22a-47b1-9827-d54c274bce35" +"AMD/UK","","6edf29ba-5e3f-4aae-9406-f63abc4cb314" +"AMD/US","","e8e17a9b-c5aa-4924-b065-7a485d019299" +"AMD/UY","","b9e13335-23b0-4396-a902-64ad91396ef2" +"AMD/ZA","","fd2afb0b-ce8b-40f9-942c-754fd83e8579" +"AMD","","47308f11-79b0-46c2-b0c9-06d0b15ae845" +"ANTABIF","","4d1dbf8a-fad8-4b42-b20a-7d64fe40abbc" +"ARCTIC/CN","","c09ed6fa-6b01-4901-9e56-7de45d330a0c" +"ARCTIC/ES","","6345a51f-886d-4cbf-8535-63ef717c73d1" +"ARCTIC/FR","","603e666b-2edc-4d81-b9f7-ca55fd91bb1d" +"ARCTIC/JP","","3b79ca1c-593e-481e-a231-724a3a7f0994" +"ARCTIC/NL","","d3306863-ef0a-4f8c-8eb2-3a403571f1e4" +"ARCTIC/NO","","a67e9739-f8e7-4ea1-9805-3b42d7d0a02c" +"ARCTIC","","d711d9ad-686b-4665-9213-322bf9956caa" +"ARGENTINA/CONAE","","072df70d-da3d-4225-aced-b65337f35da2" +"AUSTRALIA/AMMC","","1d9168a9-9f8e-4e9d-aea9-150b62d799f9" +"AUSTRALIA/ANU","","38d7cefd-85c6-4e92-93aa-a239601ad9ae" +"AUSTRALIA/CSIRO","","cb1ac463-39fe-4f03-b41c-5564411aef50" +"BRAZIL/INPE","","c9f29a5a-fc32-4f94-afd3-e8427f7c579e" +"CANADA/CGDI","","1e9c313a-ca4a-4fab-a80f-c7aeb68a5d0b" +"CD","","7fcd5522-84b0-48d1-927d-4d7751064b9c" +"CEOS","","edff0791-121c-40aa-adf2-33feb2bc30e5" +"CHINA/NSMC","","3720a713-d1b8-4f65-8cba-250f9e231e1f" +"CHINA/SMC","","a89ffa20-a111-4f43-b286-58ee76e9513f" +"CLIVAR","","c394da5f-408e-4f69-9053-d303d024429f" +"DOE/ORNL/NGEE/Arctic","","4381ace1-e19b-4a31-9938-010aecab5633" +"DOKIPY","","1274e999-7b99-468d-90e6-935bc7654f7d" +"ECHO","","2efb470f-61f8-4046-b2ee-ebed27e2f310" +"ESA/ESRIN","","956c8ad7-5e1f-4689-a620-2fa2cfdf6b62" +"EU/EMSO","","390e49dc-8ab5-4e69-b16d-f25d26d520b5" +"EUROBIS","","e391283c-257e-4569-b43a-437b8fcb2772" +"FRANCE/CNES","","d4221a3f-66ef-43b7-9d4b-b311675f0622" +"GERMANY/DLR","","5bf0c40e-c279-4f8e-bf14-24458a33beab" +"GERMANY/EUMETSAT","","3197a75d-b6cf-430d-891b-b7fea05a0a2b" +"GERMANY/GFZ","","b131a9e2-e994-41e2-9f61-afcf215f6c39" +"GISTDA","","54db9be0-841b-4fd8-88ad-743f99964e0b" +"GOMC/ESIP","","03718300-c4bf-43cb-a709-8af9863f0869" +"GOMMP","","02f99b1f-5902-42db-a168-9babe290ef08" +"GOMODP/ARC","","d609be88-89f1-4a70-999d-9b7f8fbeab75" +"GOMOOS","","1209a4b6-aae5-4041-ac59-326252a3aace" +"GOSIC/GAW","","25c40da1-4161-4bea-a49b-5635dc6c7f0c" +"GOSIC/GCOS","","11a7ad28-cd0c-437d-a419-a1f0844de3e5" +"GOSIC/GOOS","","ac04669c-e280-4dfc-8d26-a111cf78971c" +"GOSIC/GTOS","","0228bd6f-7f35-452d-ba96-19df1f552284" +"GOSIC","","3fc6d574-ee3a-4a82-af08-6b88a3ae7ead" +"IMBER","","23bfb318-a393-48ae-90e4-82b3d40d7069" +"IPY/NL","","bc7ebca0-7a56-48ba-900f-689ed6f994bf" +"IPY","","8c29c974-d599-4a7a-a05e-769ae04e1a59" +"ISRIC/WDC-Soils","","6cadc09f-68aa-4726-8a11-5af8f347b9d6" +"ISRO/MOSDAC","","87917f21-cfa1-43d1-bea6-3029e16ea878" +"ISRO/NOEDA","","ce899816-4263-4d38-9ed7-6da83dacaeb7" +"ISRO/UOPS","","7dd28f93-f9df-4ce1-b812-f973f3c687aa" +"ISRO","","8875a321-f769-4c6c-9f39-fb597a0e1678" +"JAPAN/JAXA","","d7efff40-2309-4ba3-9a91-ff838e53ad2a" +"JAPAN/JST","","56858bc0-679b-4cb1-acff-03d90f23e1c7" +"KOBIS","","93c41a40-e1c9-43b1-bbf6-c71cf1e55e47" +"MOHCP","","ac2f8729-77aa-4910-ae57-efbc9381ecdd" +"MOHC","","bd50357e-76d9-4568-9a32-288138070d47" +"MOP","","70797bb2-9117-4981-891b-7e6a2f79a7e5" +"NETHERLANDS/NLR-NEONET","","f3a42a8c-2671-4f58-ab2d-68cefe9bd4dd" +"NEW ZEALAND/ICAIR","","2a82a286-2ed1-4038-a4ee-30de38898f44" +"OBIS/AADC","","c6504217-f251-4375-817e-1fcf6edc322f" +"OBIS/AR","","1b054f0b-9521-46e0-8cd4-e8673bd52509" +"OBIS/AU","","48b9719b-25de-413d-8299-2058c7a24730" +"OBIS/BR","","bdc61022-422e-49f8-b5f9-313b7e037fab" +"OBIS/CA","","9abc9ff6-51d1-4f14-a500-fde5cb917a28" +"OBIS/CL","","66041ba2-e4b6-497d-b753-a5a80c8c3345" +"OBIS/CN","","f1151da1-30af-4fc7-9783-51bdd6354c8b" +"OBIS/COML","","b071cdf8-5501-4095-8afe-fbfd3a268797" +"OBIS/CO","","cffbdff0-700c-4964-b9be-ee928dd29b05" +"OBIS/IN","","36ed7ad1-bd3c-489d-82cf-14827276e1b0" +"OBIS/JP","","92783493-aa3f-4bbd-b83d-557962a8932f" +"OBIS/NZ","","a3762c96-8b6b-43bc-9627-b51e895cbca8" +"OBIS/SCAR-MARBIN","","bd6e7ba3-7d6f-4655-9a05-7587f2d87bfe" +"OBIS/SEAMAP","","8f0abfc6-c41f-4269-ad32-be8d8ae1c634" +"OBIS/UA","","a7261961-aa0f-41f1-8756-6f375ccc5140" +"OBIS/US","","b80f1a5d-3beb-4b9e-b7eb-c2037bba255b" +"OBIS/ZA","","3c6dbb11-d46d-4c66-872e-4538c3322c04" +"OBIS","","4683ea2b-dd4d-4d55-b862-7a3e608a8c99" +"PANGAEA","","7cba95ac-1984-4f71-89ca-aa3932f35f8c" +"PI-GCOS","","f5a440da-3c08-4f80-960f-03a06f7580d5" +"PacIOOS","","0f2fa2cb-7a5d-4762-b6bc-78a19f98abff" +"RUSSIA/RAS","","a129a240-aa2a-4f58-b15c-dcfab7208663" +"RUSSIA/ROSCOSMOS","","512020f4-adac-42a2-a478-2c2242aa7243" +"SLOAN","","03d77986-98aa-4ad4-9070-2b7a41eadb31" +"SOOS","","51f5487c-098e-4387-b0f0-09eb9d55b0d5" +"TW/NSPO","","42e54d0a-fa33-472b-9c78-1b5783bc315a" +"UKRAINE/WDCGSD","","6f2cd8c2-c011-4c5c-aefb-0c3393984f72" +"UNEP/GRID/ICIMOD","","b6ee7e42-f9f0-4a1f-b598-34495f6415c7" +"UNEP/GRID","","16158f17-bd57-4b30-abdc-f213d3996b4e" +"UN","","bae3773a-b62b-4ce6-b6a8-9d26aba92734" +"USA/CIESIN","","c81db2d7-e55c-4109-8312-96b5bcaab96d" +"USA/DOD","","5870c4a9-1729-440f-b220-b862eeb0d7f8" +"USA/NASA","","9ae20472-ba4c-4b01-8d97-857b73fa3c95" +"USA/NCAR","","0653ebf8-bd12-4bb3-b080-d45bb0b388db" +"USA/NOAA","","3d117d54-4c0f-4630-8b46-a6ddb1ffc9b3" +"USA/NSF","","8a4ce0a0-5655-4baa-b6da-3a24299e6852" +"USA/USDA","","877527cc-51bd-4ea0-872c-d79731abfa84" +"USA/USGS","","1b25904e-7ccd-4ef3-b733-2ef741163d54" +"WGISS27","","c6af1a42-5c10-4eec-b787-b78c15fb4014" +"vERSO","vERSO Project: Ecosystem Responses to Global Change: A Multi-scale Approach in the Southern Ocean","092d6914-19ac-4db8-bcf7-6d33461022c8" diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 0e3180b4..dd481d9b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2329,6 +2329,20 @@ "severity": "error", "check_id": "mime_type_gcmd_check" }, + "idnnode_shortname_gcmd_check": { + "rule_name": "IDN Node Shortname GCMD Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/IDN_Node/Short_Name" + ] + } + ] + }, + "severity": "warning", + "check_id": "idnnode_shortname_gcmd_check" + }, "chrono_unit_gcmd_check": { "rule_name": "Chrono Unit GCMD Check", "fields_to_apply": { From ea8724d6d7b4dd4fedc508b1bafc2db7f05c8f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 13 Oct 2021 15:23:07 -0500 Subject: [PATCH 007/261] Add support for umm json format + json schema validator --- pyQuARC/code/checker.py | 5 +- pyQuARC/code/constants.py | 5 +- pyQuARC/code/schema_validator.py | 83 +- pyQuARC/schemas/rule_mapping.json | 7 + pyQuARC/schemas/umm-cmn-json-schema.json | 1244 +++++++++++++++++ pyQuARC/schemas/umm-json_schema.json | 1511 +++++++++++++++++++++ tests/fixtures/test_cmr_metadata.umm-json | 457 +++++++ 7 files changed, 3294 insertions(+), 18 deletions(-) create mode 100644 pyQuARC/schemas/umm-cmn-json-schema.json create mode 100644 pyQuARC/schemas/umm-json_schema.json create mode 100644 tests/fixtures/test_cmr_metadata.umm-json diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index 21437410..138d086a 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -219,7 +219,10 @@ def run(self, metadata_content): Returns: (dict): The results of the jsonschema check and all custom checks """ - json_metadata = parse(metadata_content) + if self.metadata_format == UMM_JSON: + json_metadata = json.loads(metadata_content) + else: + json_metadata = parse(metadata_content) result_schema = self.perform_schema_check( metadata_content ) diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index d2212db5..32f71a49 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -39,10 +39,11 @@ "checks_override", "rule_mapping", "rules_override", - UMM_JSON + f"{UMM_JSON}_schema", + "umm-cmn-json-schema" ], "csv": GCMD_KEYWORDS, - "xsd": [ f"{DIF}_xml", f"{ECHO10}_xml" ], + "xsd": [ f"{DIF}_schema", f"{ECHO10}_schema" ], "xml": [ "catalog" ] } diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index 08ebc1a4..d79ef3db 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -3,6 +3,7 @@ import re from io import BytesIO +from jsonschema import Draft7Validator, draft7_format_checker, RefResolver from lxml import etree from urllib.request import pathname2url @@ -22,11 +23,21 @@ def __init__( """ Args: metadata_format (str): The format of the metadata that needs - to be validated. Can be either of { ECHO10, UMM-JSON, DIF }. + to be validated. Can be either of { ECHO10, UMM_JSON, DIF }. validation_paths (list of str): The path of the fields in the metadata that need to be validated. In the form ['Collection/StartDate', ...]. """ + self.metadata_format = metadata_format + if metadata_format == UMM_JSON: + self.validator_func = self.run_json_validator + else: + self.validator_func = self.run_xml_validator + + def read_xml_schema(self): + """ + Reads the xml schema file + """ # The XML schema file (echo10_xml.xsd) imports another schema file (MetadataCommon.xsd) # Python cannot figure out the import if they are in a different location than the calling script # Thus we need to set an environment variable to let it know where the files are located @@ -35,19 +46,60 @@ def __init__( # Temporarily set the environment variable os.environ['XML_CATALOG_FILES'] = os.environ.get('XML_CATALOG_FILES', catalog_path) - self.metadata_format = metadata_format - self.xml_schema = self.read_xml_schema() - - def read_xml_schema(self): - """ - Reads the xml schema file - """ - with open(SCHEMA_PATHS[f"{self.metadata_format}_xml"], "r") as schema_file: + with open(SCHEMA_PATHS[f"{self.metadata_format}_schema"], "r") as schema_file: file_content = schema_file.read().encode() xmlschema_doc = etree.parse(BytesIO(file_content)) schema = etree.XMLSchema(xmlschema_doc) return schema + def read_json_schema(self): + """ + Reads the json schema file + """ + schema = json.load(open(SCHEMA_PATHS[f"{self.metadata_format}_schema"], "r")) + return schema + + def run_json_validator(self, content_to_validate): + """ + Validate passed content based on the schema and return any errors + Args: + content_to_validate (str): The metadata content as a json string + Returns: + (dict) A dictionary that gives the validity of the schema and errors if they exist + """ + schema = self.read_json_schema() + schema_base = json.load(open(SCHEMA_PATHS["umm-cmn-json-schema"], "r")) + + # workaround to read local referenced schema file (only supports uri) + schema_store = { + schema_base.get('$id','/umm-cmn-json-schema.json') : schema_base, + schema_base.get('$id','umm-cmn-json-schema.json') : schema_base, + } + + errors = {} + + resolver = RefResolver.from_schema(schema, store=schema_store) + + validator = Draft7Validator( + schema, format_checker=draft7_format_checker, resolver=resolver + ) + + for error in sorted(validator.iter_errors(json.loads(content_to_validate)), key=str): + field = SchemaValidator.PATH_SEPARATOR.join([str(x) for x in list(error.path)]) + message = error.message + remediation = None + if error.validator == "oneOf": + check_message = self.check_messages[error.validator] + fields = [f'{field}/{obj["required"][0]}' for obj in error.validator_value] + message = check_message["failure"].format(fields) + remediation = check_message["remediation"] + errors.setdefault(field, {})["schema"] = { + "message": [f"Error: {message}"], + "remediation": remediation, + "valid": False + } + return errors + @staticmethod def _build_errors(error_log, paths): """ @@ -76,7 +128,7 @@ def _build_errors(error_log, paths): ] field_name = field_paths[0] if len(field_paths) == 1 else field_name message = re.search("Element\s\'.+\':\s(\[.*\])?(.*)", line)[2].strip() - errors.setdefault(field_name, {})["xml_schema"] = { + errors.setdefault(field_name, {})["schema"] = { "message": [f"Error: {message}"], "valid": False } @@ -93,6 +145,8 @@ def run_xml_validator(self, content_to_validate): (dict) A dictionary that gives the validity of the schema and errors if they exist """ + schema = self.read_xml_schema() + xml_content = content_to_validate doc = etree.parse(BytesIO(xml_content)) @@ -107,20 +161,19 @@ def run_xml_validator(self, content_to_validate): errors = {} try: - self.xml_schema.assertValid(doc) + schema.assertValid(doc) except etree.DocumentInvalid as err: errors = SchemaValidator._build_errors(str(err.error_log), paths) - return errors - def run(self, xml_metadata): + def run(self, metadata): """ Runs schema validation on the metadata Args: - xml_metadata (str): The original metadata (in xml format) + metadata (str): The original metadata (either xml or json string) Returns: (dict): Result of the validation from xml and json schema validators """ - return self.run_xml_validator(xml_metadata) + return self.validator_func(metadata) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index dd481d9b..e10cf457 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -317,6 +317,13 @@ "DIF/Temporal_Coverage/Paleo_DateTime/Paleo_Start_Date" ] } + ], + "umm-json": [ + { + "fields": [ + "CollectionCitations/ReleaseDate" + ] + } ] }, "severity": "error" diff --git a/pyQuARC/schemas/umm-cmn-json-schema.json b/pyQuARC/schemas/umm-cmn-json-schema.json new file mode 100644 index 00000000..766caa32 --- /dev/null +++ b/pyQuARC/schemas/umm-cmn-json-schema.json @@ -0,0 +1,1244 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "definitions": { + "LanguageType": { + "description": "Describes the language used in the preparation, storage, and description of the collection. It is the language of the collection data themselves. It does not refer to the language used in the metadata record (although this may be the same language). The name of the language used for this field is defined in ISO 639.", + "type": "string", + "minLength": 1, + "maxLength": 25 + }, + "DateType": { + "type": "object", + "additionalProperties": false, + "description": "Specifies the date and its type.", + "properties": { + "Date": { + "description": "This is the date that an event associated with the collection or its metadata occurred.", + "format": "date-time", + "type": "string" + }, + "Type": { + "description": "This is the type of event associated with the date. For example, Creation, Last Revision. Type is chosen from a picklist.", + "$ref": "#/definitions/LineageDateEnum" + } + }, + "required": ["Date", "Type"] + }, + "EntryIdType": { + "description": "This is the ID of the metadata record. It is only unique when combined with the version.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DataCenterType": { + "type": "object", + "additionalProperties": false, + "description": "Defines a data center which is either an organization or institution responsible for distributing, archiving, or processing the data, etc.", + "properties": { + "Roles": { + "description": "This is the roles of the data center.", + "type": "array", + "items": { + "$ref": "#/definitions/DataCenterRoleEnum" + }, + "minItems": 1 + }, + "ShortName": { + "description": "This is the short name of the data center. The controlled vocabulary for data center short names is maintained in the Keyword Management System (KMS).", + "$ref": "#/definitions/DataCenterShortNameType" + }, + "LongName": { + "description": "This is the long name of the data center.", + "$ref": "#/definitions/LongNameType" + }, + "Uuid": { + "description": "Uuid of the data center.", + "$ref": "#/definitions/UuidType" + }, + "ContactGroups": { + "description": "This is the contact groups of the data center.", + "type": "array", + "items": { + "$ref": "#/definitions/ContactGroupType" + } + }, + "ContactPersons": { + "description": "This is the contact persons of the data center.", + "type": "array", + "items": { + "$ref": "#/definitions/ContactPersonType" + } + }, + "ContactInformation": { + "description": "This is the contact information of the data center.", + "$ref": "#/definitions/ContactInformationType" + } + }, + "required": ["Roles", "ShortName"] + }, + "ContactGroupType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Roles": { + "description": "This is the roles of the data contact.", + "type": "array", + "items": { + "$ref": "#/definitions/DataContactRoleEnum" + }, + "minItems": 1 + }, + "Uuid": { + "description": "Uuid of the data contact.", + "$ref": "#/definitions/UuidType" + }, + "NonDataCenterAffiliation": { + "description": "This is the contact person or group that is not affiliated with the data centers.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ContactInformation": { + "description": "This is the contact information of the data contact.", + "$ref": "#/definitions/ContactInformationType" + }, + "GroupName": { + "description": "This is the contact group name.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": ["Roles", "GroupName"] + }, + "ContactPersonType": { + "type": "object", + "properties": { + "Roles": { + "description": "This is the roles of the data contact.", + "type": "array", + "items": { + "$ref": "#/definitions/DataContactRoleEnum" + }, + "minItems": 1 + }, + "Uuid": { + "description": "Uuid of the data contact.", + "$ref": "#/definitions/UuidType" + }, + "NonDataCenterAffiliation": { + "description": "This is the contact person or group that is not affiliated with the data centers.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ContactInformation": { + "description": "This is the contact information of the data contact.", + "$ref": "#/definitions/ContactInformationType" + }, + "FirstName": { + "description": "First name of the individual.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "MiddleName": { + "description": "Middle name of the individual.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "LastName": { + "description": "Last name of the individual.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": ["Roles", "LastName"] + }, + "ContactInformationType": { + "type": "object", + "additionalProperties": false, + "description": "Defines the contact information of a data center or data contact.", + "properties": { + "RelatedUrls": { + "description": "A URL associated with the contact, e.g., the home page for the DAAC which is responsible for the collection.", + "type": "array", + "items": { + "$ref": "#/definitions/RelatedUrlType" + }, + "minItems": 0 + }, + "ServiceHours": { + "description": "Time period when the contact answers questions or provides services.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ContactInstruction": { + "description": "Supplemental instructions on how or when to contact the responsible party.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "ContactMechanisms": { + "description": "Mechanisms of contacting.", + "type": "array", + "items": { + "$ref": "#/definitions/ContactMechanismType" + } + }, + "Addresses": { + "description": "Contact addresses.", + "type": "array", + "items": { + "$ref": "#/definitions/AddressType" + } + } + } + }, + "ContactMechanismType": { + "type": "object", + "additionalProperties": false, + "description": "Method for contacting the data contact. A contact can be available via phone, email, Facebook, or Twitter.", + "properties": { + "Type": { + "description": "This is the method type for contacting the responsible party - phone, email, Facebook, or Twitter.", + "$ref": "#/definitions/ContactMechanismTypeEnum" + }, + "Value": { + "description": "This is the contact phone number, email address, Facebook address, or Twitter handle associated with the contact method.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Type", "Value"] + }, + "AddressType": { + "type": "object", + "additionalProperties": false, + "description": "This entity contains the physical address details for the contact.", + "properties": { + "StreetAddresses": { + "description": "An address line for the street address, used for mailing or physical addresses of organizations or individuals who serve as contacts for the collection.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "minItems": 0 + }, + "City": { + "description": "The city portion of the physical address.", + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "StateProvince": { + "description": "The state or province portion of the physical address.", + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "Country": { + "description": "The country of the physical address.", + "type": "string", + "minLength": 1, + "maxLength": 100 + }, + "PostalCode": { + "description": "The zip or other postal code portion of the physical address.", + "type": "string", + "minLength": 1, + "maxLength": 20 + } + } + }, + "RelatedUrlType": { + "type": "object", + "additionalProperties": false, + "description": "Represents Internet sites that contain information related to the data, as well as related Internet sites such as project home pages, related data archives/servers, metadata extensions, online software packages, web mapping services, and calibration/validation data.", + "properties": { + "Description": { + "description": "Description of the web page at this URL.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "URLContentType": { + "description": "A keyword describing the distinct content type of the online resource to this resource. (e.g., 'DATACENTER URL', 'DATA CONTACT URL', 'DISTRIBUTION URL'). The valid values are contained in the KMS System: https://gcmd.earthdata.nasa.gov/KeywordViewer/scheme/all/8759ab63-ac04-4136-bc25-0c00eece1096?gtm_keyword=Related%20URL%20Content%20Types>m_scheme=rucontenttype.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Type": { + "description": "A keyword describing the type of the online resource to this resource. This helps the GUI to know what to do with this resource. (e.g., 'GET DATA', 'GET SERVICE', 'GET VISUALIZATION'). The valid values are contained in the KMS System: https://gcmd.earthdata.nasa.gov/KeywordViewer/scheme/all/8759ab63-ac04-4136-bc25-0c00eece1096?gtm_keyword=Related%20URL%20Content%20Types>m_scheme=rucontenttype.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Subtype": { + "description": "A keyword describing the subtype of the online resource to this resource. This further helps the GUI to know what to do with this resource. (e.g., 'MEDIA', 'BROWSE', 'OPENDAP', 'OPENSEARCH', 'WEB COVERAGE SERVICES', 'WEB FEATURE SERVICES', 'WEB MAPPING SERVICES', 'SSW', 'ESI'). The valid values are contained in the KMS System: https://gcmd.earthdata.nasa.gov/KeywordViewer/scheme/all/8759ab63-ac04-4136-bc25-0c00eece1096?gtm_keyword=Related%20URL%20Content%20Types>m_scheme=rucontenttype.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "URL": { + "description": "The URL for the relevant web page (e.g., the URL of the responsible organization's home page, the URL of the collection landing page, the URL of the download site for the collection).", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "GetData": { + "description": "The data distribution information for the relevant web page (e.g., browse, media).", + "$ref": "#/definitions/GetDataType" + }, + "GetService": { + "description": "The service distribution for the relevant web page (e.g., OPeNDAP, OpenSearch, WCS, WFS, WMS).", + "$ref": "#/definitions/GetServiceType" + } + }, + "required": ["URL", "URLContentType", "Type"] + }, + "GetDataType": { + "description": "Represents the information needed for a DistributionURL where data is retrieved.", + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "The format of the data. The controlled vocabulary for formats is maintained in the Keyword Management System (KMS)", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "MimeType": { + "description": "The mime type of the service.", + "$ref": "#/definitions/URLMimeTypeEnum" + }, + "Size": { + "description": "The size of the data.", + "type": "number" + }, + "Unit": { + "description": "Unit of information, together with Size determines total size in bytes of the data.", + "type": "string", + "enum": ["KB", "MB", "GB", "TB", "PB"] + }, + "Fees": { + "description": "The fee for ordering the collection data. The fee is entered as a number, in US Dollars.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Checksum": { + "description": "The checksum, usually a SHA1 or md5 checksum for the data file.", + "type": "string", + "minLength": 1, + "maxLength": 50 + } + }, + "required": ["Format", "Size", "Unit"] + }, + "GetServiceType": { + "description": "Represents a Service through a URL where the service will act on data and return the result to the caller.", + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "The format of the data.", + "$ref": "#/definitions/GetServiceTypeFormatEnum" + }, + "MimeType": { + "description": "The mime type of the service.", + "$ref": "#/definitions/URLMimeTypeEnum" + }, + "Protocol": { + "description": "The protocol of the service.", + "type": "string", + "enum": ["HTTP", "HTTPS", "FTP", "FTPS", "Not provided"] + }, + "FullName": { + "description": "The full name of the service.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DataID": { + "description": "The data identifier of the data provided by the service. Typically, this is a file name.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DataType": { + "description": "The data type of the data provided by the service.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "URI": { + "description": "The URI of the data provided by the service.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "minItems": 1 + } + }, + "required": [ "MimeType", "Protocol", "FullName", "DataID", "DataType"] + }, + "OnlineResourceType": { + "type": "object", + "additionalProperties": false, + "description": "Describes the online resource pertaining to the data.", + "properties": { + "Linkage": { + "description": "The URL of the website related to the online resource.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Protocol": { + "description": "The protocol of the linkage for the online resource, such as https, svn, ftp, etc.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ApplicationProfile": { + "description": "The application profile holds the name of the application that can service the data. For example if the URL points to a word document, then the applicationProfile is MS-Word.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Name": { + "description": "The name of the online resource.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Description": { + "description": "The description of the online resource.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Function": { + "description": "The function of the online resource. In ISO where this class originated the valid values are: download, information, offlineAccess, order, and search.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "MimeType": { + "description": "The mime type of the online resource.", + "$ref": "#/definitions/URLMimeTypeEnum" + } + }, + "required": ["Linkage"] + }, + "ResourceCitationType": { + "type": "object", + "additionalProperties": false, + "description": "Building block text fields used to construct the recommended language for citing the collection in professional scientific literature. The citation language constructed from these fields references the collection itself, and is not designed for listing bibliographic references of scientific research articles arising from search results. A list of references related to the research results should be in the Publication Reference element.", + "properties": { + "Version": { + "description": "The version of the collection.", + "$ref": "#/definitions/VersionType" + }, + "Title": { + "description": "The title of the collection; this is the same as the collection Entry Title.", + "$ref": "#/definitions/TitleType" + }, + "Creator": { + "description": "The name of the organization(s) or individual(s) with primary intellectual responsibility for the collection's development.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Editor": { + "description": "The individual(s) responsible for changing the data in the collection.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "SeriesName": { + "description": "The name of the data series, or aggregate data of which the data is a part.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ReleaseDate": { + "description": "The date when the collection was made available for release.", + "format": "date-time", + "type": "string" + }, + "ReleasePlace": { + "description": "The name of the city (and state or province and country if needed) where the collection was made available for release.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Publisher": { + "description": "The name of the individual or organization that made the collection available for release.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "IssueIdentification": { + "description": "The volume or issue number of the publication (if applicable).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DataPresentationForm": { + "description": "The mode in which the data are represented, e.g. atlas, image, profile, text, etc.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "OtherCitationDetails": { + "description": "Additional free-text citation information.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "OnlineResource": { + "description": "The URL of the landing page for the collection.", + "$ref": "#/definitions/OnlineResourceType" + } + } + }, + "DoiType": { + "oneOf": [{ + "type": "object", + "additionalProperties": false, + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. For those that want to specify that a DOI is not applicable or unknown for their record, use the second option.", + "properties": { + "DOI": { + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Authority": { + "description": "The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", + "$ref": "#/definitions/AuthorityType" + } + }, + "required": ["DOI"] + }, { + "type": "object", + "additionalProperties": false, + "description": "This element stores the fact that the DOI (Digital Object Identifier) is not applicable or is unknown.", + "properties": { + "MissingReason": { + "description": "This element stores the fact that a DOI (Digital Object Identifier) is not applicable or is unknown for this record.", + "type": "string", + "enum": ["Not Applicable", "Unknown"] + }, + "Explanation": { + "description": "This element describes the reason the DOI is not applicable or unknown.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["MissingReason"] + }] + }, + "DoiDoiType": { + "type": "object", + "additionalProperties": false, + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections using CollectionDOI property.", + "properties": { + "DOI": { + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Authority": { + "description": "The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", + "$ref": "#/definitions/AuthorityType" + } + }, + "required": ["DOI"] + }, + "AccessConstraintsType": { + "type": "object", + "additionalProperties": false, + "description": "Information about any constraints for accessing the data set. This includes any special restrictions, legal prerequisites, limitations and/or warnings on obtaining the data set.", + "properties": { + "Description": { + "description": "Free-text description of the constraint. In DIF, this field is called Access_Constraint. In ECHO, this field is called RestrictionComment. Examples of text in this field are Public, In-house, Limited. Additional detailed instructions on how to access the collection data may be entered in this field.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "Value": { + "description": "Numeric value that is used with Access Control Language (ACLs) to restrict access to this collection. For example, a provider might specify a collection level ACL that hides all collections with a value element set to 15. In ECHO, this field is called RestrictionFlag. This field does not exist in DIF.", + "type": "number" + } + }, + "required": ["Description"] + }, + "MetadataAssociationType": { + "type": "object", + "additionalProperties": false, + "description": "Used to identify other services, collections, visualizations, granules, and other metadata types and resources that are associated with or dependent on this collection, including parent-child relationships.", + "properties": { + "Type": { + "description": "The type of association between this collection metadata record and the target metadata record. Choose type from the drop-down list.", + "$ref": "#/definitions/MetadataAssociateTypeEnum" + }, + "Description": { + "description": "Free-text description of the association between this collection record and the target metadata record.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "EntryId": { + "description": "ShortName of the target metadata record that is associated with this collection record.", + "$ref": "#/definitions/EntryIdType" + }, + "Version": { + "description": "The version of the target metadata record that is associated with this collection record.", + "$ref": "#/definitions/VersionType" + } + }, + "required": ["EntryId"] + }, + "PublicationReferenceType": { + "type": "object", + "additionalProperties": false, + "description": "Describes key bibliographic citations pertaining to the data.", + "properties": { + "OnlineResource": { + "description": "The URL of the website related to the bibliographic citation.", + "$ref": "#/definitions/OnlineResourceType" + }, + "Title": { + "description": "The title of the publication in the bibliographic citation.", + "$ref": "#/definitions/TitleType" + }, + "Publisher": { + "description": "The publisher of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "DOI": { + "description": "The Digital Object Identifier (DOI) of the publication.", + "$ref": "#/definitions/DoiDoiType" + }, + "Author": { + "description": "The author of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "PublicationDate": { + "description": "The date of the publication.", + "format": "date-time", + "type": "string" + }, + "Series": { + "description": "The name of the series of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Edition": { + "description": "The edition of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Volume": { + "description": "The publication volume number.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Issue": { + "description": "The issue of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ReportNumber": { + "description": "The report number of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "PublicationPlace": { + "description": "The publication place of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Pages": { + "description": "The publication pages that are relevant.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ISBN": { + "description": "The ISBN of the publication.", + "type": "string", + "minLength": 1, + "maxLength": 13 + }, + "OtherReferenceDetails": { + "description": "Additional free-text reference information about the publication.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + } + } + }, + "ScienceKeywordType": { + "type": "object", + "additionalProperties": false, + "description": "Enables specification of Earth science keywords related to the collection. The controlled vocabulary for Science Keywords is maintained in the Keyword Management System (KMS).", + "properties": { + "Category": { + "$ref": "#/definitions/KeywordStringType" + }, + "Topic": { + "$ref": "#/definitions/KeywordStringType" + }, + "Term": { + "$ref": "#/definitions/KeywordStringType" + }, + "VariableLevel1": { + "$ref": "#/definitions/KeywordStringType" + }, + "VariableLevel2": { + "$ref": "#/definitions/KeywordStringType" + }, + "VariableLevel3": { + "$ref": "#/definitions/KeywordStringType" + }, + "DetailedVariable": { + "$ref": "#/definitions/KeywordStringType" + } + }, + "required": ["Category", "Topic", "Term"] + }, + "AdditionalAttributeType": { + "type": "object", + "additionalProperties": false, + "description": "Additional unique attributes of the collection, beyond those defined in the UMM model, which the data provider deems useful for end-user understanding of the data in the collection. Additional attributes are also called Product Specific Attributes (PSAs) or non-core attributes. Examples are HORIZONTALTILENUMBER, VERTICALTILENUMBER.", + "properties": { + "Name": { + "description": "The name (1 word description) of the additional attribute.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Description": { + "description": "Free-text description of the additional attribute.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Value": { + "description": "Value of the additional attribute if it is the same for all granules across the collection. If the value of the additional attribute may differ by granule, leave this collection-level value blank.", + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "DataType": { + "description": "Data type of the values of the additional attribute.", + "$ref": "#/definitions/DataTypeEnum" + }, + "MeasurementResolution": { + "description": "The smallest unit increment to which the additional attribute value is measured.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ParameterRangeBegin": { + "description": "The minimum value of the additional attribute over the whole collection.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ParameterRangeEnd": { + "description": "The maximum value of the additional attribute over the whole collection.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ParameterUnitsOfMeasure": { + "description": "The standard unit of measurement for the additional attribute. For example, meters, hertz.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ParameterValueAccuracy": { + "description": "An estimate of the accuracy of the values of the additional attribute. For example, for AVHRR: Measurement error or precision-measurement error or precision of a data product parameter. This can be specified in percent or the unit with which the parameter is measured.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ValueAccuracyExplanation": { + "description": "Describes the method used for determining the parameter value accuracy that is given for this additional attribute.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Group": { + "description": "Identifies a namespace for the additional attribute name.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "UpdateDate": { + "description": "The date this additional attribute information was updated.", + "format": "date-time", + "type": "string" + } + }, + "required": ["Name", "DataType", "Description"] + }, + "PlatformType": { + "type": "object", + "additionalProperties": false, + "description": "Describes the relevant platforms used to acquire the data in the collection. The controlled vocabularies for platform types and names are maintained in the Keyword Management System (KMS).", + "properties": { + "Type": { + "description": "The most relevant platform type.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ShortName": { + "$ref": "#/definitions/PlatformShortNameType" + }, + "LongName": { + "$ref": "#/definitions/PlatformLongNameType" + }, + "Characteristics": { + "description": "Platform-specific characteristics, e.g., Equator Crossing Time, Inclination Angle, Orbital Period. The characteristic names must be unique on this platform; however the names do not have to be unique across platforms.", + "type": "array", + "items": { + "$ref": "#/definitions/CharacteristicType" + }, + "minItems": 0 + }, + "Instruments": { + "type": "array", + "items": { + "$ref": "#/definitions/InstrumentType" + }, + "minItems": 1 + } + }, + "required": ["ShortName"] + }, + "CharacteristicType": { + "type": "object", + "additionalProperties": false, + "description": "This entity is used to define characteristics.", + "properties": { + "Name": { + "description": "The name of the characteristic attribute.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Description": { + "description": "Description of the Characteristic attribute.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Value": { + "description": "The value of the Characteristic attribute.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Unit": { + "description": "Units associated with the Characteristic attribute value.", + "type": "string", + "minLength": 1, + "maxLength": 20 + }, + "DataType": { + "description": "The datatype of the Characteristic/attribute.", + "$ref": "#/definitions/DataTypeEnum" + } + }, + "required": ["Name", "Description", "DataType", "Unit", "Value"] + }, + "InstrumentType": { + "type": "object", + "additionalProperties": false, + "description": "Information about the device used to measure or record data in this collection, including direct human observation. In cases where instruments have a single child instrument or the instrument and child instrument are used synonymously (e.g. AVHRR), both Instrument and ComposedOf should be recorded. The child instrument information is represented in a separate section. The controlled vocabulary for instrument names is maintained in the Keyword Management System (KMS).", + "properties": { + "ShortName": { + "$ref": "#/definitions/PlatformShortNameType" + }, + "LongName": { + "$ref": "#/definitions/PlatformLongNameType" + }, + "Characteristics": { + "description": "Instrument-specific characteristics, e.g., Wavelength, SwathWidth, Field of View. The characteristic names must be unique on this instrument; however the names do not have to be unique across instruments.", + "type": "array", + "items": { + "$ref": "#/definitions/CharacteristicType" + }, + "minItems": 0 + }, + "Technique": { + "description": "The expanded name of the primary sensory instrument. (e.g. Advanced Spaceborne Thermal Emission and Reflective Radiometer, Clouds and the Earth's Radiant Energy System, Human Observation).", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "NumberOfInstruments": { + "description": "Number of instruments used on the instrument when acquiring the granule data.", + "type": "integer" + }, + "ComposedOf": { + "type": "array", + "items": { + "$ref": "#/definitions/InstrumentChildType" + }, + "minItems": 0 + }, + "OperationalModes": { + "description": "The operation mode applied on the instrument when acquiring the granule data.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 20 + }, + "minItems": 0 + } + }, + "required": ["ShortName"] + }, + "InstrumentChildType": { + "type": "object", + "additionalProperties": false, + "description": "Child object on an instrument. Has all the same fields as instrument, minus the list of child instruments.", + "properties": { + "ShortName": { + "$ref": "#/definitions/PlatformShortNameType" + }, + "LongName": { + "$ref": "#/definitions/PlatformLongNameType" + }, + "Characteristics": { + "description": "Instrument-specific characteristics, e.g., Wavelength, SwathWidth, Field of View. The characteristic names must be unique on this instrument; however the names do not have to be unique across instruments.", + "type": "array", + "items": { + "$ref": "#/definitions/CharacteristicType" + }, + "minItems": 0 + }, + "Technique": { + "description": "The expanded name of the primary sensory instrument. (e.g. Advanced Spaceborne Thermal Emission and Reflective Radiometer, Clouds and the Earth's Radiant Energy System, Human Observation).", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "required": ["ShortName"] + }, + "ProjectType": { + "type": "object", + "additionalProperties": false, + "description": "Information describing the scientific endeavor(s) with which the collection is associated. Scientific endeavors include campaigns, projects, interdisciplinary science investigations, missions, field experiments, etc. The controlled vocabularies for project names are maintained in the Keyword Management System (KMS)", + "properties": { + "ShortName": { + "description": "The unique identifier by which a project or campaign/experiment is known. The campaign/project is the scientific endeavor associated with the acquisition of the collection. Collections may be associated with multiple campaigns.", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "LongName": { + "description": "The expanded name of the campaign/experiment (e.g. Global climate observing system).", + "type": "string", + "minLength": 1, + "maxLength": 300 + }, + "Campaigns": { + "description": "The name of the campaign/experiment (e.g. Global climate observing system).", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "minItems": 0 + }, + "StartDate": { + "description": "The starting date of the campaign.", + "format": "date-time", + "type": "string" + }, + "EndDate": { + "description": "The ending data of the campaign.", + "format": "date-time", + "type": "string" + } + }, + "required": ["ShortName"] + }, + "TemporalExtentType": { + "type": "object", + "additionalProperties": false, + "description": "Information which describes the temporal range or extent of a specific collection.", + "properties": { + "PrecisionOfSeconds": { + "description": "The precision (position in number of places to right of decimal point) of seconds used in measurement.", + "type": "integer" + }, + "EndsAtPresentFlag": { + "description": "Setting the Ends At Present Flag to 'True' indicates that a data collection which covers, temporally, a discontinuous range, currently ends at the present date. Setting the Ends at Present flag to 'True' eliminates the need to continuously update the Range Ending Time for collections where granules are continuously being added to the collection inventory.", + "type": "boolean" + }, + "RangeDateTimes": { + "description": "Stores the start and end date/time of a collection.", + "type": "array", + "items": { + "$ref": "#/definitions/RangeDateTimeType" + }, + "minItems": 1 + }, + "SingleDateTimes": { + "type": "array", + "items": { + "format": "date-time", + "type": "string" + }, + "minItems": 1 + }, + "PeriodicDateTimes": { + "description": "Temporal information about a collection having granules collected at a regularly occurring period. Information includes the start and end dates of the period, duration unit and value, and cycle duration unit and value.", + "type": "array", + "items": { + "$ref": "#/definitions/PeriodicDateTimeType" + }, + "minItems": 1 + } + }, + "oneOf": [{ + "required": ["RangeDateTimes"] + }, { + "required": ["SingleDateTimes"] + }, { + "required": ["PeriodicDateTimes"] + }] + }, + "RangeDateTimeType": { + "type": "object", + "additionalProperties": false, + "description": "Stores the start and end date/time of a collection.", + "properties": { + "BeginningDateTime": { + "description": "The time when the temporal coverage period being described began.", + "format": "date-time", + "type": "string" + }, + "EndingDateTime": { + "description": "The time when the temporal coverage period being described ended.", + "format": "date-time", + "type": "string" + } + }, + "required": ["BeginningDateTime"] + }, + "PeriodicDateTimeType": { + "type": "object", + "additionalProperties": false, + "description": "Information about Periodic Date Time collections, including the name of the temporal period in addition to the start and end dates, duration unit and value, and cycle duration unit and value.", + "properties": { + "Name": { + "description": "The name given to the recurring time period. e.g. 'spring - north hemi.'", + "type": "string", + "minLength": 1, + "maxLength": 30 + }, + "StartDate": { + "description": "The date (day and time) of the first occurrence of this regularly occurring period which is relevant to the collection coverage.", + "format": "date-time", + "type": "string" + }, + "EndDate": { + "description": "The date (day and time) of the end occurrence of this regularly occurring period which is relevant to the collection coverage.", + "format": "date-time", + "type": "string" + }, + "DurationUnit": { + "description": "The unit specification for the period duration.", + "$ref": "#/definitions/DurationUnitEnum" + }, + "DurationValue": { + "description": "The number of PeriodDurationUnits in the RegularPeriodic period. e.g. the RegularPeriodic event 'Spring-North Hemi' might have a PeriodDurationUnit='MONTH' PeriodDurationValue='3' PeriodCycleDurationUnit='YEAR' PeriodCycleDurationValue='1' indicating that Spring-North Hemi lasts for 3 months and has a cycle duration of 1 year. The unit for the attribute is the value of the attribute PeriodDurationValue.", + "type": "integer" + }, + "PeriodCycleDurationUnit": { + "description": "The unit specification of the period cycle duration.", + "$ref": "#/definitions/DurationUnitEnum" + }, + "PeriodCycleDurationValue": { + "type": "integer" + } + }, + "required": ["Name", "StartDate", "EndDate", "DurationUnit", "DurationValue", "PeriodCycleDurationUnit", "PeriodCycleDurationValue"] + }, + "UuidType": { + "description": "A Level 3 UUID, see wiki link http://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29", + "type": "string", + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89abAB][0-9a-f]{3}-[0-9a-f]{12}" + }, + "LineageDateEnum": { + "description": "The name of supported lineage date types", + "type": "string", + "enum": ["CREATE", "UPDATE", "DELETE", "REVIEW"] + }, + "VersionType": { + "description": "The version of the metadata record.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "VersionDescriptionType": { + "description": "Free-text description of the version of the resource such as a Collection.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "AuthorityType": { + "description": "The Authority (who created it or owns it) of a unique identifier.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "EntryTitleType": { + "description": "The title of the data described by the metadata.", + "$ref": "#/definitions/TitleType" + }, + "TitleType": { + "description": "A title type that defines the min and max lengths of all titles.", + "type": "string", + "minLength": 1, + "maxLength": 1030 + }, + "AbstractType": { + "description": "A brief description of the collection. This allows potential users to determine if the collection is useful for their needs.", + "type": "string", + "minLength": 1, + "maxLength": 40000 + }, + "PurposeType": { + "description": "Describes the purpose and/or intended use of data in this collection.", + "type": "string", + "minLength": 1, + "maxLength": 10000 + }, + "DataCenterRoleEnum": { + "description": "Defines the possible values of a data center role.", + "type": "string", + "enum": ["ARCHIVER", "DISTRIBUTOR", "PROCESSOR", "ORIGINATOR"] + }, + "DataContactRoleEnum": { + "description": "Defines the possible values of a data contact role.", + "type": "string", + "enum": ["Data Center Contact", "Technical Contact", "Science Contact", "Investigator", "Metadata Author", "User Services", "Science Software Development"] + }, + "ContactMechanismTypeEnum": { + "description": "Defines the possible contact mechanism types.", + "type": "string", + "enum": ["Direct Line", "Email", "Facebook", "Fax", "Mobile", "Modem", "Primary", "TDD/TTY Phone", "Telephone", "Twitter", "U.S. toll free", "Other"] + }, + "ShortNameType": { + "description": "The unique name.", + "type": "string", + "minLength": 1, + "maxLength": 85 + }, + "DataCenterShortNameType": { + "description": "The unique name of the data center.", + "type": "string", + "minLength": 1, + "maxLength": 85, + "pattern": "[\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=,][\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=, ]{1,84}" + }, + "PlatformShortNameType": { + "description": "The unique name of the platform.", + "type": "string", + "minLength": 1, + "maxLength": 80, + "pattern": "[\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=,][\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=, ]{1,79}" + }, + "LongNameType": { + "description": "The expanded or long name related to the short name.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "PlatformLongNameType": { + "description": "The expanded or long name related to the short name of the platform.", + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "[\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=,][\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=, ]{0,1023}" + }, + "QualityType": { + "description": "Free-text information about the quality of the data in the collection or any quality assurance procedures followed in producing the data described in the metadata. Suggestions for information to include in the Quality field: Description should be succinct. Include indicators of data quality or quality flags. Include recognized or potential problems with quality. Established quality control mechanisms should be included. Established quantitative quality measurements should be included.", + "type": "string", + "minLength": 1, + "maxLength": 12000 + }, + "MetadataAssociateTypeEnum": { + "description": "The set of supported values for MetadataAssociationType.Type.", + "type": "string", + "enum": ["SCIENCE ASSOCIATED", "DEPENDENT", "INPUT", "PARENT", "CHILD", "RELATED", "LARGER CITATION WORKS"] + }, + "KeywordStringType": { + "type": "string", + "minLength": 1, + "maxLength": 80, + "pattern": "[\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=,][\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=, ]{1,79}" + }, + "AncillaryKeywordStringType": { + "type": "string", + "minLength": 1, + "maxLength": 255, + "pattern": "[\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=,][\\w\\-&'()\\[\\]/.\"#$%\\^@!*+=, ]{1,254}" + }, + "DataTypeEnum": { + "description": "This entity contains the additional attribute data types.", + "type": "string", + "enum": ["STRING", "FLOAT", "INT", "BOOLEAN", "DATE", "TIME", "DATETIME", "DATE_STRING", "TIME_STRING", "DATETIME_STRING"] + }, + "DurationUnitEnum": { + "type": "string", + "enum": ["DAY", "MONTH", "YEAR"] + }, + "URLMimeTypeEnum": { + "type": "string", + "enum": ["application/json", "application/xml", "application/x-netcdf", "application/gml+xml", "application/opensearchdescription+xml", + "application/vnd.google-earth.kml+xml", "image/gif", "image/tiff", "image/bmp", "text/csv", + "text/xml", "application/pdf", "application/x-hdf", "application/xhdf5", + "application/octet-stream", "application/vnd.google-earth.kmz", "image/jpeg", "image/png", + "image/vnd.collada+xml", "text/html", "text/plain", "Not provided"] + }, + "GetServiceTypeFormatEnum": { + "type": "string", + "enum": ["ascii", "binary", "GRIB", "BUFR", "HDF4", "HDF5", "HDF-EOS4", "HDF-EOS5", "jpeg", "png", "tiff", "geotiff", "kml", "Not provided"] + } + } +} diff --git a/pyQuARC/schemas/umm-json_schema.json b/pyQuARC/schemas/umm-json_schema.json new file mode 100644 index 00000000..1dcb9c2f --- /dev/null +++ b/pyQuARC/schemas/umm-json_schema.json @@ -0,0 +1,1511 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "UMM-C", + "type": "object", + "additionalProperties": false, + "properties": { + "MetadataLanguage": { + "description": "The language used in the metadata record.", + "$ref": "umm-cmn-json-schema.json#/definitions/LanguageType" + }, + "MetadataDates": { + "description": "Dates related to activities involving the metadata record itself. For example, Future Review date is the date that the metadata record is scheduled to be reviewed.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/DateType" + }, + "minItems": 0 + }, + "DirectoryNames": { + "description": "Formerly called Internal Directory Name (IDN) Node (IDN_Node). This element has been used historically by the GCMD internally to identify association, responsibility and/or ownership of the dataset, service or supplemental information. Note: This field only occurs in the DIF. When a DIF record is retrieved in the ECHO10 or ISO 19115 formats, this element will not be translated. The controlled vocabulary for directory names is maintained in the Keyword Management System (KMS).", + "type": "array", + "items": { + "$ref": "#/definitions/DirectoryNameType" + }, + "minItems": 0 + }, + "EntryTitle": { + "description": "The title of the collection or service described by the metadata.", + "$ref": "umm-cmn-json-schema.json#/definitions/EntryTitleType" + }, + "DOI": { + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. For those that want to specify that a DOI is not applicable or unknown use the second option.", + "$ref": "umm-cmn-json-schema.json#/definitions/DoiType" + }, + "AssociatedDOIs": { + "description": "This element stores DOIs that are associated with the collection such as from campaigns and other related sources. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", + "type": "array", + "items": { + "$ref": "#/definitions/AssociatedDoiType" + }, + "minItems": 1 + }, + "Abstract": { + "description": "A brief description of the collection or service the metadata represents.", + "$ref": "umm-cmn-json-schema.json#/definitions/AbstractType" + }, + "Purpose": { + "description": "Suggested usage or purpose for the collection data or service.", + "$ref": "umm-cmn-json-schema.json#/definitions/PurposeType" + }, + "DataLanguage": { + "description": "Describes the language used in the preparation, storage, and description of the collection. It is the language of the collection data themselves. It does not refer to the language used in the metadata record (although this may be the same language).", + "$ref": "umm-cmn-json-schema.json#/definitions/LanguageType" + }, + "DataDates": { + "description": "Dates related to activities involving the collection data. For example, Creation date is the date that the collection data first entered the data archive system.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/DateType" + }, + "minItems": 1 + }, + "DataCenters": { + "description": "Information about the data centers responsible for this collection and its metadata.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/DataCenterType" + }, + "minItems": 1 + }, + "ContactGroups": { + "description": "Information about the personnel groups responsible for this collection and its metadata.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ContactGroupType" + } + }, + "ContactPersons": { + "description": "Information about the personnel responsible for this collection and its metadata.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ContactPersonType" + } + }, + "CollectionDataType": { + "description": "Identifies the collection as a Science Quality collection or a non-science-quality collection such as a Near-Real-Time collection.", + "$ref": "#/definitions/CollectionDataTypeEnum" + }, + "ProcessingLevel": { + "description": "The identifier for the processing level of the collection (e.g., Level0, Level1A).", + "$ref": "#/definitions/ProcessingLevelType" + }, + "CollectionCitations": { + "description": "Information required to properly cite the collection in professional scientific literature. This element provides information for constructing a citation for the item itself, and is not designed for listing bibliographic references of scientific research articles arising from search results. A list of references related to the research results should be in the Publication Reference element.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ResourceCitationType" + }, + "minItems": 0 + }, + "CollectionProgress": { + "description": "This element describes the production status of the data set. There are five choices for Data Providers: PLANNED refers to data sets to be collected in the future and are thus unavailable at the present time. For Example: The Hydro spacecraft has not been launched, but information on planned data sets may be available. ACTIVE refers to data sets currently in production or data that is continuously being collected or updated. For Example: data from the AIRS instrument on Aqua is being collected continuously. COMPLETE refers to data sets in which no updates or further data collection will be made. For Example: Nimbus-7 SMMR data collection has been completed. DEPRECATED refers to data sets that have been retired, but still can be retrieved. Usually newer products exist that replace the retired data set. NOT APPLICABLE refers to data sets in which a collection progress is not applicable such as a calibration collection. There is a sixth value of NOT PROVIDED that should not be used by a data provider. It is currently being used as a value when a correct translation cannot be done with the current valid values, or when the value is not provided by the data provider.", + "$ref": "#/definitions/CollectionProgressEnum" + }, + "Quality": { + "description": "Free text description of the quality of the collection data. Description may include: 1) succinct description of the quality of data in the collection; 2) Any quality assurance procedures followed in producing the data in the collection; 3) indicators of collection quality or quality flags - both validated or invalidated; 4) recognized or potential problems with quality; 5) established quality control mechanisms; and 6) established quantitative quality measurements.", + "$ref": "umm-cmn-json-schema.json#/definitions/QualityType" + }, + "UseConstraints": { + "description": "Designed to protect privacy and/or intellectual property by allowing the author to specify how the collection may or may not be used after access is granted. This includes any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the item. Providers may request acknowledgement of the item from users and claim no responsibility for quality and completeness. Note: Use Constraints describe how the item may be used once access has been granted; and is distinct from Access Constraints, which refers to any constraints in accessing the item.", + "$ref": "#/definitions/UseConstraintsType" + }, + "AccessConstraints": { + "description": "Allows the author to constrain access to the collection. This includes any special restrictions, legal prerequisites, limitations and/or warnings on obtaining collection data. 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.", + "$ref": "umm-cmn-json-schema.json#/definitions/AccessConstraintsType" + }, + "ArchiveAndDistributionInformation": { + "description": "This element and all of its sub elements exist for display purposes. It allows a data provider to provide archive and distribution information up front to an end user, to help them decide if they can use the product.", + "$ref": "#/definitions/ArchiveAndDistributionInformationType" + }, + "DirectDistributionInformation": { + "description": "This element allows end users to get direct access to data products that are stored in the Amazon Web Service (AWS) S3 buckets. The sub elements include S3 credentials end point and a documentation URL as well as bucket prefix names and an AWS region.", + "$ref": "#/definitions/DirectDistributionInformationType" + }, + "PublicationReferences": { + "description": "Describes key bibliographic citations pertaining to the collection.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/PublicationReferenceType" + }, + "minItems": 0 + }, + "ISOTopicCategories": { + "description": "Identifies the topic categories from the EN ISO 19115-1:2014 Geographic Information – Metadata – Part 1: Fundamentals (http://www.isotc211.org/) Topic Category Code List that pertain to this collection, based on the Science Keywords associated with the collection. An ISO Topic Category is a high-level thematic classification to assist in the grouping of and search for available collections. The controlled vocabulary for ISO topic categories is maintained in the Keyword Management System (KMS).", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "minItems": 0 + }, + "ScienceKeywords": { + "description": "Controlled Science Keywords describing the collection. The controlled vocabulary for Science Keywords is maintained in the Keyword Management System (KMS).", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ScienceKeywordType" + }, + "minItems": 1 + }, + "AncillaryKeywords": { + "description": "Allows authors to provide words or phrases outside of the controlled Science Keyword vocabulary, to further describe the collection.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/AncillaryKeywordStringType" + }, + "minItems": 0 + }, + "AdditionalAttributes": { + "description": "The data’s distinctive attributes of the collection (i.e. attributes used to describe the unique characteristics of the collection which extend beyond those defined).", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/AdditionalAttributeType" + }, + "minItems": 0 + }, + "MetadataAssociations": { + "description": "This element is used to identify other services, collections, visualizations, granules, and other metadata types and resources that are associated with or dependent on the data described by the metadata. This element is also used to identify a parent metadata record if it exists. This usage should be reserved for instances where a group of metadata records are subsets that can be better represented by one parent metadata record, which describes the entire set. In some instances, a child may point to more than one parent. The EntryId is the same as the element described elsewhere in this document where it contains an ID and Version.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/MetadataAssociationType" + }, + "minItems": 1 + }, + "TemporalExtents": { + "description": "This class contains attributes which describe the temporal range of a specific collection. Temporal Extent includes a specification of the Temporal Range Type of the collection, which is one of Range Date Time, Single Date Time, or Periodic Date Time", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/TemporalExtentType" + }, + "minItems": 1 + }, + "PaleoTemporalCoverages": { + "description": "For paleoclimate or geologic data, PaleoTemporalCoverage is the length of time represented by the data collected. PaleoTemporalCoverage should be used when the data spans time frames earlier than yyyy-mm-dd = 0001-01-01.", + "type": "array", + "items": { + "$ref": "#/definitions/PaleoTemporalCoverageType" + }, + "minItems": 0 + }, + "TemporalKeywords": { + "description": "One or more words or phrases that describe the temporal resolution of the dataset.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "minItems": 0 + }, + "SpatialExtent": { + "$ref": "#/definitions/SpatialExtentType" + }, + "TilingIdentificationSystems": { + "description": "Name of the two-dimensional tiling system for the collection. Previously called TwoDCoordinateSystem.", + "type": "array", + "items": { + "$ref": "#/definitions/TilingIdentificationSystemType" + }, + "minItems": 0 + }, + "SpatialInformation": { + "description": "The reference frame or system in which altitudes (elevations) are given. The information contains the datum name, distance units and encoding method, which provide the definition for the system. This field also stores the characteristics of the reference frame or system from which depths are measured. The additional information in the field is geometry reference data etc.", + "$ref": "#/definitions/SpatialInformationType" + }, + "SpatialKeywords": { + "description": "This is deprecated and will be removed. Use LocationKeywords instead. Controlled hierarchical keywords used to specify the spatial location of the collection. The controlled vocabulary for spatial keywords is maintained in the Keyword Management System (KMS). The Spatial Keyword hierarchy includes one or more of the following layers: Location_Category (e.g., Continent), Location_Type (e.g. Africa), Location_Subregion1 (e.g., Central Africa), Location_Subregion2 (e.g., Cameroon), and Location_Subregion3.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "minItems": 1 + }, + "LocationKeywords": { + "description": "Controlled hierarchical keywords used to specify the spatial location of the collection. The controlled vocabulary for spatial keywords is maintained in the Keyword Management System (KMS). The Spatial Keyword hierarchy includes one or more of the following layers: Category (e.g., Continent), Type (e.g. Africa), Subregion1 (e.g., Central Africa), Subregion2 (e.g., Cameroon), and Subregion3. DetailedLocation exists outside the hierarchy.", + "type": "array", + "items": { + "$ref": "#/definitions/LocationKeywordType" + } + }, + "Platforms": { + "description": "Information about the relevant platform(s) used to acquire the data in the collection. The controlled vocabulary for platform types is maintained in the Keyword Management System (KMS), and includes Spacecraft, Aircraft, Vessel, Buoy, Platform, Station, Network, Human, etc.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/PlatformType" + }, + "minItems": 1 + }, + "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 — 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.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ProjectType" + }, + "minItems": 1 + }, + "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.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/RelatedUrlType" + }, + "minItems": 1 + }, + "ShortName": { + "description": "The short name associated with the collection.", + "$ref": "umm-cmn-json-schema.json#/definitions/ShortNameType" + }, + "Version": { + "description": "The Version of the collection.", + "$ref": "umm-cmn-json-schema.json#/definitions/VersionType" + }, + "VersionDescription": { + "description": "The Version Description of the collection.", + "$ref": "umm-cmn-json-schema.json#/definitions/VersionDescriptionType" + } + }, + "required": ["ShortName", "Version", "EntryTitle", "Abstract", "DOI", "DataCenters", "ProcessingLevel", "ScienceKeywords", "TemporalExtents", "SpatialExtent", "Platforms", "CollectionProgress"], + + + + "definitions": { + "UseConstraintsDescriptionType": { + "type": "object", + "additionalProperties": false, + "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", + "properties": { + "Description": { + "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + } + } + }, + "UseConstraintsDescType": { + "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "UseConstraintsType": { + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "oneOf": [{ + "type": "object", + "additionalProperties": false, + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "properties": { + "Description": { + "$ref": "#/definitions/UseConstraintsDescType" + } + }, + "required": ["Description"] + }, { + "type": "object", + "additionalProperties": false, + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "properties": { + "Description": { + "$ref": "#/definitions/UseConstraintsDescType" + }, + "LicenseURL": { + "description": "This element holds the URL and associated information to access the License on the web. If this element is used the LicenseText element cannot be used.", + "$ref": "umm-cmn-json-schema.json#/definitions/OnlineResourceType" + } + }, + "required": ["LicenseURL"] + }, { + "type": "object", + "additionalProperties": false, + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "properties": { + "Description": { + "$ref": "#/definitions/UseConstraintsDescType" + }, + "LicenseText": { + "description": "This element holds the actual license text. If this element is used the LicenseUrl element cannot be used.", + "type": "string", + "minLength": 1, + "maxLength": 20000 + } + }, + "required": ["LicenseText"] + } + ]}, + "DirectoryNameType": { + "type": "object", + "additionalProperties": false, + "description": "Formerly called Internal Directory Name (IDN) Node (IDN_Node). This element has been used historically by the GCMD internally to identify association, responsibility and/or ownership of the dataset, service or supplemental information. Note: This field only occurs in the DIF. When a DIF record is retrieved in the ECHO10 or ISO 19115 formats, this element will not be translated.", + "properties": { + "ShortName": { + "$ref": "umm-cmn-json-schema.json#/definitions/ShortNameType" + }, + "LongName": { + "$ref": "umm-cmn-json-schema.json#/definitions/LongNameType" + } + }, + "required": ["ShortName"] + }, + "ProcessingLevelType": { + "type": "object", + "additionalProperties": false, + "description": "This element contains the Processing Level Id and the Processing Level Description", + "properties": { + "ProcessingLevelDescription": { + "description": "Description of the meaning of the Processing Level Id, e.g., the Description for the Level4 Processing Level Id might be 'Model output or results from analyses of lower level data'", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Id": { + "description": "An identifier indicating the level at which the data in the collection are processed, ranging from Level0 (raw instrument data at full resolution) to Level4 (model output or analysis results). The value of Processing Level Id is chosen from a controlled vocabulary.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["Id"] + }, + "PaleoTemporalCoverageType": { + "type": "object", + "additionalProperties": false, + "description": "For paleoclimate or geologic data, PaleoTemporalCoverage is the length of time represented by the data collected. PaleoTemporalCoverage should be used when the data spans time frames earlier than yyyy-mm-dd = 0001-01-01.", + "properties": { + "ChronostratigraphicUnits": { + "description": "Hierarchy of terms indicating units of geologic time, i.e., eon (e.g, Phanerozoic), era (e.g., Cenozoic), period (e.g., Paleogene), epoch (e.g., Oligocene), and stage or age (e.g, Chattian).", + "type": "array", + "items": { + "$ref": "#/definitions/ChronostratigraphicUnitType" + }, + "minItems": 0 + }, + "StartDate": { + "description": "A string indicating the number of years furthest back in time, including units, e.g., 100 Ga. Units may be Ga (billions of years before present), Ma (millions of years before present), ka (thousands of years before present) or ybp (years before present).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "EndDate": { + "description": "A string indicating the number of years closest to the present time, including units, e.g., 10 ka. Units may be Ga (billions of years before present), Ma (millions of years before present), ka (thousands of years before present) or ybp (years before present).", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + } + }, + "ChronostratigraphicUnitType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Eon": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Era": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Epoch": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Stage": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "DetailedClassification": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Period": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + } + }, + "required": ["Eon"] + }, + "SpatialExtentType": { + "type": "object", + "additionalProperties": false, + "description": "Specifies the geographic and vertical (altitude, depth) coverage of the data.", + "properties": { + "SpatialCoverageType": { + "description": "Denotes whether the collection's spatial coverage requires horizontal, vertical, horizontal and vertical, orbit, or vertical and orbit in the spatial domain and coordinate system definitions.", + "$ref": "#/definitions/SpatialCoverageTypeEnum" + }, + "HorizontalSpatialDomain": { + "$ref": "#/definitions/HorizontalSpatialDomainType" + }, + "VerticalSpatialDomains": { + "type": "array", + "items": { + "$ref": "#/definitions/VerticalSpatialDomainType" + } + }, + "OrbitParameters": { + "$ref": "#/definitions/OrbitParametersType" + }, + "GranuleSpatialRepresentation": { + "$ref": "#/definitions/GranuleSpatialRepresentationEnum" + } + }, + "required": ["GranuleSpatialRepresentation"] + }, + "SpatialCoverageTypeEnum": { + "type": "string", + "enum": ["HORIZONTAL", "VERTICAL", "ORBITAL", "HORIZONTAL_VERTICAL", "ORBITAL_VERTICAL", "HORIZONTAL_ORBITAL", "HORIZONTAL_VERTICAL_ORBITAL"] + }, + "HorizontalSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "description": "Information about a collection with horizontal spatial coverage.", + "properties": { + "ZoneIdentifier": { + "description": "The appropriate numeric or alpha code used to identify the various zones in the collection's grid coordinate system.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Geometry": { + "$ref": "#/definitions/GeometryType" + }, + "ResolutionAndCoordinateSystem": { + "description": "Specifies the horizontal spatial extents coordinate system and its resolution.", + "$ref": "#/definitions/ResolutionAndCoordinateSystemType" + } + }, + "required": ["Geometry"] + }, + "GeometryType": { + "type": "object", + "additionalProperties": false, + "properties": { + "CoordinateSystem": { + "$ref": "#/definitions/CoordinateSystemEnum" + }, + "Points": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 1 + }, + "BoundingRectangles": { + "type": "array", + "items": { + "$ref": "#/definitions/BoundingRectangleType" + }, + "minItems": 1 + }, + "GPolygons": { + "type": "array", + "items": { + "$ref": "#/definitions/GPolygonType" + }, + "minItems": 1 + }, + "Lines": { + "type": "array", + "items": { + "$ref": "#/definitions/LineType" + }, + "minItems": 1 + } + }, + "required": ["CoordinateSystem"], + "anyOf": [{ + "required": ["Points"] + }, { + "required": ["BoundingRectangles"] + }, { + "required": ["GPolygons"] + }, { + "required": ["Lines"] + }] + }, + "CoordinateSystemEnum": { + "type": "string", + "enum": ["CARTESIAN", "GEODETIC"] + }, + "PointType": { + "type": "object", + "additionalProperties": false, + "description": "The longitude and latitude values of a spatially referenced point in degrees.", + "properties": { + "Longitude": { + "$ref": "#/definitions/LongitudeType" + }, + "Latitude": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["Longitude", "Latitude"] + }, + "LatitudeType": { + "description": "The latitude value of a spatially referenced point, in degrees. Latitude values range from -90 to 90.", + "type": "number", + "minimum": -90, + "maximum": 90 + }, + "LongitudeType": { + "description": "The longitude value of a spatially referenced point, in degrees. Longitude values range from -180 to 180.", + "type": "number", + "minimum": -180, + "maximum": 180 + }, + "BoundingRectangleType": { + "type": "object", + "additionalProperties": false, + "properties": { + "WestBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "NorthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + }, + "EastBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "SouthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["WestBoundingCoordinate", "NorthBoundingCoordinate", "EastBoundingCoordinate", "SouthBoundingCoordinate"] + }, + "GPolygonType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Boundary": { + "$ref": "#/definitions/BoundaryType" + }, + "ExclusiveZone": { + "$ref": "#/definitions/ExclusiveZoneType" + } + }, + "required": ["Boundary"] + }, + "BoundaryType": { + "type": "object", + "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": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 4 + } + }, + "required": ["Points"] + }, + "ExclusiveZoneType": { + "type": "object", + "additionalProperties": false, + "description": "Contains the excluded boundaries from the GPolygon.", + "properties": { + "Boundaries": { + "type": "array", + "items": { + "$ref": "#/definitions/BoundaryType" + }, + "minItems": 1 + } + }, + "required": ["Boundaries"] + }, + "LineType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Points": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 2 + } + }, + "required": ["Points"] + }, + "VerticalSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "description": "Describes the type of the area of vertical space covered by the collection locality.", + "$ref": "#/definitions/VerticalSpatialDomainTypeEnum" + }, + "Value": { + "description": "Describes the extent of the area of vertical space covered by the collection. Must be accompanied by an Altitude Encoding Method description. The datatype for this attribute is the value of the attribute VerticalSpatialDomainType. The unit for this attribute is the value of either DepthDistanceUnits or AltitudeDistanceUnits.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["Type", "Value"] + }, + "VerticalSpatialDomainTypeEnum": { + "type": "string", + "enum": ["Atmosphere Layer", "Maximum Altitude", "Maximum Depth", "Minimum Altitude", "Minimum Depth"] + }, + "OrbitParametersType": { + "type": "object", + "additionalProperties": false, + "description": "Orbit parameters for the collection used by the Orbital Backtrack Algorithm.", + "properties": { + "SwathWidth": { + "description": "Width of the swath at the equator in Kilometers.", + "type": "number" + }, + "Period": { + "description": "Orbital period in decimal minutes.", + "type": "number" + }, + "InclinationAngle": { + "description": "Inclination of the orbit. This is the same as (180-declination) and also the same as the highest latitude achieved by the satellite. Data Unit: Degree.", + "type": "number" + }, + "NumberOfOrbits": { + "description": "Indicates the number of orbits.", + "type": "number" + }, + "StartCircularLatitude": { + "description": "The latitude start of the orbit relative to the equator. This is used by the backtrack search algorithm to treat the orbit as if it starts from the specified latitude. This is optional and will default to 0 if not specified.", + "type": "number" + } + }, + "required": ["SwathWidth", "Period", "InclinationAngle", "NumberOfOrbits"] + }, + "GranuleSpatialRepresentationEnum": { + "type": "string", + "enum": ["CARTESIAN", "GEODETIC", "ORBIT", "NO_SPATIAL"] + }, + "TilingIdentificationSystemType": { + "type": "object", + "additionalProperties": false, + "description": "Information about a two-dimensional tiling system related to this collection.", + "properties": { + "TilingIdentificationSystemName": { + "$ref": "#/definitions/TilingIdentificationSystemNameEnum" + }, + "Coordinate1": { + "$ref": "#/definitions/TilingCoordinateType" + }, + "Coordinate2": { + "$ref": "#/definitions/TilingCoordinateType" + } + }, + "required": ["TilingIdentificationSystemName", "Coordinate1", "Coordinate2"] + }, + "TilingCoordinateType": { + "type": "object", + "additionalProperties": false, + "description": "Defines the minimum and maximum value for one dimension of a two dimensional coordinate system.", + "properties": { + "MinimumValue": { + "type": "number" + }, + "MaximumValue": { + "type": "number" + } + } + }, + "TilingIdentificationSystemNameEnum": { + "type": "string", + "enum": ["CALIPSO", "MISR", "MODIS Tile EASE", "MODIS Tile SIN", "WELD Alaska Tile", "WELD CONUS Tile", "WRS-1", "WRS-2", "Military Grid Reference System"] + }, + "SpatialInformationType": { + "type": "object", + "additionalProperties": false, + "description": "This entity stores the reference frame or system from which horizontal and vertical spatial domains are measured. The horizontal reference frame includes a Geodetic Model, Geographic Coordinates, and Local Coordinates. The Vertical reference frame includes altitudes (elevations) and depths.", + "properties": { + "VerticalCoordinateSystem": { + "$ref": "#/definitions/VerticalCoordinateSystemType" + }, + "SpatialCoverageType": { + "description": "Denotes whether the spatial coverage of the collection is horizontal, vertical, horizontal and vertical, orbit, or vertical and orbit.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["SpatialCoverageType"] + }, + "VerticalCoordinateSystemType": { + "type": "object", + "additionalProperties": false, + "properties": { + "AltitudeSystemDefinition": { + "$ref": "#/definitions/AltitudeSystemDefinitionType" + }, + "DepthSystemDefinition": { + "$ref": "#/definitions/DepthSystemDefinitionType" + } + } + }, + "AltitudeDistanceUnitsEnum": { + "description": "The units in which altitude measurements are recorded.", + "type": "string", + "enum": ["HectoPascals", "Kilometers", "Millibars"] + }, + "DepthDistanceUnitsEnum": { + "description": "The units in which depth measurements are recorded.", + "type": "string", + "enum": ["Fathoms", "Feet", "HectoPascals", "Meters", "Millibars"] + }, + "AltitudeSystemDefinitionType": { + "type": "object", + "additionalProperties": false, + "description": "The reference frame or system from which altitude is measured. The term 'altitude' is used instead of the common term 'elevation' to conform to the terminology in Federal Information Processing Standards 70-1 and 173. The information contains the datum name, distance units and encoding method, which provide the definition for the system.", + "properties": { + "DatumName": { + "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DistanceUnits": { + "description": "The units in which measurements are recorded.", + "$ref": "#/definitions/AltitudeDistanceUnitsEnum" + }, + "Resolutions": { + "description": "The minimum distance possible between two adjacent values, expressed in distance units of measure for the collection.", + "type": "array", + "items": { + "type": "number" + }, + "minItems": 0 + } + } + }, + "DepthSystemDefinitionType": { + "type": "object", + "additionalProperties": false, + "description": "The reference frame or system from which depth is measured. The information contains the datum name, distance units and encoding method, which provide the definition for the system.", + "properties": { + "DatumName": { + "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DistanceUnits": { + "description": "The units in which measurements are recorded.", + "$ref": "#/definitions/DepthDistanceUnitsEnum" + }, + "Resolutions": { + "description": "The minimum distance possible between two adjacent values, expressed in distance units of measure for the collection.", + "type": "array", + "items": { + "type": "number" + }, + "minItems": 0 + } + } + }, + "ResolutionAndCoordinateSystemType": { + "description": "This class defines the horizontal spatial extents coordinate system and the data product's horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", + "type": "object", + "oneOf": [{ + "additionalProperties": false, + "properties": { + "Description": { + "description": "This element holds a description about the resolution and coordinate system for people to read.", + "$ref": "#/definitions/DescriptionType" + }, + "GeodeticModel": { + "description": "This element describes the geodetic model for the data product.", + "$ref": "#/definitions/GeodeticModelType" + } + }, + "required": ["GeodeticModel"] + }, { + "additionalProperties": false, + "properties": { + "Description": { + "description": "This element holds a description about the resolution and coordinate system for people to read.", + "$ref": "#/definitions/DescriptionType" + }, + "GeodeticModel": { + "description": "This element describes the geodetic model for the data product.", + "$ref": "#/definitions/GeodeticModelType" + }, + "HorizontalDataResolution": { + "description": "This class defines a number of the data products horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", + "$ref": "#/definitions/HorizontalDataResolutionType" + } + }, + "required": ["HorizontalDataResolution"] + }, { + "additionalProperties": false, + "properties": { + "Description": { + "description": "This element holds a description about the resolution and coordinate system for people to read.", + "$ref": "#/definitions/DescriptionType" + }, + "GeodeticModel": { + "description": "This element describes the geodetic model for the data product.", + "$ref": "#/definitions/GeodeticModelType" + }, + "LocalCoordinateSystem": { + "description": "This element describes the local coordinate system for the data product.", + "$ref": "#/definitions/LocalCoordinateSystemType" + } + }, + "required": ["LocalCoordinateSystem"] + }] + }, + "DescriptionType": { + "description": "This element defines what a description is.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "GeodeticModelType": { + "description": "This element describes the geodetic model for the data product.", + "type": "object", + "additionalProperties": false, + "properties": { + "HorizontalDatumName": { + "description": "The identification given to the reference system used for defining the coordinates of points.", + "$ref": "#/definitions/DatumNameType" + }, + "EllipsoidName": { + "description": "Identification given to established representation of the Earth's shape.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "SemiMajorAxis": { + "description": "Radius of the equatorial axis of the ellipsoid.", + "type": "number" + }, + "DenominatorOfFlatteningRatio": { + "description": "The ratio of the Earth's major axis to the difference between the major and the minor.", + "type": "number" + } + } + }, + "DatumNameType": { + "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "HorizontalDataResolutionType": { + "description": "This class defines a number of the data products horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", + "type": "object", + "additionalProperties": false, + "properties": { + "VariesResolution": { + "description": "Varies Resolution object describes a data product that has a number of resolution values.", + "$ref": "#/definitions/HorizontalDataResolutionVariesType" + }, + "PointResolution": { + "description": "Point Resolution object describes a data product that is from a point source.", + "$ref": "#/definitions/HorizontalDataResolutionPointType" + }, + "NonGriddedResolutions": { + "description": "Non Gridded Resolutions object describes resolution data for non gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionNonGriddedType" + }, + "minItems": 1 + }, + "NonGriddedRangeResolutions": { + "description": "Non Gridded Range Resolutions object describes range resolution data for non gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionNonGriddedRangeType" + }, + "minItems": 1 + }, + "GriddedResolutions": { + "description": "Gridded Resolutions object describes resolution data for gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionGriddedType" + }, + "minItems": 1 + }, + "GriddedRangeResolutions": { + "description": "Gridded Range Resolutions object describes range resolution data for gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionGriddedRangeType" + }, + "minItems": 1 + }, + "GenericResolutions": { + "description": "Generic Resolutions object describes general resolution data for a data product where it is not known if a data product is gridded or not.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataGenericResolutionType" + }, + "minItems": 1 + } + } + }, + "HorizontalDataResolutionVariesType": { + "description": "Varies Resolution object describes a data product that has a number of resolution values.", + "type": "string", + "enum": ["Varies"] + }, + "HorizontalDataResolutionPointType": { + "description": "Point Resolution object describes a data product that is from a point source.", + "type": "string", + "enum": ["Point"] + }, + "HorizontalDataResolutionNonGriddedType": { + "description": "Non Gridded Resolutions object describes resolution data for non gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "XDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "YDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + }, + "ViewingAngleType": { + "description": "This element describes the angle of the measurement with respect to the instrument that gives an understanding of the specified resolution.", + "$ref": "#/definitions/HorizontalResolutionViewingAngleType" + }, + "ScanDirection": { + "description": "This element describes the instrument scanning direction.", + "$ref": "#/definitions/HorizontalResolutionScanDirectionType" + } + }, + "anyOf": [{ + "required": ["XDimension", "Unit"] + }, { + "required": ["YDimension", "Unit"] + }] + }, + "HorizontalDataResolutionNonGriddedRangeType": { + "description": "Non Gridded Range Resolutions object describes range resolution data for non gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinimumXDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MinimumYDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "MaximumXDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MaximumYDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + }, + "ViewingAngleType": { + "description": "This element describes the angle of the measurement with respect to the instrument that gives an understanding of the specified resolution.", + "$ref": "#/definitions/HorizontalResolutionViewingAngleType" + }, + "ScanDirection": { + "description": "This element describes the instrument scanning direction.", + "$ref": "#/definitions/HorizontalResolutionScanDirectionType" + } + }, + "anyOf": [{ + "required": ["MinimumXDimension", "MaximumXDimension", "Unit"] + }, { + "required": ["MinimumYDimension", "MaximumYDimension", "Unit"] + }] + }, + "HorizontalDataResolutionGriddedType": { + "description": "Gridded Resolutions object describes resolution data for gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "XDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "YDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + } + }, + "anyOf": [{ + "required": ["XDimension", "Unit"] + }, { + "required": ["YDimension", "Unit"] + }] + }, + "HorizontalDataResolutionGriddedRangeType": { + "description": "Gridded Range Resolutions object describes range resolution data for gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinimumXDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MinimumYDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "MaximumXDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MaximumYDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + } + }, + "anyOf": [{ + "required": ["MinimumXDimension", "MaximumXDimension", "Unit"] + }, { + "required": ["MinimumYDimension", "MaximumYDimension", "Unit"] + }] + }, + "HorizontalDataGenericResolutionType": { + "description": "Generic Resolutions object describes general resolution data for a data product where it is not known if a data product is gridded or not.", + "type": "object", + "additionalProperties": false, + "properties": { + "XDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "YDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + } + }, + "anyOf": [{ + "required": ["XDimension", "Unit"] + }, { + "required": ["YDimension", "Unit"] + }] + }, + "HorizontalDataResolutionUnitEnum": { + "description": "Units of measure used for the geodetic latitude and longitude resolution values (e.g., decimal degrees).", + "type": "string", + "enum": ["Decimal Degrees", "Kilometers", "Meters", "Statute Miles", "Nautical Miles", "Not provided"] + }, + "HorizontalResolutionViewingAngleType": { + "description": "This element describes the angle of the measurement with respect to the instrument that give an understanding of the specified resolution.", + "type": "string", + "enum": ["At Nadir", "Scan Extremes"] + }, + "HorizontalResolutionScanDirectionType": { + "description": "This element describes the instrument scanning direction.", + "type": "string", + "enum": ["Along Track", "Cross Track"] + }, + "LocalCoordinateSystemType": { + "type": "object", + "additionalProperties": false, + "properties": { + "GeoReferenceInformation": { + "description": "The information provided to register the local system to the Earth (e.g. control points, satellite ephemeral data, and inertial navigation data).", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Description": { + "description": "A description of the Local Coordinate System and geo-reference information.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + } + }, + "CollectionDataTypeEnum": { + "description": "This element is used to identify the collection as a Science Quality Collection or as a non-science-quality collection such as a Near Real Time collection. If a collection does not contain this field, it will be assumed to be of science-quality.", + "type": "string", + "enum": ["SCIENCE_QUALITY", "NEAR_REAL_TIME", "OTHER"] + }, + "CollectionProgressEnum": { + "description": "This element describes the production status of the data set. There are five choices for Data Providers: PLANNED refers to data sets to be collected in the future and are thus unavailable at the present time. For Example: The Hydro spacecraft has not been launched, but information on planned data sets may be available. ACTIVE refers to data sets currently in production or data that is continuously being collected or updated. For Example: data from the AIRS instrument on Aqua is being collected continuously. COMPLETE refers to data sets in which no updates or further data collection will be made. For Example: Nimbus-7 SMMR data collection has been completed. DEPRECATED refers to data sets that have been retired, but still can be retrieved. Usually newer products exist that replace the retired data set. NOT APPLICABLE refers to data sets in which a collection progress is not applicable such as a calibration collection. There is a sixth value of NOT PROVIDED that should not be used by a data provider. It is currently being used as a value when a correct translation cannot be done with the current valid values, or when the value is not provided by the data provider.", + "type": "string", + "enum": ["ACTIVE", "PLANNED", "COMPLETE", "DEPRECATED", "NOT APPLICABLE", "NOT PROVIDED"] + }, + "LocationKeywordType": { + "description": "This element defines a hierarchical location list. It replaces SpatialKeywords. The controlled vocabulary for location keywords is maintained in the Keyword Management System (KMS). Each tier must have data in the tier above it.", + "type": "object", + "additionalProperties": false, + "properties": { + "Category":{ + "description": "Top-level controlled keyword hierarchical level that contains the largest general location where the collection data was taken from.", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Type":{ + "description": "Second-tier controlled keyword hierarchical level that contains the regional location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Subregion1":{ + "description": "Third-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Subregion2":{ + "description": "Fourth-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Subregion3":{ + "description": "Fifth-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "DetailedLocation":{ + "description": "Uncontrolled keyword hierarchical level that contains the specific location where the collection data was taken from. Exists outside the hierarchy.", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + } + }, + "required": ["Category"] + }, + "ArchiveDistributionFormatTypeEnum": { + "description": "Defines the possible values for the Archive or Distribution file format type.", + "type": "string", + "enum": ["Native", "Supported"] + }, + "ArchiveDistributionFormatDescriptionType": { + "description": "Allows a data provider to provide supporting information about the stated format.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ArchiveDistributionUnitEnum": { + "description": "Defines the possible values for the archive and distribution size units.", + "type": "string", + "enum": ["KB", "MB", "GB", "TB", "PB", "NA"] + }, + "DistributionMediaType": { + "description": "This element defines the media by which the end user can obtain the distributable item. Examples of media include: CD-ROM, 9 track tape, diskettes, hard drives, online, transparencies, hardcopy, etc.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FileArchiveInformationType": { + "description": "This element defines a single archive artifact which a data provider would like to inform an end user that it exists.", + "anyOf": [{ + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for an archival artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml. The controlled vocabulary for formats is maintained in the Keyword Management System (KMS).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the archivable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "AverageFileSize": { + "description": "An approximate average size of the archivable item. This gives an end user an idea of the magnitude for each archivable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSize": { + "description": "An approximate total size of all of the archivable items within a collection. This gives an end user an idea of the magnitude for all of archivable files combined.", + "type": "number" + }, + "TotalCollectionFileSizeUnit": { + "description": "Unit of measure for the total collection file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the archivable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSize": ["TotalCollectionFileSizeUnit"] + } + }, { + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for an archival artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml. The controlled vocabulary for formats is maintained in the Keyword Management System (KMS).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the archivable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "AverageFileSize": { + "description": "An approximate average size of the archivable item. This gives an end user an idea of the magnitude for each archivable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSizeBeginDate": { + "description": "The date of which this collection started to collect data. This date is used by users to be able to calculate the current total collection file size. The date needs to be in the yyyy-MM-ddTHH:mm:ssZ format; for example: 2018-01-01T10:00:00Z.", + "format": "date-time", + "type": "string" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the archivable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSizeBeginDate": ["AverageFileSize"] + } + }] + }, + "FileDistributionInformationType": { + "description": "This element defines a single artifact that is distributed by the data provider. This element only includes the distributable artifacts that can be obtained by the user without the user having to invoke a service. These should be documented in the UMM-S specification.", + "anyOf": [{ + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for a distributable artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "Media": { + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/DistributionMediaType" + }, + "minItems": 1 + }, + "AverageFileSize": { + "description": "An approximate average size of the distributable item. This gives an end user an idea of the magnitude for each distributable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSize": { + "description": "An approximate total size of all of the distributable items within a collection. This gives an end user an idea of the magnitude for all of distributable files combined.", + "type": "number" + }, + "TotalCollectionFileSizeUnit": { + "description": "Unit of measure for the total collection file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Fees": { + "description": "Conveys the price one has to pay to obtain the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSize": ["TotalCollectionFileSizeUnit"] + } + }, { + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for a distributable artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "Media": { + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/DistributionMediaType" + }, + "minItems": 1 + }, + "AverageFileSize": { + "description": "An approximate average size of the distributable item. This gives an end user an idea of the magnitude for each distributable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSizeBeginDate": { + "description": "The date of which this collection started to collect data. This date is used by users to be able to calculate the current total collection file size. The date needs to be in the yyyy-MM-ddTHH:mm:ssZ format; for example: 2018-01-01T10:00:00Z.", + "format": "date-time", + "type": "string" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Fees": { + "description": "Conveys the price one has to pay to obtain the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSizeBeginDate": ["AverageFileSize"] + } + }] + }, + "ArchiveAndDistributionInformationType": { + "type": "object", + "additionalProperties": false, + "description": "This element and all of its sub elements exist for display purposes. It allows a data provider to provide archive and distribution information up front to an end user, to help them decide if they can use the product.", + "properties": { + "FileArchiveInformation": { + "description": "This element defines a single archive artifact which a data provider would like to inform an end user that it exists.", + "type": "array", + "items": { + "$ref": "#/definitions/FileArchiveInformationType" + }, + "minItems": 1 + }, + "FileDistributionInformation": { + "description": "This element defines a single artifact that is distributed by the data provider. This element only includes the distributable artifacts that can be obtained by the user without the user having to invoke a service. These should be documented in the UMM-S specification.", + "type": "array", + "items": { + "$ref": "#/definitions/FileDistributionInformationType" + }, + "minItems": 1 + } + }, + "anyOf": [{ + "required": ["FileArchiveInformation"] + }, { + "required": ["FileDistributionInformation"] + }] + }, + "DirectDistributionInformationType": { + "type": "object", + "additionalProperties": false, + "description": "This element allows end users to get direct access to data products that are stored in the Amazon Web Service (AWS) S3 buckets. The sub elements include S3 credentials end point and a documentation URL as well as bucket prefix names and an AWS region.", + "properties": { + "Region": { + "description": "Defines the possible values for the Amazon Web Service US Regions where the data product resides.", + "$ref": "#/definitions/DirectDistributionInformationRegionEnum" + }, + "S3BucketAndObjectPrefixNames": { + "description": "Defines the possible values for the Amazon Web Service US S3 bucket and/or object prefix names.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "[!-~]{1,1024}" + }, + "minItems": 1 + }, + "S3CredentialsAPIEndpoint": { + "description": "Defines the URL where the credentials are stored.", + "type": "string", + "format": "uri", + "minLength": 1, + "maxLength": 1024 + }, + "S3CredentialsAPIDocumentationURL": { + "description": "Defines the URL where the credential documentation are stored.", + "type": "string", + "format": "uri", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Region", "S3CredentialsAPIEndpoint", "S3CredentialsAPIDocumentationURL"] + }, + "DirectDistributionInformationRegionEnum": { + "description": "Defines the possible values for the Amazon Web Service US Regions where the data product resides.", + "type": "string", + "enum": ["us-east-1", "us-east-2", "us-west-1", "us-west-2"] + }, + "AssociatedDoiType": { + "type": "object", + "additionalProperties": false, + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections using CollectionDOI property.", + "properties": { + "DOI": { + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Title": { + "description": "The title of the DOI landing page. The title describes the DOI object to a user, so they don't have to look it up themselves to understand the association.", + "$ref": "umm-cmn-json-schema.json#/definitions/TitleType" + }, + "Authority": { + "description": "The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", + "$ref": "umm-cmn-json-schema.json#/definitions/AuthorityType" + } + }, + "required": ["DOI"] + } + } +} diff --git a/tests/fixtures/test_cmr_metadata.umm-json b/tests/fixtures/test_cmr_metadata.umm-json new file mode 100644 index 00000000..2f5fe8bc --- /dev/null +++ b/tests/fixtures/test_cmr_metadata.umm-json @@ -0,0 +1,457 @@ +{ + "CollectionCitations": [ + { + "Creator": "Kamel Didan", + "OnlineResource": { + "Linkage": "https://doi.org/10.5067/MODIS/MOD13Q1.061", + "Name": "DOI Landing Page" + }, + "OtherCitationDetails": "The DOI landing page provides citations in APA and Chicago styles.", + "Publisher": "NASA EOSDIS Land Processes DAAC", + "ReleaseDate": "2021-02-16", + "SeriesName": "MOD13Q1.061", + "Title": "MODIS/Terra Vegetation Indices 16-Day L3 Global 250m SIN Grid V061" + } + ], + "LocationKeywords": [ + { + "Category": "GEOGRAPHIC REGION", + "Type": "GLOBAL" + } + ], + "MetadataDates": [ + { + "Type": "CREATE", + "Date": "ddsfsf" + }, + { + "Type": "UPDATE", + "Date": "2021-09-15T15:54:00.000Z" + } + ], + "VersionDescription": "Collection Version 6.1 Processing and Reprocessing", + "ShortName": "MOD13Q1", + "Abstract": "The Terra Moderate Resolution Imaging Spectroradiometer (MODIS) Vegetation Indices (MOD13Q1) Version 6.1 data are generated every 16 days at 250 meter (m) spatial resolution as a Level 3 product. The MOD13Q1 product provides two primary vegetation layers. The first is the Normalized Difference Vegetation Index (NDVI) which is referred to as the continuity index to the existing National Oceanic and Atmospheric Administration-Advanced Very High Resolution Radiometer (NOAA-AVHRR) derived NDVI. The second vegetation layer is the Enhanced Vegetation Index (EVI), which has improved sensitivity over high biomass regions. The algorithm chooses the best available pixel value from all the acquisitions from the 16 day period. The criteria used is low clouds, low view angle, and the highest NDVI/EVI value.\r\n\r\nAlong with the vegetation layers and the two quality layers, the HDF file will have MODIS reflectance bands 1 (red), 2 (near-infrared), 3 (blue), and 7 (mid-infrared), as well as four observation layers. \r\n\r\nValidation at stage 3 (https://modis-land.gsfc.nasa.gov/MODLAND_val.html) has been achieved for the MODIS Vegetation Index product suite. Further details regarding MODIS land product validation for the MOD13 data products are available from the MODIS Land Team Validation site (https://modis-land.gsfc.nasa.gov/ValStatus.php?ProductID=MOD13).\r\n\r\nImprovements/Changes from Previous Versions\r\n\r\n* The Version 6.1 Level-1B (L1B) products have been improved by undergoing various calibration changes that include: changes to the response-versus-scan angle (RVS) approach that affects reflectance bands for Aqua and Terra MODIS, corrections to adjust for the optical crosstalk in Terra MODIS infrared (IR) bands, and corrections to the Terra MODIS forward look-up table (LUT) update for the period 2012 - 2017.\r\n* A polarization correction has been applied to the L1B Reflective Solar Bands (RSB).", + "Purpose": "Science Research", + "TilingIdentificationSystems": [ + { + "Coordinate1": { + "MaximumValue": 35.0, + "MinimumValue": 0.0 + }, + "Coordinate2": { + "MaximumValue": 17.0, + "MinimumValue": 0.0 + }, + "TilingIdentificationSystemName": "MODIS Tile SIN" + } + ], + "DOI": { + "Authority": "https://doi.org", + "DOI": "10.5067/MODIS/MOD13Q1.061" + }, + "RelatedUrls": [ + { + "Description": "The LP DAAC product page provides information on Science Data Set layers and links for user guides, ATBDs, data access, tools, customer support, etc.", + "URLContentType": "CollectionURL", + "Type": "DATA SET LANDING PAGE", + "URL": "https://doi.org/10.5067/MODIS/MOD13Q1.061" + }, + { + "Description": "LP DAAC Data Pool provides direct access to available products via HTTPS.", + "URLContentType": "DistributionURL", + "Type": "GET DATA", + "Subtype": "DATA TREE", + "URL": "https://e4ftl01.cr.usgs.gov/MOLT/MOD13Q1.061/" + }, + { + "Description": "The LP DAAC website provides detailed information on discovery, distribution, access, and support of land data products.", + "URLContentType": "CollectionURL", + "Type": "PROJECT HOME PAGE", + "URL": "https://lpdaac.usgs.gov/" + }, + { + "Description": "Earthdata Search allows users to search, discover, visualize, refine, and access NASA Earth Observation data.", + "URLContentType": "DistributionURL", + "Type": "GET DATA", + "Subtype": "Earthdata Search", + "URL": "https://search.earthdata.nasa.gov/search?q=C1621383370-LPDAAC_ECS" + }, + { + "Description": "The technical information in the User's Guide enables users to interpret and use the data products.", + "URLContentType": "PublicationURL", + "Type": "VIEW RELATED INFORMATION", + "Subtype": "USER'S GUIDE", + "URL": "https://lpdaac.usgs.gov/documents/621/MOD13_User_Guide_V61.pdf" + }, + { + "Description": "The ATBD provides physical theory and mathematical procedures for the calculations used to produce the data products.", + "URLContentType": "PublicationURL", + "Type": "VIEW RELATED INFORMATION", + "Subtype": "ALGORITHM THEORETICAL BASIS DOCUMENT (ATBD)", + "URL": "https://lpdaac.usgs.gov/documents/104/MOD13_ATBD.pdf" + }, + { + "Description": "The File Specification provides a description of the product file including Scientific Data Sets and their attributes.", + "URLContentType": "PublicationURL", + "Type": "VIEW RELATED INFORMATION", + "Subtype": "GENERAL DOCUMENTATION", + "URL": "https://ladsweb.modaps.eosdis.nasa.gov/filespec/MODIS/61/MOD13Q1" + }, + { + "Description": "Browse image for Earthdata Search", + "URLContentType": "VisualizationURL", + "Type": "GET RELATED VISUALIZATION", + "URL": "https://e4ftl01.cr.usgs.gov//WORKING/BRWS/Browse.001/2020.03.13/BROWSE.MOD13Q1.A2002161.h12v03.061.2020071203133.1.jpg" + }, + { + "Description": "Validation at stage 3 has been achieved for the MODIS Vegetation Index product suite.", + "URLContentType": "PublicationURL", + "Type": "VIEW RELATED INFORMATION", + "Subtype": "SCIENCE DATA PRODUCT VALIDATION", + "URL": "https://modis-land.gsfc.nasa.gov/MODLAND_val.html" + }, + { + "Description": "Further details regarding MODIS land product validation for the MOD13 data products are available from the MODIS Land Team Validation site.", + "URLContentType": "PublicationURL", + "Type": "VIEW RELATED INFORMATION", + "Subtype": "SCIENCE DATA PRODUCT VALIDATION", + "URL": "https://modis-land.gsfc.nasa.gov/ValStatus.php?ProductID=MOD13" + }, + { + "Description": "Access data via Open-source Project for a Network Data Access Protocol", + "URLContentType": "DistributionURL", + "Type": "USE SERVICE API", + "Subtype": "OPENDAP DATA", + "URL": "https://opendap.cr.usgs.gov/opendap/hyrax/DP136/MOLT/MOD13Q1.061/contents.html" + } + ], + "DataDates": [ + { + "Date": "2010-10-13T07:39:40.140Z", + "Type": "CREATE" + }, + { + "Date": "2015-09-30T10:47:59.761Z", + "Type": "UPDATE" + } + ], + "AccessConstraints": { + "Description": "None" + }, + "SpatialExtent": { + "GranuleSpatialRepresentation": "GEODETIC", + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "EastBoundingCoordinate": 180.0, + "NorthBoundingCoordinate": 90.0, + "SouthBoundingCoordinate": -90.0, + "WestBoundingCoordinate": -180.0 + } + ], + "CoordinateSystem": "CARTESIAN" + }, + "ResolutionAndCoordinateSystem": { + "HorizontalDataResolution": { + "GriddedResolutions": [ + { + "Unit": "Meters", + "XDimension": 250.0, + "YDimension": 250.0 + } + ] + } + }, + "ZoneIdentifier": "MODIS Sinusoidal Tiling System" + }, + "SpatialCoverageType": "HORIZONTAL" + }, + "AdditionalAttributes": [ + { + "DataType": "INT", + "Description": "Horizontal tile number of a grid, which increases from left to right.", + "Name": "HORIZONTALTILENUMBER" + }, + { + "DataType": "INT", + "Description": "Percent of pixels with good quality", + "Name": "QAPERCENTGOODQUALITY" + }, + { + "DataType": "INT", + "Description": "Percent of pixels under cloud", + "Name": "QAPERCENTNOTPRODUCEDCLOUD" + }, + { + "DataType": "INT", + "Description": "Percent of pixels not produced due to some reason other than cloud", + "Name": "QAPERCENTNOTPRODUCEDOTHER" + }, + { + "DataType": "INT", + "Description": "Percent of pixels with not so good quality", + "Name": "QAPERCENTOTHERQUALITY" + }, + { + "DataType": "INT", + "Description": "Vertical tile number of a grid, which increases from top to bottom.", + "Name": "VERTICALTILENUMBER" + }, + { + "DataType": "STRING", + "Description": "Version of the process software that generated the product.", + "Name": "PROCESSVERSION" + }, + { + "DataType": "INT", + "Description": "MODIS Land tile identification number which represents a geographical area on the surface of the Earth bounded by latitude and longitude coordinates.", + "Name": "TileID" + }, + { + "DataType": "STRING", + "Description": "Resolution of input products", + "Name": "INPUTPRODUCTRESOLUTION" + }, + { + "DataType": "INT", + "Description": "Percentage of pixels with best quality in the 16-day 250m NDVI", + "Name": "NDVI250M16DAYQCLASSPERCENTAGE" + }, + { + "DataType": "INT", + "Description": "Percentage of pixels with best quality in the 16-day 250m EVI", + "Name": "EVI250M16DAYQCLASSPERCENTAGE" + }, + { + "DataType": "STRING", + "Description": "Digital object identifier that uniquely identifies this data product", + "Name": "identifier_product_doi", + "Value": "10.5067/MODIS/MOD13Q1.061" + }, + { + "DataType": "STRING", + "Description": "URL of the digital object identifier resolving authority", + "Name": "identifier_product_doi_authority", + "Value": "https://doi.org" + } + ], + "ArchiveAndDistributionInformation": { + "FileDistributionInformation": [ + { + "Format": "HDF-EOS2", + "FormatType": "Native", + "FormatDescription": "Hierarchical Data Format - Earth Observing System Version 2", + "Media": [ + "HTTP" + ], + "AverageFileSize": 93.0, + "AverageFileSizeUnit": "MB", + "TotalCollectionFileSizeBeginDate": "2000-02-18T00:00:00.000Z" + } + ] + }, + "ScienceKeywords": [ + { + "Category": "EARTH SCIENCE", + "Term": "VEGETATION", + "Topic": "BIOSPHERE", + "VariableLevel1": "VEGETATION INDEX" + } + ], + "EntryTitle": "MODIS/Terra Vegetation Indices 16-Day L3 Global 250m SIN Grid V061", + "CollectionProgress": "ACTIVE", + "UseConstraints": { + "LicenseURL": { + "Description": "License URL for data use policy", + "Linkage": "https://earthdata.nasa.gov/earth-observation-data/data-use-policy", + "MimeType": "text/html", + "Name": "Data Use Policy" + } + }, + "ProcessingLevel": { + "Id": "3", + "ProcessingLevelDescription": "Sensor Measurements" + }, + "Platforms": [ + { + "Characteristics": [ + { + "DataType": "STRING", + "Description": "Local time of the equator crossing and direction (ascending or descending)", + "Name": "EquatorCrossingTime", + "Unit": "Local Mean Time", + "Value": "10:30, descending" + } + ], + "Instruments": [ + { + "ComposedOf": [ + { + "LongName": "Moderate-Resolution Imaging Spectroradiometer", + "ShortName": "MODIS", + "Technique": "Radiometry" + } + ], + "LongName": "Moderate-Resolution Imaging Spectroradiometer", + "ShortName": "MODIS", + "Technique": "Imaging Spectroradiometry" + } + ], + "LongName": "Earth Observing System, Terra (AM-1)", + "ShortName": "Terra", + "Type": "Earth Observation Satellites" + } + ], + "Projects": [ + { + "Campaigns": [ + "Terra" + ], + "LongName": "Earth Observing System (EOS), Terra", + "ShortName": "Terra" + } + ], + "Version": "061", + "TemporalExtents": [ + { + "EndsAtPresentFlag": true, + "PrecisionOfSeconds": 4, + "RangeDateTimes": [ + { + "BeginningDateTime": "2000-02-18T00:00:00.000Z" + } + ] + } + ], + "DataCenters": [ + { + "ContactGroups": [ + { + "ContactInformation": { + "Addresses": [ + { + "City": "Sioux Falls", + "Country": "United States", + "PostalCode": "57198", + "StateProvince": "South Dakota", + "StreetAddresses": [ + "U.S. Geological Survey, Earth Resources Observation and Science (EROS) Center" + ] + } + ], + "ContactInstruction": "LP DAAC User Services is the point of contact for answering questions concerning data products, data access, and online applications.", + "ContactMechanisms": [ + { + "Type": "Telephone", + "Value": "605-594-6116" + }, + { + "Type": "U.S. toll free", + "Value": "866-573-3222" + }, + { + "Type": "Email", + "Value": "lpdaac@usgs.gov" + } + ], + "RelatedUrls": [ + { + "Description": "The LP DAAC website provides detailed information on discovery, distribution, access, and support of land data products.", + "Type": "HOME PAGE", + "URL": "https://lpdaac.usgs.gov/", + "URLContentType": "DataContactURL" + } + ], + "ServiceHours": "M-F, 8 a.m. to 4 p.m. Central Time" + }, + "GroupName": "LP DAAC User Services", + "Roles": [ + "User Services" + ] + } + ], + "ContactInformation": { + "Addresses": [ + { + "City": "Sioux Falls", + "Country": "United States", + "PostalCode": "57198", + "StateProvince": "South Dakota", + "StreetAddresses": [ + "U.S. Geological Survey, Earth Resources Observation and Science (EROS) Center" + ] + } + ], + "ContactInstruction": "LP DAAC User Services is the point of contact for answering questions concerning data products, data access, and online applications.", + "ContactMechanisms": [ + { + "Type": "Telephone", + "Value": "605-594-6116" + }, + { + "Type": "U.S. toll free", + "Value": "866-573-3222" + }, + { + "Type": "Email", + "Value": "lpdaac@usgs.gov" + } + ], + "RelatedUrls": [ + { + "Description": "The LP DAAC website provides detailed information on discovery, distribution, access, and support of land data products.", + "Type": "HOME PAGE", + "URL": "https://lpdaac.usgs.gov/", + "URLContentType": "DataCenterURL" + } + ], + "ServiceHours": "M-F, 8 a.m. to 4 p.m. Central Time" + }, + "LongName": "Land Processes Distributed Active Archive Center", + "Roles": [ + "ARCHIVER" + ], + "ShortName": "LP DAAC" + }, + { + "ContactInformation": { + "Addresses": [ + { + "City": "GREENBELT", + "Country": "United States", + "PostalCode": "20771", + "StateProvince": "Maryland", + "StreetAddresses": [ + "NASA/GSFC Code 922" + ] + } + ], + "ContactInstruction": "Contact for data content concerns", + "ContactMechanisms": [ + { + "Type": "Telephone", + "Value": "301-614-5515" + }, + { + "Type": "Email", + "Value": "Edward.J.Masuoka@nasa.gov" + } + ], + "RelatedUrls": [ + { + "Type": "HOME PAGE", + "URL": "https://modaps.modaps.eosdis.nasa.gov/", + "URLContentType": "DataCenterURL" + } + ] + }, + "LongName": "MODIS Adaptive Processing System, Terrestrial Information Systems Laboratory, Earth Sciences Division, Science and Exploration Directorate, Goddard Space Flight Center, NASA", + "Roles": [ + "PROCESSOR" + ], + "ShortName": "NASA/GSFC/SED/ESD/TISL/MODAPS" + } + ] +} From 20618a02c17f79a1cb3d623284251695ba921a9f Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 18 Oct 2021 12:19:45 -0500 Subject: [PATCH 008/261] adding rules to rule_mapping --- pyQuARC/schemas/check_messages.json | 74 +- pyQuARC/schemas/checks.json | 2 +- .../{dif10_xml.xsd => dif10_schema.xsd} | 0 .../{echo10_xml.xsd => echo10_schema.xsd} | 0 pyQuARC/schemas/rule_mapping.json | 1110 ++++++++++++++++- 5 files changed, 1112 insertions(+), 74 deletions(-) rename pyQuARC/schemas/{dif10_xml.xsd => dif10_schema.xsd} (100%) rename pyQuARC/schemas/{echo10_xml.xsd => echo10_schema.xsd} (100%) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 3cd8950b..983f0311 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -24,12 +24,12 @@ "remediation": "Update the RevisionDate so that it comes chronologically after the InsertTime." }, "url_check": { - "failure": "Incorrect/subpar URL/s: `{}`.", + "failure": "Invalid URL/s: `{}`.", "help": { "message": "", "url": "" }, - "remediation": "Please provide valid/correct URL/s." + "remediation": "Please provide valid URL/s." }, "shortname_uniqueness": { "failure": "The DataSetId `{}` is identical to the ShortName `{}`.", @@ -285,7 +285,7 @@ "message": "", "url": "" }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this data format added to the GCMD platform KMS." + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this data format added to the Granule Data Format GCMD List." }, "platform_long_name_gcmd_check": { "failure": "The provided platform long name `{}` does not comply with the GCMD.", @@ -368,36 +368,36 @@ "remediation": "Please provide a value for the provided characteristic. " }, "characteristic_name_length_check": { - "failure": "The characteristic name has invalid length.", + "failure": "The provided description is greater than 80 characters.", "help": { "message": "", "url": "" }, - "remediation": "Please provide a name that is a string between 1 and 80 characters." + "remediation": "Provide a string between 1 and 80 characters." }, "characteristic_desc_length_check": { - "failure": "A characteristic description has invalid length. ", + "failure": "The description has more characters than the maximum number allowed.", "help": { "message": "", "url": "" }, - "remediation": "Please provide a short description that is a string between 1 and 2048 characters" + "remediation": "Please shorten the description to be less than 2048 characters." }, "characteristic_unit_length_check": { - "failure": "A characteristic unit has invalid length.", + "failure": "The unit has more characters than the maximum number allowed.", "help": { "message": "", "url": "" }, - "remediation": "Please provide a unit that is a string between 1 and 80 characters." + "remediation": "Please modify the unit to be less than 80 characters." }, "characteristic_value_length_check": { - "failure": "A characteristic value has invalid length. ", + "failure": "The value has more characters than the maximum number allowed.", "help": { "message": "", "url": "" }, - "remediation": "Please provide a value that is a string between 1 and 80 characters." + "remediation": "Please modify the value to be less than 80 characters." }, "mime_type_check": { "failure": "MimeType isn't valid.", @@ -664,7 +664,7 @@ "remediation": "Consider updating the review date to a future date or remove it from the metadata if it is no longer valid." }, "iso_topic_category_check": { - "failure": "Invalid ISO Topic Category `{}`.", + "failure": "Invalid ISO Topic Category.", "help": { "message": "", "url": "" @@ -774,5 +774,53 @@ "url": "" }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "data_center_short_name_gcmd_check": { + "failure": "The provided data center short name `{}` does not comply with the GCMD. ", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this provider added to the GCMD Providers KMS." + }, + "characteristic_data_type": { + "failure": "A data type name is missing for the provided characteristic. ", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a data type for the provided characteristic." + }, + "platform_type_presence_check": { + "failure": "A platform type is not provided.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend adding a platform type for the corresponding platform." + }, + "horizontal_data_resolution_unit_check": { + "failure": "The Horizontal Data Resolution Unit provided `{}` is invalid.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a Horizontal Data Resolution Unit from the following list: ['Decimal Degrees', 'Kilometers', 'Meters', 'Statute Miles', 'Nautical Miles', 'Not provided']" + }, + "dif_instrument_short_long_name_consistency_check": { + "failure": "The provided instrument short name `{}` and long name `{}` aren't consistent.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please supply the corresponding long name for the short name." + }, + "dif_campaign_short_long_name_consistency_check": { + "failure": "The provided campaign short name `{}` and long name `{}` aren't consistent.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please supply the corresponding long name for the short name." } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 8843543c..14e6a553 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -239,4 +239,4 @@ "check_function": "get_data_url_check", "available": true } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/dif10_xml.xsd b/pyQuARC/schemas/dif10_schema.xsd similarity index 100% rename from pyQuARC/schemas/dif10_xml.xsd rename to pyQuARC/schemas/dif10_schema.xsd diff --git a/pyQuARC/schemas/echo10_xml.xsd b/pyQuARC/schemas/echo10_schema.xsd similarity index 100% rename from pyQuARC/schemas/echo10_xml.xsd rename to pyQuARC/schemas/echo10_schema.xsd diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e10cf457..3a287ff8 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -69,6 +69,15 @@ ], "relation": "lte" } + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/RangeDateTime/BeginningDateTime", + "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + ], + "relation": "lte" + } ] }, "severity": "error", @@ -94,6 +103,15 @@ ], "relation": "neq" } + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/RangeDateTime/BeginningDateTime", + "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + ], + "relation": "neq" + } ] }, "severity": "warning", @@ -119,6 +137,15 @@ ], "relation": "lte" } + ], + "umm-json": [ + { + "fields": [ + "UMM/Project/StartDate", + "UMM/Project/EndDate" + ], + "relation": "lte" + } ] }, "severity": "error", @@ -144,6 +171,15 @@ ], "relation": "neq" } + ], + "umm-json": [ + { + "fields": [ + "UMM/Project/StartDate", + "UMM/Project/EndDate" + ], + "relation": "neq" + } ] }, "severity": "warning", @@ -176,6 +212,22 @@ ], "relation": "lt" } + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/PeriodicDateTime/StartDate", + "UMM/TemporalExtent/PeriodicDateTime/EndDate" + ], + "relation": "lt" + }, + { + "fields": [ + "UMM/PaleoTemporalCoverage/PaleoStartDate", + "UMM/PaleoTemporalCoverage/PaleoEndDate" + ], + "relation": "lt" + } ] }, "severity": "error", @@ -316,12 +368,10 @@ "fields": [ "DIF/Temporal_Coverage/Paleo_DateTime/Paleo_Start_Date" ] - } - ], - "umm-json": [ + }, { "fields": [ - "CollectionCitations/ReleaseDate" + "DIF/Dataset_Citation/Dataset_Release_Date" ] } ] @@ -359,10 +409,30 @@ } ], "dif10": [ + { + "fields": [ + "DIF/Extended_Metadata/Metadata/Value" + ] + }, + { + "fields": [ + "DIF/Dataset_Citation/Online_Resource" + ] + }, { "fields": [ "DIF/Summary/Abstract" ] + }, + { + "fields": [ + "DIF/Organization/Organization_URL" + ] + }, + { + "fields": [ + "DIF/Related_URL/URL" + ] } ] }, @@ -389,6 +459,15 @@ ], "relation": "neq" } + ], + "umm-json": [ + { + "fields": [ + "UMM/EntryTitle", + "UMM/ShortName" + ], + "relation": "neq" + } ] }, "severity": "error", @@ -410,6 +489,13 @@ "DIF/Summary/Abstract" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/Abstract" + ] + } ] }, "data": [ @@ -445,6 +531,18 @@ "DIF/Associated_DOIs/DOI" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/DOI/DOI" + ] + }, + { + "fields": [ + "UMM/PublicationReferences/DOI/DOI" + ] + } ] }, "severity": "error", @@ -466,6 +564,13 @@ "DIF/Additional_Attributes/Value" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/AdditionalAttribute/Value" + ] + } ] }, "data": [ @@ -475,7 +580,8 @@ "https://dx.doi.org" ] ], - "severity": "info" + "severity": "info", + "check_id": "doi_link_update" }, "processing_level_id_check": { "rule_name": "EOSDIS Standard Processing Level ID Check", @@ -493,6 +599,13 @@ "DIF/ProductLevelId" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/ProcessingLevel/Id" + ] + } ] }, "data": [ @@ -522,9 +635,34 @@ "Collection/ScienceKeywords/ScienceKeyword/VariableLevel1Keyword/VariableLevel2Keyword/VariableLevel3Keyword/Value" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Science_Keywords/Category", + "DIF/Science_Keywords/Topic", + "DIF/Science_Keywords/Term", + "DIF/Science_Keywords/Variable_Level_1", + "DIF/Science_Keywords/Variable_Level_2", + "DIF/Science_Keywords/Variable_Level_3" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/ScienceKeywords/Category", + "UMM/ScienceKeywords/Topic", + "UMM/ScienceKeywords/Term", + "UMM/ScienceKeywords/VariableLevel1", + "UMM/ScienceKeywords/VariableLevel2", + "UMM/ScienceKeywords/VariableLevel3" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "science_keywords_gcmd_check" }, "eosdis_doi_authority_check": { "rule_name": "EOSDIS DOI Authority Check", @@ -547,6 +685,13 @@ "DIF/Associated_DOIs/Authority" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/DOI/Authority" + ] + } ] }, "data": [ @@ -597,14 +742,21 @@ "Collection/DOI/MissingReason" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/DOI/MissingReason" + ] + } ] }, + "severity": "error", "data": [ [ "Not Applicable" ] ], - "severity": "error", "check_id": "controlled_keywords_check" }, "processing_level_description_length_check": { @@ -616,6 +768,13 @@ "Collection/ProcessingLevelDescription" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/ProcessingLevel/Description" + ] + } ] }, "data": [ @@ -668,9 +827,19 @@ "DIF/Dataset_Progress" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/EndsAtPresentFlag", + "UMM/TemporalExtent/RangeDateTime/EndingDateTime", + "UMM/CollectionProgress" + ] + } ] }, - "severity": "warning" + "severity": "warning", + "check_id": "ends_at_present_flag_logic_check" }, "ends_at_present_flag_presence_check": { "rule_name": "Ends at present flag presence check", @@ -692,9 +861,19 @@ "DIF/Dataset_Progress" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/EndsAtPresentFlag", + "UMM/TemporalExtent/RangeDateTime/EndingDateTime", + "UMM/CollectionProgress" + ] + } ] }, - "severity": "warning" + "severity": "warning", + "check_id": "ends_at_present_flag_presence_check" }, "contact_mechanism_enum_check": { "rule_name": "Contact Mechanism Enumeration Check", @@ -705,6 +884,33 @@ "Collection/Contacts/Contact/OrganizationPhones/Phone/Type" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/ContactPersons/ContactInformation/ContactMechanisms/Type" + ] + }, + { + "fields": [ + "UMM/ContactGroups/ContactInformation/ContactMechanisms/Type" + ] + }, + { + "fields": [ + "UMM/DataCenters/ContactInformation/ContactMechanism/Type" + ] + }, + { + "fields": [ + "UMM/DataCenters/ContactGroups/ContactInformation/ContactMechanisms/Type" + ] + }, + { + "fields": [ + "UMM/DataCenters/ContactPerson/ContactInformation/ContactMechanism/Type" + ] + } ] }, "data": [ @@ -735,6 +941,13 @@ "Collection/Contacts/Contact/ContactPersons/ContactPerson/JobPosition" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/ContactPerson/Roles" + ] + } ] }, "data": [ @@ -760,6 +973,20 @@ "Collection/Contacts/Contact/Role" ] } + ], + "dif10": [ + { + "fields": [ + "/DIF/Organization/Organization_Type" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/DataCenters/Roles" + ] + } ] }, "data": [ @@ -797,6 +1024,23 @@ "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/DataType" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/DataType" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/DataType" + ] + }, + { + "fields": [ + "DIF/Platform/Characteristics/DataType" + ] + } ] }, "data": [ @@ -820,11 +1064,23 @@ "rule_name": "Characteristic Name Check", "fields_to_apply": { "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/Name", + "Collection/Platforms/Platform/Characteristics/Characteristic" + ] + }, { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Name", "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Name", + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic" + ] } ], "dif10": [ @@ -833,6 +1089,38 @@ "DIF/Platform/Characteristics/Name", "DIF/Platform/Characteristics" ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/Name", + "DIF/Platform/Instrument/Characteristics" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/Name", + "DIF/Platform/Instrument/Sensor/Characteristics" + ] + } + ], + "umm": [ + { + "fields": [ + "UMM/Platform/Characteristics/Name", + "UMM/Platform/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/Characteristics/Name", + "UMM/Platform/Instrument/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/Characteristics/Name", + "UMM/Platform/Instrument/ComposedOf/Characteristics" + ] } ] }, @@ -843,11 +1131,23 @@ "rule_name": "Characteristic Description Check", "fields_to_apply": { "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/Description", + "Collection/Platforms/Platform/Characteristics/Characteristic" + ] + }, { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Description", "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Description", + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic" + ] } ], "dif10": [ @@ -856,31 +1156,107 @@ "DIF/Platform/Characteristics/Description", "DIF/Platform/Characteristics" ] - } - ] - }, - "severity": "error", - "check_id": "availability_check" - }, - "characteristic_unit_check": { - "rule_name": "Characteristic Unit Check", - "fields_to_apply": { - "echo10": [ + }, { "fields": [ - "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Unit", - "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" + "DIF/Platform/Instrument/Characteristics/Description", + "DIF/Platform/Instrument/Characteristics" ] - } - ], - "dif10": [ + }, { "fields": [ - "DIF/Platform/Characteristics/Unit", - "DIF/Platform/Characteristics" + "DIF/Platform/Instrument/Sensor/Characteristics/Description", + "DIF/Platform/Instrument/Sensor/Characteristics" ] } - ] + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/Characteristics/Description", + "UMM/Platform/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/Characteristics/Description", + "UMM/Platform/Instrument/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/Characteristics/Description", + "UMM/Platform/Instrument/ComposedOf/Characteristics" + ] + } + ] + }, + "severity": "error", + "check_id": "availability_check" + }, + "characteristic_unit_check": { + "rule_name": "Characteristic Unit Check", + "fields_to_apply": { + "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/Unit", + "Collection/Platforms/Platform/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Unit", + "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Unit", + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic" + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Characteristics/Unit", + "DIF/Platform/Characteristics" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/Unit", + "DIF/Platform/Instrument/Sensor/Characteristics" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/Unit", + "DIF/Platform/Instrument/Characteristics" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/Characteristics/Unit", + "UMM/Platform/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/Characteristics/Unit", + "UMM/Platform/Instrument/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/Characteristics/Unit", + "UMM/Platform/Instrument/ComposedOf/Characteristics" + ] + } + ] }, "severity": "error", "check_id": "availability_check" @@ -889,11 +1265,23 @@ "rule_name": "Characteristic Value Check", "fields_to_apply": { "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/Value", + "Collection/Platforms/Platform/Characteristics/Characteristic" + ] + }, { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Value", "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Value", + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic" + ] } ], "dif10": [ @@ -902,6 +1290,38 @@ "DIF/Platform/Characteristics/Value", "DIF/Platform/Characteristics" ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/Value", + "DIF/Platform/Instrument/Sensor/Characteristics" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/Value", + "DIF/Platform/Instrument/Characteristics" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/Characteristics/Value", + "UMM/Platform/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/Characteristics/Value", + "UMM/Platform/Instrument/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/Characteristics/Value", + "UMM/Platform/Instrument/ComposedOf/Characteristics" + ] } ] }, @@ -909,13 +1329,23 @@ "check_id": "availability_check" }, "characteristic_name_length_check": { - "rule_name": "Characteristic Name Length Check", + "rule_name": "Characteristic Name Check", "fields_to_apply": { "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/Name" + ] + }, { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Name" ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Name" + ] } ], "dif10": [ @@ -923,31 +1353,60 @@ "fields": [ "DIF/Platform/Characteristics/Name" ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/Name" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/Name" + ] } ] }, - - "data": [ - 80, - "lte" - ], - "severity": "error", + "data": [ + 80, + "lte" + ], + "severity": "info", "check_id": "length_check" }, "characteristic_desc_length_check": { "rule_name": "Characteristic Description Length Check", "fields_to_apply": { "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/Description" + ] + }, { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Description" ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Description" + ] } ], "dif10": [ { "fields": [ - "DIF/Platform/Characteristics/Description" + "DIF/Platform/Instrument/Characteristics/Description" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/Description" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/Description" ] } ] @@ -956,17 +1415,27 @@ 2048, "lte" ], - "severity": "error", + "severity": "info", "check_id": "length_check" }, "characteristic_unit_length_check": { - "rule_name": "Characteristic Unit Length Check", + "rule_name": "Characteristic Unit Check", "fields_to_apply": { "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/Unit" + ] + }, { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Unit" ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Unit" + ] } ], "dif10": [ @@ -974,6 +1443,16 @@ "fields": [ "DIF/Platform/Characteristics/Unit" ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/Unit" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/Unit" + ] } ] }, @@ -985,7 +1464,7 @@ "check_id": "length_check" }, "characteristic_value_length_check": { - "rule_name": "Characteristic Value Length Check", + "rule_name": "Characteristic Value Check", "fields_to_apply": { "echo10": [ { @@ -999,6 +1478,16 @@ "fields": [ "DIF/Platform/Characteristics/Value" ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/Value" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Characteristics/Value" + ] } ] }, @@ -1054,7 +1543,8 @@ "Not provided" ] ], - "severity": "info" + "severity": "info", + "check_id": "mime_type_check" }, "coordinate_system_check": { "rule_name": "Coordinate System Check", @@ -1065,6 +1555,20 @@ "Collection/Spatial/HorizontalSpatialDomain/Geometry/Coordinate System" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Geometry/Coordinate_System" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/CoordinateSystem" + ] + } ] }, "data": [ @@ -1107,6 +1611,20 @@ "Collection/Spatial/GranuleSpatialRepresentation" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Granule_Spatial_Representation" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/SpatialExtent/GranuleSpatialRepresentation" + ] + } ] }, "data": [ @@ -1206,6 +1724,22 @@ "DIF/Platform/Instrument/Long_Name" ] ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Short_Name", + "DIF/Platform/Instrument/Sensor/Long_Name" + ], + "dependencies": [ + [ + "instrument_short_name_gcmd_check", + "DIF/Platform/Instrument/Sensor/Short_Name" + ], + [ + "instrument_long_name_gcmd_check", + "DIF/Platform/Instrument/Sensor/Long_Name" + ] + ] } ] }, @@ -1237,9 +1771,22 @@ "DIF/Platform/Instrument/Sensor/Short_Name" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/Instrument/ShortName" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/ShortName" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "instrument_short_name_gcmd_check" }, "instrument_long_name_gcmd_check": { "rule_name": "Instrument Longname GCMD Check", @@ -1267,9 +1814,22 @@ "DIF/Platform/Instrument/Sensor/Long_Name" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/Instrument/LongName" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/LongName" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "instrument_long_name_gcmd_check" }, "platform_short_name_gcmd_check": { "rule_name": "Platform Shortname GCMD Check", @@ -1280,9 +1840,24 @@ "Collection/Platforms/Platform/ShortName" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Short_Name" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/ShortName" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "platform_short_name_gcmd_check" }, "data_format_gcmd_check": { "rule_name": "Data Format GCMD Check", @@ -1293,9 +1868,24 @@ "Collection/DataFormat" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Distribution/Distribution_Format" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/Distribution/Format" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "data_format_gcmd_check" }, "platform_long_name_gcmd_check": { "rule_name": "Platform Longname GCMD Check", @@ -1313,9 +1903,17 @@ "DIF/Platform/Long_Name" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/LongName" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "platform_long_name_gcmd_check" }, "spatial_keyword_gcmd_check": { "rule_name": "Spatial Keyword GCMD Check", @@ -1326,9 +1924,37 @@ "Collection/SpatialKeywords/Keyword" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Location/Location_Category" + ] + }, + { + "fields": [ + "DIF/Location/Location_Type" + ] + }, + { + "fields": [ + "DIF/Location/Location_Subregion1" + ] + }, + { + "fields": [ + "DIF/Location/Location_Subregion2" + ] + }, + { + "fields": [ + "DIF/Location/Location_Subregion3" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "spatial_keyword_gcmd_check" }, "location_gcmd_check": { "rule_name": "Location GCMD Check", @@ -1364,9 +1990,17 @@ "DIF/Platform/Type" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/Type" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "platform_type_gcmd_check" }, "campaign_short_long_name_consistency_check": { "rule_name": "Campaign Short/Long name consistency Check", @@ -1388,9 +2022,28 @@ ] ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Project/Short_Name", + "DIF/Project/Long_Name" + ], + "dependencies": [ + [ + "campaign_short_name_gcmd_check", + "DIF/Project/Short_Name" + ], + [ + "campaign_long_name_gcmd_check", + "DIF/Project/Long_Name" + ] + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "campaign_short_long_name_consistency_check" }, "campaign_short_name_gcmd_check": { "rule_name": "Campaign Short Name GCMD Check", @@ -1401,9 +2054,24 @@ "Collection/Campaigns/Campaign/ShortName" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Project/Short_Name" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/Project/ShortName" + ] + } ] }, - "severity": "error" + "severity": "error", + "check_id": "campaign_short_name_gcmd_check" }, "campaign_long_name_gcmd_check": { "rule_name": "Campaign Long Name GCMD Check", @@ -1411,12 +2079,27 @@ "echo10": [ { "fields": [ - "Collection/Campaigns/Campaign/LongName" + "Collection/Campaigns/Campaign/LongName" + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Project/Long_Name" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/Project/LongName" ] } ] }, - "severity": "error" + "severity": "error", + "check_id": "campaign_long_name_gcmd_check" }, "version_description_not_provided": { "rule_name": "Version Description Not Provided", @@ -1434,6 +2117,13 @@ "DIF/Version_Description" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/VersionDescription" + ] + } ] }, "data": [ @@ -1452,6 +2142,20 @@ "Collection/CollectionDataType" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Collection_Data_Type" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/CollectionDataType" + ] + } ] }, "data": [ @@ -1515,6 +2219,20 @@ "Collection/Spatial/VerticalSpatialDomain/Type" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Vertical_Spatial_Info/Type" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/SpatialExtent/VerticalSpatialDomain/Type" + ] + } ] }, "data": [ @@ -1537,10 +2255,19 @@ "fields": [ "Collection/Spatial/SpatialCoverageType" ] - }, + } + ], + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Spatial_Coverage_Type" + ] + } + ], + "umm-json": [ { "fields": [ - "Collection/SpatialInfo/SpatialCoverageType" + "UMM/SpatialExtent/SpatialCoverageType" ] } ] @@ -1633,6 +2360,13 @@ "DIF/Project/Short_Name" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/Project/ShortName" + ] + } ] }, "severity": "info", @@ -1644,7 +2378,21 @@ "echo10": [ { "fields": [ - "Collection/SpatialInfo/SpatialCoverageType" + "Collection/Spatial/SpatialCoverageType" + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Spatial_Coverage_Type" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/SpatialExtent/SpatialCoverageType" ] } ] @@ -1668,6 +2416,13 @@ "DIF/Spatial_Coverage/Spatial_Info/Horizontal_Coordinate_System/Geodetic_Model/Horizontal_DatumName" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/SpatialRepresentationInfo/HorizontalCoordinateSystem/GeodeticModel/HorizontalDatumName" + ] + } ] }, "severity": "info", @@ -1759,6 +2514,13 @@ "DIF/Location/Location_Category" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/LocationKeywords/Category" + ] + } ] }, "severity": "info", @@ -1776,6 +2538,16 @@ "Collection/Spatial/HorizontalSpatialDomain/Geometry/Line" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle", + "DIF/Spatial_Coverage/Geometry/Point", + "DIF/Spatial_Coverage/Geometry/GPolygon", + "DIF/Spatial_Coverage/Geometry/Line" + ] + } ] }, "severity": "info", @@ -1798,6 +2570,14 @@ "DIF/Use_Constraints/License_Text" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/UseConstraints/LicenseURL/Linkage", + "UMM/UseConstraints/LicenseURL/Description" + ] + } ] }, "severity": "warning", @@ -1835,6 +2615,38 @@ "Collection/Contacts/Contact/ContactPersons/ContactPerson/LastName" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Personnel/Contact_Person/First_Name", + "DIF/Personnel/Contact_Person/Middle_Name", + "DIF/Personnel/Contact_Person/Last_Name" + ] + }, + { + "fields": [ + "DIF/Organization/Personnel/Contact_Person/First_Name", + "DIF/Organization/Personnel/Contact_Person/Middle_Name", + "DIF/Organization/Personnel/Contact_Person/Last_Name" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/ContactPerson/FirstName", + "UMM/ContactPerson/MiddleName", + "UMM/ContactPerson/LastName" + ] + }, + { + "fields": [ + "UMM/DataCenters/ContactPerson/FirstName", + "UMM/DataCenters/ContactPerson/MiddleName", + "UMM/DataCenters/ContactPerson/LastName" + ] + } ] }, "severity": "error", @@ -1860,6 +2672,15 @@ "DIF/Dataset_Citation/Persistent_Identifier/Identifier" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/DOI/Explanation", + "UMM/DOI/MissingReason", + "UMM/DOI/DOI" + ] + } ] }, "severity": "info", @@ -1903,6 +2724,29 @@ "DIF/Temporal_Coverage/Ends_At_Present_Flag", "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time" ] + }, + { + "fields": [ + "DIF/Dataset_Progress", + "DIF/Temporal_Coverage/Ends_At_Present_Flag", + "DIF/Temporal_Coverage/Periodic_DateTime/End_Date" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/CollectionProgress", + "UMM/TemporalExtent/EndsAtPresentFlag", + "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + ] + }, + { + "fields": [ + "UMM/CollectionProgress", + "UMM/TemporalExtent/EndsAtPresentFlag", + "UMM/TemporalExtent/PeriodicDateTime/EndDate" + ] } ] }, @@ -1920,7 +2764,8 @@ } ] }, - "severity": "error" + "severity": "error", + "check_id": "online_resource_type_gcmd_check" }, "online_resource_type_presence_check": { "rule_name": "Online Resource Type Presence Check", @@ -1971,7 +2816,8 @@ } ] }, - "severity": "warning" + "severity": "warning", + "check_id": "validate_ending_datetime_against_granules" }, "validate_beginning_datetime_against_granules": { "rule_name": "Beginning Datetime validation against granules", @@ -1993,7 +2839,8 @@ } ] }, - "severity": "warning" + "severity": "warning", + "check_id": "validate_beginning_datetime_against_granules" }, "future_date_check": { "rule_name": "Future Date Check", @@ -2095,7 +2942,8 @@ "fields": [ "DIF/Metadata_Dates/Data_Future_Review" ] - },{ + }, + { "fields": [ "DIF/Metadata_Dates/Data_Delete" ] @@ -2124,11 +2972,20 @@ "dif10": [ { "fields": [ - "DIF/Temporal_Coverage/Single_Date_Time", + "DIF/Temporal_Coverage/Single_DateTime", "DIF/Temporal_Coverage/Range_DateTime", "DIF/Temporal_Coverage/Periodic_DateTime" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/SingleDateTime", + "UMM/TemporalExtent/RangeDateTime", + "UMM/TemporalExtent/PeriodicDateTime" + ] + } ] }, "severity": "info", @@ -2278,7 +3135,8 @@ } ] }, - "severity": "error" + "severity": "error", + "check_id": "get_data_url_check" }, "horizontal_resolution_range_check": { "rule_name": "Horizontal resolution Range GCMD Check", @@ -2382,5 +3240,137 @@ }, "severity": "error", "check_id": "count_check" + }, + "data_center_short_name_gcmd_check": { + "rule_name": "Data Center Shortname GCMD Check", + "fields_to_apply": { + "echo10": [ + { + "fields": [ + "Collection/ProcessingCenter" + ] + }, + { + "fields": [ + "Collection/ArchiveCenter" + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Organization/Organization_Name/Short_Name" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/DataCenters/ShortName" + ] + } + ] + }, + "severity": "error", + "check_id": "data_center_short_name_gcmd_check" + }, + "characteristic_data_type": { + "rule_name": "Instrument Characteristics Data Type Presence Check", + "fields_to_apply": { + "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Characteristics/Characteristic/DataType", + "Collection/Platforms/Platform/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/DataType", + "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/DataType", + "Collection/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic" + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Characteristics/DataType", + "DIF/Platform/Characteristics" + ] + }, + { + "fields": [ + "DIF/Platform/Instrument/Sensor/Characteristics/DataType", + "DIF/Platform/Instrument/Sensor/Characteristics" + ] + }, + { + "fields": [ + "DIF/Platform/Characteristics/DataType", + "DIF/Platform/Characteristics" + ] + } + ] + }, + "severity": "error", + "check_id": "availability_check" + }, + "platform_type_presence_check": { + "rule_name": "Platform Type Presence Check", + "fields_to_apply": { + "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/Type" + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Type" + ] + } + ], + "umm-json": [ + { + "fields": [ + "UMM/Platform/Type" + ] + } + ] + }, + "severity": "error", + "check_id": "presence_check" + }, + "horizontal_data_resolution_unit_check": { + "rule_name": "Horizontal Data Resolution Unit Controlled Vocabulary Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Spatial_Coverage/Spatial_Info/Horizontal_Coordinate_System/Geographic_Coordinate_System/GeographicCoordinateUnits" + ] + } + ] + }, + "data": [ + [ + "Decimal Degrees", + "Kilometers", + "Meters", + "Statute Miles", + "Nautical Miles", + "Not provided" + ] + ], + "severity": "warning", + "check_id": "controlled_keywords_check" } -} +} \ No newline at end of file From 0fd0859665efa5c53a701b8d9e065bd87ec899d2 Mon Sep 17 00:00:00 2001 From: spa0002 Date: Fri, 19 Nov 2021 12:44:03 -0600 Subject: [PATCH 009/261] Updated rule_mapping.json to add check for UMM-C --- pyQuARC/schemas/rule_mapping.json | 616 +++++++++++++++++++++++++++++- 1 file changed, 608 insertions(+), 8 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 3a287ff8..1211e9af 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -374,7 +374,61 @@ "DIF/Dataset_Citation/Dataset_Release_Date" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/MetadataDate/Date" + ] + }, +{ + "fields": [ + "UMM/AdditionalAttribute/UpdateDate" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/RangeDateTime/BeginningDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/SingleDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/PeriodicDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/PeriodicDateTime/StartDate" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/PeriodicDateTime/EndDate" + ] + }, +{ + "fields": [ + "UMM/PaleoTemporalCoverage/PaleoStartDate" + ] + }, +{ + "fields": [ + "UMM/PaleoTemporalCoverage/PaleoEndDate" + ] + } + ] + }, "severity": "error" }, @@ -433,6 +487,42 @@ "fields": [ "DIF/Related_URL/URL" ] + }, +], +"umm-json": [ + { + "fields": [ + "UMM/DataCenters/ContactInformation/RelatedURLs/Url" + ] + }, +{ + "fields": [ + "UMM/DataCenters/ContactPerson/ContactInformation/RelatedURLs/Url" + ] + } +, +{ + "fields": [ + "UMM/DataCenters/ContactGroup/ContactInformation/RelatedURLs/Url" + ] + } +, +{ + "fields": [ + "UMM/ContactPerson/ContactInformation/RelatedURLs/Url" + ] + } +, +{ + "fields": [ + "UMM/ContactGroup/ContactInformation/RelatedURLs/Url" + ] + } +, +{ + "fields": [ + "UMM/RelatedUrl/URL" + ] } ] }, @@ -724,7 +814,32 @@ "DIF/Metadata_Dates/Metadata_Delete" ] } + ], +"umm": [ + { + "fields": [ + "UMM/DataDate/Date" + ] + }, + { + "fields": [ + "UMM/DataDate/Type=DELETE" + ] + }, +{ + "fields": [ + "UMM/MetadataDate/Date" + ] + }, +{ + "fields": [ + "UMM/MetadataDate/Type=DELETE" + ] + } + + ] + }, "data": [ "now", @@ -793,6 +908,13 @@ "Collection/CollectionState" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/CollectionProgress" + ] + } ] }, "data": [ @@ -1042,6 +1164,33 @@ ] } ] +, + "umm-json": [ + { + "fields": [ + "UMM/AdditionalAttribute/DataType" + ] + }, +{ + "fields": [ + "UMM/RelatedUrl/GetService/DataType" + ] + }, +{ + "fields": [ + "UMM/Platform/Characteristics/DataType " + ] + }, +{ + "fields": [ + "UMM/Platform/Instrument/Characteristics/DataType" + ] + }, +{ + "fields": [ + "UMM/Platform/Instrument/ComposedOf/Characteristics/DataType" + ] + } ] }, "data": [ [ @@ -1103,7 +1252,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "UMM/Platform/Characteristics/Name", @@ -1364,6 +1513,23 @@ "DIF/Platform/Instrument/Sensor/Characteristics/Name" ] } + ], + “umm-json”: [ + { + “fields”: [ + “Platform/Characteristics/Name” + ] + }, + { + “fields”: [ + “Platform/Instrument/Characteristics/Name” + ] + }, + { + “fields”: [ + “Platform/Instrument/ComposedOf/Characteristics/Name” + ] + } ] }, "data": [ @@ -1396,7 +1562,7 @@ "dif10": [ { "fields": [ - "DIF/Platform/Instrument/Characteristics/Description" + "DIF/Platform/Characteristics/Description" ] }, { @@ -1409,7 +1575,25 @@ "DIF/Platform/Instrument/Sensor/Characteristics/Description" ] } - ] + ], +"umm": [ + { + "fields": [ + "UMM/Platform/Instrument/Characteristics/Description" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/Characteristics/Description" + ] + }, + +{ + "fields": [ + "UMM/Platform/Characteristics/Description" + ] + }, ], + }, "data": [ 2048, @@ -1454,6 +1638,23 @@ "DIF/Platform/Instrument/Characteristics/Unit" ] } + ], + “umm-json”: [ + { + “fields”: [ + “Platform/Characteristics/Unit” + ] + }, + { + “fields”: [ + “Platform/Instrument/Characteristics/Unit” + ] + }, + { + “fields”: [ + “Platform/Instrument/ComposedOf/Characteristics/Unit” + ] + } ] }, "data": [ @@ -1489,6 +1690,23 @@ "DIF/Platform/Instrument/Characteristics/Value" ] } + ], + “umm-json”: [ + { + “fields”: [ + “Platform/Characteristics/Value” + ] + }, + { + “fields”: [ + “Platform/Instrument/Characteristics/Value” + ] + }, + { + “fields”: [ + “Platform/Instrument/ComposedOf/Characteristics/Value” + ] + } ] }, "data": [ @@ -1652,6 +1870,13 @@ "Collection/ArchiveCenter" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/DataCenters/ShortName" + ] + } ] }, "severity": "error", @@ -1666,6 +1891,13 @@ "DIF/Organization/Organization_Name/Long_Name" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/DataCenters/LongName" + ] + } ] }, "severity": "error", @@ -1740,7 +1972,42 @@ "DIF/Platform/Instrument/Sensor/Long_Name" ] ] + }, + + "umm-json": [ + { + "fields": [ + "UMM/Platform/Instrument/ShortName", + "UMM/Platform/Instrument/LongName" + ], + "dependencies": [ + [ + "instrument_short_name_gcmd_check", + "UMM/Platform/Instrument/ShortName" + ], + [ + "instrument_long_name_gcmd_check", + "UMM/Platform/Instrument/LongName" + ] + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/ShortName", + "UMM/Platform/Instrument/ComposedOf/LongName" + ], + "dependencies": [ + [ + "instrument_short_name_gcmd_check", + "UMM/Platform/Instrument/ComposedOf/ShortName" + ], + [ + "instrument_long_name_gcmd_check", + "UMM/Platform/Instrument/ComposedOf/LongName" + ] + ] } + ] }, "severity": "error" @@ -1951,7 +2218,35 @@ "DIF/Location/Location_Subregion3" ] } + ], +"umm": [ + { + "fields": [ + "UMM/LocationKeywords/Category" + ] + }, + { + "fields": [ + "UMM/LocationKeywords/Type" + ] + }, + { + "fields": [ + "UMM/LocationKeywords/Subregion1" + ] + }, + { + "fields": [ + "UMM/LocationKeywords/Subregion2" + ] + }, + { + "fields": [ + "UMM/LocationKeywords/Subregion3" + ] + } ] + }, "severity": "error", "check_id": "spatial_keyword_gcmd_check" @@ -1969,7 +2264,19 @@ "DIF/Location/Location_Subregion3" ] } + ], +"umm": [ + { + "fields": [ + "UMM/LocationKeywords/Category", + "UMM/LocationKeywords/Type", + "UMM/LocationKeywords/Subregion1", + "UMM/LocationKeywords/Subregion2", + "UMM/LocationKeywords/Subregion3" + ] + } ] + }, "severity": "error", "check_id": "location_gcmd_check" @@ -2040,7 +2347,26 @@ ] ] } + ], +"umm": [ + { + "fields": [ + "UMM/Project/ShortName", + "UMM/Project/LongName" + ], + "dependencies": [ + [ + "campaign_short_name_gcmd_check", + "UMM/Project/ShortName" + ], + [ + "campaign_long_name_gcmd_check", + "UMM/Project/LongName" + ] + ] + } ] + }, "severity": "error", "check_id": "campaign_short_long_name_consistency_check" @@ -2179,7 +2505,15 @@ "Collection/Contacts/Contact/OrganizationName" ] } + ], +"umm": [ + { + "fields": [ + "UMM/DataCenters/ShortName" + ] + } ] + }, "severity": "info", "check_id": "presence_check" @@ -2206,6 +2540,19 @@ "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Southernmost_Latitude" ] } + ], + “umm-json”: [ + { + “fields”: [ + “SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate”, + +“SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/NorthBoundingCoordinate”, + +“SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/EastBoundingCoordinate”, + +“SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/SouthBoundingCoordinate” + ] + } ] }, "severity": "error" @@ -2302,7 +2649,15 @@ "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Depth_Unit" ] } + ], +"umm": [ + { + "fields": [ + "UMM/SpatialExtent/VerticalSpatialDomain/Unit" + ] + } ] + }, "data": [ [ @@ -2332,7 +2687,15 @@ "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Altitude_Unit" ] } + ], +"umm": [ + { + "fields": [ + "UMM/SpatialExtent/VerticalSpatialDomain/Unit" + ] + } ] + }, "data": [ [ @@ -2547,6 +2910,15 @@ "DIF/Spatial_Coverage/Geometry/GPolygon", "DIF/Spatial_Coverage/Geometry/Line" ] + }, + "umm-json": [ + { + "fields": [ + "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/Point", + "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles", + "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/Lines", + "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/Gpolygons" + ] } ] }, @@ -2599,6 +2971,13 @@ "DIF/Dataset_Citation/Dataset_Title" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/ResourceCitation/OtherCitationDetails" + ] + } ] }, "severity": "warning", @@ -2762,6 +3141,13 @@ "Collection/OnlineResources/OnlineResource/Type" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/RelatedUrl/Type" + ] + } ] }, "severity": "error", @@ -2777,6 +3163,14 @@ "Collection/OnlineResources/OnlineResource/URL" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/RelatedUrl/Type", +"UMM/RelatedUrl/Url" + ] + } ] }, "severity": "warning", @@ -2791,6 +3185,13 @@ "Collection/Platforms/Platform/Characteristics" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/Platform/Characteristics" + ] + } ] }, "severity": "warning", @@ -2814,8 +3215,15 @@ "DIF/Entry_ID/Short_Name" ] } - ] - }, + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/RangeDateTime/EndingDateTime", + "UMM/ShortName" + ] + } + ] }, "severity": "warning", "check_id": "validate_ending_datetime_against_granules" }, @@ -2837,7 +3245,15 @@ "DIF/Entry_ID/Short_Name" ] } - ] + ], + "umm-json": [ + { + "fields": [ + "UMM/TemporalExtent/RangeDateTime/BeginningDateTime", + "UMM/ShortName" + ] + } + ] }, "severity": "warning", "check_id": "validate_beginning_datetime_against_granules" @@ -2874,6 +3290,13 @@ "DIF/ISO_Topic_Category" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/ISOTopicCategory" + ] + } ] }, "data": [ @@ -3005,7 +3428,26 @@ "DIF/Use_Constraints/License_URL/Protocol" ] } - ] + ], + "umm-json": [ + { + "fields": [ + "UMM/PublicationReference/OnlineResource/Protocol" + + ] + }, +{ + "fields": [ + "UMM/RelatedUrl/GetService/Protocol" + + ] + }, +{ + "fields": [ + "UMM/ResourceCitation/OnlineResource/Protocol" + + ] + } }, "data": [ "FTP", @@ -3024,7 +3466,17 @@ "DIF/Entry_ID/Version" ], "relation": "eq" + }] +, + "umm-json": [ + { + "fields": [ + "UMM/ResourceCitation/Version", +"UMM/Version" + + ] } + ] }, "severity": "info", @@ -3074,6 +3526,59 @@ "DIF/Metadata_Dates/Data_Delete" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/MetadataDate/Date" + ] + }, +{ + "fields": [ + "UMM/AdditionalAttribute/UpdateDate" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/RangeDateTime/BeginningDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/SingleDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/PeriodicDateTime" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/PeriodicDateTime/StartDate" + ] + }, +{ + "fields": [ + "UMM/TemporalExtent/PeriodicDateTime/EndDate" + ] + }, +{ + "fields": [ + "UMM/PaleoTemporalCoverage/PaleoStartDate" + ] + }, +{ + "fields": [ + "UMM/PaleoTemporalCoverage/PaleoEndDate" + ] + } + ] }, "data": [ @@ -3119,7 +3624,16 @@ "DIF/Use_Constraints/License_URL/URL" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/RelatedURL/Description", + "UMM/RelatedURL/URL" + ] + } ] + }, "severity": "info", "check_id": "availability_check" @@ -3133,6 +3647,14 @@ "DIF" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/RelatedUrl/GetData", + "UMM/RelatedURL/URL" + ] + } ] }, "severity": "error", @@ -3147,6 +3669,13 @@ "DIF/Data_Resolution/Horizontal_Resolution_Range" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/SpatialRepresentationInfo/Horizontal_Resolution_Range" + ] + } ] }, "severity": "error", @@ -3161,6 +3690,13 @@ "DIF/Data_Resolution/Vertical_Resolution_Range" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/SpatialRepresentationInfo/Vertical_Resolution_Range" + ] + } ] }, "severity": "error", @@ -3203,6 +3739,13 @@ "DIF/IDN_Node/Short_Name" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/DirectoryName/ShortName" + ] + } ] }, "severity": "warning", @@ -3221,6 +3764,21 @@ "DIF/Temporal_Coverage/Paleo_DateTime/Chronostratigraphic_Unit/Stage" ] } + ], + “umm-json”: [ + { + “fields”: [ +“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Eon”, + +“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Era”, + +“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Period”, + +“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Epoch”, + +“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Stage” + ] + } ] }, "severity": "error", @@ -3236,6 +3794,14 @@ "DIF/Platform/Instrument/Sensor/Short_Name" ] } + ], +"umm-json": [ + { + "fields": [ + "UMM/Platform/Instrument/NumberOfInstruments", + "UMM/Platform/Instrument/ComposedOf/ShortName" + ] + } ] }, "severity": "error", @@ -3316,6 +3882,26 @@ "DIF/Platform/Characteristics" ] } + ], + “umm-json”: [ + { + “fields”: [ + “UMM/Platform/Characteristics/DataType”, + “UMM/Platform/Characteristics” + ] + }, + { + “fields”: [ + “UMM/Platform/Instrument/Characteristics/DataType”, + “UMM/Platform/Instrument/Characteristics” + ] + }, + { + “fields”: [ + “UMM/Platform/Instrument/ComposedOf/Characteristics/DataType”, + “UMM/Platform/Instrument/ComposedOf/Characteristics” + ] + } ] }, "severity": "error", @@ -3358,6 +3944,13 @@ "DIF/Spatial_Coverage/Spatial_Info/Horizontal_Coordinate_System/Geographic_Coordinate_System/GeographicCoordinateUnits" ] } + ], + "umm-json": [ + { + "fields": [ + "UMM/SpatialRepresentationInfo/HorizontalCoordinateSystem/GeographicCoordinateSystem/GeographicCoordinateUnits" + ] + } ] }, "data": [ @@ -3373,4 +3966,11 @@ "severity": "warning", "check_id": "controlled_keywords_check" } -} \ No newline at end of file +} + + + + + + + From 879e6db13f85b9a7ab57b7b7ccf82872aa8d9d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 9 Dec 2021 16:39:25 -0600 Subject: [PATCH 010/261] Rename files to fix echo10 and dif10 errors --- .../{dif10_xml.xsd => dif10_schema.xsd} | 0 pyQuARC/schemas/echo10_schema.xsd | 2799 +++++++++++++++++ 2 files changed, 2799 insertions(+) rename pyQuARC/schemas/{dif10_xml.xsd => dif10_schema.xsd} (100%) create mode 100644 pyQuARC/schemas/echo10_schema.xsd diff --git a/pyQuARC/schemas/dif10_xml.xsd b/pyQuARC/schemas/dif10_schema.xsd similarity index 100% rename from pyQuARC/schemas/dif10_xml.xsd rename to pyQuARC/schemas/dif10_schema.xsd diff --git a/pyQuARC/schemas/echo10_schema.xsd b/pyQuARC/schemas/echo10_schema.xsd new file mode 100644 index 00000000..edfa6a22 --- /dev/null +++ b/pyQuARC/schemas/echo10_schema.xsd @@ -0,0 +1,2799 @@ + + + + + + + + + + + + + + Name of data center where this metadata + file was originated. + + + + + + + + + + + Collections to be inserted or + replaced. + + + + + Partial metadata adds to be applied to + collections. + + + + + Partial metadata deletes to be applied + to collections. + + + + + Collections that should be immediately + deleted. To set a future delete time, use a partial + metadata update. + + + + + Collections to be verified. Each + collection supplied will be matched with the current + instance in ECHO in order to find any metadata + mismatches. The supplied collections will then be + inserted (if a collection is missing from ECHO) or + replaced (resolving any metadata + mismatches). + + + + + All of the collections that should + exist for a provider in ECHO. ECHO will determine any + collections that are missing from ECHO or should not + exist in ECHO based upon the given + collections. + + + + + + + A list of collection + deletes. + + + + + + + + A list of collections. + + + + + + + + The collection inventory for a provider. An + empty CollectionReferences element represents an inventory + with no collections. + + + + + The references to collections that are + expected to exist for the provider in + ECHO + + + + + + + +

This entity contains brief description of collections + including the dataset identifier, short and long names, and + the version of the collection. The dataset identifier is + the primary identifier used by ECHO to identify a + collection. This also provides further description of the + collection to include media, revision date, usage, and + processing and archive centers etc.In this entity, the + aggregation information such as total number of granules + contained by this collection etc. are stored as well.

+

Adopted from Release B Science Data Processing Segment + (SDPS) for the ECS Project. Refer to 311-CD-008-001 May 15, + 1996.Additional fields are added to host the collection + aggregation information, price, book keeping information, + and various default setting etc. Collection's dataset ID + attribute is added to hold an alternative unique identifier + of the collection per provider.

+
+
+ + + + This name will identify the short name + associated with the collection. This is the official + reference name used in identifying the contents of the + data collection. All characters must be in upper case. + The short name and version id combination must be unique + for a provider. + + + + + Version identifier of the data + collection. + + + + + + + + + + + The insert date/time the collection + entered data provider's database. This date is provided + by the data provider. + + + + + The most recent update occurred on the + data provider's database. This date is provided by the + data provider. + + + + + The date the collection is or is + planned to be deleted from the data provider's database. + This date is provided by the data provider. If this date + is in the past, the collection will be deleted during the + next automated cleanup. + + + + + This attribute will identify the long + name associated with the collection. This is the + reference name used in describing the scientific contents + of the data collection. The long name and version id must + be unique for a provider. + + + + + + + + + + + Specifies a unique name for the + collection. This is considered the primary identifier for + a collection. + + + + + + + + + + + This attribute identifies the major + emphasis of the content of the + collection. + + + + + + + + + + + This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as an OnlineResource. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. While this element is not required, NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections. For those that want to specify that a DOI is not applicable for their record use the second option. + + + + + An element to identify + non-science-quality products such as NRT data. If a + collection does not contain this field, it will be + assumed to be of science-quality. + + + + + + All EOS and non-EOS data and + data products that are archived + by EOSDIS. + + + + + Data from the source that are + available for use within a time that is short in + comparison to important time scales in the phenomena + being studied. This data is not science quality and + is not retained by EOSDIS once the SCIENCE_QUALITY + product is archived + + + + + Any EOS and non-EOS data and data + products, that are not SCIENCE_QUALITY and do not + fall under NEAR_REAL_TIME holdings. + + + + + + + + The indication of whether this + collection is orderable. + + + + + +

Indication of whether the collection is visible or + not. Visibility is a basic access control mechanism + that bypasses all ACL rules. If a collection is not + visible, only users with the owning provider role will + be able to see the item. All other users will not see + the item no matter what ACL permissions are in + place.

+

If group based permissions are needed, use the + restriction flag field instead of visibility. Normally + visibility is used when an item is first ingested. + Making the item not visible allows the provider time to + install any ACL rules or order options required before + users will see the item. Visibility is more commonly + set at the collection level than the granule level. If + a collection is not visible, none of the granules in + the collection will be visible.

+
+
+
+ + + Represents the date and possibly the + time that this directory entry was created or the latest + date and time of its modification or + update. + + + + + This attribute describes how this + collection or granule may be best used to support earth + science/global change research. + + + + + + + + + + + Center where collection was or is being + processed. + + + + + + + + + + + The processing level class contains the + level identifier and level description of the + collection. + + + + + + + + + + + Description of Processing + Level. + + + + + + + + + + + Center where collection is + archived. + + + + + + + + + + + A brief description of the differences + between this collection version and another collection + version. + + + + + + + + + + + The recommended reference to be used + when referring to this collection in publications. Its + format is free text, but should include: Originator (the + name of an organization or individual that developed the + data set, where Editor(s)' names are followed by (ed.) + and Compiler(s)' names are followed by (comp.)); + Publication date (the date of publication or release of + the data set); Title (the name by which document can be + referenced). + + + + + + + + + + + This attribute describes the state of + the collection, whether it is planned but not yet + existent, partially complete due to continual additions + from remotely sensed data/processing/reprocessing, or is + considered a complete product/dataset. + + + + + + + + + + + The frequency with which changes and + additions are made to the collection after the initial + dataset begins to be + collected/processed. + + + + + + + + + + + A numerical value indicates the type of + restriction that applies on this + collection. + + + + + Restrictions and legal prerequisites + for accessing the collection. These include any access + constraints applied to assure the protection of privacy + or intellectual property, and any special restrictions or + limitations on obtaining the collection. These + restrictions differ from Use Restrictions in that they + only apply to access. + + + + + + + + + + + + The price for ordering the + collection. + + + + + + + + + + + + + This attribute specifies a word or + phrase which serves to summarize the spatial regions + covered by the collection. It may be repeated if several + regions are covered. This often occurs when a collection + is described as covering some large region, and several + smaller sub regions within that + region. + + + + + This attribute specifies a word or + phrase which serves to summarize the temporal + characteristics referenced in the + collection. + + + + + + + + + + + + + + This entity defines the two dimensional + coordinate systems for the collection. The two + dimensional coordinate system information is an + alternative way to express spatial coverage. Granules in + the collection that specify two dimensional coordinate + data must conform to one of the systems defined by the + collection. + + + + + + + + + + + + + + The list of browse images associated + with this collection. + + + + + The list of browse image urls + associated with this collection. + + + +
+
+ + + + + This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection. + + + + + + + + + + + + + This element holds the actual license text. If this element is used the LicenseUrl element cannot be used. + + + + + + + + + + + + + + + + + + + This entity is used to define + characteristics. + + + + + The name of the characteristic + attribute. + + + + + + + + + + + Description of the Characteristic + attribute. + + + + + + + + + + + The datatype of the + Characteristic/attribute. + + + + + + + + + + + Units associated with the + Characteristic attribute value. + + + + + + + + + + + The value of the Characteristic + attribute. + + + + + + + + + + + + + + + + + + This entity provides the common + characteristics of the algorithms used in product generation. + These characteristics include the algorithm package name, + date, version, maturity code and generating system + characteristics for the package. + + + + + This attribute is the name given to the + complete delivered package submitted for algorithm + integration and test. + + + + + + + + + + + This attribute specifies the version of + the full package being delivered. + + + + + + + + + + + The description of the algorithm + package. + + + + + + + + + + + + + + + + + + This entity contains attributes describing + the scientific endeavor(s) to which the collection is + associated. Scientific endeavors include campaigns, projects, + interdisciplinary science investigations, missions, field + experiments, etc. + + + + + The unique identifier by which a + campaign/project/experiment is known. The campain/project + is the scientific endeavor associated with the + acquisition of the collection. Collections may be + associated with multiple campaigns. + + + + + + + + + + + The expanded name of the + campaign/experiment (e.g. Global climate observing + system). + + + + + + + + + + + The starting date of the + campaign. + + + + + The ending data of the + campaign. + + + + + + + + + + + + This entity is used to describe collections + associated with the instance of a collection; i.e., the name + and other details of input collections, collections + associated (in science data terms) with the instance and/or + collections dependent on the collection in some + way. + + + + + The short name of an input collection + and/or a dependent collection that is somehow associated + with this collection. + + + + + The version of an input collection + and/or a dependent collection that is somehow associated + with this collection. + + + + + + + + + + + The type of the association whether an + input type, or dependent type etc. + + + + + + + + + + + Explanation of how the associated + collection is used for this + collection. + + + + + + + + + + + + + + + + + + This entity stores the description of the + data organization of the collection (i.e. a generalized + collection Description in terms of internal structure). There + are many possible structures. All should be describable by + one of the PrimaryCSDTs (fixed domain), but the specific + implementation has an unbounded domain indicating the range + at the lower structured level. While many CSDTs may exist in + a granule, only the primary or dominant CSDT is described + (e.g. PrimaryCSDT = swath, Implementation = HDF-EOS). The + indirect reference is used for collection specific data + organization labels. A comment field is provided for further + explanation. + + + + + The name of the CSDT type of data + organization (data type and sub type). Computer Science + Data Types are the physical storage types required to + support Earth Science Data Types(ESDTs), the logical + objects seen in pyramid views. + + + + + + + + + + + The name of the implemented form of the + CSDT (standard formats, industry standards etc.), + including lowest level object + description. + + + + + + + + + + + A free text field for the user to add + comments clarifying the data + structure. + + + + + + + + + + + Name of object by which data are + organized. Name is the ESDT related or other local name + other than the formal CSDT reference. i.e. 2.5 degree + bins for CERES, 5 degree bins for CERES, and source + packets for level 0. + + + + + + + + + + + + + + + + + + This entity stores the product specific + attributes (i.e. attributes used to describe the unique + characteristics of the collection which extend beyond those + defined in this model). + + + + + + + + + + + + + Data type of parameter + value + + + + + This attribute provides a description + for the additional_attribute_name. + + + + + + + + + + + This attribute will be used to identify + the smallest unit increment to which the parameter value + is measured. + + + + + + + + + + + This attribute provides the minimum + value of parameter over whole + collection. + + + + + + + + + + + This attribute provides the maximum + value of parameter over whole + collection. + + + + + + + + + + + The standard unit of measurement for a + not-core attribute. AVHRR: unit of geophysical + parameter-units of geophysical + parameter. + + + + + + + + + + + An estimate of the accuracy of the + assignment of attribute value. AVHRR: Measurement error + or precision-measurement error or precision of a data + product parameter. This can be specified in percent or + the unit with which the parameter is + measured. + + + + + + + + + + + This defines the method used for + determining the parameter value accuracy that is given + for this non core attribute. + + + + + + + + + + + This attribute contains the value of + the product specific attribute (additional attribute) for + all granules across a given collection + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This entity describes the relevant + platforms associated with the acquisition of the collection + or granule. For example, Platforms may include (but are not + limited to): ADEOS-II, AEM-2, AM-1, Aqua, Aura, BALLOONS, + BUOYS, C-130, DEM, DMSP-F1, ERS-1, GOES-10, LANDSAT-1, + METEOSAT-2, NIMBUS-2, NOAA-6, TERRA, TRMM, + etc. + + + + + The unique platform name. (e.g. + GOES-8). + + + + + + + + + + + The expanded or long name of the + platform associated with an + instrument. + + + + + + + + + + + The most relevant platform + type. + + + + + + + + + + + The characteristics of platform + specific attributes. The characteristic names must be + unique on this platform; however the names do not have to + be unique across platforms. + + + + + + + + + + + + + This entity registers the device used to + measure or record data, including direct human observation. + In cases where instruments have a single sensor or the + instrument and sensor are used synonymously (e.g. AVHRR) the + both Instrument and Sensor should be recorded. The Sensor + information is represented by some other + entities. + + + + + The unique identifier of an + instrument. + + + + + + + + + + + The expanded name of the primary + sensory instrument. (e.g. Advanced Spaceborne Thermal + Emission and Reflective Radiometer, Clouds and the + Earth's Radiant Energy System, Human + Observation). + + + + + + + + + + + The expanded name of the primary + sensory instrument. (e.g. Advanced Spaceborne Thermal + Emission and Reflective Radiometer, Clouds and the + Earth's Radiant Energy System, Human + Observation). + + + + + + + + + + + Number of sensors used on the + instrument when acquire the granule + data. + + + + + The characteristics of this instrument + expressed as custom attributes. The characteristic names + must be unique on this instrument; however the names do + not have to be unique across + instruments. + + + + + + The operation mode applied on the + instrument when acquire the granule + data. + + + + + + + + + + + + This entity holds the referential + information for collection source/sensor configuration + including sensor parameters setting such as technique + etc. + + + + + Short name of the + sensor. + + + + + + + + + + + + + + + + + + + Technique applied for this sensor in + the configuration. + + + + + + + + + + + The characteristics of this sensor + expressed as custom attributes. The characteristic names + must be unique on this sensor; however the names do not + have to be unique across sensors. + + + + + + + + + + + + This entity holds cross reference between + collections and science keywords. + + + + + Keyword used to describe the general + category of the collection. A collection can conceivably + cover several categories. + + + + + + + + + + + Keyword used to describe the general + topic area of the collection. A collection can + conceivably cover several topics. + + + + + + + + + + + Keyword used to describe the science + parameter area of the collection. A collection can + conceivably cover many such + parameters. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The collection's DIF (Directory Interchange + Format) identifier(s). + + + + + + + + Unique identifier of the DIF (Directory + Interchange Format). + + + + + + + + This entity contains records, which + describe the basis of the time system used for a specific + collection. + + + + + This attribute provides the time system + which the values found in temporal subclasses + represent. + + + + + + + + + + + This attribute specifies the type of + date represented by the value in the date attributes of + the temporal subclasses. + + + + + + + + + + + This attribute tells the system and + ultimately the end user how temporal coverage is + specified for the collection. + + + + + + + + + + + The precision (position in number of + places to right of decimal point) of seconds used in + measurement. + + + + + This attribute will denote that a data + collection which covers, temporally, a discontinuous + range, currently ends at the present date. This way, the + granules, which comprise the data collection, that are + continuously being added to inventory need not update the + data collection metadata for each one. + + + + + + + + + + + + This entity contains the name of the + temporal period in addition to the date, time, duration unit, + and value, and cycle duration unit and value. Used at the + collection level to describe a collection having granules, + which cover a regularly occurring period. + + + + + The name given to the recurring time + period. e.g. 'spring - north hemi.' + + + + + + + + + + + This attribute provides the date (day + and time) of the first occurrence of this regularly + occurring period which is relevant to the collection, + granule, or event coverage. + + + + + + The unit specification for the period + duration. + + + + + The number of PeriodDurationUnits in + the RegularPeriodic period. e.g. the RegularPeriodic + event 'Spring-North Hemi' might have a + PeriodDurationUnit='MONTH' PeriodDurationValue='3' + PeriodCycleDurationUnit='YEAR' + PeriodCycleDurationValue='1' indicating that Spring-North + Hemi lasts for 3 months and has a cycle duration of 1 + year. The unit for the attribute is the value of the + attribute PeriodDurationValue. + + + + + The unit specification of the period + cycle duration. + + + + + + + + + + + + + Defines a named two dimensional coordinate + system for the collection. + + + + + Defines the name of the Two Dimensional + coordinate System. Must be unique within a + collection. + + + + + + + + + + + Defines the horizontal + coordinate. + + + + + Defines the vertical + coordinate. + + + + + + + Defines the minimum and maximum value for + one dimension of a two dimensional + coordinate. + + + + + + + + + This entity contains collection's spatial + coverage information. + + + + + This attribute denotes whether the + collection's spatial coverage requires horizontal, + vertical, or both in the spatial domain and coordinate + system definitions. + + + + + + + + + + + + + + + + + + + + This entity holds collection horizontal + spatial coverage data. + + + + + The appropriate numeric or alpha code + used to identify the various zones in this grid + coordinate system. + + + + + + + + + + + + + + + + + + + + + + + + + Orbit parameters for the collection used by + the Orbital Backtrack Algorithm. + + + + + Width of the swath at the equator in + Kilometers. + + + + + Orbital period in decimal + minutes. + + + + + Inclination of the orbit. This is the + same as (180-declination) and also the same as the + highest latitude achieved by the satellite. Data Unit: + Degree. + + + + + Indicates the number of + orbits. + + + + + The latitude start of the orbit + relative to the equator. This is used by the backtrack + search algorithm to treat the orbit as if it starts from + the specified latitude. This is optional and will default + to 0 if not specified. + + + + + + + + + + + + This entity contains the basic + characteristics for a person or an organization type of + contact. These contacts may provide information about a + Collection, Delivered Algorithm Package, PGE or Data + Originator. System and user profile contact information is + held elsewhere. + + + + + The role of the contact (producer, + archiver, distributor or data + originator). + + + + + + + + + + + Time period when individuals can speak + to the organization or individuals. + + + + + + + + + + + Supplemental instructions on how or + when to contact the individual or + organization. + + + + + + + + + + + The organization and the member of the + organization, associated with the data set. Used in cases + where the association of the organization to the data set + is more significant than the association of the person to + the data set. + + + + + + + + + + + This entity contains the address + details for each contact. + + + + + + + + + + + + The address of the electronic mailbox + of the organization or individual. + + + + + + + + + + + + + + + + + + This entity contains the address details + for each contact. + + + + + An address line for the address, used + for mailing or physical addresses of organizations or + individuals who serve as points of + contact. + + + + + + + + + + + The city of the person or + organization. + + + + + + + + + + + The state or province of the + address. + + + + + + + + + + + The zip or other postal code of the + address. + + + + + + + + + + + The country of the + address. + + + + + + + + + + + + + + + + + + This entity contains the telephone details + associated with the contact. + + + + + Number of the organization or + individual who is point of contact. The general format of + the number includes country, area, and STD codes, as + required for the full telephone number. Multi-extensions + should be single entries rather than part of a single + entry text. + + + + + + + + + + + The type of telephone number being + provided in this instance of the phone number, in order + to reach the organization or individual who serves as a + point of contact. + + + + + + + + + + + + + + + + + + This entity contains the contact person's + name and position. In some instances, Contact Person is the + primary point of contact. + + + + + First name of the individual which the + contact role (producer, archiver, distributor, or data + originator) applies. People are points of contact, rather + than organizations, in cases where the association of the + person to the data set is more significant than the + association of the organization to the data set. They may + also be included if both a single person and organization + are provided as points of contact. + + + + + + + + + + + Middle name of the individual which the + contact role (producer, archiver, distributor, or data + originator) applies. + + + + + + + + + + + Last name of the individual which the + contact role (producer, archiver, distributor, or data + originator) applies. + + + + + + + + + + + The title of the individual, i.e. Team + Leader, Principal Investigator. + + + + + + + + + + + + + + + + + + + The reference frame or system from which + altitude or depths are measured. The term 'altitude' is used + instead of the common term 'elevation' to conform to the + terminology in Federal Information Processing Standards 70-1 + and 173. The information contains the datum name, distance + units and encoding method, which provide the definition for + the system. + + + + + The identification given to the level + surface taken as the surface of reference from which + measurements are compared. + + + + + + + + + + + The recorded units + + + + + + + + + + + The means used to encode + measurements. + + + + + + + + + + + This entity stores a list of + resolutions. + + + + + + + + + This entity stores the minimum distance + possible between two adjacent values, expressed in + distance units of measure for + collection. + + + + + + + + + + + + + + + + + + + The identification given to the + reference system used for defining the coordinates of + points. + + + + + + + + + + + Identification given to established + representation of the Earth's shape. + + + + + + + + + + + Radius of the equatorial axis of the + ellipsoid. + + + + + The ratios of the Earth's major axis to + the difference between the major and the + minor. + + + + + + + + + Units of measure used for the geodetic + latitude and longitude resolution values. For lat, a 2 + digit decimal number from 0-90; for lon, a 3 digit + decimal number from 0-180. + or absence of - for values + north of equator or values west of prime meridian; - for + all others. + + + + + + + + + + + The minimum difference between two + adjacent latitude values expressed in Geographic + Coordinate Units of measure. + + + + + The minimum difference between two + adjacent longitude values expressed in Geographic + Coordinate Units of measure. + + + + + + + + + This class contains a description of + the coordinate system and geo-reference + information. + + + + + + + + + + + A description of the information + provided to register the local system to the Earth (e.g. + control points, satellite ephemeral data, and inertial + navigation data). + + + + + + + + + + + + + This entity stores the reference frame or + system from which altitudes (elevations) are measured. The + information contains the datum name, distance units and + encoding method, which provide the definition for the system. + This table also stores the characteristics of the reference + frame or system from which depths are measured. The + additional information in the table are geometry reference + data etc. + + + + + This attribute denotes whether the + locality/coverage requires horizontal, vertical, or both + in the spatial domain and coordinate system + definitions. + + + + + + + + + + + + + + + + + + + + + + Units of measure used for planar + coordinate description distances. + + + + + + + + + + + The means used to represent horizontal + positions in the planar coordinate + system. + + + + + + + + + + + + + + + + + + + The minimum distance measurable between + two points, expressed in Planar Distance Units of + measure. + + + + + The minimum angle measurable between + two points, expressed in Bearing Units of + measure. + + + + + Units of measure used for + angles. + + + + + + + + + + + Direction from which the bearing is + measured clockwise. + + + + + + + + + + + Axis from which the bearing is + measured. + + + + + + + + + + + + + + + The (nominal) minimum distance between + the 'x' or column values of two adjacent points, + expressed in Planar Distance Units of measure. Planar + Distance Units of measure are units used for distances + whose domain values are meters, international feet, and + survey feet. + + + + + The (nominal) minimum distance between + the 'y' or row values of two adjacent points, expressed + in Planar Distance Units of measure. Planar Distance + Units of measure are units for distances whose domain + values are meters, international feet, and survey + feet. + + + + + + + + + The name of the systematic + representation of all or part of the surface of the Earth + on a plane or developable surface. + + + + + + + + + + + This is a data modeling logical + reference to a map projection. + + + + + + + + + + + + + This entity stores collections' coordinate + system reference information include description of the + system and geo-reference information, the name of the map + projection [the systematic representation of all or part of + the surface of the Earth on a plane or developable surface], + a logical pointer to the map projection details, the + description of the coordinate system and geo-reference + information, and the resolutions units, direction, and + meridian for the planar coordinate system + etc. + + + + + The reference ID of the planar + coordinate system. This ID is unique per data + provider. + + + + + + + + + + + + + + + + + This attribute contains the name of + the grid coordinate system. + + + + + + + + + + + + + + This entity indicates the periodic duration + units. + + + + + + + + + + A list of fields that can be updated on a + collection. + + + + + A single field to be + updated. + + + + + + + A field to be updated in a collection. Not + all fields of a collection support partial updates. If an + update is required for a non-supported field, perform a + complete collection replacement rather than a partial + metadata update. + + + + + + Adds a link to the browse image with + the specified ProviderBrowseId. + + + + + Adds a link to the browse image with + the specified ProviderBrowseUrl. + + + + + + Updates the visible flag of the + collection. Refer to the Collection documentation for + more information. + + + + + Updates the temporal information for + the collection. The entire temporal information will be + replaced during an add. Refer to the Collection + documentation for more information. + + + + + Updates the delete time of the + collection. Refer to the Collection documentation for + more information. + + + + + Updates the restriction flag of the + collection. Refer to the Collection documentation for + more information. + + + + + Updates the spatial coverage for the + collection. The entire spatial coverage will be replaced + during an add. Refer to the Collection documentation for + more information. + + + + + Adds a science keyword to a collection. + Duplicate science keywords are allowed in a collection. + Refer to the Collection documentation for more + information. + + + + + + + A list of fields to be deleted from a + collection. + + + + + A single field to be deleted from a + collection. + + + + + + + The field that should be deleted. Some + fields require a value to indicate the key of the field to + the correct instance can be identified. + + + + + Deletes a link to the browse image with + the specified ProviderBrowseId. + + + + + Indicates that all links to browse + images should be deleted from the + collections. + + + + + Deletes the temporal information from + the collection. + + + + + Deletes the remove time from the + collection. The collection will no longer be + automatically removed. + + + + + Deletes the restriction flag from the + collection. + + + + + Deletes the spatial coverage from the + collection. + + + + + Deletes all instances of given science + keyword from the collection, the given science keyword + must exactly match one or more science keyword from the + collection is order for the partial delete to be + successful. All matching instances of the given science + keyword will be deleted from the collection. A matching + science keyword case-insensitively matches all fields + from a collection science keyword. + + + + + + + A partial add to be applied to a + collection. The partial add may contain one or more fields. + If the field being added contains a unique key and the field + already exists, it will be updated or replaced, otherwise it + will be added. Refer to the individual field documentation + for details. + + + + + A reference to the collections to be + updated. + + + + + The fields that should be added to the + referenced collection. If the field already exists in the + collection, it will be updated or + replaced. + + + + + + + A partial delete to be applied to a + collection. The partial may contain one or more fields. If a + delete is attempted the value will be set to a default value. + Refer to the individual field documentation for + details. + + + + + A reference to the collections to be + updated. + + + + + The fields that should be deleted from + the collection. + + + + + + + A list of collection partial metadata + adds. + + + + + A single collection partial metadata + add. + + + + + + + A list of collection partial metadata + deletes. + + + + + A single collection partial metadata + delete. + + + + + + + A reference to a collection to be + updated. + + + + + The date this change occured in the + provider's database. If this is provided we will validate + that this date is greater than or equal to the date in + the collection. The collection's last update data will be + updated with this value. + + + + + The collection reference to be + updated. + + + + + + + A list of collections to be + updated. + + + + + + + + This entity contains the additional + attribute data types. + + + + + The parameter value type is XML + primitive string type. See + the + XML Schema specificationfor more + information. + + + + + The parameter value type is XML + primitive float type, without support for positive or + negative infinity, or not-a-number. See + the XML + Schema specificationfor more + information. + + + + + The parameter value type is XML derived + int type. See + the XML + Schema specificationfor more + information. + + + + + The parameter value type is XML + primitive boolean type. See + the + XML Schema specificationfor more + information. + + + + + The parameter value type is XML + primitive date type but with GMT timezone, meaning any + timezoned or non-timezoned value will be treated as + having GMT timezone. See + the XML + Schema specificationfor more + information. + + + + + The parameter value type is XML + primitive time type but with GMT timezone, meaning any + timezoned or non-timezoned value will be treated as + having GMT timezone. See + the XML + Schema specificationfor more + information. + + + + + The parameter value type is XML + primitive dateTime type. See + the + XML Schema specificationfor more + information. + + + + + The parameter value type is a string + that follows a provider-defined date + format. + + + + + The parameter value type is a string + that follows a provider-defined time + format. + + + + + The parameter value type is a string + that follows a provider-defined dateTime + format. + + + + +
From f722e9811e5c6b1723eace20727a5c5918a2b732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 9 Dec 2021 16:39:34 -0600 Subject: [PATCH 011/261] Delete unused file --- pyQuARC/schemas/echo10_xml.xsd | 2799 -------------------------------- 1 file changed, 2799 deletions(-) delete mode 100644 pyQuARC/schemas/echo10_xml.xsd diff --git a/pyQuARC/schemas/echo10_xml.xsd b/pyQuARC/schemas/echo10_xml.xsd deleted file mode 100644 index edfa6a22..00000000 --- a/pyQuARC/schemas/echo10_xml.xsd +++ /dev/null @@ -1,2799 +0,0 @@ - - - - - - - - - - - - - - Name of data center where this metadata - file was originated. - - - - - - - - - - - Collections to be inserted or - replaced. - - - - - Partial metadata adds to be applied to - collections. - - - - - Partial metadata deletes to be applied - to collections. - - - - - Collections that should be immediately - deleted. To set a future delete time, use a partial - metadata update. - - - - - Collections to be verified. Each - collection supplied will be matched with the current - instance in ECHO in order to find any metadata - mismatches. The supplied collections will then be - inserted (if a collection is missing from ECHO) or - replaced (resolving any metadata - mismatches). - - - - - All of the collections that should - exist for a provider in ECHO. ECHO will determine any - collections that are missing from ECHO or should not - exist in ECHO based upon the given - collections. - - - - - - - A list of collection - deletes. - - - - - - - - A list of collections. - - - - - - - - The collection inventory for a provider. An - empty CollectionReferences element represents an inventory - with no collections. - - - - - The references to collections that are - expected to exist for the provider in - ECHO - - - - - - - -

This entity contains brief description of collections - including the dataset identifier, short and long names, and - the version of the collection. The dataset identifier is - the primary identifier used by ECHO to identify a - collection. This also provides further description of the - collection to include media, revision date, usage, and - processing and archive centers etc.In this entity, the - aggregation information such as total number of granules - contained by this collection etc. are stored as well.

-

Adopted from Release B Science Data Processing Segment - (SDPS) for the ECS Project. Refer to 311-CD-008-001 May 15, - 1996.Additional fields are added to host the collection - aggregation information, price, book keeping information, - and various default setting etc. Collection's dataset ID - attribute is added to hold an alternative unique identifier - of the collection per provider.

-
-
- - - - This name will identify the short name - associated with the collection. This is the official - reference name used in identifying the contents of the - data collection. All characters must be in upper case. - The short name and version id combination must be unique - for a provider. - - - - - Version identifier of the data - collection. - - - - - - - - - - - The insert date/time the collection - entered data provider's database. This date is provided - by the data provider. - - - - - The most recent update occurred on the - data provider's database. This date is provided by the - data provider. - - - - - The date the collection is or is - planned to be deleted from the data provider's database. - This date is provided by the data provider. If this date - is in the past, the collection will be deleted during the - next automated cleanup. - - - - - This attribute will identify the long - name associated with the collection. This is the - reference name used in describing the scientific contents - of the data collection. The long name and version id must - be unique for a provider. - - - - - - - - - - - Specifies a unique name for the - collection. This is considered the primary identifier for - a collection. - - - - - - - - - - - This attribute identifies the major - emphasis of the content of the - collection. - - - - - - - - - - - This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as an OnlineResource. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. While this element is not required, NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections. For those that want to specify that a DOI is not applicable for their record use the second option. - - - - - An element to identify - non-science-quality products such as NRT data. If a - collection does not contain this field, it will be - assumed to be of science-quality. - - - - - - All EOS and non-EOS data and - data products that are archived - by EOSDIS. - - - - - Data from the source that are - available for use within a time that is short in - comparison to important time scales in the phenomena - being studied. This data is not science quality and - is not retained by EOSDIS once the SCIENCE_QUALITY - product is archived - - - - - Any EOS and non-EOS data and data - products, that are not SCIENCE_QUALITY and do not - fall under NEAR_REAL_TIME holdings. - - - - - - - - The indication of whether this - collection is orderable. - - - - - -

Indication of whether the collection is visible or - not. Visibility is a basic access control mechanism - that bypasses all ACL rules. If a collection is not - visible, only users with the owning provider role will - be able to see the item. All other users will not see - the item no matter what ACL permissions are in - place.

-

If group based permissions are needed, use the - restriction flag field instead of visibility. Normally - visibility is used when an item is first ingested. - Making the item not visible allows the provider time to - install any ACL rules or order options required before - users will see the item. Visibility is more commonly - set at the collection level than the granule level. If - a collection is not visible, none of the granules in - the collection will be visible.

-
-
-
- - - Represents the date and possibly the - time that this directory entry was created or the latest - date and time of its modification or - update. - - - - - This attribute describes how this - collection or granule may be best used to support earth - science/global change research. - - - - - - - - - - - Center where collection was or is being - processed. - - - - - - - - - - - The processing level class contains the - level identifier and level description of the - collection. - - - - - - - - - - - Description of Processing - Level. - - - - - - - - - - - Center where collection is - archived. - - - - - - - - - - - A brief description of the differences - between this collection version and another collection - version. - - - - - - - - - - - The recommended reference to be used - when referring to this collection in publications. Its - format is free text, but should include: Originator (the - name of an organization or individual that developed the - data set, where Editor(s)' names are followed by (ed.) - and Compiler(s)' names are followed by (comp.)); - Publication date (the date of publication or release of - the data set); Title (the name by which document can be - referenced). - - - - - - - - - - - This attribute describes the state of - the collection, whether it is planned but not yet - existent, partially complete due to continual additions - from remotely sensed data/processing/reprocessing, or is - considered a complete product/dataset. - - - - - - - - - - - The frequency with which changes and - additions are made to the collection after the initial - dataset begins to be - collected/processed. - - - - - - - - - - - A numerical value indicates the type of - restriction that applies on this - collection. - - - - - Restrictions and legal prerequisites - for accessing the collection. These include any access - constraints applied to assure the protection of privacy - or intellectual property, and any special restrictions or - limitations on obtaining the collection. These - restrictions differ from Use Restrictions in that they - only apply to access. - - - - - - - - - - - - The price for ordering the - collection. - - - - - - - - - - - - - This attribute specifies a word or - phrase which serves to summarize the spatial regions - covered by the collection. It may be repeated if several - regions are covered. This often occurs when a collection - is described as covering some large region, and several - smaller sub regions within that - region. - - - - - This attribute specifies a word or - phrase which serves to summarize the temporal - characteristics referenced in the - collection. - - - - - - - - - - - - - - This entity defines the two dimensional - coordinate systems for the collection. The two - dimensional coordinate system information is an - alternative way to express spatial coverage. Granules in - the collection that specify two dimensional coordinate - data must conform to one of the systems defined by the - collection. - - - - - - - - - - - - - - The list of browse images associated - with this collection. - - - - - The list of browse image urls - associated with this collection. - - - -
-
- - - - - This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection. - - - - - - - - - - - - - This element holds the actual license text. If this element is used the LicenseUrl element cannot be used. - - - - - - - - - - - - - - - - - - - This entity is used to define - characteristics. - - - - - The name of the characteristic - attribute. - - - - - - - - - - - Description of the Characteristic - attribute. - - - - - - - - - - - The datatype of the - Characteristic/attribute. - - - - - - - - - - - Units associated with the - Characteristic attribute value. - - - - - - - - - - - The value of the Characteristic - attribute. - - - - - - - - - - - - - - - - - - This entity provides the common - characteristics of the algorithms used in product generation. - These characteristics include the algorithm package name, - date, version, maturity code and generating system - characteristics for the package. - - - - - This attribute is the name given to the - complete delivered package submitted for algorithm - integration and test. - - - - - - - - - - - This attribute specifies the version of - the full package being delivered. - - - - - - - - - - - The description of the algorithm - package. - - - - - - - - - - - - - - - - - - This entity contains attributes describing - the scientific endeavor(s) to which the collection is - associated. Scientific endeavors include campaigns, projects, - interdisciplinary science investigations, missions, field - experiments, etc. - - - - - The unique identifier by which a - campaign/project/experiment is known. The campain/project - is the scientific endeavor associated with the - acquisition of the collection. Collections may be - associated with multiple campaigns. - - - - - - - - - - - The expanded name of the - campaign/experiment (e.g. Global climate observing - system). - - - - - - - - - - - The starting date of the - campaign. - - - - - The ending data of the - campaign. - - - - - - - - - - - - This entity is used to describe collections - associated with the instance of a collection; i.e., the name - and other details of input collections, collections - associated (in science data terms) with the instance and/or - collections dependent on the collection in some - way. - - - - - The short name of an input collection - and/or a dependent collection that is somehow associated - with this collection. - - - - - The version of an input collection - and/or a dependent collection that is somehow associated - with this collection. - - - - - - - - - - - The type of the association whether an - input type, or dependent type etc. - - - - - - - - - - - Explanation of how the associated - collection is used for this - collection. - - - - - - - - - - - - - - - - - - This entity stores the description of the - data organization of the collection (i.e. a generalized - collection Description in terms of internal structure). There - are many possible structures. All should be describable by - one of the PrimaryCSDTs (fixed domain), but the specific - implementation has an unbounded domain indicating the range - at the lower structured level. While many CSDTs may exist in - a granule, only the primary or dominant CSDT is described - (e.g. PrimaryCSDT = swath, Implementation = HDF-EOS). The - indirect reference is used for collection specific data - organization labels. A comment field is provided for further - explanation. - - - - - The name of the CSDT type of data - organization (data type and sub type). Computer Science - Data Types are the physical storage types required to - support Earth Science Data Types(ESDTs), the logical - objects seen in pyramid views. - - - - - - - - - - - The name of the implemented form of the - CSDT (standard formats, industry standards etc.), - including lowest level object - description. - - - - - - - - - - - A free text field for the user to add - comments clarifying the data - structure. - - - - - - - - - - - Name of object by which data are - organized. Name is the ESDT related or other local name - other than the formal CSDT reference. i.e. 2.5 degree - bins for CERES, 5 degree bins for CERES, and source - packets for level 0. - - - - - - - - - - - - - - - - - - This entity stores the product specific - attributes (i.e. attributes used to describe the unique - characteristics of the collection which extend beyond those - defined in this model). - - - - - - - - - - - - - Data type of parameter - value - - - - - This attribute provides a description - for the additional_attribute_name. - - - - - - - - - - - This attribute will be used to identify - the smallest unit increment to which the parameter value - is measured. - - - - - - - - - - - This attribute provides the minimum - value of parameter over whole - collection. - - - - - - - - - - - This attribute provides the maximum - value of parameter over whole - collection. - - - - - - - - - - - The standard unit of measurement for a - not-core attribute. AVHRR: unit of geophysical - parameter-units of geophysical - parameter. - - - - - - - - - - - An estimate of the accuracy of the - assignment of attribute value. AVHRR: Measurement error - or precision-measurement error or precision of a data - product parameter. This can be specified in percent or - the unit with which the parameter is - measured. - - - - - - - - - - - This defines the method used for - determining the parameter value accuracy that is given - for this non core attribute. - - - - - - - - - - - This attribute contains the value of - the product specific attribute (additional attribute) for - all granules across a given collection - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This entity describes the relevant - platforms associated with the acquisition of the collection - or granule. For example, Platforms may include (but are not - limited to): ADEOS-II, AEM-2, AM-1, Aqua, Aura, BALLOONS, - BUOYS, C-130, DEM, DMSP-F1, ERS-1, GOES-10, LANDSAT-1, - METEOSAT-2, NIMBUS-2, NOAA-6, TERRA, TRMM, - etc. - - - - - The unique platform name. (e.g. - GOES-8). - - - - - - - - - - - The expanded or long name of the - platform associated with an - instrument. - - - - - - - - - - - The most relevant platform - type. - - - - - - - - - - - The characteristics of platform - specific attributes. The characteristic names must be - unique on this platform; however the names do not have to - be unique across platforms. - - - - - - - - - - - - - This entity registers the device used to - measure or record data, including direct human observation. - In cases where instruments have a single sensor or the - instrument and sensor are used synonymously (e.g. AVHRR) the - both Instrument and Sensor should be recorded. The Sensor - information is represented by some other - entities. - - - - - The unique identifier of an - instrument. - - - - - - - - - - - The expanded name of the primary - sensory instrument. (e.g. Advanced Spaceborne Thermal - Emission and Reflective Radiometer, Clouds and the - Earth's Radiant Energy System, Human - Observation). - - - - - - - - - - - The expanded name of the primary - sensory instrument. (e.g. Advanced Spaceborne Thermal - Emission and Reflective Radiometer, Clouds and the - Earth's Radiant Energy System, Human - Observation). - - - - - - - - - - - Number of sensors used on the - instrument when acquire the granule - data. - - - - - The characteristics of this instrument - expressed as custom attributes. The characteristic names - must be unique on this instrument; however the names do - not have to be unique across - instruments. - - - - - - The operation mode applied on the - instrument when acquire the granule - data. - - - - - - - - - - - - This entity holds the referential - information for collection source/sensor configuration - including sensor parameters setting such as technique - etc. - - - - - Short name of the - sensor. - - - - - - - - - - - - - - - - - - - Technique applied for this sensor in - the configuration. - - - - - - - - - - - The characteristics of this sensor - expressed as custom attributes. The characteristic names - must be unique on this sensor; however the names do not - have to be unique across sensors. - - - - - - - - - - - - This entity holds cross reference between - collections and science keywords. - - - - - Keyword used to describe the general - category of the collection. A collection can conceivably - cover several categories. - - - - - - - - - - - Keyword used to describe the general - topic area of the collection. A collection can - conceivably cover several topics. - - - - - - - - - - - Keyword used to describe the science - parameter area of the collection. A collection can - conceivably cover many such - parameters. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The collection's DIF (Directory Interchange - Format) identifier(s). - - - - - - - - Unique identifier of the DIF (Directory - Interchange Format). - - - - - - - - This entity contains records, which - describe the basis of the time system used for a specific - collection. - - - - - This attribute provides the time system - which the values found in temporal subclasses - represent. - - - - - - - - - - - This attribute specifies the type of - date represented by the value in the date attributes of - the temporal subclasses. - - - - - - - - - - - This attribute tells the system and - ultimately the end user how temporal coverage is - specified for the collection. - - - - - - - - - - - The precision (position in number of - places to right of decimal point) of seconds used in - measurement. - - - - - This attribute will denote that a data - collection which covers, temporally, a discontinuous - range, currently ends at the present date. This way, the - granules, which comprise the data collection, that are - continuously being added to inventory need not update the - data collection metadata for each one. - - - - - - - - - - - - This entity contains the name of the - temporal period in addition to the date, time, duration unit, - and value, and cycle duration unit and value. Used at the - collection level to describe a collection having granules, - which cover a regularly occurring period. - - - - - The name given to the recurring time - period. e.g. 'spring - north hemi.' - - - - - - - - - - - This attribute provides the date (day - and time) of the first occurrence of this regularly - occurring period which is relevant to the collection, - granule, or event coverage. - - - - - - The unit specification for the period - duration. - - - - - The number of PeriodDurationUnits in - the RegularPeriodic period. e.g. the RegularPeriodic - event 'Spring-North Hemi' might have a - PeriodDurationUnit='MONTH' PeriodDurationValue='3' - PeriodCycleDurationUnit='YEAR' - PeriodCycleDurationValue='1' indicating that Spring-North - Hemi lasts for 3 months and has a cycle duration of 1 - year. The unit for the attribute is the value of the - attribute PeriodDurationValue. - - - - - The unit specification of the period - cycle duration. - - - - - - - - - - - - - Defines a named two dimensional coordinate - system for the collection. - - - - - Defines the name of the Two Dimensional - coordinate System. Must be unique within a - collection. - - - - - - - - - - - Defines the horizontal - coordinate. - - - - - Defines the vertical - coordinate. - - - - - - - Defines the minimum and maximum value for - one dimension of a two dimensional - coordinate. - - - - - - - - - This entity contains collection's spatial - coverage information. - - - - - This attribute denotes whether the - collection's spatial coverage requires horizontal, - vertical, or both in the spatial domain and coordinate - system definitions. - - - - - - - - - - - - - - - - - - - - This entity holds collection horizontal - spatial coverage data. - - - - - The appropriate numeric or alpha code - used to identify the various zones in this grid - coordinate system. - - - - - - - - - - - - - - - - - - - - - - - - - Orbit parameters for the collection used by - the Orbital Backtrack Algorithm. - - - - - Width of the swath at the equator in - Kilometers. - - - - - Orbital period in decimal - minutes. - - - - - Inclination of the orbit. This is the - same as (180-declination) and also the same as the - highest latitude achieved by the satellite. Data Unit: - Degree. - - - - - Indicates the number of - orbits. - - - - - The latitude start of the orbit - relative to the equator. This is used by the backtrack - search algorithm to treat the orbit as if it starts from - the specified latitude. This is optional and will default - to 0 if not specified. - - - - - - - - - - - - This entity contains the basic - characteristics for a person or an organization type of - contact. These contacts may provide information about a - Collection, Delivered Algorithm Package, PGE or Data - Originator. System and user profile contact information is - held elsewhere. - - - - - The role of the contact (producer, - archiver, distributor or data - originator). - - - - - - - - - - - Time period when individuals can speak - to the organization or individuals. - - - - - - - - - - - Supplemental instructions on how or - when to contact the individual or - organization. - - - - - - - - - - - The organization and the member of the - organization, associated with the data set. Used in cases - where the association of the organization to the data set - is more significant than the association of the person to - the data set. - - - - - - - - - - - This entity contains the address - details for each contact. - - - - - - - - - - - - The address of the electronic mailbox - of the organization or individual. - - - - - - - - - - - - - - - - - - This entity contains the address details - for each contact. - - - - - An address line for the address, used - for mailing or physical addresses of organizations or - individuals who serve as points of - contact. - - - - - - - - - - - The city of the person or - organization. - - - - - - - - - - - The state or province of the - address. - - - - - - - - - - - The zip or other postal code of the - address. - - - - - - - - - - - The country of the - address. - - - - - - - - - - - - - - - - - - This entity contains the telephone details - associated with the contact. - - - - - Number of the organization or - individual who is point of contact. The general format of - the number includes country, area, and STD codes, as - required for the full telephone number. Multi-extensions - should be single entries rather than part of a single - entry text. - - - - - - - - - - - The type of telephone number being - provided in this instance of the phone number, in order - to reach the organization or individual who serves as a - point of contact. - - - - - - - - - - - - - - - - - - This entity contains the contact person's - name and position. In some instances, Contact Person is the - primary point of contact. - - - - - First name of the individual which the - contact role (producer, archiver, distributor, or data - originator) applies. People are points of contact, rather - than organizations, in cases where the association of the - person to the data set is more significant than the - association of the organization to the data set. They may - also be included if both a single person and organization - are provided as points of contact. - - - - - - - - - - - Middle name of the individual which the - contact role (producer, archiver, distributor, or data - originator) applies. - - - - - - - - - - - Last name of the individual which the - contact role (producer, archiver, distributor, or data - originator) applies. - - - - - - - - - - - The title of the individual, i.e. Team - Leader, Principal Investigator. - - - - - - - - - - - - - - - - - - - The reference frame or system from which - altitude or depths are measured. The term 'altitude' is used - instead of the common term 'elevation' to conform to the - terminology in Federal Information Processing Standards 70-1 - and 173. The information contains the datum name, distance - units and encoding method, which provide the definition for - the system. - - - - - The identification given to the level - surface taken as the surface of reference from which - measurements are compared. - - - - - - - - - - - The recorded units - - - - - - - - - - - The means used to encode - measurements. - - - - - - - - - - - This entity stores a list of - resolutions. - - - - - - - - - This entity stores the minimum distance - possible between two adjacent values, expressed in - distance units of measure for - collection. - - - - - - - - - - - - - - - - - - - The identification given to the - reference system used for defining the coordinates of - points. - - - - - - - - - - - Identification given to established - representation of the Earth's shape. - - - - - - - - - - - Radius of the equatorial axis of the - ellipsoid. - - - - - The ratios of the Earth's major axis to - the difference between the major and the - minor. - - - - - - - - - Units of measure used for the geodetic - latitude and longitude resolution values. For lat, a 2 - digit decimal number from 0-90; for lon, a 3 digit - decimal number from 0-180. + or absence of - for values - north of equator or values west of prime meridian; - for - all others. - - - - - - - - - - - The minimum difference between two - adjacent latitude values expressed in Geographic - Coordinate Units of measure. - - - - - The minimum difference between two - adjacent longitude values expressed in Geographic - Coordinate Units of measure. - - - - - - - - - This class contains a description of - the coordinate system and geo-reference - information. - - - - - - - - - - - A description of the information - provided to register the local system to the Earth (e.g. - control points, satellite ephemeral data, and inertial - navigation data). - - - - - - - - - - - - - This entity stores the reference frame or - system from which altitudes (elevations) are measured. The - information contains the datum name, distance units and - encoding method, which provide the definition for the system. - This table also stores the characteristics of the reference - frame or system from which depths are measured. The - additional information in the table are geometry reference - data etc. - - - - - This attribute denotes whether the - locality/coverage requires horizontal, vertical, or both - in the spatial domain and coordinate system - definitions. - - - - - - - - - - - - - - - - - - - - - - Units of measure used for planar - coordinate description distances. - - - - - - - - - - - The means used to represent horizontal - positions in the planar coordinate - system. - - - - - - - - - - - - - - - - - - - The minimum distance measurable between - two points, expressed in Planar Distance Units of - measure. - - - - - The minimum angle measurable between - two points, expressed in Bearing Units of - measure. - - - - - Units of measure used for - angles. - - - - - - - - - - - Direction from which the bearing is - measured clockwise. - - - - - - - - - - - Axis from which the bearing is - measured. - - - - - - - - - - - - - - - The (nominal) minimum distance between - the 'x' or column values of two adjacent points, - expressed in Planar Distance Units of measure. Planar - Distance Units of measure are units used for distances - whose domain values are meters, international feet, and - survey feet. - - - - - The (nominal) minimum distance between - the 'y' or row values of two adjacent points, expressed - in Planar Distance Units of measure. Planar Distance - Units of measure are units for distances whose domain - values are meters, international feet, and survey - feet. - - - - - - - - - The name of the systematic - representation of all or part of the surface of the Earth - on a plane or developable surface. - - - - - - - - - - - This is a data modeling logical - reference to a map projection. - - - - - - - - - - - - - This entity stores collections' coordinate - system reference information include description of the - system and geo-reference information, the name of the map - projection [the systematic representation of all or part of - the surface of the Earth on a plane or developable surface], - a logical pointer to the map projection details, the - description of the coordinate system and geo-reference - information, and the resolutions units, direction, and - meridian for the planar coordinate system - etc. - - - - - The reference ID of the planar - coordinate system. This ID is unique per data - provider. - - - - - - - - - - - - - - - - - This attribute contains the name of - the grid coordinate system. - - - - - - - - - - - - - - This entity indicates the periodic duration - units. - - - - - - - - - - A list of fields that can be updated on a - collection. - - - - - A single field to be - updated. - - - - - - - A field to be updated in a collection. Not - all fields of a collection support partial updates. If an - update is required for a non-supported field, perform a - complete collection replacement rather than a partial - metadata update. - - - - - - Adds a link to the browse image with - the specified ProviderBrowseId. - - - - - Adds a link to the browse image with - the specified ProviderBrowseUrl. - - - - - - Updates the visible flag of the - collection. Refer to the Collection documentation for - more information. - - - - - Updates the temporal information for - the collection. The entire temporal information will be - replaced during an add. Refer to the Collection - documentation for more information. - - - - - Updates the delete time of the - collection. Refer to the Collection documentation for - more information. - - - - - Updates the restriction flag of the - collection. Refer to the Collection documentation for - more information. - - - - - Updates the spatial coverage for the - collection. The entire spatial coverage will be replaced - during an add. Refer to the Collection documentation for - more information. - - - - - Adds a science keyword to a collection. - Duplicate science keywords are allowed in a collection. - Refer to the Collection documentation for more - information. - - - - - - - A list of fields to be deleted from a - collection. - - - - - A single field to be deleted from a - collection. - - - - - - - The field that should be deleted. Some - fields require a value to indicate the key of the field to - the correct instance can be identified. - - - - - Deletes a link to the browse image with - the specified ProviderBrowseId. - - - - - Indicates that all links to browse - images should be deleted from the - collections. - - - - - Deletes the temporal information from - the collection. - - - - - Deletes the remove time from the - collection. The collection will no longer be - automatically removed. - - - - - Deletes the restriction flag from the - collection. - - - - - Deletes the spatial coverage from the - collection. - - - - - Deletes all instances of given science - keyword from the collection, the given science keyword - must exactly match one or more science keyword from the - collection is order for the partial delete to be - successful. All matching instances of the given science - keyword will be deleted from the collection. A matching - science keyword case-insensitively matches all fields - from a collection science keyword. - - - - - - - A partial add to be applied to a - collection. The partial add may contain one or more fields. - If the field being added contains a unique key and the field - already exists, it will be updated or replaced, otherwise it - will be added. Refer to the individual field documentation - for details. - - - - - A reference to the collections to be - updated. - - - - - The fields that should be added to the - referenced collection. If the field already exists in the - collection, it will be updated or - replaced. - - - - - - - A partial delete to be applied to a - collection. The partial may contain one or more fields. If a - delete is attempted the value will be set to a default value. - Refer to the individual field documentation for - details. - - - - - A reference to the collections to be - updated. - - - - - The fields that should be deleted from - the collection. - - - - - - - A list of collection partial metadata - adds. - - - - - A single collection partial metadata - add. - - - - - - - A list of collection partial metadata - deletes. - - - - - A single collection partial metadata - delete. - - - - - - - A reference to a collection to be - updated. - - - - - The date this change occured in the - provider's database. If this is provided we will validate - that this date is greater than or equal to the date in - the collection. The collection's last update data will be - updated with this value. - - - - - The collection reference to be - updated. - - - - - - - A list of collections to be - updated. - - - - - - - - This entity contains the additional - attribute data types. - - - - - The parameter value type is XML - primitive string type. See - the - XML Schema specificationfor more - information. - - - - - The parameter value type is XML - primitive float type, without support for positive or - negative infinity, or not-a-number. See - the XML - Schema specificationfor more - information. - - - - - The parameter value type is XML derived - int type. See - the XML - Schema specificationfor more - information. - - - - - The parameter value type is XML - primitive boolean type. See - the - XML Schema specificationfor more - information. - - - - - The parameter value type is XML - primitive date type but with GMT timezone, meaning any - timezoned or non-timezoned value will be treated as - having GMT timezone. See - the XML - Schema specificationfor more - information. - - - - - The parameter value type is XML - primitive time type but with GMT timezone, meaning any - timezoned or non-timezoned value will be treated as - having GMT timezone. See - the XML - Schema specificationfor more - information. - - - - - The parameter value type is XML - primitive dateTime type. See - the - XML Schema specificationfor more - information. - - - - - The parameter value type is a string - that follows a provider-defined date - format. - - - - - The parameter value type is a string - that follows a provider-defined time - format. - - - - - The parameter value type is a string - that follows a provider-defined dateTime - format. - - - - -
From d56331b5cb2eeccb679a9b05e7bcd32bede1518c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 9 Dec 2021 16:56:29 -0600 Subject: [PATCH 012/261] Fix rule_mapping errors --- pyQuARC/schemas/rule_mapping.json | 303 +++++++++++++----------------- 1 file changed, 134 insertions(+), 169 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 1211e9af..99212179 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -375,60 +375,58 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/MetadataDate/Date" ] }, -{ + { "fields": [ "UMM/AdditionalAttribute/UpdateDate" ] }, -{ + { "fields": [ "UMM/TemporalExtent/RangeDateTime/BeginningDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/RangeDateTime/EndingDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/SingleDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/PeriodicDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/PeriodicDateTime/StartDate" ] }, -{ + { "fields": [ "UMM/TemporalExtent/PeriodicDateTime/EndDate" ] }, -{ + { "fields": [ "UMM/PaleoTemporalCoverage/PaleoStartDate" ] }, -{ + { "fields": [ "UMM/PaleoTemporalCoverage/PaleoEndDate" ] } - ] - }, "severity": "error" }, @@ -487,39 +485,35 @@ "fields": [ "DIF/Related_URL/URL" ] - }, -], -"umm-json": [ + } + ], + "umm-json": [ { "fields": [ "UMM/DataCenters/ContactInformation/RelatedURLs/Url" ] }, -{ + { "fields": [ "UMM/DataCenters/ContactPerson/ContactInformation/RelatedURLs/Url" ] - } -, -{ + }, + { "fields": [ "UMM/DataCenters/ContactGroup/ContactInformation/RelatedURLs/Url" ] - } -, -{ + }, + { "fields": [ "UMM/ContactPerson/ContactInformation/RelatedURLs/Url" ] - } -, -{ + }, + { "fields": [ "UMM/ContactGroup/ContactInformation/RelatedURLs/Url" ] - } -, -{ + }, + { "fields": [ "UMM/RelatedUrl/URL" ] @@ -815,7 +809,7 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/DataDate/Date" @@ -826,20 +820,17 @@ "UMM/DataDate/Type=DELETE" ] }, -{ + { "fields": [ "UMM/MetadataDate/Date" ] }, -{ + { "fields": [ "UMM/MetadataDate/Type=DELETE" ] } - - ] - }, "data": [ "now", @@ -909,7 +900,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/CollectionProgress" @@ -1163,34 +1154,34 @@ "DIF/Platform/Characteristics/DataType" ] } - ] -, + ], "umm-json": [ { "fields": [ "UMM/AdditionalAttribute/DataType" ] }, -{ + { "fields": [ "UMM/RelatedUrl/GetService/DataType" ] }, -{ + { "fields": [ "UMM/Platform/Characteristics/DataType " ] }, -{ + { "fields": [ "UMM/Platform/Instrument/Characteristics/DataType" ] }, -{ + { "fields": [ "UMM/Platform/Instrument/ComposedOf/Characteristics/DataType" ] - } ] + } + ] }, "data": [ [ @@ -1514,20 +1505,20 @@ ] } ], - “umm-json”: [ + "umm-json": [ { - “fields”: [ - “Platform/Characteristics/Name” - ] + "fields": [ + "Platform/Characteristics/Name" + ] }, { - “fields”: [ - “Platform/Instrument/Characteristics/Name” + "fields": [ + "Platform/Instrument/Characteristics/Name" ] }, { - “fields”: [ - “Platform/Instrument/ComposedOf/Characteristics/Name” + "fields": [ + "Platform/Instrument/ComposedOf/Characteristics/Name" ] } ] @@ -1576,7 +1567,7 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/Platform/Instrument/Characteristics/Description" @@ -1587,13 +1578,12 @@ "UMM/Platform/Instrument/ComposedOf/Characteristics/Description" ] }, - -{ + { "fields": [ "UMM/Platform/Characteristics/Description" ] - }, ], - + } + ] }, "data": [ 2048, @@ -1639,20 +1629,20 @@ ] } ], - “umm-json”: [ + "umm-json": [ { - “fields”: [ - “Platform/Characteristics/Unit” + "fields": [ + "Platform/Characteristics/Unit" ] }, - { - “fields”: [ - “Platform/Instrument/Characteristics/Unit” + { + "fields": [ + "Platform/Instrument/Characteristics/Unit" ] }, { - “fields”: [ - “Platform/Instrument/ComposedOf/Characteristics/Unit” + "fields": [ + "Platform/Instrument/ComposedOf/Characteristics/Unit" ] } ] @@ -1691,20 +1681,20 @@ ] } ], - “umm-json”: [ + "umm-json": [ { - “fields”: [ - “Platform/Characteristics/Value” + "fields": [ + "Platform/Characteristics/Value" ] }, { - “fields”: [ - “Platform/Instrument/Characteristics/Value” + "fields": [ + "Platform/Instrument/Characteristics/Value" ] }, { - “fields”: [ - “Platform/Instrument/ComposedOf/Characteristics/Value” + "fields": [ + "Platform/Instrument/ComposedOf/Characteristics/Value" ] } ] @@ -1871,7 +1861,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/DataCenters/ShortName" @@ -1892,7 +1882,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/DataCenters/LongName" @@ -1972,8 +1962,8 @@ "DIF/Platform/Instrument/Sensor/Long_Name" ] ] - }, - + } + ], "umm-json": [ { "fields": [ @@ -2007,7 +1997,6 @@ ] ] } - ] }, "severity": "error" @@ -2219,7 +2208,7 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/LocationKeywords/Category" @@ -2246,7 +2235,6 @@ ] } ] - }, "severity": "error", "check_id": "spatial_keyword_gcmd_check" @@ -2265,7 +2253,7 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/LocationKeywords/Category", @@ -2276,7 +2264,6 @@ ] } ] - }, "severity": "error", "check_id": "location_gcmd_check" @@ -2348,7 +2335,7 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/Project/ShortName", @@ -2366,7 +2353,6 @@ ] } ] - }, "severity": "error", "check_id": "campaign_short_long_name_consistency_check" @@ -2506,14 +2492,13 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/DataCenters/ShortName" ] } ] - }, "severity": "info", "check_id": "presence_check" @@ -2541,16 +2526,13 @@ ] } ], - “umm-json”: [ + "umm-json": [ { - “fields”: [ - “SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate”, - -“SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/NorthBoundingCoordinate”, - -“SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/EastBoundingCoordinate”, - -“SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/SouthBoundingCoordinate” + "fields": [ + "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate", + "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/NorthBoundingCoordinate", + "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/EastBoundingCoordinate", + "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/SouthBoundingCoordinate" ] } ] @@ -2650,14 +2632,13 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/SpatialExtent/VerticalSpatialDomain/Unit" ] } ] - }, "data": [ [ @@ -2688,14 +2669,13 @@ ] } ], -"umm": [ + "umm": [ { "fields": [ "UMM/SpatialExtent/VerticalSpatialDomain/Unit" ] } ] - }, "data": [ [ @@ -2910,7 +2890,8 @@ "DIF/Spatial_Coverage/Geometry/GPolygon", "DIF/Spatial_Coverage/Geometry/Line" ] - }, + } + ], "umm-json": [ { "fields": [ @@ -3142,7 +3123,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/RelatedUrl/Type" @@ -3164,11 +3145,11 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/RelatedUrl/Type", -"UMM/RelatedUrl/Url" + "UMM/RelatedUrl/Url" ] } ] @@ -3186,7 +3167,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/Platform/Characteristics" @@ -3223,7 +3204,8 @@ "UMM/ShortName" ] } - ] }, + ] + }, "severity": "warning", "check_id": "validate_ending_datetime_against_granules" }, @@ -3253,7 +3235,7 @@ "UMM/ShortName" ] } - ] + ] }, "severity": "warning", "check_id": "validate_beginning_datetime_against_granules" @@ -3291,7 +3273,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/ISOTopicCategory" @@ -3433,21 +3415,19 @@ { "fields": [ "UMM/PublicationReference/OnlineResource/Protocol" - ] }, -{ + { "fields": [ "UMM/RelatedUrl/GetService/Protocol" - ] }, -{ + { "fields": [ "UMM/ResourceCitation/OnlineResource/Protocol" - ] } + ], }, "data": [ "FTP", @@ -3466,17 +3446,15 @@ "DIF/Entry_ID/Version" ], "relation": "eq" - }] -, + } + ], "umm-json": [ { "fields": [ "UMM/ResourceCitation/Version", -"UMM/Version" - + "UMM/Version" ] } - ] }, "severity": "info", @@ -3527,58 +3505,57 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/MetadataDate/Date" ] }, -{ + { "fields": [ "UMM/AdditionalAttribute/UpdateDate" ] }, -{ + { "fields": [ "UMM/TemporalExtent/RangeDateTime/BeginningDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/RangeDateTime/EndingDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/SingleDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/PeriodicDateTime" ] }, -{ + { "fields": [ "UMM/TemporalExtent/PeriodicDateTime/StartDate" ] }, -{ + { "fields": [ "UMM/TemporalExtent/PeriodicDateTime/EndDate" ] }, -{ + { "fields": [ "UMM/PaleoTemporalCoverage/PaleoStartDate" ] }, -{ + { "fields": [ "UMM/PaleoTemporalCoverage/PaleoEndDate" ] } - ] }, "data": [ @@ -3625,7 +3602,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/RelatedURL/Description", @@ -3633,7 +3610,6 @@ ] } ] - }, "severity": "info", "check_id": "availability_check" @@ -3648,7 +3624,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/RelatedUrl/GetData", @@ -3670,7 +3646,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/SpatialRepresentationInfo/Horizontal_Resolution_Range" @@ -3691,7 +3667,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/SpatialRepresentationInfo/Vertical_Resolution_Range" @@ -3765,19 +3741,15 @@ ] } ], - “umm-json”: [ + "umm-json": [ { - “fields”: [ -“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Eon”, - -“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Era”, - -“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Period”, - -“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Epoch”, - -“UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Stage” - ] + "fields": [ + "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Eon", + "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Era", + "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Period", + "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Epoch", + "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Stage" + ] } ] }, @@ -3795,7 +3767,7 @@ ] } ], -"umm-json": [ + "umm-json": [ { "fields": [ "UMM/Platform/Instrument/NumberOfInstruments", @@ -3883,25 +3855,25 @@ ] } ], - “umm-json”: [ - { - “fields”: [ - “UMM/Platform/Characteristics/DataType”, - “UMM/Platform/Characteristics” - ] - }, - { - “fields”: [ - “UMM/Platform/Instrument/Characteristics/DataType”, - “UMM/Platform/Instrument/Characteristics” - ] - }, - { - “fields”: [ - “UMM/Platform/Instrument/ComposedOf/Characteristics/DataType”, - “UMM/Platform/Instrument/ComposedOf/Characteristics” - ] - } + "umm-json": [ + { + "fields": [ + "UMM/Platform/Characteristics/DataType", + "UMM/Platform/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/Characteristics/DataType", + "UMM/Platform/Instrument/Characteristics" + ] + }, + { + "fields": [ + "UMM/Platform/Instrument/ComposedOf/Characteristics/DataType", + "UMM/Platform/Instrument/ComposedOf/Characteristics" + ] + } ] }, "severity": "error", @@ -3967,10 +3939,3 @@ "check_id": "controlled_keywords_check" } } - - - - - - - From cd7493aa0d1e38c3e2336a942070ce3937b2bed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 9 Dec 2021 17:03:54 -0600 Subject: [PATCH 013/261] Remove a stray comma --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 99212179..75921da2 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3427,7 +3427,7 @@ "UMM/ResourceCitation/OnlineResource/Protocol" ] } - ], + ] }, "data": [ "FTP", From 721de480f52c25d90954559a36c989f35ab91626 Mon Sep 17 00:00:00 2001 From: spa0002 Date: Tue, 14 Dec 2021 11:38:49 -0600 Subject: [PATCH 014/261] removed 'UMM/' from field paths --- pyQuARC/schemas/rule_mapping.json | 426 +++++++++++++++--------------- 1 file changed, 213 insertions(+), 213 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 75921da2..753fe802 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -73,8 +73,8 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/RangeDateTime/BeginningDateTime", - "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + "TemporalExtent/RangeDateTime/BeginningDateTime", + "TemporalExtent/RangeDateTime/EndingDateTime" ], "relation": "lte" } @@ -107,8 +107,8 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/RangeDateTime/BeginningDateTime", - "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + "TemporalExtent/RangeDateTime/BeginningDateTime", + "TemporalExtent/RangeDateTime/EndingDateTime" ], "relation": "neq" } @@ -141,8 +141,8 @@ "umm-json": [ { "fields": [ - "UMM/Project/StartDate", - "UMM/Project/EndDate" + "Project/StartDate", + "Project/EndDate" ], "relation": "lte" } @@ -175,8 +175,8 @@ "umm-json": [ { "fields": [ - "UMM/Project/StartDate", - "UMM/Project/EndDate" + "Project/StartDate", + "Project/EndDate" ], "relation": "neq" } @@ -216,15 +216,15 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/PeriodicDateTime/StartDate", - "UMM/TemporalExtent/PeriodicDateTime/EndDate" + "TemporalExtent/PeriodicDateTime/StartDate", + "TemporalExtent/PeriodicDateTime/EndDate" ], "relation": "lt" }, { "fields": [ - "UMM/PaleoTemporalCoverage/PaleoStartDate", - "UMM/PaleoTemporalCoverage/PaleoEndDate" + "PaleoTemporalCoverage/PaleoStartDate", + "PaleoTemporalCoverage/PaleoEndDate" ], "relation": "lt" } @@ -378,52 +378,52 @@ "umm-json": [ { "fields": [ - "UMM/MetadataDate/Date" + "MetadataDate/Date" ] }, { "fields": [ - "UMM/AdditionalAttribute/UpdateDate" + "AdditionalAttribute/UpdateDate" ] }, { "fields": [ - "UMM/TemporalExtent/RangeDateTime/BeginningDateTime" + "TemporalExtent/RangeDateTime/BeginningDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + "TemporalExtent/RangeDateTime/EndingDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/SingleDateTime" + "TemporalExtent/SingleDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/PeriodicDateTime" + "TemporalExtent/PeriodicDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/PeriodicDateTime/StartDate" + "TemporalExtent/PeriodicDateTime/StartDate" ] }, { "fields": [ - "UMM/TemporalExtent/PeriodicDateTime/EndDate" + "TemporalExtent/PeriodicDateTime/EndDate" ] }, { "fields": [ - "UMM/PaleoTemporalCoverage/PaleoStartDate" + "PaleoTemporalCoverage/PaleoStartDate" ] }, { "fields": [ - "UMM/PaleoTemporalCoverage/PaleoEndDate" + "PaleoTemporalCoverage/PaleoEndDate" ] } ] @@ -490,32 +490,32 @@ "umm-json": [ { "fields": [ - "UMM/DataCenters/ContactInformation/RelatedURLs/Url" + "DataCenters/ContactInformation/RelatedURLs/Url" ] }, { "fields": [ - "UMM/DataCenters/ContactPerson/ContactInformation/RelatedURLs/Url" + "DataCenters/ContactPerson/ContactInformation/RelatedURLs/Url" ] }, { "fields": [ - "UMM/DataCenters/ContactGroup/ContactInformation/RelatedURLs/Url" + "DataCenters/ContactGroup/ContactInformation/RelatedURLs/Url" ] }, { "fields": [ - "UMM/ContactPerson/ContactInformation/RelatedURLs/Url" + "ContactPerson/ContactInformation/RelatedURLs/Url" ] }, { "fields": [ - "UMM/ContactGroup/ContactInformation/RelatedURLs/Url" + "ContactGroup/ContactInformation/RelatedURLs/Url" ] }, { "fields": [ - "UMM/RelatedUrl/URL" + "RelatedUrl/URL" ] } ] @@ -547,8 +547,8 @@ "umm-json": [ { "fields": [ - "UMM/EntryTitle", - "UMM/ShortName" + "EntryTitle", + "ShortName" ], "relation": "neq" } @@ -577,7 +577,7 @@ "umm-json": [ { "fields": [ - "UMM/Abstract" + "Abstract" ] } ] @@ -619,12 +619,12 @@ "umm-json": [ { "fields": [ - "UMM/DOI/DOI" + "DOI/DOI" ] }, { "fields": [ - "UMM/PublicationReferences/DOI/DOI" + "PublicationReferences/DOI/DOI" ] } ] @@ -652,7 +652,7 @@ "umm-json": [ { "fields": [ - "UMM/AdditionalAttribute/Value" + "AdditionalAttribute/Value" ] } ] @@ -687,7 +687,7 @@ "umm-json": [ { "fields": [ - "UMM/ProcessingLevel/Id" + "ProcessingLevel/Id" ] } ] @@ -735,12 +735,12 @@ "umm-json": [ { "fields": [ - "UMM/ScienceKeywords/Category", - "UMM/ScienceKeywords/Topic", - "UMM/ScienceKeywords/Term", - "UMM/ScienceKeywords/VariableLevel1", - "UMM/ScienceKeywords/VariableLevel2", - "UMM/ScienceKeywords/VariableLevel3" + "ScienceKeywords/Category", + "ScienceKeywords/Topic", + "ScienceKeywords/Term", + "ScienceKeywords/VariableLevel1", + "ScienceKeywords/VariableLevel2", + "ScienceKeywords/VariableLevel3" ] } ] @@ -773,7 +773,7 @@ "umm-json": [ { "fields": [ - "UMM/DOI/Authority" + "DOI/Authority" ] } ] @@ -812,22 +812,22 @@ "umm": [ { "fields": [ - "UMM/DataDate/Date" + "DataDate/Date" ] }, { "fields": [ - "UMM/DataDate/Type=DELETE" + "DataDate/Type=DELETE" ] }, { "fields": [ - "UMM/MetadataDate/Date" + "MetadataDate/Date" ] }, { "fields": [ - "UMM/MetadataDate/Type=DELETE" + "MetadataDate/Type=DELETE" ] } ] @@ -852,7 +852,7 @@ "umm-json": [ { "fields": [ - "UMM/DOI/MissingReason" + "DOI/MissingReason" ] } ] @@ -878,7 +878,7 @@ "umm-json": [ { "fields": [ - "UMM/ProcessingLevel/Description" + "ProcessingLevel/Description" ] } ] @@ -903,7 +903,7 @@ "umm-json": [ { "fields": [ - "UMM/CollectionProgress" + "CollectionProgress" ] } ] @@ -944,9 +944,9 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/EndsAtPresentFlag", - "UMM/TemporalExtent/RangeDateTime/EndingDateTime", - "UMM/CollectionProgress" + "TemporalExtent/EndsAtPresentFlag", + "TemporalExtent/RangeDateTime/EndingDateTime", + "CollectionProgress" ] } ] @@ -978,9 +978,9 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/EndsAtPresentFlag", - "UMM/TemporalExtent/RangeDateTime/EndingDateTime", - "UMM/CollectionProgress" + "TemporalExtent/EndsAtPresentFlag", + "TemporalExtent/RangeDateTime/EndingDateTime", + "CollectionProgress" ] } ] @@ -1001,27 +1001,27 @@ "umm-json": [ { "fields": [ - "UMM/ContactPersons/ContactInformation/ContactMechanisms/Type" + "ContactPersons/ContactInformation/ContactMechanisms/Type" ] }, { "fields": [ - "UMM/ContactGroups/ContactInformation/ContactMechanisms/Type" + "ContactGroups/ContactInformation/ContactMechanisms/Type" ] }, { "fields": [ - "UMM/DataCenters/ContactInformation/ContactMechanism/Type" + "DataCenters/ContactInformation/ContactMechanism/Type" ] }, { "fields": [ - "UMM/DataCenters/ContactGroups/ContactInformation/ContactMechanisms/Type" + "DataCenters/ContactGroups/ContactInformation/ContactMechanisms/Type" ] }, { "fields": [ - "UMM/DataCenters/ContactPerson/ContactInformation/ContactMechanism/Type" + "DataCenters/ContactPerson/ContactInformation/ContactMechanism/Type" ] } ] @@ -1058,7 +1058,7 @@ "umm-json": [ { "fields": [ - "UMM/ContactPerson/Roles" + "ContactPerson/Roles" ] } ] @@ -1097,7 +1097,7 @@ "umm-json": [ { "fields": [ - "UMM/DataCenters/Roles" + "DataCenters/Roles" ] } ] @@ -1158,27 +1158,27 @@ "umm-json": [ { "fields": [ - "UMM/AdditionalAttribute/DataType" + "AdditionalAttribute/DataType" ] }, { "fields": [ - "UMM/RelatedUrl/GetService/DataType" + "RelatedUrl/GetService/DataType" ] }, { "fields": [ - "UMM/Platform/Characteristics/DataType " + "Platform/Characteristics/DataType " ] }, { "fields": [ - "UMM/Platform/Instrument/Characteristics/DataType" + "Platform/Instrument/Characteristics/DataType" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/Characteristics/DataType" + "Platform/Instrument/ComposedOf/Characteristics/DataType" ] } ] @@ -1246,20 +1246,20 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Characteristics/Name", - "UMM/Platform/Characteristics" + "Platform/Characteristics/Name", + "Platform/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/Characteristics/Name", - "UMM/Platform/Instrument/Characteristics" + "Platform/Instrument/Characteristics/Name", + "Platform/Instrument/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/Characteristics/Name", - "UMM/Platform/Instrument/ComposedOf/Characteristics" + "Platform/Instrument/ComposedOf/Characteristics/Name", + "Platform/Instrument/ComposedOf/Characteristics" ] } ] @@ -1313,20 +1313,20 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Characteristics/Description", - "UMM/Platform/Characteristics" + "Platform/Characteristics/Description", + "Platform/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/Characteristics/Description", - "UMM/Platform/Instrument/Characteristics" + "Platform/Instrument/Characteristics/Description", + "Platform/Instrument/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/Characteristics/Description", - "UMM/Platform/Instrument/ComposedOf/Characteristics" + "Platform/Instrument/ComposedOf/Characteristics/Description", + "Platform/Instrument/ComposedOf/Characteristics" ] } ] @@ -1380,20 +1380,20 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Characteristics/Unit", - "UMM/Platform/Characteristics" + "Platform/Characteristics/Unit", + "Platform/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/Characteristics/Unit", - "UMM/Platform/Instrument/Characteristics" + "Platform/Instrument/Characteristics/Unit", + "Platform/Instrument/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/Characteristics/Unit", - "UMM/Platform/Instrument/ComposedOf/Characteristics" + "Platform/Instrument/ComposedOf/Characteristics/Unit", + "Platform/Instrument/ComposedOf/Characteristics" ] } ] @@ -1447,20 +1447,20 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Characteristics/Value", - "UMM/Platform/Characteristics" + "Platform/Characteristics/Value", + "Platform/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/Characteristics/Value", - "UMM/Platform/Instrument/Characteristics" + "Platform/Instrument/Characteristics/Value", + "Platform/Instrument/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/Characteristics/Value", - "UMM/Platform/Instrument/ComposedOf/Characteristics" + "Platform/Instrument/ComposedOf/Characteristics/Value", + "Platform/Instrument/ComposedOf/Characteristics" ] } ] @@ -1570,17 +1570,17 @@ "umm": [ { "fields": [ - "UMM/Platform/Instrument/Characteristics/Description" + "Platform/Instrument/Characteristics/Description" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/Characteristics/Description" + "Platform/Instrument/ComposedOf/Characteristics/Description" ] }, { "fields": [ - "UMM/Platform/Characteristics/Description" + "Platform/Characteristics/Description" ] } ] @@ -1774,7 +1774,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/CoordinateSystem" + "SpatialExtent/HorizontaSpatialDomain/Geometry/CoordinateSystem" ] } ] @@ -1830,7 +1830,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialExtent/GranuleSpatialRepresentation" + "SpatialExtent/GranuleSpatialRepresentation" ] } ] @@ -1864,7 +1864,7 @@ "umm-json": [ { "fields": [ - "UMM/DataCenters/ShortName" + "DataCenters/ShortName" ] } ] @@ -1885,7 +1885,7 @@ "umm-json": [ { "fields": [ - "UMM/DataCenters/LongName" + "DataCenters/LongName" ] } ] @@ -1967,33 +1967,33 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Instrument/ShortName", - "UMM/Platform/Instrument/LongName" + "Platform/Instrument/ShortName", + "Platform/Instrument/LongName" ], "dependencies": [ [ "instrument_short_name_gcmd_check", - "UMM/Platform/Instrument/ShortName" + "Platform/Instrument/ShortName" ], [ "instrument_long_name_gcmd_check", - "UMM/Platform/Instrument/LongName" + "Platform/Instrument/LongName" ] ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/ShortName", - "UMM/Platform/Instrument/ComposedOf/LongName" + "Platform/Instrument/ComposedOf/ShortName", + "Platform/Instrument/ComposedOf/LongName" ], "dependencies": [ [ "instrument_short_name_gcmd_check", - "UMM/Platform/Instrument/ComposedOf/ShortName" + "Platform/Instrument/ComposedOf/ShortName" ], [ "instrument_long_name_gcmd_check", - "UMM/Platform/Instrument/ComposedOf/LongName" + "Platform/Instrument/ComposedOf/LongName" ] ] } @@ -2031,12 +2031,12 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Instrument/ShortName" + "Platform/Instrument/ShortName" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/ShortName" + "Platform/Instrument/ComposedOf/ShortName" ] } ] @@ -2074,12 +2074,12 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Instrument/LongName" + "Platform/Instrument/LongName" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/LongName" + "Platform/Instrument/ComposedOf/LongName" ] } ] @@ -2107,7 +2107,7 @@ "umm-json": [ { "fields": [ - "UMM/Platform/ShortName" + "Platform/ShortName" ] } ] @@ -2135,7 +2135,7 @@ "umm-json": [ { "fields": [ - "UMM/Distribution/Format" + "Distribution/Format" ] } ] @@ -2163,7 +2163,7 @@ "umm-json": [ { "fields": [ - "UMM/Platform/LongName" + "Platform/LongName" ] } ] @@ -2211,27 +2211,27 @@ "umm": [ { "fields": [ - "UMM/LocationKeywords/Category" + "LocationKeywords/Category" ] }, { "fields": [ - "UMM/LocationKeywords/Type" + "LocationKeywords/Type" ] }, { "fields": [ - "UMM/LocationKeywords/Subregion1" + "LocationKeywords/Subregion1" ] }, { "fields": [ - "UMM/LocationKeywords/Subregion2" + "LocationKeywords/Subregion2" ] }, { "fields": [ - "UMM/LocationKeywords/Subregion3" + "LocationKeywords/Subregion3" ] } ] @@ -2256,11 +2256,11 @@ "umm": [ { "fields": [ - "UMM/LocationKeywords/Category", - "UMM/LocationKeywords/Type", - "UMM/LocationKeywords/Subregion1", - "UMM/LocationKeywords/Subregion2", - "UMM/LocationKeywords/Subregion3" + "LocationKeywords/Category", + "LocationKeywords/Type", + "LocationKeywords/Subregion1", + "LocationKeywords/Subregion2", + "LocationKeywords/Subregion3" ] } ] @@ -2288,7 +2288,7 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Type" + "Platform/Type" ] } ] @@ -2338,17 +2338,17 @@ "umm": [ { "fields": [ - "UMM/Project/ShortName", - "UMM/Project/LongName" + "Project/ShortName", + "Project/LongName" ], "dependencies": [ [ "campaign_short_name_gcmd_check", - "UMM/Project/ShortName" + "Project/ShortName" ], [ "campaign_long_name_gcmd_check", - "UMM/Project/LongName" + "Project/LongName" ] ] } @@ -2377,7 +2377,7 @@ "umm-json": [ { "fields": [ - "UMM/Project/ShortName" + "Project/ShortName" ] } ] @@ -2405,7 +2405,7 @@ "umm-json": [ { "fields": [ - "UMM/Project/LongName" + "Project/LongName" ] } ] @@ -2433,7 +2433,7 @@ "umm-json": [ { "fields": [ - "UMM/VersionDescription" + "VersionDescription" ] } ] @@ -2465,7 +2465,7 @@ "umm-json": [ { "fields": [ - "UMM/CollectionDataType" + "CollectionDataType" ] } ] @@ -2495,7 +2495,7 @@ "umm": [ { "fields": [ - "UMM/DataCenters/ShortName" + "DataCenters/ShortName" ] } ] @@ -2559,7 +2559,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialExtent/VerticalSpatialDomain/Type" + "SpatialExtent/VerticalSpatialDomain/Type" ] } ] @@ -2596,7 +2596,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialExtent/SpatialCoverageType" + "SpatialExtent/SpatialCoverageType" ] } ] @@ -2635,7 +2635,7 @@ "umm": [ { "fields": [ - "UMM/SpatialExtent/VerticalSpatialDomain/Unit" + "SpatialExtent/VerticalSpatialDomain/Unit" ] } ] @@ -2672,7 +2672,7 @@ "umm": [ { "fields": [ - "UMM/SpatialExtent/VerticalSpatialDomain/Unit" + "SpatialExtent/VerticalSpatialDomain/Unit" ] } ] @@ -2707,7 +2707,7 @@ "umm-json": [ { "fields": [ - "UMM/Project/ShortName" + "Project/ShortName" ] } ] @@ -2735,7 +2735,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialExtent/SpatialCoverageType" + "SpatialExtent/SpatialCoverageType" ] } ] @@ -2763,7 +2763,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialRepresentationInfo/HorizontalCoordinateSystem/GeodeticModel/HorizontalDatumName" + "SpatialRepresentationInfo/HorizontalCoordinateSystem/GeodeticModel/HorizontalDatumName" ] } ] @@ -2861,7 +2861,7 @@ "umm-json": [ { "fields": [ - "UMM/LocationKeywords/Category" + "LocationKeywords/Category" ] } ] @@ -2895,10 +2895,10 @@ "umm-json": [ { "fields": [ - "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/Point", - "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles", - "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/Lines", - "UMM/SpatialExtent/HorizontaSpatialDomain/Geometry/Gpolygons" + "SpatialExtent/HorizontaSpatialDomain/Geometry/Point", + "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles", + "SpatialExtent/HorizontaSpatialDomain/Geometry/Lines", + "SpatialExtent/HorizontaSpatialDomain/Geometry/Gpolygons" ] } ] @@ -2927,8 +2927,8 @@ "umm-json": [ { "fields": [ - "UMM/UseConstraints/LicenseURL/Linkage", - "UMM/UseConstraints/LicenseURL/Description" + "UseConstraints/LicenseURL/Linkage", + "UseConstraints/LicenseURL/Description" ] } ] @@ -2956,7 +2956,7 @@ "umm-json": [ { "fields": [ - "UMM/ResourceCitation/OtherCitationDetails" + "ResourceCitation/OtherCitationDetails" ] } ] @@ -2995,16 +2995,16 @@ "umm-json": [ { "fields": [ - "UMM/ContactPerson/FirstName", - "UMM/ContactPerson/MiddleName", - "UMM/ContactPerson/LastName" + "ContactPerson/FirstName", + "ContactPerson/MiddleName", + "ContactPerson/LastName" ] }, { "fields": [ - "UMM/DataCenters/ContactPerson/FirstName", - "UMM/DataCenters/ContactPerson/MiddleName", - "UMM/DataCenters/ContactPerson/LastName" + "DataCenters/ContactPerson/FirstName", + "DataCenters/ContactPerson/MiddleName", + "DataCenters/ContactPerson/LastName" ] } ] @@ -3036,9 +3036,9 @@ "umm-json": [ { "fields": [ - "UMM/DOI/Explanation", - "UMM/DOI/MissingReason", - "UMM/DOI/DOI" + "DOI/Explanation", + "DOI/MissingReason", + "DOI/DOI" ] } ] @@ -3096,16 +3096,16 @@ "umm-json": [ { "fields": [ - "UMM/CollectionProgress", - "UMM/TemporalExtent/EndsAtPresentFlag", - "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + "CollectionProgress", + "TemporalExtent/EndsAtPresentFlag", + "TemporalExtent/RangeDateTime/EndingDateTime" ] }, { "fields": [ - "UMM/CollectionProgress", - "UMM/TemporalExtent/EndsAtPresentFlag", - "UMM/TemporalExtent/PeriodicDateTime/EndDate" + "CollectionProgress", + "TemporalExtent/EndsAtPresentFlag", + "TemporalExtent/PeriodicDateTime/EndDate" ] } ] @@ -3126,7 +3126,7 @@ "umm-json": [ { "fields": [ - "UMM/RelatedUrl/Type" + "RelatedUrl/Type" ] } ] @@ -3148,8 +3148,8 @@ "umm-json": [ { "fields": [ - "UMM/RelatedUrl/Type", - "UMM/RelatedUrl/Url" + "RelatedUrl/Type", + "RelatedUrl/Url" ] } ] @@ -3170,7 +3170,7 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Characteristics" + "Platform/Characteristics" ] } ] @@ -3200,8 +3200,8 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/RangeDateTime/EndingDateTime", - "UMM/ShortName" + "TemporalExtent/RangeDateTime/EndingDateTime", + "ShortName" ] } ] @@ -3231,8 +3231,8 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/RangeDateTime/BeginningDateTime", - "UMM/ShortName" + "TemporalExtent/RangeDateTime/BeginningDateTime", + "ShortName" ] } ] @@ -3276,7 +3276,7 @@ "umm-json": [ { "fields": [ - "UMM/ISOTopicCategory" + "ISOTopicCategory" ] } ] @@ -3386,9 +3386,9 @@ "umm-json": [ { "fields": [ - "UMM/TemporalExtent/SingleDateTime", - "UMM/TemporalExtent/RangeDateTime", - "UMM/TemporalExtent/PeriodicDateTime" + "TemporalExtent/SingleDateTime", + "TemporalExtent/RangeDateTime", + "TemporalExtent/PeriodicDateTime" ] } ] @@ -3414,17 +3414,17 @@ "umm-json": [ { "fields": [ - "UMM/PublicationReference/OnlineResource/Protocol" + "PublicationReference/OnlineResource/Protocol" ] }, { "fields": [ - "UMM/RelatedUrl/GetService/Protocol" + "RelatedUrl/GetService/Protocol" ] }, { "fields": [ - "UMM/ResourceCitation/OnlineResource/Protocol" + "ResourceCitation/OnlineResource/Protocol" ] } ] @@ -3451,8 +3451,8 @@ "umm-json": [ { "fields": [ - "UMM/ResourceCitation/Version", - "UMM/Version" + "ResourceCitation/Version", + "Version" ] } ] @@ -3508,52 +3508,52 @@ "umm-json": [ { "fields": [ - "UMM/MetadataDate/Date" + "MetadataDate/Date" ] }, { "fields": [ - "UMM/AdditionalAttribute/UpdateDate" + "AdditionalAttribute/UpdateDate" ] }, { "fields": [ - "UMM/TemporalExtent/RangeDateTime/BeginningDateTime" + "TemporalExtent/RangeDateTime/BeginningDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/RangeDateTime/EndingDateTime" + "TemporalExtent/RangeDateTime/EndingDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/SingleDateTime" + "TemporalExtent/SingleDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/PeriodicDateTime" + "TemporalExtent/PeriodicDateTime" ] }, { "fields": [ - "UMM/TemporalExtent/PeriodicDateTime/StartDate" + "TemporalExtent/PeriodicDateTime/StartDate" ] }, { "fields": [ - "UMM/TemporalExtent/PeriodicDateTime/EndDate" + "TemporalExtent/PeriodicDateTime/EndDate" ] }, { "fields": [ - "UMM/PaleoTemporalCoverage/PaleoStartDate" + "PaleoTemporalCoverage/PaleoStartDate" ] }, { "fields": [ - "UMM/PaleoTemporalCoverage/PaleoEndDate" + "PaleoTemporalCoverage/PaleoEndDate" ] } ] @@ -3605,8 +3605,8 @@ "umm-json": [ { "fields": [ - "UMM/RelatedURL/Description", - "UMM/RelatedURL/URL" + "RelatedURL/Description", + "RelatedURL/URL" ] } ] @@ -3627,8 +3627,8 @@ "umm-json": [ { "fields": [ - "UMM/RelatedUrl/GetData", - "UMM/RelatedURL/URL" + "RelatedUrl/GetData", + "RelatedURL/URL" ] } ] @@ -3649,7 +3649,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialRepresentationInfo/Horizontal_Resolution_Range" + "SpatialRepresentationInfo/Horizontal_Resolution_Range" ] } ] @@ -3670,7 +3670,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialRepresentationInfo/Vertical_Resolution_Range" + "SpatialRepresentationInfo/Vertical_Resolution_Range" ] } ] @@ -3719,7 +3719,7 @@ "umm-json": [ { "fields": [ - "UMM/DirectoryName/ShortName" + "DirectoryName/ShortName" ] } ] @@ -3744,11 +3744,11 @@ "umm-json": [ { "fields": [ - "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Eon", - "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Era", - "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Period", - "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Epoch", - "UMM/PaleoTemporalCoverage/ChronostratigraphicUnit/Stage" + "PaleoTemporalCoverage/ChronostratigraphicUnit/Eon", + "PaleoTemporalCoverage/ChronostratigraphicUnit/Era", + "PaleoTemporalCoverage/ChronostratigraphicUnit/Period", + "PaleoTemporalCoverage/ChronostratigraphicUnit/Epoch", + "PaleoTemporalCoverage/ChronostratigraphicUnit/Stage" ] } ] @@ -3770,8 +3770,8 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Instrument/NumberOfInstruments", - "UMM/Platform/Instrument/ComposedOf/ShortName" + "Platform/Instrument/NumberOfInstruments", + "Platform/Instrument/ComposedOf/ShortName" ] } ] @@ -3804,7 +3804,7 @@ "umm-json": [ { "fields": [ - "UMM/DataCenters/ShortName" + "DataCenters/ShortName" ] } ] @@ -3858,20 +3858,20 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Characteristics/DataType", - "UMM/Platform/Characteristics" + "Platform/Characteristics/DataType", + "Platform/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/Characteristics/DataType", - "UMM/Platform/Instrument/Characteristics" + "Platform/Instrument/Characteristics/DataType", + "Platform/Instrument/Characteristics" ] }, { "fields": [ - "UMM/Platform/Instrument/ComposedOf/Characteristics/DataType", - "UMM/Platform/Instrument/ComposedOf/Characteristics" + "Platform/Instrument/ComposedOf/Characteristics/DataType", + "Platform/Instrument/ComposedOf/Characteristics" ] } ] @@ -3899,7 +3899,7 @@ "umm-json": [ { "fields": [ - "UMM/Platform/Type" + "Platform/Type" ] } ] @@ -3920,7 +3920,7 @@ "umm-json": [ { "fields": [ - "UMM/SpatialRepresentationInfo/HorizontalCoordinateSystem/GeographicCoordinateSystem/GeographicCoordinateUnits" + "SpatialRepresentationInfo/HorizontalCoordinateSystem/GeographicCoordinateSystem/GeographicCoordinateUnits" ] } ] From 2eb933b71cffddfe1cdb3aa372e94f836f8d0051 Mon Sep 17 00:00:00 2001 From: spa0002 Date: Mon, 20 Dec 2021 13:04:26 -0600 Subject: [PATCH 015/261] Changed instances of 'umm' to 'umm-json'. --- pyQuARC/schemas/rule_mapping.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 753fe802..898d44e1 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -809,7 +809,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "DataDate/Date" @@ -1567,7 +1567,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "Platform/Instrument/Characteristics/Description" @@ -2208,7 +2208,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "LocationKeywords/Category" @@ -2253,7 +2253,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "LocationKeywords/Category", @@ -2335,7 +2335,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "Project/ShortName", @@ -2492,7 +2492,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "DataCenters/ShortName" @@ -2632,7 +2632,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "SpatialExtent/VerticalSpatialDomain/Unit" @@ -2669,7 +2669,7 @@ ] } ], - "umm": [ + "umm-json": [ { "fields": [ "SpatialExtent/VerticalSpatialDomain/Unit" From becab15b973cc3921786166550c0d12d12f9a89c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 10 Jan 2022 09:59:00 -0600 Subject: [PATCH 016/261] Add get data check for umm json --- pyQuARC/code/custom_checker.py | 17 ++++++++++------- pyQuARC/code/custom_validator.py | 19 +++++++++++++++++-- pyQuARC/schemas/check_messages.json | 10 +++++++++- pyQuARC/schemas/checks.json | 7 ++++++- pyQuARC/schemas/rule_mapping.json | 22 ++++++++++++++-------- 5 files changed, 56 insertions(+), 19 deletions(-) diff --git a/pyQuARC/code/custom_checker.py b/pyQuARC/code/custom_checker.py index 4357fdec..5a43ac4d 100644 --- a/pyQuARC/code/custom_checker.py +++ b/pyQuARC/code/custom_checker.py @@ -35,13 +35,16 @@ def _get_path_value_recursively(subset_of_metadata_content, path_list, container if isinstance(root_content, str) or isinstance(root_content, int): container.append(root_content) elif isinstance(root_content, list): - for each in root_content: - try: - CustomChecker._get_path_value_recursively( - each, new_path, container) - except KeyError: - container.append(None) - continue + if not new_path: + container.append(root_content) + else: + for each in root_content: + try: + CustomChecker._get_path_value_recursively( + each, new_path, container) + except KeyError: + container.append(None) + continue elif isinstance(root_content, dict): CustomChecker._get_path_value_recursively( root_content, new_path, container) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 55c1ab9b..55bb42dc 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -1,3 +1,5 @@ +import json + from .base_validator import BaseValidator from .string_validator import StringValidator @@ -158,9 +160,9 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag # Logic: https://github.com/NASA-IMPACT/pyQuARC/issues/61 validity = True if collection_state.upper() in ["ACTIVE", "IN WORK"]: - validity = (not bool(ending_date_time)) and ends_at_present_flag.lower() == "true" + validity = (not bool(ending_date_time)) and str(ends_at_present_flag).lower() == "true" elif collection_state.upper() == "COMPLETE": - validity = bool(ending_date_time) and (not bool(ends_at_present_flag) or ends_at_present_flag.lower() == "false") + validity = bool(ending_date_time) and (not bool(str(ends_at_present_flag)) or ends_at_present_flag.lower() == "false") else: validity = False return { @@ -201,3 +203,16 @@ def get_data_url_check(metadata_json): "valid": validity, "value": value } + + @staticmethod + def get_data_url_check_umm(related_urls): + for url_obj in related_urls: + if url_obj.get("Type") == "GET DATA" and (url := url_obj.get("URL")): + return { + "valid": True, + "value": url + } + return { + "valid": False, + "value": "N/A" + } diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 983f0311..9f34f01b 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -727,6 +727,14 @@ }, "remediation": "Please provide a data access URL. This link should point as directly to the described data as possible. " }, + "get_data_url_check_umm": { + "failure": "No 'GET DATA' link detected.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a data access URL. This link should point as directly to the described data as possible. " + }, "horizontal_resolution_range_check": { "failure": "The provided Horizontal Resolution Range does not comply with the GCMD.", "help": { @@ -823,4 +831,4 @@ }, "remediation": "Please supply the corresponding long name for the short name." } -} \ No newline at end of file +} diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 14e6a553..25cba0aa 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -238,5 +238,10 @@ "data_type": "custom", "check_function": "get_data_url_check", "available": true + }, + "get_data_url_check_umm": { + "data_type": "custom", + "check_function": "get_data_url_check_umm", + "available": true } -} \ No newline at end of file +} diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 898d44e1..8e14e60b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3097,15 +3097,15 @@ { "fields": [ "CollectionProgress", - "TemporalExtent/EndsAtPresentFlag", - "TemporalExtent/RangeDateTime/EndingDateTime" + "TemporalExtents/EndsAtPresentFlag", + "TemporalExtents/RangeDateTimes/EndingDateTime" ] }, { "fields": [ "CollectionProgress", - "TemporalExtent/EndsAtPresentFlag", - "TemporalExtent/PeriodicDateTime/EndDate" + "TemporalExtents/EndsAtPresentFlag", + "TemporalExtents/PeriodicDateTimes/EndDate" ] } ] @@ -3623,18 +3623,24 @@ "DIF" ] } - ], + ] + }, + "severity": "error", + "check_id": "get_data_url_check" + }, + "get_data_url_check_umm": { + "rule_name": "GET DATA URL check for UMM JSON", + "fields_to_apply": { "umm-json": [ { "fields": [ - "RelatedUrl/GetData", - "RelatedURL/URL" + "RelatedUrls" ] } ] }, "severity": "error", - "check_id": "get_data_url_check" + "check_id": "get_data_url_check_umm" }, "horizontal_resolution_range_check": { "rule_name": "Horizontal resolution Range GCMD Check", From 2b4c2ff021cd547ce1313253b6bf1f4925f0c029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 17 Feb 2022 15:37:59 -0600 Subject: [PATCH 017/261] Fix schema validator not finding check messages error, remove unnecessary imports --- pyQuARC/code/checker.py | 9 ++------- pyQuARC/code/schema_validator.py | 14 ++++++++------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index 138d086a..a583876c 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -8,12 +8,7 @@ from .scheduler import Scheduler from .tracker import Tracker -from .custom_validator import CustomValidator -from .datetime_validator import DatetimeValidator -from .string_validator import StringValidator -from .url_validator import UrlValidator - -from .constants import COLOR, DIF, ECHO10, SCHEMA_PATHS, UMM_JSON +from .constants import ECHO10, SCHEMA_PATHS, UMM_JSON class Checker: @@ -55,7 +50,7 @@ def __init__( self.checks_override, metadata_format=metadata_format ) - self.schema_validator = SchemaValidator(metadata_format) + self.schema_validator = SchemaValidator(metadata_format, self.messages_override or self.messages) self.tracker = Tracker( self.rule_mapping, self.rules_override, diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index d79ef3db..0e1b1315 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -1,3 +1,4 @@ +from email import message_from_string import json import os import re @@ -7,7 +8,7 @@ from lxml import etree from urllib.request import pathname2url -from .constants import DIF, ECHO10, UMM_JSON, SCHEMA_PATHS +from .constants import ECHO10, UMM_JSON, SCHEMA_PATHS class SchemaValidator: @@ -18,7 +19,7 @@ class SchemaValidator: PATH_SEPARATOR = "/" def __init__( - self, metadata_format=ECHO10, + self, check_messages, metadata_format=ECHO10, ): """ Args: @@ -33,6 +34,7 @@ def __init__( self.validator_func = self.run_json_validator else: self.validator_func = self.run_xml_validator + self.check_messages = check_messages def read_xml_schema(self): """ @@ -89,10 +91,10 @@ def run_json_validator(self, content_to_validate): message = error.message remediation = None if error.validator == "oneOf": - check_message = self.check_messages[error.validator] - fields = [f'{field}/{obj["required"][0]}' for obj in error.validator_value] - message = check_message["failure"].format(fields) - remediation = check_message["remediation"] + if check_message := self.check_messages.get(error.validator): + fields = [f'{field}/{obj["required"][0]}' for obj in error.validator_value] + message = check_message["failure"].format(fields) + remediation = check_message["remediation"] errors.setdefault(field, {})["schema"] = { "message": [f"Error: {message}"], "remediation": remediation, From 34760b7ba58f85ee731b26d24dafb8dd5a07fd8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 24 Feb 2022 16:07:41 -0600 Subject: [PATCH 018/261] Fix ordering of arguments --- pyQuARC/code/checker.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index a583876c..b4189b38 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -8,6 +8,11 @@ from .scheduler import Scheduler from .tracker import Tracker +from .custom_validator import CustomValidator +from .datetime_validator import DatetimeValidator +from .string_validator import StringValidator +from .url_validator import UrlValidator + from .constants import ECHO10, SCHEMA_PATHS, UMM_JSON @@ -50,7 +55,7 @@ def __init__( self.checks_override, metadata_format=metadata_format ) - self.schema_validator = SchemaValidator(metadata_format, self.messages_override or self.messages) + self.schema_validator = SchemaValidator(self.messages_override or self.messages, metadata_format) self.tracker = Tracker( self.rule_mapping, self.rules_override, From f8d7ecaa55c1f0c3bd296856027c7b7173434c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 1 Mar 2022 14:04:41 -0600 Subject: [PATCH 019/261] Add support for UMM-C fields with diff TYPE obj --- pyQuARC/code/checker.py | 2 ++ pyQuARC/code/custom_checker.py | 40 ++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index b4189b38..b43495c4 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -168,6 +168,7 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): external_data = rule_mapping.get("data", []) list_of_fields_to_apply = \ rule_mapping.get("fields_to_apply").get(self.metadata_format, {}) + for field_dict in list_of_fields_to_apply: dependencies = self.scheduler.get_all_dependencies(rule_id, check, field_dict) main_field = field_dict["fields"][0] @@ -180,6 +181,7 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): field_dict, external_data ) + self.tracker.update_data(rule_id, main_field, result["valid"]) # this is to avoid "valid" = null in the result, for rules that are not applied diff --git a/pyQuARC/code/custom_checker.py b/pyQuARC/code/custom_checker.py index 5a43ac4d..b2aabc4c 100644 --- a/pyQuARC/code/custom_checker.py +++ b/pyQuARC/code/custom_checker.py @@ -7,7 +7,7 @@ def __init__(self): pass @staticmethod - def _get_path_value_recursively(subset_of_metadata_content, path_list, container): + def _get_path_value_recursively(subset_of_metadata_content, path_list, container, query_params=None): """ Gets the path values recursively while handling list or dictionary in `subset_of_metadata_content` Adds the values to `container` @@ -20,6 +20,8 @@ def _get_path_value_recursively(subset_of_metadata_content, path_list, container Example: 'Collection/RangeDateTime/StartDate' -> ['Collection', 'RangeDateTime', 'StartDate'] container (set): The container that holds all the path values + query_params (dict): The key:value pair to distinguish a field in umm-c + eg: "Type": "DELETE" """ try: root_content = subset_of_metadata_content[path_list[0]] @@ -32,22 +34,28 @@ def _get_path_value_recursively(subset_of_metadata_content, path_list, container container.append(subset_of_metadata_content) return new_path = path_list[1:] - if isinstance(root_content, str) or isinstance(root_content, int): + if isinstance(root_content, str) or isinstance(root_content, int) or isinstance(root_content, float): container.append(root_content) + return elif isinstance(root_content, list): if not new_path: container.append(root_content) - else: - for each in root_content: - try: - CustomChecker._get_path_value_recursively( - each, new_path, container) - except KeyError: - container.append(None) - continue + return + if len(new_path) == 1 and query_params: + root_content = next((x for x in root_content if x[query_params[0]] == query_params[1])) + root_content = root_content[new_path[0]] + container.append(root_content) + return + for each in root_content: + try: + CustomChecker._get_path_value_recursively( + each, new_path, container, query_params) + except KeyError: + container.append(None) + continue elif isinstance(root_content, dict): CustomChecker._get_path_value_recursively( - root_content, new_path, container) + root_content, new_path, container, query_params) @staticmethod def _get_path_value(content_to_validate, path_string): @@ -64,8 +72,16 @@ def _get_path_value(content_to_validate, path_string): container = list() path = path_string.split('/') + + query_params = None + + if ("?" in path[-1]): + split = path[-1].split('?') + path[-1], query = split[0], split[-1].split("=") + query_params = (query[0], query[1]) + CustomChecker._get_path_value_recursively( - content_to_validate, path, container) + content_to_validate, path, container, query_params) return container def run(self, func, content_to_validate, field_dict, external_data): From 7dfb933619fa1a7b3cfba06095582ee8bbb58e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 1 Mar 2022 14:06:34 -0600 Subject: [PATCH 020/261] Add tests for get_path_value for dif --- tests/test_custom_checker.py | 95 ++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/tests/test_custom_checker.py b/tests/test_custom_checker.py index b8d3c65e..e116d9b8 100644 --- a/tests/test_custom_checker.py +++ b/tests/test_custom_checker.py @@ -22,3 +22,98 @@ def test_get_path_value(self): self.dummy_metadata, _in ) == _out + + dummy_dif_metadata = { + "CollectionCitations": [ + { + "Creator": "Kamel Didan", + "OnlineResource": { + "Linkage": "https://doi.org/10.5067/MODIS/MOD13Q1.061", + "Name": "DOI Landing Page" + }, + "OtherCitationDetails": "The DOI landing page provides citations in APA and Chicago styles.", + "Publisher": "NASA EOSDIS Land Processes DAAC", + "ReleaseDate": "2021-02-16", + "SeriesName": "MOD13Q1.061", + "Title": "MODIS/Terra Vegetation Indices 16-Day L3 Global 250m SIN Grid V061" + } + ], + "MetadataDates": [ + { + "Type": "CREATE", + "Date": "2021-09-15T15:54:00.000Z" + }, + { + "Type": "UPDATE", + "Date": "2021-09-30T15:54:00.000Z" + } + ], + "DOI": { + "Authority": "https://doi.org", + "DOI": "10.5067/MODIS/MOD13Q1.061" + }, + "SpatialExtent": { + "GranuleSpatialRepresentation": "GEODETIC", + "HorizontalSpatialDomain": { + "Geometry": { + "BoundingRectangles": [ + { + "EastBoundingCoordinate": 180.0, + "NorthBoundingCoordinate": 85, + "SouthBoundingCoordinate": 89, + "WestBoundingCoordinate": -180.0 + } + ], + "CoordinateSystem": "CARTESIAN" + }, + "ResolutionAndCoordinateSystem": { + "HorizontalDataResolution": { + "GriddedResolutions": [ + { + "Unit": "Meters", + "XDimension": 250.0, + "YDimension": 250.0 + } + ] + } + }, + "ZoneIdentifier": "MODIS Sinusoidal Tiling System" + }, + "SpatialCoverageType": "HORIZONTAL" + } + } + + assert CustomChecker._get_path_value( + dummy_dif_metadata, + "CollectionCitations/Creator" + ) == ["Kamel Didan"] + + assert CustomChecker._get_path_value( + dummy_dif_metadata, + "CollectionCitations/OnlineResource/Name" + ) == ["DOI Landing Page"] + + assert CustomChecker._get_path_value( + dummy_dif_metadata, + "MetadataDates/Date?Type=UPDATE" + ) == ["2021-09-30T15:54:00.000Z"] + + assert CustomChecker._get_path_value( + dummy_dif_metadata, + "MetadataDates/Date?Type=CREATE" + ) == ["2021-09-15T15:54:00.000Z"] + + assert CustomChecker._get_path_value( + dummy_dif_metadata, + "DOI/DOI" + ) == ["10.5067/MODIS/MOD13Q1.061"] + + assert CustomChecker._get_path_value( + dummy_dif_metadata, + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate" + ) == [-180.0] + + assert CustomChecker._get_path_value( + dummy_dif_metadata, + "SpatialExtent/GranuleSpatialRepresentation" + ) == ["GEODETIC"] From ac4200d9d0ef6cbab436ecde079c19a18ee0f301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 1 Mar 2022 14:09:57 -0600 Subject: [PATCH 021/261] Update rule_mapping fix fields and misspellings --- pyQuARC/schemas/rule_mapping.json | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 8e14e60b..56441e58 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -378,7 +378,12 @@ "umm-json": [ { "fields": [ - "MetadataDate/Date" + "MetadataDates/Date?Type=DELETE" + ] + }, + { + "fields": [ + "DataDates/Date" ] }, { @@ -812,22 +817,12 @@ "umm-json": [ { "fields": [ - "DataDate/Date" - ] - }, - { - "fields": [ - "DataDate/Type=DELETE" - ] - }, - { - "fields": [ - "MetadataDate/Date" + "DataDates/Date?Type=DELETE" ] }, { "fields": [ - "MetadataDate/Type=DELETE" + "MetadataDates/Date?Type=DELETE" ] } ] @@ -2529,10 +2524,10 @@ "umm-json": [ { "fields": [ - "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate", - "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/NorthBoundingCoordinate", - "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/EastBoundingCoordinate", - "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles/SouthBoundingCoordinate" + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/NorthBoundingCoordinate", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/EastBoundingCoordinate", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/SouthBoundingCoordinate" ] } ] From 95dce58a7a6a2b36c5505041298b583d15852a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 1 Mar 2022 14:21:08 -0600 Subject: [PATCH 022/261] Update CHANGELOG to include new info for UMM --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3ac3068..3bf9bc10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # CHANGELOG +## v2.0.0 + +- Support for [UMM-JSON](https://earthdata.nasa.gov/esdis/esco/standards-and-references/eso-umm-information) collection level metadata +- Added support for some UMM fields that look like the following: + +```json +"ContactMechanisms": [ + { + "Type": "Telephone", + "Value": "605-594-6116" + }, + { + "Type": "U.S. toll free", + "Value": "866-573-3222" + }, + { + "Type": "Email", + "Value": "lpdaac@usgs.gov" + } +] +``` + +To specify the "Email" field, in the `rule_mapping`, a user would put in `ContactMechanisms/Value?Type=Email` as the field. + +- All the field specified in a datetime check that involves comparison should have a corresponding `datetime_format_check` entry, otherwise the check won't run + ## v1.1.3 - Fixed null pointer exception in the check `collection_progress_consistency_check` From 7900f14d3df4bfc148ea47fdf06fc028944c97a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 1 Mar 2022 17:45:09 -0600 Subject: [PATCH 023/261] Fix exceptions --- pyQuARC/code/custom_checker.py | 9 ++++++--- pyQuARC/code/custom_validator.py | 2 +- pyQuARC/schemas/rule_mapping.json | 5 +++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pyQuARC/code/custom_checker.py b/pyQuARC/code/custom_checker.py index b2aabc4c..1e1d7b40 100644 --- a/pyQuARC/code/custom_checker.py +++ b/pyQuARC/code/custom_checker.py @@ -42,9 +42,12 @@ def _get_path_value_recursively(subset_of_metadata_content, path_list, container container.append(root_content) return if len(new_path) == 1 and query_params: - root_content = next((x for x in root_content if x[query_params[0]] == query_params[1])) - root_content = root_content[new_path[0]] - container.append(root_content) + try: + root_content = next((x for x in root_content if x[query_params[0]] == query_params[1])) + root_content = root_content[new_path[0]] + container.append(root_content) + except: + container.append(None) return for each in root_content: try: diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index ca955b80..7edd8067 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -162,7 +162,7 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag collection_state = collection_state.upper() ending_date_time_exists = bool(ending_date_time) ends_at_present_flag_exists = bool(ends_at_present_flag) - ends_at_present_flag = ends_at_present_flag_exists.lower() if ends_at_present_flag_exists else None + ends_at_present_flag = str(ends_at_present_flag).lower() if ends_at_present_flag_exists else None if collection_state in ["ACTIVE", "IN WORK"]: validity = (not ending_date_time_exists) and (ends_at_present_flag == "true") diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 56441e58..29e2f5ba 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -381,6 +381,11 @@ "MetadataDates/Date?Type=DELETE" ] }, + { + "fields": [ + "DataDates/Date?Type=DELETE" + ] + }, { "fields": [ "DataDates/Date" From b77a7b65a5cfa0fa7f7383bd9c737b7ed07e7562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 2 Mar 2022 09:24:39 -0600 Subject: [PATCH 024/261] Add delete datetime in umm-json fixture --- tests/fixtures/test_cmr_metadata.umm-json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/fixtures/test_cmr_metadata.umm-json b/tests/fixtures/test_cmr_metadata.umm-json index 2f5fe8bc..f8764df6 100644 --- a/tests/fixtures/test_cmr_metadata.umm-json +++ b/tests/fixtures/test_cmr_metadata.umm-json @@ -27,6 +27,10 @@ { "Type": "UPDATE", "Date": "2021-09-15T15:54:00.000Z" + }, + { + "Date": "2000-08-30T10:47:59.761Z", + "Type": "DELETE" } ], "VersionDescription": "Collection Version 6.1 Processing and Reprocessing", @@ -134,6 +138,10 @@ { "Date": "2015-09-30T10:47:59.761Z", "Type": "UPDATE" + }, + { + "Date": "2000-08-30T10:47:59.761Z", + "Type": "DELETE" } ], "AccessConstraints": { From def2a358927b5f64d6018a6e66063e9482189908 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Mon, 21 Mar 2022 15:37:47 -0500 Subject: [PATCH 025/261] Update rule_mapping.json Range Date Time Logic Check - "* depends on updated Datetime ISO Format Check field names and check added to rule_mapping.json - Fixed field names" Range Date Time Logic Check - "* depends on updated Datetime ISO Format Check field names and check added to rule_mapping.json - Fixed field names" Project Date Time Logic Check - """* depends on updated Datetime ISO Format Check field names and check added to rule_mapping.json - Fixed field names""" Project Date Time Logic Check - """* depends on updated Datetime ISO Format Check field names and check added to rule_mapping.json - Fixed field names""" Periodic Date Time Logic Check - """* depends on updated Datetime ISO Format Check field names and check added to rule_mapping.json - Fixed field names""" Datetime ISO Format Check - Updated field names and added check id in rule_mapping.json URL Health and Status Check - Updated field names in rule_mapping.json --- pyQuARC/schemas/rule_mapping.json | 97 ++++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 27 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 29e2f5ba..e93e9baf 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -73,8 +73,8 @@ "umm-json": [ { "fields": [ - "TemporalExtent/RangeDateTime/BeginningDateTime", - "TemporalExtent/RangeDateTime/EndingDateTime" + "TemporalExtents/RangeDateTimes/BeginningDateTime", + "TemporalExtents/RangeDateTimes/EndingDateTime" ], "relation": "lte" } @@ -107,8 +107,8 @@ "umm-json": [ { "fields": [ - "TemporalExtent/RangeDateTime/BeginningDateTime", - "TemporalExtent/RangeDateTime/EndingDateTime" + "TemporalExtents/RangeDateTimes/BeginningDateTime", + "TemporalExtents/RangeDateTimes/EndingDateTime" ], "relation": "neq" } @@ -141,8 +141,8 @@ "umm-json": [ { "fields": [ - "Project/StartDate", - "Project/EndDate" + "Projects/StartDate", + "Projects/EndDate" ], "relation": "lte" } @@ -175,8 +175,8 @@ "umm-json": [ { "fields": [ - "Project/StartDate", - "Project/EndDate" + "Projects/StartDate", + "Projects/EndDate" ], "relation": "neq" } @@ -216,8 +216,8 @@ "umm-json": [ { "fields": [ - "TemporalExtent/PeriodicDateTime/StartDate", - "TemporalExtent/PeriodicDateTime/EndDate" + "TemporalExtents/PeriodicDateTimes/StartDate", + "TemporalExtents/PeriodicDateTimes/EndDate" ], "relation": "lt" }, @@ -378,7 +378,12 @@ "umm-json": [ { "fields": [ - "MetadataDates/Date?Type=DELETE" + "DataDates/Date?Type=CREATE" + ] + }, + { + "fields": [ + "DataDates/Date?Type=UPDATE" ] }, { @@ -386,59 +391,97 @@ "DataDates/Date?Type=DELETE" ] }, + { + "fields": [ + "DataDates/Date?Type=REVIEW" + ] + }, + + { + "fields": [ + "MetadataDates/Date?Type=CREATE" + ] + }, + { + "fields": [ + "MetadataDates/Date" + ] + }, { "fields": [ "DataDates/Date" ] }, + { "fields": [ - "AdditionalAttribute/UpdateDate" + "MetadataDates/Date?Type=UPDATE" ] }, { "fields": [ - "TemporalExtent/RangeDateTime/BeginningDateTime" + "MetadataDates/Date?Type=DELETE" ] }, { "fields": [ - "TemporalExtent/RangeDateTime/EndingDateTime" + "MetadataDates/Date?Type=REVIEW" ] }, { "fields": [ - "TemporalExtent/SingleDateTime" + "AdditionalAttributes/UpdateDate" ] }, { "fields": [ - "TemporalExtent/PeriodicDateTime" + "TemporalExtents/RangeDateTimes/BeginningDateTime" ] }, { "fields": [ - "TemporalExtent/PeriodicDateTime/StartDate" + "TemporalExtents/RangeDateTimes/EndingDateTime" ] }, { "fields": [ - "TemporalExtent/PeriodicDateTime/EndDate" + "TemporalExtents/SingleDateTimes" ] }, { "fields": [ - "PaleoTemporalCoverage/PaleoStartDate" + "TemporalExtents/PeriodicDateTimes/StartDate" ] }, { "fields": [ - "PaleoTemporalCoverage/PaleoEndDate" + "TemporalExtents/PeriodicDateTimes/EndDate" + ] + }, + { + "fields": [ + "PaleoTemporalCoverages/StartDate" + ] + }, + { + "fields": [ + "PaleoTemporalCoverages/EndDate" + ] + }, + { + "fields":[ + "Projects/StartDate" + ] + }, + { + "fields":[ + "Projects/EndDate" ] } ] }, - "severity": "error" + "severity": "error", + "check_id": "datetime_format_check" }, "url_check": { "rule_name": "URL Health and Status Check", @@ -500,32 +543,32 @@ "umm-json": [ { "fields": [ - "DataCenters/ContactInformation/RelatedURLs/Url" + "DataCenters/ContactInformation/RelatedUrls/URL" ] }, { "fields": [ - "DataCenters/ContactPerson/ContactInformation/RelatedURLs/Url" + "DataCenters/ContactPersons/ContactInformation/RelatedUrls/URL" ] }, { "fields": [ - "DataCenters/ContactGroup/ContactInformation/RelatedURLs/Url" + "DataCenters/ContactGroups/ContactInformation/RelatedUrls/URL" ] }, { "fields": [ - "ContactPerson/ContactInformation/RelatedURLs/Url" + "ContactPersons/ContactInformation/RelatedUrls/URL" ] }, { "fields": [ - "ContactGroup/ContactInformation/RelatedURLs/Url" + "ContactGroups/ContactInformation/RelatedUrls/URL" ] }, { "fields": [ - "RelatedUrl/URL" + "RelatedUrls/URL" ] } ] From f49f8e8fc0b27480c3ebb3722ef10f14615bb8b1 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 22 Mar 2022 17:23:55 -0500 Subject: [PATCH 026/261] Updated 'Ends at present flag' logic and presence checks Ends at present flag logic check - rule_mapping.json - Updated field names in rule_mapping.json check_messages.json - Updated error message custom_validator - Edited ends_at_present_flag_logic_check Ends at present flag presence check - "rule_mapping.json - Updated field names in rule_mapping.json check_messages.json - Updated error message custom_validator - Edited ends_at_present_flag_presence_check --- pyQuARC/code/custom_validator.py | 24 ++++++++++++------------ pyQuARC/schemas/check_messages.json | 4 ++-- pyQuARC/schemas/rule_mapping.json | 8 ++++---- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 7edd8067..faa2d242 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -11,20 +11,20 @@ def __init__(self): super().__init__() @staticmethod - @if_arg def ends_at_present_flag_logic_check( ends_at_present_flag, ending_date_time, collection_state ): - value = ends_at_present_flag.lower() collection_state = collection_state.upper() - - valid = ( - value == "true" - and not (ending_date_time) or collection_state == "ACTIVE" - ) or ( - value == "false" - and ending_date_time or collection_state == "COMPLETE" - ) + if ends_at_present_flag == None: + valid = True + else: + valid = ( + ends_at_present_flag == True + and not (ending_date_time) and collection_state == "ACTIVE" + ) or ( + ends_at_present_flag == False + and not not (ending_date_time) and collection_state == "COMPLETE" + ) return {"valid": valid, "value": ends_at_present_flag} @@ -33,8 +33,8 @@ def ends_at_present_flag_presence_check( ends_at_present_flag, ending_date_time, collection_state ): valid = True - if not ends_at_present_flag: - valid = ending_date_time or collection_state == "COMPLETE" + if ends_at_present_flag == None: + valid = not not (ending_date_time) and collection_state == "COMPLETE" return {"valid": valid, "value": ends_at_present_flag} diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 9f34f01b..ae4b00da 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -152,7 +152,7 @@ "remediation": "Because the description reads \"Not provided\", it can be removed from the metadata. Otherwise, please describe the version in more detail." }, "ends_at_present_flag_logic_check": { - "failure": "Potential issue with:\n - EndsAtPresentFlag: value = \"true\" but EndingDateTime is provided. \n - EndsAtPresentFlag: value = \"true\" but CollectionState = COMPLETE. \n - EndsAtPresentFlag: value = \"false\" but EndingDateTime is missing.\n - EndsAtPresentFlag: value = \"false\" but CollectionState = ACTIVE.", + "failure": "Potential issue with:\n - EndsAtPresentFlag: value = \"true\" but EndingDateTime is provided. \n - EndsAtPresentFlag: value = \"true\" but CollectionState is not \"ACTIVE\". \n - EndsAtPresentFlag: value = \"false\" but EndingDateTime is missing.\n - EndsAtPresentFlag: value = \"false\" but CollectionState is not \"COMPLETE\".", "help": { "message": "", "url": "" @@ -160,7 +160,7 @@ "remediation": "If data collection is ongoing, provide an EndsAtPresentFlag of \"true\"" }, "ends_at_present_flag_presence_check": { - "failure": "Potential issue with:\n - No EndingDateTime provided; no EndsAtPresentFlag provided for a potentially active collection. \n - CollectionState = ACTIVE; no EndsAtPresentFlag provided for a potentially active collection.", + "failure": "Potential issue with:\n - No EndingDateTime provided; no EndsAtPresentFlag provided for a potentially active collection. \n - CollectionState is not \"COMPLETE\"; no EndsAtPresentFlag provided for a potentially active collection.", "help": { "message": "", "url": "" diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e93e9baf..fcc8dd20 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -987,8 +987,8 @@ "umm-json": [ { "fields": [ - "TemporalExtent/EndsAtPresentFlag", - "TemporalExtent/RangeDateTime/EndingDateTime", + "TemporalExtents/EndsAtPresentFlag", + "TemporalExtents/RangeDateTimes/EndingDateTime", "CollectionProgress" ] } @@ -1021,8 +1021,8 @@ "umm-json": [ { "fields": [ - "TemporalExtent/EndsAtPresentFlag", - "TemporalExtent/RangeDateTime/EndingDateTime", + "TemporalExtents/EndsAtPresentFlag", + "TemporalExtents/RangeDateTimes/EndingDateTime", "CollectionProgress" ] } From 72aac8ad16650dc898b3d2d970a6ba05b510999f Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 22 Mar 2022 17:44:58 -0500 Subject: [PATCH 027/261] Update rule_mapping.json Temporal Extent Requirement Check - Fixed field names in rule_mapping.json Horizontal Data Resolution Unit Controlled Vocabulary Check - "Update: Fixed / Added field names in rule_mapping.json, check now working as expected *NOTE: New commit added to fix error underneath not sure how to resolve this error" --- pyQuARC/schemas/rule_mapping.json | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fcc8dd20..c69a750d 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3429,9 +3429,9 @@ "umm-json": [ { "fields": [ - "TemporalExtent/SingleDateTime", - "TemporalExtent/RangeDateTime", - "TemporalExtent/PeriodicDateTime" + "TemporalExtents/SingleDateTimes", + "TemporalExtents/RangeDateTimes", + "TemporalExtents/PeriodicDateTimes" ] } ] @@ -3969,7 +3969,27 @@ "umm-json": [ { "fields": [ - "SpatialRepresentationInfo/HorizontalCoordinateSystem/GeographicCoordinateSystem/GeographicCoordinateUnits" + "SpatialExtent/HorizontalSpatialDomain/ResolutionAndCoordinateSystem/HorizontalDataResolution/NonGriddedResolutions/Unit" + ] + }, + { + "fields": [ + "SpatialExtent/HorizontalSpatialDomain/ResolutionAndCoordinateSystem/HorizontalDataResolution/NonGriddedRangeResolutions/Unit" + ] + }, + { + "fields": [ + "SpatialExtent/HorizontalSpatialDomain/ResolutionAndCoordinateSystem/HorizontalDataResolution/GriddedResolutions/Unit" + ] + }, + { + "fields": [ + "SpatialExtent/HorizontalSpatialDomain/ResolutionAndCoordinateSystem/HorizontalDataResolution/GriddedRangeResolutions/Unit" + ] + }, + { + "fields": [ + "SpatialExtent/HorizontalSpatialDomain/ResolutionAndCoordinateSystem/HorizontalDataResolution/GenericResolutions/Unit" ] } ] From 61a26017f2fd62c52396c449b5640b41a29a80a2 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 14:26:25 -0500 Subject: [PATCH 028/261] Update DOI Missing Reason Enumeration Check DOI Missing Reason Enumeration Check - "The check works (no error when missing reason ""Not Applicable"" or ""Unknown""; correct error message when any other value listed as missing reason) but when a value other than ""Not Applicable"" or ""Unknown"" is provided, pyQuARC gives another error message under ""DOI"" in addition to the correct error message under ""DOI/MissingReason"" that says: >> DOI: Error: One of `['DOI/DOI', 'DOI/MissingReason']` should be populated. Make sure one of the fields is populated. There is a ""oneOf"" element in the check_messages.json that is giving this message for this field. Working to figure out why this error message is being displayed when an error message is already giving for the Missing Reason being an invalid value." --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index c69a750d..59aacc55 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -903,7 +903,7 @@ "severity": "error", "data": [ [ - "Not Applicable" + "Not Applicable", "Unknown" ] ], "check_id": "controlled_keywords_check" From 4e10e2a82fa612133bf0f047500f530b6d1c84da Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 14:31:53 -0500 Subject: [PATCH 029/261] Update Spatial Extent Requirement Fulfillment Check Spatial Extent Requirement Fulfillment Check - The word "Horizontal" is misspelled "Horizonta" in the paths for the umm-json fields listed under this check in the rule_mapping.json file. When this was corrected, the check worked correctly. It was also mispelled for other checks. --- pyQuARC/schemas/rule_mapping.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 59aacc55..df47b78c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2938,10 +2938,10 @@ "umm-json": [ { "fields": [ - "SpatialExtent/HorizontaSpatialDomain/Geometry/Point", - "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles", - "SpatialExtent/HorizontaSpatialDomain/Geometry/Lines", - "SpatialExtent/HorizontaSpatialDomain/Geometry/Gpolygons" + "SpatialExtent/HorizontalSpatialDomain/Geometry/Point", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles", + "SpatialExtent/HorizontalSpatialDomain/Geometry/Lines", + "SpatialExtent/HorizontalSpatialDomain/Geometry/Gpolygons" ] } ] From 236f14661cf7cbaa595b3388c167f8fd87daf7cc Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 14:41:44 -0500 Subject: [PATCH 030/261] Update Online Description Presence Check Changes to Online Description Presence Check in rule_mapping.json --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index df47b78c..7d7b3b24 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3648,8 +3648,8 @@ "umm-json": [ { "fields": [ - "RelatedURL/Description", - "RelatedURL/URL" + "RelatedUrls/Description", + "RelatedUrls/URL" ] } ] From c99083003c148943fdb19a8579e8c72117db0bb3 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 15:37:07 -0500 Subject: [PATCH 031/261] Update Processing Level Description Length Check Processing Level Description Length Check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 7d7b3b24..91843ee0 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -921,7 +921,7 @@ "umm-json": [ { "fields": [ - "ProcessingLevel/Description" + "ProcessingLevel/ProcessingLevelDescription" ] } ] From 1ff15a1e53f6473f8978713ca6138eebc67d17e4 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 15:56:14 -0500 Subject: [PATCH 032/261] Update UMM Controlled Collection State List UMM Controlled Collection State List - The controlled keywords check appears to make the provided value all uppercase to check it against the controlled keyword list. I think this is the reason there's no message when mixed case/all lowercase values are provided. Removed ".upper()" after "str(value)" and "[keyword" in string validator. --- pyQuARC/code/string_validator.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 3bee7780..cd4c2a84 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -60,9 +60,19 @@ def controlled_keywords_check(value, keywords_list): Returns: (dict) An object with the validity of the check and the instance """ + if type(value) == str: + value = [value] + else: + value = value + + validity = True + for i in value: + if i not in keywords_list: + validity = False + break + return { - "valid": str(value).upper() - in [keyword.upper() for keyword in keywords_list], + "valid": validity, "value": value, } From e3077acff7c1971188c1f44c8d570c1ee2384ae2 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:03:17 -0500 Subject: [PATCH 033/261] Update Data Contact Role Enumeration Check Data Contact Role Enumeration Check - "controlled_keywords_check needs to be modified for lists rule_mapping.json - Updated field names in rule_mapping.json" Controlled Contact Role Check - controlled_keywords_check needs to be modified for lists --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 91843ee0..aa639fea 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1101,7 +1101,7 @@ "umm-json": [ { "fields": [ - "ContactPerson/Roles" + "ContactPersons/Roles" ] } ] @@ -1140,7 +1140,7 @@ "umm-json": [ { "fields": [ - "DataCenters/Roles" + "DataCenters/ContactGroups/Roles" ] } ] From 895b36daa5752388c4d14179c0df254b0d393861 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:10:50 -0500 Subject: [PATCH 034/261] Update Characteristic Description Length Check Update Characteristic Description Length Check --- pyQuARC/schemas/rule_mapping.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index aa639fea..f8ba5ed9 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1613,17 +1613,17 @@ "umm-json": [ { "fields": [ - "Platform/Instrument/Characteristics/Description" + "Platforms/Instruments/Characteristics/Description" ] }, { "fields": [ - "Platform/Instrument/ComposedOf/Characteristics/Description" + "Platforms/Instruments/ComposedOf/Characteristics/Description" ] }, { "fields": [ - "Platform/Characteristics/Description" + "Platforms/Characteristics/Description" ] } ] From 2accf3a9742d77e2d94e35dc3db9ef4ea9c3bc8e Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:23:58 -0500 Subject: [PATCH 035/261] Update Organization Longname GCMD Check Organization Longname GCMD Check - "Added entry for organization_long_name_gcmd_check in `checks.json`" --- pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/checks.json | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index ae4b00da..39ac51f6 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -127,6 +127,14 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this instrument added to the GCMD Instrument KMS." }, + "organization_long_name_gcmd_check": { + "failure": "The provided data center long name `{}` does not comply with the GCMD. ", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this long name added to the GCMD KMS." + }, "umm_controlled_collection_state_list_check": { "failure": "The provided Collection State `{}` is invalid.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 25cba0aa..aa7e9796 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -64,9 +64,9 @@ "check_function": "mime_type_check", "available": true }, - "organization_short_name_gcmd_check": { + "organization_long_name_gcmd_check": { "data_type": "string", - "check_function": "organization_short_name_gcmd_check", + "check_function": "organization_long_name_gcmd_check", "available": true }, "instrument_short_long_name_consistency_check": { From 0c339ac7e805c4607fea710ebd2895193eb90a88 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:30:52 -0500 Subject: [PATCH 036/261] Update Instrument Short/Longname Consistency Check Update Instrument Short/Longname Consistency Check --- pyQuARC/schemas/rule_mapping.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f8ba5ed9..fadc0597 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2010,33 +2010,33 @@ "umm-json": [ { "fields": [ - "Platform/Instrument/ShortName", - "Platform/Instrument/LongName" + "Platforms/Instruments/ShortName", + "Platforms/Instruments/LongName" ], "dependencies": [ [ "instrument_short_name_gcmd_check", - "Platform/Instrument/ShortName" + "Platforms/Instruments/ShortName" ], [ "instrument_long_name_gcmd_check", - "Platform/Instrument/LongName" + "Platforms/Instruments/LongName" ] ] }, { "fields": [ - "Platform/Instrument/ComposedOf/ShortName", - "Platform/Instrument/ComposedOf/LongName" + "Platforms/Instruments/ComposedOf/ShortName", + "Platforms/Instruments/ComposedOf/LongName" ], "dependencies": [ [ "instrument_short_name_gcmd_check", - "Platform/Instrument/ComposedOf/ShortName" + "Platforms/Instruments/ComposedOf/ShortName" ], [ "instrument_long_name_gcmd_check", - "Platform/Instrument/ComposedOf/LongName" + "Platforms/Instruments/ComposedOf/LongName" ] ] } From 23a7692f6d5f608fde8b7b7fa32bccf1201c3fb3 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:33:45 -0500 Subject: [PATCH 037/261] Update Instrument Shortname GCMD Check Update Instrument Shortname GCMD Check --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fadc0597..cd917464 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2074,12 +2074,12 @@ "umm-json": [ { "fields": [ - "Platform/Instrument/ShortName" + "Platforms/Instruments/ShortName" ] }, { "fields": [ - "Platform/Instrument/ComposedOf/ShortName" + "Platforms/Instruments/ComposedOf/ShortName" ] } ] From 70a46a177d271508efc2ac3c36e69d8c9dc4c95b Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:36:11 -0500 Subject: [PATCH 038/261] Update Instrument Long Name Check Update Instrument Long Name Check --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index cd917464..86aa4595 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2117,12 +2117,12 @@ "umm-json": [ { "fields": [ - "Platform/Instrument/LongName" + "Platforms/Instruments/LongName" ] }, { "fields": [ - "Platform/Instrument/ComposedOf/LongName" + "Platforms/Instruments/ComposedOf/LongName" ] } ] From 4cc0aa0b39edc8385d44949e74d1758a5676fb72 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:41:30 -0500 Subject: [PATCH 039/261] Update Platform Shortname GCMD Check Update Platform Shortname GCMD Check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 86aa4595..c04de510 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2150,7 +2150,7 @@ "umm-json": [ { "fields": [ - "Platform/ShortName" + "Platforms/ShortName" ] } ] From 239958f452076dcb6de6da9bea66ae147ceca098 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:44:18 -0500 Subject: [PATCH 040/261] Update Data Format GCMD Check Update Data Format GCMD Check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index c04de510..ae7cc9b1 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2178,7 +2178,7 @@ "umm-json": [ { "fields": [ - "Distribution/Format" + "ArchiveAndDistributionInformation/FileDistributionInformation/Format" ] } ] From 90ceb133c95d34bc606bd6bd9d54221614eac4da Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:50:27 -0500 Subject: [PATCH 041/261] Update Platform Longname GCMD Check Update Platform Longname GCMD Check --- pyQuARC/schemas/check_messages.json | 16 ++++++++-------- pyQuARC/schemas/rule_mapping.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 39ac51f6..7c8e654b 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -295,14 +295,14 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this data format added to the Granule Data Format GCMD List." }, - "platform_long_name_gcmd_check": { - "failure": "The provided platform long name `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this data format added to the GCMD Data Format KMS." - }, + "platform_long_name_gcmd_check": { + "failure": "The provided platform long name `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform added to the GCMD Platform KMS." + }, "spatial_keyword_gcmd_check": { "failure": "The provided spatial keyword `{}` does not comply with the GCMD.", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index ae7cc9b1..60e8c01f 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2206,7 +2206,7 @@ "umm-json": [ { "fields": [ - "Platform/LongName" + "Platforms/LongName" ] } ] From 1c68b0ce7c29f864fd077ce3d513a66fe07bd544 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 16:56:06 -0500 Subject: [PATCH 042/261] Update Platform Type GCMD Check Update Platform Type GCMD Check --- pyQuARC/schemas/check_messages.json | 32 ++++++++++++++--------------- pyQuARC/schemas/rule_mapping.json | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 7c8e654b..01ca1b7d 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -303,22 +303,22 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform added to the GCMD Platform KMS." }, - "spatial_keyword_gcmd_check": { - "failure": "The provided spatial keyword `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this spatial keyword added to the GCMD platform KMS." - }, - "platform_type_gcmd_check": { - "failure": "The provided platform type `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform type added to the GCMD Locations KMS." - }, + "spatial_keyword_gcmd_check": { + "failure": "The provided spatial keyword `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this spatial keyword added to the GCMD Locations KMS." + }, + "platform_type_gcmd_check": { + "failure": "The provided platform type `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform type added to the GCMD Platforms KMS." + }, "campaign_short_long_name_consistency_check": { "failure": "The provided campaign short name `{}` and long name `{}` aren't consistent.", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 60e8c01f..a21f432a 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2331,7 +2331,7 @@ "umm-json": [ { "fields": [ - "Platform/Type" + "Platforms/Type" ] } ] From 65da49e697b99117e6e32190bb3dd4acd6fd9dce Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 17:03:10 -0500 Subject: [PATCH 043/261] Update Campaign Short/Long name consistency Check Update Campaign Short/Long name consistency Check --- pyQuARC/schemas/rule_mapping.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a21f432a..faadfeb3 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2381,17 +2381,17 @@ "umm-json": [ { "fields": [ - "Project/ShortName", - "Project/LongName" + "Projects/ShortName", + "Projects/LongName" ], "dependencies": [ [ "campaign_short_name_gcmd_check", - "Project/ShortName" + "Projects/ShortName" ], [ "campaign_long_name_gcmd_check", - "Project/LongName" + "Projects/LongName" ] ] } From 9cf7f7a2b686e117c237c627c34a7fc9be4e8362 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 17:06:31 -0500 Subject: [PATCH 044/261] Update Campaign Short Name GCMD Check Update Campaign Short Name GCMD Check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index faadfeb3..a61648d4 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2420,7 +2420,7 @@ "umm-json": [ { "fields": [ - "Project/ShortName" + "Projects/ShortName" ] } ] From 50d427eb56f5c7ef925241663b072509118577e7 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 17:10:02 -0500 Subject: [PATCH 045/261] Update Campaign Long Name GCMD Check Update Campaign Long Name GCMD Check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a61648d4..40a7c181 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2448,7 +2448,7 @@ "umm-json": [ { "fields": [ - "Project/LongName" + "Projects/LongName" ] } ] From a7d0e9c5272b5aa22a38714f689595f99256b4b9 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 17:20:03 -0500 Subject: [PATCH 046/261] Update Campaign Name Presence Check Update Campaign Name Presence Check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 40a7c181..edb38748 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2750,7 +2750,7 @@ "umm-json": [ { "fields": [ - "Project/ShortName" + "Projects/ShortName" ] } ] From d16fcfcc0b0802244e65f210cd5071bcbf9add3e Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 17:33:53 -0500 Subject: [PATCH 047/261] Update Collection Progress Related Fields Consistency Check Collection Progress Related Fields Consistency Check - "1. pyQuARC no longer breaks when Collection Progress is ""COMPLETE"" - this was fixed when the controlled keywords check was modified for case sensitivity (removed .upper()) 2. This seems to be an issue with ends_at_present_flag_presence_check 3. Logic makes sense, so not sure why it isn't working" --- pyQuARC/code/custom_validator.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index faa2d242..41a56485 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -158,21 +158,13 @@ def boolean_check(field_value): @if_arg def collection_progress_consistency_check(collection_state, ends_at_present_flag, ending_date_time): # Logic: https://github.com/NASA-IMPACT/pyQuARC/issues/61 - validity = False - collection_state = collection_state.upper() - ending_date_time_exists = bool(ending_date_time) - ends_at_present_flag_exists = bool(ends_at_present_flag) - ends_at_present_flag = str(ends_at_present_flag).lower() if ends_at_present_flag_exists else None - + validity = True if collection_state in ["ACTIVE", "IN WORK"]: - validity = (not ending_date_time_exists) and (ends_at_present_flag == "true") + validity = (not bool(ending_date_time)) and str(ends_at_present_flag).lower() == "true" elif collection_state == "COMPLETE": - validity = ending_date_time_exists and ( - not ends_at_present_flag_exists or ( - ends_at_present_flag == "false" - ) - ) - + validity = bool(ending_date_time) and (not bool(str(ends_at_present_flag)) or ends_at_present_flag.lower() == "false") + else: + validity = False return { "valid": validity, "value": collection_state From feea1486bfd57c7d0c2e399d0fa846ecdd6a112f Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 23 Mar 2022 17:37:17 -0500 Subject: [PATCH 048/261] Update Online Resource Type GCMD Check Online Resource Type GCMD Check - What about RelatedUrls/Subtype and RelatedUrls/URLContentType? These GCMD controlled fields do not appear to be included for testing --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index edb38748..3c77ccc8 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3169,7 +3169,7 @@ "umm-json": [ { "fields": [ - "RelatedUrl/Type" + "RelatedUrls/Type" ] } ] From 60232aa14cc6666560208955583f8024f39b3ecc Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 11:26:14 -0500 Subject: [PATCH 049/261] Update Characteristic Name Uniqueness Check Update Characteristic Name Uniqueness Check --- pyQuARC/code/custom_validator.py | 2 +- pyQuARC/schemas/rule_mapping.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 41a56485..61d4709f 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -174,7 +174,7 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag @if_arg def characteristic_name_uniqueness_check(characteristics): seen, duplicates = set(), set() - for characteristic in characteristics['Characteristic']: + for characteristic in characteristics: name = characteristic['Name'] if name in seen: duplicates.add(name) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 3c77ccc8..aa8e24ff 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3213,7 +3213,7 @@ "umm-json": [ { "fields": [ - "Platform/Characteristics" + "Platforms/Characteristics" ] } ] From 582a1a4fb7c5873fb72126d1715881fe3da5ab16 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 11:32:42 -0500 Subject: [PATCH 050/261] Update FTP Protocol Check Update FTP Protocol Check --- pyQuARC/schemas/rule_mapping.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index aa8e24ff..d3ae8b6c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3457,17 +3457,17 @@ "umm-json": [ { "fields": [ - "PublicationReference/OnlineResource/Protocol" + "UseConstraints/LicenseURL/Protocol" ] }, { "fields": [ - "RelatedUrl/GetService/Protocol" + "RelatedUrls/GetService/Protocol" ] }, { "fields": [ - "ResourceCitation/OnlineResource/Protocol" + "CollectionCitations/OnlineResource/Protocol" ] } ] From a299796ef99bcbc8dd0a935378020e46ae0e9dba Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 11:36:35 -0500 Subject: [PATCH 051/261] Update Citation Version Check Update Citation Version Check --- pyQuARC/schemas/rule_mapping.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index d3ae8b6c..2f86358d 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3494,9 +3494,10 @@ "umm-json": [ { "fields": [ - "ResourceCitation/Version", + "CollectionCitations/Version", "Version" - ] + ], + "relation": "eq" } ] }, From fcf7cebfd525bfec50edf2cf45153cc15efb8a7e Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 11:45:54 -0500 Subject: [PATCH 052/261] Update Default Date Check Default Date Check - changed rule mappings for default date check and datetime format check --- pyQuARC/schemas/rule_mapping.json | 44 ++----------------------------- 1 file changed, 2 insertions(+), 42 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 2f86358d..325adb9f 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3552,52 +3552,12 @@ "umm-json": [ { "fields": [ - "MetadataDate/Date" - ] - }, - { - "fields": [ - "AdditionalAttribute/UpdateDate" - ] - }, - { - "fields": [ - "TemporalExtent/RangeDateTime/BeginningDateTime" - ] - }, - { - "fields": [ - "TemporalExtent/RangeDateTime/EndingDateTime" - ] - }, - { - "fields": [ - "TemporalExtent/SingleDateTime" - ] - }, - { - "fields": [ - "TemporalExtent/PeriodicDateTime" - ] - }, - { - "fields": [ - "TemporalExtent/PeriodicDateTime/StartDate" - ] - }, - { - "fields": [ - "TemporalExtent/PeriodicDateTime/EndDate" - ] - }, - { - "fields": [ - "PaleoTemporalCoverage/PaleoStartDate" + "MetadataDates/Date" ] }, { "fields": [ - "PaleoTemporalCoverage/PaleoEndDate" + "DataDates/Date" ] } ] From e90eea0fb64dfc1149339e0775b0a20b3d6e93d9 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 11:55:46 -0500 Subject: [PATCH 053/261] Update IDN Node Shortname GCMD Check IDN Node Shortname GCMD Check - Should the severity be an error instead of a warning? --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 325adb9f..47de1166 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3729,7 +3729,7 @@ "umm-json": [ { "fields": [ - "DirectoryName/ShortName" + "DirectoryNames" ] } ] From f778cc9f73f838948f58d7557ed7ecef96e3c3f5 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 12:01:57 -0500 Subject: [PATCH 054/261] Update Chrono Unit GCMD Check Update Chrono Unit GCMD Check --- pyQuARC/schemas/rule_mapping.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 47de1166..6896532c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3754,11 +3754,11 @@ "umm-json": [ { "fields": [ - "PaleoTemporalCoverage/ChronostratigraphicUnit/Eon", - "PaleoTemporalCoverage/ChronostratigraphicUnit/Era", - "PaleoTemporalCoverage/ChronostratigraphicUnit/Period", - "PaleoTemporalCoverage/ChronostratigraphicUnit/Epoch", - "PaleoTemporalCoverage/ChronostratigraphicUnit/Stage" + "PaleoTemporalCoverages/ChronostratigraphicUnits/Eon", + "PaleoTemporalCoverages/ChronostratigraphicUnits/Era", + "PaleoTemporalCoverages/ChronostratigraphicUnits/Period", + "PaleoTemporalCoverages/ChronostratigraphicUnits/Epoch", + "PaleoTemporalCoverages/ChronostratigraphicUnits/Stage" ] } ] From 4affeba4fd0f3b93682535b42ab93834b8fb51eb Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 12:07:38 -0500 Subject: [PATCH 055/261] Update Platform Type Presence Check Update Platform Type Presence Check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 6896532c..d8835921 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3909,7 +3909,7 @@ "umm-json": [ { "fields": [ - "Platform/Type" + "Platforms/Type" ] } ] From 1372bb6a4e771c3d67732a074e043ff464bbd6e6 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 12:23:57 -0500 Subject: [PATCH 056/261] Add Metadata Update Time Logic Check Metadata Update Time Logic Check - "rule_mapping.json - Added fields for metadata_update_time_logic_check check_message.json - Added error message" --- pyQuARC/schemas/check_messages.json | 10 +++++++++- pyQuARC/schemas/rule_mapping.json | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 01ca1b7d..5b5e25e9 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -838,5 +838,13 @@ "url": "" }, "remediation": "Please supply the corresponding long name for the short name." - } + }, + "metadata_update_time_logic_check": { + "failure": "Note: the UPDATE Metadata Date comes before the provided CREATE Metadata Date.", + "help": { + "message": "", + "url": "https://wiki.earthdata.nasa.gov/display/CMR/Metadata+Dates" + }, + "remediation": "Update the UPDATE Metadata Date time so that it is identical to the CREATE Metadata Date (in the event that the metadata has never been updated) or so that it comes chronologically after the UPDATE Metadata Date." + } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index d8835921..72f59713 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3967,5 +3967,21 @@ ], "severity": "warning", "check_id": "controlled_keywords_check" - } + }, + "metadata_update_time_logic_check": { + "rule_name": "Metadata Update Time Logic Check", + "fields_to_apply": { + "umm-json": [ + { + "fields": [ + "MetadataDates/Date?Type=UPDATE", + "MetadataDates/Date?Type=CREATE" + ], + "relation": "gte" + } + ] + }, + "severity": "info", + "check_id": "date_compare" + } } From d7f69a4690322553ccd49add78fc904e8f466f96 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 12:42:59 -0500 Subject: [PATCH 057/261] Added Future Date Check Future Date Check - "rule_mapping.json - Added fields for datetime_format_check and future_date_check" --- pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 72f59713..29e08e9d 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -396,7 +396,6 @@ "DataDates/Date?Type=REVIEW" ] }, - { "fields": [ "MetadataDates/Date?Type=CREATE" @@ -412,7 +411,6 @@ "DataDates/Date" ] }, - { "fields": [ "MetadataDates/Date?Type=UPDATE" @@ -3297,6 +3295,18 @@ "DIF/Metadata_Dates/Data_Future_Review" ] } + ], + "umm-json":[ + { + "fields": [ + "DataDates/Date?Type=REVIEW" + ] + }, + { + "fields": [ + "MetadataDates/Date?Type=REVIEW" + ] + } ] }, "data": [ From cb11c5a3df3b3145aa4893a2c3ca45d0f7b58a20 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 12:58:23 -0500 Subject: [PATCH 058/261] Added URL Description Uniqueness Check URL Description Uniqueness Check - "rule_mapping.json - Added rule using check: ""controlled_keywords_check"" checks.json - Added check check_messages.json - Added error message custom_validator.py - Added check" --- pyQuARC/code/custom_validator.py | 16 ++++++++++++++++ pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/checks.json | 5 +++++ pyQuARC/schemas/rule_mapping.json | 19 +++++++++++++++++++ 4 files changed, 48 insertions(+) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 61d4709f..d919757f 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -216,3 +216,19 @@ def get_data_url_check_umm(related_urls): "valid": False, "value": "N/A" } + + @staticmethod + @if_arg + def url_description_uniqueness_check(related_urls): + seen, duplicates = set(), set() + for url_obj in related_urls: + description = url_obj.get('Description') + if description in seen: + duplicates.add(description) + else: + seen.add(description) + + return { + "valid": not bool(duplicates), + "value": ', '.join(duplicates) + } \ No newline at end of file diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 5b5e25e9..1708d315 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -839,6 +839,14 @@ }, "remediation": "Please supply the corresponding long name for the short name." }, + "url_description_uniqueness_check": { + "failure": "Duplicate URL description name/s `{}`.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a unique name for each URL description." + }, "metadata_update_time_logic_check": { "failure": "Note: the UPDATE Metadata Date comes before the provided CREATE Metadata Date.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index aa7e9796..7e4aada2 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -243,5 +243,10 @@ "data_type": "custom", "check_function": "get_data_url_check_umm", "available": true + }, + "url_description_uniqueness_check": { + "data_type": "custom", + "check_function": "url_description_uniqueness_check", + "available": true } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 29e08e9d..d8fea9d9 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3978,6 +3978,25 @@ "severity": "warning", "check_id": "controlled_keywords_check" }, + "url_description_uniqueness_check": { + "rule_name": "URL Description Uniqueness Check", + "fields_to_apply": { + "umm-json": [ + { + "fields": [ + "RelatedUrls" + ] + }, + { + "fields": [ + "DataCenters/ContactInformation/RelatedUrls" + ] + } + ] + }, + "severity": "info", + "check_id": "url_description_uniqueness_check" + }, "metadata_update_time_logic_check": { "rule_name": "Metadata Update Time Logic Check", "fields_to_apply": { From 78ecacfc6896fe19e33f4de463aa10e2b0e6d14b Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 24 Mar 2022 13:10:39 -0500 Subject: [PATCH 059/261] Added Periodic Duration Unit Check Periodic Duration Unit Check - "rule_mapping.json - Added rule using check: ""controlled_keywords_check"" check_messages.json - Added error message *Note: will need to add field for ECHO10" --- pyQuARC/schemas/check_messages.json | 10 +++++++++- pyQuARC/schemas/rule_mapping.json | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 1708d315..0042c3dd 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -854,5 +854,13 @@ "url": "https://wiki.earthdata.nasa.gov/display/CMR/Metadata+Dates" }, "remediation": "Update the UPDATE Metadata Date time so that it is identical to the CREATE Metadata Date (in the event that the metadata has never been updated) or so that it comes chronologically after the UPDATE Metadata Date." - } + }, + "periodic_duration_unit_check": { + "failure": "The provided Periodic Duration Unit `{}` does not comply with the GCMD hierarchy.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index d8fea9d9..b4edadf9 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3978,6 +3978,27 @@ "severity": "warning", "check_id": "controlled_keywords_check" }, + "periodic_duration_unit_check": { + "rule_name": "Periodic Duration Unit Check", + "fields_to_apply": { + "umm-json": [ + { + "fields": [ + "TemporalExtents/PeriodicDateTimes/DurationUnit" + ] + } + ] + }, + "data": [ + [ + "DAY", + "MONTH", + "YEAR" + ] + ], + "severity": "warning", + "check_id": "controlled_keywords_check" + }, "url_description_uniqueness_check": { "rule_name": "URL Description Uniqueness Check", "fields_to_apply": { From 8e01860b72287a9f01de1b988190876cb578ab6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 28 Mar 2022 10:49:29 -0500 Subject: [PATCH 060/261] Add ummg schema file --- pyQuARC/schemas/umm-g-json-schema.json | 1310 ++++++++++++++++++++++++ 1 file changed, 1310 insertions(+) create mode 100644 pyQuARC/schemas/umm-g-json-schema.json diff --git a/pyQuARC/schemas/umm-g-json-schema.json b/pyQuARC/schemas/umm-g-json-schema.json new file mode 100644 index 00000000..3602cad0 --- /dev/null +++ b/pyQuARC/schemas/umm-g-json-schema.json @@ -0,0 +1,1310 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.4", + "title": "UMM-G", + "type": "object", + "additionalProperties": false, + "properties": { + "GranuleUR": { + "description": "The Universal Reference ID of the granule referred by the data provider. This ID is unique per data provider.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/ProviderDateType" + }, + "minItems": 1, + "maxItems": 4, + "uniqueItems":true + }, + "CollectionReference": { + "description": "The collection metadata record's short name and version, or entry title to which this granule metadata record belongs.", + "$ref": "#/definitions/CollectionReferenceType" + }, + "AccessConstraints": { + "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.", + "$ref": "#/definitions/AccessConstraintsType" + }, + "DataGranule": { + "description": "This entity stores basic descriptive characteristics associated with a granule.", + "$ref": "#/definitions/DataGranuleType" + }, + "PGEVersionClass": { + "description": "This entity stores basic descriptive characteristics related to the Product Generation Executable associated with a granule.", + "$ref": "#/definitions/PGEVersionClassType" + }, + "TemporalExtent": { + "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", + "$ref": "#/definitions/TemporalExtentType" + }, + "SpatialExtent": { + "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.", + "$ref": "#/definitions/SpatialExtentType" + }, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/OrbitCalculatedSpatialDomainType" + }, + "minItems": 1, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/MeasuredParameterType" + }, + "minItems": 1, + "uniqueItems":true + }, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/PlatformType" + }, + "minItems": 1, + "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 — 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.", + "type": "array", + "items": { + "$ref": "#/definitions/ProjectType" + }, + "minItems": 1, + "uniqueItems": true + }, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/AdditionalAttributeType" + }, + "minItems": 1, + "uniqueItems": true + }, + "InputGranules": { + "description": "This entity contains the identification of the input granule(s) for a specific granule.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "minItems": 1, + "uniqueItems": true + }, + "TilingIdentificationSystem": { + "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.", + "$ref": "#/definitions/TilingIdentificationSystemType" + }, + "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" + }, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/RelatedUrlType" + }, + "minItems": 1 + }, + "NativeProjectionNames": { + "description": "Represents the native projection of the granule if the granule has a native projection.", + "type": "array", + "items": { + "$ref": "#/definitions/ProjectionNameType" + } + }, + "GridMappingNames": { + "description": "Represents the native grid mapping of the granule, if the granule is gridded.", + "type": "array", + "items": { + "$ref": "#/definitions/GridMappingNameType" + } + }, + "MetadataSpecification": { + "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.", + "$ref": "#/definitions/MetadataSpecificationType" + } + }, + "required": ["GranuleUR", "ProviderDates", "CollectionReference", "MetadataSpecification"], + + + + "definitions": { + "ProviderDateType": { + "type": "object", + "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": { + "description": "This is the date that an event associated with the granule occurred.", + "format": "date-time", + "type": "string" + }, + "Type": { + "description": "This is the type of event associated with the date. For example, Creation or Upate.", + "$ref": "#/definitions/ProviderDateTypeEnum" + } + }, + "required": ["Date", "Type"] + }, + "CollectionReferenceType": { + "type": "object", + "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.", + "type": "string", + "minLength": 1, + "maxLength": 85 + }, + "Version": { + "description": "The collection's version as per the UMM-C.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["ShortName", "Version"] + }, + { + "additionalProperties": false, + "properties": { + "EntryTitle": { + "description": "The collections entry title as per the UMM-C.", + "type": "string", + "minLength": 1, + "maxLength": 1030 + } + }, + "required": ["EntryTitle"] + }] + }, + "AccessConstraintsType": { + "type": "object", + "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.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "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"] + }, + "DataGranuleType": { + "type": "object", + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/ArchiveAndDistributionInformationType" + }, + "minItems": 1, + "uniqueItems":true + }, + "ReprocessingPlanned": { + "description": "Granule level, stating what reprocessing may be performed on this granule.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ReprocessingActual": { + "description": "Granule level, stating what reprocessing has been performed on this granule.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DayNightFlag": { + "description": "This attribute is used to identify if a granule was collected during the day, night (between sunset and sunrise) or both.", + "type": "string", + "enum": ["Day", "Night", "Both", "Unspecified"] + }, + "ProductionDateTime": { + "description": "The date and time a specific granule was produced by a PGE.", + "format": "date-time", + "type": "string" + }, + "Identifiers": { + "description": "This holds any granule identifiers the provider wishes to provide.", + "type": "array", + "items": {"$ref": "#/definitions/IdentifierType"}, + "minItems": 1, + "uniqueItems":true + } + }, + "required": ["DayNightFlag", "ProductionDateTime"] + }, + "ArchiveAndDistributionInformationType": { + "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.", + "anyOf": [{"$ref": "#/definitions/FilePackageType"}, {"$ref": "#/definitions/FileType"}] + }, + "FilePackageType": { + "type": "object", + "additionalProperties": false, + "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": { + "Name": { + "description": "This field describes the name of the actual file.", + "$ref": "#/definitions/FileNameType" + }, + "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" + }, + "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" + }, + "SizeUnit": { + "description": "The unit of the file size.", + "$ref": "#/definitions/FileSizeUnitEnum" + }, + "Format": { + "description": "This element defines a single format for a distributable artifact.", + "$ref": "#/definitions/DataFormatType" + }, + "MimeType": { + "description": "The mime type of the resource.", + "$ref": "#/definitions/MimeTypeEnum" + }, + "Checksum": { + "description": "Allows the provider to provide the checksum value for the file.", + "$ref": "#/definitions/ChecksumType" + }, + "Files": { + "description": "Allows the provider to add the list of the files that are included in this one.", + "type": "array", + "items": {"$ref": "#/definitions/FileType"}, + "uniqueItems": true, + "minItems": 1 + } + }, + "required": ["Name"], + "dependencies": { + "Size": ["SizeUnit"] + } + }, + "FileType": { + "type": "object", + "additionalProperties": false, + "description": "This set of elements describes a file. The file can be a part of the entire granule or is the granule.", + "properties": { + "Name": { + "description": "This field describes the name of the actual file.", + "$ref": "#/definitions/FileNameType" + }, + "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" + }, + "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" + }, + "SizeUnit": { + "description": "The unit of the file size.", + "$ref": "#/definitions/FileSizeUnitEnum" + }, + "Format": { + "description": "This element defines a single format for a distributable artifact.", + "$ref": "#/definitions/DataFormatType" + }, + "FormatType": { + "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", + "type": "string", + "enum": ["Native", "Supported", "NA"] + }, + "MimeType": { + "description": "The mime type of the resource.", + "$ref": "#/definitions/MimeTypeEnum" + }, + "Checksum": { + "description": "Allows the provider to provide the checksum value for the file.", + "$ref": "#/definitions/ChecksumType" + } + }, + "required": ["Name"], + "dependencies": { + "Size": ["SizeUnit"] + } + }, + "IdentifierType" :{ + "type": "object", + "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.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "IdentifierType": { + "description": "The enumeration of known identifier types.", + "type": "string", + "enum": ["ProducerGranuleId", "LocalVersionId", "FeatureId", "CRID"] + }, + "IdentifierName": { + "description": "The name of the identifier.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Identifier","IdentifierType"] + }, + { + "additionalProperties": false, + "properties": { + "Identifier": { + "description": "The identifier value.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "IdentifierType": { + "description": "The enumeration of known identifier types.", + "type": "string", + "enum": ["Other"] + }, + "IdentifierName": { + "description": "The Name of identifier.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Identifier","IdentifierType","IdentifierName"] + }] + }, + "PGEVersionClassType": { + "type": "object", + "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.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "PGEVersion": { + "description": "Version of the product generation executable that produced the granule.", + "type": "string", + "minLength": 1, + "maxLength": 10 + } + }, + "required": ["PGEVersion"] + }, + "TemporalExtentType": { + "type": "object", + "description": "Information which describes the temporal extent of a specific granule.", + "oneOf": [{ + "additionalProperties": false, + "properties": { + "RangeDateTime": { + "description": "Stores the data acquisition start and end date/time for a granule.", + "$ref": "#/definitions/RangeDateTimeType" + } + }, + "required": ["RangeDateTime"] + }, { + "additionalProperties": false, + "properties": { + "SingleDateTime": { + "description": "Stores the data acquisition date/time for a granule.", + "format": "date-time", + "type": "string" + } + }, + "required": ["SingleDateTime"] + }] + }, + "RangeDateTimeType": { + "type": "object", + "additionalProperties": false, + "description": "Stores the data acquisition start and end date/time for a granule.", + "properties": { + "BeginningDateTime": { + "description": "The time when the temporal coverage period being described began.", + "format": "date-time", + "type": "string" + }, + "EndingDateTime": { + "description": "The time when the temporal coverage period being described ended.", + "format": "date-time", + "type": "string" + } + }, + "required": ["BeginningDateTime"] + }, + "SpatialExtentType": { + "type": "object", + "additionalProperties": false, + "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.", + "type": "array", + "items": {"$ref": "#/definitions/GranuleLocalityType"}, + "minItems": 1, + "uniqueItems": true + }, + "HorizontalSpatialDomain": { + "description": "This represents the granule horizontal spatial domain information.", + "$ref": "#/definitions/HorizontalSpatialDomainType" + }, + "VerticalSpatialDomains": { + "description": "This represents the domain value and type for the granule's vertical spatial domain.", + "type": "array", + "items": {"$ref": "#/definitions/VerticalSpatialDomainType"}, + "minItems":1, + "uniqueItems":true + } + }, + "anyOf": [{ + "required": ["GranuleLocalities"] + }, { + "required": ["HorizontalSpatialDomain"] + }, { + "required": ["VerticalSpatialDomains"] + }] + }, + "HorizontalSpatialDomainType": { + "type": "object", + "description": "Information about a granule with horizontal spatial coverage.", + "additionalProperties": false, + "properties": { + "ZoneIdentifier": { + "description": "The appropriate numeric or alpha code used to identify the various zones in the granule's grid coordinate system.", + "$ref": "#/definitions/ZoneIdentifierType" + }, + "Geometry": { + "description": "This entity holds the geometry representing the spatial coverage information of a granule.", + "$ref": "#/definitions/GeometryType" + }, + "Orbit": { + "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.", + "$ref": "#/definitions/OrbitType" + }, + "Track": { + "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.", + "$ref": "#/definitions/TrackType" + } + }, + "oneOf": [{ + "required": ["Geometry"] + }, { + "required": ["Orbit"] + }] + }, + "GeometryType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds the geometry representing the spatial coverage information of a granule.", + "properties": { + "Points": { + "description": "The horizontal spatial coverage of a point.", + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 1, + "uniqueItems": true + }, + "BoundingRectangles": { + "description": "This entity holds the horizontal spatial coverage of a bounding box.", + "type": "array", + "items": { + "$ref": "#/definitions/BoundingRectangleType" + }, + "minItems": 1, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/GPolygonType" + }, + "minItems": 1, + "uniqueItems": true + }, + "Lines": { + "description": "This entity holds the horizontal spatial coverage of a line. A line area contains at least two points.", + "type": "array", + "items": { + "$ref": "#/definitions/LineType" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "anyOf": [{ + "required": ["Points"] + }, { + "required": ["BoundingRectangles"] + }, { + "required": ["GPolygons"] + }, { + "required": ["Lines"] + }] + }, + "PointType": { + "type": "object", + "additionalProperties": false, + "description": "The longitude and latitude values of a spatially referenced point in degrees.", + "properties": { + "Longitude": { + "$ref": "#/definitions/LongitudeType" + }, + "Latitude": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["Longitude", "Latitude"] + }, + "BoundingRectangleType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds the horizontal spatial coverage of a bounding box.", + "properties": { + "WestBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "NorthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + }, + "EastBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "SouthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["WestBoundingCoordinate", "NorthBoundingCoordinate", "EastBoundingCoordinate", "SouthBoundingCoordinate"] + }, + "GPolygonType": { + "type": "object", + "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"] + }, + "BoundaryType": { + "type": "object", + "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": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 3 + } + }, + "required": ["Points"] + }, + "ExclusiveZoneType": { + "type": "object", + "additionalProperties": false, + "description": "Contains the excluded boundaries from the GPolygon.", + "properties": { + "Boundaries": { + "type": "array", + "items": { + "$ref": "#/definitions/BoundaryType" + }, + "minItems": 1 + } + }, + "required": ["Boundaries"] + }, + "LineType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds the horizontal spatial coverage of a line. A line area contains at lease two points.", + "properties": { + "Points": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 2 + } + }, + "required": ["Points"] + }, + "OrbitType":{ + "type": "object", + "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": { + "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).", + "$ref": "#/definitions/LongitudeType" + }, + "StartLatitude": { + "description": "Granule's starting latitude.", + "$ref": "#/definitions/LatitudeType" + }, + "StartDirection": { + "description": "Ascending or descending. Valid input: 'A' or 'D'", + "$ref": "#/definitions/OrbitDirectionTypeEnum" + }, + "EndLatitude": { + "description": "Granule's ending latitude.", + "$ref": "#/definitions/LatitudeType" + }, + "EndDirection": { + "description": "Ascending or descending. Valid input: 'A' or 'D'", + "$ref": "#/definitions/OrbitDirectionTypeEnum" + } + }, + "required": ["AscendingCrossing", "StartLatitude", "StartDirection", "EndLatitude", "EndDirection"] + }, + "TrackType": { + "type": "object", + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/TrackPassTileType" + }, + "minItems": 1 + } + }, + "required": ["Cycle", "Passes"] + }, + "TrackPassTileType": { + "type": "object", + "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.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + }, + "required": ["Pass"] + }, + "VerticalSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "description": "This entity contains the type and value for the granule's vertical spatial domain.", + "properties": { + "Type": { + "description": "Describes the type of the area of vertical space covered by the granule locality.", + "$ref": "#/definitions/VerticalSpatialDomainTypeEnum" + }, + "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.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "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).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "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).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Unit": { + "description": "Describes the unit of the vertical extent value.", + "type": "string", + "enum": ["Fathoms", "Feet", "HectoPascals", "Kilometers", "Meters", "Millibars","PoundsPerSquareInch", "Atmosphere", "InchesOfMercury", "InchesOfWater"] + } + }, + "oneOf": [{ + "required": ["Type", "Value"] + }, { + "required":["Type","MinimumValue", "MaximumValue"] + }], + "allOf": [{ + "not": { + "required": ["Value", "MinimumValue"] + } + }, { + "not": { + "required": ["Value", "MaximumValue"] + } + }] + }, + "OrbitCalculatedSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "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": { + "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.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "OrbitNumber": { + "description": "The orbit number to be used in calculating the spatial extent of this data.", + "type": "integer" + }, + "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" + }, + "EquatorCrossingLongitude": { + "description": "This attribute represents the terrestrial longitude of the descending equator crossing.", + "$ref": "#/definitions/LongitudeType" + }, + "EquatorCrossingDateTime": { + "description": "This attribute represents the date and time of the descending equator crossing.", + "format": "date-time", + "type": "string" + } + }, + "anyOf": [{ + "required": ["OrbitalModelName"] + }, { + "required": ["EquatorCrossingLongitude"] + }, { + "required": ["EquatorCrossingDateTime"] + }, { + "required": ["OrbitNumber"] + }, { + "required": ["BeginOrbitNumber", "EndOrbitNumber"] + }], + "allOf": [{ + "not": { + "required": ["OrbitNumber", "BeginOrbitNumber"] + } + }, { + "not": { + "required": ["OrbitNumber", "EndOrbitNumber"] + } + }] + }, + "MeasuredParameterType": { + "type": "object", + "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.", + "type": "string", + "minLength": 1, + "maxLength": 250 + }, + "QAStats": { + "description": "The associated quality statistics.", + "$ref": "#/definitions/QAStatsType" + }, + "QAFlags": { + "description": "The associated quality flags.", + "$ref": "#/definitions/QAFlagsType" + } + }, + "required": ["ParameterName"] + }, + "QAStatsType": { + "type": "object", + "additionalProperties": false, + "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": { + "QAPercentMissingData": { + "description": "Granule level % missing data. This attribute can be repeated for individual parameters within a granule.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "QAPercentOutOfBoundsData": { + "description": "Granule level % out of bounds data. This attribute can be repeated for individual parameters within a granule.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "QAPercentInterpolatedData": { + "description": "Granule level % interpolated data. This attribute can be repeated for individual parameters within a granule.", + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "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).", + "type": "number", + "minimum": 0, + "maximum": 100 + } + }, + "anyOf": [{ + "required": ["QAPercentMissingData"] + }, { + "required": ["QAPercentOutOfBoundsData"] + }, { + "required": ["QAPercentInterpolatedData"] + }, { + "required": ["QAPercentCloudCover"] + }] + }, + "QAFlagsType": { + "type": "object", + "additionalProperties": false, + "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.", + "type": "string", + "enum": ["Passed", "Failed", "Suspect", "Undetermined"] + }, + "AutomaticQualityFlagExplanation": { + "description": "A text explanation of the criteria used to set automatic quality flag; including thresholds or other criteria.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "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.", + "type": "string", + "enum": ["Passed", "Failed", "Being Investigated", "Not Investigated", "Inferred Passed", "Inferred Failed", "Suspect", "Undetermined"] + }, + "OperationalQualityFlagExplanation": { + "description": "A text explanation of the criteria used to set operational quality flag; including thresholds or other criteria.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "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.", + "type": "string", + "enum": ["Passed", "Failed", "Being Investigated", "Not Investigated", "Inferred Passed", "Inferred Failed", "Suspect", "Hold", "Undetermined"] + }, + "ScienceQualityFlagExplanation": { + "description": "A text explanation of the criteria used to set science quality flag; including thresholds or other criteria.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + }, + "anyOf": [{ + "required": ["AutomaticQualityFlag"] + }, { + "required": ["OperationalQualityFlag"] + }, { + "required": ["ScienceQualityFlag"] + }] + }, + "PlatformType": { + "type": "object", + "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": { + "ShortName": { + "$ref": "#/definitions/ShortNameType" + }, + "Instruments": { + "description": "References to the devices in the parent collection that were used to measure or record data, including direct human observation.", + "type": "array", + "items": { + "$ref": "#/definitions/InstrumentType" + }, + "minItems": 1 + } + }, + "required": ["ShortName"] + }, + "InstrumentType": { + "type": "object", + "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": { + "ShortName": { + "$ref": "#/definitions/ShortNameType" + }, + "Characteristics": { + "description": "This entity is used to define item additional attributes (unprocessed, custom data).", + "type": "array", + "items": { + "$ref": "#/definitions/CharacteristicType" + }, + "minItems": 1, + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/InstrumentType" + }, + "minItems": 1, + "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).", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 20 + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": ["ShortName"] + }, + "CharacteristicType": { + "type": "object", + "additionalProperties": false, + "description": "This entity is used to reference characteristics defined in the parent collection.", + "properties": { + "Name": { + "description": "The name of the characteristic attribute.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Value": { + "description": "The value of the Characteristic attribute.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["Name", "Value"] + }, + "ProjectType": { + "type": "object", + "additionalProperties": false, + "description": "Information describing the scientific endeavor with which the granule is associated.", + "properties": { + "ShortName": { + "description": "The unique identifier by which a project is known. The project is the scientific endeavor associated with the acquisition of the collection.", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "Campaigns": { + "description": "The name of the campaign/experiment (e.g. Global climate observing system).", + "type": "array", + "items": { + "$ref": "#/definitions/CampaignType" + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": ["ShortName"] + }, + "CampaignType": { + "description": "Information describing campaign names with which the granule is associated.", + "type": "string", + "minLength": 1, + "maxLength": 40 + }, + "AdditionalAttributeType": { + "type": "object", + "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.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Values": { + "description": "Values of the additional attribute.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 500 + }, + "minItems": 1 + } + }, + "required": ["Name", "Values"] + }, + "TilingIdentificationSystemType": { + "type": "object", + "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": { + "TilingIdentificationSystemName": { + "$ref": "#/definitions/TilingIdentificationSystemNameEnum" + }, + "Coordinate1": { + "$ref": "#/definitions/TilingCoordinateType" + }, + "Coordinate2": { + "$ref": "#/definitions/TilingCoordinateType" + } + }, + "required": ["TilingIdentificationSystemName", "Coordinate1", "Coordinate2"] + }, + "TilingCoordinateType": { + "type": "object", + "additionalProperties": false, + "description": "Defines the minimum and maximum value for one dimension of a two dimensional coordinate system.", + "properties": { + "MinimumValue": { + "type": "number" + }, + "MaximumValue": { + "type": "number" + } + }, + "required": ["MinimumValue"] + }, + "RelatedUrlType": { + "type": "object", + "additionalProperties": false, + "description": "This entity holds all types of online URL associated with the granule such as guide document or ordering site etc.", + "properties": { + "URL": { + "description": "The URL for the relevant resource.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Type": { + "description": "A keyword describing the type of the online resource to this resource.", + "$ref": "#/definitions/RelatedUrlTypeEnum" + }, + "Subtype": { + "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", + "$ref": "#/definitions/RelatedUrlSubTypeEnum" + }, + "Description": { + "description": "Description of the web page at this URL.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "Format": { + "description": "The format of the resource.", + "$ref": "#/definitions/DataFormatType" + }, + "MimeType": { + "description": "The mime type of the resource.", + "$ref": "#/definitions/MimeTypeEnum" + }, + "Size": { + "description": "The size of the resource.", + "type": "number" + }, + "SizeUnit": { + "description": "Unit of information, together with Size determines total size in bytes of the resource.", + "$ref": "#/definitions/FileSizeUnitEnum" + } + }, + "required": ["URL", "Type"], + "dependencies": { + "Size": ["SizeUnit"] + } + }, + "ChecksumType": { + "type": "object", + "additionalProperties": false, + "description": "Allows the provider to provide a checksum value and checksum algorithm name to allow the user to calculate the checksum.", + "properties": { + "Value": { + "description": "Describes the checksum value for a file.", + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "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.", + "type": "string", + "enum": ["Adler-32", "BSD checksum", "Fletcher-32", "Fletcher-64", "MD5", "POSIX", "SHA-1", "SHA-2", "SHA-256", "SHA-384", "SHA-512", "SM3", "SYSV"] + } + }, + "required": ["Value", "Algorithm"] + }, + "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.", + "type": "string", + "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"] + }, + "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.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "ProviderDateTypeEnum": { + "description": "The types of dates that a metadata record can have.", + "type": "string", + "enum": ["Create", "Insert", "Update", "Delete"] + }, + "FileNameType": { + "description": "This field describes the name of the actual file.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "FileSizeUnitEnum": { + "description": "The unit of the file size.", + "type": "string", + "enum": ["KB", "MB", "GB", "TB", "PB", "NA"] + }, + "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.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "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.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "LatitudeType": { + "description": "The latitude value of a spatially referenced point, in degrees. Latitude values range from -90 to 90.", + "type": "number", + "minimum": -90, + "maximum": 90 + }, + "LongitudeType": { + "description": "The longitude value of a spatially referenced point, in degrees. Longitude values range from -180 to 180.", + "type": "number", + "minimum": -180, + "maximum": 180 + }, + "OrbitDirectionTypeEnum": { + "description": "Orbit start and end direction. A for ascending orbit and D for descending.", + "type": "string", + "enum": ["A", "D"] + }, + "ZoneIdentifierType": { + "description": "The appropriate numeric or alpha code used to identify the various zones in the granule's grid coordinate system.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "VerticalSpatialDomainTypeEnum": { + "type": "string", + "enum": ["Atmosphere Layer","Pressure", "Altitude", "Depth"] + }, + "ShortNameType": { + "description": "The unique name of the platform or instrument.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "TilingIdentificationSystemNameEnum": { + "type": "string", + "enum": ["CALIPSO", "MISR", "MODIS Tile EASE", "MODIS Tile SIN", "SMAP Tile EASE", "WELD Alaska Tile", "WELD CONUS Tile", "WRS-1", "WRS-2"] + }, + "RelatedUrlTypeEnum": { + "type": "string", + "enum": ["DOWNLOAD SOFTWARE", "EXTENDED METADATA", "GET DATA", "GET DATA VIA DIRECT ACCESS", "GET RELATED VISUALIZATION", "GOTO WEB TOOL", "PROJECT HOME PAGE", "USE SERVICE API", "VIEW RELATED INFORMATION"] + }, + "RelatedUrlSubTypeEnum": { + "type": "string", + "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", + "DMR++", "DMR++ MISSING DATA"] + }, + "MimeTypeEnum": { + "type": "string", + "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"] + }, + "DataFormatType": { + "description": "The format that granule data confirms to. While the value is listed as open to any text, CMR requires that it confirm to one of the values on the GranuleDataFormat values in the Keyword Management System: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/GranuleDataFormat", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "MetadataSpecificationType": + { + "type": "object", + "additionalProperties": false, + "description": "This object requires any metadata record that is validated by this schema to provide information about the schema.", + "properties": { + "URL": { + "description": "This element represents the URL where the schema lives. The schema can be downloaded.", + "type": "string", + "enum": ["https://cdn.earthdata.nasa.gov/umm/granule/v1.6.4"] + }, + "Name": { + "description": "This element represents the name of the schema.", + "type": "string", + "enum": ["UMM-G"] + }, + "Version": { + "description": "This element represents the version of the schema.", + "type": "string", + "enum": ["1.6.4"] + } + }, + "required": ["URL", "Name", "Version"] + } + } + } From 6178dade0f2e26746fd3e91968b1744c38ef2f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 28 Mar 2022 11:19:45 -0500 Subject: [PATCH 061/261] Rename umm-c schema file --- pyQuARC/schemas/umm-c-json-schema.json | 1511 ++++++++++++++++++++++++ 1 file changed, 1511 insertions(+) create mode 100644 pyQuARC/schemas/umm-c-json-schema.json diff --git a/pyQuARC/schemas/umm-c-json-schema.json b/pyQuARC/schemas/umm-c-json-schema.json new file mode 100644 index 00000000..1dcb9c2f --- /dev/null +++ b/pyQuARC/schemas/umm-c-json-schema.json @@ -0,0 +1,1511 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "UMM-C", + "type": "object", + "additionalProperties": false, + "properties": { + "MetadataLanguage": { + "description": "The language used in the metadata record.", + "$ref": "umm-cmn-json-schema.json#/definitions/LanguageType" + }, + "MetadataDates": { + "description": "Dates related to activities involving the metadata record itself. For example, Future Review date is the date that the metadata record is scheduled to be reviewed.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/DateType" + }, + "minItems": 0 + }, + "DirectoryNames": { + "description": "Formerly called Internal Directory Name (IDN) Node (IDN_Node). This element has been used historically by the GCMD internally to identify association, responsibility and/or ownership of the dataset, service or supplemental information. Note: This field only occurs in the DIF. When a DIF record is retrieved in the ECHO10 or ISO 19115 formats, this element will not be translated. The controlled vocabulary for directory names is maintained in the Keyword Management System (KMS).", + "type": "array", + "items": { + "$ref": "#/definitions/DirectoryNameType" + }, + "minItems": 0 + }, + "EntryTitle": { + "description": "The title of the collection or service described by the metadata.", + "$ref": "umm-cmn-json-schema.json#/definitions/EntryTitleType" + }, + "DOI": { + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. For those that want to specify that a DOI is not applicable or unknown use the second option.", + "$ref": "umm-cmn-json-schema.json#/definitions/DoiType" + }, + "AssociatedDOIs": { + "description": "This element stores DOIs that are associated with the collection such as from campaigns and other related sources. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", + "type": "array", + "items": { + "$ref": "#/definitions/AssociatedDoiType" + }, + "minItems": 1 + }, + "Abstract": { + "description": "A brief description of the collection or service the metadata represents.", + "$ref": "umm-cmn-json-schema.json#/definitions/AbstractType" + }, + "Purpose": { + "description": "Suggested usage or purpose for the collection data or service.", + "$ref": "umm-cmn-json-schema.json#/definitions/PurposeType" + }, + "DataLanguage": { + "description": "Describes the language used in the preparation, storage, and description of the collection. It is the language of the collection data themselves. It does not refer to the language used in the metadata record (although this may be the same language).", + "$ref": "umm-cmn-json-schema.json#/definitions/LanguageType" + }, + "DataDates": { + "description": "Dates related to activities involving the collection data. For example, Creation date is the date that the collection data first entered the data archive system.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/DateType" + }, + "minItems": 1 + }, + "DataCenters": { + "description": "Information about the data centers responsible for this collection and its metadata.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/DataCenterType" + }, + "minItems": 1 + }, + "ContactGroups": { + "description": "Information about the personnel groups responsible for this collection and its metadata.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ContactGroupType" + } + }, + "ContactPersons": { + "description": "Information about the personnel responsible for this collection and its metadata.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ContactPersonType" + } + }, + "CollectionDataType": { + "description": "Identifies the collection as a Science Quality collection or a non-science-quality collection such as a Near-Real-Time collection.", + "$ref": "#/definitions/CollectionDataTypeEnum" + }, + "ProcessingLevel": { + "description": "The identifier for the processing level of the collection (e.g., Level0, Level1A).", + "$ref": "#/definitions/ProcessingLevelType" + }, + "CollectionCitations": { + "description": "Information required to properly cite the collection in professional scientific literature. This element provides information for constructing a citation for the item itself, and is not designed for listing bibliographic references of scientific research articles arising from search results. A list of references related to the research results should be in the Publication Reference element.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ResourceCitationType" + }, + "minItems": 0 + }, + "CollectionProgress": { + "description": "This element describes the production status of the data set. There are five choices for Data Providers: PLANNED refers to data sets to be collected in the future and are thus unavailable at the present time. For Example: The Hydro spacecraft has not been launched, but information on planned data sets may be available. ACTIVE refers to data sets currently in production or data that is continuously being collected or updated. For Example: data from the AIRS instrument on Aqua is being collected continuously. COMPLETE refers to data sets in which no updates or further data collection will be made. For Example: Nimbus-7 SMMR data collection has been completed. DEPRECATED refers to data sets that have been retired, but still can be retrieved. Usually newer products exist that replace the retired data set. NOT APPLICABLE refers to data sets in which a collection progress is not applicable such as a calibration collection. There is a sixth value of NOT PROVIDED that should not be used by a data provider. It is currently being used as a value when a correct translation cannot be done with the current valid values, or when the value is not provided by the data provider.", + "$ref": "#/definitions/CollectionProgressEnum" + }, + "Quality": { + "description": "Free text description of the quality of the collection data. Description may include: 1) succinct description of the quality of data in the collection; 2) Any quality assurance procedures followed in producing the data in the collection; 3) indicators of collection quality or quality flags - both validated or invalidated; 4) recognized or potential problems with quality; 5) established quality control mechanisms; and 6) established quantitative quality measurements.", + "$ref": "umm-cmn-json-schema.json#/definitions/QualityType" + }, + "UseConstraints": { + "description": "Designed to protect privacy and/or intellectual property by allowing the author to specify how the collection may or may not be used after access is granted. This includes any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the item. Providers may request acknowledgement of the item from users and claim no responsibility for quality and completeness. Note: Use Constraints describe how the item may be used once access has been granted; and is distinct from Access Constraints, which refers to any constraints in accessing the item.", + "$ref": "#/definitions/UseConstraintsType" + }, + "AccessConstraints": { + "description": "Allows the author to constrain access to the collection. This includes any special restrictions, legal prerequisites, limitations and/or warnings on obtaining collection data. 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.", + "$ref": "umm-cmn-json-schema.json#/definitions/AccessConstraintsType" + }, + "ArchiveAndDistributionInformation": { + "description": "This element and all of its sub elements exist for display purposes. It allows a data provider to provide archive and distribution information up front to an end user, to help them decide if they can use the product.", + "$ref": "#/definitions/ArchiveAndDistributionInformationType" + }, + "DirectDistributionInformation": { + "description": "This element allows end users to get direct access to data products that are stored in the Amazon Web Service (AWS) S3 buckets. The sub elements include S3 credentials end point and a documentation URL as well as bucket prefix names and an AWS region.", + "$ref": "#/definitions/DirectDistributionInformationType" + }, + "PublicationReferences": { + "description": "Describes key bibliographic citations pertaining to the collection.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/PublicationReferenceType" + }, + "minItems": 0 + }, + "ISOTopicCategories": { + "description": "Identifies the topic categories from the EN ISO 19115-1:2014 Geographic Information – Metadata – Part 1: Fundamentals (http://www.isotc211.org/) Topic Category Code List that pertain to this collection, based on the Science Keywords associated with the collection. An ISO Topic Category is a high-level thematic classification to assist in the grouping of and search for available collections. The controlled vocabulary for ISO topic categories is maintained in the Keyword Management System (KMS).", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "minItems": 0 + }, + "ScienceKeywords": { + "description": "Controlled Science Keywords describing the collection. The controlled vocabulary for Science Keywords is maintained in the Keyword Management System (KMS).", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ScienceKeywordType" + }, + "minItems": 1 + }, + "AncillaryKeywords": { + "description": "Allows authors to provide words or phrases outside of the controlled Science Keyword vocabulary, to further describe the collection.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/AncillaryKeywordStringType" + }, + "minItems": 0 + }, + "AdditionalAttributes": { + "description": "The data’s distinctive attributes of the collection (i.e. attributes used to describe the unique characteristics of the collection which extend beyond those defined).", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/AdditionalAttributeType" + }, + "minItems": 0 + }, + "MetadataAssociations": { + "description": "This element is used to identify other services, collections, visualizations, granules, and other metadata types and resources that are associated with or dependent on the data described by the metadata. This element is also used to identify a parent metadata record if it exists. This usage should be reserved for instances where a group of metadata records are subsets that can be better represented by one parent metadata record, which describes the entire set. In some instances, a child may point to more than one parent. The EntryId is the same as the element described elsewhere in this document where it contains an ID and Version.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/MetadataAssociationType" + }, + "minItems": 1 + }, + "TemporalExtents": { + "description": "This class contains attributes which describe the temporal range of a specific collection. Temporal Extent includes a specification of the Temporal Range Type of the collection, which is one of Range Date Time, Single Date Time, or Periodic Date Time", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/TemporalExtentType" + }, + "minItems": 1 + }, + "PaleoTemporalCoverages": { + "description": "For paleoclimate or geologic data, PaleoTemporalCoverage is the length of time represented by the data collected. PaleoTemporalCoverage should be used when the data spans time frames earlier than yyyy-mm-dd = 0001-01-01.", + "type": "array", + "items": { + "$ref": "#/definitions/PaleoTemporalCoverageType" + }, + "minItems": 0 + }, + "TemporalKeywords": { + "description": "One or more words or phrases that describe the temporal resolution of the dataset.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "minItems": 0 + }, + "SpatialExtent": { + "$ref": "#/definitions/SpatialExtentType" + }, + "TilingIdentificationSystems": { + "description": "Name of the two-dimensional tiling system for the collection. Previously called TwoDCoordinateSystem.", + "type": "array", + "items": { + "$ref": "#/definitions/TilingIdentificationSystemType" + }, + "minItems": 0 + }, + "SpatialInformation": { + "description": "The reference frame or system in which altitudes (elevations) are given. The information contains the datum name, distance units and encoding method, which provide the definition for the system. This field also stores the characteristics of the reference frame or system from which depths are measured. The additional information in the field is geometry reference data etc.", + "$ref": "#/definitions/SpatialInformationType" + }, + "SpatialKeywords": { + "description": "This is deprecated and will be removed. Use LocationKeywords instead. Controlled hierarchical keywords used to specify the spatial location of the collection. The controlled vocabulary for spatial keywords is maintained in the Keyword Management System (KMS). The Spatial Keyword hierarchy includes one or more of the following layers: Location_Category (e.g., Continent), Location_Type (e.g. Africa), Location_Subregion1 (e.g., Central Africa), Location_Subregion2 (e.g., Cameroon), and Location_Subregion3.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "minItems": 1 + }, + "LocationKeywords": { + "description": "Controlled hierarchical keywords used to specify the spatial location of the collection. The controlled vocabulary for spatial keywords is maintained in the Keyword Management System (KMS). The Spatial Keyword hierarchy includes one or more of the following layers: Category (e.g., Continent), Type (e.g. Africa), Subregion1 (e.g., Central Africa), Subregion2 (e.g., Cameroon), and Subregion3. DetailedLocation exists outside the hierarchy.", + "type": "array", + "items": { + "$ref": "#/definitions/LocationKeywordType" + } + }, + "Platforms": { + "description": "Information about the relevant platform(s) used to acquire the data in the collection. The controlled vocabulary for platform types is maintained in the Keyword Management System (KMS), and includes Spacecraft, Aircraft, Vessel, Buoy, Platform, Station, Network, Human, etc.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/PlatformType" + }, + "minItems": 1 + }, + "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 — 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.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/ProjectType" + }, + "minItems": 1 + }, + "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.", + "type": "array", + "items": { + "$ref": "umm-cmn-json-schema.json#/definitions/RelatedUrlType" + }, + "minItems": 1 + }, + "ShortName": { + "description": "The short name associated with the collection.", + "$ref": "umm-cmn-json-schema.json#/definitions/ShortNameType" + }, + "Version": { + "description": "The Version of the collection.", + "$ref": "umm-cmn-json-schema.json#/definitions/VersionType" + }, + "VersionDescription": { + "description": "The Version Description of the collection.", + "$ref": "umm-cmn-json-schema.json#/definitions/VersionDescriptionType" + } + }, + "required": ["ShortName", "Version", "EntryTitle", "Abstract", "DOI", "DataCenters", "ProcessingLevel", "ScienceKeywords", "TemporalExtents", "SpatialExtent", "Platforms", "CollectionProgress"], + + + + "definitions": { + "UseConstraintsDescriptionType": { + "type": "object", + "additionalProperties": false, + "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", + "properties": { + "Description": { + "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + } + } + }, + "UseConstraintsDescType": { + "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", + "type": "string", + "minLength": 1, + "maxLength": 4000 + }, + "UseConstraintsType": { + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "oneOf": [{ + "type": "object", + "additionalProperties": false, + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "properties": { + "Description": { + "$ref": "#/definitions/UseConstraintsDescType" + } + }, + "required": ["Description"] + }, { + "type": "object", + "additionalProperties": false, + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "properties": { + "Description": { + "$ref": "#/definitions/UseConstraintsDescType" + }, + "LicenseURL": { + "description": "This element holds the URL and associated information to access the License on the web. If this element is used the LicenseText element cannot be used.", + "$ref": "umm-cmn-json-schema.json#/definitions/OnlineResourceType" + } + }, + "required": ["LicenseURL"] + }, { + "type": "object", + "additionalProperties": false, + "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", + "properties": { + "Description": { + "$ref": "#/definitions/UseConstraintsDescType" + }, + "LicenseText": { + "description": "This element holds the actual license text. If this element is used the LicenseUrl element cannot be used.", + "type": "string", + "minLength": 1, + "maxLength": 20000 + } + }, + "required": ["LicenseText"] + } + ]}, + "DirectoryNameType": { + "type": "object", + "additionalProperties": false, + "description": "Formerly called Internal Directory Name (IDN) Node (IDN_Node). This element has been used historically by the GCMD internally to identify association, responsibility and/or ownership of the dataset, service or supplemental information. Note: This field only occurs in the DIF. When a DIF record is retrieved in the ECHO10 or ISO 19115 formats, this element will not be translated.", + "properties": { + "ShortName": { + "$ref": "umm-cmn-json-schema.json#/definitions/ShortNameType" + }, + "LongName": { + "$ref": "umm-cmn-json-schema.json#/definitions/LongNameType" + } + }, + "required": ["ShortName"] + }, + "ProcessingLevelType": { + "type": "object", + "additionalProperties": false, + "description": "This element contains the Processing Level Id and the Processing Level Description", + "properties": { + "ProcessingLevelDescription": { + "description": "Description of the meaning of the Processing Level Id, e.g., the Description for the Level4 Processing Level Id might be 'Model output or results from analyses of lower level data'", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Id": { + "description": "An identifier indicating the level at which the data in the collection are processed, ranging from Level0 (raw instrument data at full resolution) to Level4 (model output or analysis results). The value of Processing Level Id is chosen from a controlled vocabulary.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["Id"] + }, + "PaleoTemporalCoverageType": { + "type": "object", + "additionalProperties": false, + "description": "For paleoclimate or geologic data, PaleoTemporalCoverage is the length of time represented by the data collected. PaleoTemporalCoverage should be used when the data spans time frames earlier than yyyy-mm-dd = 0001-01-01.", + "properties": { + "ChronostratigraphicUnits": { + "description": "Hierarchy of terms indicating units of geologic time, i.e., eon (e.g, Phanerozoic), era (e.g., Cenozoic), period (e.g., Paleogene), epoch (e.g., Oligocene), and stage or age (e.g, Chattian).", + "type": "array", + "items": { + "$ref": "#/definitions/ChronostratigraphicUnitType" + }, + "minItems": 0 + }, + "StartDate": { + "description": "A string indicating the number of years furthest back in time, including units, e.g., 100 Ga. Units may be Ga (billions of years before present), Ma (millions of years before present), ka (thousands of years before present) or ybp (years before present).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "EndDate": { + "description": "A string indicating the number of years closest to the present time, including units, e.g., 10 ka. Units may be Ga (billions of years before present), Ma (millions of years before present), ka (thousands of years before present) or ybp (years before present).", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + } + }, + "ChronostratigraphicUnitType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Eon": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Era": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Epoch": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Stage": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "DetailedClassification": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Period": { + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + } + }, + "required": ["Eon"] + }, + "SpatialExtentType": { + "type": "object", + "additionalProperties": false, + "description": "Specifies the geographic and vertical (altitude, depth) coverage of the data.", + "properties": { + "SpatialCoverageType": { + "description": "Denotes whether the collection's spatial coverage requires horizontal, vertical, horizontal and vertical, orbit, or vertical and orbit in the spatial domain and coordinate system definitions.", + "$ref": "#/definitions/SpatialCoverageTypeEnum" + }, + "HorizontalSpatialDomain": { + "$ref": "#/definitions/HorizontalSpatialDomainType" + }, + "VerticalSpatialDomains": { + "type": "array", + "items": { + "$ref": "#/definitions/VerticalSpatialDomainType" + } + }, + "OrbitParameters": { + "$ref": "#/definitions/OrbitParametersType" + }, + "GranuleSpatialRepresentation": { + "$ref": "#/definitions/GranuleSpatialRepresentationEnum" + } + }, + "required": ["GranuleSpatialRepresentation"] + }, + "SpatialCoverageTypeEnum": { + "type": "string", + "enum": ["HORIZONTAL", "VERTICAL", "ORBITAL", "HORIZONTAL_VERTICAL", "ORBITAL_VERTICAL", "HORIZONTAL_ORBITAL", "HORIZONTAL_VERTICAL_ORBITAL"] + }, + "HorizontalSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "description": "Information about a collection with horizontal spatial coverage.", + "properties": { + "ZoneIdentifier": { + "description": "The appropriate numeric or alpha code used to identify the various zones in the collection's grid coordinate system.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "Geometry": { + "$ref": "#/definitions/GeometryType" + }, + "ResolutionAndCoordinateSystem": { + "description": "Specifies the horizontal spatial extents coordinate system and its resolution.", + "$ref": "#/definitions/ResolutionAndCoordinateSystemType" + } + }, + "required": ["Geometry"] + }, + "GeometryType": { + "type": "object", + "additionalProperties": false, + "properties": { + "CoordinateSystem": { + "$ref": "#/definitions/CoordinateSystemEnum" + }, + "Points": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 1 + }, + "BoundingRectangles": { + "type": "array", + "items": { + "$ref": "#/definitions/BoundingRectangleType" + }, + "minItems": 1 + }, + "GPolygons": { + "type": "array", + "items": { + "$ref": "#/definitions/GPolygonType" + }, + "minItems": 1 + }, + "Lines": { + "type": "array", + "items": { + "$ref": "#/definitions/LineType" + }, + "minItems": 1 + } + }, + "required": ["CoordinateSystem"], + "anyOf": [{ + "required": ["Points"] + }, { + "required": ["BoundingRectangles"] + }, { + "required": ["GPolygons"] + }, { + "required": ["Lines"] + }] + }, + "CoordinateSystemEnum": { + "type": "string", + "enum": ["CARTESIAN", "GEODETIC"] + }, + "PointType": { + "type": "object", + "additionalProperties": false, + "description": "The longitude and latitude values of a spatially referenced point in degrees.", + "properties": { + "Longitude": { + "$ref": "#/definitions/LongitudeType" + }, + "Latitude": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["Longitude", "Latitude"] + }, + "LatitudeType": { + "description": "The latitude value of a spatially referenced point, in degrees. Latitude values range from -90 to 90.", + "type": "number", + "minimum": -90, + "maximum": 90 + }, + "LongitudeType": { + "description": "The longitude value of a spatially referenced point, in degrees. Longitude values range from -180 to 180.", + "type": "number", + "minimum": -180, + "maximum": 180 + }, + "BoundingRectangleType": { + "type": "object", + "additionalProperties": false, + "properties": { + "WestBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "NorthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + }, + "EastBoundingCoordinate": { + "$ref": "#/definitions/LongitudeType" + }, + "SouthBoundingCoordinate": { + "$ref": "#/definitions/LatitudeType" + } + }, + "required": ["WestBoundingCoordinate", "NorthBoundingCoordinate", "EastBoundingCoordinate", "SouthBoundingCoordinate"] + }, + "GPolygonType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Boundary": { + "$ref": "#/definitions/BoundaryType" + }, + "ExclusiveZone": { + "$ref": "#/definitions/ExclusiveZoneType" + } + }, + "required": ["Boundary"] + }, + "BoundaryType": { + "type": "object", + "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": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 4 + } + }, + "required": ["Points"] + }, + "ExclusiveZoneType": { + "type": "object", + "additionalProperties": false, + "description": "Contains the excluded boundaries from the GPolygon.", + "properties": { + "Boundaries": { + "type": "array", + "items": { + "$ref": "#/definitions/BoundaryType" + }, + "minItems": 1 + } + }, + "required": ["Boundaries"] + }, + "LineType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Points": { + "type": "array", + "items": { + "$ref": "#/definitions/PointType" + }, + "minItems": 2 + } + }, + "required": ["Points"] + }, + "VerticalSpatialDomainType": { + "type": "object", + "additionalProperties": false, + "properties": { + "Type": { + "description": "Describes the type of the area of vertical space covered by the collection locality.", + "$ref": "#/definitions/VerticalSpatialDomainTypeEnum" + }, + "Value": { + "description": "Describes the extent of the area of vertical space covered by the collection. Must be accompanied by an Altitude Encoding Method description. The datatype for this attribute is the value of the attribute VerticalSpatialDomainType. The unit for this attribute is the value of either DepthDistanceUnits or AltitudeDistanceUnits.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["Type", "Value"] + }, + "VerticalSpatialDomainTypeEnum": { + "type": "string", + "enum": ["Atmosphere Layer", "Maximum Altitude", "Maximum Depth", "Minimum Altitude", "Minimum Depth"] + }, + "OrbitParametersType": { + "type": "object", + "additionalProperties": false, + "description": "Orbit parameters for the collection used by the Orbital Backtrack Algorithm.", + "properties": { + "SwathWidth": { + "description": "Width of the swath at the equator in Kilometers.", + "type": "number" + }, + "Period": { + "description": "Orbital period in decimal minutes.", + "type": "number" + }, + "InclinationAngle": { + "description": "Inclination of the orbit. This is the same as (180-declination) and also the same as the highest latitude achieved by the satellite. Data Unit: Degree.", + "type": "number" + }, + "NumberOfOrbits": { + "description": "Indicates the number of orbits.", + "type": "number" + }, + "StartCircularLatitude": { + "description": "The latitude start of the orbit relative to the equator. This is used by the backtrack search algorithm to treat the orbit as if it starts from the specified latitude. This is optional and will default to 0 if not specified.", + "type": "number" + } + }, + "required": ["SwathWidth", "Period", "InclinationAngle", "NumberOfOrbits"] + }, + "GranuleSpatialRepresentationEnum": { + "type": "string", + "enum": ["CARTESIAN", "GEODETIC", "ORBIT", "NO_SPATIAL"] + }, + "TilingIdentificationSystemType": { + "type": "object", + "additionalProperties": false, + "description": "Information about a two-dimensional tiling system related to this collection.", + "properties": { + "TilingIdentificationSystemName": { + "$ref": "#/definitions/TilingIdentificationSystemNameEnum" + }, + "Coordinate1": { + "$ref": "#/definitions/TilingCoordinateType" + }, + "Coordinate2": { + "$ref": "#/definitions/TilingCoordinateType" + } + }, + "required": ["TilingIdentificationSystemName", "Coordinate1", "Coordinate2"] + }, + "TilingCoordinateType": { + "type": "object", + "additionalProperties": false, + "description": "Defines the minimum and maximum value for one dimension of a two dimensional coordinate system.", + "properties": { + "MinimumValue": { + "type": "number" + }, + "MaximumValue": { + "type": "number" + } + } + }, + "TilingIdentificationSystemNameEnum": { + "type": "string", + "enum": ["CALIPSO", "MISR", "MODIS Tile EASE", "MODIS Tile SIN", "WELD Alaska Tile", "WELD CONUS Tile", "WRS-1", "WRS-2", "Military Grid Reference System"] + }, + "SpatialInformationType": { + "type": "object", + "additionalProperties": false, + "description": "This entity stores the reference frame or system from which horizontal and vertical spatial domains are measured. The horizontal reference frame includes a Geodetic Model, Geographic Coordinates, and Local Coordinates. The Vertical reference frame includes altitudes (elevations) and depths.", + "properties": { + "VerticalCoordinateSystem": { + "$ref": "#/definitions/VerticalCoordinateSystemType" + }, + "SpatialCoverageType": { + "description": "Denotes whether the spatial coverage of the collection is horizontal, vertical, horizontal and vertical, orbit, or vertical and orbit.", + "type": "string", + "minLength": 1, + "maxLength": 80 + } + }, + "required": ["SpatialCoverageType"] + }, + "VerticalCoordinateSystemType": { + "type": "object", + "additionalProperties": false, + "properties": { + "AltitudeSystemDefinition": { + "$ref": "#/definitions/AltitudeSystemDefinitionType" + }, + "DepthSystemDefinition": { + "$ref": "#/definitions/DepthSystemDefinitionType" + } + } + }, + "AltitudeDistanceUnitsEnum": { + "description": "The units in which altitude measurements are recorded.", + "type": "string", + "enum": ["HectoPascals", "Kilometers", "Millibars"] + }, + "DepthDistanceUnitsEnum": { + "description": "The units in which depth measurements are recorded.", + "type": "string", + "enum": ["Fathoms", "Feet", "HectoPascals", "Meters", "Millibars"] + }, + "AltitudeSystemDefinitionType": { + "type": "object", + "additionalProperties": false, + "description": "The reference frame or system from which altitude is measured. The term 'altitude' is used instead of the common term 'elevation' to conform to the terminology in Federal Information Processing Standards 70-1 and 173. The information contains the datum name, distance units and encoding method, which provide the definition for the system.", + "properties": { + "DatumName": { + "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DistanceUnits": { + "description": "The units in which measurements are recorded.", + "$ref": "#/definitions/AltitudeDistanceUnitsEnum" + }, + "Resolutions": { + "description": "The minimum distance possible between two adjacent values, expressed in distance units of measure for the collection.", + "type": "array", + "items": { + "type": "number" + }, + "minItems": 0 + } + } + }, + "DepthSystemDefinitionType": { + "type": "object", + "additionalProperties": false, + "description": "The reference frame or system from which depth is measured. The information contains the datum name, distance units and encoding method, which provide the definition for the system.", + "properties": { + "DatumName": { + "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "DistanceUnits": { + "description": "The units in which measurements are recorded.", + "$ref": "#/definitions/DepthDistanceUnitsEnum" + }, + "Resolutions": { + "description": "The minimum distance possible between two adjacent values, expressed in distance units of measure for the collection.", + "type": "array", + "items": { + "type": "number" + }, + "minItems": 0 + } + } + }, + "ResolutionAndCoordinateSystemType": { + "description": "This class defines the horizontal spatial extents coordinate system and the data product's horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", + "type": "object", + "oneOf": [{ + "additionalProperties": false, + "properties": { + "Description": { + "description": "This element holds a description about the resolution and coordinate system for people to read.", + "$ref": "#/definitions/DescriptionType" + }, + "GeodeticModel": { + "description": "This element describes the geodetic model for the data product.", + "$ref": "#/definitions/GeodeticModelType" + } + }, + "required": ["GeodeticModel"] + }, { + "additionalProperties": false, + "properties": { + "Description": { + "description": "This element holds a description about the resolution and coordinate system for people to read.", + "$ref": "#/definitions/DescriptionType" + }, + "GeodeticModel": { + "description": "This element describes the geodetic model for the data product.", + "$ref": "#/definitions/GeodeticModelType" + }, + "HorizontalDataResolution": { + "description": "This class defines a number of the data products horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", + "$ref": "#/definitions/HorizontalDataResolutionType" + } + }, + "required": ["HorizontalDataResolution"] + }, { + "additionalProperties": false, + "properties": { + "Description": { + "description": "This element holds a description about the resolution and coordinate system for people to read.", + "$ref": "#/definitions/DescriptionType" + }, + "GeodeticModel": { + "description": "This element describes the geodetic model for the data product.", + "$ref": "#/definitions/GeodeticModelType" + }, + "LocalCoordinateSystem": { + "description": "This element describes the local coordinate system for the data product.", + "$ref": "#/definitions/LocalCoordinateSystemType" + } + }, + "required": ["LocalCoordinateSystem"] + }] + }, + "DescriptionType": { + "description": "This element defines what a description is.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "GeodeticModelType": { + "description": "This element describes the geodetic model for the data product.", + "type": "object", + "additionalProperties": false, + "properties": { + "HorizontalDatumName": { + "description": "The identification given to the reference system used for defining the coordinates of points.", + "$ref": "#/definitions/DatumNameType" + }, + "EllipsoidName": { + "description": "Identification given to established representation of the Earth's shape.", + "type": "string", + "minLength": 1, + "maxLength": 255 + }, + "SemiMajorAxis": { + "description": "Radius of the equatorial axis of the ellipsoid.", + "type": "number" + }, + "DenominatorOfFlatteningRatio": { + "description": "The ratio of the Earth's major axis to the difference between the major and the minor.", + "type": "number" + } + } + }, + "DatumNameType": { + "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "HorizontalDataResolutionType": { + "description": "This class defines a number of the data products horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", + "type": "object", + "additionalProperties": false, + "properties": { + "VariesResolution": { + "description": "Varies Resolution object describes a data product that has a number of resolution values.", + "$ref": "#/definitions/HorizontalDataResolutionVariesType" + }, + "PointResolution": { + "description": "Point Resolution object describes a data product that is from a point source.", + "$ref": "#/definitions/HorizontalDataResolutionPointType" + }, + "NonGriddedResolutions": { + "description": "Non Gridded Resolutions object describes resolution data for non gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionNonGriddedType" + }, + "minItems": 1 + }, + "NonGriddedRangeResolutions": { + "description": "Non Gridded Range Resolutions object describes range resolution data for non gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionNonGriddedRangeType" + }, + "minItems": 1 + }, + "GriddedResolutions": { + "description": "Gridded Resolutions object describes resolution data for gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionGriddedType" + }, + "minItems": 1 + }, + "GriddedRangeResolutions": { + "description": "Gridded Range Resolutions object describes range resolution data for gridded data products.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataResolutionGriddedRangeType" + }, + "minItems": 1 + }, + "GenericResolutions": { + "description": "Generic Resolutions object describes general resolution data for a data product where it is not known if a data product is gridded or not.", + "type": "array", + "items": { + "$ref": "#/definitions/HorizontalDataGenericResolutionType" + }, + "minItems": 1 + } + } + }, + "HorizontalDataResolutionVariesType": { + "description": "Varies Resolution object describes a data product that has a number of resolution values.", + "type": "string", + "enum": ["Varies"] + }, + "HorizontalDataResolutionPointType": { + "description": "Point Resolution object describes a data product that is from a point source.", + "type": "string", + "enum": ["Point"] + }, + "HorizontalDataResolutionNonGriddedType": { + "description": "Non Gridded Resolutions object describes resolution data for non gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "XDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "YDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + }, + "ViewingAngleType": { + "description": "This element describes the angle of the measurement with respect to the instrument that gives an understanding of the specified resolution.", + "$ref": "#/definitions/HorizontalResolutionViewingAngleType" + }, + "ScanDirection": { + "description": "This element describes the instrument scanning direction.", + "$ref": "#/definitions/HorizontalResolutionScanDirectionType" + } + }, + "anyOf": [{ + "required": ["XDimension", "Unit"] + }, { + "required": ["YDimension", "Unit"] + }] + }, + "HorizontalDataResolutionNonGriddedRangeType": { + "description": "Non Gridded Range Resolutions object describes range resolution data for non gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinimumXDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MinimumYDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "MaximumXDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MaximumYDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + }, + "ViewingAngleType": { + "description": "This element describes the angle of the measurement with respect to the instrument that gives an understanding of the specified resolution.", + "$ref": "#/definitions/HorizontalResolutionViewingAngleType" + }, + "ScanDirection": { + "description": "This element describes the instrument scanning direction.", + "$ref": "#/definitions/HorizontalResolutionScanDirectionType" + } + }, + "anyOf": [{ + "required": ["MinimumXDimension", "MaximumXDimension", "Unit"] + }, { + "required": ["MinimumYDimension", "MaximumYDimension", "Unit"] + }] + }, + "HorizontalDataResolutionGriddedType": { + "description": "Gridded Resolutions object describes resolution data for gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "XDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "YDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + } + }, + "anyOf": [{ + "required": ["XDimension", "Unit"] + }, { + "required": ["YDimension", "Unit"] + }] + }, + "HorizontalDataResolutionGriddedRangeType": { + "description": "Gridded Range Resolutions object describes range resolution data for gridded data products.", + "type": "object", + "additionalProperties": false, + "properties": { + "MinimumXDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MinimumYDimension": { + "description": "The minimum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "MaximumXDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "MaximumYDimension": { + "description": "The maximum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + } + }, + "anyOf": [{ + "required": ["MinimumXDimension", "MaximumXDimension", "Unit"] + }, { + "required": ["MinimumYDimension", "MaximumYDimension", "Unit"] + }] + }, + "HorizontalDataGenericResolutionType": { + "description": "Generic Resolutions object describes general resolution data for a data product where it is not known if a data product is gridded or not.", + "type": "object", + "additionalProperties": false, + "properties": { + "XDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", + "type": "number" + }, + "YDimension": { + "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", + "type": "number" + }, + "Unit": { + "description": "Units of measure used for the XDimension and YDimension values.", + "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" + } + }, + "anyOf": [{ + "required": ["XDimension", "Unit"] + }, { + "required": ["YDimension", "Unit"] + }] + }, + "HorizontalDataResolutionUnitEnum": { + "description": "Units of measure used for the geodetic latitude and longitude resolution values (e.g., decimal degrees).", + "type": "string", + "enum": ["Decimal Degrees", "Kilometers", "Meters", "Statute Miles", "Nautical Miles", "Not provided"] + }, + "HorizontalResolutionViewingAngleType": { + "description": "This element describes the angle of the measurement with respect to the instrument that give an understanding of the specified resolution.", + "type": "string", + "enum": ["At Nadir", "Scan Extremes"] + }, + "HorizontalResolutionScanDirectionType": { + "description": "This element describes the instrument scanning direction.", + "type": "string", + "enum": ["Along Track", "Cross Track"] + }, + "LocalCoordinateSystemType": { + "type": "object", + "additionalProperties": false, + "properties": { + "GeoReferenceInformation": { + "description": "The information provided to register the local system to the Earth (e.g. control points, satellite ephemeral data, and inertial navigation data).", + "type": "string", + "minLength": 1, + "maxLength": 2048 + }, + "Description": { + "description": "A description of the Local Coordinate System and geo-reference information.", + "type": "string", + "minLength": 1, + "maxLength": 2048 + } + } + }, + "CollectionDataTypeEnum": { + "description": "This element is used to identify the collection as a Science Quality Collection or as a non-science-quality collection such as a Near Real Time collection. If a collection does not contain this field, it will be assumed to be of science-quality.", + "type": "string", + "enum": ["SCIENCE_QUALITY", "NEAR_REAL_TIME", "OTHER"] + }, + "CollectionProgressEnum": { + "description": "This element describes the production status of the data set. There are five choices for Data Providers: PLANNED refers to data sets to be collected in the future and are thus unavailable at the present time. For Example: The Hydro spacecraft has not been launched, but information on planned data sets may be available. ACTIVE refers to data sets currently in production or data that is continuously being collected or updated. For Example: data from the AIRS instrument on Aqua is being collected continuously. COMPLETE refers to data sets in which no updates or further data collection will be made. For Example: Nimbus-7 SMMR data collection has been completed. DEPRECATED refers to data sets that have been retired, but still can be retrieved. Usually newer products exist that replace the retired data set. NOT APPLICABLE refers to data sets in which a collection progress is not applicable such as a calibration collection. There is a sixth value of NOT PROVIDED that should not be used by a data provider. It is currently being used as a value when a correct translation cannot be done with the current valid values, or when the value is not provided by the data provider.", + "type": "string", + "enum": ["ACTIVE", "PLANNED", "COMPLETE", "DEPRECATED", "NOT APPLICABLE", "NOT PROVIDED"] + }, + "LocationKeywordType": { + "description": "This element defines a hierarchical location list. It replaces SpatialKeywords. The controlled vocabulary for location keywords is maintained in the Keyword Management System (KMS). Each tier must have data in the tier above it.", + "type": "object", + "additionalProperties": false, + "properties": { + "Category":{ + "description": "Top-level controlled keyword hierarchical level that contains the largest general location where the collection data was taken from.", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Type":{ + "description": "Second-tier controlled keyword hierarchical level that contains the regional location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Subregion1":{ + "description": "Third-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Subregion2":{ + "description": "Fourth-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "Subregion3":{ + "description": "Fifth-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + }, + "DetailedLocation":{ + "description": "Uncontrolled keyword hierarchical level that contains the specific location where the collection data was taken from. Exists outside the hierarchy.", + "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" + } + }, + "required": ["Category"] + }, + "ArchiveDistributionFormatTypeEnum": { + "description": "Defines the possible values for the Archive or Distribution file format type.", + "type": "string", + "enum": ["Native", "Supported"] + }, + "ArchiveDistributionFormatDescriptionType": { + "description": "Allows a data provider to provide supporting information about the stated format.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "ArchiveDistributionUnitEnum": { + "description": "Defines the possible values for the archive and distribution size units.", + "type": "string", + "enum": ["KB", "MB", "GB", "TB", "PB", "NA"] + }, + "DistributionMediaType": { + "description": "This element defines the media by which the end user can obtain the distributable item. Examples of media include: CD-ROM, 9 track tape, diskettes, hard drives, online, transparencies, hardcopy, etc.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FileArchiveInformationType": { + "description": "This element defines a single archive artifact which a data provider would like to inform an end user that it exists.", + "anyOf": [{ + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for an archival artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml. The controlled vocabulary for formats is maintained in the Keyword Management System (KMS).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the archivable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "AverageFileSize": { + "description": "An approximate average size of the archivable item. This gives an end user an idea of the magnitude for each archivable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSize": { + "description": "An approximate total size of all of the archivable items within a collection. This gives an end user an idea of the magnitude for all of archivable files combined.", + "type": "number" + }, + "TotalCollectionFileSizeUnit": { + "description": "Unit of measure for the total collection file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the archivable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSize": ["TotalCollectionFileSizeUnit"] + } + }, { + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for an archival artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml. The controlled vocabulary for formats is maintained in the Keyword Management System (KMS).", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the archivable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "AverageFileSize": { + "description": "An approximate average size of the archivable item. This gives an end user an idea of the magnitude for each archivable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSizeBeginDate": { + "description": "The date of which this collection started to collect data. This date is used by users to be able to calculate the current total collection file size. The date needs to be in the yyyy-MM-ddTHH:mm:ssZ format; for example: 2018-01-01T10:00:00Z.", + "format": "date-time", + "type": "string" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the archivable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSizeBeginDate": ["AverageFileSize"] + } + }] + }, + "FileDistributionInformationType": { + "description": "This element defines a single artifact that is distributed by the data provider. This element only includes the distributable artifacts that can be obtained by the user without the user having to invoke a service. These should be documented in the UMM-S specification.", + "anyOf": [{ + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for a distributable artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "Media": { + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/DistributionMediaType" + }, + "minItems": 1 + }, + "AverageFileSize": { + "description": "An approximate average size of the distributable item. This gives an end user an idea of the magnitude for each distributable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSize": { + "description": "An approximate total size of all of the distributable items within a collection. This gives an end user an idea of the magnitude for all of distributable files combined.", + "type": "number" + }, + "TotalCollectionFileSizeUnit": { + "description": "Unit of measure for the total collection file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Fees": { + "description": "Conveys the price one has to pay to obtain the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSize": ["TotalCollectionFileSizeUnit"] + } + }, { + "type": "object", + "additionalProperties": false, + "properties": { + "Format": { + "description": "This element defines a single format for a distributable artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml.", + "type": "string", + "minLength": 1, + "maxLength": 80 + }, + "FormatType": { + "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", + "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" + }, + "FormatDescription": { + "description": "Allows the record provider to provide supporting documentation about the Format.", + "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" + }, + "Media": { + "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.", + "type": "array", + "items": { + "$ref": "#/definitions/DistributionMediaType" + }, + "minItems": 1 + }, + "AverageFileSize": { + "description": "An approximate average size of the distributable item. This gives an end user an idea of the magnitude for each distributable file if more than 1 exists.", + "type": "number" + }, + "AverageFileSizeUnit": { + "description": "Unit of measure for the average file size.", + "$ref": "#/definitions/ArchiveDistributionUnitEnum" + }, + "TotalCollectionFileSizeBeginDate": { + "description": "The date of which this collection started to collect data. This date is used by users to be able to calculate the current total collection file size. The date needs to be in the yyyy-MM-ddTHH:mm:ssZ format; for example: 2018-01-01T10:00:00Z.", + "format": "date-time", + "type": "string" + }, + "Description": { + "description": "Provides the data provider a way to convey more information about the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Fees": { + "description": "Conveys the price one has to pay to obtain the distributable item.", + "type": "string", + "minLength": 1, + "maxLength": 255 + } + }, + "required": ["Format"], + "dependencies": { + "AverageFileSize": ["AverageFileSizeUnit"], + "TotalCollectionFileSizeBeginDate": ["AverageFileSize"] + } + }] + }, + "ArchiveAndDistributionInformationType": { + "type": "object", + "additionalProperties": false, + "description": "This element and all of its sub elements exist for display purposes. It allows a data provider to provide archive and distribution information up front to an end user, to help them decide if they can use the product.", + "properties": { + "FileArchiveInformation": { + "description": "This element defines a single archive artifact which a data provider would like to inform an end user that it exists.", + "type": "array", + "items": { + "$ref": "#/definitions/FileArchiveInformationType" + }, + "minItems": 1 + }, + "FileDistributionInformation": { + "description": "This element defines a single artifact that is distributed by the data provider. This element only includes the distributable artifacts that can be obtained by the user without the user having to invoke a service. These should be documented in the UMM-S specification.", + "type": "array", + "items": { + "$ref": "#/definitions/FileDistributionInformationType" + }, + "minItems": 1 + } + }, + "anyOf": [{ + "required": ["FileArchiveInformation"] + }, { + "required": ["FileDistributionInformation"] + }] + }, + "DirectDistributionInformationType": { + "type": "object", + "additionalProperties": false, + "description": "This element allows end users to get direct access to data products that are stored in the Amazon Web Service (AWS) S3 buckets. The sub elements include S3 credentials end point and a documentation URL as well as bucket prefix names and an AWS region.", + "properties": { + "Region": { + "description": "Defines the possible values for the Amazon Web Service US Regions where the data product resides.", + "$ref": "#/definitions/DirectDistributionInformationRegionEnum" + }, + "S3BucketAndObjectPrefixNames": { + "description": "Defines the possible values for the Amazon Web Service US S3 bucket and/or object prefix names.", + "type": "array", + "items": { + "type": "string", + "minLength": 1, + "maxLength": 1024, + "pattern": "[!-~]{1,1024}" + }, + "minItems": 1 + }, + "S3CredentialsAPIEndpoint": { + "description": "Defines the URL where the credentials are stored.", + "type": "string", + "format": "uri", + "minLength": 1, + "maxLength": 1024 + }, + "S3CredentialsAPIDocumentationURL": { + "description": "Defines the URL where the credential documentation are stored.", + "type": "string", + "format": "uri", + "minLength": 1, + "maxLength": 1024 + } + }, + "required": ["Region", "S3CredentialsAPIEndpoint", "S3CredentialsAPIDocumentationURL"] + }, + "DirectDistributionInformationRegionEnum": { + "description": "Defines the possible values for the Amazon Web Service US Regions where the data product resides.", + "type": "string", + "enum": ["us-east-1", "us-east-2", "us-west-1", "us-west-2"] + }, + "AssociatedDoiType": { + "type": "object", + "additionalProperties": false, + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections using CollectionDOI property.", + "properties": { + "DOI": { + "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL.", + "type": "string", + "minLength": 1, + "maxLength": 1024 + }, + "Title": { + "description": "The title of the DOI landing page. The title describes the DOI object to a user, so they don't have to look it up themselves to understand the association.", + "$ref": "umm-cmn-json-schema.json#/definitions/TitleType" + }, + "Authority": { + "description": "The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", + "$ref": "umm-cmn-json-schema.json#/definitions/AuthorityType" + } + }, + "required": ["DOI"] + } + } +} From 7444422823026e4fa7c4b530cb2df1e3ac056d62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 28 Mar 2022 11:20:48 -0500 Subject: [PATCH 062/261] Add support for umm-g --- pyQuARC/code/constants.py | 10 +- pyQuARC/code/schema_validator.py | 21 +- pyQuARC/schemas/umm-json_schema.json | 1511 -------------------------- 3 files changed, 17 insertions(+), 1525 deletions(-) delete mode 100644 pyQuARC/schemas/umm-json_schema.json diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index 32f71a49..0bc6d379 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -1,11 +1,10 @@ -import os - from colorama import Fore, Style from pathlib import Path DIF = "dif10" ECHO10 = "echo10" -UMM_JSON = "umm-json" +UMM_C = "umm-c" +UMM_G = "umm-g" ROOT_DIR = ( # go up one directory @@ -39,8 +38,9 @@ "checks_override", "rule_mapping", "rules_override", - f"{UMM_JSON}_schema", - "umm-cmn-json-schema" + f"{UMM_C}-json-schema", + "umm-cmn-json-schema", + f"{UMM_G}-json-schema" ], "csv": GCMD_KEYWORDS, "xsd": [ f"{DIF}_schema", f"{ECHO10}_schema" ], diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index d79ef3db..f19d2a91 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -7,7 +7,7 @@ from lxml import etree from urllib.request import pathname2url -from .constants import DIF, ECHO10, UMM_JSON, SCHEMA_PATHS +from .constants import ECHO10, SCHEMA_PATHS, UMM_C class SchemaValidator: @@ -29,7 +29,7 @@ def __init__( ['Collection/StartDate', ...]. """ self.metadata_format = metadata_format - if metadata_format == UMM_JSON: + if metadata_format.startswith("umm-"): self.validator_func = self.run_json_validator else: self.validator_func = self.run_xml_validator @@ -56,7 +56,7 @@ def read_json_schema(self): """ Reads the json schema file """ - schema = json.load(open(SCHEMA_PATHS[f"{self.metadata_format}_schema"], "r")) + schema = json.load(open(SCHEMA_PATHS[f"{self.metadata_format}-json-schema"], "r")) return schema def run_json_validator(self, content_to_validate): @@ -68,13 +68,16 @@ def run_json_validator(self, content_to_validate): (dict) A dictionary that gives the validity of the schema and errors if they exist """ schema = self.read_json_schema() - schema_base = json.load(open(SCHEMA_PATHS["umm-cmn-json-schema"], "r")) + schema_store = {} - # workaround to read local referenced schema file (only supports uri) - schema_store = { - schema_base.get('$id','/umm-cmn-json-schema.json') : schema_base, - schema_base.get('$id','umm-cmn-json-schema.json') : schema_base, - } + if self.metadata_format == UMM_C: + schema_base = json.load(open(SCHEMA_PATHS["umm-cmn-json-schema"], "r")) + + # workaround to read local referenced schema file (only supports uri) + schema_store = { + schema_base.get('$id','/umm-cmn-json-schema.json') : schema_base, + schema_base.get('$id','umm-cmn-json-schema.json') : schema_base, + } errors = {} diff --git a/pyQuARC/schemas/umm-json_schema.json b/pyQuARC/schemas/umm-json_schema.json deleted file mode 100644 index 1dcb9c2f..00000000 --- a/pyQuARC/schemas/umm-json_schema.json +++ /dev/null @@ -1,1511 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "UMM-C", - "type": "object", - "additionalProperties": false, - "properties": { - "MetadataLanguage": { - "description": "The language used in the metadata record.", - "$ref": "umm-cmn-json-schema.json#/definitions/LanguageType" - }, - "MetadataDates": { - "description": "Dates related to activities involving the metadata record itself. For example, Future Review date is the date that the metadata record is scheduled to be reviewed.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/DateType" - }, - "minItems": 0 - }, - "DirectoryNames": { - "description": "Formerly called Internal Directory Name (IDN) Node (IDN_Node). This element has been used historically by the GCMD internally to identify association, responsibility and/or ownership of the dataset, service or supplemental information. Note: This field only occurs in the DIF. When a DIF record is retrieved in the ECHO10 or ISO 19115 formats, this element will not be translated. The controlled vocabulary for directory names is maintained in the Keyword Management System (KMS).", - "type": "array", - "items": { - "$ref": "#/definitions/DirectoryNameType" - }, - "minItems": 0 - }, - "EntryTitle": { - "description": "The title of the collection or service described by the metadata.", - "$ref": "umm-cmn-json-schema.json#/definitions/EntryTitleType" - }, - "DOI": { - "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. For those that want to specify that a DOI is not applicable or unknown use the second option.", - "$ref": "umm-cmn-json-schema.json#/definitions/DoiType" - }, - "AssociatedDOIs": { - "description": "This element stores DOIs that are associated with the collection such as from campaigns and other related sources. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", - "type": "array", - "items": { - "$ref": "#/definitions/AssociatedDoiType" - }, - "minItems": 1 - }, - "Abstract": { - "description": "A brief description of the collection or service the metadata represents.", - "$ref": "umm-cmn-json-schema.json#/definitions/AbstractType" - }, - "Purpose": { - "description": "Suggested usage or purpose for the collection data or service.", - "$ref": "umm-cmn-json-schema.json#/definitions/PurposeType" - }, - "DataLanguage": { - "description": "Describes the language used in the preparation, storage, and description of the collection. It is the language of the collection data themselves. It does not refer to the language used in the metadata record (although this may be the same language).", - "$ref": "umm-cmn-json-schema.json#/definitions/LanguageType" - }, - "DataDates": { - "description": "Dates related to activities involving the collection data. For example, Creation date is the date that the collection data first entered the data archive system.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/DateType" - }, - "minItems": 1 - }, - "DataCenters": { - "description": "Information about the data centers responsible for this collection and its metadata.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/DataCenterType" - }, - "minItems": 1 - }, - "ContactGroups": { - "description": "Information about the personnel groups responsible for this collection and its metadata.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/ContactGroupType" - } - }, - "ContactPersons": { - "description": "Information about the personnel responsible for this collection and its metadata.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/ContactPersonType" - } - }, - "CollectionDataType": { - "description": "Identifies the collection as a Science Quality collection or a non-science-quality collection such as a Near-Real-Time collection.", - "$ref": "#/definitions/CollectionDataTypeEnum" - }, - "ProcessingLevel": { - "description": "The identifier for the processing level of the collection (e.g., Level0, Level1A).", - "$ref": "#/definitions/ProcessingLevelType" - }, - "CollectionCitations": { - "description": "Information required to properly cite the collection in professional scientific literature. This element provides information for constructing a citation for the item itself, and is not designed for listing bibliographic references of scientific research articles arising from search results. A list of references related to the research results should be in the Publication Reference element.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/ResourceCitationType" - }, - "minItems": 0 - }, - "CollectionProgress": { - "description": "This element describes the production status of the data set. There are five choices for Data Providers: PLANNED refers to data sets to be collected in the future and are thus unavailable at the present time. For Example: The Hydro spacecraft has not been launched, but information on planned data sets may be available. ACTIVE refers to data sets currently in production or data that is continuously being collected or updated. For Example: data from the AIRS instrument on Aqua is being collected continuously. COMPLETE refers to data sets in which no updates or further data collection will be made. For Example: Nimbus-7 SMMR data collection has been completed. DEPRECATED refers to data sets that have been retired, but still can be retrieved. Usually newer products exist that replace the retired data set. NOT APPLICABLE refers to data sets in which a collection progress is not applicable such as a calibration collection. There is a sixth value of NOT PROVIDED that should not be used by a data provider. It is currently being used as a value when a correct translation cannot be done with the current valid values, or when the value is not provided by the data provider.", - "$ref": "#/definitions/CollectionProgressEnum" - }, - "Quality": { - "description": "Free text description of the quality of the collection data. Description may include: 1) succinct description of the quality of data in the collection; 2) Any quality assurance procedures followed in producing the data in the collection; 3) indicators of collection quality or quality flags - both validated or invalidated; 4) recognized or potential problems with quality; 5) established quality control mechanisms; and 6) established quantitative quality measurements.", - "$ref": "umm-cmn-json-schema.json#/definitions/QualityType" - }, - "UseConstraints": { - "description": "Designed to protect privacy and/or intellectual property by allowing the author to specify how the collection may or may not be used after access is granted. This includes any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the item. Providers may request acknowledgement of the item from users and claim no responsibility for quality and completeness. Note: Use Constraints describe how the item may be used once access has been granted; and is distinct from Access Constraints, which refers to any constraints in accessing the item.", - "$ref": "#/definitions/UseConstraintsType" - }, - "AccessConstraints": { - "description": "Allows the author to constrain access to the collection. This includes any special restrictions, legal prerequisites, limitations and/or warnings on obtaining collection data. 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.", - "$ref": "umm-cmn-json-schema.json#/definitions/AccessConstraintsType" - }, - "ArchiveAndDistributionInformation": { - "description": "This element and all of its sub elements exist for display purposes. It allows a data provider to provide archive and distribution information up front to an end user, to help them decide if they can use the product.", - "$ref": "#/definitions/ArchiveAndDistributionInformationType" - }, - "DirectDistributionInformation": { - "description": "This element allows end users to get direct access to data products that are stored in the Amazon Web Service (AWS) S3 buckets. The sub elements include S3 credentials end point and a documentation URL as well as bucket prefix names and an AWS region.", - "$ref": "#/definitions/DirectDistributionInformationType" - }, - "PublicationReferences": { - "description": "Describes key bibliographic citations pertaining to the collection.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/PublicationReferenceType" - }, - "minItems": 0 - }, - "ISOTopicCategories": { - "description": "Identifies the topic categories from the EN ISO 19115-1:2014 Geographic Information – Metadata – Part 1: Fundamentals (http://www.isotc211.org/) Topic Category Code List that pertain to this collection, based on the Science Keywords associated with the collection. An ISO Topic Category is a high-level thematic classification to assist in the grouping of and search for available collections. The controlled vocabulary for ISO topic categories is maintained in the Keyword Management System (KMS).", - "type": "array", - "items": { - "type": "string", - "minLength": 1, - "maxLength": 4000 - }, - "minItems": 0 - }, - "ScienceKeywords": { - "description": "Controlled Science Keywords describing the collection. The controlled vocabulary for Science Keywords is maintained in the Keyword Management System (KMS).", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/ScienceKeywordType" - }, - "minItems": 1 - }, - "AncillaryKeywords": { - "description": "Allows authors to provide words or phrases outside of the controlled Science Keyword vocabulary, to further describe the collection.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/AncillaryKeywordStringType" - }, - "minItems": 0 - }, - "AdditionalAttributes": { - "description": "The data’s distinctive attributes of the collection (i.e. attributes used to describe the unique characteristics of the collection which extend beyond those defined).", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/AdditionalAttributeType" - }, - "minItems": 0 - }, - "MetadataAssociations": { - "description": "This element is used to identify other services, collections, visualizations, granules, and other metadata types and resources that are associated with or dependent on the data described by the metadata. This element is also used to identify a parent metadata record if it exists. This usage should be reserved for instances where a group of metadata records are subsets that can be better represented by one parent metadata record, which describes the entire set. In some instances, a child may point to more than one parent. The EntryId is the same as the element described elsewhere in this document where it contains an ID and Version.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/MetadataAssociationType" - }, - "minItems": 1 - }, - "TemporalExtents": { - "description": "This class contains attributes which describe the temporal range of a specific collection. Temporal Extent includes a specification of the Temporal Range Type of the collection, which is one of Range Date Time, Single Date Time, or Periodic Date Time", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/TemporalExtentType" - }, - "minItems": 1 - }, - "PaleoTemporalCoverages": { - "description": "For paleoclimate or geologic data, PaleoTemporalCoverage is the length of time represented by the data collected. PaleoTemporalCoverage should be used when the data spans time frames earlier than yyyy-mm-dd = 0001-01-01.", - "type": "array", - "items": { - "$ref": "#/definitions/PaleoTemporalCoverageType" - }, - "minItems": 0 - }, - "TemporalKeywords": { - "description": "One or more words or phrases that describe the temporal resolution of the dataset.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "minItems": 0 - }, - "SpatialExtent": { - "$ref": "#/definitions/SpatialExtentType" - }, - "TilingIdentificationSystems": { - "description": "Name of the two-dimensional tiling system for the collection. Previously called TwoDCoordinateSystem.", - "type": "array", - "items": { - "$ref": "#/definitions/TilingIdentificationSystemType" - }, - "minItems": 0 - }, - "SpatialInformation": { - "description": "The reference frame or system in which altitudes (elevations) are given. The information contains the datum name, distance units and encoding method, which provide the definition for the system. This field also stores the characteristics of the reference frame or system from which depths are measured. The additional information in the field is geometry reference data etc.", - "$ref": "#/definitions/SpatialInformationType" - }, - "SpatialKeywords": { - "description": "This is deprecated and will be removed. Use LocationKeywords instead. Controlled hierarchical keywords used to specify the spatial location of the collection. The controlled vocabulary for spatial keywords is maintained in the Keyword Management System (KMS). The Spatial Keyword hierarchy includes one or more of the following layers: Location_Category (e.g., Continent), Location_Type (e.g. Africa), Location_Subregion1 (e.g., Central Africa), Location_Subregion2 (e.g., Cameroon), and Location_Subregion3.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "minItems": 1 - }, - "LocationKeywords": { - "description": "Controlled hierarchical keywords used to specify the spatial location of the collection. The controlled vocabulary for spatial keywords is maintained in the Keyword Management System (KMS). The Spatial Keyword hierarchy includes one or more of the following layers: Category (e.g., Continent), Type (e.g. Africa), Subregion1 (e.g., Central Africa), Subregion2 (e.g., Cameroon), and Subregion3. DetailedLocation exists outside the hierarchy.", - "type": "array", - "items": { - "$ref": "#/definitions/LocationKeywordType" - } - }, - "Platforms": { - "description": "Information about the relevant platform(s) used to acquire the data in the collection. The controlled vocabulary for platform types is maintained in the Keyword Management System (KMS), and includes Spacecraft, Aircraft, Vessel, Buoy, Platform, Station, Network, Human, etc.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/PlatformType" - }, - "minItems": 1 - }, - "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 — 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.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/ProjectType" - }, - "minItems": 1 - }, - "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.", - "type": "array", - "items": { - "$ref": "umm-cmn-json-schema.json#/definitions/RelatedUrlType" - }, - "minItems": 1 - }, - "ShortName": { - "description": "The short name associated with the collection.", - "$ref": "umm-cmn-json-schema.json#/definitions/ShortNameType" - }, - "Version": { - "description": "The Version of the collection.", - "$ref": "umm-cmn-json-schema.json#/definitions/VersionType" - }, - "VersionDescription": { - "description": "The Version Description of the collection.", - "$ref": "umm-cmn-json-schema.json#/definitions/VersionDescriptionType" - } - }, - "required": ["ShortName", "Version", "EntryTitle", "Abstract", "DOI", "DataCenters", "ProcessingLevel", "ScienceKeywords", "TemporalExtents", "SpatialExtent", "Platforms", "CollectionProgress"], - - - - "definitions": { - "UseConstraintsDescriptionType": { - "type": "object", - "additionalProperties": false, - "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", - "properties": { - "Description": { - "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", - "type": "string", - "minLength": 1, - "maxLength": 4000 - } - } - }, - "UseConstraintsDescType": { - "description": "This sub-element either contains a license summary or free-text description that details the permitted use or limitation of this collection.", - "type": "string", - "minLength": 1, - "maxLength": 4000 - }, - "UseConstraintsType": { - "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", - "oneOf": [{ - "type": "object", - "additionalProperties": false, - "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", - "properties": { - "Description": { - "$ref": "#/definitions/UseConstraintsDescType" - } - }, - "required": ["Description"] - }, { - "type": "object", - "additionalProperties": false, - "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", - "properties": { - "Description": { - "$ref": "#/definitions/UseConstraintsDescType" - }, - "LicenseURL": { - "description": "This element holds the URL and associated information to access the License on the web. If this element is used the LicenseText element cannot be used.", - "$ref": "umm-cmn-json-schema.json#/definitions/OnlineResourceType" - } - }, - "required": ["LicenseURL"] - }, { - "type": "object", - "additionalProperties": false, - "description": "This element defines how the data may or may not be used after access is granted to assure the protection of privacy or intellectual property. This includes license text, license URL, or any special restrictions, legal prerequisites, terms and conditions, and/or limitations on using the data set. Data providers may request acknowledgement of the data from users and claim no responsibility for quality and completeness of data.", - "properties": { - "Description": { - "$ref": "#/definitions/UseConstraintsDescType" - }, - "LicenseText": { - "description": "This element holds the actual license text. If this element is used the LicenseUrl element cannot be used.", - "type": "string", - "minLength": 1, - "maxLength": 20000 - } - }, - "required": ["LicenseText"] - } - ]}, - "DirectoryNameType": { - "type": "object", - "additionalProperties": false, - "description": "Formerly called Internal Directory Name (IDN) Node (IDN_Node). This element has been used historically by the GCMD internally to identify association, responsibility and/or ownership of the dataset, service or supplemental information. Note: This field only occurs in the DIF. When a DIF record is retrieved in the ECHO10 or ISO 19115 formats, this element will not be translated.", - "properties": { - "ShortName": { - "$ref": "umm-cmn-json-schema.json#/definitions/ShortNameType" - }, - "LongName": { - "$ref": "umm-cmn-json-schema.json#/definitions/LongNameType" - } - }, - "required": ["ShortName"] - }, - "ProcessingLevelType": { - "type": "object", - "additionalProperties": false, - "description": "This element contains the Processing Level Id and the Processing Level Description", - "properties": { - "ProcessingLevelDescription": { - "description": "Description of the meaning of the Processing Level Id, e.g., the Description for the Level4 Processing Level Id might be 'Model output or results from analyses of lower level data'", - "type": "string", - "minLength": 1, - "maxLength": 2048 - }, - "Id": { - "description": "An identifier indicating the level at which the data in the collection are processed, ranging from Level0 (raw instrument data at full resolution) to Level4 (model output or analysis results). The value of Processing Level Id is chosen from a controlled vocabulary.", - "type": "string", - "minLength": 1, - "maxLength": 80 - } - }, - "required": ["Id"] - }, - "PaleoTemporalCoverageType": { - "type": "object", - "additionalProperties": false, - "description": "For paleoclimate or geologic data, PaleoTemporalCoverage is the length of time represented by the data collected. PaleoTemporalCoverage should be used when the data spans time frames earlier than yyyy-mm-dd = 0001-01-01.", - "properties": { - "ChronostratigraphicUnits": { - "description": "Hierarchy of terms indicating units of geologic time, i.e., eon (e.g, Phanerozoic), era (e.g., Cenozoic), period (e.g., Paleogene), epoch (e.g., Oligocene), and stage or age (e.g, Chattian).", - "type": "array", - "items": { - "$ref": "#/definitions/ChronostratigraphicUnitType" - }, - "minItems": 0 - }, - "StartDate": { - "description": "A string indicating the number of years furthest back in time, including units, e.g., 100 Ga. Units may be Ga (billions of years before present), Ma (millions of years before present), ka (thousands of years before present) or ybp (years before present).", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "EndDate": { - "description": "A string indicating the number of years closest to the present time, including units, e.g., 10 ka. Units may be Ga (billions of years before present), Ma (millions of years before present), ka (thousands of years before present) or ybp (years before present).", - "type": "string", - "minLength": 1, - "maxLength": 80 - } - } - }, - "ChronostratigraphicUnitType": { - "type": "object", - "additionalProperties": false, - "properties": { - "Eon": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Era": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Epoch": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Stage": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "DetailedClassification": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Period": { - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - } - }, - "required": ["Eon"] - }, - "SpatialExtentType": { - "type": "object", - "additionalProperties": false, - "description": "Specifies the geographic and vertical (altitude, depth) coverage of the data.", - "properties": { - "SpatialCoverageType": { - "description": "Denotes whether the collection's spatial coverage requires horizontal, vertical, horizontal and vertical, orbit, or vertical and orbit in the spatial domain and coordinate system definitions.", - "$ref": "#/definitions/SpatialCoverageTypeEnum" - }, - "HorizontalSpatialDomain": { - "$ref": "#/definitions/HorizontalSpatialDomainType" - }, - "VerticalSpatialDomains": { - "type": "array", - "items": { - "$ref": "#/definitions/VerticalSpatialDomainType" - } - }, - "OrbitParameters": { - "$ref": "#/definitions/OrbitParametersType" - }, - "GranuleSpatialRepresentation": { - "$ref": "#/definitions/GranuleSpatialRepresentationEnum" - } - }, - "required": ["GranuleSpatialRepresentation"] - }, - "SpatialCoverageTypeEnum": { - "type": "string", - "enum": ["HORIZONTAL", "VERTICAL", "ORBITAL", "HORIZONTAL_VERTICAL", "ORBITAL_VERTICAL", "HORIZONTAL_ORBITAL", "HORIZONTAL_VERTICAL_ORBITAL"] - }, - "HorizontalSpatialDomainType": { - "type": "object", - "additionalProperties": false, - "description": "Information about a collection with horizontal spatial coverage.", - "properties": { - "ZoneIdentifier": { - "description": "The appropriate numeric or alpha code used to identify the various zones in the collection's grid coordinate system.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "Geometry": { - "$ref": "#/definitions/GeometryType" - }, - "ResolutionAndCoordinateSystem": { - "description": "Specifies the horizontal spatial extents coordinate system and its resolution.", - "$ref": "#/definitions/ResolutionAndCoordinateSystemType" - } - }, - "required": ["Geometry"] - }, - "GeometryType": { - "type": "object", - "additionalProperties": false, - "properties": { - "CoordinateSystem": { - "$ref": "#/definitions/CoordinateSystemEnum" - }, - "Points": { - "type": "array", - "items": { - "$ref": "#/definitions/PointType" - }, - "minItems": 1 - }, - "BoundingRectangles": { - "type": "array", - "items": { - "$ref": "#/definitions/BoundingRectangleType" - }, - "minItems": 1 - }, - "GPolygons": { - "type": "array", - "items": { - "$ref": "#/definitions/GPolygonType" - }, - "minItems": 1 - }, - "Lines": { - "type": "array", - "items": { - "$ref": "#/definitions/LineType" - }, - "minItems": 1 - } - }, - "required": ["CoordinateSystem"], - "anyOf": [{ - "required": ["Points"] - }, { - "required": ["BoundingRectangles"] - }, { - "required": ["GPolygons"] - }, { - "required": ["Lines"] - }] - }, - "CoordinateSystemEnum": { - "type": "string", - "enum": ["CARTESIAN", "GEODETIC"] - }, - "PointType": { - "type": "object", - "additionalProperties": false, - "description": "The longitude and latitude values of a spatially referenced point in degrees.", - "properties": { - "Longitude": { - "$ref": "#/definitions/LongitudeType" - }, - "Latitude": { - "$ref": "#/definitions/LatitudeType" - } - }, - "required": ["Longitude", "Latitude"] - }, - "LatitudeType": { - "description": "The latitude value of a spatially referenced point, in degrees. Latitude values range from -90 to 90.", - "type": "number", - "minimum": -90, - "maximum": 90 - }, - "LongitudeType": { - "description": "The longitude value of a spatially referenced point, in degrees. Longitude values range from -180 to 180.", - "type": "number", - "minimum": -180, - "maximum": 180 - }, - "BoundingRectangleType": { - "type": "object", - "additionalProperties": false, - "properties": { - "WestBoundingCoordinate": { - "$ref": "#/definitions/LongitudeType" - }, - "NorthBoundingCoordinate": { - "$ref": "#/definitions/LatitudeType" - }, - "EastBoundingCoordinate": { - "$ref": "#/definitions/LongitudeType" - }, - "SouthBoundingCoordinate": { - "$ref": "#/definitions/LatitudeType" - } - }, - "required": ["WestBoundingCoordinate", "NorthBoundingCoordinate", "EastBoundingCoordinate", "SouthBoundingCoordinate"] - }, - "GPolygonType": { - "type": "object", - "additionalProperties": false, - "properties": { - "Boundary": { - "$ref": "#/definitions/BoundaryType" - }, - "ExclusiveZone": { - "$ref": "#/definitions/ExclusiveZoneType" - } - }, - "required": ["Boundary"] - }, - "BoundaryType": { - "type": "object", - "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": { - "type": "array", - "items": { - "$ref": "#/definitions/PointType" - }, - "minItems": 4 - } - }, - "required": ["Points"] - }, - "ExclusiveZoneType": { - "type": "object", - "additionalProperties": false, - "description": "Contains the excluded boundaries from the GPolygon.", - "properties": { - "Boundaries": { - "type": "array", - "items": { - "$ref": "#/definitions/BoundaryType" - }, - "minItems": 1 - } - }, - "required": ["Boundaries"] - }, - "LineType": { - "type": "object", - "additionalProperties": false, - "properties": { - "Points": { - "type": "array", - "items": { - "$ref": "#/definitions/PointType" - }, - "minItems": 2 - } - }, - "required": ["Points"] - }, - "VerticalSpatialDomainType": { - "type": "object", - "additionalProperties": false, - "properties": { - "Type": { - "description": "Describes the type of the area of vertical space covered by the collection locality.", - "$ref": "#/definitions/VerticalSpatialDomainTypeEnum" - }, - "Value": { - "description": "Describes the extent of the area of vertical space covered by the collection. Must be accompanied by an Altitude Encoding Method description. The datatype for this attribute is the value of the attribute VerticalSpatialDomainType. The unit for this attribute is the value of either DepthDistanceUnits or AltitudeDistanceUnits.", - "type": "string", - "minLength": 1, - "maxLength": 80 - } - }, - "required": ["Type", "Value"] - }, - "VerticalSpatialDomainTypeEnum": { - "type": "string", - "enum": ["Atmosphere Layer", "Maximum Altitude", "Maximum Depth", "Minimum Altitude", "Minimum Depth"] - }, - "OrbitParametersType": { - "type": "object", - "additionalProperties": false, - "description": "Orbit parameters for the collection used by the Orbital Backtrack Algorithm.", - "properties": { - "SwathWidth": { - "description": "Width of the swath at the equator in Kilometers.", - "type": "number" - }, - "Period": { - "description": "Orbital period in decimal minutes.", - "type": "number" - }, - "InclinationAngle": { - "description": "Inclination of the orbit. This is the same as (180-declination) and also the same as the highest latitude achieved by the satellite. Data Unit: Degree.", - "type": "number" - }, - "NumberOfOrbits": { - "description": "Indicates the number of orbits.", - "type": "number" - }, - "StartCircularLatitude": { - "description": "The latitude start of the orbit relative to the equator. This is used by the backtrack search algorithm to treat the orbit as if it starts from the specified latitude. This is optional and will default to 0 if not specified.", - "type": "number" - } - }, - "required": ["SwathWidth", "Period", "InclinationAngle", "NumberOfOrbits"] - }, - "GranuleSpatialRepresentationEnum": { - "type": "string", - "enum": ["CARTESIAN", "GEODETIC", "ORBIT", "NO_SPATIAL"] - }, - "TilingIdentificationSystemType": { - "type": "object", - "additionalProperties": false, - "description": "Information about a two-dimensional tiling system related to this collection.", - "properties": { - "TilingIdentificationSystemName": { - "$ref": "#/definitions/TilingIdentificationSystemNameEnum" - }, - "Coordinate1": { - "$ref": "#/definitions/TilingCoordinateType" - }, - "Coordinate2": { - "$ref": "#/definitions/TilingCoordinateType" - } - }, - "required": ["TilingIdentificationSystemName", "Coordinate1", "Coordinate2"] - }, - "TilingCoordinateType": { - "type": "object", - "additionalProperties": false, - "description": "Defines the minimum and maximum value for one dimension of a two dimensional coordinate system.", - "properties": { - "MinimumValue": { - "type": "number" - }, - "MaximumValue": { - "type": "number" - } - } - }, - "TilingIdentificationSystemNameEnum": { - "type": "string", - "enum": ["CALIPSO", "MISR", "MODIS Tile EASE", "MODIS Tile SIN", "WELD Alaska Tile", "WELD CONUS Tile", "WRS-1", "WRS-2", "Military Grid Reference System"] - }, - "SpatialInformationType": { - "type": "object", - "additionalProperties": false, - "description": "This entity stores the reference frame or system from which horizontal and vertical spatial domains are measured. The horizontal reference frame includes a Geodetic Model, Geographic Coordinates, and Local Coordinates. The Vertical reference frame includes altitudes (elevations) and depths.", - "properties": { - "VerticalCoordinateSystem": { - "$ref": "#/definitions/VerticalCoordinateSystemType" - }, - "SpatialCoverageType": { - "description": "Denotes whether the spatial coverage of the collection is horizontal, vertical, horizontal and vertical, orbit, or vertical and orbit.", - "type": "string", - "minLength": 1, - "maxLength": 80 - } - }, - "required": ["SpatialCoverageType"] - }, - "VerticalCoordinateSystemType": { - "type": "object", - "additionalProperties": false, - "properties": { - "AltitudeSystemDefinition": { - "$ref": "#/definitions/AltitudeSystemDefinitionType" - }, - "DepthSystemDefinition": { - "$ref": "#/definitions/DepthSystemDefinitionType" - } - } - }, - "AltitudeDistanceUnitsEnum": { - "description": "The units in which altitude measurements are recorded.", - "type": "string", - "enum": ["HectoPascals", "Kilometers", "Millibars"] - }, - "DepthDistanceUnitsEnum": { - "description": "The units in which depth measurements are recorded.", - "type": "string", - "enum": ["Fathoms", "Feet", "HectoPascals", "Meters", "Millibars"] - }, - "AltitudeSystemDefinitionType": { - "type": "object", - "additionalProperties": false, - "description": "The reference frame or system from which altitude is measured. The term 'altitude' is used instead of the common term 'elevation' to conform to the terminology in Federal Information Processing Standards 70-1 and 173. The information contains the datum name, distance units and encoding method, which provide the definition for the system.", - "properties": { - "DatumName": { - "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "DistanceUnits": { - "description": "The units in which measurements are recorded.", - "$ref": "#/definitions/AltitudeDistanceUnitsEnum" - }, - "Resolutions": { - "description": "The minimum distance possible between two adjacent values, expressed in distance units of measure for the collection.", - "type": "array", - "items": { - "type": "number" - }, - "minItems": 0 - } - } - }, - "DepthSystemDefinitionType": { - "type": "object", - "additionalProperties": false, - "description": "The reference frame or system from which depth is measured. The information contains the datum name, distance units and encoding method, which provide the definition for the system.", - "properties": { - "DatumName": { - "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "DistanceUnits": { - "description": "The units in which measurements are recorded.", - "$ref": "#/definitions/DepthDistanceUnitsEnum" - }, - "Resolutions": { - "description": "The minimum distance possible between two adjacent values, expressed in distance units of measure for the collection.", - "type": "array", - "items": { - "type": "number" - }, - "minItems": 0 - } - } - }, - "ResolutionAndCoordinateSystemType": { - "description": "This class defines the horizontal spatial extents coordinate system and the data product's horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", - "type": "object", - "oneOf": [{ - "additionalProperties": false, - "properties": { - "Description": { - "description": "This element holds a description about the resolution and coordinate system for people to read.", - "$ref": "#/definitions/DescriptionType" - }, - "GeodeticModel": { - "description": "This element describes the geodetic model for the data product.", - "$ref": "#/definitions/GeodeticModelType" - } - }, - "required": ["GeodeticModel"] - }, { - "additionalProperties": false, - "properties": { - "Description": { - "description": "This element holds a description about the resolution and coordinate system for people to read.", - "$ref": "#/definitions/DescriptionType" - }, - "GeodeticModel": { - "description": "This element describes the geodetic model for the data product.", - "$ref": "#/definitions/GeodeticModelType" - }, - "HorizontalDataResolution": { - "description": "This class defines a number of the data products horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", - "$ref": "#/definitions/HorizontalDataResolutionType" - } - }, - "required": ["HorizontalDataResolution"] - }, { - "additionalProperties": false, - "properties": { - "Description": { - "description": "This element holds a description about the resolution and coordinate system for people to read.", - "$ref": "#/definitions/DescriptionType" - }, - "GeodeticModel": { - "description": "This element describes the geodetic model for the data product.", - "$ref": "#/definitions/GeodeticModelType" - }, - "LocalCoordinateSystem": { - "description": "This element describes the local coordinate system for the data product.", - "$ref": "#/definitions/LocalCoordinateSystemType" - } - }, - "required": ["LocalCoordinateSystem"] - }] - }, - "DescriptionType": { - "description": "This element defines what a description is.", - "type": "string", - "minLength": 1, - "maxLength": 2048 - }, - "GeodeticModelType": { - "description": "This element describes the geodetic model for the data product.", - "type": "object", - "additionalProperties": false, - "properties": { - "HorizontalDatumName": { - "description": "The identification given to the reference system used for defining the coordinates of points.", - "$ref": "#/definitions/DatumNameType" - }, - "EllipsoidName": { - "description": "Identification given to established representation of the Earth's shape.", - "type": "string", - "minLength": 1, - "maxLength": 255 - }, - "SemiMajorAxis": { - "description": "Radius of the equatorial axis of the ellipsoid.", - "type": "number" - }, - "DenominatorOfFlatteningRatio": { - "description": "The ratio of the Earth's major axis to the difference between the major and the minor.", - "type": "number" - } - } - }, - "DatumNameType": { - "description": "The identification given to the level surface taken as the surface of reference from which measurements are compared.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "HorizontalDataResolutionType": { - "description": "This class defines a number of the data products horizontal data resolution. The horizontal data resolution is defined as the smallest horizontal distance between successive elements of data in a dataset. This is synonymous with terms such as ground sample distance, sample spacing and pixel size. It is to be noted that the horizontal data resolution could be different in the two horizontal dimensions. Also, it is different from the spatial resolution of an instrument, which is the minimum distance between points that an instrument can see as distinct.", - "type": "object", - "additionalProperties": false, - "properties": { - "VariesResolution": { - "description": "Varies Resolution object describes a data product that has a number of resolution values.", - "$ref": "#/definitions/HorizontalDataResolutionVariesType" - }, - "PointResolution": { - "description": "Point Resolution object describes a data product that is from a point source.", - "$ref": "#/definitions/HorizontalDataResolutionPointType" - }, - "NonGriddedResolutions": { - "description": "Non Gridded Resolutions object describes resolution data for non gridded data products.", - "type": "array", - "items": { - "$ref": "#/definitions/HorizontalDataResolutionNonGriddedType" - }, - "minItems": 1 - }, - "NonGriddedRangeResolutions": { - "description": "Non Gridded Range Resolutions object describes range resolution data for non gridded data products.", - "type": "array", - "items": { - "$ref": "#/definitions/HorizontalDataResolutionNonGriddedRangeType" - }, - "minItems": 1 - }, - "GriddedResolutions": { - "description": "Gridded Resolutions object describes resolution data for gridded data products.", - "type": "array", - "items": { - "$ref": "#/definitions/HorizontalDataResolutionGriddedType" - }, - "minItems": 1 - }, - "GriddedRangeResolutions": { - "description": "Gridded Range Resolutions object describes range resolution data for gridded data products.", - "type": "array", - "items": { - "$ref": "#/definitions/HorizontalDataResolutionGriddedRangeType" - }, - "minItems": 1 - }, - "GenericResolutions": { - "description": "Generic Resolutions object describes general resolution data for a data product where it is not known if a data product is gridded or not.", - "type": "array", - "items": { - "$ref": "#/definitions/HorizontalDataGenericResolutionType" - }, - "minItems": 1 - } - } - }, - "HorizontalDataResolutionVariesType": { - "description": "Varies Resolution object describes a data product that has a number of resolution values.", - "type": "string", - "enum": ["Varies"] - }, - "HorizontalDataResolutionPointType": { - "description": "Point Resolution object describes a data product that is from a point source.", - "type": "string", - "enum": ["Point"] - }, - "HorizontalDataResolutionNonGriddedType": { - "description": "Non Gridded Resolutions object describes resolution data for non gridded data products.", - "type": "object", - "additionalProperties": false, - "properties": { - "XDimension": { - "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", - "type": "number" - }, - "YDimension": { - "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", - "type": "number" - }, - "Unit": { - "description": "Units of measure used for the XDimension and YDimension values.", - "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" - }, - "ViewingAngleType": { - "description": "This element describes the angle of the measurement with respect to the instrument that gives an understanding of the specified resolution.", - "$ref": "#/definitions/HorizontalResolutionViewingAngleType" - }, - "ScanDirection": { - "description": "This element describes the instrument scanning direction.", - "$ref": "#/definitions/HorizontalResolutionScanDirectionType" - } - }, - "anyOf": [{ - "required": ["XDimension", "Unit"] - }, { - "required": ["YDimension", "Unit"] - }] - }, - "HorizontalDataResolutionNonGriddedRangeType": { - "description": "Non Gridded Range Resolutions object describes range resolution data for non gridded data products.", - "type": "object", - "additionalProperties": false, - "properties": { - "MinimumXDimension": { - "description": "The minimum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", - "type": "number" - }, - "MinimumYDimension": { - "description": "The minimum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", - "type": "number" - }, - "MaximumXDimension": { - "description": "The maximum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", - "type": "number" - }, - "MaximumYDimension": { - "description": "The maximum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", - "type": "number" - }, - "Unit": { - "description": "Units of measure used for the XDimension and YDimension values.", - "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" - }, - "ViewingAngleType": { - "description": "This element describes the angle of the measurement with respect to the instrument that gives an understanding of the specified resolution.", - "$ref": "#/definitions/HorizontalResolutionViewingAngleType" - }, - "ScanDirection": { - "description": "This element describes the instrument scanning direction.", - "$ref": "#/definitions/HorizontalResolutionScanDirectionType" - } - }, - "anyOf": [{ - "required": ["MinimumXDimension", "MaximumXDimension", "Unit"] - }, { - "required": ["MinimumYDimension", "MaximumYDimension", "Unit"] - }] - }, - "HorizontalDataResolutionGriddedType": { - "description": "Gridded Resolutions object describes resolution data for gridded data products.", - "type": "object", - "additionalProperties": false, - "properties": { - "XDimension": { - "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", - "type": "number" - }, - "YDimension": { - "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", - "type": "number" - }, - "Unit": { - "description": "Units of measure used for the XDimension and YDimension values.", - "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" - } - }, - "anyOf": [{ - "required": ["XDimension", "Unit"] - }, { - "required": ["YDimension", "Unit"] - }] - }, - "HorizontalDataResolutionGriddedRangeType": { - "description": "Gridded Range Resolutions object describes range resolution data for gridded data products.", - "type": "object", - "additionalProperties": false, - "properties": { - "MinimumXDimension": { - "description": "The minimum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", - "type": "number" - }, - "MinimumYDimension": { - "description": "The minimum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", - "type": "number" - }, - "MaximumXDimension": { - "description": "The maximum, minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", - "type": "number" - }, - "MaximumYDimension": { - "description": "The maximum, minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", - "type": "number" - }, - "Unit": { - "description": "Units of measure used for the XDimension and YDimension values.", - "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" - } - }, - "anyOf": [{ - "required": ["MinimumXDimension", "MaximumXDimension", "Unit"] - }, { - "required": ["MinimumYDimension", "MaximumYDimension", "Unit"] - }] - }, - "HorizontalDataGenericResolutionType": { - "description": "Generic Resolutions object describes general resolution data for a data product where it is not known if a data product is gridded or not.", - "type": "object", - "additionalProperties": false, - "properties": { - "XDimension": { - "description": "The minimum difference between two adjacent values on a horizontal plane in the X axis. In most cases this is along the longitudinal axis.", - "type": "number" - }, - "YDimension": { - "description": "The minimum difference between two adjacent values on a horizontal plan in the Y axis. In most cases this is along the latitudinal axis.", - "type": "number" - }, - "Unit": { - "description": "Units of measure used for the XDimension and YDimension values.", - "$ref": "#/definitions/HorizontalDataResolutionUnitEnum" - } - }, - "anyOf": [{ - "required": ["XDimension", "Unit"] - }, { - "required": ["YDimension", "Unit"] - }] - }, - "HorizontalDataResolutionUnitEnum": { - "description": "Units of measure used for the geodetic latitude and longitude resolution values (e.g., decimal degrees).", - "type": "string", - "enum": ["Decimal Degrees", "Kilometers", "Meters", "Statute Miles", "Nautical Miles", "Not provided"] - }, - "HorizontalResolutionViewingAngleType": { - "description": "This element describes the angle of the measurement with respect to the instrument that give an understanding of the specified resolution.", - "type": "string", - "enum": ["At Nadir", "Scan Extremes"] - }, - "HorizontalResolutionScanDirectionType": { - "description": "This element describes the instrument scanning direction.", - "type": "string", - "enum": ["Along Track", "Cross Track"] - }, - "LocalCoordinateSystemType": { - "type": "object", - "additionalProperties": false, - "properties": { - "GeoReferenceInformation": { - "description": "The information provided to register the local system to the Earth (e.g. control points, satellite ephemeral data, and inertial navigation data).", - "type": "string", - "minLength": 1, - "maxLength": 2048 - }, - "Description": { - "description": "A description of the Local Coordinate System and geo-reference information.", - "type": "string", - "minLength": 1, - "maxLength": 2048 - } - } - }, - "CollectionDataTypeEnum": { - "description": "This element is used to identify the collection as a Science Quality Collection or as a non-science-quality collection such as a Near Real Time collection. If a collection does not contain this field, it will be assumed to be of science-quality.", - "type": "string", - "enum": ["SCIENCE_QUALITY", "NEAR_REAL_TIME", "OTHER"] - }, - "CollectionProgressEnum": { - "description": "This element describes the production status of the data set. There are five choices for Data Providers: PLANNED refers to data sets to be collected in the future and are thus unavailable at the present time. For Example: The Hydro spacecraft has not been launched, but information on planned data sets may be available. ACTIVE refers to data sets currently in production or data that is continuously being collected or updated. For Example: data from the AIRS instrument on Aqua is being collected continuously. COMPLETE refers to data sets in which no updates or further data collection will be made. For Example: Nimbus-7 SMMR data collection has been completed. DEPRECATED refers to data sets that have been retired, but still can be retrieved. Usually newer products exist that replace the retired data set. NOT APPLICABLE refers to data sets in which a collection progress is not applicable such as a calibration collection. There is a sixth value of NOT PROVIDED that should not be used by a data provider. It is currently being used as a value when a correct translation cannot be done with the current valid values, or when the value is not provided by the data provider.", - "type": "string", - "enum": ["ACTIVE", "PLANNED", "COMPLETE", "DEPRECATED", "NOT APPLICABLE", "NOT PROVIDED"] - }, - "LocationKeywordType": { - "description": "This element defines a hierarchical location list. It replaces SpatialKeywords. The controlled vocabulary for location keywords is maintained in the Keyword Management System (KMS). Each tier must have data in the tier above it.", - "type": "object", - "additionalProperties": false, - "properties": { - "Category":{ - "description": "Top-level controlled keyword hierarchical level that contains the largest general location where the collection data was taken from.", - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Type":{ - "description": "Second-tier controlled keyword hierarchical level that contains the regional location where the collection data was taken from", - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Subregion1":{ - "description": "Third-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Subregion2":{ - "description": "Fourth-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "Subregion3":{ - "description": "Fifth-tier controlled keyword hierarchical level that contains the regional sub-location where the collection data was taken from", - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - }, - "DetailedLocation":{ - "description": "Uncontrolled keyword hierarchical level that contains the specific location where the collection data was taken from. Exists outside the hierarchy.", - "$ref": "umm-cmn-json-schema.json#/definitions/KeywordStringType" - } - }, - "required": ["Category"] - }, - "ArchiveDistributionFormatTypeEnum": { - "description": "Defines the possible values for the Archive or Distribution file format type.", - "type": "string", - "enum": ["Native", "Supported"] - }, - "ArchiveDistributionFormatDescriptionType": { - "description": "Allows a data provider to provide supporting information about the stated format.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "ArchiveDistributionUnitEnum": { - "description": "Defines the possible values for the archive and distribution size units.", - "type": "string", - "enum": ["KB", "MB", "GB", "TB", "PB", "NA"] - }, - "DistributionMediaType": { - "description": "This element defines the media by which the end user can obtain the distributable item. Examples of media include: CD-ROM, 9 track tape, diskettes, hard drives, online, transparencies, hardcopy, etc.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "FileArchiveInformationType": { - "description": "This element defines a single archive artifact which a data provider would like to inform an end user that it exists.", - "anyOf": [{ - "type": "object", - "additionalProperties": false, - "properties": { - "Format": { - "description": "This element defines a single format for an archival artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml. The controlled vocabulary for formats is maintained in the Keyword Management System (KMS).", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "FormatType": { - "description": "Allows the provider to state whether the archivable item's format is its native format or another supported format.", - "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" - }, - "FormatDescription": { - "description": "Allows the record provider to provide supporting documentation about the Format.", - "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" - }, - "AverageFileSize": { - "description": "An approximate average size of the archivable item. This gives an end user an idea of the magnitude for each archivable file if more than 1 exists.", - "type": "number" - }, - "AverageFileSizeUnit": { - "description": "Unit of measure for the average file size.", - "$ref": "#/definitions/ArchiveDistributionUnitEnum" - }, - "TotalCollectionFileSize": { - "description": "An approximate total size of all of the archivable items within a collection. This gives an end user an idea of the magnitude for all of archivable files combined.", - "type": "number" - }, - "TotalCollectionFileSizeUnit": { - "description": "Unit of measure for the total collection file size.", - "$ref": "#/definitions/ArchiveDistributionUnitEnum" - }, - "Description": { - "description": "Provides the data provider a way to convey more information about the archivable item.", - "type": "string", - "minLength": 1, - "maxLength": 1024 - } - }, - "required": ["Format"], - "dependencies": { - "AverageFileSize": ["AverageFileSizeUnit"], - "TotalCollectionFileSize": ["TotalCollectionFileSizeUnit"] - } - }, { - "type": "object", - "additionalProperties": false, - "properties": { - "Format": { - "description": "This element defines a single format for an archival artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml. The controlled vocabulary for formats is maintained in the Keyword Management System (KMS).", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "FormatType": { - "description": "Allows the provider to state whether the archivable item's format is its native format or another supported format.", - "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" - }, - "FormatDescription": { - "description": "Allows the record provider to provide supporting documentation about the Format.", - "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" - }, - "AverageFileSize": { - "description": "An approximate average size of the archivable item. This gives an end user an idea of the magnitude for each archivable file if more than 1 exists.", - "type": "number" - }, - "AverageFileSizeUnit": { - "description": "Unit of measure for the average file size.", - "$ref": "#/definitions/ArchiveDistributionUnitEnum" - }, - "TotalCollectionFileSizeBeginDate": { - "description": "The date of which this collection started to collect data. This date is used by users to be able to calculate the current total collection file size. The date needs to be in the yyyy-MM-ddTHH:mm:ssZ format; for example: 2018-01-01T10:00:00Z.", - "format": "date-time", - "type": "string" - }, - "Description": { - "description": "Provides the data provider a way to convey more information about the archivable item.", - "type": "string", - "minLength": 1, - "maxLength": 1024 - } - }, - "required": ["Format"], - "dependencies": { - "AverageFileSize": ["AverageFileSizeUnit"], - "TotalCollectionFileSizeBeginDate": ["AverageFileSize"] - } - }] - }, - "FileDistributionInformationType": { - "description": "This element defines a single artifact that is distributed by the data provider. This element only includes the distributable artifacts that can be obtained by the user without the user having to invoke a service. These should be documented in the UMM-S specification.", - "anyOf": [{ - "type": "object", - "additionalProperties": false, - "properties": { - "Format": { - "description": "This element defines a single format for a distributable artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "FormatType": { - "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", - "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" - }, - "FormatDescription": { - "description": "Allows the record provider to provide supporting documentation about the Format.", - "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" - }, - "Media": { - "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.", - "type": "array", - "items": { - "$ref": "#/definitions/DistributionMediaType" - }, - "minItems": 1 - }, - "AverageFileSize": { - "description": "An approximate average size of the distributable item. This gives an end user an idea of the magnitude for each distributable file if more than 1 exists.", - "type": "number" - }, - "AverageFileSizeUnit": { - "description": "Unit of measure for the average file size.", - "$ref": "#/definitions/ArchiveDistributionUnitEnum" - }, - "TotalCollectionFileSize": { - "description": "An approximate total size of all of the distributable items within a collection. This gives an end user an idea of the magnitude for all of distributable files combined.", - "type": "number" - }, - "TotalCollectionFileSizeUnit": { - "description": "Unit of measure for the total collection file size.", - "$ref": "#/definitions/ArchiveDistributionUnitEnum" - }, - "Description": { - "description": "Provides the data provider a way to convey more information about the distributable item.", - "type": "string", - "minLength": 1, - "maxLength": 1024 - }, - "Fees": { - "description": "Conveys the price one has to pay to obtain the distributable item.", - "type": "string", - "minLength": 1, - "maxLength": 255 - } - }, - "required": ["Format"], - "dependencies": { - "AverageFileSize": ["AverageFileSizeUnit"], - "TotalCollectionFileSize": ["TotalCollectionFileSizeUnit"] - } - }, { - "type": "object", - "additionalProperties": false, - "properties": { - "Format": { - "description": "This element defines a single format for a distributable artifact. Examples of format include: ascii, binary, GRIB, BUFR, HDF4, HDF5, HDF-EOS4, HDF-EOS5, jpeg, png, tiff, geotiff, kml.", - "type": "string", - "minLength": 1, - "maxLength": 80 - }, - "FormatType": { - "description": "Allows the provider to state whether the distributable item's format is its native format or another supported format.", - "$ref": "#/definitions/ArchiveDistributionFormatTypeEnum" - }, - "FormatDescription": { - "description": "Allows the record provider to provide supporting documentation about the Format.", - "$ref": "#/definitions/ArchiveDistributionFormatDescriptionType" - }, - "Media": { - "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.", - "type": "array", - "items": { - "$ref": "#/definitions/DistributionMediaType" - }, - "minItems": 1 - }, - "AverageFileSize": { - "description": "An approximate average size of the distributable item. This gives an end user an idea of the magnitude for each distributable file if more than 1 exists.", - "type": "number" - }, - "AverageFileSizeUnit": { - "description": "Unit of measure for the average file size.", - "$ref": "#/definitions/ArchiveDistributionUnitEnum" - }, - "TotalCollectionFileSizeBeginDate": { - "description": "The date of which this collection started to collect data. This date is used by users to be able to calculate the current total collection file size. The date needs to be in the yyyy-MM-ddTHH:mm:ssZ format; for example: 2018-01-01T10:00:00Z.", - "format": "date-time", - "type": "string" - }, - "Description": { - "description": "Provides the data provider a way to convey more information about the distributable item.", - "type": "string", - "minLength": 1, - "maxLength": 1024 - }, - "Fees": { - "description": "Conveys the price one has to pay to obtain the distributable item.", - "type": "string", - "minLength": 1, - "maxLength": 255 - } - }, - "required": ["Format"], - "dependencies": { - "AverageFileSize": ["AverageFileSizeUnit"], - "TotalCollectionFileSizeBeginDate": ["AverageFileSize"] - } - }] - }, - "ArchiveAndDistributionInformationType": { - "type": "object", - "additionalProperties": false, - "description": "This element and all of its sub elements exist for display purposes. It allows a data provider to provide archive and distribution information up front to an end user, to help them decide if they can use the product.", - "properties": { - "FileArchiveInformation": { - "description": "This element defines a single archive artifact which a data provider would like to inform an end user that it exists.", - "type": "array", - "items": { - "$ref": "#/definitions/FileArchiveInformationType" - }, - "minItems": 1 - }, - "FileDistributionInformation": { - "description": "This element defines a single artifact that is distributed by the data provider. This element only includes the distributable artifacts that can be obtained by the user without the user having to invoke a service. These should be documented in the UMM-S specification.", - "type": "array", - "items": { - "$ref": "#/definitions/FileDistributionInformationType" - }, - "minItems": 1 - } - }, - "anyOf": [{ - "required": ["FileArchiveInformation"] - }, { - "required": ["FileDistributionInformation"] - }] - }, - "DirectDistributionInformationType": { - "type": "object", - "additionalProperties": false, - "description": "This element allows end users to get direct access to data products that are stored in the Amazon Web Service (AWS) S3 buckets. The sub elements include S3 credentials end point and a documentation URL as well as bucket prefix names and an AWS region.", - "properties": { - "Region": { - "description": "Defines the possible values for the Amazon Web Service US Regions where the data product resides.", - "$ref": "#/definitions/DirectDistributionInformationRegionEnum" - }, - "S3BucketAndObjectPrefixNames": { - "description": "Defines the possible values for the Amazon Web Service US S3 bucket and/or object prefix names.", - "type": "array", - "items": { - "type": "string", - "minLength": 1, - "maxLength": 1024, - "pattern": "[!-~]{1,1024}" - }, - "minItems": 1 - }, - "S3CredentialsAPIEndpoint": { - "description": "Defines the URL where the credentials are stored.", - "type": "string", - "format": "uri", - "minLength": 1, - "maxLength": 1024 - }, - "S3CredentialsAPIDocumentationURL": { - "description": "Defines the URL where the credential documentation are stored.", - "type": "string", - "format": "uri", - "minLength": 1, - "maxLength": 1024 - } - }, - "required": ["Region", "S3CredentialsAPIEndpoint", "S3CredentialsAPIDocumentationURL"] - }, - "DirectDistributionInformationRegionEnum": { - "description": "Defines the possible values for the Amazon Web Service US Regions where the data product resides.", - "type": "string", - "enum": ["us-east-1", "us-east-2", "us-west-1", "us-west-2"] - }, - "AssociatedDoiType": { - "type": "object", - "additionalProperties": false, - "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL. The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used. NASA metadata providers are strongly encouraged to include DOI and DOI Authority for their collections using CollectionDOI property.", - "properties": { - "DOI": { - "description": "This element stores the DOI (Digital Object Identifier) that identifies the collection. Note: The values should start with the directory indicator which in ESDIS' case is 10. If the DOI was registered through ESDIS, the beginning of the string should be 10.5067. The DOI URL is not stored here; it should be stored as a RelatedURL.", - "type": "string", - "minLength": 1, - "maxLength": 1024 - }, - "Title": { - "description": "The title of the DOI landing page. The title describes the DOI object to a user, so they don't have to look it up themselves to understand the association.", - "$ref": "umm-cmn-json-schema.json#/definitions/TitleType" - }, - "Authority": { - "description": "The DOI organization that is responsible for creating the DOI is described in the Authority element. For ESDIS records the value of https://doi.org/ should be used.", - "$ref": "umm-cmn-json-schema.json#/definitions/AuthorityType" - } - }, - "required": ["DOI"] - } - } -} From 5fb704de0fedd676fde2cbc895c50f9df8d9cb10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 28 Mar 2022 11:41:58 -0500 Subject: [PATCH 063/261] Add test metadata file for umm-g, rename that of umm-c --- ...adata.umm-json => test_cmr_metadata.umm-c} | 0 tests/fixtures/test_cmr_metadata.umm-g | 280 ++++++++++++++++++ 2 files changed, 280 insertions(+) rename tests/fixtures/{test_cmr_metadata.umm-json => test_cmr_metadata.umm-c} (100%) create mode 100644 tests/fixtures/test_cmr_metadata.umm-g diff --git a/tests/fixtures/test_cmr_metadata.umm-json b/tests/fixtures/test_cmr_metadata.umm-c similarity index 100% rename from tests/fixtures/test_cmr_metadata.umm-json rename to tests/fixtures/test_cmr_metadata.umm-c diff --git a/tests/fixtures/test_cmr_metadata.umm-g b/tests/fixtures/test_cmr_metadata.umm-g new file mode 100644 index 00000000..8622abae --- /dev/null +++ b/tests/fixtures/test_cmr_metadata.umm-g @@ -0,0 +1,280 @@ +{ + "GranuleUR": "Unique_Granule_UR_v1.6", + "ProviderDates": [{ + "Date": "2018-07-19T00:00:00Z", + "Type": "Create" + }, { + "Date": "2018-08-19T01:00:00Z", + "Type": "Insert" + }, { + "Date": "2018-09-19T02:00:00Z", + "Type": "Update" + }, { + "Date": "2030-08-19T03:00:00Z", + "Type": "Delete" + }], + "CollectionReference": { + "ShortName": "CollectionShortName", + "Version": "1.6" + }, + "AccessConstraints": { + "Description" : "Public Access", + "Value": 42 + }, + "DataGranule": { + "ArchiveAndDistributionInformation": [{ + "Name": "GranuleZipFile", + "SizeInBytes": 23000, + "Size": 23, + "SizeUnit": "KB", + "Format": "ZIP", + "MimeType": "application/zip", + "Checksum": { + "Value": "E51569BF48DD0FD0640C6503A46D4753", + "Algorithm": "MD5" + }, + "Files": [{ + "Name": "GranuleFileName1", + "SizeInBytes": 10000, + "Size": 10, + "SizeUnit": "KB", + "Format": "NETCDF-4", + "MimeType": "application/x-netcdf", + "FormatType": "Native", + "Checksum": { + "Value": "E51569BF48DD0FD0640C6503A46D4754", + "Algorithm": "MD5" + } + }, { + "Name": "GranuleFileName2", + "SizeInBytes": 1000, + "Size": 1, + "SizeUnit": "KB", + "Format": "ASCII", + "MimeType": "text/plain", + "FormatType": "NA" + }, { + "Name": "GranuleFileName3", + "SizeInBytes": 1000, + "Size": 1, + "SizeUnit": "KB", + "Format": "DMRPP", + "MimeType": "application/vnd.opendap.dap4.dmrpp+xml", + "FormatType": "NA" + }] + }, { + "Name": "SupportedGranuleFileNotInPackage-WithAVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongName", + "SizeInBytes": 11000, + "Size": 11, + "SizeUnit": "KB", + "Format": "NETCDF-CF", + "FormatType": "Supported", + "MimeType": "application/x-netcdf", + "Checksum": { + "Value": "E51569BF48DD0FD0640C6503A46D4755", + "Algorithm": "MD5" + } + }], + "ReprocessingPlanned": "The Reprocessing Planned Statement Value", + "ReprocessingActual": "The Reprocessing Actual Statement Value", + "DayNightFlag" : "Unspecified", + "ProductionDateTime" : "2018-07-19T12:01:01Z", + "Identifiers": [{ + "Identifier": "SMAP_L3_SM_P_20150407_R13080_001.h5", + "IdentifierType": "ProducerGranuleId" + }, { + "Identifier": "LocalVersionIdValue", + "IdentifierType": "LocalVersionId" + }, { + "Identifier": "FeatureIdValue1", + "IdentifierType": "FeatureId" + }, { + "Identifier": "FeatureIdValue2", + "IdentifierType": "FeatureId" + }, { + "Identifier": "12345678911234567892123456789312345678941234567895123456789612345678971234567898123456789912345678901234567891123456789212345678901234567890", + "IdentifierType": "Other", + "IdentifierName": "SomeIdentifierVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongName" + }, { + "Identifier": "CRIDValue", + "IdentifierType": "CRID" + }] + }, + "PGEVersionClass": { + "PGEName": "A PGE Name", + "PGEVersion": "6.0.27" + }, + "TemporalExtent": { + "RangeDateTime": { + "BeginningDateTime": "2018-07-17T00:00:00.000Z", + "EndingDateTime": "2018-07-17T23:59:59.999Z" + } + }, + "SpatialExtent": { + "GranuleLocalities": ["GranuleLocality1", "GranuleLocality2"], + "HorizontalSpatialDomain": { + "ZoneIdentifier": "ZoneIdentifier 1", + "Geometry": { + "Points": [{ + "Longitude": -77, + "Latitude": 88 + }, { + "Longitude":10, + "Latitude": 10 + }], + "BoundingRectangles": [{ + "WestBoundingCoordinate": -180, + "NorthBoundingCoordinate": 85.04450225830078, + "EastBoundingCoordinate": 180, + "SouthBoundingCoordinate": -85.04450225830078 + }], + "GPolygons": [{ + "Boundary" : { + "Points": [ {"Longitude":-10, "Latitude":-10}, {"Longitude":10, "Latitude":-10}, {"Longitude":10, "Latitude":10}, {"Longitude":-10, "Latitude":10}, {"Longitude":-10, "Latitude":-10}] + }, + "ExclusiveZone": { + "Boundaries": [{ + "Points": [{"Longitude":-5, "Latitude":-5}, {"Longitude":-1, "Latitude":-5}, {"Longitude":-1, "Latitude":-1}, {"Longitude":-5, "Latitude":-1}, {"Longitude":-5, "Latitude":-5}] + }, { + "Points": [{"Longitude":0, "Latitude":0}, {"Longitude":5, "Latitude":0}, {"Longitude":5, "Latitude":5}, {"Longitude":0, "Latitude":5}, {"Longitude":0, "Latitude":0}] + }] + } + }], + "Lines": [{ + "Points": [ {"Longitude":-100, "Latitude":-70}, {"Longitude":-88, "Latitude":-66}] + }] + }, + "Track": { + "Cycle": 1, + "Passes": [{ + "Pass": 1, + "Tiles": ["1L","1R","2F"] + }, { + "Pass": 2, + "Tiles": ["3L","3R","4F"] + }] + } + }, + "VerticalSpatialDomains": [{ + "Type": "Atmosphere Layer", + "Value": "Atmosphere Profile" + }, { + "Type": "Pressure", + "Value": "100", + "Unit": "HectoPascals" + }, { + "Type": "Altitude", + "MinimumValue": "10", + "MaximumValue": "100", + "Unit": "Meters" + }] + }, + "OrbitCalculatedSpatialDomains": [{ + "OrbitalModelName": "OrbitalModelName", + "BeginOrbitNumber": 99263, + "EndOrbitNumber": 99263, + "EquatorCrossingLongitude":88.92, + "EquatorCrossingDateTime": "2018-08-16T16:22:21.000Z" + }], + "MeasuredParameters": [{ + "ParameterName": "Parameter Name", + "QAStats": { + "QAPercentMissingData": 10, + "QAPercentOutOfBoundsData": 20, + "QAPercentInterpolatedData": 30, + "QAPercentCloudCover": 40 + }, + "QAFlags": { + "AutomaticQualityFlag": "Passed", + "AutomaticQualityFlagExplanation": "Automatic Quality Flag Explanation", + "OperationalQualityFlag": "Passed", + "OperationalQualityFlagExplanation": "Operational Quality Flag Explanation", + "ScienceQualityFlag": "Passed", + "ScienceQualityFlagExplanation": "Science Quality Flag Explanation" + } + }], + "Platforms": [{ + "ShortName": "Aqua", + "Instruments": [{ + "ShortName": "AMSR-E", + "Characteristics": [{ + "Name": "InstrumentCaracteristicName1", + "Value": "150" + }, { + "Name": "InstrumentCaracteristicName2", + "Value": "22F" + }], + "ComposedOf": [{ + "ShortName": "AMSR-E_ChildInstrument", + "Characteristics": [{ + "Name": "ChildInstrumentCharacteristicName3", + "Value": "250" + }], + "OperationalModes": ["Mode3"] + }], + "OperationalModes": ["Mode1", "Mode2"] + }] + }], + "Projects": [{ + "ShortName": "Project1" + }, { + "ShortName": "Project2" + }], + "AdditionalAttributes": [{ + "Name": "AdditionalAttribute1 Name1", + "Values": ["AdditionalAttribute1 Value3", "AdditionalAttribute1 Value4"] + }, { + "Name": "EVI1KM16DAYQCLASSPERCENTAGE", + "Values": ["EVI1KM16DAYQCLASSPERCENTAGE Value5", "EVI1KM16DAYQCLASSPERCENTAGE Value6"] + }, { + "Name": "QAFRACTIONGOODQUALITY", + "Values": ["QAFRACTIONGOODQUALITY Value7", "QAFRACTIONGOODQUALITY Value8"] + }, { + "Name": "QAFRACTIONNOTPRODUCEDCLOUD", + "Values": ["QAFRACTIONNOTPRODUCEDCLOUD Value9", "QAFRACTIONNOTPRODUCEDCLOUD Value10"] + }], + "InputGranules": ["InputGranule1", "InputGranule2"], + "TilingIdentificationSystem": { + "TilingIdentificationSystemName": "MODIS Tile EASE", + "Coordinate1": { + "MinimumValue": -100, + "MaximumValue": -50 + }, + "Coordinate2": { + "MinimumValue": 50, + "MaximumValue": 100 + } + }, + "CloudCover": 60, + "RelatedUrls": [{ + "URL": "https://daac.ornl.gov/daacdata/islscp_ii/vegetation/erbe_albedo_monthly_xdeg/data/erbe_albedo_1deg_1986.zip", + "Type": "GET DATA", + "Description": "This link provides direct download access to the granule.", + "Format": "ZIP", + "MimeType": "application/zip", + "Size": 395.673, + "SizeUnit": "KB" + }, { + "URL": "https://daac.ornl.gov/ISLSCP_II/guides/erbe_albedo_monthly_xdeg.html", + "Type": "VIEW RELATED INFORMATION", + "Subtype": "USER'S GUIDE", + "Description": "ORNL DAAC Data Set Documentation", + "Format": "HTML", + "MimeType": "text/html" + }, { + "URL": "https://webmap.ornl.gov/sdat/pimg/957_1.png", + "Type": "GET RELATED VISUALIZATION", + "Description": "ISLSCP II EARTH RADIATION BUDGET EXPERIMENT (ERBE) MONTHLY ALBEDO, 1986-1990", + "Format": "PNG", + "MimeType": "image/png", + "Size": 10, + "SizeUnit": "MB" + }], + "NativeProjectionNames": ["MODIS Sinusoidal System", "Sinusoidal"], + "GridMappingNames": ["Sinusoidal", "Lambert Azimuthal Equal-Area"], + "MetadataSpecification": { + "URL": "https://cdn.earthdata.nasa.gov/umm/granule/v1.6.4", + "Name": "UMM-G", + "Version": "1.6.4" + } +} From 938812dd601a61e4fd554a645884de19b62d86d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 28 Mar 2022 11:42:52 -0500 Subject: [PATCH 064/261] Update download extension as a result of format change --- README.md | 2 +- pyQuARC/code/checker.py | 4 ++-- pyQuARC/code/downloader.py | 11 +++-------- pyQuARC/code/schema_validator.py | 2 +- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f199c42e..43b366cf 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ arguments: List of concept IDs. --file FILE Path to the test file, either absolute or relative to the root dir. --fake FAKE Use a fake content for testing. ---format [FORMAT] The metadata format (currently supported: 'echo10' and 'dif10') + --format [FORMAT] The metadata format (currently supported: 'echo10' and 'dif10') ``` To test a local file, use the `--file` argument. Give it either an absolute file path or a file path relative to the project root directory. diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index f3bf683a..eac83e45 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -13,7 +13,7 @@ from .string_validator import StringValidator from .url_validator import UrlValidator -from .constants import COLOR, DIF, ECHO10, SCHEMA_PATHS, UMM_JSON +from .constants import COLOR, DIF, ECHO10, SCHEMA_PATHS class Checker: @@ -223,7 +223,7 @@ def run(self, metadata_content): Returns: (dict): The results of the jsonschema check and all custom checks """ - if self.metadata_format == UMM_JSON: + if self.metadata_format.startswith("umm-"): json_metadata = json.loads(metadata_content) else: json_metadata = parse(metadata_content) diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index 440eb139..b28c7e4d 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -1,17 +1,12 @@ -import json import re import requests -from xmltodict import parse - -from .constants import DIF, ECHO10, UMM_JSON - class Downloader: """ Downloads data given a concept ID """ - + BASE_URL = ( "https://cmr.earthdata.nasa.gov/search/concepts/{concept_id}.{metadata_format}" ) @@ -55,9 +50,9 @@ def _construct_url(self): (str) The URL constructed based on the concept ID """ - concept_id_type = Downloader._concept_id_type(self.concept_id) constructed_url = Downloader.BASE_URL.format( - concept_id=self.concept_id, metadata_format=self.metadata_format + concept_id=self.concept_id, + metadata_format=self.metadata_format if not self.metadata_format.startswith("umm-") else "umm-json" ) return constructed_url diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index f19d2a91..86887358 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -23,7 +23,7 @@ def __init__( """ Args: metadata_format (str): The format of the metadata that needs - to be validated. Can be either of { ECHO10, UMM_JSON, DIF }. + to be validated. Can be any of { DIF, ECHO10, UMM_C, UMM_G }. validation_paths (list of str): The path of the fields in the metadata that need to be validated. In the form ['Collection/StartDate', ...]. From 8659069ea99497ad681964741e1199aa17ea03de Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Mon, 28 Mar 2022 15:53:52 -0500 Subject: [PATCH 065/261] Added Characteristic Name Uniqueness Check UMM - Added Characteristic Name Uniqueness Check UMM - Added entry in CHANGELOG.md - updated README.md to include UMM-C support --- CHANGELOG.md | 63 +++++++++++++++++++++++++++++ README.md | 2 +- pyQuARC/code/custom_validator.py | 16 ++++++++ pyQuARC/schemas/check_messages.json | 8 ++++ pyQuARC/schemas/checks.json | 5 +++ pyQuARC/schemas/rule_mapping.json | 11 ++++- 6 files changed, 102 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bf9bc10..96fbc106 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,68 @@ # CHANGELOG +## v2.0.1 + +### List of added checks + +- GET DATA URL Check UMM +- Metadata Update Time Logic Check +- Future Date Check +- Data Center Long Name Check +- URL Description Uniqueness Check +- Periodic Duration Unit Check +- Characteristic Name Uniqueness Check UMM + +## Check Updates for UMM-C + +- Range Date Time Logic Check +- Range Date Time Logic Check +- Project Date Time Logic Check +- Project Date Time Logic Check +- Periodic Date Time Logic Check +- Datetime ISO Format Check +- URL Health and Status Check +- Delete Time Check +- DOI Missing Reason Enumeration Check +- Processing Level Description Length Check +- UMM Controlled Collection State List +- Ends at present flag logic check +- Ends at present flag presence check +- Data Contact Role Enumeration Check +- Controlled Contact Role Check +- Characteristic Description Length Check +- Organization Longname GCMD Check +- Instrument Short/Longname Consistency Check +- Instrument Shortname GCMD Check +- Instrument Long Name Check +- Platform Shortname GCMD Check +- Data Format GCMD Check +- Platform Longname GCMD Check +- Platform Type GCMD Check +- Campaign Short/Long name consistency Check +- Campaign Short Name GCMD Check +- Campaign Long Name GCMD Check +- Collection Data Type Enumeration Check +- Bounding Coordinates Logic Check +- Vertical Spatial Domain Type Check +- Spatial Coverage Type Check +- Campaign Name Presence Check +- Spatial Extent Requirement Fulfillment Check +- Collection Progress Related Fields Consistency Check +- Online Resource Type GCMD Check +- Characteristic Name Uniqueness Check +- Ending Datetime validation against granules +- Beginning Datetime validation against granules +- ISO Topic Category Vocabulary Check +- Temporal Extent Requirement Check +- FTP Protocol Check +- Citation Version Check +- Default Date Check +- Online Description Presence Check +- IDN Node Shortname GCMD Check +- Chrono Unit GCMD Check +- Platform Type Presence Check +- Horizontal Data Resolution Unit Controlled Vocabulary Check + ## v2.0.0 - Support for [UMM-JSON](https://earthdata.nasa.gov/esdis/esco/standards-and-references/eso-umm-information) collection level metadata diff --git a/README.md b/README.md index f199c42e..be56963f 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The CMR is designed around its own metadata standard called the [Unified Metadat * UMM-G (Granule/File-level metadata) * UMM-S (Service metadata) -**Currently, pyQuARC only supports ECHO 10 collection-level metadata. Support for additional metadata standards will continue to be added in the coming months.** When completed, pyQuARC will support the DIF 10 (collection only), ECHO 10 (collection and granule), UMM-C and UMM-G standards. At this time, there are no plans to add ISO 19115 or UMM-S specific checks. +**Currently, pyQuARC supports DIF 10, ECHO 10, and UMM-C collection-level metadata. Support for additional metadata standards will continue to be added in the coming months.** When completed, pyQuARC will support the DIF 10 (collection only), ECHO 10 (collection and granule), UMM-C and UMM-G standards. At this time, there are no plans to add ISO 19115 or UMM-S specific checks. ## Architecture diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index d919757f..f7554454 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -173,6 +173,22 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag @staticmethod @if_arg def characteristic_name_uniqueness_check(characteristics): + seen, duplicates = set(), set() + for characteristic in characteristics['Characteristic']: + name = characteristic['Name'] + if name in seen: + duplicates.add(name) + else: + seen.add(name) + + return { + "valid": not bool(duplicates), + "value": ', '.join(duplicates) + } + + @staticmethod + @if_arg + def characteristic_name_uniqueness_check_umm(characteristics): seen, duplicates = set(), set() for characteristic in characteristics: name = characteristic['Name'] diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 0042c3dd..b29994ab 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -647,6 +647,14 @@ }, "remediation": "Please provide a unique name for each characteristic." }, + "characteristic_name_uniqueness_check_umm": { + "failure": "Duplicate characteristic name/s `{}`.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a unique name for each characteristic." + }, "validate_beginning_datetime_against_granules": { "failure": "The collection beginning datetime `{}` isn't consistent with the first granule's beginning datetime `{}`.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 7e4aada2..7a26a8f8 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -214,6 +214,11 @@ "check_function": "characteristic_name_uniqueness_check", "available": true }, + "characteristic_name_uniqueness_check_umm": { + "data_type": "custom", + "check_function": "characteristic_name_uniqueness_check_umm", + "available": true + }, "validate_ending_datetime_against_granules": { "data_type": "datetime", "check_function": "validate_ending_datetime_against_granules", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index b4edadf9..e40c1d15 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3207,7 +3207,14 @@ "Collection/Platforms/Platform/Characteristics" ] } - ], + ] + }, + "severity": "warning", + "check_id": "characteristic_name_uniqueness_check" + }, + "characteristic_name_uniqueness_check_umm": { + "rule_name": "Characteristic Name Uniqueness Check for UMM JSON", + "fields_to_apply": { "umm-json": [ { "fields": [ @@ -3217,7 +3224,7 @@ ] }, "severity": "warning", - "check_id": "characteristic_name_uniqueness_check" + "check_id": "characteristic_name_uniqueness_check_umm" }, "validate_ending_datetime_against_granules": { "rule_name": "Ending Datetime validation against granules", From 2feed2c6f683a8ac7993b5ed48bad4967c35425c Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 31 Mar 2022 14:23:36 -0500 Subject: [PATCH 066/261] Updated / added checks for ummg - modified online_resource_type_presence_check in rule_mapping.json - modified online_resource_url_description_check in rule_mapping.json - modified get_data_url_check_umm in rule_mapping.json - Added URL Description Uniqueness Check: rule_mapping.json - Added rule using ""check_id"": ""url_description_uniqueness_check"" checks.json - Added url_description_uniqueness_check check_messages.json - Added error message for url_description_uniqueness_check custom_validator.py - Added url_description_uniqueness_check - Added UMM-G support to README.md - Added to CHANGELOG.md --- CHANGELOG.md | 21 +++++++++++++ README.md | 2 +- pyQuARC/code/custom_validator.py | 16 ++++++++++ pyQuARC/schemas/check_messages.json | 10 +++++- pyQuARC/schemas/checks.json | 5 +++ pyQuARC/schemas/rule_mapping.json | 48 +++++++++++++++++++++++++++++ 6 files changed, 100 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5916151c..4de24f22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # CHANGELOG +## v2.0.1 +- Modified online_resource_type_presence_check in rule_mapping.json for ummg support + +- Modified online_resource_url_description_check in rule_mapping.json for ummg support + +- Modified get_data_url_check_umm in rule_mapping.json for ummg support + +- Added URL Description Uniqueness Check: +rule_mapping.json + - Added rule using ""check_id"": + ""url_description_uniqueness_check"" + + checks.json + - Added url_description_uniqueness_check + + check_messages.json + - Added error message for url_description_uniqueness_check + + custom_validator.py + - Added url_description_uniqueness_check + ## v1.1.5 - Added reader for specific columns from GCMD csvs - Fixed bug to handle cases when there are multiple entries for same shortname but the first entry has missing long name diff --git a/README.md b/README.md index 43b366cf..6e7aefd1 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The CMR is designed around its own metadata standard called the [Unified Metadat * UMM-G (Granule/File-level metadata) * UMM-S (Service metadata) -**Currently, pyQuARC only supports ECHO 10 collection-level metadata. Support for additional metadata standards will continue to be added in the coming months.** When completed, pyQuARC will support the DIF 10 (collection only), ECHO 10 (collection and granule), UMM-C and UMM-G standards. At this time, there are no plans to add ISO 19115 or UMM-S specific checks. +**Currently, pyQuARC only supports DIF 10 (collection only), ECHO 10 (collection only), and UMM-G metadata. Support for additional metadata standards will continue to be added in the coming months.** When completed, pyQuARC will support the DIF 10 (collection only), ECHO 10 (collection and granule), UMM-C and UMM-G standards. At this time, there are no plans to add ISO 19115 or UMM-S specific checks. ## Architecture diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 6afc9208..ac7d9f94 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -226,3 +226,19 @@ def get_data_url_check_umm(related_urls): "valid": False, "value": "N/A" } + + @staticmethod + @if_arg + def url_description_uniqueness_check(related_urls): + seen, duplicates = set(), set() + for url_obj in related_urls: + description = url_obj.get('Description') + if description in seen: + duplicates.add(description) + else: + seen.add(description) + + return { + "valid": not bool(duplicates), + "value": ', '.join(duplicates) + } \ No newline at end of file diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 9f34f01b..0f914061 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -830,5 +830,13 @@ "url": "" }, "remediation": "Please supply the corresponding long name for the short name." - } + }, + "url_description_uniqueness_check": { + "failure": "Duplicate URL description name/s `{}`.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a unique name for each URL description." + } } diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 25cba0aa..745701c3 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -243,5 +243,10 @@ "data_type": "custom", "check_function": "get_data_url_check_umm", "available": true + }, + "url_description_uniqueness_check": { + "data_type": "custom", + "check_function": "url_description_uniqueness_check", + "available": true } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 8e14e60b..21133360 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2822,6 +2822,13 @@ "Collection/OnlineResources/OnlineResource/Description" ] } + ], + "umm-g": [ + { + "fields":[ + "RelatedUrls/Description" + ] + } ] }, "severity": "info", @@ -3152,6 +3159,14 @@ "RelatedUrl/Url" ] } + ], + "umm-g":[ + { + "fields":[ + "RelatedUrls/Type", + "RelatedUrls/URL" + ] + } ] }, "severity": "warning", @@ -3637,6 +3652,13 @@ "RelatedUrls" ] } + ], + "umm-g": [ + { + "fields":[ + "RelatedUrls" + ] + } ] }, "severity": "error", @@ -3943,5 +3965,31 @@ ], "severity": "warning", "check_id": "controlled_keywords_check" + }, + "url_description_uniqueness_check": { + "rule_name": "URL Description Uniqueness Check", + "fields_to_apply": { + "umm-json": [ + { + "fields": [ + "RelatedUrls" + ] + }, + { + "fields": [ + "DataCenters/ContactInformation/RelatedUrls" + ] + } + ], + "umm-g":[ + { + "fields":[ + "RelatedUrls" + ] + } + ] + }, + "severity": "info", + "check_id": "url_description_uniqueness_check" } } From 953ae1cc22b96ebc83335dbe98f5f47dbcb198cf Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Fri, 1 Apr 2022 09:51:16 -0500 Subject: [PATCH 067/261] Added functionality for UMM-G checks assigned to me (except spatial extent requirement fulfillment check) --- pyQuARC/code/custom_validator.py | 125 +- pyQuARC/schemas/MimeType.csv | 2 +- pyQuARC/schemas/chronounits.csv | 2 +- pyQuARC/schemas/granuledataformat.csv | 2 +- pyQuARC/schemas/horizontalresolutionrange.csv | 2 +- pyQuARC/schemas/idnnode.csv | 2 +- pyQuARC/schemas/instruments.csv | 86 +- pyQuARC/schemas/locations.csv | 15 +- pyQuARC/schemas/platforms.csv | 2111 +++++++++-------- pyQuARC/schemas/projects.csv | 35 +- pyQuARC/schemas/providers.csv | 14 +- pyQuARC/schemas/rucontenttype.csv | 193 +- pyQuARC/schemas/rule_mapping.json | 103 +- pyQuARC/schemas/sciencekeywords.csv | 99 +- pyQuARC/schemas/temporalresolutionrange.csv | 2 +- pyQuARC/schemas/version.txt | 2 +- pyQuARC/schemas/verticalresolutionrange.csv | 2 +- 17 files changed, 1555 insertions(+), 1242 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 6afc9208..355f93e5 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -19,12 +19,8 @@ def ends_at_present_flag_logic_check( collection_state = collection_state.upper() valid = ( - value == "true" - and not (ending_date_time) or collection_state == "ACTIVE" - ) or ( - value == "false" - and ending_date_time or collection_state == "COMPLETE" - ) + value == "true" and not (ending_date_time) or collection_state == "ACTIVE" + ) or (value == "false" and ending_date_time or collection_state == "COMPLETE") return {"valid": valid, "value": ends_at_present_flag} @@ -55,52 +51,38 @@ def mime_type_check(mime_type, url_type, controlled_list): return result @staticmethod - def availability_check( - field_value, - parent_value - ): + def availability_check(field_value, parent_value): # If the parent is available, the child should be available too, else it is invalid validity = True if parent_value: if not field_value: validity = False - return { - "valid": validity, - "value": parent_value - } + return {"valid": validity, "value": parent_value} @staticmethod @if_arg def bounding_coordinate_logic_check(west, north, east, south): # Checks if the logic for coordinate values make sense - result = { - "valid": False, - "value": "" - } + result = {"valid": False, "value": ""} west = float(west) east = float(east) south = float(south) north = float(north) result["valid"] = ( - (south >= -90 and south <=90) - and - (north >= -90 and north <=90) - and - (east >= -180 and east <=180) - and - (west >= -180 and west <=180) - and - (north > south) - and - (east > west) + (south >= -90 and south <= 90) + and (north >= -90 and north <= 90) + and (east >= -180 and east <= 180) + and (west >= -180 and west <= 180) + and (north > south) + and (east > west) ) return result @staticmethod def presence_check(*field_values): """ - Checks if one of the field has a value + Checks if one of the field has a value """ # At least one of all the fields should have a value # It is basically a OneOf check @@ -112,117 +94,98 @@ def presence_check(*field_values): value = field_value validity = True - return { - "valid": validity, - "value": value - } + return {"valid": validity, "value": value} @staticmethod @if_arg def opendap_url_location_check(field_value): # The field shouldn't have a opendap url - return { - "valid": 'opendap' not in field_value.lower(), - "value": field_value - } + return {"valid": "opendap" not in field_value.lower(), "value": field_value} @staticmethod @if_arg def user_services_check(first_name, middle_name, last_name): return { "valid": not ( - first_name.lower() == 'user' and - last_name.lower() == 'services' and - (not middle_name or (middle_name.lower() == 'null')) + first_name.lower() == "user" + and last_name.lower() == "services" + and (not middle_name or (middle_name.lower() == "null")) ), - "value": f'{first_name} {middle_name} {last_name}' + "value": f"{first_name} {middle_name} {last_name}", } @staticmethod def doi_missing_reason_explanation(explanation, missing_reason, doi): return { - "valid": not((not doi) and (missing_reason) and (not explanation)), - "value": explanation + "valid": not ((not doi) and (missing_reason) and (not explanation)), + "value": explanation, } @staticmethod @if_arg def boolean_check(field_value): # Checks if the value is a boolean, basically 'true' or 'false' or their case variants - return { - "valid": field_value.lower() in ["true", "false"], - "value": field_value - } + return {"valid": field_value.lower() in ["true", "false"], "value": field_value} @staticmethod @if_arg - def collection_progress_consistency_check(collection_state, ends_at_present_flag, ending_date_time): + def collection_progress_consistency_check( + collection_state, ends_at_present_flag, ending_date_time + ): # Logic: https://github.com/NASA-IMPACT/pyQuARC/issues/61 validity = False collection_state = collection_state.upper() ending_date_time_exists = bool(ending_date_time) ends_at_present_flag_exists = bool(ends_at_present_flag) - ends_at_present_flag = str(ends_at_present_flag).lower() if ends_at_present_flag_exists else None + ends_at_present_flag = ( + str(ends_at_present_flag).lower() if ends_at_present_flag_exists else None + ) if collection_state in ["ACTIVE", "IN WORK"]: - validity = (not ending_date_time_exists) and (ends_at_present_flag == "true") + validity = (not ending_date_time_exists) and ( + ends_at_present_flag == "true" + ) elif collection_state == "COMPLETE": validity = ending_date_time_exists and ( - not ends_at_present_flag_exists or ( - ends_at_present_flag == "false" - ) + not ends_at_present_flag_exists or (ends_at_present_flag == "false") ) - - return { - "valid": validity, - "value": collection_state - } + + return {"valid": validity, "value": collection_state} @staticmethod @if_arg def characteristic_name_uniqueness_check(characteristics): seen, duplicates = set(), set() - for characteristic in characteristics['Characteristic']: - name = characteristic['Name'] + for characteristic in characteristics: + name = characteristic["Name"] if name in seen: duplicates.add(name) else: seen.add(name) - return { - "valid": not bool(duplicates), - "value": ', '.join(duplicates) - } + return {"valid": not bool(duplicates), "value": ", ".join(duplicates)} @staticmethod def get_data_url_check(metadata_json): - REQUIRED_TYPE = 'GET DATA' - related_urls = metadata_json.get('Related_URL', []) + REQUIRED_TYPE = "GET DATA" + related_urls = metadata_json.get("Related_URL", []) if not isinstance(related_urls, list): related_urls = [related_urls] validity = False value = None for url in related_urls: - if (url_type := url.get('URL_Content_Type', {}).get('Type')) and \ - url_type.upper() == REQUIRED_TYPE: + if ( + url_type := url.get("URL_Content_Type", {}).get("Type") + ) and url_type.upper() == REQUIRED_TYPE: validity = True value = url_type break - return { - "valid": validity, - "value": value - } + return {"valid": validity, "value": value} @staticmethod def get_data_url_check_umm(related_urls): for url_obj in related_urls: if url_obj.get("Type") == "GET DATA" and (url := url_obj.get("URL")): - return { - "valid": True, - "value": url - } - return { - "valid": False, - "value": "N/A" - } + return {"valid": True, "value": url} + return {"valid": False, "value": "N/A"} diff --git a/pyQuARC/schemas/MimeType.csv b/pyQuARC/schemas/MimeType.csv index 95466ef9..703295df 100644 --- a/pyQuARC/schemas/MimeType.csv +++ b/pyQuARC/schemas/MimeType.csv @@ -1,4 +1,4 @@ -"Hits: 37","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:54","Timestamp: 2021-09-27 10:25:56","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/MimeType/?format=xml""Case native" +"Hits: 37","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:23:13","Timestamp: 2022-03-28 12:29:49","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/MimeType/?format=xml","Case native" MimeType,UUID "application/gml+xml","40bdf6e5-780c-43e2-ab8e-e5dfae4bd779" "application/gzip","a8ee535a-8bc8-46fd-8b97-917bd7ea7666" diff --git a/pyQuARC/schemas/chronounits.csv b/pyQuARC/schemas/chronounits.csv index 0f8d8301..9dd06f1a 100644 --- a/pyQuARC/schemas/chronounits.csv +++ b/pyQuARC/schemas/chronounits.csv @@ -1,4 +1,4 @@ -"Hits: 184","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:36:30","Timestamp: 2021-09-30 10:00:01","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/chronounits/?format=xml""Case native" +"Hits: 184","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:20:23","Timestamp: 2022-03-28 12:29:43","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/chronounits/?format=xml","Case native" Eon,Era,Period,Epoch,Age,Sub-Age,UUID "ARCHAEAN","EOARCHEAN","","","","","8dff752e-939d-4b16-a735-bb4af8dbd785" "ARCHAEAN","MESOARCHEAN","","","","","27660bb3-982e-414c-991a-707abd861f46" diff --git a/pyQuARC/schemas/granuledataformat.csv b/pyQuARC/schemas/granuledataformat.csv index f7136a72..72975ac4 100644 --- a/pyQuARC/schemas/granuledataformat.csv +++ b/pyQuARC/schemas/granuledataformat.csv @@ -1,4 +1,4 @@ -"Hits: 118","page_num: 1","page_size: 2000","Keyword Version: 10.7","Revision: 2021-07-23 10:30:44","Timestamp: 2021-08-17 10:52:14","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/granuledataformat/?format=xml""Case native" +"Hits: 118","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:23:27","Timestamp: 2022-03-28 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/DataFormat/?format=xml","Case native" Short_Name,Long_Name,UUID "ACCDB","Microsoft Access ACCDB File Format Family","378d394c-8230-49f1-8ba0-8ee7e7abe316" "ADF","ArcInfo Binary Grid Format","81782805-cc0d-4325-8f35-aa0c8e439b16" diff --git a/pyQuARC/schemas/horizontalresolutionrange.csv b/pyQuARC/schemas/horizontalresolutionrange.csv index 1a2c649c..8f27b622 100644 --- a/pyQuARC/schemas/horizontalresolutionrange.csv +++ b/pyQuARC/schemas/horizontalresolutionrange.csv @@ -1,4 +1,4 @@ -"Hits: 15","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:31","Timestamp: 2021-09-30 15:14:16","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/horizontalresolutionrange/?format=xml""Case native" +"Hits: 15","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:50","Timestamp: 2022-03-28 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/horizontalresolutionrange/?format=xml","Case native" Horizontal_Resolution_Range,UUID "1 km - < 10 km or approximately .01 degree - < .09 degree","6dd8224f-944e-4798-ac48-44c23a567eeb" "1 meter - < 30 meters","abf43d91-a65d-4b3b-a6dd-593e211b2c7b" diff --git a/pyQuARC/schemas/idnnode.csv b/pyQuARC/schemas/idnnode.csv index bccb883a..c51e753d 100644 --- a/pyQuARC/schemas/idnnode.csv +++ b/pyQuARC/schemas/idnnode.csv @@ -1,4 +1,4 @@ -"Hits: 127","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:28","Timestamp: 2021-09-29 06:55:24","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/idnnode/?format=xml""Case native" +"Hits: 127","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:48","Timestamp: 2022-03-28 09:00:51","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/idnnode/?format=xml","Case native" Short_Name,Long_Name,UUID "ACADIS","","913d42e2-1641-4f5e-8273-379ddd3812d5" "ACE/CRC","","13381733-968f-4fd6-b70c-aac6a77b2657" diff --git a/pyQuARC/schemas/instruments.csv b/pyQuARC/schemas/instruments.csv index b63759ed..73d09d64 100644 --- a/pyQuARC/schemas/instruments.csv +++ b/pyQuARC/schemas/instruments.csv @@ -1,4 +1,4 @@ -"Keyword Version: 10.7","Revision: 2021-08-06 08:54:18","Timestamp: 2021-08-17 09:31:39","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/instruments/?format=xml""Case native" +"Keyword Version: 13.2","Revision: 2022-03-24 08:56:42","Timestamp: 2022-03-28 11:15:05","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/instruments/?format=xml","Case native" Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Altimeters","Lidar/Laser Altimeters","AIRBORNE LASER SCANNER","AIRBORNE LASER SCANNER","ff309a1a-606d-456b-82b6-5b3c182f66ff" "Earth Remote Sensing Instruments","Active Remote Sensing","Altimeters","Lidar/Laser Altimeters","ATLAS","Advanced Topographic Laser Altimeter System","b3684b4b-4f0b-48aa-8997-e3758fd04155" @@ -56,6 +56,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","CBR","C-BAND RADAR","177f6ccb-e45a-4a60-8b34-ac19bbb698d4" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","CSG-SAR","COSMO-SkyMed Second Generation Synthetic Aperture Radar","0ae11ffd-d606-4b8a-b6ec-6bdfe75a149c" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","GEOSAR","Geographic Synthetic Aperture Radar","6378c31c-75e6-47dc-b59b-87221ec46ea3" +"Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","GridRad","Gridded NEXRAD WSR-88D Radar","f23f32ff-f770-4046-941f-534014a2fcab" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","IFSAR","Interferometric Synthetic Aperture Radar","7c1508ab-b7c9-402a-9779-cd4388dcefdd" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","IMAGING RADAR SYSTEMS","Imaging Radar Systems, Real and Synthetic Aperture","9a351e42-4f5c-4d6b-b51f-152c513ad3ff" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","NOXP","X-band Polarimetric Radar","2a342947-dc41-4ea0-b0a4-ba68bb732657" @@ -64,6 +65,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","PALSAR","Phased Array type L-band Synthetic Aperture Radar","126f9ae6-20ea-4d58-9039-decb8913296d" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","PAZ-SAR","PAZ - Synthetic Aperture Radar (X-band)","474a09e5-315c-42e4-9521-36153eafb049" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","Polarimetric Radar","Polarimetric Radar","042e5575-eb33-4c45-a708-3df3555afff6" +"Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","SAOCOM-SAR","SAOCOM-Synthetic Aperture Radar","cd232e58-5c61-4d07-becf-2f2fb5af1001" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","SAR","Synthetic Aperture Radar","a37282d4-322c-4dd0-8edc-36099b9b586c" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","SENTINEL-1 C-SAR","SENTINEL-1 C-SAR","1c53d85e-3792-4081-9748-192fd3140aa6" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","SIR-A","Shuttle Imaging Radar-A","01aa7772-e06d-4772-b8c1-82210f187038" @@ -110,6 +112,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Profilers/Sounders","Lidar/Laser Sounders","LMOL","Langley Mobile Ozone Lidar","886cde36-5bca-4940-bcc6-b3c7dff788fc" "Earth Remote Sensing Instruments","Active Remote Sensing","Profilers/Sounders","Lidar/Laser Sounders","MPL","Micropulse Lidar","3b843471-ec94-434e-ac4d-1569947cdf64" "Earth Remote Sensing Instruments","Active Remote Sensing","Profilers/Sounders","Lidar/Laser Sounders","RL","Raman Lidar","3cc266de-68cd-42bf-88e6-a508869901a6" +"Earth Remote Sensing Instruments","Active Remote Sensing","Profilers/Sounders","Lidar/Laser Sounders","TOPAZ","Tunable Optical Profiler for Aerosol and oZone (TOPAZ) lidar","a71bb0e6-33ec-4cd2-82a1-0c414634614f" "Earth Remote Sensing Instruments","Active Remote Sensing","Profilers/Sounders","Lidar/Laser Sounders","UAF Profiler","University of Alaska Fairbanks Lidar Profiler","3f53531b-4c12-493a-bc9b-a65502bd62c5" "Earth Remote Sensing Instruments","Active Remote Sensing","Profilers/Sounders","Lidar/Laser Sounders","","","7c13f166-8711-4d2f-9251-4635002c6c31" "Earth Remote Sensing Instruments","Active Remote Sensing","Profilers/Sounders","Radar Sounders","ACORDS","Advanced Coherent Radar Depth Sounder","41d3528f-8029-4b1a-ae82-9279c7466219" @@ -198,11 +201,13 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","HSRL","High Spectral Resolution Lidar","8ab7e899-6854-48da-9cae-21df7539045e" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","JPL LASER HYGROMETERS","JPL LASER HYGROMETERS","fe1fa30a-adc4-4019-a176-f471e4f8f49c" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","KNOLLENBERG PROBE","KNOLLENBERG PROBE","4b99824c-39d1-4e1d-a5c7-c75baa04fb90" +"Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","KaRIn","Ka-band Radar Interferometer","e5c4d64f-fb76-40e1-84f0-d3019b70642d" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","LASER SPECTROMETER","LASER SPECTROMETER","0d45873c-9a8c-4cff-b27b-a1b0bd629cc4" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","LASE","Lidar Atmospheric Sensing Experiment","f53da431-a1cd-4151-9df9-9d82745797d0" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","LLS","Laser-Light Scattering","e605cb42-8974-4401-857e-ecd524390353" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","MPL","Micropulse Lidar","654817e8-e647-4d7b-8113-295652359e6c" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","NOAA-H2O","Closed Cell Tunable Laser Spectrometer (NOAA-H2O)","5ebada8c-1d4c-4c89-8cdd-dfe630b454db" +"Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","PALMS-NG","Particle Analysis By Laser Mass Spectrometry – Next Generation","ecbe1db3-e9d0-47bf-b29a-0e9f0e5b0d61" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","PALMS","Particle Analysis by Laser Mass Spectrometry","a211773e-5959-40dc-8b33-f7d5880d57f3" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","QC-TILDAS","Quantum Cascade Tunable Infrared Differential Absorption Spectrometer","686ad912-433c-4bc8-93d3-660f368c476c" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","RBI","Radiation Budget Instrument","de7e08db-86f1-4593-ba9e-288f9f7b063e" @@ -342,7 +347,9 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","JRE (CARMEN-3 + LPT)","CARMEN-3","CARacterization and Modeling of ENvironment-3","03d2c9e4-e102-4488-b764-bca16d5aae2b" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","JRE (CARMEN-3 + LPT)","LPT","Light Particle Telescope","b7c3f2fb-0fdd-465d-9107-f1c7369c72f2" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","JRE (CARMEN-3 + LPT)","","","4fd10be3-7cd3-4f49-810e-61924a2453a4" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","NEPHELOMETERS","RR Neph","Radiance Research Nephelometer","59c3ceea-e637-4400-a980-5eaedfa4eb91" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","NEPHELOMETERS","TSI-3562 Nephelometer","TSI-3562 Nephelometer Manufactured by TSI Inc. for Aerosol Scattering Measurement","75c9c28f-8098-46d0-ae34-01241acee7ff" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","NEPHELOMETERS","TSI-3563 Neph","TSI-3563 Nephelometer","b38b19d3-4b1b-4bf0-8dfc-7fd36e7d6f2f" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","NEPHELOMETERS","","","c39f54a3-efd0-4596-8d5b-fe7ab519d13f" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Passive Remote Sensing","CMT","China Mapping Telescope","8e7b55f3-c7ef-4f25-9c84-a75166b382c8" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Passive Remote Sensing","","","c38e16d1-61f9-4189-a3c9-33e2015db137" @@ -368,6 +375,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","TRANSMISSOMETERS","","e590b4fe-229e-4b11-9ed5-e37a2b10038a" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","","","f66daf4f-4d71-49a0-9d3d-205dc7f1faed" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","11.5um Radiometer","Nimbus 4 Temperature-Humidity Infrared Radiometer - 11.5 um","7bf9f69e-3bc7-45ad-9224-969676d36d78" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","AATS14","Ames 14-Channel Airborne Tracking Sunphotometer","a9cada11-d8b0-43ab-a017-7d1ab6a79aac" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","ALAE","Atmospheric Lyman-Alpha Emissions","b4279b96-58ea-4e69-8cb2-e0956a8a8648" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","APS GLORY","AEROSOL Polarimetry SENSOR","1a881d2e-13c0-4c7b-a27e-5fed2b5f1d40" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","CAMBOT","Continuous Airborne Mapping By Optical Translator","62da1828-7b49-454f-999a-e91c6c40dd94" @@ -377,6 +385,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","GLM","Geostationary Lightning Mapper","ec7681c4-fbcd-4c58-8f0b-5a9b59b0b56d" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","GSD","Germanium Semiconductor Detector","93687d67-fcb3-48bf-b37f-ff6722a1687f" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","HPGE","Hyperpure Germanium","4830f3e8-b4f3-4574-88d0-b52a27d52eff" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","LIF-SO2","Laser Induced Fluorescence – Sulfur Dioxide","8e4e9367-3746-46a1-9f6e-318b85dac853" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","MICROTOMOGRAPHY","","29e65a9f-41bf-4c53-bff6-98472d5f4f47" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","MINARAD RST-10","","c21aefc3-6e3d-4a92-b576-ad872e4c6de3" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","MONOCHROMATORS","","da3ff603-9639-4081-9160-4cf5309f4dd4" @@ -394,8 +403,10 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","Pleiades High Resolution","Pleiades High Resolution Optical Instrument","6c58b909-9cdc-4fed-9432-ba35940eed10" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","SBI","Solar Bolometric Imager","6fac8911-0000-4c2b-aefa-a6bcbff97805" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","SCINTILLATION COUNTERS","SCINTILLATION COUNTERS","414c48df-6fe2-4657-8a72-1b1eacb055c4" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","SHIROP","Small and High Resolution Optical Sensor (SHIROP)","85981a31-9ed9-40b4-a366-778dce75ba0e" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","SILICON PHOTODIODES","","959af52d-2698-43a2-8e8e-37f4a92c5489" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","SUNSHINE RECORDERS","","674d52b5-35a8-4f3a-8b11-28c37a893ba5" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","UASO3","NOAA UAS O3 Photometer","6c18ac4f-4750-42f0-9cfe-5652b6ff07a7" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","Visibility Sensor","Visibility Sensor","6497f9c7-d8a6-46d7-9fea-68f612b835ff" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","WSI","Whole-Sky Imager","6cd74e61-e205-49bb-9ebb-78b06db5f531" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","","","","72227178-bb4c-4ff5-98a3-f976aa3f3714" @@ -419,6 +430,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","GPS","GPSP","Global Positioning System Payload","688f088b-7ae9-45c3-abc4-cdb881a8fec3" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","GPS","GPS","Global Positioning System","e5fde4c4-15cd-4278-b922-005488df096f" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","GPS","GRAS","Global navigation satellite system Receiver for Atmospheric Sounding","69f341d1-e29f-4bb9-b3b7-27ce4533f2ad" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","GPS","IGOR","Integrated GPS Occultation Receiver","dcee7eaa-c2b6-4fe7-857d-7411828bbf3b" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","GPS","KTC","UTIG Kinematics GPS Time Coder","1c1a851e-95d2-4d8f-85f5-cf970f384038" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","GPS","NASA POS/AV","NASA Applanix POS/AV","af3d0b82-108d-4995-adb6-7f095fbc2953" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","GPS","RO","GPS Radio Occultation Receiver","4aab0210-9532-48c3-b636-c184584260b1" @@ -443,6 +455,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LASER REFLECTOR","","cf662901-ea76-459a-b8e7-1f5df16d48e4" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LASER TRACKING REFLECTOR","","36ea978b-6de3-4115-9094-87364cf1217f" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LASER TRACKING SITE","","db819ac2-b841-4885-84a1-5aa8ddaec248" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LLR","Lunar Laser Ranging","dbf63ec2-4855-4499-81a5-181dd76e4cb2" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LRA","Laser Retroreflector Array","7bf72fe4-8e07-490b-88ec-84d63a57416d" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LRR","Laser Retro-Reflector","4b941002-170e-413b-aee4-860155b891e3" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LT (SEASAT 1)","SEASAT 1 Laser Tracking","ab5ca508-7ae5-4ede-8c04-5998af821ff7" @@ -488,6 +501,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","","GYROS","","01992a08-d5a3-4eb6-8b46-7e3caa395022" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","","IPU","Instrument Processing Unit","a904ebc2-37ae-49ba-8655-f691dbb443c3" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","","NASDAT","NASA Airborne Science Data and Telemetry System","0bdff346-7b1c-496d-87c5-6cd2c3e54e90" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","","NAV420 Navigation Data","NAV420 Crossbow IMU Navigation Data","80ddee56-a14c-45be-8363-6728fc268483" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","","OPTICAL BEACON","","0d8c65c6-a8f3-4a72-a958-7aa1487a9b78" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","","PASSIVE OPTICAL TRACKING","","59725d26-d9d6-4604-b7fb-6ae0d257d373" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","","PRARE","Precise Range and Range-Rate Equipment","d3415c4b-e95a-45c4-b3a2-1d9f622ddd81" @@ -563,6 +577,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Profilers/Sounders","","MOPITT","Measurements of Pollution In The Troposphere","3d148e55-a196-4779-ad6e-71a6acb5ec92" "Earth Remote Sensing Instruments","Passive Remote Sensing","Profilers/Sounders","","MSU","Microwave Sounding Unit","e14163b0-c667-41ea-96a4-e9ce6fcfe041" "Earth Remote Sensing Instruments","Passive Remote Sensing","Profilers/Sounders","","MTP","Microwave Temperature Profiler","a4569574-019d-4b81-827b-a5d1388addde" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Profilers/Sounders","","MWHS-2","MicroWave Humidity Sounder - 2","7a5db0f9-054b-41c8-a49e-75b704d28669" "Earth Remote Sensing Instruments","Passive Remote Sensing","Profilers/Sounders","","MWHS","MicroWave Humidity Sounder","ca27055f-12d7-4445-a3b8-bbd2925af14d" "Earth Remote Sensing Instruments","Passive Remote Sensing","Profilers/Sounders","","MWTS","MicroWave Temperature Sounder","89cc57b0-0963-4266-a549-bf5a9e17446e" "Earth Remote Sensing Instruments","Passive Remote Sensing","Profilers/Sounders","","NAST-MTS","NPOESS Aircraft Microwave Temperature Sounder","229ea366-e078-42f0-8349-e5ac23bd040b" @@ -638,8 +653,8 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVHRR-2","Advanced Very High Resolution Radiometer-2","600b228b-165c-4f80-96e2-7ee2d9989680" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVHRR-3","Advanced Very High Resolution Radiometer-3","87c44e15-54c8-407d-a881-8035a2d5512b" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVHRR","Advanced Very High Resolution Radiometer","e64e83bd-02b3-4a47-830d-00e1aa4b04d3" -"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVIRIS-NG","Airborne Visible InfraRed Imaging Spectrometer - Next Generation","57854209-ce09-4dc9-90e2-5c4e1060fdad" -"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVIRIS","Airborne Visible and Infrared Imaging Spectrometer","d67afd03-3b79-419c-9289-5dde713ab904" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVIRIS-NG","Airborne Visible-Infrared Imaging Spectrometer - Next Generation","57854209-ce09-4dc9-90e2-5c4e1060fdad" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVIRIS","Airborne Visible InfraRed Imaging Spectrometer","d67afd03-3b79-419c-9289-5dde713ab904" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVNIR-2","Advanced Visible and Near-Infrared Radiometer Type 2","835fb659-6a25-44a7-8c5a-7698fe785472" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","AVNIR","Advanced Visible and Near-Infrared Radiometer","574fd149-e30a-4762-8a43-34bc2fcfdc8c" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","BA","Charge Coupled Device-based Pushbroom Aft Viewing Camera B","e827d04c-bf67-4877-91a7-b39b819d5168" @@ -657,6 +672,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","DA","Charge Coupled Device-based Pushbroom Aft Viewing Camera D","cc1e1545-49f0-4ced-aeef-b38cd02546bd" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","DF","Charge Coupled Device-based Pushbroom Fore Viewing Camera D","67f1d110-c312-492d-a18e-0726da4cd0ef" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","ECOSTRESS","ECOsystem Spaceborne Thermal Radiometer Experiment on Space Station","1138ec18-a2a5-4cff-84bc-ce5fdfe29f0a" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","EMIT Imaging Spectrometer","Earth Surface Mineral Dust Source Investigation (EMIT) Imaging Spectrometer","6ad03566-0766-4e23-bb6c-1a89bf74329b" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","ENLS","Earth Network Lightning Sensor","9d259111-dc99-4ca1-a4f3-d461c1d26636" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","ESMR","Electrically Scanning Microwave Radiometer","a943a6f3-7115-4da4-be2d-61a4ddfec5f8" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","ETM+","Enhanced Thematic Mapper Plus","4dbe7764-a2ea-4a19-b754-696c35ac3205" @@ -685,6 +701,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","HRTS","High Resolution Telescope and Spectrograph","6dd795c0-5af9-43b0-95c5-3e1ec3d1f29e" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","HRVIR","High Resolution Visible and Infrared","d1917f5c-0f50-4b7b-adb5-08cd7a6510d3" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","HRV","High Resolution Visible Imaging System","3d84cea2-1361-46fc-b0e2-eab9cc393258" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","HawkEye","HawkEye Ocean Color Sensor","9099f629-d3c9-4b6a-8468-f1c8b212d875" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","HiRAIS","High Resolution Advanced Imaging System","d7fbb6b1-1925-4a32-b399-c578435db47c" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","HiRI","High-Resolution Imager","069b927b-486b-49e2-a1c2-4508185e113f" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","IIR","Imaging Infrared Radiometer","ac3071cf-e97e-4789-ad85-d2e33e502e2a" @@ -810,7 +827,6 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Interferometers","IMG","Interferometric Monitor for Greenhouse Gases","06aac8ed-49ff-41d0-9960-f18d9cd0f0ae" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Interferometers","INTERFEROMETERS","","781660ad-1e2f-410d-b77c-6b1ed498d43d" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Interferometers","IRIS","Infrared Interferometer Spectrometer","bd05b815-2c9a-405f-86f2-fc9abb529908" -"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Interferometers","KaRIn","Ka-band Radar Interferometer","e5c4d64f-fb76-40e1-84f0-d3019b70642d" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Interferometers","MARK IV INTERFEROMETER","","29bb0fb9-dd17-48e2-b414-9b8c6f39f02a" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Interferometers","MICHELSON INTERFEROMETER","","c940ded8-8ddc-4fea-8bf7-5fb100cdf093" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Interferometers","SIRIS","Stratospheric Infrared Interferometer Spectrometer","55b35143-89d0-4c87-961e-7ded204a0d72" @@ -949,8 +965,11 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MAMS","Multispectral Mapping Atmospheric Sensor","bacafa70-2fbe-4869-98bd-ba2b4a49d5f2" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MAPS","Measurement of Air Pollution from Satellite","bc9a1191-24df-4d8c-afa7-da5948f79d20" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MASPR","Multiple-Angle Aerosol Spectrometer Probe","fd5678a0-5d76-4cde-90da-4316bf535212" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MAX-DOAS","Multiple Axis Differential Optical Absorption Spectrometer","9a5cbed4-a76f-4c8a-ab1e-dd0a13a85c0c" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MIMS","Magnetic Ion-Mass Spectrometer","c6e97a0f-910e-4402-b283-e4a985fdbf28" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MMIA","Modular Multi-Imaging Assemble","9a7c9b6b-0188-440f-a9d0-6059d0c94863" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MMRS","Multispectral Medium Resolution Scanner","3b47c92b-f424-486b-9c3a-24fa004c0b90" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","MXGS","Modular X and Gamma Ray Instrument","e14a5672-7cea-4e59-9135-bc16b2b8d1d1" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","N-MASS","Nucleation-Mode Aerosol Size Spectrometer","2ef354d6-de14-42f5-99ec-73fbc9dac4de" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","NEAR-INFRARED SPECTROMETER","NEAR-INFRARED SPECTROMETER","81ec51b3-31eb-4c2c-b196-582d29d8fbc5" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","NEMS","Nimbus-E Microwave Spectrometer","e2e6df59-5768-4c4d-a0ed-0ec040de37ce" @@ -983,6 +1002,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TANSO-FTS-2","Thermal And Near infrared Sensor for carbon Observation-Fourier Transform Spectrometer-2","da57ac0a-e5ab-47f4-996f-06c12e1a4a62" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TANSO-FTS","Thermal And Near Infrared Sensor For Carbon Observation","246e1807-5a25-4fee-8f2a-4f902c94146e" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TEAMS","Time of Flight Energy Angle Mass Spectrometer","1c527672-f2ad-4b8a-aa83-25d5abf916f4" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TEMPO","Tropospheric Emissions: Monitoring of Pollution","20b24a77-036d-46d0-9d3d-34dc924586cf" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TES","Tropospheric Emission Spectrometer","5207aaad-b875-40ed-b2cc-69c1b112fe37" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TIMS","Thermal Infrared Multispectral Scanner","1b947dd3-35e8-46a7-9dda-78789e06d767" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TMWS","TROPICS Microwave Spectrometer","32be908e-2a4f-4d38-8e32-57bc13d70861" @@ -1025,6 +1045,10 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Thermal/Radiation Detectors","","","","5440f386-8dac-4779-91a6-e610a06ab6f5" "Earth Remote Sensing Instruments","Passive Remote Sensing","","","","","4f81c61c-f100-4bc4-9664-d9b70d2f162f" "Earth Remote Sensing Instruments","","","","","","6015ef7b-f3bd-49e1-9193-cc23db566b69" +"In Situ/Laboratory Instruments","Biological Sampling","","","Biopsy","","5b96d8ad-e034-4561-acfb-b2769051e837" +"In Situ/Laboratory Instruments","Biological Sampling","","","","","06668666-32cc-4792-b1dc-26f333b85b52" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","2B Technologies NO Monitor","2B Technologies Nitric Oxide Monitor","77d3b352-f1e4-4080-b2d3-b8fc64469bdf" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","2B Technologies NO2 Converter","2B Technologies Nitrogen Dioxide Converter","ddf9bc8b-2d0f-4a22-81c8-3b045cfbfbc1" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","2B Technologies","2B Technologies Ozone Monitor","24d472f8-301f-46b8-8138-06277c30befc" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","2DS","2D-STEREO PARTICLE PROBE (2DS)","307def51-758d-4e3e-90a6-27d1603deb5b" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","4-Channel CL","4-channel Chemiluminescence Instrument for NO, NO2, NOy, and Ozone developed by NCAR","fe4fc26d-cadb-4b24-bea6-5c6654f15986" @@ -1041,12 +1065,16 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","ATHOS","Airborne Tropospheric Hydroxides Sensor","fb4c76e9-8aa8-4c4a-8346-44c8bf735633" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","AUTOANALYZER","AUTOANALYZER","79f76e22-ae42-450d-8bed-d05a800f6ea0" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","AVOCET","LI-6252 Differential Mid-Infrared Absorption of CO2 Sensor Manufactured by LI-COR Biosciences","b9caa53c-dc7d-4422-bacf-6fe5c092a7c9" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","AWAS","Advanced Whole Air Sampler","5dee7001-09d3-43b3-bf9b-b5d717f557b2" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","AWQT","Apparatus for Water Quality Test","96caaaf9-c813-4973-9491-772a7963b792" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Aerolaser AL5002","Aerolaser AL5002 CO Monitor","e6e29103-5539-4638-a561-44cee176df9e" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Aeroqual Portable Air Quality Monitor","Aeroqual Series 500 Portable Air Quality Monitor","0282628e-5b4a-41de-aec4-a7dd526b96b1" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","AutoGNI","Automatic Giant Nuclei Impactor","c9b2c34d-a96a-4c90-9b24-6fa81d4dd740" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","C-TAG","Comprehensive Thermal Desorption Aerosol Gas Chromatograph","d0a5f758-5fd9-4f04-8f2b-4dce83e7dae6" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CAFE","NASA Compact Airborne Formaldehyde Experiment","9044c133-fbd1-440c-abd9-eccc8c0fa72c" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CANOE","Compact Airborne Nitrogen diOxide Experiment","5872b98b-5357-4378-beb0-1971a222f2e9" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CAPS NO2 Analyzer","Cavity Attenuated Phase Shift Nitrogen Dioxide Analyzer","704ba472-0a31-414e-9d3d-6d1aa90335bd" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CAPS PMex Monitor","Cavity Attenuated Phase Shift Spectroscopy PMex Monitor","cfef6030-aba1-47b6-b643-e826c5b88468" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CARBON ANALYZERS","CARBON ANALYZERS","b46bf990-c49d-4302-96ee-dce3c4f96d08" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CCN","CCN Counter","7f60d215-8aea-467c-9c48-8a88d35da522" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CHN ANALYZERS","Carbon, Hydrogen, Nitrogen Analyzers","276af45e-11f4-4545-a05a-f74a8ce2612e" @@ -1059,7 +1087,9 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CPA","Charged Particle Analyzer","4b8e3b9a-ee98-41e1-94aa-263ebbd4de58" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CPC","Cloud Particle Counter","7b08ac7a-6242-4fc5-bff9-e7d0c6341555" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CRDS","Cavity Ring-Down Spectroscopy","9a61fcbd-c75f-4940-939f-6e4c7d84d643" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CairPol CairClip","CairPol CairClip O3-NO2","5d30bf16-e773-4d45-9fd9-a8e329d0c9b8" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","DIFFERENTIAL MOBILITY ANALYZERS","","d1a3d7a9-cc76-4e8a-a587-b603ef30b5c2" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","DMA","Differential Mobility Analyzer","97a23ba4-085c-4690-b29d-ce5403d7aee6" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","EGC","Electron Gas Chromatograph","0ecdd685-9996-45af-b4e7-2df074c68368" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","EQUILIBRATORS","","d8efbcb9-9ab3-4016-b7ff-6426cd0bf545" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","FIA","FLOW INJECTION ANALYSIS","424121d2-5124-4883-bdc5-b827e3408050" @@ -1076,6 +1106,8 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","GC-FID","Gas Chromatography - Flame Ionization Detector","bb7586fa-5af4-495d-ab07-4f9c4a79b1a6" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","GC-MS","Gas Chromatograph/Mass Spectrometry","3ce7f4f0-d2db-4352-8762-d88296f7aa15" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","GC-TCD","Gas Chromatography - Thermal Conductivity Detector","f54fd6d0-9705-4f45-8c78-7eaba058b1b6" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","GNI","Giant Nuclei Impactor","ec165cc6-324d-4be1-8ace-48a660a1f900" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HAL","Harvard Halogens Experiment","0364f832-b1a8-4056-b811-51d3d1fc32ed" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HAMI","Hydrocarbon Automatic Measuring Instrument","6a7f7d2d-6d6d-4bd2-b814-0f8e4df3896a" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HPLC","High-Performance Liquid Chromatograph","66caadfa-f3e1-4491-918a-5db7c07f8e19" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HTDMA","Humidified Tandem Differential Mobility Analyzer","f39b155d-7818-4812-8806-50d4d356d380" @@ -1087,10 +1119,13 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","IR CO2 ANALYZER","Infrared Carbon Dioxide Analyzer","e553e68d-bc64-4b5b-b4e5-c01cf3fc68d9" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","IRGA","Infrared Gas Analyzers","d069d617-1506-4b3c-bda2-55397c232f7f" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LACE","Lightweight Airborne Chromatograph Experiment","2c133c21-9b0a-42e6-94ac-0f148fe5aeef" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LDMA","Long Differential Mobility Analyzer","4d3ad104-c122-4fd5-bffb-c4b36e80a06d" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LEE","Low Energy Electrons","fe37b7a7-b6ca-4880-8dcf-16973cd8ecc8" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LGR CRDS","Los Gatos Research Cavity Ringdown Spectroscopy","5d366681-ae43-40ed-b802-b3732047ea32" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LGR","Los Gatos Research CO/CO2/H2O Analyzer","e4f6292b-6823-48b9-85ef-df8e7f911c6e" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LI-6252","LI-6252 CO2 Analyzer","f425ddec-c609-4f95-b098-88bfe59761a1" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LI-7500","LI-7500 CO2/H2O Analyzer","e68eb86c-dea0-4759-a566-45e066cce86f" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LI-7700","LI-7700 Open Path CH4 Analyzer","a225b9d4-8b00-48e1-98e1-68e274cf2ec3" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LICOR GAS EXCHANGE SYSTEM","LICOR GAS EXCHANGE SYSTEM","f1cabbcf-e278-49a1-8c6f-2ee656e9a914" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LICOR SOIL GAS CHAMBER","LICOR SOIL GAS CHAMBER","f6fd5d33-b69c-4e75-9f97-be980d8f2d1b" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","LIQUID CHROMATOGRAPHS","LIQUID CHROMATOGRAPHS","950f43fd-6ae5-4843-92b4-90777ae8f0be" @@ -1099,8 +1134,10 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","MERCURY ANALYZERS","","5b02f9eb-6261-43c4-b403-25a4aa289e37" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","MetOne BAM 1020","MetOne BAM 1020 Continuous Particulate Monitor","8b176d9b-4831-44a7-bec2-516ec9246f5b" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","MetOne BC 1050 Black Carbon Monitors","Met one Instruments, Inc. BC 1050 Series Black Carbon Monitors","46a21779-809f-43db-b196-f98af4f21e03" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","N2O/CO QC Laser-Based Sensor","N2O/CO Quantum Cascade-Laser-Based Sensor","59fedd43-22bd-4325-bf4b-6b7127d2eb26" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","NDIR GAS ANALYZER","Nondispersive Infrared Gas Analyzer","2b2d61c1-30be-429d-8bc3-9ca8b81b4400" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","NEUTRON MONITORS","","4ee25aa6-e372-49db-8d5a-b9e1ccf76668" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","NH3 QC Laser-Based Sensor","NH3 Quantum Cascade-Laser-Based Sensor","c922a16e-a29b-4d0a-8fda-5015767bee37" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","NM BARE","Bare neutron monitor (lead-free)","27d770a5-fd5d-4eca-a1a3-285ed5f35ac2" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","NOAMI","Nitrogen Oxide Automatic Measuring Instrument","1fa24892-32e0-4c93-a6bf-23dc79301674" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","OAMI","Oxidants Automatic Measuring Instrument","43bf80b9-854e-4e21-b36b-6b66f1f27687" @@ -1127,13 +1164,16 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","PMS","Particle Measuring System","9fb77604-82f9-4ad1-9995-c0a99df09629" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","POM","Personal Ozone Monitor","a5a12839-2d5b-45c5-aee9-23b3a0da75ce" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","POROMETER","POROMETER","e0882651-d7f3-4a49-bce4-db48d7228875" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Picarro G1301-m","Picarro G1301-m Analyzer","b64520ad-868a-4382-babf-4a2dcee18b2c" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Picarro G2201-i","Picarro G2201-I Isotopic Analyzer for CO2 and CH4","fda182c2-f37b-4877-b4d3-b1570445f4e5" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Picarro G2301-m","Picarro G2301-m CH4, CO2, H2O Instrument","68530a96-9976-45c2-b8ea-80661bec7531" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Picarro G2401","Picarro G2401 Gas Concentration Analyzer","bd9406f1-2e9d-4823-8437-0bc479edd516" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","ROCK-EVAL IV","Rock-Eval 6 Analyzer","7f96c0f8-d032-4055-95e6-2dcb4f3cc045" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","ROZE","Rapid Ozone Experiment","78de14ea-63ce-4555-8aa1-2fa61b3d12aa" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","RPA","Retarding Potential Analyzer","6b018752-d66e-46d7-8fe7-76aa2c8e2e13" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SAMI","SO2 Automatic Measuring Instrument","25f8d5c2-1a32-4453-9421-65c5d9d3d114" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SFM","Spectrofluorometer","d57eaaed-a3e4-4d41-8fce-48ebaff1d5df" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SID","Small Ice Detector","96cc340b-7899-4f22-9229-7a7cb72a741e" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SMPS","Scanning Mobility Particle Sizer","ad863cd5-c697-4221-9280-31ac395e80c6" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SOMMA","Single Operator Multiparameter Metabolic Analyzer","bfc1ba63-1ad4-43a1-9afc-0caa8b06cf89" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SOPA","Synchronous Orbit Particle Analyzer","67e485bb-e086-4fd1-9f04-519d13a51476" @@ -1142,14 +1182,23 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SSIES","Ion Scintallation Monitor","e5e172d6-34e8-4cf7-8734-e5dbe487794f" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","STRIPPING VOLTAMMETRY","","e83fdef6-eca3-4ce2-b3b3-8e92c385836b" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","SWMS","Surface Water Monitoring System","276edf98-202b-4ebc-b1e0-8deb61614d51" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TDMA","Tandem Differential Mobility Analyzer","fae09965-8500-4041-b2c8-fc9ada6c4682" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TECO 43C","TECO Model 43C SO2 Analyzer","afe02b53-4cf2-42b6-b4a7-e0cf6c165314" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TECO 49","TECO Series 49 Ozone Analyzer","6a5c214f-a303-4c54-bd0d-068f236f0aa9" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TEOM Monitor Series 1400ab","Continuous Ambient Particulate TEOM Monitor, Series 1400 ab","3cd4f43e-c1dd-42b2-8391-07e0448b3375" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TOGA","Trace Organic Gas Analyzer","6684e131-f3d0-4db9-8efc-1e19083b9e2a" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TOTCAP","Tropospheric Ozone and Tracers from Commercial Aircraft Platforms","5f22a292-3c44-416a-ab29-fa9bfabb906b" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI APS-3321","TSI Aerodynamic Particle Sizer Model 3321","c8b31982-b01f-4fec-8b0b-87f3ce442dbd" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI CPC-3010","TSI Condensation Particle Counter 3010 Manufactured by TSI Inc.","664b4f38-b657-42de-9e76-f300805b02ac" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI CPC-3025","TSI Condensation Particle Counter 3025 Manufactured by TSI Inc.","3e507cc0-d6a2-4bd5-9598-70956268e9aa" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI DustTrak","TSI DustTrak Aerosol Monitor","2c5970fb-69a7-4701-a271-b4b211ed476b" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Teledyne API Model T200 NO/NO2/NOx Analyzer","Teledyne API Model T200 Chemiluminescence NO/NO2/NOx Analyzer","1dac4e61-317d-4b47-af7a-b2752fab93a9" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Teledyne API Model T200U NO/NO2/NOx Analyzer","","249c9a6c-fb7f-438d-bc19-8601eeb6f5c1" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Teledyne API Model T200UP NO-NO2 Analyzer","Teledyne API Model T200UP Trace-level Photolytic NO-NO2 Analyzer","4a494522-0412-4678-9723-f519144e5a8b" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Teledyne API Model T265 O3 Analyzer","Teledyne API Model T265 Chemiluminescence O3 Analyzer","bfd5ebc3-94d4-4f27-89da-1f549ae0ab0d" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Teledyne API Ozone Analyzer","Teledyne Advanced Pollution Instrumentation Model T400 Ozone Analyzer","e3138794-28ef-4a40-aa53-7bc7a4d74061" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Thermo Model 42C NO-NO2-NOx Analyzer","Thermo Model 42C NO-NO2-NOx Chemiluminescent Gas Analyzer","5c58254b-1ee5-45ce-ac92-ca8bb366778e" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Thermo Model 49C O3 Analyzer","Thermo Model 49C Ozone Analyzer","b3ef4e0e-f30f-434a-9247-7825d1a4e41a" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Thermo Scientific CO Analyzer","Thermo Scientific Model 48i-TLE Enhanced Trace Level CO Analyzer","dce07da6-0bd2-4b0e-b6dc-029798ff0ceb" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Thermo Scientific NO-NO2-NOx Analyzer","Thermo Scientific Model 42i NO-NO2-NOx Analyzer","f746495b-4fe2-4d63-b77a-b4ea5cc7f3e1" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Thermo Scientific NOx Analyzer","Thermo Scientific Model 42i-TL Trace Level NOx Analyzer","3040fb00-4d90-4d4c-928f-e0df5d91217c" @@ -1162,6 +1211,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","UCN","Ultrafine Condensation Nucleus Counter","e3f31009-e95d-411f-b5ce-2e17e5905ac5" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","UHSAS","Ultra-High Sensitivity Aerosol Spectrometer","6bbff5f7-727a-4c21-b322-2c2ff16aca8d" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","URG-9000D AIM","URG-9000D Ambient Ion Monitor","3433869d-37b6-4dd8-b618-614979bf6f2e" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","VIPS","Video Ice Particle Sampler","cfbfe9fe-e54d-4bfd-aa56-f1953575f132" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","WAS","Whole Air Sampler","ca207c43-257d-459f-98e4-0f93e7105dc2" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","WVISO","Water Vapor Isotopic Analyzer","fbdeb76e-eb59-44dc-a34c-7fdf196ae887" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","","","3d25724b-832f-4a61-b0b2-4f2ccecdba94" @@ -1191,6 +1241,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Current/Wind Meters","","","GEK","Geomagnetic Electrokinetographs","97b25e4d-360c-41df-988b-00dd8052493d" "In Situ/Laboratory Instruments","Current/Wind Meters","","","GUST PROBES","GUST PROBES","c6bb1bff-9420-42ca-b087-91225fbf6c3a" "In Situ/Laboratory Instruments","Current/Wind Meters","","","PTGA","Propeller Type Generating Anemovane","f21d5bb6-ae5b-4842-b1e4-f552b80aa4c0" +"In Situ/Laboratory Instruments","Current/Wind Meters","","","RM Young 05103 Wind Monitor","RM Young Model 05103 Wind Monitor","8d850e78-621b-4dfe-bb4d-f1e8338921a3" "In Situ/Laboratory Instruments","Current/Wind Meters","","","SONIC ANEMOMETER","SONIC ANEMOMETER","46a263bf-4448-421f-be9d-7628f3d03490" "In Situ/Laboratory Instruments","Current/Wind Meters","","","TAMMS","Turbulent Air Motion Measurement System (TAMMS)","48f3dfd2-bd42-4731-a9d1-fd58eb98e7bf" "In Situ/Laboratory Instruments","Current/Wind Meters","","","WIND MONITOR","WIND MONITOR","e892b190-f905-48b0-8331-7d578e250467" @@ -1229,6 +1280,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Gauges","","","SPRING BALANCE","SPRING BALANCE","2e22804e-4100-4129-b239-b91be5b21fc3" "In Situ/Laboratory Instruments","Gauges","","","STRAIN GAUGE WHEATSTONE BRIDGE","","59819689-d637-4468-a9e6-a6123190c61a" "In Situ/Laboratory Instruments","Gauges","","","STREAM GAUGES","STREAM GAUGES","9bd0a7b8-bb67-4b44-b2bc-cf975f93ea10" +"In Situ/Laboratory Instruments","Gauges","","","TE525 Rain Gauge","TE525 Tipping Bucket Rain Gauge","4d3f2ff0-4f79-4ea8-b746-3fbcdd76f1f2" "In Situ/Laboratory Instruments","Gauges","","","TEOM","Tapered Element Oscillating Microbalance","5443ac3e-5066-4a89-a973-93b345c91947" "In Situ/Laboratory Instruments","Gauges","","","TIDE GAUGES","TIDE GAUGES","0595fdeb-9d82-49c0-a987-ff3892117cbd" "In Situ/Laboratory Instruments","Gauges","","","TRETYAKOV GAUGE","Tretyakov precipitation gauge","d67b2277-d13a-4241-b0ec-a7e882628c2c" @@ -1261,6 +1313,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Photon/Optical Detectors","Cameras","","","","69675373-ef6e-4f2d-8847-a0f499e29a15" "In Situ/Laboratory Instruments","Photon/Optical Detectors","","","A2 Photonic_WISe","2 Photonic WISe - Snow liquid water content sensor","37513c7c-ae36-4391-90db-6a8fa08ee478" "In Situ/Laboratory Instruments","Photon/Optical Detectors","","","AirHARP","Airborne Hyper-Angular Rainbow Polarimeter","b989ab29-6f44-4ae0-ae82-6f10a34682f7" +"In Situ/Laboratory Instruments","Photon/Optical Detectors","","","BIG EYE BINOCULARS","","b3ecc166-16d5-4144-b23f-49ba59813b72" "In Situ/Laboratory Instruments","Photon/Optical Detectors","","","BINOCULAR","BINOCULAR","e9ba8850-f934-46bc-a1ce-744179a38812" "In Situ/Laboratory Instruments","Photon/Optical Detectors","","","DENSIOMETERS","DENSIOMETERS","684edd3f-3378-440e-9b8b-2e7c421741da" "In Situ/Laboratory Instruments","Photon/Optical Detectors","","","DIHM","Digital Inline Holographic Microscopy","396006e9-23ac-48f9-be9f-41cde27f9bbc" @@ -1301,6 +1354,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Pressure/Height Meters","","","APS","Air Pressure Sensor","825fecfb-6ffb-42bd-a8c4-688427317f65" "In Situ/Laboratory Instruments","Pressure/Height Meters","","","BAROMETERS","BAROMETERS","0bf12743-3ab8-4be7-9b48-b565723ed0ad" "In Situ/Laboratory Instruments","Pressure/Height Meters","","","CLINOMETERS","CLINOMETERS","c33cf00b-b168-4e6a-b004-62e50ff09091" +"In Situ/Laboratory Instruments","Pressure/Height Meters","","","CS100 Barometric Pressure Sensor","Campbell Scientific CS100 Barometric Pressure Sensor","4ee1d597-41e4-4e44-bc80-66b4b7c8d86b" "In Situ/Laboratory Instruments","Pressure/Height Meters","","","Campbell Scientific CS106","Campbell Scientific CS106 Barometer","c4863fbd-06dd-4465-9217-d044e5c27a5d" "In Situ/Laboratory Instruments","Pressure/Height Meters","","","DPG","DIFFERENTIAL PRESSURE GAUGE","39feceb3-722b-4ddb-935b-0c0e6e80410e" "In Situ/Laboratory Instruments","Pressure/Height Meters","","","ICE STRESS SENSORS","","fd08b891-2d9f-4c30-a07e-5c618561a79a" @@ -1336,6 +1390,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Probes","","","ELECTRON MICROPROBES","","ff2d6f74-959c-42f2-9905-dd942fd80598" "In Situ/Laboratory Instruments","Probes","","","FCDP","FAST CLOUD DROPLET PROBE (FCDP)","cfc9cb35-d637-4e78-b1e0-680dedb9beed" "In Situ/Laboratory Instruments","Probes","","","FFSSP","Fast Forward Scattering Spectrometer Probe","6f3d675e-b046-455f-b2bd-04cfbe7ce652" +"In Situ/Laboratory Instruments","Probes","","","HMP45C Temperature and Relative Humidity Probe","Campbell Scientific Model HMP45C Temperature and Relative Humidity Probe","a0653fd1-089e-4d1b-8b7d-b050a005a0d6" "In Situ/Laboratory Instruments","Probes","","","Hotwire LWC","Hotwire Liquid Water Content Sensor","2cbb3280-a541-4e17-b0c0-3583ba06a030" "In Situ/Laboratory Instruments","Probes","","","ION MICROPROBES","","9a0c4ba6-bce4-4f00-8b00-6940a4651e18" "In Situ/Laboratory Instruments","Probes","","","MAGNAPROBE","MagnaProbe","99b75b86-1e64-4d48-a01f-aa0cc855a4ae" @@ -1511,8 +1566,11 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Samplers","Trawls/Nets","","","","eceec9a6-1311-4028-8433-1f6d21b62d4d" "In Situ/Laboratory Instruments","Samplers","","","BEDLOAD SENSORS","","a3dda022-2254-4ec5-9ce5-99d65060cc2f" "In Situ/Laboratory Instruments","Samplers","","","CUFES","Continuous Underway Fish Egg Sampling System","86b43d3e-92bb-436b-9d56-a5de4ac23ef1" +"In Situ/Laboratory Instruments","Samplers","","","Capture Mark Recapture","","5c3e8902-90e1-48bd-8e94-ea0c6579d5cc" "In Situ/Laboratory Instruments","Samplers","","","DREDGING DEVICES","DREDGING DEVICES","96471be4-6078-477d-8e66-c02b92f594d4" +"In Situ/Laboratory Instruments","Samplers","","","Distance Sampling","","092cad6c-758d-4d0b-b615-615fc42e08b5" "In Situ/Laboratory Instruments","Samplers","","","ELECTROFISHING","","6c7c9336-4cb9-45a5-a949-c5ee562106d0" +"In Situ/Laboratory Instruments","Samplers","","","Event","","67a21bdb-2f92-4692-96e7-6a27e95f8c55" "In Situ/Laboratory Instruments","Samplers","","","FSI","Filter Sampling Instrument","3a277594-15de-4795-b057-35a918e1c12a" "In Situ/Laboratory Instruments","Samplers","","","GRANULOMETRIC SIEVES","","734709ce-2a7a-4160-8cb3-a3c7e0bc164d" "In Situ/Laboratory Instruments","Samplers","","","HVAS","High Volume Air Sampler","7a53aaf4-249e-4747-a5a3-47e037d2885d" @@ -1520,11 +1578,15 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Samplers","","","HVPS","High Volume Particle Sampler","66fd83d4-5315-42b3-a9fc-3e1bb6222c79" "In Situ/Laboratory Instruments","Samplers","","","KEMMERER SAMPLER","","983f115b-4f2a-44c6-9737-101377f44fb2" "In Situ/Laboratory Instruments","Samplers","","","KOPRI Unit","","af479639-68a7-436c-b57d-11771971a7be" +"In Situ/Laboratory Instruments","Samplers","","","Line Transect Sampling","","f3d76a99-1e2d-4acd-b6b2-c7185a20cfc7" "In Situ/Laboratory Instruments","Samplers","","","PILS/IC","Particle-IntBMI Particle-Into-Liquid Sampler Manufactured by Brechtel and ICS-3000 Ion Chromatography System Manufactured by Thermo Scientific Dionexo-Liquid Sample","b8fe9845-4ae5-44e3-bebf-64128c268df5" +"In Situ/Laboratory Instruments","Samplers","","","PILS/WSOC","Particle-Into-Liquid-Sampler Water-Soluble Organic Carbon","e2faf041-a3c6-4013-9134-970183e4775f" "In Situ/Laboratory Instruments","Samplers","","","PISTON SAMPLERS","","8d27ab4d-00ee-4403-aa04-a89e74d3f24a" +"In Situ/Laboratory Instruments","Samplers","","","Photo-Identification Techniques","","a9b6ed7f-2e26-4749-98f0-b3617451192b" "In Situ/Laboratory Instruments","Samplers","","","QUADRATS","QUADRATS","1474e6ed-cce2-4f24-980a-68f03eda0194" "In Situ/Laboratory Instruments","Samplers","","","STS","Step Sampler","a1135cb4-a824-4e32-b5b1-7c0633d5f817" "In Situ/Laboratory Instruments","Samplers","","","SWE Sampler","","abefe108-1df7-40ee-bab4-51218ba6bbf9" +"In Situ/Laboratory Instruments","Samplers","","","UC Davis RDI","UC Davis Rotating Drum Impactor","2a0d8278-77c0-4c24-ac87-58d5ac82e338" "In Situ/Laboratory Instruments","Samplers","","","WET/DRY PRECIPITATION SAMPLERS","","77f6de85-0628-4659-bfe1-9172ba7b19ef" "In Situ/Laboratory Instruments","Samplers","","","WWS","Whole Water Sampler","bb18f75e-6305-4be3-b12e-27aeef7d3fe5" "In Situ/Laboratory Instruments","Samplers","","","","","78c70202-ab05-40d6-90db-563be2a8dc90" @@ -1540,8 +1602,10 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","CFA","COLOR FILTER ARRAY","dc3731dc-f7bd-420b-a311-592f8836f462" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","CHEMILUMINESCENCE","CHEMILUMINESCENCE","8f04fca0-2c0a-4265-8590-219d5c24e5b0" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","CIT-ToF-CIMS","Chemical Ionization Time-of-Flight Mass Spectrometer","8936f1d7-6fee-4a67-8c64-661eb8c836e1" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","COBALT","Carbon monOxide by Attenuated Laser Transmission","2dc3e6d6-e0ac-40ba-a82e-d886426a40bd" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","COLORIMETERS","COLORIMETERS","69ccced6-f07e-4225-b1a0-fea6720a9ee8" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","DACOM","Differential Absorption CO, CH4, N2O Measurements","534d85ff-0437-455e-b45b-fe3038aef23b" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","DPOPS","DCOTSS Portable Optical Particle Spectrometer","16237051-45ba-458f-99c2-18d4a8940630" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","FIMS","Fast Integrated Mobility Spectrometer","d37362b4-6ebd-4494-b5fe-d2cc549a7fdf" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","FPDR-PDI","Flight Probe Dual Range Phase Doppler Interferometer","80493fab-ac58-4bc4-bd63-7da014e81b00" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","GC-EI-TOF","Gas Chromatography Electron Impact Mass Spectrometer","6594cfe7-b40d-4f91-b9e7-dd90b74d22f8" @@ -1549,6 +1613,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","GeoTASO","Geostationary Trace gas and Aerosol Sensor Optimization","81b0950f-2be5-44c2-8fa5-348a6da42326" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","GroundMSPI","Ground-Based Multiangle SpectroPolarimetric Imager","fe7b2ae5-ac9c-497c-9678-f37f13b14ed9" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","HAMSTRAD","H2O ANTARCTICA MICROWAVE STRATOSPHERIC AND TROPOSPHERIC RADIOMETER","d3a60685-20f2-4258-80ff-e5de153f2da7" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","HOxCIMS","HOx Chemical Ionization Mass Spectrometer","27f6b649-91b4-40ac-b505-29ee0fe73ee9" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","HR-2014i","","fd8d30cf-1e2b-41e9-bb4e-ba5063bc7d9d" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","HSRL-2","","abdf08cd-03c5-4497-87a4-65493584e2c7" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","ICP-ES","INDUCTIVELY COUPLED PLASMA EMISSION SPECTROSCOPY","d43d3993-bee5-4b6f-9d28-68eb72f125ac" @@ -1557,7 +1622,10 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","LA-ICP-MS","Laser Ablation Inductively Coupled Plasma Mass Spectrometer","3e3d658f-1326-42b4-b3a8-3f897a8a2a42" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","MASS SPECTROMETERS","MASS SPECTROMETERS","09c35c61-d1ed-4591-b4d5-c539a2a0aec2" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","MC-ICP-MS","Multi Collector Inductively Coupled Plasma Mass Spectrometers","7f7ff5dd-5dd0-4e48-a9da-cc9d93418ef8" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","MFR-7","Multifilter Rotating Shadowband Radiometer","45baca7f-18fc-4811-8fd9-015c395e0300" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","NET RADIOMETERS","NET RADIOMETERS","aa0f2b35-e7f2-47fe-a782-6c8040d5eb57" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","NMASS II","Nuclei-Mode Aerosol Size Spectrometer II","b2f03a5a-056d-44c9-af48-b0e46a1b94fb" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","NOxyO3","NCAR NOxyO3","7b33ab96-9749-4f6d-bbb2-f889bb5ec52c" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","OPTSPEC","Optical Spectrometer","55facbdc-d4ed-4ee2-a74d-911b084c8ff8" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","PARTICLE SPECTROMETERS","","d87a2454-21ba-4218-a50a-33ddc9ec31c5" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","POSSSUM","Profiler Of Snow Specific Surface area Using SWIR reflectance Measurement","9bfce406-fc85-473e-b40a-2764c6a95371" @@ -1569,6 +1637,9 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","SKY-RADIOMETER","","6bf351aa-7aad-4c9a-b2f5-b47bfe27f530" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","SpEx","Spectral Aerosol Extinction","337c284f-3158-48e5-8050-5d2744ba77a7" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","TD-GC-MS","Thermal Desoprtion Gas Chromatograph Mass Spectrometer","195f7965-459d-49e4-aad1-b1f23fa035da" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","TSI EEPS","TSI Engine Exhaust Particle Sizer Spectrometer","cbaf0199-e56a-4cc3-8792-c6b6abbd6719" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","ToF-AMS","Time-of-Flight Aerosol Mass Spectrometer","2c6e3d44-097d-4a23-bd8f-20f42f1c345c" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","UC Davis CRD-PAS","UC Davis Cavity Ringdown-Photoacoustic Spectrometer","50faf9d8-2f49-4d23-827b-1706d665555d" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","WISPER","Water Isotope Spectrometer for Precipitation and Entrainment Research","39745f6d-fb59-4343-8060-5b391ce6e3be" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","XRF","X-Ray Fluorescence Spectrometer","665b8764-0c0a-4df7-96f1-4ddae0c6de18" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","","","ecd58f82-8f96-45e1-9547-dd4a02291bd9" @@ -1577,10 +1648,13 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hydrometers","","","","c848a856-6210-47c4-b8e3-97427f04a035" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hydrothermographs","","HYGROTHERMOGRAPHS","","c0293996-1fd5-46c1-a6e3-14beaefd8ad2" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hydrothermographs","","","","f82756a9-2df8-4dd3-96be-c2cecd5fc1fb" +"In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","FISH","Fast In-situ Stratospheric Hygrometer","ab3a6b71-992e-4f21-a383-950c24549214" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","FPH","Lyman-Alpha Total Water","46a7ac7c-61e2-42d2-bffb-a55b306eefe8" +"In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","HWV","Harvard Water Vapor","6f6b44a3-9bf6-498c-a4dd-4f2b6d0d498e" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","HYGROMETERS","","8a22fea1-f43e-4147-abca-13e44016a483" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","LASER HYGROMETERS","","1f440b16-46d6-4088-9430-73d7bf9a4c84" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","LYMAN-ALPHA HYGROMETER","","667219fb-9061-40cf-933e-fd5d81272581" +"In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","ULH","Unmanned Aerial System Laser Hygrometer","94358f5c-bb25-4c11-8131-466bec38e7ff" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","","","2ac83116-414b-44ce-a075-eb65f42e8232" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hypsometers","","HYPSOMETERS","","47085051-bcbe-4789-89a2-d2c7ed6b3f91" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hypsometers","","","","bc0c1807-5f6e-4e96-a9e2-99bfafef5ebc" @@ -1784,6 +1858,8 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Solar/Space Observing Instruments","Photon/Optical Detectors","","","VAE","Visible Airglow Photometer","0883dd32-8449-4e0a-8202-7f1437b01487" "Solar/Space Observing Instruments","Photon/Optical Detectors","","","XPS","XUV Photometer System","f1be03db-82e3-42a2-a763-3a6331aac9a8" "Solar/Space Observing Instruments","Photon/Optical Detectors","","","","","386ea533-9d98-4202-bad3-bb630ac39a93" +"Solar/Space Observing Instruments","Radio Wave Detectors","VLBI","","Quasars","","46bdd77f-96e9-4931-a1d5-cd8ef94a83b3" +"Solar/Space Observing Instruments","Radio Wave Detectors","VLBI","","","","b1168d43-61e3-4f14-abbd-dac7318a9324" "Solar/Space Observing Instruments","Radio Wave Detectors","","","BROADBEAM RIOMETERS","","520ebc89-b977-4502-a2c8-e7ca07a55b19" "Solar/Space Observing Instruments","Radio Wave Detectors","","","IMAGING RIOMETERS","","cee2f3d6-09c8-4528-82b2-12fea55c7d50" "Solar/Space Observing Instruments","Radio Wave Detectors","","","RADIO TELESCOPES","","35262ef6-69c8-4f7b-9191-808b8687a40d" @@ -1793,7 +1869,6 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Solar/Space Observing Instruments","Radio Wave Detectors","","","URAP","Unified Radio and Plasma Wave Experiment (Ulysses)","f00b008b-005a-4d1f-891b-a71cb4f53729" "Solar/Space Observing Instruments","Radio Wave Detectors","","","VIRGO","Variability of Solar Irradiance and Gravity Oscillations","114fda2d-b98c-4ee7-920c-b72b33a27fd0" "Solar/Space Observing Instruments","Radio Wave Detectors","","","VLA","The Very Large Array","d8b6c727-ccd1-407d-9751-95b94136b510" -"Solar/Space Observing Instruments","Radio Wave Detectors","","","VLBI","Very Long Baseline Interferometry","b1168d43-61e3-4f14-abbd-dac7318a9324" "Solar/Space Observing Instruments","Radio Wave Detectors","","","WAVES","Radio and Plasma Wave Investigation","097dc475-d0f6-464c-bc41-bb14bc9e826a" "Solar/Space Observing Instruments","Radio Wave Detectors","","","","","d8fc8d90-89b6-49c8-aeb7-c45afb8963d8" "Solar/Space Observing Instruments","Ultraviolet Instruments","","","CDS","Coronal Diagnostics Spectrometer","142f1d91-1109-4609-9c63-29d39a2380d2" @@ -1820,6 +1895,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Solar/Space Observing Instruments","Ultraviolet Instruments","","","SUMER","Solar Ultraviolet Measurements of Emitted Radiation","f1749036-bc8a-4464-9ca8-eb3a8403aa6c" "Solar/Space Observing Instruments","Ultraviolet Instruments","","","SUSIM","Solar Ultraviolet Spectral Irradiance Monitor","2cc08952-176e-40bb-9c41-e4c3b39c9987" "Solar/Space Observing Instruments","Ultraviolet Instruments","","","SUVI-GOESR","Solar Ultraviolet Imager on GOES-R Series","5d2207f2-9a8e-42fd-a3d5-68e03bf836fb" +"Solar/Space Observing Instruments","Ultraviolet Instruments","","","Thermal Radiation Experiment","","5475ab0a-4c92-495d-a071-b86b6e7df49f" "Solar/Space Observing Instruments","Ultraviolet Instruments","","","UVCS","Ultraviolet Coronograph Spectrometer","4ce416b7-b6bb-475e-86c1-f7f76cb670b6" "Solar/Space Observing Instruments","Ultraviolet Instruments","","","UVIC","UV Ion Chamber","c08833fc-c16a-4a35-bb4a-d8716865b196" "Solar/Space Observing Instruments","Ultraviolet Instruments","","","UVI","UltraViolet Imager (Polar)","2f629cf9-ed89-4a7e-b35c-99f3142ba356" diff --git a/pyQuARC/schemas/locations.csv b/pyQuARC/schemas/locations.csv index 7540e1cf..22d9fb78 100644 --- a/pyQuARC/schemas/locations.csv +++ b/pyQuARC/schemas/locations.csv @@ -1,4 +1,4 @@ -"Keyword Version: 10.7","Revision: 2021-07-23 10:26:34","Timestamp: 2021-08-17 10:52:08","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/locations/?format=xml""Case native" +"Keyword Version: 13.2","Revision: 2022-03-18 16:20:26","Timestamp: 2022-03-28 13:19:26","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/locations/?format=xml","Case native" Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location_Subregion3,UUID "CONTINENT","AFRICA","CENTRAL AFRICA","ANGOLA","","9b0a194d-d617-4fed-9625-df176319892d" "CONTINENT","AFRICA","CENTRAL AFRICA","CAMEROON","","a028edce-a3d9-4a16-a8c7-d2cb12d3a318" @@ -9,7 +9,6 @@ Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location "CONTINENT","AFRICA","CENTRAL AFRICA","EQUATORIAL GUINEA","","3b515cd8-bc42-4fab-9990-df3be2817938" "CONTINENT","AFRICA","CENTRAL AFRICA","GABON","","864e3511-3326-4b8f-a534-1a8945fcc3eb" "CONTINENT","AFRICA","CENTRAL AFRICA","LAKE CHAD","","a1810ec4-2d03-4d98-b049-2cad380fb789" -"CONTINENT","AFRICA","CENTRAL AFRICA","ZAIRE","","7848d9b7-a18d-4519-bec3-b4f5fe19a68f" "CONTINENT","AFRICA","CENTRAL AFRICA","","","f2ffbe58-8792-413b-805b-3e1c8de1c6ff" "CONTINENT","AFRICA","EASTERN AFRICA","BURUNDI","","e5965e59-3d33-4bab-9220-688c12154702" "CONTINENT","AFRICA","EASTERN AFRICA","DJIBOUTI","","75dc417f-5bdc-441b-bfa9-8a31a03598d6" @@ -37,10 +36,10 @@ Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location "CONTINENT","AFRICA","NORTHERN AFRICA","TUNISIA","","434da207-97f4-4bb5-9550-40b0237f0a3f" "CONTINENT","AFRICA","NORTHERN AFRICA","","","f8ea9f90-eb85-42b0-8d30-93e2bdca16ef" "CONTINENT","AFRICA","SOUTHERN AFRICA","BOTSWANA","","444367b0-aa47-4d8b-94d7-41f7d69d2738" +"CONTINENT","AFRICA","SOUTHERN AFRICA","ESWATINI","","0dd6b942-de19-4712-bd1d-aa301f0ee965" "CONTINENT","AFRICA","SOUTHERN AFRICA","LESOTHO","","96c2b110-5d8b-425b-a5e5-7066e6c7b52e" "CONTINENT","AFRICA","SOUTHERN AFRICA","NAMIBIA","","a827feaf-9926-4a4d-b21f-dc044524b2b5" "CONTINENT","AFRICA","SOUTHERN AFRICA","SOUTH AFRICA","","fb6d9fe3-10b5-4a75-be97-521d4058a4a9" -"CONTINENT","AFRICA","SOUTHERN AFRICA","SWAZILAND","","0dd6b942-de19-4712-bd1d-aa301f0ee965" "CONTINENT","AFRICA","SOUTHERN AFRICA","","","7147d041-d762-4475-8762-3b00d49ba9a7" "CONTINENT","AFRICA","WESTERN AFRICA","BENIN","","05d03731-d997-49d9-bfa3-6221d9e5bdeb" "CONTINENT","AFRICA","WESTERN AFRICA","BURKINA FASO","","aa499067-03c9-4684-be74-223b8b58304d" @@ -103,9 +102,9 @@ Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location "CONTINENT","ASIA","SOUTHCENTRAL ASIA","TURKMENISTAN","","d62d5dfe-b9a8-4107-aa4e-126192d5a487" "CONTINENT","ASIA","SOUTHCENTRAL ASIA","UZBEKISTAN","","4642acf0-c21c-48a6-91f4-6fbd6d0966d4" "CONTINENT","ASIA","SOUTHCENTRAL ASIA","","","ef8a6ecf-f0ca-4e05-81f9-d3be89e1ddc4" -"CONTINENT","ASIA","SOUTHEASTERN ASIA","BURMA","","71953a36-817f-4b70-83df-f056364ce65d" "CONTINENT","ASIA","SOUTHEASTERN ASIA","CAMBODIA","","2d955182-b62b-43eb-9acc-74f1f1f062f7" "CONTINENT","ASIA","SOUTHEASTERN ASIA","LAO PEOPLE'S DEMOCRATIC REPUBLIC","","0f023a42-94f0-4c8c-b2c9-792eaa6aa784" +"CONTINENT","ASIA","SOUTHEASTERN ASIA","MYANMAR","","71953a36-817f-4b70-83df-f056364ce65d" "CONTINENT","ASIA","SOUTHEASTERN ASIA","THAILAND","","6af5848c-db4b-4dd0-a6fb-1b9c904ef21b" "CONTINENT","ASIA","SOUTHEASTERN ASIA","VIETNAM","","8f4b20b4-633c-4a2e-941d-49e4b5ab3374" "CONTINENT","ASIA","SOUTHEASTERN ASIA","","","9ea81338-dc64-4803-b0e2-db0e2aaa70cf" @@ -140,8 +139,7 @@ Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location "CONTINENT","EUROPE","EASTERN EUROPE","BELARUS","","e05da771-e0e8-4ce6-a599-078819c872b5" "CONTINENT","EUROPE","EASTERN EUROPE","BLACK SEA","","afbc0a01-742e-49da-939e-3eaa3cf431b0" "CONTINENT","EUROPE","EASTERN EUROPE","BULGARIA","","a708af36-ff82-4403-80cd-6b4ffc661cc4" -"CONTINENT","EUROPE","EASTERN EUROPE","BYELORUSSIAN SSR","","649c7926-a726-406f-abec-92d3e1877714" -"CONTINENT","EUROPE","EASTERN EUROPE","CZECH REPUBLIC","","ff28159f-dbc2-4585-bbfd-fbc8cabbffe3" +"CONTINENT","EUROPE","EASTERN EUROPE","CZECHIA","","ff28159f-dbc2-4585-bbfd-fbc8cabbffe3" "CONTINENT","EUROPE","EASTERN EUROPE","HUNGARY","","250456aa-1202-411d-b88f-919386a4ebe5" "CONTINENT","EUROPE","EASTERN EUROPE","MOLDOVA","","59c12b6b-c5b4-4e23-9281-731e3473cca3" "CONTINENT","EUROPE","EASTERN EUROPE","POLAND","","09029b84-fdf7-45d2-b684-4152c9b55d7d" @@ -156,6 +154,7 @@ Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location "CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","UNITED KINGDOM","1928f419-0c4b-4b06-9f66-eb37f49105de" "CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","","c9e8dfcd-18ac-405d-b6a0-934ae3c743d3" "CONTINENT","EUROPE","NORTHERN EUROPE","ESTONIA","","f0b2da18-9290-4aaf-8e91-4b52e3d9dfc4" +"CONTINENT","EUROPE","NORTHERN EUROPE","GUERNSEY","","1a16071e-e3bc-43ea-a668-522bbc045fdb" "CONTINENT","EUROPE","NORTHERN EUROPE","ICELAND","","5e64ca14-42f3-4222-8f2c-5db3c7b71d8f" "CONTINENT","EUROPE","NORTHERN EUROPE","LATVIA","","e2e7fb18-459b-4d43-8065-ce5ca7e5bdb9" "CONTINENT","EUROPE","NORTHERN EUROPE","LITHUANIA","","b58616f8-024f-45f1-be4f-8924557a82bc" @@ -172,10 +171,10 @@ Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location "CONTINENT","EUROPE","SOUTHERN EUROPE","CROATIA","","0a19cdd4-48ec-4551-9e5f-7be860891f94" "CONTINENT","EUROPE","SOUTHERN EUROPE","GREECE","","103ca372-ccaa-4cca-9e1a-ef2219ad6bb2" "CONTINENT","EUROPE","SOUTHERN EUROPE","ITALY","","ff1cfc9c-5e73-4137-b8e1-d6f4e83e61c4" -"CONTINENT","EUROPE","SOUTHERN EUROPE","MACEDONIA","","03280af1-94e4-4918-8a19-70b8445f9d6f" +"CONTINENT","EUROPE","SOUTHERN EUROPE","KOSOVO","","632e6bd5-cdd5-42fa-801f-66b553155905" "CONTINENT","EUROPE","SOUTHERN EUROPE","MONTENEGRO","","d8f2db47-29ae-4999-aeca-360e4f98f256" +"CONTINENT","EUROPE","SOUTHERN EUROPE","NORTH MACEDONIA","","03280af1-94e4-4918-8a19-70b8445f9d6f" "CONTINENT","EUROPE","SOUTHERN EUROPE","SAN MARINO","","18493ec7-f2a5-47bc-8200-8d9e0c41dcf3" -"CONTINENT","EUROPE","SOUTHERN EUROPE","SERBIA","KOSOVO","632e6bd5-cdd5-42fa-801f-66b553155905" "CONTINENT","EUROPE","SOUTHERN EUROPE","SERBIA","","71c964af-7eec-4812-85de-04cadfd77934" "CONTINENT","EUROPE","SOUTHERN EUROPE","SLOVENIA","","1e7cf5e6-e98a-45ae-a300-6ee43aaf9a1d" "CONTINENT","EUROPE","SOUTHERN EUROPE","SPAIN","GIBRALTAR","1dd688e9-3c50-4be0-907a-423d2371dc3e" diff --git a/pyQuARC/schemas/platforms.csv b/pyQuARC/schemas/platforms.csv index eea4367f..572fb6f4 100644 --- a/pyQuARC/schemas/platforms.csv +++ b/pyQuARC/schemas/platforms.csv @@ -1,1033 +1,1078 @@ -"Keyword Version: 10.7","Revision: 2021-07-23 17:27:18","Timestamp: 2021-08-17 09:32:08","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/platforms/?format=xml""Case native" -Category,Series_Entity,Short_Name,Long_Name,UUID -"Aircraft","","A340-600","Airbus A340-600","bab77f95-aa34-42aa-9a12-922d1c9fae63" -"Aircraft","","AC-500S","Rockwell Aero Commander AC-500S","20d7a6a7-1c69-469b-ac53-92078dcb2a67" -"Aircraft","","AC-680E","Rockwell Aero Commander AC-680E","3ecc7e27-1cf9-4c7d-817f-557752323560" -"Aircraft","","AC-690A","Aerocommander aircraft","6fa682b9-c6b5-46ca-971f-b7ecd4bf304d" -"Aircraft","","AEROSONDE","","6be3bc48-c307-4583-8357-34262cf8f35d" -"Aircraft","","AIRCRAFT","AIRCRAFT","8bce0691-74e9-4363-8d1f-d453a318c62b" -"Aircraft","","ALTUS","","46392889-f6e2-4b06-8f79-87f2ff9d4349" -"Aircraft","","AS350-B2","Helicopter AS350-B2","50ce4651-516f-4b05-a5e0-864617ec26eb" -"Aircraft","","AS350-B3","Helicopter AS350-B3","ad1d4887-ac0d-43a0-9e9b-b42172befebc" -"Aircraft","","AS355-F2","Helicopter AS355-F2","770c3b12-d083-4df9-8b36-27a4786794bb" -"Aircraft","","Alpha","H211 Alpha Jet","4595fee4-25d7-41f3-abe0-73203138c243" -"Aircraft","","B-200","Beechcraft King Air B-200","d6aa2406-0323-43c1-b890-3509ee22784e" -"Aircraft","","BE-200","Beechcraft King Air BE-200","a2128496-3729-45ff-9feb-20b9b700470b" -"Aircraft","","BT-67","Basler BT-67","1bfe5750-3641-4ff1-b8bf-40deb163abf0" -"Aircraft","","C-130","Lockheed C-130 Hercules","a790e30f-5a13-4188-befb-2647a884034b" -"Aircraft","","C-131A","Convair C-131 Samaritan","0fa676d8-e487-4905-81c7-1a98150e86c8" -"Aircraft","","C-185","Cessna 185","04da5a44-7299-4d07-b85f-26db1552d00a" -"Aircraft","","C-23 Sherpa","Short Brothers C-23 Sherpa","abe97ffb-af51-43b2-a1d4-a922ddf9bc6e" -"Aircraft","","CESSNA 172 SKYHAWK","","ee829117-a171-4500-a0a5-81cac07f1071" -"Aircraft","","CESSNA 188","","80374e6d-fef6-4b11-bcc4-53568a3db220" -"Aircraft","","CESSNA 206","","ebf5d441-db97-4691-a8fc-08b4afdbac46" -"Aircraft","","CESSNA 320","","e10cf52f-a68a-4593-896b-8fe3d17483fe" -"Aircraft","","CESSNA CITATION II","","80b0db4e-1a31-4b54-b61f-f4bd9f17d96a" -"Aircraft","","CESSNA SINGLE-ENGINE AIRCRAFT","CESSNA SINGLE-ENGINE AIRCRAFT","d80f3d86-ab38-4c27-82c5-aeae2b4c3370" -"Aircraft","","CONVAIR CV-580","CONVAIR CV-580","0b69c56f-5aaa-46a2-83da-9c4cffc7c181" -"Aircraft","","CONVAIR-990","CONVAIR-990 CORONADO","fc0c7954-fdd2-4a16-905e-d3688dfc9be1" -"Aircraft","","CORSAIR 131A","","ee4eccba-83d0-4ba5-83f4-8e366712b44f" -"Aircraft","","Cessna Pelican","","c97d09d4-4966-42ed-a6c7-4330a1e76edf" -"Aircraft","","Convair-580","Aircraft operated by University of Washington","9fd64ddf-4c61-45ae-8721-aa306829a165" -"Aircraft","","DC-6","Douglas DC-6","1dea03cc-d165-4f61-9a8c-b624b981f36a" -"Aircraft","","DC-8","Douglas DC-8","aacf1f4c-2d79-4946-bc18-6157262d7039" -"Aircraft","","DHC-3","DeHavilland DHC-3 Otter","aef364b1-6a71-49c0-b248-6dc1ecd4eaa3" -"Aircraft","","DHC-6","DeHavilland Twin Otter","a3d03059-eeec-4afd-b3f1-c24a1fcf3862" -"Aircraft","","DLR-Falcon","DLR-Falcon 20 Aircraft","0c31ed1c-8ec6-4f7c-ac27-23fb428b7415" -"Aircraft","","FOKKER F27","","050f6aee-d3c0-4d1c-9c88-86c9e5ac9e81" -"Aircraft","","G-1 AIRCRAFT","G-1 Aircraft","c285cedc-7581-4abc-aeee-978ffd3a8879" -"Aircraft","","G-III","Gulfstream III","a7b0e975-f965-4f8f-aa85-68aeae48ffb1" -"Aircraft","","G-II","GULFSTREAM II","e9b3e773-5a35-4793-9683-737a9dc82524" -"Aircraft","","G-IV","GULFSTREAM IV","aad5d9e8-7e22-4abc-a8c3-9cdc7578bca6" -"Aircraft","","G-I","GULFSTREAM I","38f334bd-7507-43ed-8b45-d1c8ac2379a2" -"Aircraft","","G-LiHT","Goddard’s LiDAR, Hyperspectral and Thermal (G-LiHT) airborne imaging system","f4dbe34b-a93e-439f-bdbb-4167c833aba6" -"Aircraft","","G-V","Gulfstream V","924c4b23-30f0-451f-baa2-b6de47c94e58" -"Aircraft","","GLOBAL HAWK UAV","","f3494b27-4de0-45d9-9a5b-8dae39785182" -"Aircraft","","GULFSTREAM 1000 (695A)","Gulfstream Jet Prop Commander 1000 (695a)","365c9e65-c156-4763-968a-a3e53e8accff" -"Aircraft","","HC-130","HC-130","8e7d2140-fbbb-4169-ba3e-e6d1fe6c7cf8" -"Aircraft","","HELICOPTER","HELICOPTER","06e037ed-f463-4fa3-a23e-8f694b321eb1" -"Aircraft","","HU-25A","Dassault HU-25A Guardian","d77685bd-aa94-4717-bd97-632699d999b5" -"Aircraft","","HU-25C","Dassault HU-25C Guardian","47b6caf1-e14c-458c-84a1-ec64cf29b534" -"Aircraft","","IKHANA","Ikhana Unmanned Science and Research Aircraft System","6c58928b-d25f-46cf-a8a6-3d5a27cc2248" -"Aircraft","","J-31","J-31 aircraft","293eba8a-cae4-4505-9c59-d1e223990ea4" -"Aircraft","","KINGAIR","","a805fcaf-f9c2-4bca-8496-4b0dc032c016" -"Aircraft","","King Air","Beechcraft King Air","f959e3c5-f014-40b7-a134-4d41b616f79d" -"Aircraft","","LA-27","Lake Seawolf LA-27","c88b260b-2acd-417e-9c82-3a8226b4e218" -"Aircraft","","LEARJET","","5c7ba790-030e-4cd6-99e8-9fe9809c5052" -"Aircraft","","NASA DC-8","NASA Douglas DC-8","a930c78a-6ed3-4a49-ad2d-bd2c5c36d291" -"Aircraft","","NASA ELECTRA","","b1a1eda8-55a5-43a0-a984-239ab657be68" -"Aircraft","","NASA ER-2","NASA Earth Resources-2","b16010e6-c7ea-4c98-929e-3f844ca2f2c2" -"Aircraft","","NASA GLOBAL HAWK 872 AIRCRAFT","NASA unmanned Global Hawk aircraft number 872","8f3ab728-820e-4723-8807-c1f1e6e4a1b0" -"Aircraft","","NASA P-3","","45abac35-586f-4fed-ac38-5dcd59af2cc5" -"Aircraft","","NASA S-3B VIKING","","7f1568aa-e87e-4b83-a622-e8f8a03f75bd" -"Aircraft","","NASA WB-57F","","701c4a38-b7f2-41de-ab5f-d1c8ad76a717" -"Aircraft","","NCAR ELECTRA","NCAR ELECTRA","fdb96a23-16f4-4df4-a60b-a4d1123587ce" -"Aircraft","","NOAA Twin Otter","NOAA De Havilland DHC-6-300 Twin Otter","ef194fe1-50e0-4ba7-943a-c87c6f5e72c1" -"Aircraft","","NP-3C Orion","Naval Research Lab P-3C Orion","fb9f4171-b9b6-4627-9c79-1d3b5890dfc4" -"Aircraft","","NRL P-3","Aircraft operated by Naval Research Lab","02d1826b-a34b-4773-a61d-de91677eb8bd" -"Aircraft","","NSF/NCAR C-130","NSF/NCAR Hercules C130 Aircraft","3a59dbd3-86c4-47dd-aeb1-935c657aa544" -"Aircraft","","NSF/NCAR GV HIAPER","NSF/NCAR Gulfstream GV Aircraft","879d697c-381f-45df-a48d-2d9095bc5c54" -"Aircraft","","P-3A ORION","Lockheed P-3A Orion","29564e60-e0d6-4d5d-9999-97b9cd16a034" -"Aircraft","","P-3B","Lockheed P-3B Orion","eb80f2b1-4c2f-4cbb-8cb2-40a7613edff3" -"Aircraft","","PA-12","Piper PA-12 Super Cruiser","3a710b96-89c3-4783-b811-e9c5a3f3784f" -"Aircraft","","PIPER AZTEC","","03c57589-9fc0-4ffb-b0c4-73a6e065a74f" -"Aircraft","","PIPER NAVAJO CHIEFTAIN","PIPER NAVAJO CHIEFTAIN","993d2657-71e9-4c5a-b456-ffce88699c55" -"Aircraft","","RQ-4","Northrop Grumman RQ-4 Global Hawk","e5aedd55-cce6-417c-97c0-595448406ad5" -"Aircraft","","SA Mooney","Scientific Aviation Mooney","32e58bec-22e7-406e-bded-20d97de35f64" -"Aircraft","","SKYVAN","","7ec84078-8ced-4e7f-9a8c-781cc5d2bd8d" -"Aircraft","","T-39","Rockwell Sabreliner T-39","d3a21a28-538b-4292-9570-5fd3da9ce4d2" -"Aircraft","","TWIN OTTER CIRPAS NPS","","eaa3cf37-b738-47ae-abac-7c430d4ecdc7" -"Aircraft","","UAV","Unmanned Aerial Vehicle","9b6da136-51c7-4941-8023-5826be7a9273" -"Aircraft","","UC-12B","NASA Langley Beechcraft UC-12B Huron","18cb3d65-a7ab-4220-b7e3-38b98ce04ac7" -"Aircraft","","UMD Cessna","University Of Maryland Cessna 402B Research Aircraft","1d0fbb34-9f52-41cc-8b83-b45af8e58777" -"Aircraft","","UND CITATION II","","7f2883c4-bbaf-4150-93d8-dc48716476ca" -"Aircraft","","UWKA","University of Wyoming King Air","64b518f5-2026-4c5b-9bae-9fa55b5b5778" -"Aircraft","","WC-130J","Lockheed-Martin WC-130J Hercules","8b1791fe-cef8-4883-a634-b3963a39c8a6" -"Aircraft","","WP-3D ORION","Lockheed WP-3D Orion","5a9f3704-2947-483b-8fe7-992692c9f289" -"Aircraft","","","","227d9c3d-f631-402d-84ed-b8c5a562fc27" -"Balloons/Rockets","","BALLOONS","","a1586112-38f5-461c-9e88-0a95cf62062c" -"Balloons/Rockets","","DROPWINDSONDES","","fa514134-ff56-47d1-bc02-6b8568ad21e7" -"Balloons/Rockets","","EOLE","","95707b1d-4451-4958-af57-0fdf70444cac" -"Balloons/Rockets","","MAXIS","MeV Auroral X-ray Imaging and Spectroscopy","a1cfc5a9-e688-4f2e-88b0-9d72d07ea41a" -"Balloons/Rockets","","PIBAL","Pilot Balloons","dbb82f09-3a6f-4840-b1a9-c4acc3f6bbe8" -"Balloons/Rockets","","RADIOSONDES","","2516981b-e560-479d-ba96-f8edfb54efe9" -"Balloons/Rockets","","ROCKETS","","c2a3f38e-524a-46ee-ac1b-2a12910e6bdd" -"Balloons/Rockets","","SOUNDING ROCKETS","","3b3bc1cb-312d-448c-8cdf-a8de43bb540a" -"Balloons/Rockets","","Titan 34D","","9e9e86b0-d613-4069-abe2-8291a6fac3ef" -"Balloons/Rockets","","Titan IIID","","a044e8ff-8225-4bba-85c4-80ea394e007b" -"Balloons/Rockets","","","","2196cc92-a5da-4233-9509-5523385da1d7" -"Earth Observation Satellites","AD (Atmospheric Dynamics)","AD-A","Atmosphere Dynamics A (Explorer 19)","0e03a1c5-1d20-46ae-9041-94d1ff77783f" -"Earth Observation Satellites","AD (Atmospheric Dynamics)","AD-B","Atmosphere Dynamics B (Explorer 24)","fd3a7054-3aec-41ea-a281-3edba4f9f313" -"Earth Observation Satellites","AD (Atmospheric Dynamics)","AD-C","Atmosphere Dynamics C (Explorer 39)","23be0822-1db5-4bf6-bf28-f6bd36754ac3" -"Earth Observation Satellites","AD (Atmospheric Dynamics)","","","d1bbc871-749b-4759-bf4f-f8349f8b4020" -"Earth Observation Satellites","ADEOS (Advanced Earth Observing Satellite)","ADEOS-II","Advanced Earth Observing Satellite-II","5d00fc17-cf10-4d1b-b871-07099d0b728a" -"Earth Observation Satellites","ADEOS (Advanced Earth Observing Satellite)","ADEOS-I","Advanced Earth Observing Satellite-I","359bcfa1-966f-4d2b-a48d-ac12165d250f" -"Earth Observation Satellites","ADEOS (Advanced Earth Observing Satellite)","","","119b40ad-749c-4ff6-af9b-1e9696f78dd8" -"Earth Observation Satellites","AE (Atmosphere Explorer)","AE-A","Atmosphere Explorer A (Explorer 17)","5a2b20fa-89d3-4cfc-b186-fbc29113e910" -"Earth Observation Satellites","AE (Atmosphere Explorer)","AE-B","Atmosphere Explorer B (Explorer 32)","65bdc896-7ed5-4d22-8b15-df0914b5be69" -"Earth Observation Satellites","AE (Atmosphere Explorer)","AE-C","Atmosphere Explorer C (Explorer 51)","f62c196b-8ec3-40e8-a824-6849e5a496f2" -"Earth Observation Satellites","AE (Atmosphere Explorer)","AE-D","Atmosphere Explorer D (Explorer 54)","3516fe07-9d51-42f3-b635-b6a5001e1d6c" -"Earth Observation Satellites","AE (Atmosphere Explorer)","AE-E","Atmosphere Explorer E (Explorer 55)","340b5b79-16c4-4cb7-9476-5cbab3efd834" -"Earth Observation Satellites","AE (Atmosphere Explorer)","","","96dcdb2e-3861-4a4b-97f4-764fd117a0f1" -"Earth Observation Satellites","AEM (Applications Explorer Mission)","AEM-1","Applications Explorer Mission-1","cb310a29-01bb-4b52-8ff2-52dbfda7d050" -"Earth Observation Satellites","AEM (Applications Explorer Mission)","AEM-2","Applications Explorer Mission-2","a796345a-53d4-400d-ba32-e7c7eaa1a1cc" -"Earth Observation Satellites","AEM (Applications Explorer Mission)","AEM-3","Applications Explorer Mission-3","7921a2bb-f13b-43ce-ad18-cfce4f3deb9c" -"Earth Observation Satellites","AEM (Applications Explorer Mission)","","","b1337c5b-c705-42c0-bc07-97689734253c" -"Earth Observation Satellites","AEROS","AEROS-1","","6164d877-53a0-4ba2-b73a-9dfb363474c9" -"Earth Observation Satellites","AEROS","AEROS-2","","df8ac2e0-810a-4671-b2dc-c031487d14ee" -"Earth Observation Satellites","AEROS","","","52aef8fa-ae6a-451a-a227-d109a6605cf6" -"Earth Observation Satellites","ALOUETTE","ALOUETTE-1","","4f800938-81f5-4478-bb05-54915f641b70" -"Earth Observation Satellites","ALOUETTE","ALOUETTE-2","","080e9bc1-058f-4eab-b7ce-009b323299ca" -"Earth Observation Satellites","ALOUETTE","","","5981d335-9b9d-4043-a963-f71a678384ee" -"Earth Observation Satellites","ATS (Advanced Technology Satellite)","ATS-1","Advanced Technology Satellite-1","5f78a0f6-bd07-4cbf-9e13-4ad44aeb4ac3" -"Earth Observation Satellites","ATS (Advanced Technology Satellite)","ATS-2","Advanced Technology Satellite-2","1190ffd3-586f-46a5-bf9b-e7bf16281edd" -"Earth Observation Satellites","ATS (Advanced Technology Satellite)","ATS-3","Advanced Technology Satellite-3","6988684a-7e7c-48a7-a1c3-2586dddd1fd4" -"Earth Observation Satellites","ATS (Advanced Technology Satellite)","ATS-4","Advanced Technology Satellite-4","cb8e56df-863a-41a6-a389-237a9725ae8b" -"Earth Observation Satellites","ATS (Advanced Technology Satellite)","","","14b369b6-19d4-41fe-b1bc-27807ecb666d" -"Earth Observation Satellites","BE (Beacon Explorer)","BE-B","Beacon Explorer-B","f18c5acb-6318-4d40-bda2-459ec09c57f5" -"Earth Observation Satellites","BE (Beacon Explorer)","BE-C","Beacon Explorer-C","b0376960-fe7c-4117-8da6-d56a124d09bf" -"Earth Observation Satellites","BE (Beacon Explorer)","","","74cf41a6-464f-44bf-ba05-1535200d6354" -"Earth Observation Satellites","CARTOSAT","CARTOSAT-2A","","16ee6fd3-565f-49b4-8b6e-73c4f8858e01" -"Earth Observation Satellites","CARTOSAT","CARTOSAT-2","","71ccf8e3-7b1f-418d-9bc0-0ead78ec75ee" -"Earth Observation Satellites","CARTOSAT","","","b65c6b10-a648-4a7c-9af1-71506ed9bb13" -"Earth Observation Satellites","CBERS (China-Brazil Earth Resources Satellite)","CBERS-1","China-Brazil Earth Resource Satellite 1","0303de56-025a-416c-8a2e-ac14979dc455" -"Earth Observation Satellites","CBERS (China-Brazil Earth Resources Satellite)","CBERS-2B","China-Brazil Earth Resource Satellite 2B","274b7618-c580-4466-8a63-f79b0beb778c" -"Earth Observation Satellites","CBERS (China-Brazil Earth Resources Satellite)","CBERS-2","China-Brazil Earth Resource Satellite 2","808fa0c2-1d97-4347-a5dd-2b285000c6f2" -"Earth Observation Satellites","CBERS (China-Brazil Earth Resources Satellite)","CBERS-3","China-Brazil Earth Resource Satellite 3","064b3481-8a82-4c2b-9d59-86eda10cff53" -"Earth Observation Satellites","CBERS (China-Brazil Earth Resources Satellite)","CBERS-4","China-Brazil Earth Resource Satellite 4","8551bdde-6ae3-459f-a903-ec1ce7fab5d9" -"Earth Observation Satellites","CBERS (China-Brazil Earth Resources Satellite)","","","2b68d69c-e4c8-4194-8db6-8b9002607fb6" -"Earth Observation Satellites","COSMOS","COSMOS 1500","","04bda92c-0e4f-4e60-82d0-2242b14ce0c4" -"Earth Observation Satellites","COSMOS","COSMOS 49","","8491e067-951e-4cba-9619-d376b5c628a0" -"Earth Observation Satellites","COSMOS","","","0aee28fe-1c74-4743-8855-003bc1075174" -"Earth Observation Satellites","DE (Dynamics Explorer)","DE-1","Dynamics Explorer-1","59dcd28c-9bd0-4b00-a68c-d892c68bf614" -"Earth Observation Satellites","DE (Dynamics Explorer)","DE-2","Dynamics Explorer-2","1bc7b5ee-93b6-4bc4-b340-89507104d33f" -"Earth Observation Satellites","DE (Dynamics Explorer)","","","74bd6271-10ce-428d-8368-4abbd12da55f" -"Earth Observation Satellites","DIADEM","DIADEM-1C","","5edd7e9b-8b22-438a-b2e2-2c708bd0ac9c" -"Earth Observation Satellites","DIADEM","DIADEM-1D","","143a5181-7601-4cc7-96d1-2b1a04b08fa7" -"Earth Observation Satellites","DIADEM","","","4a21b488-a0ed-4b11-9b7a-a32e123b555e" -"Earth Observation Satellites","DMC-1G (Disaster Monitoring Constellation- 1st Generation)","ALSAT-1","","5ec20355-ec48-41cf-9020-9d094af549e6" -"Earth Observation Satellites","DMC-1G (Disaster Monitoring Constellation- 1st Generation)","BEIJING-1","","05d8035f-176b-451a-a52b-43d2cc6286bb" -"Earth Observation Satellites","DMC-1G (Disaster Monitoring Constellation- 1st Generation)","BILSAT-1","BILSAT-1","144d9185-4435-4cb3-8f09-b3f569eb3a33" -"Earth Observation Satellites","DMC-1G (Disaster Monitoring Constellation- 1st Generation)","NIGERIASAT-1","NIGERIASAT-1","cf904fd3-2fba-40b8-9950-4e200b83a919" -"Earth Observation Satellites","DMC-1G (Disaster Monitoring Constellation- 1st Generation)","UK-DMC","United Kingdom-Disaster Monitoring Constellation","2a79b3d1-6417-4ec7-bf03-ac03f0b45266" -"Earth Observation Satellites","DMC-1G (Disaster Monitoring Constellation- 1st Generation)","","","591c05ef-9b21-4c96-84b5-33f95cca3ab7" -"Earth Observation Satellites","DMC-2G (Disaster Monitoring Constellation- 2nd Generation)","Deimos-1","Deimos-1 Microsatellite Mission","8b35d386-0999-4b6e-ad12-f8501427b0ca" -"Earth Observation Satellites","DMC-2G (Disaster Monitoring Constellation- 2nd Generation)","NigeriaSat-2","NigeriaSat-2","1dda5116-4079-445e-ae1c-614e49879cf3" -"Earth Observation Satellites","DMC-2G (Disaster Monitoring Constellation- 2nd Generation)","NigeriaSat-X","NigeriaSat-X","35cafb99-393d-4727-a89d-5472512b2fdf" -"Earth Observation Satellites","DMC-2G (Disaster Monitoring Constellation- 2nd Generation)","UK-DMC-2","United Kingdom-Disaster Monitoring Constellation-2","03afbb23-76cc-4241-b5a3-853367f8461f" -"Earth Observation Satellites","DMC-2G (Disaster Monitoring Constellation- 2nd Generation)","","","e5184d15-eec8-4703-8318-243748ddbd0e" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5B/F3","Defense Meteorological Satellite Program-F3","7ed12e98-95b1-406c-a58a-f4bbfa405269" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-1/F1","Defense Meteorological Satellite Program-F1","f2a6694b-5ba1-464a-9d0f-d0212e492d53" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-1/F2","Defense Meteorological Satellite Program-F2","caece537-38fc-4888-8ca7-1f4570dcf409" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-1/F3","Defense Meteorological Satellite Program-F3","06d68016-affc-4477-86f5-e14a7a9839f2" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-1/F4","Defense Meteorological Satellite Program-F4","66014559-5d7a-4f53-811a-1c5b682e4e56" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-1/F5","Defense Meteorological Satellite Program-F5","60e10f22-c473-4368-888f-886a751662ea" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F10","Defense Meteorological Satellite Program-F10","aa866680-32cd-4bd2-88ee-ae7b45c629da" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F11","Defense Meteorological Satellite Program-F11","0d8490b8-347e-4f61-a747-07700c863b47" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F12","Defense Meteorological Satellite Program-F12","60bf045b-f556-4461-8dcc-54dc63300537" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F13","Defense Meteorological Satellite Program-F13","48a1fe2e-6cb2-44ad-8303-0a3328b1e5e4" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F14","Defense Meteorological Satellite Program-F14","b13ff0b8-748c-475c-8512-361ae27a9395" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F15","Defense Meteorological Satellite Program-F15","0661540e-f7b7-469b-9ef7-eaa0dd7a6d10" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F6","Defense Meteorological Satellite Program-F6","030470d1-f545-4775-90b3-b12978cd6315" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F7","Defense Meteorological Satellite Program-F7","b8d201a6-28e8-4889-bc23-97babf5a75c5" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F8","Defense Meteorological Satellite Program-F8","d6a9e2e1-7c3b-4c10-9ffb-59c40b1b2061" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-2/F9","Defense Meteorological Satellite Program-F9","88f4f200-a0fc-4325-aea6-6f525ca31bfe" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-3/F15","Defense Meteorological Satellite Program-F15","4d78ad33-3b1d-4ddc-9d4a-296600363d45" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-3/F16","Defense Meteorological Satellite Program-F16","2f4b0671-f9a0-4912-96cd-96527a4c0678" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-3/F17","Defense Meteorological Satellite Program-F17","be9ed5c4-4d6b-45fa-9bf7-55b7995fbd15" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-3/F18","Defense Meteorological Satellite Program-F18","859c1a88-56d5-48c2-839d-6d18f7746379" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP 5D-3/F19","Defense Meteorological Satellite Program-F19","d1ad8ea7-b460-44b2-a96a-1040d156eeb4" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","DMSP","Defense Meteorological Satellite Program","64dfed70-dca2-4656-83d9-63e74c1b0740" -"Earth Observation Satellites","DMSP (Defense Meteorological Satellite Program)","","","1cf8cbcd-c1be-4c78-9272-b62adad59aa1" -"Earth Observation Satellites","Deimos","Deimos-2","Deimos-2 Minisatellite Mission","48e0f5f2-08fb-4739-8c5f-f53e24003f8c" -"Earth Observation Satellites","Deimos","","","f122ab59-266b-4be9-99ad-4c2172bcf97c" -"Earth Observation Satellites","ECHO","ECHO-1","","9b532124-c5a7-40c7-9788-a61ff1295363" -"Earth Observation Satellites","ECHO","ECHO-2","","6e2adc45-a039-46cb-b8e5-e4743df7e656" -"Earth Observation Satellites","ECHO","","","0a3e3bc3-d878-44f0-9650-145a53062c36" -"Earth Observation Satellites","ERS Earth Resource Satellite","ERS-1","European Remote Sensing Satellite-1","02c85d04-228e-4bf3-bb03-d72c22681dff" -"Earth Observation Satellites","ERS Earth Resource Satellite","ERS-2","European Remote Sensing Satellite-2","affbd015-9373-4413-b76f-e91d01c4f5e3" -"Earth Observation Satellites","ERS Earth Resource Satellite","","","3b6b4870-ae80-4488-b9fb-f9152037ec59" -"Earth Observation Satellites","ESSA","ESSA-3","Environmental Science Services Administration Satellite 3","c7706afe-079a-4966-8a9e-6a688ca9b880" -"Earth Observation Satellites","ESSA","ESSA-4","Environmental Science Services Administration Satellite 4","50992afe-f79e-47fc-a1a2-126dc2c42c9a" -"Earth Observation Satellites","ESSA","ESSA-5","Environmental Science Services Administration Satellite 5","8b67c88a-b62f-4585-a5d3-8e0005f42fd0" -"Earth Observation Satellites","ESSA","ESSA-7","Environmental Science Services Administration Satellite 7","2e4252b9-5b53-41bb-8212-1e63a540181f" -"Earth Observation Satellites","ESSA","ESSA-9","Environmental Science Services Administration Satellite 9","1dc828a8-8502-479d-b7c4-d5139c06029a" -"Earth Observation Satellites","ESSA","","","65cb3e7c-d4d8-46df-a5fc-aec63e58e8df" -"Earth Observation Satellites","ETALON","ETALON-1","","0bd45536-e8d5-42bf-998f-05ce4d0f0a49" -"Earth Observation Satellites","ETALON","ETALON-2","","c9c07cf0-49eb-4c7f-aeff-2e95caae9500" -"Earth Observation Satellites","ETALON","","","820b20d7-03b3-43a3-9c7a-f28fa3b0bfe2" -"Earth Observation Satellites","EXPLORER","EXPLORER-9","Air Density Sphere","84d39d18-7ae4-4f86-9626-694de58da933" -"Earth Observation Satellites","EXPLORER","","","0c52630e-cc77-42ab-b1ae-cb736486200e" -"Earth Observation Satellites","Earth Explorers","Biomass","Biomass monitoring mission for Carbon Assessment","a9b21edd-49b7-43be-8e35-8652bbc5559a" -"Earth Observation Satellites","Earth Explorers","CRYOSAT-2","CRYOSAT-2","a915ab2f-46c5-493b-9f18-aeb3383ee72b" -"Earth Observation Satellites","Earth Explorers","GOCE","Gravity Field and Steady-State Ocean Circulation Explorer","b4fc57c3-7f36-40dc-8067-8b1f4dff4e3d" -"Earth Observation Satellites","Earth Explorers","SMOS","Soil Moisture and Ocean Salinity (Earth Explorer Opportunity Mission)","a641c997-0bd2-41aa-ba43-8e03066c3c2a" -"Earth Observation Satellites","Earth Explorers","","","fe9b35e7-6243-44bb-ac42-ce8350e7a86f" -"Earth Observation Satellites","Elektro-L","Elektro-L N1","Geostationary Operational Meteorological Satellite","6d0d4c3e-acfb-4bfd-ab0d-4478e18e4b19" -"Earth Observation Satellites","Elektro-L","Elektro-L N3","","2c780dff-fce3-4625-8b89-a7cd2d64d6ec" -"Earth Observation Satellites","Elektro-L","","","882c16a9-0bc6-4773-8066-e25ea8de3c9d" -"Earth Observation Satellites","FY (Feng-Yun)","FY-1","China's Meteorological Satellite-1","7b07ea0a-714f-4883-b202-898dfa0d4a69" -"Earth Observation Satellites","FY (Feng-Yun)","FY-2","China's Meteorological Satellite-2","d48c7bce-ce00-42f3-8afd-82a9d45615e6" -"Earth Observation Satellites","FY (Feng-Yun)","","","edf02962-aafa-484f-84e5-2549f6db7552" -"Earth Observation Satellites","FengYun-2","FY-2D","FengYun-2D","3019aa61-89f6-4226-97b3-6c80ef65da10" -"Earth Observation Satellites","FengYun-2","FY-2E","FengYun-2E","d2b2dc9e-7a97-4e16-8562-1087a74fb9c9" -"Earth Observation Satellites","FengYun-2","","","e3344a00-36a4-49c2-b05e-5b540044b510" -"Earth Observation Satellites","FireBIRD","BIROS","Bi-spectral InfraRed Optical System","8e53aafe-f7a5-4629-893e-0a3ae1a6fe1d" -"Earth Observation Satellites","FireBIRD","TET-1","Technology Experiment Carrier-1","67e5bbab-0c9b-40e5-acf7-054671f35d2b" -"Earth Observation Satellites","FireBIRD","","","9b165321-e03c-44dc-bb9c-d10c32c93ab6" -"Earth Observation Satellites","GEOS (Geodetic Earth Orbiting Satellite)","GEOS-1","Geodetic Earth Orbiting Satellite-1","a44b20a7-be0a-40d5-baba-8a77022db3a1" -"Earth Observation Satellites","GEOS (Geodetic Earth Orbiting Satellite)","GEOS-2","Geodetic Earth Orbiting Satellite-2","d3b6b9b2-055e-4a11-b0e6-58f233f24b37" -"Earth Observation Satellites","GEOS (Geodetic Earth Orbiting Satellite)","GEOS-3","Geodetic Earth Orbiting Satellite-3","73ac5529-c0ec-46b5-a592-84b197bb0a35" -"Earth Observation Satellites","GEOS (Geodetic Earth Orbiting Satellite)","","","608e831d-f722-4a97-b173-a308d7bc6dd2" -"Earth Observation Satellites","GEOSAT","GEOSAT","Geodetic Satellite","053da8e9-78d7-4d7f-997a-d06773323b7e" -"Earth Observation Satellites","GEOSAT","GFO-1","GEOSAT FOLLOW-ON-1","84d55533-31f1-4601-acad-5444b31b62b4" -"Earth Observation Satellites","GEOSAT","","","b78f1a1f-2e62-4f21-8031-670f008bdaa5" -"Earth Observation Satellites","GHGSat","GHGSat-C1","Greenhouse Gas Satellite - C1","38a680f5-6c96-490d-9683-8c5588090e34" -"Earth Observation Satellites","GHGSat","GHGSat-C2","Greenhouse Gas Satellite - C2","6564cc55-1032-4e52-b1d4-b177224d3805" -"Earth Observation Satellites","GHGSat","GHGSat-D","Greenhouse Gas Satellite - Demonstrator","1aabc727-a8d8-4dff-a248-8e485d147b00" -"Earth Observation Satellites","GHGSat","","","82823ffa-e4d5-4877-bf0a-b9eb5b8c1108" -"Earth Observation Satellites","GMS (Japan Geostationary Meteorological Satellite)","GMS-1","Geostationary Meteorological Satellite-1","2a4d7fd4-36e7-42a4-9239-5e89ec0b142d" -"Earth Observation Satellites","GMS (Japan Geostationary Meteorological Satellite)","GMS-2","Geostationary Meteorological Satellite-2","63c5a148-a766-45c0-b604-6c0c706ff368" -"Earth Observation Satellites","GMS (Japan Geostationary Meteorological Satellite)","GMS-3","Geostationary Meteorological Satellite-3","a8952068-667a-4d77-8e4c-e40bcd310cdd" -"Earth Observation Satellites","GMS (Japan Geostationary Meteorological Satellite)","GMS-4","Geostationary Meteorological Satellite-4","16dbe86f-4f86-4f78-a393-9c047759c0ee" -"Earth Observation Satellites","GMS (Japan Geostationary Meteorological Satellite)","GMS-5","Geostationary Meteorological Satellite-5","0c08e0d6-ed87-4fc8-8dc9-77887a8bb256" -"Earth Observation Satellites","GMS (Japan Geostationary Meteorological Satellite)","GMS","Japan Geostationary Meteorological Satellite","acf612e2-fcf8-40a5-a08a-dd59d689ef0b" -"Earth Observation Satellites","GMS (Japan Geostationary Meteorological Satellite)","","","deeecd30-32e0-4b89-ae24-31e3e6641b4c" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-10","Geostationary Operational Environmental Satellite 10","6decd6f7-1572-4716-908e-53320218efa1" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-11","Geostationary Operational Environmental Satellite 11","2b10bfcf-f7ab-4ce1-9a4e-0b6f397a7ae0" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-12","Geostationary Operational Environmental Satellite 12","a93b5d7d-5bf4-49d3-b05f-b5f0b55b1bf6" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-13","Geostationary Operational Environmental Satellite 13","3c57a713-8cfe-4e65-8d6c-d30a59786313" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-14","Geostationary Operational Environmental Satellite 14","9dfc4f09-66e5-4e70-b4f9-72f52855c9c3" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-15","Geostationary Operational Environmental Satellite 15","e9415082-d8d2-4073-ba8a-fe22a2c521b6" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-16","Geostationary Operational Environmental Satellite 16","cbc78fde-7247-4906-b553-92c125fd848d" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-17","Geostationary Operational Environmental Satellite 17","bec0b215-7fe0-46e8-855a-d1807779f004" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-1","Geostationary Operational Environmental Satellite 1","9a5e161d-6979-4c0f-a6bd-7d3c268fef18" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-2","Geostationary Operational Environmental Satellite 2","59b9924a-a10f-4205-9051-ed611164fd97" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-3","Geostationary Operational Environmental Satellite 3","54aa88e0-f005-4525-bb26-1b8ed615b5f2" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-4","Geostationary Operational Environmental Satellite 4","eb1b830e-d451-46df-a8c6-4538ed9a5960" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-5","Geostationary Operational Environmental Satellite 5","cc07c141-768f-4e46-a222-5a423b6018a0" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-6","Geostationary Operational Environmental Satellite 6","93ca4f6a-2552-408b-adc2-2a3ca64a4a66" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-7","Geostationary Operational Environmental Satellite 7","2c8920b1-3ed2-417f-90d7-f94a387c77ac" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-8","Geostationary Operational Environmental Satellite 8","64fabc3c-0684-4325-9831-bf7cc461684d" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES-9","Geostationary Operational Environmental Satellite 9","2304694e-c900-4d63-b458-80163d5dcd86" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","GOES","NOAA Geostationary Operational Environmental Satellites","6b9ee582-1641-4f3b-8ce2-22ad3aae93fa" -"Earth Observation Satellites","GOES (Geostationary Operational Environmental Satellite)","","","e31e924e-9e50-4856-b85d-862ee3d084a4" -"Earth Observation Satellites","Himawari","Himawari-8","","dd2591d9-35a1-4037-9664-bbfcf4c80b71" -"Earth Observation Satellites","Himawari","Himawari-9","","e43cfa6a-fb75-4eeb-8674-25917275ea7e" -"Earth Observation Satellites","Himawari","","","d8b7fc7d-9cf3-4020-947d-f33d712b64ab" -"Earth Observation Satellites","IMS","IMS-1","Indian Mini Satellite-1","a4d7359a-ec66-49d6-a394-3cf2794dd552" -"Earth Observation Satellites","IMS","IMS-2","Indian Mini Satellite-2","aa137482-53a7-455d-b8d8-52d487380c2a" -"Earth Observation Satellites","IMS","","","fecf6a37-ffa9-4e11-90cf-1abfeb95cb95" -"Earth Observation Satellites","INSAT (Indian National Satellite)","INSAT-1A","Indian National Satellite-1A","5142bd37-853c-4d34-a2bb-13de9d97b773" -"Earth Observation Satellites","INSAT (Indian National Satellite)","INSAT-1B","Indian National Satellite-1B","9dfe63d1-5b6a-4ac4-ae19-1572ab43445e" -"Earth Observation Satellites","INSAT (Indian National Satellite)","INSAT-3D","","5999e653-21ea-49ef-977a-13b5fe40fa36" -"Earth Observation Satellites","INSAT (Indian National Satellite)","INSAT","Indian National Satellite","dadc6f66-e044-420a-b1d0-4cc11b2f169d" -"Earth Observation Satellites","INSAT (Indian National Satellite)","","","949ab40f-3954-4c81-a063-275d0e13a14e" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-1A","Indian Remote Sensing Satellite-1A","8f7e0fb3-1917-4bb5-ae90-93af14ef0c51" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-1B","Indian Remote Sensing Satellite-1B","b1734eeb-aa26-471d-9300-694c80aa8b42" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-1C","Indian Remote Sensing Satellite-1C","0b60f93d-dad7-4bb8-a41b-22d5f5d58835" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-1D","Indian Remote Sensing Satellite-1D","27b32f62-3460-4541-a1d5-507538b2b34c" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-O2","Oceansat-2","df967339-0096-4445-8732-0071f1de9e27" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-P2","Indian Remote Sensing Satellite-P2","0f7493be-f2c7-427b-befb-d4e33f08016c" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-P3","Indian ISRO IRS-P3 Spacecraft","dbbc7680-269b-42de-a33c-25e541aa6a74" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-P4","Indian Remote Sensing Satellite-P4 (OCEANSAT-1)","9e3bc460-c94c-462f-a207-aa580f2b5b07" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-P5","Indian Remote Sensing Satellite-P5 (CARTOSAT-1)","1d98408e-7465-4d31-86fa-3835a137b78d" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-P6","Indian Remote Sensing Satellite-P6","cdbfcd3f-bde3-44b1-8318-e2ee7873fc57" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-R2A","Indian Remote Sensing Satellite-R2A","56535da7-3b47-41e2-a3a9-b88a6abbc5ef" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","IRS-RS2","Indian Remote Sensing Satellite-RS2","fd710ee8-797c-490a-9f90-064a38141f99" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","K1","Kalpana-1","87daf1d5-4f7c-40e9-8d31-4c816c320029" -"Earth Observation Satellites","IRS (Indian Remote Sensing Satellite)","","","3e8bc0c6-f599-4e23-9535-449af00edd61" -"Earth Observation Satellites","ISIS (International Satellite for Ionospheric Studies)","ISIS-1","International Satellite for Ionospheric Studies-1","0e8963d6-040a-4df2-a7f6-c7dbc1ef1bda" -"Earth Observation Satellites","ISIS (International Satellite for Ionospheric Studies)","ISIS-2","International Satellite for Ionospheric Studies-2","a3725789-7cae-48f1-9c2c-a27bc30c79a1" -"Earth Observation Satellites","ISIS (International Satellite for Ionospheric Studies)","","","dfc148f7-69ed-401a-b2d2-f2c4097ef9b6" -"Earth Observation Satellites","ITOS","ITOS-1","","b080d2a3-c089-4ddf-bbfb-3e24495413b3" -"Earth Observation Satellites","ITOS","","","80e95a88-b44e-444e-bd79-2e6dbb56b170" -"Earth Observation Satellites","JERS","JERS-1","Japanese Earth Resources Satellite-1","f3230e87-898e-45d1-aa7f-b5b42eb3a3fc" -"Earth Observation Satellites","JERS","","","f79e1dd5-797c-4aa6-ab58-433c1abaec26" -"Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-1","Joint Polar Satellite System - 1","7b7147b8-cd9f-4978-ae0a-0af43ed79aa7" -"Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-2","Joint Polar Satellite System - 2","043dc242-1014-4e9a-91ee-c472b791b026" -"Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-3","Joint Polar Satellite System - 3","2ab4ba32-0bb3-4e4e-bac6-1ff4a3baf0df" -"Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-4","Joint Polar Satellite System - 4","10adce36-ce10-4ae6-94f9-211911c7dd15" -"Earth Observation Satellites","Joint Polar Satellite System (JPSS)","NOAA-20","Joint Polar Satellite System - 1","586db0b3-5f94-466e-b7c1-a2dbedc0c1fc" -"Earth Observation Satellites","Joint Polar Satellite System (JPSS)","Suomi-NPP","Suomi National Polar-orbiting Partnership","85a52725-e6a1-430a-8506-c08c59ef31c7" -"Earth Observation Satellites","Joint Polar Satellite System (JPSS)","","","5c2364ca-c01a-4f69-8808-282c3854b2f6" -"Earth Observation Satellites","KOMPSAT","KOMPSAT-1","Korea Multi-Purpose Satellite - 1","caf7cd97-6a64-4e31-9b7e-d96854eb9b6a" -"Earth Observation Satellites","KOMPSAT","KOMPSAT-2","Korea Multi-Purpose Satellite - 2","88d9cd91-a26e-467a-9554-c5d927540421" -"Earth Observation Satellites","KOMPSAT","","","9abdb7c0-7b8e-426b-8bc7-57ea4a30d82c" -"Earth Observation Satellites","LAGEOS (Laser Geodetic Satellite)","LAGEOS-1","Laser Geodetic Satellite-1","8124c4a5-fb77-455c-9ecd-3cf325fc12a9" -"Earth Observation Satellites","LAGEOS (Laser Geodetic Satellite)","LAGEOS-2","Laser Geodetic Satellite-2","e1dfd1ca-9bd1-4628-b4ad-c82dfb3c1974" -"Earth Observation Satellites","LAGEOS (Laser Geodetic Satellite)","","","4fc659a0-c543-4538-87c6-0ed2a7ab8b55" -"Earth Observation Satellites","LANDSAT","LANDSAT-1","LANDSAT-1","d41eb9c0-7683-428a-ac86-5643bbfa3985" -"Earth Observation Satellites","LANDSAT","LANDSAT-2","LANDSAT-2","dbaddf64-af69-4e82-a4a8-41f5c76ee496" -"Earth Observation Satellites","LANDSAT","LANDSAT-3","LANDSAT-3","8d323d5a-0332-4e58-80c5-8dd9f486f482" -"Earth Observation Satellites","LANDSAT","LANDSAT-4","LANDSAT-4","0db82778-12de-4cac-9a86-8f2b97feb7f1" -"Earth Observation Satellites","LANDSAT","LANDSAT-5","LANDSAT-5","fe920fff-7852-42cf-b1dc-b2223b24cf2e" -"Earth Observation Satellites","LANDSAT","LANDSAT-6","LANDSAT-6","b912164c-36a5-4d93-9638-1afb3e4c4354" -"Earth Observation Satellites","LANDSAT","LANDSAT-7","LANDSAT-7","c7a09e9f-3c99-4b31-a521-313c379ba2b4" -"Earth Observation Satellites","LANDSAT","LANDSAT-8","LANDSAT-8","13e3a08a-0d28-4e3f-a306-a20d9fb4fff8" -"Earth Observation Satellites","LANDSAT","LANDSAT-9","LANDSAT-9","5d3ce672-39fb-4dd5-be5e-55f81fb7f40f" -"Earth Observation Satellites","LANDSAT","LANDSAT","LANDSAT","77d92504-8160-4f72-90b9-a7c9640f4361" -"Earth Observation Satellites","LANDSAT","","","3cc4a1e8-3b94-4567-90b3-32137aec2d9e" -"Earth Observation Satellites","METEOSAT","METEOSAT-10","","01ee202c-22c5-442d-b4fd-65f424057ea3" -"Earth Observation Satellites","METEOSAT","METEOSAT-11","","bc69ef64-c468-4e8a-9a41-3b421e79cc90" -"Earth Observation Satellites","METEOSAT","METEOSAT-1","METEOSAT-1","a7852052-09a6-4c48-b720-9dfb086df3db" -"Earth Observation Satellites","METEOSAT","METEOSAT-2","METEOSAT-2","59df537a-0912-4943-834e-9feb08d09d59" -"Earth Observation Satellites","METEOSAT","METEOSAT-3","METEOSAT-P2","4ce99530-44bb-435b-ac46-3e3f0ddde484" -"Earth Observation Satellites","METEOSAT","METEOSAT-4","Meteosat Operational Programme 1 (MOP-1)","ceb704ea-58eb-441a-8f86-9d2d7017240c" -"Earth Observation Satellites","METEOSAT","METEOSAT-5","Meteosat Operational Programme 2 (MOP-2)","a2069a17-e6be-49f4-a796-72aede755493" -"Earth Observation Satellites","METEOSAT","METEOSAT-6","Meteosat Operational Programme 3 (MOP-3)","6f9f4776-ca2a-478a-b077-0b15fe8d2c3a" -"Earth Observation Satellites","METEOSAT","METEOSAT-7","METEOSAT-7","75d48be5-2e6d-442f-9e97-0146706f7261" -"Earth Observation Satellites","METEOSAT","METEOSAT-8","","1ef73a04-e012-4389-9646-cdeb7c04dc92" -"Earth Observation Satellites","METEOSAT","METEOSAT-9","","07dfead6-2cbc-4703-8533-c4d07e2ec67c" -"Earth Observation Satellites","METEOSAT","METEOSAT","Meteosat Operational Programme","dbfa9c1a-1853-4c48-8adf-f51ca6715c43" -"Earth Observation Satellites","METEOSAT","MSG","Meteosat Second Generation","5aac06ef-6ade-49b6-a98c-45516a9a646a" -"Earth Observation Satellites","METEOSAT","","","28eac19a-5500-4a21-af30-ab7a364ff8d0" -"Earth Observation Satellites","METOP","METOP-A","Meteorological Operational Satellite - A","8143808e-1005-4fed-a469-c2bd5f1521bf" -"Earth Observation Satellites","METOP","METOP-B","Meteorological Operational Satellite - B","c9f84df0-e807-46e3-8fce-c33e9201fbc2" -"Earth Observation Satellites","METOP","METOP-C","Meteorological Operational Satellite - C","6120cea0-c943-4c7c-bddd-8d8648d58022" -"Earth Observation Satellites","METOP","","","8c192c86-d07c-4e7b-af8f-92aa4b40fca7" -"Earth Observation Satellites","MOS (Japan Marine Observation Satellite)","MOS-1B","Japanese Marine Observation Satellite-1B","3f023faf-79fe-4efd-99cf-efdea9fd2e67" -"Earth Observation Satellites","MOS (Japan Marine Observation Satellite)","MOS-1","Japanese Marine Observation Satellite 1","cdf3698d-ace4-432b-80aa-8757f8d53d58" -"Earth Observation Satellites","MOS (Japan Marine Observation Satellite)","","","f835f27c-becb-4ad7-a2d5-c0385f3418f3" -"Earth Observation Satellites","Megha-Tropiques","MEGHA-TROPIQUES","Megha-Tropiques","b4306533-7593-4e76-b0e1-154a74e27d69" -"Earth Observation Satellites","Megha-Tropiques","","","7bca3532-02ec-4ab7-a01b-14185479c209" -"Earth Observation Satellites","Meteor","Meteor 2-21","","a94d5d7d-ef21-4849-aa30-854aedd21c69" -"Earth Observation Satellites","Meteor","Meteor-2","","8895542e-f840-4eeb-a615-b7871e6a580e" -"Earth Observation Satellites","Meteor","Meteor-3M","","5a326a88-e23a-42c3-967a-7150bbf2acda" -"Earth Observation Satellites","Meteor","Meteor-3","","b4ebacc9-59d5-45ae-95af-81d986d5ad3e" -"Earth Observation Satellites","Meteor","","","d1a7ef15-31ab-4647-918a-4a1d62028ae4" -"Earth Observation Satellites","NASA Decadal Survey","ACE (DECADAL SURVEY)","Aerosol - Cloud - Ecosystems","44de39ab-8595-42d9-8d9e-ca94c4da4b0c" -"Earth Observation Satellites","NASA Decadal Survey","ASCENDS","Active Sensing of CO2 Emissions over Nights, Days, and Seasons","5129ca8d-e299-4966-b0d9-a55c4b302601" -"Earth Observation Satellites","NASA Decadal Survey","CLARREO","Climate Absolute Radiance and Refractivity Observatory","86f284dc-ebd2-4c9c-93dc-1e0e26a0a033" -"Earth Observation Satellites","NASA Decadal Survey","GEO-CAPE","Geostationary Coastal and Air Pollution Events","cbd436e1-03bf-4e59-8b31-fac71597bc01" -"Earth Observation Satellites","NASA Decadal Survey","GRACE-FO","Gravity Recovery and Climate Experiment Follow-On","f75e34e2-ebe7-4a6c-8bf6-da596a36b632" -"Earth Observation Satellites","NASA Decadal Survey","HYSPIRI","Hyperspectral Infrared Imager","da4db91a-044b-4b01-ad1a-e1684e492adf" -"Earth Observation Satellites","NASA Decadal Survey","ICESat-2","Ice, Cloud, and land Elevation Satellite-2","0a7dad22-dace-4cdc-9a5b-7dfde4aa2822" -"Earth Observation Satellites","NASA Decadal Survey","SMAP","Soil Moisture Active and Passive Observatory","7ee03239-24ff-433e-ab7e-8be8b9b2636b" -"Earth Observation Satellites","NASA Decadal Survey","SWOT","Surface Water Ocean Topography","63b6f3d6-3e9a-40c9-ae91-13f580c7b6c3" -"Earth Observation Satellites","NASA Decadal Survey","","","9bdc4d60-38da-4d6c-ba2f-2a588aa9921b" -"Earth Observation Satellites","NASA Earth System Science Pathfinder","CALIPSO","Cloud-Aerosol Lidar and Infrared Pathfinder Satellite Observations","01b319ce-cbe2-4894-bb33-04c43ceef23b" -"Earth Observation Satellites","NASA Earth System Science Pathfinder","CloudSat","","f3a724fa-5d0c-4ca1-872b-41ef08ab7b5d" -"Earth Observation Satellites","NASA Earth System Science Pathfinder","GRACE","Gravity Recovery and Climate Experiment","2e7aa2e6-9d25-4c6e-aef3-6e86d3773bac" -"Earth Observation Satellites","NASA Earth System Science Pathfinder","OCO-2","Orbiting Carbon Observatory-2","6d5f222a-7750-4fd3-aa14-3c0d0059bc85" -"Earth Observation Satellites","NASA Earth System Science Pathfinder","OCO-3","","da687fb4-016d-4b4d-92c2-380640ca5640" -"Earth Observation Satellites","NASA Earth System Science Pathfinder","","","de1e0fd4-d865-4726-9bde-96804cf455b7" -"Earth Observation Satellites","NASA Small Explorer (SMEX)","AIM","Aeronomy of Ice in the Mesosphere","dda33ba1-2108-4297-a221-d94726c60792" -"Earth Observation Satellites","NASA Small Explorer (SMEX)","","","ec3e5f45-f6a2-4d1f-aa6f-51a638c7852f" -"Earth Observation Satellites","NIMBUS","Nimbus-1","","fc1b2147-7086-4164-a2e5-596f83e1431c" -"Earth Observation Satellites","NIMBUS","Nimbus-2","","486c2802-dca4-49a3-8bb8-4889e6961014" -"Earth Observation Satellites","NIMBUS","Nimbus-3","","acc28309-0d1a-4533-9b18-c5ac2b0deea8" -"Earth Observation Satellites","NIMBUS","Nimbus-4","","6b956645-9c85-4b3d-8771-159a62005911" -"Earth Observation Satellites","NIMBUS","Nimbus-5","","955e7643-bd77-44aa-ba05-f7b841ce582b" -"Earth Observation Satellites","NIMBUS","Nimbus-6","","6bbdcd8e-cbe4-48db-96e6-1d5f1dd1e857" -"Earth Observation Satellites","NIMBUS","Nimbus-7","Nimbus-7","0af3eeb1-3339-46ad-964f-2d18dce319fe" -"Earth Observation Satellites","NIMBUS","Nimbus","","df91d23f-2c02-4bc1-92c1-a105fb0deb05" -"Earth Observation Satellites","NIMBUS","","","f91ad0ef-29bd-4594-a843-60beaaf858ca" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA POES","NOAA Polar Orbiting Environmental Satellites","a2620edb-fa1b-4e76-99db-581a1766f22a" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-10","National Oceanic & Atmospheric Administration-10","19ca6acd-5a83-4f3c-8237-fd3178dad1af" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-11","National Oceanic & Atmospheric Administration-11","b2e2ad86-b73f-44fd-9992-6f32820ea847" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-12","National Oceanic & Atmospheric Administration-12","6b3f1f0f-353b-45b7-9dc0-567afa2c82c5" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-13","National Oceanic & Atmospheric Administration-13","4357816a-ede9-4a78-852c-fd6474671567" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-14","National Oceanic & Atmospheric Administration-14","d4bfa8e2-4ce3-482e-8b2a-1297f65fdc8a" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-15","National Oceanic & Atmospheric Administration-15","7441d55f-26c8-4f7f-ad75-1402c6a6e470" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-16","National Oceanic & Atmospheric Administration-16","53a886bf-db3f-4b8c-a111-ba6593dae207" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-17","National Oceanic & Atmospheric Administration-17","b4d60d40-59b9-46ab-a4c5-a2e534680b05" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-18","National Oceanic & Atmospheric Administration-18","37afee26-f2fd-47df-b8e0-7cccd71e6b8c" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-19","National Oceanic & Atmospheric Administration-19","b7461b99-2b6f-460a-ae7f-6bb37515684d" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-1","National Oceanic & Atmospheric Administration-1","f80b13a8-7692-4d1a-be08-851544cd0cde" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-2","National Oceanic & Atmospheric Administration-2","52354476-6975-457e-9d1d-e0f3b5e8f407" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-3","National Oceanic & Atmospheric Administration-3","613988b8-740a-461d-a24f-39cc84a8ba8d" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-4","National Oceanic & Atmospheric Administration-4","3e1c1312-4559-4318-a64f-d7aafd08550b" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-5","National Oceanic & Atmospheric Administration-5","550199a6-a331-4392-b5d3-30270c83f773" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-6","National Oceanic & Atmospheric Administration-6","b8b9a664-2e7e-4dae-8efc-1ce4ace7ac63" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-7","National Oceanic & Atmospheric Administration-7","fd4a398d-682c-4748-8349-83a8aa47cebf" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-8","National Oceanic & Atmospheric Administration-8","a6a7b0e4-f58a-42fe-b723-d6405d4afde2" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","NOAA-9","National Oceanic & Atmospheric Administration-9","304d5731-5627-4f4a-9b9e-3de6f39f9b3d" -"Earth Observation Satellites","NOAA POES (Polar Orbiting Environmental Satellites)","","","e8baa3a4-ef5a-455a-bf25-d61e59fc9bb3" -"Earth Observation Satellites","OGO (Orbiting Geophysical Observatory)","OGO-1","Orbiting Geophysical Observatory-1","b81f052e-9e45-4097-8189-f4c2f0572dd4" -"Earth Observation Satellites","OGO (Orbiting Geophysical Observatory)","OGO-2","Orbiting Geophysical Observatory-2","40b55ae6-fce7-46f1-aa84-ef7313056289" -"Earth Observation Satellites","OGO (Orbiting Geophysical Observatory)","OGO-3","Orbiting Geophysical Observatory-3","52dcf6a3-8b08-40a4-acb0-3c1c2fdc55cc" -"Earth Observation Satellites","OGO (Orbiting Geophysical Observatory)","OGO-4","Orbiting Geophysical Observatory-4","ff60d0cf-4665-40b6-b375-dd59dba896f9" -"Earth Observation Satellites","OGO (Orbiting Geophysical Observatory)","OGO-5","Orbiting Geophysical Observatory-5","38eefa42-2943-43d6-9186-d797d089c9df" -"Earth Observation Satellites","OGO (Orbiting Geophysical Observatory)","OGO-6","Orbiting Geophysical Observatory-6","fa5f5aff-4c2f-4613-b082-28454520544e" -"Earth Observation Satellites","OGO (Orbiting Geophysical Observatory)","","","e57b586f-09ba-45ad-868c-4c232d6034b4" -"Earth Observation Satellites","PLEIADES","Pleiades-1A","Pleiades-1A","a0b1f332-41b9-4eec-8a9e-67778193a679" -"Earth Observation Satellites","PLEIADES","Pleiades-1B","Pleiades-1B","92bdb34f-5df0-498d-b3c9-477ff3a1f80a" -"Earth Observation Satellites","PLEIADES","","","516a9bb2-0171-4ad2-8d4f-3f7d1219d393" -"Earth Observation Satellites","RADARSAT","RADARSAT-1","","d5e3bc6f-fea5-453e-9942-6ce982bca119" -"Earth Observation Satellites","RADARSAT","RADARSAT-2","","b9c23439-5e16-4329-b719-4704dd7903e6" -"Earth Observation Satellites","RADARSAT","","","705a396b-83dd-4223-b8be-f002f6b93502" -"Earth Observation Satellites","SAC","SAC-A","Satelite de Aplicaciones Cientifico - A","f3be80dc-37f6-44b9-afd4-37c261c13367" -"Earth Observation Satellites","SAC","SAC-C","Satelite de Aplicaciones Cientifico - C","12fff8c1-4062-48ce-a85e-ef85cc6fc370" -"Earth Observation Satellites","SAC","SAC-D","Satélite de Aplicaciones Científico - D","fb9164bb-4dba-4598-ba56-cb24d8db5527" -"Earth Observation Satellites","SAC","","","ea7e0cb4-5764-4ca4-89f6-913b22a47eff" -"Earth Observation Satellites","SMS (Synchronous Meteorological Satellites)","SMS-1","Synchronous Meteorological Satellite 1","3cb9e3b6-5d97-4258-a546-7a955c76cb8b" -"Earth Observation Satellites","SMS (Synchronous Meteorological Satellites)","SMS-2","Synchronous Meteorological Satellite 2","ca25d8a5-40d0-4eb7-9f3f-9c97074ef1be" -"Earth Observation Satellites","SMS (Synchronous Meteorological Satellites)","SMS","Synchronous Meteorological Satellites","389f0bec-1032-4b0b-9118-033c9b07402f" -"Earth Observation Satellites","SMS (Synchronous Meteorological Satellites)","","","9abcdc9a-6442-4e2e-848a-8b72b954896c" -"Earth Observation Satellites","SPOT","SPOT-1","Systeme Probatoire Pour l'Observation de la Terre-1","807f2f4d-1c2e-43ed-87f2-17d7dcced093" -"Earth Observation Satellites","SPOT","SPOT-2","Systeme Probatoire Pour l'Observation de la Terre-2","9a59260a-16a7-4853-8920-35ede91561ee" -"Earth Observation Satellites","SPOT","SPOT-3","Systeme Probatoire Pour l'Observation de la Terre-3","d333cd96-f1f0-4179-9fbc-162b18fcb8c8" -"Earth Observation Satellites","SPOT","SPOT-4","Systeme Probatoire Pour l'Observation de la Terre-4","5fe45cae-f4ce-4287-8af8-0d824807f3fc" -"Earth Observation Satellites","SPOT","SPOT-5","Systeme Probatoire Pour l'Observation de la Terre-5","08e3f2c8-0d9d-4f94-b2fe-bb110b151134" -"Earth Observation Satellites","SPOT","SPOT-6","Systeme Probatoire Pour l'Observation de la Terre-6","b5b5a3c9-a393-4766-a7d6-ef6c97969e78" -"Earth Observation Satellites","SPOT","SPOT-7","Systeme Probatoire Pour l'Observation de la Terre-7","5993e605-b045-43fb-bd9b-928892b7386d" -"Earth Observation Satellites","SPOT","","","5615d18d-4217-42a0-a53d-77298834fc2e" -"Earth Observation Satellites","Sentinel-1","Sentinel-1A","Sentinel-1A","c7279e54-f7c1-4ee7-a957-719d6021a3f6" -"Earth Observation Satellites","Sentinel-1","Sentinel-1B","Sentinel-1B","9940dbad-1a9a-4858-a0e8-af35b21277e2" -"Earth Observation Satellites","Sentinel-1","","","007c3084-89db-458e-8387-14e192b6cb8e" -"Earth Observation Satellites","Sentinel-2","Sentinel-2A","Sentinel-2A","6f1c359b-b1a6-47c1-979e-0689e637fbdc" -"Earth Observation Satellites","Sentinel-2","Sentinel-2B","Sentinel-2B","f2445400-1981-4ef3-bf7c-f4aa35923ae9" -"Earth Observation Satellites","Sentinel-2","","","2ce20983-98b2-40b9-bb0e-a08074fb93b3" -"Earth Observation Satellites","Sentinel-3","Sentinel-3A","Sentinel-3A","5449d87b-5573-450f-8acb-2fdfeab3c8ce" -"Earth Observation Satellites","Sentinel-3","Sentinel-3B","Sentinel-3B","41163801-6aac-43e5-aed7-9f52613a6a73" -"Earth Observation Satellites","Sentinel-3","","","8a19f309-46ee-424b-be9f-e7e57e5b8ca0" -"Earth Observation Satellites","Sentinel-5","Sentinel-5P","Sentinel-5 Precursor","77e9a75e-2c3b-428b-8b21-b6a902dd8fee" -"Earth Observation Satellites","Sentinel-5","","","dc626ae7-1ebe-4b9d-9b73-c048fa92434f" -"Earth Observation Satellites","Sentinel-6","Sentinel-6A","Sentinel-6A","1f0f5178-9d7a-41ae-8f04-d6262415c30c" -"Earth Observation Satellites","Sentinel-6","","","0df95c0e-77a5-46b5-94f4-3e5ae1391450" -"Earth Observation Satellites","Swarm","Swarm-A","","054787a6-0c47-43af-a4ee-05c572dd1705" -"Earth Observation Satellites","Swarm","Swarm-B","","ab7f9a64-ca5d-4795-94ff-fd5367d39f9f" -"Earth Observation Satellites","Swarm","Swarm-C","","769a52d4-7db1-4b8e-8d39-6fee4e74d34f" -"Earth Observation Satellites","Swarm","","","1d6d5f82-acd5-4bd2-9324-12884718b353" -"Earth Observation Satellites","TIROS","TIROS-2","Television Infrared Observation Satellite-2","abcc3bb4-8f36-4008-b12e-d29b028ecad9" -"Earth Observation Satellites","TIROS","TIROS-3","Television Infrared Observation Satellite-3","0752330f-2d01-4129-89da-8544369206cb" -"Earth Observation Satellites","TIROS","TIROS-4","Television Infrared Observation Satellite-4","d6369522-f750-4946-9946-2d2ed6ce56b5" -"Earth Observation Satellites","TIROS","TIROS-7","Television Infrared Observation Satellite-7","d39b3bd9-de76-4a80-841f-57c9be70ed5b" -"Earth Observation Satellites","TIROS","TIROS-M","Television Infrared Observation Satellite-M","292335bb-5733-4f54-bb1f-84ab20f838f3" -"Earth Observation Satellites","TIROS","TIROS-N","Television Infrared Observation Satellite-N","51bf313d-a403-412e-b672-a1312e823675" -"Earth Observation Satellites","TIROS","TIROS","Television Infrared Observation Satellite","6096b1ec-25d5-4b9b-9358-a17d8b481646" -"Earth Observation Satellites","TIROS","","","75b34f33-a790-4164-9cc0-02a997279e61" -"Earth Observation Satellites","","AJISAI","Experimental Geodetic Satellite (Japanese EGS)","3a152f3f-de95-4b7a-88c8-7c26fb4ba368" -"Earth Observation Satellites","","ALOS-2","Advanced Land Observing Satellite-2","e4009ba2-7e5d-41ea-b4f9-c45788ad8589" -"Earth Observation Satellites","","ALOS","Advanced Land Observing Satellite","0bf5fb56-9d29-438a-a84f-a60296a2e503" -"Earth Observation Satellites","","ARGON","","d35399a9-d4dc-45f2-b69d-55160ac26d10" -"Earth Observation Satellites","","Aeolus","Earth Explorer Atmospheric Dynamics Mission Aeolus","e31c4750-9903-4de7-95ef-faa9610f3a63" -"Earth Observation Satellites","","Aquarius_SAC-D","Aquarius SAC-D","e13d801e-19a3-4516-a64c-27f003b3d963" -"Earth Observation Satellites","","Aqua","Earth Observing System, Aqua","ea7fd15d-190d-43f3-bdd3-75f5d88dc3f8" -"Earth Observation Satellites","","Aura","Earth Observing System, Aura","59d2e030-5377-4b5b-92ce-f488d418c45f" -"Earth Observation Satellites","","CASSIOPE","Cascade SmallSat and Ionospheric Polar Explorer","66f5d236-40fb-4a41-96a4-761d48103765" -"Earth Observation Satellites","","CFOSAT","Chinese-French Oceanography Satellite","7c3fab1c-d17e-4e5c-870e-994793c2594e" -"Earth Observation Satellites","","CHAMP","Challenging Minisatellite Payload","f5509236-8a81-4ebe-af91-d65aa58d4ab5" -"Earth Observation Satellites","","CLARREO Pathfinder","","6bfd2526-e039-40e0-9abe-ac370f755d20" -"Earth Observation Satellites","","COMS","Communication, Ocean and Meteorological Satellite","ec484699-009f-4f39-93aa-d11379b4288a" -"Earth Observation Satellites","","CORIOLIS","Coriolis","bac2e743-1d02-4868-8bd6-b8b8741e3794" -"Earth Observation Satellites","","CORONA","","14bedb8d-7d18-4ae6-9882-9cf87bd3824e" -"Earth Observation Satellites","","COSMO-SKYMED","Constellation of Small Satellites for Mediterranean basin Observation","97116573-f0a2-4e18-8601-77e43b717be6" -"Earth Observation Satellites","","COSMO-SkyMed Second Generation (CSG)","COSMO-SkyMed Second Generation (CSG)","b359999f-bb1e-43de-ae6e-1e9dc44e752a" -"Earth Observation Satellites","","CRRES","Combined Release and Radiation Effects Satellite","c0f0a8dc-bcfd-4959-bb06-692501b9c2bb" -"Earth Observation Satellites","","CRYOSAT","CRYOSAT","e377ef25-1612-4b8d-ac98-54e3977d7e31" -"Earth Observation Satellites","","CYGNSS","Cyclone Global Navigation Satellite System","18fd52d4-c60c-4ef5-b39a-960ae9916472" -"Earth Observation Satellites","","DASH-2","","4ccfdd4d-3ec2-412d-b49e-fccf2cdc7c35" -"Earth Observation Satellites","","ENVISAT","Environmental Satellite","a1498dff-002d-4d67-9091-16822c608221" -"Earth Observation Satellites","","EO-1","Earth Observing 1","19a621c6-f735-4972-ab32-fcf001a38a46" -"Earth Observation Satellites","","EP-TOMS","Earth Probe-TOMS","16d6e31d-f61a-4caa-b51d-8648a4e915c9" -"Earth Observation Satellites","","ERBS","Earth Radiation Budget Satellite","d69f8964-e168-489e-9bda-a273f9a3a167" -"Earth Observation Satellites","","EROS-A1","","ca01c6b2-f799-4f8a-bb33-d553a244048e" -"Earth Observation Satellites","","EROS-B1","","ce7434f6-7558-434a-afbf-c29500e4ca0d" -"Earth Observation Satellites","","EXOS-A","","5753c582-923c-4b37-9985-c2dc006c6337" -"Earth Observation Satellites","","EarthCARE","Earth Clouds, Aerosol and Radiation Explorer","bf66ef8c-acc5-4c2f-b519-db0cbee37c99" -"Earth Observation Satellites","","FASTSAT-1","Fast, Affordable, Science and Technology SATellite, 1","3fd43f36-3fbf-462b-8a3f-2eb6f5219b3e" -"Earth Observation Satellites","","FLEX","Fluorescence Explorer (FLEX)","acfdfa87-7490-47db-a1dd-94a3bfb6a16d" -"Earth Observation Satellites","","FORMOSAT-2","FORMOSAT-2","2a5acbda-7149-4bf7-8be2-9076f07e9b7f" -"Earth Observation Satellites","","FSSCat","","b369f647-96ad-4418-84d2-ee5fed065863" -"Earth Observation Satellites","","FY-3A","FengYun-3A","2f734fc9-2cfa-4a60-b71e-1357a168fbd1" -"Earth Observation Satellites","","FY-3B","FengYun-3B","f0030752-05f7-404b-9dd1-2b159d6be13e" -"Earth Observation Satellites","","GA-EMS OTB-2","General Atomics Electromagnetic Systems Orbital Test Bed 2","37f7b455-082f-4385-89d7-9292e9f9c750" -"Earth Observation Satellites","","GCOM-C","Global Change Observation Mission – Climate","18512c09-2590-4804-8b43-dd9caea53b5d" -"Earth Observation Satellites","","GCOM-W1","Global Change Observation Mission 1st-Water","8781da14-5ced-4d64-81cd-8daa10a1c30d" -"Earth Observation Satellites","","GEO-KOMPSAT-2B","Geostationary - Korea Multi-Purpose Satellite-2","20950d05-0365-4984-9d9c-2c7845b4611a" -"Earth Observation Satellites","","GEOEYE-1","GeoEye-1","47943416-e045-4d6d-b18e-3d1cc51734e0" -"Earth Observation Satellites","","GEOSTATIONARY SATELLITES","","2c8530dc-b6cc-445f-87dc-36e76a1cb29c" -"Earth Observation Satellites","","GFZ-1","GeoForschungsZentrum-1","976e92c4-150c-4068-bed5-60d5f030d7e2" -"Earth Observation Satellites","","GLORY","","40e64334-e37c-4292-8b72-67c93bb24d41" -"Earth Observation Satellites","","GOMS","Geostationary Operational Meteorological Satellite","55823c7c-0503-4012-911e-d503ff62f750" -"Earth Observation Satellites","","GOSAT-2","Green-house gas Observing Satellite - 2","67c230f3-5587-4f74-84d1-4c24a74276e4" -"Earth Observation Satellites","","GOSAT","Greenhouse Gases Observing Satellite","a21322af-38e0-4386-8e9b-9bf25cf30e16" -"Earth Observation Satellites","","GPM","Global Precipitation Measurement","33a893cb-b328-462e-9cb0-d8c27823239e" -"Earth Observation Satellites","","HCMM","Heat Capacity Mapping Mission","20dc9390-40d9-441e-86d2-4ab1e97a276b" -"Earth Observation Satellites","","HEXAGON KH-9","HEXAGON KH-9 Reconnaissance Satellite","7d97b6ca-83de-44e1-8d3b-f45755e38a8d" -"Earth Observation Satellites","","HJ1A","","d65fc363-e9b4-410a-b5e3-8dbd87b510b4" -"Earth Observation Satellites","","HJ1B","","3edef6e1-db0b-4806-b586-8869a7c986ba" -"Earth Observation Satellites","","HY2-A","Haiyang-2A","fe07a2e4-a6cd-401c-af3e-433bbc8c2c98" -"Earth Observation Satellites","","HY2-B","Haiyang-2B","7ef45b8e-ac63-41b2-9e8b-7becfa7d7431" -"Earth Observation Satellites","","ICESat","Ice, Cloud and Land Elevation Satellite","71536bf5-2d19-4c63-a127-95264da38082" -"Earth Observation Satellites","","ICEYE","ICEYE","42c6ff80-849b-4ef5-b6ff-fd9416b8cf33" -"Earth Observation Satellites","","ICON","Ionospheric Connection Explorer","4a3988a7-f1c6-4c0a-a93b-9221adbca49b" -"Earth Observation Satellites","","IKONOS","IKONOS","c84a3a2f-b4a1-4306-9fcf-7d22ab12f252" -"Earth Observation Satellites","","IMAGE","Imager for Magnetopause -to - Aurora Global Exploration","95985c5e-3904-4710-8f45-8157f0171a0a" -"Earth Observation Satellites","","JASON-1","","4ea59dad-ed94-453e-a991-62c790a1d101" -"Earth Observation Satellites","","JASON-3","Joint Altimetry Satellite Oceanography Network - 3","bffa816a-c210-46ed-81cb-ffdf3310c1a5" -"Earth Observation Satellites","","Kanopus-V","Environmental Satellite Kanopus-V","a93bb213-7862-4aa5-a113-38669e557a76" -"Earth Observation Satellites","","LANYARD","","81d3b212-1f8f-4ac8-8292-dce0eb8f3a9c" -"Earth Observation Satellites","","LAPAN-TUBSAT","","3e634ba7-19fc-45ce-9d50-14e108a567ef" -"Earth Observation Satellites","","LARES","LAser Relativity Satellite","ef053df7-ff76-47f3-a335-5d4e87e51b92" -"Earth Observation Satellites","","MAGSAT","","8ba6dbf3-9537-4c10-8254-128d49ef9c17" -"Earth Observation Satellites","","MIDAS 2","Missile Defense Alarm System 2","cc93fc95-4b03-4d67-ab48-8216434a8944" -"Earth Observation Satellites","","MMS","Magnetospheric Multiscale","76673a7f-44c8-4dde-83c2-1104b060061f" -"Earth Observation Satellites","","MONITOR-E","","11212d0c-dd70-46ff-9082-ce3e44a49280" -"Earth Observation Satellites","","MSTI-2","Miniature Sensor Technology Integration-2","68d7cb26-318b-4149-bb75-adc6e3863483" -"Earth Observation Satellites","","MT1","Megha-Tropiques","9e09177b-bc72-41e9-921a-a4546f89e20a" -"Earth Observation Satellites","","MTSAT-1R","Multi-functional Transport Satellite 1 Replacement","fc4a8eda-b910-4df6-8012-d573e5835707" -"Earth Observation Satellites","","MTSAT-2","The Multi-functional Transport Satellite 2","02db0949-495c-4579-8ff5-d1a9079c88b7" -"Earth Observation Satellites","","MTSAT","Multi-functional Transport Satellite","e3679e9e-5a95-46f4-a856-e51d459469fd" -"Earth Observation Satellites","","Meteor-M N1","Meteorological Satellite Meteor-M N1","34e29a6e-63ef-4701-9f03-4dd233f146f6" -"Earth Observation Satellites","","Meteor-M N2","Meteorological Satellite Meteor-M N2","20e6f8e4-f60d-4ffb-ab85-0423c5078a52" -"Earth Observation Satellites","","NCEP GTS","National Centers for Environmental Prediction Global Telecommunications Systems","efdc8649-0ef2-4d41-999a-2bb104a06f34" -"Earth Observation Satellites","","NISAR","NASA-ISRO Synthetic Aperture Radar","a6fddcb3-881b-484a-bbc9-39591b6359ab" -"Earth Observation Satellites","","NPOESS (National Polar-orbiting Operational Environmental Satellite System )","","45ec5189-ffc5-452d-b365-f6989f1433f1" -"Earth Observation Satellites","","OCO","Orbiting Carbon Observatory","3e77610e-bb50-4c45-a62a-c50194ec16c2" -"Earth Observation Satellites","","ODIN","ODIN","1f7c6ae3-d38e-42b7-a874-60298b0fcfa1" -"Earth Observation Satellites","","OKEAN-O","Ukranian-Russian Ocean Remote Sensing System","53d5ea21-07bb-44b5-88e6-3775e90ca528" -"Earth Observation Satellites","","OSTM/JASON-2","Joint Altimetry Satellite Oceanography Network - 2","987f0e52-e554-475a-b680-50df620a520e" -"Earth Observation Satellites","","OrbView-1","OSC Microlab-1 Satellite","7a186060-a313-4047-ba21-27a0ffdff8e4" -"Earth Observation Satellites","","OrbView-2","Orbital Sciences Corporation OrbView-2 Satellite","aef85316-b8f8-422a-add0-8130b113fa7d" -"Earth Observation Satellites","","PACE","Plankton, Aerosol, Cloud, ocean Ecosystem mission","eb4175de-3ee7-4897-bbbe-590ad7e09b4f" -"Earth Observation Satellites","","PAGEOS 1","Passive Geodetic Earth Orbiting Satellite 1","43a6ecc5-a1d4-4b89-8d4d-e04a10264ab6" -"Earth Observation Satellites","","PARASOL","Polarization and Anisotropy of Reflectances for Atmospheric Sciences coupled with Observations from a Lidar","aef6c60c-b5c5-46b9-9a84-d99a9c08b06a" -"Earth Observation Satellites","","PAZ","SAR Observation Spanish Satellite","8ac70aba-53e7-45c0-8b4a-2c0197114b09" -"Earth Observation Satellites","","PROBA-1","Project for On-Board Autonomy, PROBA-1","fe4a4604-029e-4cdc-93f0-6d8799dd25e5" -"Earth Observation Satellites","","PROBA-2","Project for On-Board Autonomy, PROBA-2","ce3e3563-34ff-4a39-8c81-c9856758e403" -"Earth Observation Satellites","","PROBA-3","Project for On-Board Autonomy, PROBA-3","96a26a3b-bd87-462e-b155-f57677bf4b83" -"Earth Observation Satellites","","PlanetScope","PlanetScope","6fffd5bf-1d22-487a-8b4c-495992ef3b28" -"Earth Observation Satellites","","Proba-V","Project for On-Board Autonomy - Vegetation","6f507389-2c7c-41b4-a638-95bdc73b63a3" -"Earth Observation Satellites","","QUICKBIRD-2","DigitalGlobe's QuickBird-2","4240f2ff-8d4a-438d-bbae-f62ae3504922" -"Earth Observation Satellites","","QUICKBIRD","DigitalGlobe's QuickBird","04c144cb-2195-4dd7-a7d3-8dacfb550abd" -"Earth Observation Satellites","","QUIKSCAT","QUIKSCAT","5ab01e26-7baf-4960-bd6e-cb64b47cbfed" -"Earth Observation Satellites","","RAPIDEYE","RapidEye","439293ac-ef6a-4f4c-a578-a57d504e783a" -"Earth Observation Satellites","","RESURS-O1","","75227aec-09d6-47e5-bdd1-4eeed285ff9b" -"Earth Observation Satellites","","Resurs DK 1","Environmental Satellite Resurs-DK N1","ff2141a6-5682-44da-88fc-9a4e78de35ad" -"Earth Observation Satellites","","Resurs-P N1","Environmental Satellite Resurs-P N1","a7560954-fe13-4e8a-bb12-1289154a3a24" -"Earth Observation Satellites","","Resurs-P N2","Environmental Satellite Resurs-P N2","b00d17a2-b509-4b42-86fd-d50bf50cfc3c" -"Earth Observation Satellites","","SAGE-III","Stratospheric Aerosol and Gas Experiment-III","c7063bba-13bf-45e1-be70-7499be35d304" -"Earth Observation Satellites","","SARAL","Satellite with ARgos and ALtiKa","4e62dd32-7776-4646-ae8d-b85d97df415a" -"Earth Observation Satellites","","SATELLITES","SATELLITES","17b1489c-fba7-4252-bf23-b981148343f1" -"Earth Observation Satellites","","SCATSAT-1","Scatterometer Satellite-1","fbfed562-4772-48fe-b2bb-7ebced3a7c9f" -"Earth Observation Satellites","","SCD","Satellites de Coleta de Dados","7b07a0be-b4c9-4837-9521-287bf07198aa" -"Earth Observation Satellites","","SCISAT-1/ACE","Atmospheric Chemistry Experiment","5419ac51-33aa-4f66-bc37-9f2c73846c9e" -"Earth Observation Satellites","","SEASAT 1","Ocean Dynamics Satellite","1bffe898-f4a2-458e-92c5-cd7c9c1cd5f0" -"Earth Observation Satellites","","SES-14","","8dd76819-1baa-4ccd-8544-23c2923f2d84" -"Earth Observation Satellites","","SME","Solar Mesospheric Explorer","4e357ecc-78bd-4da7-b28a-4b34f61f8587" -"Earth Observation Satellites","","STARLETTE","","9b6eb5b1-08b6-435f-9e25-ad95e017fb32" -"Earth Observation Satellites","","STELLA","","149dcad2-bf7c-4c0c-bb53-5ae32d71ecfb" -"Earth Observation Satellites","","SUNSAT","Stellenbosch University Satellite","8798ac25-d327-4d6e-910f-d06306133f88" -"Earth Observation Satellites","","SkySat","SkySat constellation","e9611632-822d-468b-9748-a392991a0718" -"Earth Observation Satellites","","Spire","Spire constellation","da278af5-097b-47e7-903d-4deac395c4de" -"Earth Observation Satellites","","TDX","TanDEM-X","6c21f29b-5dd4-4e96-a6fb-44e4788d1973" -"Earth Observation Satellites","","THEOS","Thai Earth Observation System","84ddaf4a-fe17-4f01-becf-8164ae255b73" -"Earth Observation Satellites","","TIMED","Thermosphere, Ionosphere, Mesosphere Energetics and Dynamics","5ab193bc-b931-41ac-819b-e49391abd272" -"Earth Observation Satellites","","TIPS","Tether Physics and Survivability","7b9c2b8c-0f57-42bc-ab52-ba3cf542f14e" -"Earth Observation Satellites","","TIUNGSAT-1","","f1503638-4366-4025-8d27-6aefedc4c4dd" -"Earth Observation Satellites","","TOPEX/POSEIDON","Ocean Topography Experiment","e5eb6afb-5d3e-4767-ad08-5293c5b2d88b" -"Earth Observation Satellites","","TOPSAT","","24e15a6d-d600-4eb1-9757-022a19f583fe" -"Earth Observation Satellites","","TRMM","Tropical Rainfall Measuring Mission","89c509e6-13f6-4d6e-b46c-0479d2c7d88d" -"Earth Observation Satellites","","TROPICS/01","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 01","66445c7d-6628-4955-8403-17cbe4a1de4a" -"Earth Observation Satellites","","TROPICS/02","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 02","5f2b1f43-f737-4236-8231-5f89d1802cf6" -"Earth Observation Satellites","","TROPICS/03","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 03","ccf920b3-c5a0-4408-8c84-0cc8743adc33" -"Earth Observation Satellites","","TROPICS/04","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 04","f1594cda-7e89-4cab-8c6f-02ee081b59a5" -"Earth Observation Satellites","","TROPICS/05","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 05","1071feea-75f0-49f7-a87a-9e08b153ccc3" -"Earth Observation Satellites","","TROPICS/06","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 06","bd1174ed-f4ed-463a-b372-de14e45d658b" -"Earth Observation Satellites","","TROPICS/07","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 07","9f7b095a-94af-4ca3-8917-d1e1b8b99b80" -"Earth Observation Satellites","","TSINGHUA-1","","f9922bc7-cbad-4230-ad65-08c5998a8e0f" -"Earth Observation Satellites","","TSX","TerraSAR-X","a5c7a4c7-bbf4-42df-a754-20cb6b98317a" -"Earth Observation Satellites","","Terra","Earth Observing System, Terra (AM-1)","80eca755-c564-4616-b910-a4c4387b7c54" -"Earth Observation Satellites","","UARS","Upper Atmosphere Research Satellite","b6c5c7d5-ad6a-4cdd-82cc-9259377ff044" -"Earth Observation Satellites","","VANGUARD","","9db79338-5030-45c2-9bf7-c81bfcefb9e1" -"Earth Observation Satellites","","WESTPAC","Western Pacific Laser Satellite","3d031666-2116-4ebc-8daa-3e98ddcf4f60" -"Earth Observation Satellites","","WORLDVIEW-1","DigitalGlobe WORLDVIEW-1","7f13b4d2-9114-4890-ac6d-30da1a333d74" -"Earth Observation Satellites","","WORLDVIEW-2","DigitalGlobe WORLDVIEW-2","ff0ed18d-c476-4dc4-a248-d42ad74bb4a1" -"Earth Observation Satellites","","WORLDVIEW-3","DigitalGlobe WORLDVIEW-3","dfb49f10-0755-464f-96b1-fc037802c86d" -"Earth Observation Satellites","","WORLDVIEW-4","DigitalGlobe WORLDVIEW-4","341b5eb7-19bd-4337-83f3-885730103df1" -"Earth Observation Satellites","","ZEIA","","6365670e-6e12-437d-baa9-d1deecd87fba" -"Earth Observation Satellites","","Zhangheng 1","Zhangheng 1","52ae802c-b2fd-4548-aefd-ec4e4325b803" -"Earth Observation Satellites","","","","3466eed1-2fbb-49bf-ab0b-dc08731d502b" -"In Situ Land-based Platforms","AIR MONITORING STATIONS/NETWORKS","BAPMON","Background Air Pollution Monitoring Stations","cb5fc8b1-e8e3-4984-84ac-03f6f4d8a662" -"In Situ Land-based Platforms","AIR MONITORING STATIONS/NETWORKS","ESRL STATIONS","NOAA Earth Science Research Laboratory Stations","c775e963-be99-4dcf-8edd-ab826995dcba" -"In Situ Land-based Platforms","AIR MONITORING STATIONS/NETWORKS","GMCC","NOAA Geophysical Monitoring for Climatic Change Stations","7e99dce7-ccef-4e44-a234-9af5ffa83e4f" -"In Situ Land-based Platforms","AIR MONITORING STATIONS/NETWORKS","","","76ba9890-0da6-4567-8b8b-0deff9108ef2" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","Analytical Lab","","ac63eed1-779d-4085-92f8-5743ec64a942" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","FDSN","Federation of Digital Seismographic Networks","0768c45e-417b-4c35-aeb3-28e4325ef2d2" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","GEODYNAMIC STATIONS","","106de241-cb93-4ccc-8255-71784fd14b0c" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","GEOMAGNETIC STATIONS","","1fc48515-92a3-48a6-bbf0-61dfb23b1c9c" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","GEOMET","USGS Desert Winds Geological/Meteorological Ground Station","42f675c4-e14a-455c-b3f3-7cff1a7025f9" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","GRAVITY STATIONS","","9a869e6f-df72-49dd-ac66-b9d319b9db77" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","GSN","Global Seismic Network","abb8c7fb-7b79-4eb3-8106-5152b8bdf8a3" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","IRIS-GSN","Incorporated Research Institutions for Seismology Network - Global Seismographic Network","5423963b-822b-4eac-8442-c9fab383f5e8" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","PASSCAL","Program for Array Seismic Studies of the Continental Lithosphere","c0872e6c-ddab-43b9-a892-1b8c5ba23f4e" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","SEISMOLOGICAL STATIONS","","182fc560-a2b1-4c9d-9acf-febe0e1bf179" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","SGO","Superconducting Gravimeter Observatory","feb61055-a920-4fe3-90a2-caac0c4fd08a" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","VOLCANO OBSERVATORY","","7f62a51d-7391-418c-8589-b9a4e7d20452" -"In Situ Land-based Platforms","GEOPHYSICAL STATIONS/NETWORKS","","","4ce2e520-9a55-44fe-8f2c-93d64f4eef63" -"In Situ Land-based Platforms","HYDROLOGICAL STATIONS","PMS","Permafrost Monitoring Stations","465b92cd-6189-4a04-8ee7-484a1da7722f" -"In Situ Land-based Platforms","HYDROLOGICAL STATIONS","STREAMFLOW STATION","STREAMFLOW STATION","7b335954-929b-4568-a758-1640d15c2504" -"In Situ Land-based Platforms","HYDROLOGICAL STATIONS","","","73d106f1-2ba9-47db-ae92-6550a024744c" -"In Situ Land-based Platforms","MOBILE STATIONS/VEHICLES","HAGGLUND","NZAP Hagglund Oversnow Vehicle","d308b30a-fdb5-44e1-9ce8-6b67051938f4" -"In Situ Land-based Platforms","MOBILE STATIONS/VEHICLES","NSRN","NOAA Solar Radiation Network","5f65fc52-a4f7-4ae0-a352-74fae989f9aa" -"In Situ Land-based Platforms","MOBILE STATIONS/VEHICLES","PAM-II","Portable Automated Mesonet II","0e3131f5-f92d-441e-bba3-e28e55cfead7" -"In Situ Land-based Platforms","MOBILE STATIONS/VEHICLES","PAM","Portable Automated Mesonet","7fe65a2b-756a-43a7-8ee6-d9ff2eb33f4c" -"In Situ Land-based Platforms","MOBILE STATIONS/VEHICLES","SV","Snow Vehicle","eb24a648-bc31-48ad-935a-bbd2621da456" -"In Situ Land-based Platforms","MOBILE STATIONS/VEHICLES","","","c76b3744-6047-4ba9-9364-ebe1a0e3c502" -"In Situ Land-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","COASTAL STATIONS","COASTAL STATIONS","897f64c0-14e3-48d8-99fe-a589f57133d0" -"In Situ Land-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","CODAR SeaSonde","","294cc889-28bc-4a33-b630-8225f559c3e7" -"In Situ Land-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","","","62e9613a-6e40-41cf-838a-ed6ac0d4871b" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","GONG NETWORK","Global Oscillation Network Group","44c310ff-2688-48bd-a1eb-6e8a80a78bf0" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","MIO","Mobile Ionospheric Observatory","a8cf26fe-dcfb-462b-ae0e-5d7280ecfa38" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","NEUTRON MONITOR STATIONS","","a5e3eadc-b8a0-4b3b-92e4-10ae18e3041f" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","RSTN","Radio Solar Telescope Network","f56e3e86-8e09-44ac-a4bb-6da59e9dcc2c" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","SID","Sudden Ionospheric Disturbance Stations","73f8e476-b048-4f4d-b350-8987e3862e45" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","SOON","Solar Observing Optical Network","3ca305ea-d322-46f1-8aa4-469f8d3cdd59" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","SURFRAD","Surface Radiation Budget Network","d5456efc-ae6c-4c68-8b5e-66e40226d897" -"In Situ Land-based Platforms","SOLAR/SPACE MONITORING STATIONS","","","a143e5f5-4e4c-45cb-8053-5c9f6a099784" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","AGBFM","Advanced Ground Based Field Mill","0b011fe7-4a05-4e04-92f6-fa23b9e85e1a" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","ANTHMS","Antarctic Hydrometric Stations","a7d17dd8-34f9-44ed-bb30-2742db429707" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","ARWS","Automatic Remote Weather Station","1fe1486b-3f7a-41a8-9400-98607b49ca3e" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","ASOS","Automated Surface Observing System","b8d95bb8-6841-4a77-8ae7-53375a98bf8f" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","AWOS","Automated Weather Observing System","51368be1-9b75-43de-8a73-e525c9b3848c" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","ENTLN","Earth Networks Total Lightning Network (ENTLN)","1ab2e0db-8911-434d-a6ba-3917730e83a6" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","GAW","Global Atmospheric Stations","7effe54c-3378-470d-a0de-5eeab1109867" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","LDAR","Lightning Detection and Ranging","af4130b5-af02-4602-9e05-81405cfe6dc5" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","LPATS","Lightning Positioning and Tracking System Network","db3774b8-9dc1-4ae7-a999-80702cdfa41d" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","MESONET","Mesoscale Meteorological Network","3232dc8a-d223-4df2-b64a-4bd4fb632f9e" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","METEOROLOGICAL STATIONS","METEOROLOGICAL STATIONS","9b51d8b7-1ad3-4ca4-985b-e178bb17f745" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","MIPS","Mobile Integrated Profiling System","4576f6dc-d2c6-460b-9001-248043a65765" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","NLDN","National Lightning Detection Network","081f2d22-ca33-437f-b945-57397fd24247" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","NPN","NOAA Profiler Network","522c7bf2-c8dd-42be-8596-742ccea0f99d" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","PROFS","Program for Regional Observing and Forecast Systems Mesonet","04c212d2-4091-452d-b672-92d19547f7c2" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","SMART-R","Shared Mobile Atmospheric Research and Teaching Radar","78d5b254-ae1d-4014-99a0-77e6ccd90e6f" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","SOLAR RADIATION STATIONS","","30778eeb-9fab-4503-a230-1fc470f297ed" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","TMRS2","Tower Mounted Radiometer System 2","e9046495-96f1-4f28-9ca0-9f35b10c7c14" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","Vaisala HydroMet AWS","Vaisala HydroMet Automatic Weather Station","6c9e32c9-bcc2-4e70-97a1-8a31a23ba65a" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","WEATHER STATIONS","WEATHER STATIONS","1551f765-cbb8-479f-a796-87c61868c509" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","WWLLN","World Wide Lightning Location Network","0b6bafa6-1cc4-47eb-9925-f72c6d6008fc" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","X-POW","X-band Polarimetric Weather Radar","8ba138b3-efea-491a-8595-e06bd53f7e2e" -"In Situ Land-based Platforms","WEATHER STATIONS/NETWORKS","","","57b7373d-5c21-4abb-8097-a410adc2a074" -"In Situ Land-based Platforms","","ACARS","ACARS Ground Receiving Station","c1b6934c-bcb3-45f3-bc53-60d856ac7ea1" -"In Situ Land-based Platforms","","AES","Atmospheric Environment Service","04dae41e-7a74-4750-89b6-1ea717cce9d2" -"In Situ Land-based Platforms","","COMPUTERS","COMPUTERS","936822a8-ce02-49aa-970f-b4a92dfd769b" -"In Situ Land-based Platforms","","CONTROL SURVEYS","","9909bdb4-b48b-40b0-88b3-360f9b86d0bc" -"In Situ Land-based Platforms","","Data Collections","","c10044b3-6ebc-413a-99b7-2be30c08e507" -"In Situ Land-based Platforms","","FIELD INVESTIGATION","FIELD INVESTIGATION","c7b39580-1632-4951-aecd-cee1c1afc5a0" -"In Situ Land-based Platforms","","FIELD SURVEYS","FIELD SURVEYS","cca1ba09-0595-4ab0-a28f-158f988e9301" -"In Situ Land-based Platforms","","FIXED OBSERVATION STATIONS","FIXED OBSERVATION STATIONS","2219e7fa-9fd0-443d-ab1b-62d1ccf41a89" -"In Situ Land-based Platforms","","GREAT WALL STATION","CHINESE GREAT WALL STATION","92aae4b1-cd4c-41b8-b931-4c2b70790baf" -"In Situ Land-based Platforms","","GROUND STATIONS","GROUND STATIONS","491d3fcc-c097-4357-b1cf-39ccf3592347" -"In Situ Land-based Platforms","","GROUND-BASED OBSERVATIONS","GROUND-BASED OBSERVATIONS","dbcead38-c78b-4306-b56f-0ea15c0b755b" -"In Situ Land-based Platforms","","IMPROVE","IMPROVE ambient monitoring network","d8b8c801-bc1a-4ecc-a8e8-6757e9aeddc4" -"In Situ Land-based Platforms","","Ice Shelf","","dd445d5a-14d5-4813-b1cb-243799a044f7" -"In Situ Land-based Platforms","","LABORATORY","LABORATORY","3cbb9f17-ddb1-48d3-a507-786887e485af" -"In Situ Land-based Platforms","","OBSERVATORIES","","ae0531ae-ee94-4861-bcd0-5b9000b87c38" -"In Situ Land-based Platforms","","PHOTOSYNTHESIS CHAMBER","PHOTOSYNTHESIS CHAMBER","ec465fa3-b45e-4f0f-8a3b-857f91c8dbed" -"In Situ Land-based Platforms","","PML","Plymouth Marine Laboratory","1af8c9c7-d980-43a0-9685-b2fbd3a10d0c" -"In Situ Land-based Platforms","","Publications","","2e555886-1baa-4f05-899b-1d14ab69fe62" -"In Situ Land-based Platforms","","RADIO TRANSMITTERS","","e7057cfa-7b76-494b-b07b-01d1b284bfc6" -"In Situ Land-based Platforms","","SOLAR OBSERVATORY STATIONS","","5d5dddb9-ba89-49c4-bf06-d9abbe56b329" -"In Situ Land-based Platforms","","SURFACE WATER WEIR","SURFACE WATER WEIR","a0dc24a6-75d5-48c4-aa94-0a0c9c4a440a" -"In Situ Land-based Platforms","","TRAVERSE","Logistic tractor traverse","ea573a26-c698-482d-9f1a-09193067bb46" -"In Situ Land-based Platforms","","TRIPOD","","9c44243f-3122-4f7f-98b1-fb4e729418e0" -"In Situ Land-based Platforms","","","","4f396ff6-7bea-4ba4-afa3-198ebd914a4a" -"In Situ Ocean-based Platforms","BUOYS","BUOYS","","3c5df34c-b231-460d-b3b6-4145c1fa8f25" -"In Situ Ocean-based Platforms","BUOYS","TAO","TROPICAL ATMOSPHERE OCEAN","c9cb3b35-570d-4aa4-a8e1-2a21aacc67c4" -"In Situ Ocean-based Platforms","BUOYS","TRITON","TRIangle Trans-Ocean Buoy Network","22946f69-ea37-451d-afe5-409b42dcd983" -"In Situ Ocean-based Platforms","BUOYS","","","e36481f3-5507-428b-a870-67f6d96ae389" -"In Situ Ocean-based Platforms","FLOATS","PALACE FLOAT","Profiling Autonomous Lagrangian Circulation Explorer","b4d40e77-a862-418e-a8dc-f7b7e704b4cc" -"In Situ Ocean-based Platforms","FLOATS","PROTEUS","Profile Telemetry of Upper Ocean Currents","c9bfbe86-064a-4d64-875b-cb36bff3f9e9" -"In Situ Ocean-based Platforms","FLOATS","","","6e59f4bf-41dd-4ade-9070-4efcae4628fb" -"In Situ Ocean-based Platforms","HOV","Alvin","","57323291-3348-4292-812e-7436d6a0781a" -"In Situ Ocean-based Platforms","HOV","Clelia","","78c6cfd9-0df5-435e-9bb1-d14322db928f" -"In Situ Ocean-based Platforms","HOV","DeepWorker 2000","","caa8300a-560a-4190-b257-6f8d33f6f134" -"In Situ Ocean-based Platforms","HOV","Johnson-Sea-Link II","","cb5ab3cc-48d1-4b0c-b72b-700a6faee11e" -"In Situ Ocean-based Platforms","HOV","Johnson-Sea-Link I","","ae078302-17ab-4cc5-ba7d-7a8a0102c01b" -"In Situ Ocean-based Platforms","HOV","MIR II","","2fcdab81-7527-4344-a26c-632746e94423" -"In Situ Ocean-based Platforms","HOV","MIR I","","15f4ae34-a5c9-43e0-84d6-246690648fca" -"In Situ Ocean-based Platforms","HOV","Pisces V","","0f50133b-1ef8-4c67-97a3-ac0604a41fc8" -"In Situ Ocean-based Platforms","HOV","","","63c8aa1d-6efc-4943-8891-3a1cd520dde0" -"In Situ Ocean-based Platforms","MOORINGS","ATLAS MOORINGS","Autonomous Temperature Line Acquisition System","d52d296b-370a-4741-8f07-e6b6873191c6" -"In Situ Ocean-based Platforms","MOORINGS","MOORINGS","","fbcd0c2b-f8ac-4199-9a37-5e7a39150730" -"In Situ Ocean-based Platforms","MOORINGS","","","1468d86c-f2b8-4fbf-8e8b-8831fd598801" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","C-MAN","Coastal Marine Network","7fdf83a9-e0b3-4bb2-a6f4-801078f62cc9" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","DRILLING PLATFORMS","","cd14c407-881b-4fc1-8222-f1eeed77f4e2" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","GEOSTAR","GEophysical and Oceanographic STation for Abyssal Research","1d168c0e-82cd-407c-a49a-f343b4fc4e24" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","NEMO-SN1","NEutrino Mediterranean Observatory - Submarine Network 1","83212677-16fc-42ab-9a23-cdbbacfa1d18" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","OCEAN PLATFORMS","","5a4e787b-55e4-47d4-9520-ee74d6efdb6e" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","OCEAN WEATHER STATIONS","","d26f4894-667e-4e29-8e0b-5db476c98464" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","SN-2","Submarine Network 2","d227bc01-e09a-4356-89d3-84cae164eeec" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","SN-4","Submarine Network 4","85e347f2-d65d-4941-a252-0b0c55653b37" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","Sea Ice Mass Balance Station","","31e96f2f-9b8e-454f-a1f8-e8d791c13a33" -"In Situ Ocean-based Platforms","OCEAN PLATFORM/OCEAN STATIONS","","","6ee1cf85-aa14-4fe9-a915-a8022830d8a7" -"In Situ Ocean-based Platforms","ROV","Argus","","ddc7ed71-2626-4b81-8079-82c04d0bdc91" -"In Situ Ocean-based Platforms","ROV","Deep Discoverer","","023cf280-8fd9-4a4d-8e18-54fac3f6dbbb" -"In Situ Ocean-based Platforms","ROV","Global Explorer","","464643c0-4600-4d38-9927-9587fa8904bb" -"In Situ Ocean-based Platforms","ROV","Guru","","9b01b91a-d937-4148-b4f5-63e5254b6195" -"In Situ Ocean-based Platforms","ROV","Hercules","","654fb060-af2f-4d5d-af89-2216ef7939ca" -"In Situ Ocean-based Platforms","ROV","Jason II","","b7831fc5-0da7-4c2a-b4d6-dae934648d95" -"In Situ Ocean-based Platforms","ROV","Jason","","74995db1-1047-4e0b-b0c9-b4b9f7bdd6b6" -"In Situ Ocean-based Platforms","ROV","Little Hercules","","b3ef5a11-5c6d-4f14-a0bb-a90e8614a908" -"In Situ Ocean-based Platforms","ROV","Phantom DHD2+2","","897c4eed-6f5a-4b60-9780-a73362ec84f2" -"In Situ Ocean-based Platforms","ROV","RCV-150","","7ec61a93-3c42-4af1-adca-8f26d22d3d27" -"In Situ Ocean-based Platforms","ROV","ROPOS","","127be6b4-50ad-496d-939b-5c1dc47ac4ff" -"In Situ Ocean-based Platforms","ROV","Seirios","","f21d8715-f805-427d-b006-57a5d1240d1c" -"In Situ Ocean-based Platforms","ROV","Sonsub Innovator","","2adc78b1-be95-4cec-82a9-603f6a493d5b" -"In Situ Ocean-based Platforms","ROV","Yogi","","940914db-9ad3-438c-8118-7a0abb0c4a92" -"In Situ Ocean-based Platforms","ROV","","","da6420b6-48ec-4ae2-98c7-0ef0538815a0" -"In Situ Ocean-based Platforms","SHIPS","AIRBOAT","","18d0b454-a951-4d21-a58a-b984deade210" -"In Situ Ocean-based Platforms","SHIPS","B/O MYTILUS","","3f6d798a-28df-46fa-80ea-7502f90b0fc3" -"In Situ Ocean-based Platforms","SHIPS","B/O SG","B/O SARMIENTO DE GAMBOA","bccde7bb-3a29-4919-85ce-0b8f446d707d" -"In Situ Ocean-based Platforms","SHIPS","F/V GREAT PACIFIC","","034a82a9-1dfc-4648-91fd-94aa6f8ed56f" -"In Situ Ocean-based Platforms","SHIPS","NOAA Delaware II","NOAA Ship Delaware II","15f524d9-5155-466a-9d46-364d977bd864" -"In Situ Ocean-based Platforms","SHIPS","Nancy Foster","NOAA Ship Nancy Foster","1a2349cd-6a6e-42bc-8c59-82e93f9372e6" -"In Situ Ocean-based Platforms","SHIPS","Okeanos Explorer","NOAA Ship Okeanos Explorer","4838472f-2b4c-4107-bd9e-3bf78a7c5562" -"In Situ Ocean-based Platforms","SHIPS","Oregon II","NOAA Ship Oregon II","b789b66d-e120-438b-96c1-2849c971040d" -"In Situ Ocean-based Platforms","SHIPS","R/V AA","R/V Aurora Australis","90fadab8-daa5-4725-9e58-8fa81f05a960" -"In Situ Ocean-based Platforms","SHIPS","R/V AKADEMIK M.A. LAVRENTYEV","","cdc27a9f-6118-4ab8-bf2c-d762e6dbbbdf" -"In Situ Ocean-based Platforms","SHIPS","R/V ALPHA HELIX","","c5bdef62-eb89-4489-914f-7476f53bd45d" -"In Situ Ocean-based Platforms","SHIPS","R/V AMA","R/V AMIR MOULAY ABDALLAH","f7a8f86c-08cc-4792-9ef0-50db79865e93" -"In Situ Ocean-based Platforms","SHIPS","R/V ARANDA","","162fb231-6969-422b-a9e4-4de35cd595b7" -"In Situ Ocean-based Platforms","SHIPS","R/V ARAON","","e6cf0811-fc28-45d3-99f9-1c537146cca8" -"In Situ Ocean-based Platforms","SHIPS","R/V Annie","","3bd7ce49-0a7d-4460-a40b-79cf848471e1" -"In Situ Ocean-based Platforms","SHIPS","R/V Atlantis","","3b39f0fb-7cfb-495e-a752-82f87eba8fa3" -"In Situ Ocean-based Platforms","SHIPS","R/V DOLPHIN","","eba994bb-dd12-4941-ad6b-89d073e992f9" -"In Situ Ocean-based Platforms","SHIPS","R/V FERRELL","","367f4bab-327f-425e-b047-3a2699126e11" -"In Situ Ocean-based Platforms","SHIPS","R/V HERITAGE","","bbb476e8-9e6a-461f-882d-a213213705f2" -"In Situ Ocean-based Platforms","SHIPS","R/V ITALIA","","e2e59fcb-be11-4ff2-bd7f-eee34a76aa45" -"In Situ Ocean-based Platforms","SHIPS","R/V ITALICA","","6cf9a0ac-18c6-492a-b302-62ad4c918fcf" -"In Situ Ocean-based Platforms","SHIPS","R/V Ivan Petrov","","810bc419-c1ea-4f38-b05f-6471e3621274" -"In Situ Ocean-based Platforms","SHIPS","R/V JangMok","Research Vessel JangMok","6ff96d84-74e5-4dc3-9d80-6c0d5d534256" -"In Situ Ocean-based Platforms","SHIPS","R/V L'ASTRO","R/V L'ASTROLABE","40e85d85-0619-48ab-83ab-dc7371d1eeaf" -"In Situ Ocean-based Platforms","SHIPS","R/V LL","R/V LADY LISA","bc5dbb9e-0395-4291-933b-a2281be644ca" -"In Situ Ocean-based Platforms","SHIPS","R/V LMG","R/V Laurence M. Gould","1c4e4aa2-b801-479f-b814-c18201db0960" -"In Situ Ocean-based Platforms","SHIPS","R/V LOUIS S. ST. LAURENT","","e15a4f8d-c1e9-4239-8271-45551c3e2553" -"In Situ Ocean-based Platforms","SHIPS","R/V MILLER FREEMAN","","2405ed08-fc64-4251-a242-c879181ebafd" -"In Situ Ocean-based Platforms","SHIPS","R/V Manta","","884ca19a-8b6c-462c-85b8-23baacb72704" -"In Situ Ocean-based Platforms","SHIPS","R/V NBP","R/V Nathaniel B. Palmer","a9c4dcab-bbd0-4f67-b2c0-bbbe71b8245e" -"In Situ Ocean-based Platforms","SHIPS","R/V ONNURI","","3ccb3423-b471-437e-87d0-e964702bd90f" -"In Situ Ocean-based Platforms","SHIPS","R/V OREGON","","eedf5ea0-c814-4b9f-9985-dba84cb07b50" -"In Situ Ocean-based Platforms","SHIPS","R/V OSHORO-MARU","","9506524f-5cd7-43f3-8763-afe95283bf30" -"In Situ Ocean-based Platforms","SHIPS","R/V PALMETTO","","03e37490-87d9-412d-80e1-b351fbe9d03d" -"In Situ Ocean-based Platforms","SHIPS","R/V PANDALUS","","3fa51d3e-c177-4bfb-a189-4bba46686ec1" -"In Situ Ocean-based Platforms","SHIPS","R/V POLARSTERN","","7d682090-e4cc-4634-93ec-beba19afda60" -"In Situ Ocean-based Platforms","SHIPS","R/V PROFESSOR KHROMOV","","6405bead-664f-4452-b1d8-39b1f889ebaf" -"In Situ Ocean-based Platforms","SHIPS","R/V RHB","R/V RONALD H. BROWN","c21b5468-c3b6-4da2-bc6e-19d2109474c4" -"In Situ Ocean-based Platforms","SHIPS","R/V Sally Ride","Research Vessel Sally Ride","3d58c65d-cca7-4a69-a882-c18b801411c6" -"In Situ Ocean-based Platforms","SHIPS","R/V TANGAROA","","c99251bf-e937-4d59-8899-54d7b71a5667" -"In Situ Ocean-based Platforms","SHIPS","R/V Thompson","Research Vessel Thomas G. Thompson","896d7c41-6ddc-4a23-acc4-ee946cf32a7f" -"In Situ Ocean-based Platforms","SHIPS","R/V UM","R/V UMITAKA MARU","c37c3a9c-7eaa-4f3f-ae3a-dd1e62924388" -"In Situ Ocean-based Platforms","SHIPS","R/V WECOMA","","82f1ab0b-3028-4f33-a7ad-81ac973bdf0c" -"In Situ Ocean-based Platforms","SHIPS","R/V XUELONG","","3361bc7c-c1fa-485a-a18a-e67adc5637be" -"In Situ Ocean-based Platforms","SHIPS","R/V YUZ","R/V YUZHMORGEOLOGIYA","3055b6f7-a545-489d-86c2-e52a24e0da9c" -"In Situ Ocean-based Platforms","SHIPS","RRS DISCOVERY","","e3d46087-97c7-4f61-8a90-f9b3ec5a7c6f" -"In Situ Ocean-based Platforms","SHIPS","RSS JAMES CLARK ROSS","RSS JAMES CLARK ROSS","30585903-f838-4b9c-86c2-8778559475f7" -"In Situ Ocean-based Platforms","SHIPS","Reuben Lasker","NOAA Ship Reuben Lasker","978bfb08-a88d-46c3-830e-13e26d55d35b" -"In Situ Ocean-based Platforms","SHIPS","SHIPS","","1bb21d0f-bf48-42b5-8e09-cc0d58407e4a" -"In Situ Ocean-based Platforms","SHIPS","SUBMARINE","","9e903361-9170-421b-b0ab-3fa6d160c20a" -"In Situ Ocean-based Platforms","SHIPS","ZODIACS","","600ecdea-31c3-40e6-809a-226f74ffdec5" -"In Situ Ocean-based Platforms","SHIPS","","","82a67b12-e99d-4c90-8a6a-a6f79d4c3c7b" -"In Situ Ocean-based Platforms","USV","Kingfisher","","dba6c8ed-8444-4e18-965c-9c0e30186ac3" -"In Situ Ocean-based Platforms","USV","Saildrone","","6077a16e-dc27-47ba-b2b8-6ae731615925" -"In Situ Ocean-based Platforms","USV","","","bf17bbac-0fc9-48b3-9b03-bd780ffe1eb0" -"In Situ Ocean-based Platforms","","AUVS","Autonomous Underwater Vehicles","1ea3829f-9479-46f5-a075-315da09867ae" -"In Situ Ocean-based Platforms","","DART","Deep-ocean Assessment and Reporting of Tsunamis","b29f3baa-5bb8-4b64-8c5b-27c3de8084bd" -"In Situ Ocean-based Platforms","","MOUSS","MOdular Underwater Sampling System","e8299623-dad3-4773-b14a-39482873322f" -"In Situ Ocean-based Platforms","","NDBC MOORED BUOY","","3d83b3e3-1be0-4ab8-9cf5-3b7ade27586e" -"In Situ Ocean-based Platforms","","SEAGLIDER","","51edfe40-a819-400d-9067-5d114b27b825" -"In Situ Ocean-based Platforms","","SEASOAR","","d975d656-aa72-41fe-857f-1aa15b0543e2" -"In Situ Ocean-based Platforms","","","","e50b2a1a-7d9d-4c09-ac7e-dc29f0c08fc7" -"Interplanetary Spacecraft","FLYBY","MARINER 2","","2351e160-5a9c-4d1c-81f0-775bbae1848e" -"Interplanetary Spacecraft","FLYBY","PIONEER 10","","7fc65dd8-ff85-4ca3-a9df-40a8c33b7c2f" -"Interplanetary Spacecraft","FLYBY","PIONEER 11","","7b3df542-ec26-4460-b26b-b0e195baae76" -"Interplanetary Spacecraft","FLYBY","VOYAGER 1","","1cc11f32-9643-4fa4-9384-18cab2852604" -"Interplanetary Spacecraft","FLYBY","VOYAGER 2","","353cc3e0-7d96-451a-bf57-350bf031a0e5" -"Interplanetary Spacecraft","FLYBY","","","1cf127d1-ee7d-4cd7-9e66-516805f42f28" -"Interplanetary Spacecraft","LANDER","VENERA-13","","21d992d3-447f-4ae1-9ef2-088c736895c1" -"Interplanetary Spacecraft","LANDER","VENERA-14","","95e65b17-0aa8-4146-999c-b807b42e8ad6" -"Interplanetary Spacecraft","LANDER","","","c12d28c9-5a4c-4897-b82b-67ed59d14e75" -"Interplanetary Spacecraft","ORBITER","PIONEER VENUS","","c77cd248-34be-4d62-aaae-43fb073a1438" -"Interplanetary Spacecraft","ORBITER","","","07eea0dc-fc62-4b0d-88ee-2813a22034da" -"Interplanetary Spacecraft","","LUNOKHOD","Lunar Retroreflector Array","1daac324-8de1-49d1-b8ca-e221f5e33a1b" -"Interplanetary Spacecraft","","","","16d65a72-e685-4c98-88a9-689c5f75d358" -"Maps/Charts/Photographs","","AERIAL PHOTOGRAPHS","AERIAL PHOTOGRAPHS","3cb5948f-2a92-4c2a-9410-eb17a1045d8e" -"Maps/Charts/Photographs","","MAPS","MAPS","8d56ab86-f13a-423b-b209-eca2baeb73ee" -"Maps/Charts/Photographs","","MISSION REPORTS","","f9846838-fdbc-4aa0-86e9-b0e70e97d0e2" -"Maps/Charts/Photographs","","STEREOGRAPHIC PHOTOGRAPHS","","c9219254-6f80-495b-b3dc-92b1abfdaa8b" -"Maps/Charts/Photographs","","","","af11dd2a-e514-4329-bbc5-0f36f2776a26" -"Models/Analyses","Data Analysis","Environmental Modeling","Soil Characteristics","","252a24e5-6f62-40df-86b3-59ef0d38283f" -"Models/Analyses","Data Analysis","Environmental Modeling","","079610fb-e4cf-4e2c-9a92-86a9b798a7d5" -"Models/Analyses","Data Analysis","","","73c1df3f-b389-4cc0-98eb-0fbc4f071f98" -"Models/Analyses","Merged Analysis","IMERG","Integrated Multi-satellitE Retrievals for GPM","ddbadcdd-36dd-4db8-98c6-c603bec96c76" -"Models/Analyses","Merged Analysis","LANDMET","CCNY NOAA-CREST Land Surface Atmospheric Boundary Processing Method","e951dc1d-eeb5-4d67-ad77-e60ee469486c" -"Models/Analyses","Merged Analysis","Merged IR","NCEP/CPC L3 Half Hourly 4km Global (60S - 60N) Merged IR","98088db1-3135-4bbf-9a9b-215ca47d721b" -"Models/Analyses","Merged Analysis","RM-OBS/PU","Hybrid of NCEP/NCAR Reanalysis Model and Observations by Princeton University","0fb44090-a3e4-4820-aad5-dafbd76ae1b4" -"Models/Analyses","Merged Analysis","TMPA","TRMM Multi-Satellite Precipitation Analysis","eff6fbfa-3ccf-4848-89a2-b0b0e65e3524" -"Models/Analyses","Merged Analysis","","","6acce314-322f-4d58-9dcb-1f93457a9d86" -"Models/Analyses","","BLING","Biology Light Iron Nutrient and Gas model","750bc9c6-dda7-449a-9299-9473f03bb67b" -"Models/Analyses","","CAM-chem","Community Atmosphere Model with Chemistry","32204115-79a6-4cda-aac0-2f57580eb445" -"Models/Analyses","","CASA-GFED3-V2","Carnegie-Ames-Stanford-Approach Global Fire Emissions Database 3 V2","1a9082fc-2274-4f86-ad94-6034cae84ed5" -"Models/Analyses","","CASA-GFED3-V3","Carnegie-Ames-Stanford-Approach Global Fire Emissions Database 3 V3","c3a217f5-de08-4aeb-9429-0a29821820b5" -"Models/Analyses","","CESM","NCAR Community Earth System Model","1b492235-f1fa-47d9-aae5-278812d29e7d" -"Models/Analyses","","CHIRPS","Climate Hazards Group Infrared Precipitation with Stations","2f340c79-ed96-4c46-8546-90c14dca2078" -"Models/Analyses","","CLIMATE MODELS","CLIMATE MODELS","8680cb49-1637-4a47-a5fd-f39d4e618e45" -"Models/Analyses","","CLM-LSM","Common Land Model (CLM) Land Surface Model","d8e67ddc-abaf-469b-8e84-f1549c1ca70d" -"Models/Analyses","","CMORPH","","1810678e-9c36-4260-b9a2-eb69eda1ffe4" -"Models/Analyses","","CMS-Flux-V1","Carbon Monitoring System Flux V1","30a98319-e05b-4f35-9cdd-8f287f6c8300" -"Models/Analyses","","CRM","Cloud Resolving Model","57441436-5372-484e-983c-f96cbc51ef72" -"Models/Analyses","","Catchment-LSM","Catchment Land Surface Model","09ef7548-5e64-4296-8129-0ab625e15721" -"Models/Analyses","","DEM","Digital Elevation Model","4a56783a-932e-4ca7-acea-af82a9fe5626" -"Models/Analyses","","ECCO2_Darwin-V3","Estimating the Circulation and Climate of the Ocean, Phase II; Darwin-V3","b35637e0-bc1f-4ecf-b5bc-c78eaeb72562" -"Models/Analyses","","ECMWFIFS","ECMWF Integrated Forecast System","47ee8305-57b9-4df1-84ce-f563df48cf69" -"Models/Analyses","","ECMWF","European Centre for Medium-Range Weather Forecasts Model","eb6ac42f-7c8d-4e3f-9f80-e6334c463d26" -"Models/Analyses","","ERA15DAS","ERA15 Data Assimilation System","d022dc0f-0ce8-471a-ac6c-aabb48542cf4" -"Models/Analyses","","ERA40DAS","ERA40 Data Assimilation System","260c784e-c422-4279-97fa-9c7a348118fa" -"Models/Analyses","","FFDAS-V2","Fossil Fuel Data Assimilation System V2","5c869d68-fbf3-466b-89a0-9622f4f6e773" -"Models/Analyses","","FLEXPART","FLEXible PARTicle dispersion model","6df317e1-6694-4741-b657-58b15253f384" -"Models/Analyses","","FSL-MAPS","FSL Mesoscale Analysis and Prediction System","f065f97b-a10e-4204-8807-dc904c409b51" -"Models/Analyses","","Forcing-LSM","Forcing data for Land Surface Model","862e790e-d42f-433a-8561-107562aceb64" -"Models/Analyses","","GCM","General Circulation Model","d1e2c5e2-076b-4949-8125-384712a33b58" -"Models/Analyses","","GDAS","Global Data Assimilation System","b316bcaf-1ab8-4a67-91b7-76c28bb29e4e" -"Models/Analyses","","GEOS-4","Goddard EOS Data Assimilation System-4","b42aa64a-6b63-4fd0-b953-4abf7558008c" -"Models/Analyses","","GEOS-5","Goddard EOS Data Assimilation System-5","42ad1501-744a-439c-a394-258db03d0304" -"Models/Analyses","","GEOS-Chem","Global 3-D chemical transport model (CTM) for atmospheric composition driven by meteorological input from the Goddard > Earth Observing System (GEOS) of the NASA Global Modeling and Assimilation Office","4773815f-2a76-425e-86cc-0bfd4c3b75c2" -"Models/Analyses","","GLPM","Great Lakes Production Model","913391a8-e711-43f3-ade2-ef26fddeba24" -"Models/Analyses","","GOCART","Goddard Chemistry Aerosol Radiation and Transport Model","bacbb5ad-9269-48ce-8da2-c22d73b9a5f2" -"Models/Analyses","","L4_C","SMAP Level 4 Carbon Flux Model","08ccef97-4faf-4678-8404-03945170aa21" -"Models/Analyses","","LNOM","Lightning Nitrogen Oxides Model","9f792df5-3995-48ad-af46-d4ad887d102c" -"Models/Analyses","","LSM","Land Surface Model","73cef3bc-0a2c-4c10-9e5b-d0c64bca038f" -"Models/Analyses","","MERRA-2","The second Modern-Era Retrospective analysis for Research and Applications","09294834-bc5d-4937-ba1a-3a62b4329948" -"Models/Analyses","","MERRA","Modern-Era Retrospective Analysis for Research and Applications","5a147bc8-abc3-4c79-bbba-0a64bf888b41" -"Models/Analyses","","MICOM","Miami Isopycnic Coordinate Ocean Model","00f8ab1f-040f-40b4-ba64-9f6a4c2ca7ed" -"Models/Analyses","","MITgcm","Massachusetts Institute of Technology General Circulation Model","3fd56bd8-0e40-4401-9033-97df9a552001" -"Models/Analyses","","MODELS","MODELS","26d3953e-be79-46e4-b746-efb1983c3f5c" -"Models/Analyses","","ModelE","GISS GCM ModelE","8ad656db-1324-4e92-8273-5a765ca29282" -"Models/Analyses","","Mosaic-LSM","Mosaic Land Surface Model","8c1eb362-072d-4763-b6f3-6b706b257e6a" -"Models/Analyses","","NASA-GISS-3D-Tracer-Transport","","16ddc50b-7bb0-4a13-adef-dbdd5e2e2bcd" -"Models/Analyses","","NASA-GISS-Dust-Transport","","ac82f543-df04-4301-b5fa-dae2800197d6" -"Models/Analyses","","NCEP-CFSR","NCEP Climate Forecast System Reanalysis","929347c6-e7d9-4e72-a6c8-8926a369cb6b" -"Models/Analyses","","NCEP-CFSV2","NCEP Climate Forecast System Version 2","86ee0e30-96d0-4bb4-9ee6-a24aa0e0234b" -"Models/Analyses","","NCEP-ETA","NCEP Eta Model","2ecfc2b9-118b-4462-9352-9193eef0a1dc" -"Models/Analyses","","NCEP-FNL","NCEP Final Global Data Assimilation System","0ea8022d-e6bf-48e0-86ce-e1e7a886b7b1" -"Models/Analyses","","NCEP-GFS","NCEP Global Forecast System","53b3429a-d915-4d1c-b600-bf3e37874839" -"Models/Analyses","","NCEP-GODAS","NCEP Global Ocean Data Assimilation System","4201d98f-7f8a-46bf-b823-47385bbc7fed" -"Models/Analyses","","NCEP-MRF","NCEP Medium Range Forecast Model","6426710e-8498-4308-845e-c9c543bcc17e" -"Models/Analyses","","NCEP-NAM","NCEP North American Model","4cbc6cbe-50a2-4464-acd9-395379753d4e" -"Models/Analyses","","NCEP-RUC","NCEP Rapid Update Cycle Model","8c24fade-c39c-4b4f-b60c-d884ae780948" -"Models/Analyses","","NCEP/DOE-R2M","NCEP/DOE Reanalysis 2 Model","7c4302ef-0fca-4987-9515-d059b9e0bb95" -"Models/Analyses","","NCEP/NCAR-RM","NCEP/NCAR Reanalysis Model","b1c1ea44-000a-4535-8e90-d8dd447371d4" -"Models/Analyses","","NOBM","NASA Ocean Biogeochemical Model","b63e0078-74a3-431d-92f7-8853c10474e4" -"Models/Analyses","","Noah-LSM","Noah Land Surface Model","d92e3dca-7aeb-4cc1-9dc0-571844337222" -"Models/Analyses","","OBSERVATION BASED","OBSERVATION BASED ANALYSES","bb5002a8-6ff2-43dd-b0c9-8f9a76e11cb5" -"Models/Analyses","","OCEAN STATE ESTIMATION","","04d24dfe-c9f7-43b6-8bd8-8f2613767257" -"Models/Analyses","","OPERATIONAL MODELS","","9f95a56a-2669-427e-a785-de9162ffe133" -"Models/Analyses","","POM","Princeton Ocean Model","45d0ab0d-19d4-4fc4-8f69-9f6b4529a430" -"Models/Analyses","","Penman-Monteith","Penman-Monteith Model with Enhanced Surface Resistance Parameterization","3b746299-cd6d-4aa9-8de2-f05f3d6897cc" -"Models/Analyses","","RASI","","2d0c75bf-49bc-4a76-bd77-b179ea677bc2" -"Models/Analyses","","REANALYSIS MODELS","","e804fb28-786b-460f-969c-7005b0803cde" -"Models/Analyses","","SPEAR","Seamless System for Prediction and EArth System Research","3d374eb9-1eb4-4c64-b764-47f6206bbc85" -"Models/Analyses","","Unified Model UM","United Kingdom Met Office (UKMO) Unified Model","1ee7757f-8097-432c-b473-b2a2a1266f30" -"Models/Analyses","","VIC-LSM","Variable Infiltration Capacity (VIC) Land Surface Model","87a9b8ff-5da4-4a9e-815b-2564a1af2719" -"Models/Analyses","","WRF","Weather Research and Forecasting (WRF) Model","6fb2817f-c3e3-4332-85ad-79f74227e6bc" -"Models/Analyses","","","","113ecbc2-ab36-4d58-a96c-a6ce0106e749" -"NOT APPLICABLE","NOT APPLICABLE","NOT APPLICABLE","","cffdd7e9-e25d-4c85-86ae-ff651532f02e" -"NOT APPLICABLE","NOT APPLICABLE","","","76b8f939-8558-4a10-8139-c7f8a0162102" -"NOT APPLICABLE","","","","41d72eb0-9554-48a7-8821-dec569503da3" -"Navigation Platforms","Beidou (China's Satellite Navigation System)","Beidou","Beidou Satellites","b4306421-a1b1-4d56-ad84-6f0c57806369" -"Navigation Platforms","Beidou (China's Satellite Navigation System)","","","ef679d6a-a05b-4976-a236-ce2158b758ea" -"Navigation Platforms","GLONASS (Russia's GLObal NAvigation Satellite System)","GLONASS-40-82","Global Navigation Satellite System 40-82","6cadd8c2-ecd7-4816-ad6a-c14e19d7e809" -"Navigation Platforms","GLONASS (Russia's GLObal NAvigation Satellite System)","GLONASS","(GLObal NAvigation Satellite System)","00274700-26c1-4c44-88a4-10a7ec6214de" -"Navigation Platforms","GLONASS (Russia's GLObal NAvigation Satellite System)","","","960f8eb8-6ca9-47d3-ae4a-7e21ebfad4c0" -"Navigation Platforms","GPS (Global Positioning System)","GPS-35","Global Positioning System Satellites-35","185961ca-55f3-49f4-b795-b1dce8de893c" -"Navigation Platforms","GPS (Global Positioning System)","GPS-36","Global Positioning System Satellites-36","428adb40-4cd5-4923-98fc-cddc83c6b577" -"Navigation Platforms","GPS (Global Positioning System)","GPS","Global Positioning System Satellites","e66a90c4-3a5c-4e52-b039-bc93857642bf" -"Navigation Platforms","GPS (Global Positioning System)","","","7bf16419-1047-4902-a4fa-38c74bceb3bd" -"Navigation Platforms","Galileo (Europe's European Satellite Navigation System)","Galileo","Galileo Satellites","59fae923-a986-41e5-8fe2-30bd3b9cb625" -"Navigation Platforms","Galileo (Europe's European Satellite Navigation System)","","","b1c1ecfd-eb6c-4a51-b86e-2ae64babc27d" -"Navigation Platforms","IRNSS (India's Regional Navigation Satellite System)","IRNSS","India’s Regional Navigation Satellite System Satellites","4c93cc0b-ca0e-4421-ac60-559b6390b89b" -"Navigation Platforms","IRNSS (India's Regional Navigation Satellite System)","","","bad22a08-f8ab-49b3-b266-005b21496626" -"Navigation Platforms","NAVSTAR","NAVSTAR","NAVSTAR Global Positioning System","17da87fb-d1c9-4fca-befd-f14ec5a2fa02" -"Navigation Platforms","NAVSTAR","","","41de58a7-f1e3-453f-9094-80cb8e839b36" -"Navigation Platforms","QZSS (Japan's Quasi-Zenith Satellite System)","QZSS","Quasi-Zenith Satellite System Satellites","9f9d2fac-92f3-4bc5-80ea-e68da85dd352" -"Navigation Platforms","QZSS (Japan's Quasi-Zenith Satellite System)","","","225fb800-22b1-4d06-88ac-2bb391ac0906" -"Navigation Platforms","SBAS (Satellite-Based Augmentation System)","SBAS","Satellite-Based Augmentation System Satellites","6c37b37f-44f3-4cfd-859d-44f9266d97cb" -"Navigation Platforms","SBAS (Satellite-Based Augmentation System)","","","612454e6-06ce-4bd3-b4f2-6db85f49a013" -"Navigation Platforms","","FEDSAT","","736ef795-ec95-415f-b10a-456366f8a185" -"Navigation Platforms","","","","1506fb17-7ac4-44ce-bde5-074885bdb2d2" -"Solar/Space Observation Satellites","EOS (Earth Observing System)","SORCE","Solar Radiation and Climate Experiment","3c45bc59-32ce-4e5d-a602-6fec80ff7f1c" -"Solar/Space Observation Satellites","EOS (Earth Observing System)","","","53f3539c-238d-4e95-838c-d434238d7a10" -"Solar/Space Observation Satellites","EXPLORER","EXPLORER-31 (DME-A)","","4a23392b-1472-4437-868a-eaf788b6b690" -"Solar/Space Observation Satellites","EXPLORER","EXPLORER-33","Interplanetary Monitoring Platform D (IMP-D)","e54cff9a-7866-448b-adad-88b344021e3c" -"Solar/Space Observation Satellites","EXPLORER","EXPLORER-35","Interplanetary Monitoring Platform D (IMP-E)","ac093d50-d9c2-4aca-87d6-0c79a9ce6cb3" -"Solar/Space Observation Satellites","EXPLORER","","","182e52f4-6ce7-42e3-b50e-42a3725eeca3" -"Solar/Space Observation Satellites","Explorer","SNOE","Student Nitric Oxide Explorer","9210813e-eb6f-4d0f-bb1b-d76b4446b4a9" -"Solar/Space Observation Satellites","Explorer","","","8e6f026c-352d-4f51-b756-d32ab75032d5" -"Solar/Space Observation Satellites","GOES","GOES-10","","49178ef5-a003-4de2-9553-066f629bb072" -"Solar/Space Observation Satellites","GOES","GOES-11","","d1c98f16-ae13-45a0-b1bf-de4fd2a5b1c7" -"Solar/Space Observation Satellites","GOES","GOES-12","","ccc4869c-ff0c-41ef-b621-eaeae1ffb79b" -"Solar/Space Observation Satellites","GOES","GOES-13","","98685a1b-9825-43c0-b0d9-6a65f8cb8c7c" -"Solar/Space Observation Satellites","GOES","GOES-14","","530c0bf3-28b9-4cb7-ad4e-979ad7444933" -"Solar/Space Observation Satellites","GOES","GOES-15","","f9649a77-f89c-4b3a-a5e5-624ccfccf97d" -"Solar/Space Observation Satellites","GOES","GOES-16","","72ebfb29-14dd-4306-a28c-ecfc25fc8ad6" -"Solar/Space Observation Satellites","GOES","GOES-1","","f86fcbce-178c-410a-8e6e-380c0bc392ad" -"Solar/Space Observation Satellites","GOES","GOES-2","","f2b36444-124d-4f32-97c7-dc8a09b2d0f0" -"Solar/Space Observation Satellites","GOES","GOES-3","","a520a517-f8da-4bf7-9dec-5e8758dad38a" -"Solar/Space Observation Satellites","GOES","GOES-4","","79de5661-cfa3-491d-bb30-4414452676e8" -"Solar/Space Observation Satellites","GOES","GOES-5","","18ceff7d-c5cd-4a72-86af-9a3ac0a884c4" -"Solar/Space Observation Satellites","GOES","GOES-6","","b048b823-7125-4426-b25d-121c85044bb4" -"Solar/Space Observation Satellites","GOES","GOES-7","","e8fbbfce-0ba2-431c-8533-a1ec9347efd1" -"Solar/Space Observation Satellites","GOES","GOES-8","","2fa330c6-862b-408a-bdea-cc0eb502f3d2" -"Solar/Space Observation Satellites","GOES","GOES-9","","8651726e-1f93-4a65-9e09-4be1e3075e5d" -"Solar/Space Observation Satellites","GOES","","","6e332c25-caeb-4917-afb6-af757bcecd72" -"Solar/Space Observation Satellites","IMP (Interplanetary Monitoring Platform)","IMP-8","Interplanetary Monitoring Platform-8","4b4e3fbd-27e9-4022-ab65-09026234ed14" -"Solar/Space Observation Satellites","IMP (Interplanetary Monitoring Platform)","IMP-I","Interplanetary Monitoring Platform-I","7b36ad79-8cf3-46a9-b26c-52f3a0f1eac9" -"Solar/Space Observation Satellites","IMP (Interplanetary Monitoring Platform)","","","98767da4-f273-4c32-a12f-0df5429ac15e" -"Solar/Space Observation Satellites","Living with a Star","SDO","Solar Dynamics Observatory","8c1066ca-a1e6-47c2-aab8-ac70ed33f948" -"Solar/Space Observation Satellites","Living with a Star","","","9277b570-917c-4fd2-acba-3cb167c4c4c9" -"Solar/Space Observation Satellites","NASA Medium Class Explorers (MIDEX)","THEMIS","Time History of Events and Macroscale Interactions During Substorms","6524ba60-7265-49ae-b368-c18d981e7381" -"Solar/Space Observation Satellites","NASA Medium Class Explorers (MIDEX)","","","b003a4a0-0dc3-498b-9795-a197e25cff6c" -"Solar/Space Observation Satellites","NASA Small Explorer (SMEX)","GEMS","Gravity and Extreme Magnetism Small Explorer","d7a1d916-1dc9-4dbd-8a7e-554be1b7379c" -"Solar/Space Observation Satellites","NASA Small Explorer (SMEX)","TRACE","Transition Region and Coronal Explorer","437b468d-4635-4cb9-b875-0795beb47f6d" -"Solar/Space Observation Satellites","NASA Small Explorer (SMEX)","","","a1dfb99c-1819-4a09-9024-81d9c3486eac" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-1","Orbiting Solar Observatory-1","a0e267fd-fde9-490a-a582-cd57464382ba" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-2","Orbiting Solar Observatory-2","3aea48c3-0abb-4c1a-87f7-4035473d0015" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-3","Orbiting Solar Observatory-3","fb5ac938-4c9a-4abd-9b62-7ae1ac63b34e" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-4","Orbiting Solar Observatory-4","b7eaad99-82e7-4edb-a3d3-9e10d2c209c3" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-5","Orbiting Solar Observatory-5","73ae7b33-4b42-47a6-ac52-5aaf791823ac" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-6","Orbiting Solar Observatory-6","a364e4c0-444a-4dec-9fa4-cf740e340411" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-7","Orbiting Solar Observatory-7","a2f755b5-e29a-4e57-8372-ab18a76c62ca" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","OSO-8","Orbiting Solar Observatory-8","e58bc59d-a030-4cc4-80a9-f9cb7f294244" -"Solar/Space Observation Satellites","OSO (Orbiting Solar Observatory)","","","1a5dc311-b702-4712-868a-f306bbdc0833" -"Solar/Space Observation Satellites","RAE (Radio Astronomy Explorer)","RAE-A","Radio Astronomy Explorer-A","f4c1befd-8eae-4cc0-b7ce-1a5306f79fa8" -"Solar/Space Observation Satellites","RAE (Radio Astronomy Explorer)","RAE-B","Radio Astronomy Explorer-B (Explorer 49)","82b2d471-ddff-4c3c-8eed-82e834cc0029" -"Solar/Space Observation Satellites","RAE (Radio Astronomy Explorer)","","","c381eef8-a0be-407e-b85b-67757d724af8" -"Solar/Space Observation Satellites","SOLRAD","SOLRAD-10","Solar Radiation-10","895be672-a1c7-4bf0-a6fb-13816bac13c8" -"Solar/Space Observation Satellites","SOLRAD","SOLRAD-1","Solar Radiation-1","e101ee62-014e-4cc0-8262-088272d6f65f" -"Solar/Space Observation Satellites","SOLRAD","SOLRAD-7A","Solar Radiation-7A","032d5a46-7a5e-46d2-ae07-034e59a611b4" -"Solar/Space Observation Satellites","SOLRAD","SOLRAD-7B","Solar Radiation-7B","a59bfb93-9bb4-47c1-84ea-5357788e97a3" -"Solar/Space Observation Satellites","SOLRAD","SOLRAD-8","Solar Radiation-8","d17cc4a4-bf4a-4b9f-8314-6aed5e32f588" -"Solar/Space Observation Satellites","SOLRAD","SOLRAD-9","Solar Radiation-9","849f648c-c8d7-448c-bea6-5fd642705a14" -"Solar/Space Observation Satellites","SOLRAD","","","c15fcde1-b44a-4d20-91e8-c6c807325b08" -"Solar/Space Observation Satellites","","ACE","Advanced Composition Explorer (ACE)","a60eb82b-e058-4b1d-bc09-864d886e8c48" -"Solar/Space Observation Satellites","","ACRIMSAT","Active Cavity Radiometer Irradiance Monitor Satellite","76e768b0-150f-4986-8504-42a713c9c841" -"Solar/Space Observation Satellites","","C/NOFS","Communication and Navigation Outage Forecast System","18f50c33-af5a-48b1-9a34-9be9347cedbc" -"Solar/Space Observation Satellites","","CLUSTER-II","CLUSTER-II","436570eb-cb83-48d3-81d7-a6b6c6a777b4" -"Solar/Space Observation Satellites","","COSMIC/FORMOSAT-3","Constellation Observing System for Meteorology, Ionosphere and Climate","236ccd86-2d36-4312-b73b-c273039e3a2d" -"Solar/Space Observation Satellites","","DSCOVR","Deep Space Climate Observatory","d9cc74c9-34f5-48a4-a982-e4c6f8a5171c" -"Solar/Space Observation Satellites","","EQUATOR-S","","44941da4-aae8-4776-8db0-f2c3eb5eb5e6" -"Solar/Space Observation Satellites","","FAST","Fast Auroral Snapshot Explorer","17d64f1b-288c-4e11-9253-dc6468310607" -"Solar/Space Observation Satellites","","FERMI","Fermi Gamma-ray Space Telescope","848796c8-2654-4c1e-b70f-a85834f4fcef" -"Solar/Space Observation Satellites","","GEOTAIL","","7d44ede4-e2e4-43b8-a970-11f1f75394d5" -"Solar/Space Observation Satellites","","GRO","Gamma-Ray Observatory","1f48df58-92d6-4f8c-bb95-872709133d7b" -"Solar/Space Observation Satellites","","HELIOS 1","","9bb5d516-de20-41eb-9b54-109f939b764c" -"Solar/Space Observation Satellites","","HELIOS 2","","5d34bc0e-e9a2-422e-aa9d-8dcb826af251" -"Solar/Space Observation Satellites","","HESSI","High Energy Solar Spectroscopic Imager","bd6d6791-759d-4ebc-baef-0b2148648b91" -"Solar/Space Observation Satellites","","HINODE","Hinode (Solar-B)","c5799ec3-693e-4ee7-ad8e-376b2e515a44" -"Solar/Space Observation Satellites","","HINOTORI","","5255d395-6dd9-49ba-aaf4-44450f708a3c" -"Solar/Space Observation Satellites","","HST","Hubble Space Telescope","253d5637-2f35-464d-bc79-db0f843604fe" -"Solar/Space Observation Satellites","","IRAS","Infrared Astronomy Satellite","c31354ca-9db7-4ea5-b1ed-9b2dbfc06118" -"Solar/Space Observation Satellites","","PIONEER 6","","f5041b9b-2a20-4cd3-9154-f9c62fbf6d1f" -"Solar/Space Observation Satellites","","PIONEER 7","","35fa31c4-a259-4b5d-82e0-48b5bdddd13a" -"Solar/Space Observation Satellites","","POLAR","POLAR","9c2ad4c0-d1ee-4940-85c7-53d903b500ab" -"Solar/Space Observation Satellites","","RHESSI","Reuven Ramaty High Energy Solar Spectroscopic Imager","ac6d0fd3-a559-4f59-b862-51addf61944a" -"Solar/Space Observation Satellites","","SAMPEX","SolarAnomalous and Magnetospheric Particle Explorer","7747d786-1e89-4c8e-a9ea-3e90c93d95e0" -"Solar/Space Observation Satellites","","SMM","Solar Maximum Mission","d109e6f1-c4b6-45bc-9e1a-4d23a2bae1b1" -"Solar/Space Observation Satellites","","SOHO","Solar and Heliospheric Observatory","43e942db-8536-4268-8bd4-cea81573b8ee" -"Solar/Space Observation Satellites","","STEREO A","Solar Terrestrial Relations Observatory A","68820e6c-4047-4830-99a8-57e13cc5699d" -"Solar/Space Observation Satellites","","STEREO B","Solar Terrestrial Relations Observatory B","ad945ca6-cd6f-4e21-abe0-e7e7bba68523" -"Solar/Space Observation Satellites","","STPSat-3","U.S. Air Force Space Test Program Satellite 3","b5e24e20-f99f-423f-83ac-d3eb5989ac48" -"Solar/Space Observation Satellites","","TSIS-1","Total and Spectral Solar Irradiance Sensor-1","6f00151d-b33f-472a-a263-eff7b46b296d" -"Solar/Space Observation Satellites","","ULYSSES","","72594fae-e32a-4f62-88ad-d871ef0ff29a" -"Solar/Space Observation Satellites","","WIND","","0aad04f5-5438-4800-a0c9-6155656a720e" -"Solar/Space Observation Satellites","","YOHKOH","","cea7a056-9bc7-43be-a689-8a15fac587b7" -"Solar/Space Observation Satellites","","","","8e8b7689-0a8e-47a4-9c68-5f6a207104d5" -"Space Stations/Crewed Spacecraft","APOLLO","APOLLO-SOYUZ","","812c1d73-a38d-498c-9b6b-493a6634a21a" -"Space Stations/Crewed Spacecraft","APOLLO","APOLLO","","84be98c7-9e25-42a7-8da6-0336b8bd8fcc" -"Space Stations/Crewed Spacecraft","APOLLO","","","c6cf9028-9a62-4a0d-8cce-a2a5b1262758" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-10","","3fb34887-645d-4eea-94c3-a0b15df84a3d" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-11","","6dbd3d85-18ca-4bc6-984b-add0889db68f" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-12","","3bd3a9c0-07cf-41eb-917d-d40162429a59" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-3","","1c4b5e76-b447-4dab-acb5-4badecbf682a" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-4","","799b81e7-1b2d-4837-88e0-a01836697615" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-5","","3aa4763b-bc85-4609-96fe-0d0eff904fef" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-6","","6c0aee1a-955d-48c1-acc0-f7d095030308" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-7","","92df7f2e-7258-4140-be9f-888b1ae454ce" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-8","","93baec30-36eb-499b-9523-10e30b8ed846" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI-9","","a0925c59-450c-46be-8735-a0ead1bbf437" -"Space Stations/Crewed Spacecraft","GEMINI","GEMINI","","1ef441a3-0fa2-4c1d-81d8-4312dcdde415" -"Space Stations/Crewed Spacecraft","GEMINI","","","443bd29e-d615-498d-8580-300249cb7695" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","ATLAS","Atmospheric Laboratory for Applications and Science","f875bfd2-1712-4cd4-99dd-058aada97f91" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","OV-099","Challenger Space Shuttle","af8374fb-1543-4eb2-a67e-5da2237505d3" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","OV-102","Columbia Space Shuttle","5bfe76ac-90dc-4620-8da8-1178cf637b2d" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","OV-103","Discovery Space Shuttle","f03dc3d3-f280-4ff4-b0e6-de800bb21ebb" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","OV-104","Atlantis Space Shuttle","595c5eb0-2a7d-452b-8a62-d492375b78fa" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","OV-105","Endeavour Space Shuttle","15541ce2-b06c-4597-8eb1-745e1c72600b" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","SPACE SHUTTLES","","a771d41b-2298-47fd-9e5d-f99370540e98" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","SPACELAB-1","","320292c9-dd15-43db-bbe7-36a217efc535" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","SPACELAB-3","","70d24549-a5ef-47b1-8131-f5c48e7e93d4" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","SPAS-II","Shuttle Pallet Satellite-II","73fef640-5d7a-4798-93d3-a97b712287a2" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","SRL-1","Space Radar Laboratory-1","184a4b22-f26d-4358-8eb1-ab4262d4524e" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","SRL-2","Space Radar Laboratory-2","4e7df1af-daec-4ee1-9e83-9f013d573fc1" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-11","Space Transport System STS-11","a7443743-c640-4eaf-a525-61651a9d954d" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-2","Space Transport System STS-2","c0866d20-5a1e-4365-965b-0673826bd398" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-34","Space Transport System STS-34","307e058f-5a6c-4b6b-b1a3-6a06a559a21b" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-39","Space Transport System STS-39","45da4f3c-c73d-4299-ba88-e26775f3c9f2" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-41G","Space Transport System STS-41G","186b17f1-68bc-4f05-8b2b-932d24c57e3a" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-41","Space Transport System STS-41","ab66dd2f-7d5a-4e6f-a3dc-ec34849cf766" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-43","Space Transport System STS-43","e771da36-4162-407d-add9-46e6e0e80417" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-45","Space Transport System STS-45","50b3f253-e76a-4895-bd28-e477052ca1bb" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-51B","Space Transport System STS-51B","da093451-5b0d-49cc-87ad-18ce04aff12f" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-51F","Space Transport System STS-51F","430147e6-cf02-4d33-8806-033c85364fd4" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-55","Space Transport System STS-55","9e00a9bb-bff6-44aa-976c-fd1ac1c014b0" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-56","Space Transport System STS-56","6462dbc4-9b1f-4cb4-9ae1-8eed8bf3f17c" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-59","Space Transport System STS-59","ba33ff1b-a3a6-4d01-b6e6-a78ce7f20e32" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-62","Space Transport System STS-62","019b76a2-3576-4a03-a91f-8519319d66ee" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-64","Space Transport System STS-64","b978a160-ed2c-41e2-b993-7429ba4b2688" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-66","Space Transport System STS-66","8b619f22-98ef-4a50-871d-04fc49ecdf03" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-68","Space Transport System STS-68","8dd0a34f-2aba-4313-bc2e-b9a742d91862" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-72","Space Transport System STS-72","391b3a49-2960-4be9-a12b-29f2f912da99" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-7","Space Transport System STS-7","806b38f9-e3d7-4ac9-b403-7af2fdcc5381" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-99","Space Transport System STS-99","cc33ee94-f31e-4e4a-a659-f5c6fc244710" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","STS-9","Space Transport System STS-9","d03c64a2-2352-424f-8345-ee17fc859167" -"Space Stations/Crewed Spacecraft","SPACE SHUTTLE","","","3ef93fbf-1e19-42a9-a91f-502d125dbb7c" -"Space Stations/Crewed Spacecraft","","ISS","International Space Station","93c5d18c-be62-46c4-9545-42f73a854d85" -"Space Stations/Crewed Spacecraft","","MERCURY","","b0e515cf-ed97-4870-bdde-6c00b0c998ee" -"Space Stations/Crewed Spacecraft","","MIR-PRIRODA","PRIRODA Module of MIR Space Station","207e6805-2bdf-4954-8178-c4cd63ce2269" -"Space Stations/Crewed Spacecraft","","OSTA-1","Office of Space & Terrestrial Applications-1","e554b6aa-8d53-4fc5-a7d3-e43808d9e41b" -"Space Stations/Crewed Spacecraft","","SKYLAB","","b0f992d7-3ff5-4470-849a-a540a9f8ce3e" -"Space Stations/Crewed Spacecraft","","SOYUZ","","0a14ea80-5b3a-4d6f-a81b-38150a1fbe93" -"Space Stations/Crewed Spacecraft","","","","388e72a1-b851-4b78-9e69-747e06ae215f" +"Keyword Version: 13.2","Revision: 2022-03-24 08:48:24","Timestamp: 2022-03-28 11:15:45","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/platforms/?format=xml","Case native" +Basis,Category,Sub_Category,Short_Name,Long_Name,UUID +"Air-based Platforms","Balloons","","BALLOONS","","a1586112-38f5-461c-9e88-0a95cf62062c" +"Air-based Platforms","Balloons","","EOLE","","95707b1d-4451-4958-af57-0fdf70444cac" +"Air-based Platforms","Balloons","","MAXIS","MeV Auroral X-ray Imaging and Spectroscopy","a1cfc5a9-e688-4f2e-88b0-9d72d07ea41a" +"Air-based Platforms","Balloons","","PIBAL","Pilot Balloons","dbb82f09-3a6f-4840-b1a9-c4acc3f6bbe8" +"Air-based Platforms","Balloons","","RADIOSONDES","","2516981b-e560-479d-ba96-f8edfb54efe9" +"Air-based Platforms","Balloons","","","","90077852-8e6b-4f16-92b3-24a52eecdd4a" +"Air-based Platforms","Dropwindsondes","","DROPWINDSONDES","","fa514134-ff56-47d1-bc02-6b8568ad21e7" +"Air-based Platforms","Dropwindsondes","","Dropsondes","","fea5b6b5-7b78-4a4e-b722-e0b5a89e2632" +"Air-based Platforms","Dropwindsondes","","","","2f8b489b-a1d3-43ff-baf4-935ceac2c4d4" +"Air-based Platforms","Jet","","A340-600","Airbus A340-600","bab77f95-aa34-42aa-9a12-922d1c9fae63" +"Air-based Platforms","Jet","","Alpha","H211 Alpha Jet","4595fee4-25d7-41f3-abe0-73203138c243" +"Air-based Platforms","Jet","","CESSNA CITATION II","","80b0db4e-1a31-4b54-b61f-f4bd9f17d96a" +"Air-based Platforms","Jet","","CONVAIR-990","CONVAIR-990 CORONADO","fc0c7954-fdd2-4a16-905e-d3688dfc9be1" +"Air-based Platforms","Jet","","CORSAIR 131A","","ee4eccba-83d0-4ba5-83f4-8e366712b44f" +"Air-based Platforms","Jet","","DC-6","Douglas DC-6","1dea03cc-d165-4f61-9a8c-b624b981f36a" +"Air-based Platforms","Jet","","DLR-Falcon","DLR-Falcon 20 Aircraft","0c31ed1c-8ec6-4f7c-ac27-23fb428b7415" +"Air-based Platforms","Jet","","G-III","Gulfstream III","a7b0e975-f965-4f8f-aa85-68aeae48ffb1" +"Air-based Platforms","Jet","","G-II","GULFSTREAM II","e9b3e773-5a35-4793-9683-737a9dc82524" +"Air-based Platforms","Jet","","G-IV","GULFSTREAM IV","aad5d9e8-7e22-4abc-a8c3-9cdc7578bca6" +"Air-based Platforms","Jet","","G-I","GULFSTREAM I","38f334bd-7507-43ed-8b45-d1c8ac2379a2" +"Air-based Platforms","Jet","","G-LiHT","Goddard’s LiDAR, Hyperspectral and Thermal (G-LiHT) airborne imaging system","f4dbe34b-a93e-439f-bdbb-4167c833aba6" +"Air-based Platforms","Jet","","G-V","Gulfstream V","924c4b23-30f0-451f-baa2-b6de47c94e58" +"Air-based Platforms","Jet","","HU-25A","Dassault HU-25A Guardian","d77685bd-aa94-4717-bd97-632699d999b5" +"Air-based Platforms","Jet","","HU-25C","Dassault HU-25C Guardian","47b6caf1-e14c-458c-84a1-ec64cf29b534" +"Air-based Platforms","Jet","","J-31","J-31 aircraft","293eba8a-cae4-4505-9c59-d1e223990ea4" +"Air-based Platforms","Jet","","NASA DC-8","NASA Douglas DC-8","a930c78a-6ed3-4a49-ad2d-bd2c5c36d291" +"Air-based Platforms","Jet","","NASA ER-2","NASA Earth Resources-2","b16010e6-c7ea-4c98-929e-3f844ca2f2c2" +"Air-based Platforms","Jet","","NASA S-3B VIKING","","7f1568aa-e87e-4b83-a622-e8f8a03f75bd" +"Air-based Platforms","Jet","","NASA WB-57F","","701c4a38-b7f2-41de-ab5f-d1c8ad76a717" +"Air-based Platforms","Jet","","NSF/NCAR C-130","NSF/NCAR Hercules C130 Aircraft","3a59dbd3-86c4-47dd-aeb1-935c657aa544" +"Air-based Platforms","Jet","","NSF/NCAR GV HIAPER","NSF/NCAR Gulfstream GV Aircraft","879d697c-381f-45df-a48d-2d9095bc5c54" +"Air-based Platforms","Jet","","UND CITATION II","","7f2883c4-bbaf-4150-93d8-dc48716476ca" +"Air-based Platforms","Jet","","","","5b8e4067-db4e-42d4-b4a5-7de5e683125d" +"Air-based Platforms","Propeller","","AC-500S","Rockwell Aero Commander AC-500S","20d7a6a7-1c69-469b-ac53-92078dcb2a67" +"Air-based Platforms","Propeller","","AC-680E","Rockwell Aero Commander AC-680E","3ecc7e27-1cf9-4c7d-817f-557752323560" +"Air-based Platforms","Propeller","","AC-690A","Aerocommander aircraft","6fa682b9-c6b5-46ca-971f-b7ecd4bf304d" +"Air-based Platforms","Propeller","","B-200","Beechcraft King Air B-200","d6aa2406-0323-43c1-b890-3509ee22784e" +"Air-based Platforms","Propeller","","BE-200","Beechcraft King Air BE-200","a2128496-3729-45ff-9feb-20b9b700470b" +"Air-based Platforms","Propeller","","BT-67","Basler BT-67","1bfe5750-3641-4ff1-b8bf-40deb163abf0" +"Air-based Platforms","Propeller","","C-130","Lockheed C-130 Hercules","a790e30f-5a13-4188-befb-2647a884034b" +"Air-based Platforms","Propeller","","C-131A","Convair C-131 Samaritan","0fa676d8-e487-4905-81c7-1a98150e86c8" +"Air-based Platforms","Propeller","","C-185","Cessna 185","04da5a44-7299-4d07-b85f-26db1552d00a" +"Air-based Platforms","Propeller","","C-23 Sherpa","Short Brothers C-23 Sherpa","abe97ffb-af51-43b2-a1d4-a922ddf9bc6e" +"Air-based Platforms","Propeller","","CESSNA 172 SKYHAWK","","ee829117-a171-4500-a0a5-81cac07f1071" +"Air-based Platforms","Propeller","","CESSNA 188","","80374e6d-fef6-4b11-bcc4-53568a3db220" +"Air-based Platforms","Propeller","","CESSNA 206","","ebf5d441-db97-4691-a8fc-08b4afdbac46" +"Air-based Platforms","Propeller","","CESSNA 320","","e10cf52f-a68a-4593-896b-8fe3d17483fe" +"Air-based Platforms","Propeller","","CESSNA SINGLE-ENGINE AIRCRAFT","CESSNA SINGLE-ENGINE AIRCRAFT","d80f3d86-ab38-4c27-82c5-aeae2b4c3370" +"Air-based Platforms","Propeller","","CONVAIR CV-580","CONVAIR CV-580","0b69c56f-5aaa-46a2-83da-9c4cffc7c181" +"Air-based Platforms","Propeller","","Cessna Pelican","","c97d09d4-4966-42ed-a6c7-4330a1e76edf" +"Air-based Platforms","Propeller","","Convair-580","Aircraft operated by University of Washington","9fd64ddf-4c61-45ae-8721-aa306829a165" +"Air-based Platforms","Propeller","","DHC-3","DeHavilland DHC-3 Otter","aef364b1-6a71-49c0-b248-6dc1ecd4eaa3" +"Air-based Platforms","Propeller","","DHC-6","DeHavilland Twin Otter","a3d03059-eeec-4afd-b3f1-c24a1fcf3862" +"Air-based Platforms","Propeller","","FOKKER F27","","050f6aee-d3c0-4d1c-9c88-86c9e5ac9e81" +"Air-based Platforms","Propeller","","G-1 AIRCRAFT","G-1 Aircraft","c285cedc-7581-4abc-aeee-978ffd3a8879" +"Air-based Platforms","Propeller","","GULFSTREAM 1000 (695A)","Gulfstream Jet Prop Commander 1000 (695a)","365c9e65-c156-4763-968a-a3e53e8accff" +"Air-based Platforms","Propeller","","HC-130","HC-130","8e7d2140-fbbb-4169-ba3e-e6d1fe6c7cf8" +"Air-based Platforms","Propeller","","King Air","Beechcraft King Air","f959e3c5-f014-40b7-a134-4d41b616f79d" +"Air-based Platforms","Propeller","","LA-27","Lake Seawolf LA-27","c88b260b-2acd-417e-9c82-3a8226b4e218" +"Air-based Platforms","Propeller","","LEARJET","","5c7ba790-030e-4cd6-99e8-9fe9809c5052" +"Air-based Platforms","Propeller","","NASA ELECTRA","","b1a1eda8-55a5-43a0-a984-239ab657be68" +"Air-based Platforms","Propeller","","NASA P-3","","45abac35-586f-4fed-ac38-5dcd59af2cc5" +"Air-based Platforms","Propeller","","NCAR ELECTRA","NCAR ELECTRA","fdb96a23-16f4-4df4-a60b-a4d1123587ce" +"Air-based Platforms","Propeller","","NOAA Twin Otter","NOAA De Havilland DHC-6-300 Twin Otter","ef194fe1-50e0-4ba7-943a-c87c6f5e72c1" +"Air-based Platforms","Propeller","","NP-3C Orion","Naval Research Lab P-3C Orion","fb9f4171-b9b6-4627-9c79-1d3b5890dfc4" +"Air-based Platforms","Propeller","","NRL P-3","Aircraft operated by Naval Research Lab","02d1826b-a34b-4773-a61d-de91677eb8bd" +"Air-based Platforms","Propeller","","P-3A ORION","Lockheed P-3A Orion","29564e60-e0d6-4d5d-9999-97b9cd16a034" +"Air-based Platforms","Propeller","","P-3B","Lockheed P-3B Orion","eb80f2b1-4c2f-4cbb-8cb2-40a7613edff3" +"Air-based Platforms","Propeller","","PA-12","Piper PA-12 Super Cruiser","3a710b96-89c3-4783-b811-e9c5a3f3784f" +"Air-based Platforms","Propeller","","PIPER AZTEC","","03c57589-9fc0-4ffb-b0c4-73a6e065a74f" +"Air-based Platforms","Propeller","","PIPER NAVAJO CHIEFTAIN","PIPER NAVAJO CHIEFTAIN","993d2657-71e9-4c5a-b456-ffce88699c55" +"Air-based Platforms","Propeller","","SA Mooney","Scientific Aviation Mooney","32e58bec-22e7-406e-bded-20d97de35f64" +"Air-based Platforms","Propeller","","SKYVAN","","7ec84078-8ced-4e7f-9a8c-781cc5d2bd8d" +"Air-based Platforms","Propeller","","T-39","Rockwell Sabreliner T-39","d3a21a28-538b-4292-9570-5fd3da9ce4d2" +"Air-based Platforms","Propeller","","TWIN OTTER CIRPAS NPS","","eaa3cf37-b738-47ae-abac-7c430d4ecdc7" +"Air-based Platforms","Propeller","","UC-12B","NASA Langley Beechcraft UC-12B Huron","18cb3d65-a7ab-4220-b7e3-38b98ce04ac7" +"Air-based Platforms","Propeller","","UMD Cessna","University Of Maryland Cessna 402B Research Aircraft","1d0fbb34-9f52-41cc-8b83-b45af8e58777" +"Air-based Platforms","Propeller","","UWKA","University of Wyoming King Air","64b518f5-2026-4c5b-9bae-9fa55b5b5778" +"Air-based Platforms","Propeller","","WC-130J","Lockheed-Martin WC-130J Hercules","8b1791fe-cef8-4883-a634-b3963a39c8a6" +"Air-based Platforms","Propeller","","WP-3D ORION","Lockheed WP-3D Orion","5a9f3704-2947-483b-8fe7-992692c9f289" +"Air-based Platforms","Propeller","","","","6175c78e-432c-4254-b442-40d3cf0f6b34" +"Air-based Platforms","Rockets","","ROCKETS","","c2a3f38e-524a-46ee-ac1b-2a12910e6bdd" +"Air-based Platforms","Rockets","","","","812304fb-2eaf-4ce8-ac49-2de68c025927" +"Air-based Platforms","Rotorcraft/Helicopter","","AS350-B2","Helicopter AS350-B2","50ce4651-516f-4b05-a5e0-864617ec26eb" +"Air-based Platforms","Rotorcraft/Helicopter","","AS350-B3","Helicopter AS350-B3","ad1d4887-ac0d-43a0-9e9b-b42172befebc" +"Air-based Platforms","Rotorcraft/Helicopter","","AS355-F2","Helicopter AS355-F2","770c3b12-d083-4df9-8b36-27a4786794bb" +"Air-based Platforms","Rotorcraft/Helicopter","","HELICOPTER","HELICOPTER","06e037ed-f463-4fa3-a23e-8f694b321eb1" +"Air-based Platforms","Rotorcraft/Helicopter","","","","610cd524-ed33-44c2-811c-66bd27b9b3ea" +"Air-based Platforms","Sounding Rockets","","SOUNDING ROCKETS","","3b3bc1cb-312d-448c-8cdf-a8de43bb540a" +"Air-based Platforms","Sounding Rockets","","Titan 34D","","9e9e86b0-d613-4069-abe2-8291a6fac3ef" +"Air-based Platforms","Sounding Rockets","","Titan IIID","","a044e8ff-8225-4bba-85c4-80ea394e007b" +"Air-based Platforms","Sounding Rockets","","","","db2063ed-c27a-41e2-9e40-9f2f7e63f94b" +"Air-based Platforms","Uncrewed Aerial Vehicles","","AEROSONDE","","6be3bc48-c307-4583-8357-34262cf8f35d" +"Air-based Platforms","Uncrewed Aerial Vehicles","","ALTUS","","46392889-f6e2-4b06-8f79-87f2ff9d4349" +"Air-based Platforms","Uncrewed Aerial Vehicles","","GLOBAL HAWK","","f3494b27-4de0-45d9-9a5b-8dae39785182" +"Air-based Platforms","Uncrewed Aerial Vehicles","","IKHANA","Ikhana Unmanned Science and Research Aircraft System","6c58928b-d25f-46cf-a8a6-3d5a27cc2248" +"Air-based Platforms","Uncrewed Aerial Vehicles","","RQ-4","Northrop Grumman RQ-4 Global Hawk","e5aedd55-cce6-417c-97c0-595448406ad5" +"Air-based Platforms","Uncrewed Aerial Vehicles","","UAV","Unmanned Aerial Vehicle","9b6da136-51c7-4941-8023-5826be7a9273" +"Air-based Platforms","Uncrewed Aerial Vehicles","","","","841ec82d-fdea-466c-8436-68ed93d6d6de" +"Air-based Platforms","","","","","ef71c514-0fec-4354-bb1e-6baa5967634f" +"Land-based Platforms","Field Sites","","CONTROL SURVEYS","","9909bdb4-b48b-40b0-88b3-360f9b86d0bc" +"Land-based Platforms","Field Sites","","Data Collections","","c10044b3-6ebc-413a-99b7-2be30c08e507" +"Land-based Platforms","Field Sites","","FIELD INVESTIGATION","FIELD INVESTIGATION","c7b39580-1632-4951-aecd-cee1c1afc5a0" +"Land-based Platforms","Field Sites","","FIELD SURVEYS","FIELD SURVEYS","cca1ba09-0595-4ab0-a28f-158f988e9301" +"Land-based Platforms","Field Sites","","Ice Shelf","","dd445d5a-14d5-4813-b1cb-243799a044f7" +"Land-based Platforms","Field Sites","","RADIO TRANSMITTERS","","e7057cfa-7b76-494b-b07b-01d1b284bfc6" +"Land-based Platforms","Field Sites","","TRIPOD","","9c44243f-3122-4f7f-98b1-fb4e729418e0" +"Land-based Platforms","Field Sites","","","","ca8f355b-7f63-407d-89bb-d3a6cd10d683" +"Land-based Platforms","Permanent Land Sites","","ACARS","ACARS Ground Receiving Station","c1b6934c-bcb3-45f3-bc53-60d856ac7ea1" +"Land-based Platforms","Permanent Land Sites","","AGBFM","Advanced Ground Based Field Mill","0b011fe7-4a05-4e04-92f6-fa23b9e85e1a" +"Land-based Platforms","Permanent Land Sites","","ANTHMS","Antarctic Hydrometric Stations","a7d17dd8-34f9-44ed-bb30-2742db429707" +"Land-based Platforms","Permanent Land Sites","","ARWS","Automatic Remote Weather Station","1fe1486b-3f7a-41a8-9400-98607b49ca3e" +"Land-based Platforms","Permanent Land Sites","","ASOS","Automated Surface Observing System","b8d95bb8-6841-4a77-8ae7-53375a98bf8f" +"Land-based Platforms","Permanent Land Sites","","AWOS","Automated Weather Observing System","51368be1-9b75-43de-8a73-e525c9b3848c" +"Land-based Platforms","Permanent Land Sites","","BAPMON","Background Air Pollution Monitoring Stations","cb5fc8b1-e8e3-4984-84ac-03f6f4d8a662" +"Land-based Platforms","Permanent Land Sites","","COASTAL STATIONS","COASTAL STATIONS","897f64c0-14e3-48d8-99fe-a589f57133d0" +"Land-based Platforms","Permanent Land Sites","","CODAR SeaSonde","","294cc889-28bc-4a33-b630-8225f559c3e7" +"Land-based Platforms","Permanent Land Sites","","ENTLN","Earth Networks Total Lightning Network (ENTLN)","1ab2e0db-8911-434d-a6ba-3917730e83a6" +"Land-based Platforms","Permanent Land Sites","","ESRL STATIONS","NOAA Earth Science Research Laboratory Stations","c775e963-be99-4dcf-8edd-ab826995dcba" +"Land-based Platforms","Permanent Land Sites","","FDSN","Federation of Digital Seismographic Networks","0768c45e-417b-4c35-aeb3-28e4325ef2d2" +"Land-based Platforms","Permanent Land Sites","","FIXED OBSERVATION STATIONS","FIXED OBSERVATION STATIONS","2219e7fa-9fd0-443d-ab1b-62d1ccf41a89" +"Land-based Platforms","Permanent Land Sites","","GAW","Global Atmospheric Stations","7effe54c-3378-470d-a0de-5eeab1109867" +"Land-based Platforms","Permanent Land Sites","","GEODYNAMIC STATIONS","","106de241-cb93-4ccc-8255-71784fd14b0c" +"Land-based Platforms","Permanent Land Sites","","GEOMAGNETIC STATIONS","","1fc48515-92a3-48a6-bbf0-61dfb23b1c9c" +"Land-based Platforms","Permanent Land Sites","","GEOMET","USGS Desert Winds Geological/Meteorological Ground Station","42f675c4-e14a-455c-b3f3-7cff1a7025f9" +"Land-based Platforms","Permanent Land Sites","","GMCC","NOAA Geophysical Monitoring for Climatic Change Stations","7e99dce7-ccef-4e44-a234-9af5ffa83e4f" +"Land-based Platforms","Permanent Land Sites","","GONG NETWORK","Global Oscillation Network Group","44c310ff-2688-48bd-a1eb-6e8a80a78bf0" +"Land-based Platforms","Permanent Land Sites","","GRAVITY STATIONS","","9a869e6f-df72-49dd-ac66-b9d319b9db77" +"Land-based Platforms","Permanent Land Sites","","GREAT WALL STATION","CHINESE GREAT WALL STATION","92aae4b1-cd4c-41b8-b931-4c2b70790baf" +"Land-based Platforms","Permanent Land Sites","","GROUND STATIONS","GROUND STATIONS","491d3fcc-c097-4357-b1cf-39ccf3592347" +"Land-based Platforms","Permanent Land Sites","","GROUND-BASED OBSERVATIONS","GROUND-BASED OBSERVATIONS","dbcead38-c78b-4306-b56f-0ea15c0b755b" +"Land-based Platforms","Permanent Land Sites","","GSN","Global Seismic Network","abb8c7fb-7b79-4eb3-8106-5152b8bdf8a3" +"Land-based Platforms","Permanent Land Sites","","IMPROVE","IMPROVE ambient monitoring network","d8b8c801-bc1a-4ecc-a8e8-6757e9aeddc4" +"Land-based Platforms","Permanent Land Sites","","IRIS-GSN","Incorporated Research Institutions for Seismology Network - Global Seismographic Network","5423963b-822b-4eac-8442-c9fab383f5e8" +"Land-based Platforms","Permanent Land Sites","","LDAR","Lightning Detection and Ranging","af4130b5-af02-4602-9e05-81405cfe6dc5" +"Land-based Platforms","Permanent Land Sites","","LPATS","Lightning Positioning and Tracking System Network","db3774b8-9dc1-4ae7-a999-80702cdfa41d" +"Land-based Platforms","Permanent Land Sites","","MESONET","Mesoscale Meteorological Network","3232dc8a-d223-4df2-b64a-4bd4fb632f9e" +"Land-based Platforms","Permanent Land Sites","","METEOROLOGICAL STATIONS","METEOROLOGICAL STATIONS","9b51d8b7-1ad3-4ca4-985b-e178bb17f745" +"Land-based Platforms","Permanent Land Sites","","NEUTRON MONITOR STATIONS","","a5e3eadc-b8a0-4b3b-92e4-10ae18e3041f" +"Land-based Platforms","Permanent Land Sites","","NLDN","National Lightning Detection Network","081f2d22-ca33-437f-b945-57397fd24247" +"Land-based Platforms","Permanent Land Sites","","NPN","NOAA Profiler Network","522c7bf2-c8dd-42be-8596-742ccea0f99d" +"Land-based Platforms","Permanent Land Sites","","OBSERVATORIES","","ae0531ae-ee94-4861-bcd0-5b9000b87c38" +"Land-based Platforms","Permanent Land Sites","","PASSCAL","Program for Array Seismic Studies of the Continental Lithosphere","c0872e6c-ddab-43b9-a892-1b8c5ba23f4e" +"Land-based Platforms","Permanent Land Sites","","PMS","Permafrost Monitoring Stations","465b92cd-6189-4a04-8ee7-484a1da7722f" +"Land-based Platforms","Permanent Land Sites","","PROFS","Program for Regional Observing and Forecast Systems Mesonet","04c212d2-4091-452d-b672-92d19547f7c2" +"Land-based Platforms","Permanent Land Sites","","RSTN","Radio Solar Telescope Network","f56e3e86-8e09-44ac-a4bb-6da59e9dcc2c" +"Land-based Platforms","Permanent Land Sites","","SEISMOLOGICAL STATIONS","","182fc560-a2b1-4c9d-9acf-febe0e1bf179" +"Land-based Platforms","Permanent Land Sites","","SGO","Superconducting Gravimeter Observatory","feb61055-a920-4fe3-90a2-caac0c4fd08a" +"Land-based Platforms","Permanent Land Sites","","SID","Sudden Ionospheric Disturbance Stations","73f8e476-b048-4f4d-b350-8987e3862e45" +"Land-based Platforms","Permanent Land Sites","","SMART-R","Shared Mobile Atmospheric Research and Teaching Radar","78d5b254-ae1d-4014-99a0-77e6ccd90e6f" +"Land-based Platforms","Permanent Land Sites","","SOLAR OBSERVATORY STATIONS","","5d5dddb9-ba89-49c4-bf06-d9abbe56b329" +"Land-based Platforms","Permanent Land Sites","","SOLAR RADIATION STATIONS","","30778eeb-9fab-4503-a230-1fc470f297ed" +"Land-based Platforms","Permanent Land Sites","","SOON","Solar Observing Optical Network","3ca305ea-d322-46f1-8aa4-469f8d3cdd59" +"Land-based Platforms","Permanent Land Sites","","STREAMFLOW STATION","STREAMFLOW STATION","7b335954-929b-4568-a758-1640d15c2504" +"Land-based Platforms","Permanent Land Sites","","SURFACE WATER WEIR","SURFACE WATER WEIR","a0dc24a6-75d5-48c4-aa94-0a0c9c4a440a" +"Land-based Platforms","Permanent Land Sites","","SURFRAD","Surface Radiation Budget Network","d5456efc-ae6c-4c68-8b5e-66e40226d897" +"Land-based Platforms","Permanent Land Sites","","TMRS2","Tower Mounted Radiometer System 2","e9046495-96f1-4f28-9ca0-9f35b10c7c14" +"Land-based Platforms","Permanent Land Sites","","VOLCANO OBSERVATORY","","7f62a51d-7391-418c-8589-b9a4e7d20452" +"Land-based Platforms","Permanent Land Sites","","Vaisala HydroMet AWS","Vaisala HydroMet Automatic Weather Station","6c9e32c9-bcc2-4e70-97a1-8a31a23ba65a" +"Land-based Platforms","Permanent Land Sites","","Vaisala WXT520","Vaisala Weather Transmitter WXT520","8c17b0a9-ae57-4aee-8c6b-8e7020513cc2" +"Land-based Platforms","Permanent Land Sites","","WEATHER STATIONS","WEATHER STATIONS","1551f765-cbb8-479f-a796-87c61868c509" +"Land-based Platforms","Permanent Land Sites","","WWLLN","World Wide Lightning Location Network","0b6bafa6-1cc4-47eb-9925-f72c6d6008fc" +"Land-based Platforms","Permanent Land Sites","","WeatherStation 200WX","AIRMAR 200WX WeatherStation","e9367c95-0a87-46e6-81d7-07171e5463a0" +"Land-based Platforms","Permanent Land Sites","","X-POW","X-band Polarimetric Weather Radar","8ba138b3-efea-491a-8595-e06bd53f7e2e" +"Land-based Platforms","Permanent Land Sites","","","","0ec10fd9-492c-498a-b6d8-e2840cc3643b" +"Land-based Platforms","Vehicles","","HAGGLUND","NZAP Hagglund Oversnow Vehicle","d308b30a-fdb5-44e1-9ce8-6b67051938f4" +"Land-based Platforms","Vehicles","","MIO","Mobile Ionospheric Observatory","a8cf26fe-dcfb-462b-ae0e-5d7280ecfa38" +"Land-based Platforms","Vehicles","","MIPS","Mobile Integrated Profiling System","4576f6dc-d2c6-460b-9001-248043a65765" +"Land-based Platforms","Vehicles","","NSRN","NOAA Solar Radiation Network","5f65fc52-a4f7-4ae0-a352-74fae989f9aa" +"Land-based Platforms","Vehicles","","PAM-II","Portable Automated Mesonet II","0e3131f5-f92d-441e-bba3-e28e55cfead7" +"Land-based Platforms","Vehicles","","PAM","Portable Automated Mesonet","7fe65a2b-756a-43a7-8ee6-d9ff2eb33f4c" +"Land-based Platforms","Vehicles","","SV","Snow Vehicle","eb24a648-bc31-48ad-935a-bbd2621da456" +"Land-based Platforms","Vehicles","","TRAVERSE","Logistic tractor traverse","ea573a26-c698-482d-9f1a-09193067bb46" +"Land-based Platforms","Vehicles","","","","8dc44d7b-e349-42ab-860e-18f5acfc1b28" +"Land-based Platforms","","","","","3850efdc-1839-4881-a7c0-347b57587850" +"Living Organism-based Platforms","Living Organism","","Living Organism","","ecc4a2bb-f195-4296-b300-c1227221b688" +"Living Organism-based Platforms","Living Organism","","","","6438d343-2e1f-4a89-97a9-b032e651163f" +"Living Organism-based Platforms","","","","","2385b75c-6ff2-41f8-9cd8-9b5225e4a862" +"Other","Charts","","Charts","","e9bd8b22-dc54-4bb5-b404-9ce41d7ac53d" +"Other","Charts","","","","018e1ad9-a5ad-4fae-a712-ba376144fcc3" +"Other","Maps","","MAPS","MAPS","8d56ab86-f13a-423b-b209-eca2baeb73ee" +"Other","Maps","","","","d53da93a-cc40-457a-a708-6bd4eeb1ffc1" +"Other","Models","Merged Analysis","IMERG","Integrated Multi-satellitE Retrievals for GPM","ddbadcdd-36dd-4db8-98c6-c603bec96c76" +"Other","Models","Merged Analysis","LANDMET","CCNY NOAA-CREST Land Surface Atmospheric Boundary Processing Method","e951dc1d-eeb5-4d67-ad77-e60ee469486c" +"Other","Models","Merged Analysis","Merged IR","NCEP/CPC L3 Half Hourly 4km Global (60S - 60N) Merged IR","98088db1-3135-4bbf-9a9b-215ca47d721b" +"Other","Models","Merged Analysis","RM-OBS/PU","Hybrid of NCEP/NCAR Reanalysis Model and Observations by Princeton University","0fb44090-a3e4-4820-aad5-dafbd76ae1b4" +"Other","Models","Merged Analysis","TMPA","TRMM Multi-Satellite Precipitation Analysis","eff6fbfa-3ccf-4848-89a2-b0b0e65e3524" +"Other","Models","Merged Analysis","","","6acce314-322f-4d58-9dcb-1f93457a9d86" +"Other","Models","","BLING","Biology Light Iron Nutrient and Gas model","750bc9c6-dda7-449a-9299-9473f03bb67b" +"Other","Models","","CAM-chem","Community Atmosphere Model with Chemistry","32204115-79a6-4cda-aac0-2f57580eb445" +"Other","Models","","CASA-GFED3-V2","Carnegie-Ames-Stanford-Approach Global Fire Emissions Database 3 V2","1a9082fc-2274-4f86-ad94-6034cae84ed5" +"Other","Models","","CASA-GFED3-V3","Carnegie-Ames-Stanford-Approach Global Fire Emissions Database 3 V3","c3a217f5-de08-4aeb-9429-0a29821820b5" +"Other","Models","","CESM","NCAR Community Earth System Model","1b492235-f1fa-47d9-aae5-278812d29e7d" +"Other","Models","","CHIRPS","Climate Hazards Group Infrared Precipitation with Stations","2f340c79-ed96-4c46-8546-90c14dca2078" +"Other","Models","","CLIMATE MODELS","CLIMATE MODELS","8680cb49-1637-4a47-a5fd-f39d4e618e45" +"Other","Models","","CLM-LSM","Common Land Model (CLM) Land Surface Model","d8e67ddc-abaf-469b-8e84-f1549c1ca70d" +"Other","Models","","CMAQ","Community Multiscale Air Quality Modeling System","bbe49581-019d-4fec-8730-6f07465ec479" +"Other","Models","","CMORPH","","1810678e-9c36-4260-b9a2-eb69eda1ffe4" +"Other","Models","","CMS-Flux-V1","Carbon Monitoring System Flux V1","30a98319-e05b-4f35-9cdd-8f287f6c8300" +"Other","Models","","COMPUTERS","COMPUTERS","936822a8-ce02-49aa-970f-b4a92dfd769b" +"Other","Models","","CRM","Cloud Resolving Model","57441436-5372-484e-983c-f96cbc51ef72" +"Other","Models","","Catchment-LSM","Catchment Land Surface Model","09ef7548-5e64-4296-8129-0ab625e15721" +"Other","Models","","DEM","Digital Elevation Model","4a56783a-932e-4ca7-acea-af82a9fe5626" +"Other","Models","","Data Analysis","","73c1df3f-b389-4cc0-98eb-0fbc4f071f98" +"Other","Models","","ECCO2_Darwin-V3","Estimating the Circulation and Climate of the Ocean, Phase II; Darwin-V3","b35637e0-bc1f-4ecf-b5bc-c78eaeb72562" +"Other","Models","","ECMWF ERA5","ECMWF ERA5 Atmospheric Reanalysis","931c9090-2136-458b-9047-943c25c65f3a" +"Other","Models","","ECMWFIFS","ECMWF Integrated Forecast System","47ee8305-57b9-4df1-84ce-f563df48cf69" +"Other","Models","","ECMWF","European Centre for Medium-Range Weather Forecasts Model","eb6ac42f-7c8d-4e3f-9f80-e6334c463d26" +"Other","Models","","ERA15DAS","ERA15 Data Assimilation System","d022dc0f-0ce8-471a-ac6c-aabb48542cf4" +"Other","Models","","ERA40DAS","ERA40 Data Assimilation System","260c784e-c422-4279-97fa-9c7a348118fa" +"Other","Models","","FFDAS-V2","Fossil Fuel Data Assimilation System V2","5c869d68-fbf3-466b-89a0-9622f4f6e773" +"Other","Models","","FLEXPART","FLEXible PARTicle dispersion model","6df317e1-6694-4741-b657-58b15253f384" +"Other","Models","","FSL-MAPS","FSL Mesoscale Analysis and Prediction System","f065f97b-a10e-4204-8807-dc904c409b51" +"Other","Models","","Forcing-LSM","Forcing data for Land Surface Model","862e790e-d42f-433a-8561-107562aceb64" +"Other","Models","","GCM","General Circulation Model","d1e2c5e2-076b-4949-8125-384712a33b58" +"Other","Models","","GDAS","Global Data Assimilation System","b316bcaf-1ab8-4a67-91b7-76c28bb29e4e" +"Other","Models","","GEOS-4","Goddard EOS Data Assimilation System-4","b42aa64a-6b63-4fd0-b953-4abf7558008c" +"Other","Models","","GEOS-5","Goddard EOS Data Assimilation System-5","42ad1501-744a-439c-a394-258db03d0304" +"Other","Models","","GEOS-Chem","Global 3-D chemical transport model (CTM) for atmospheric composition driven by meteorological input from the Goddard > Earth Observing System (GEOS) of the NASA Global Modeling and Assimilation Office","4773815f-2a76-425e-86cc-0bfd4c3b75c2" +"Other","Models","","GLPPM","Great Lake Primary Productivity Model","913391a8-e711-43f3-ade2-ef26fddeba24" +"Other","Models","","GOCART","Goddard Chemistry Aerosol Radiation and Transport Model","bacbb5ad-9269-48ce-8da2-c22d73b9a5f2" +"Other","Models","","L4_C","SMAP Level 4 Carbon Flux Model","08ccef97-4faf-4678-8404-03945170aa21" +"Other","Models","","LNOM","Lightning Nitrogen Oxides Model","9f792df5-3995-48ad-af46-d4ad887d102c" +"Other","Models","","LSM","Land Surface Model","73cef3bc-0a2c-4c10-9e5b-d0c64bca038f" +"Other","Models","","MERRA-2","The second Modern-Era Retrospective analysis for Research and Applications","09294834-bc5d-4937-ba1a-3a62b4329948" +"Other","Models","","MERRA","Modern-Era Retrospective Analysis for Research and Applications","5a147bc8-abc3-4c79-bbba-0a64bf888b41" +"Other","Models","","MICOM","Miami Isopycnic Coordinate Ocean Model","00f8ab1f-040f-40b4-ba64-9f6a4c2ca7ed" +"Other","Models","","MITgcm","Massachusetts Institute of Technology General Circulation Model","3fd56bd8-0e40-4401-9033-97df9a552001" +"Other","Models","","MODELS","MODELS","26d3953e-be79-46e4-b746-efb1983c3f5c" +"Other","Models","","MOZART-4","Model for Ozone and Related chemical Tracers, version 4","fe979e09-fcb1-4991-8fab-8ff32a28e84b" +"Other","Models","","ModelE","GISS GCM ModelE","8ad656db-1324-4e92-8273-5a765ca29282" +"Other","Models","","Mosaic-LSM","Mosaic Land Surface Model","8c1eb362-072d-4763-b6f3-6b706b257e6a" +"Other","Models","","NASA-GISS-3D-Tracer-Transport","","16ddc50b-7bb0-4a13-adef-dbdd5e2e2bcd" +"Other","Models","","NASA-GISS-Dust-Transport","","ac82f543-df04-4301-b5fa-dae2800197d6" +"Other","Models","","NCEP-CFSR","NCEP Climate Forecast System Reanalysis","929347c6-e7d9-4e72-a6c8-8926a369cb6b" +"Other","Models","","NCEP-CFSV2","NCEP Climate Forecast System Version 2","86ee0e30-96d0-4bb4-9ee6-a24aa0e0234b" +"Other","Models","","NCEP-ETA","NCEP Eta Model","2ecfc2b9-118b-4462-9352-9193eef0a1dc" +"Other","Models","","NCEP-FNL","NCEP Final Global Data Assimilation System","0ea8022d-e6bf-48e0-86ce-e1e7a886b7b1" +"Other","Models","","NCEP-GFS","NCEP Global Forecast System","53b3429a-d915-4d1c-b600-bf3e37874839" +"Other","Models","","NCEP-GODAS","NCEP Global Ocean Data Assimilation System","4201d98f-7f8a-46bf-b823-47385bbc7fed" +"Other","Models","","NCEP-MRF","NCEP Medium Range Forecast Model","6426710e-8498-4308-845e-c9c543bcc17e" +"Other","Models","","NCEP-NAM","NCEP North American Model","4cbc6cbe-50a2-4464-acd9-395379753d4e" +"Other","Models","","NCEP-RUC","NCEP Rapid Update Cycle Model","8c24fade-c39c-4b4f-b60c-d884ae780948" +"Other","Models","","NCEP/DOE-R2M","NCEP/DOE Reanalysis 2 Model","7c4302ef-0fca-4987-9515-d059b9e0bb95" +"Other","Models","","NCEP/NCAR-RM","NCEP/NCAR Reanalysis Model","b1c1ea44-000a-4535-8e90-d8dd447371d4" +"Other","Models","","NOBM","NASA Ocean Biogeochemical Model","b63e0078-74a3-431d-92f7-8853c10474e4" +"Other","Models","","Noah-LSM","Noah Land Surface Model","d92e3dca-7aeb-4cc1-9dc0-571844337222" +"Other","Models","","OBSERVATION BASED","OBSERVATION BASED ANALYSES","bb5002a8-6ff2-43dd-b0c9-8f9a76e11cb5" +"Other","Models","","OCEAN STATE ESTIMATION","","04d24dfe-c9f7-43b6-8bd8-8f2613767257" +"Other","Models","","OPERATIONAL MODELS","","9f95a56a-2669-427e-a785-de9162ffe133" +"Other","Models","","POM","Princeton Ocean Model","45d0ab0d-19d4-4fc4-8f69-9f6b4529a430" +"Other","Models","","Penman-Monteith","Penman-Monteith Model with Enhanced Surface Resistance Parameterization","3b746299-cd6d-4aa9-8de2-f05f3d6897cc" +"Other","Models","","RAQMS","Regional Air Quality Modeling System","012a6415-f410-467f-92a8-5196cfd211f4" +"Other","Models","","RASI","","2d0c75bf-49bc-4a76-bd77-b179ea677bc2" +"Other","Models","","REANALYSIS MODELS","","e804fb28-786b-460f-969c-7005b0803cde" +"Other","Models","","SMERGE","NLDAS-Noah and ESA-CCI Merged Soil Moisture","dbe12992-5ef4-47d2-b2a4-84a7c28e84f0" +"Other","Models","","SPEAR","Seamless System for Prediction and EArth System Research","3d374eb9-1eb4-4c64-b764-47f6206bbc85" +"Other","Models","","TRAJ3D","Three-Dimensional Trajectory Model","388b0962-f9c0-48d9-95aa-0aa55d5043d9" +"Other","Models","","Unified Model UM","United Kingdom Met Office (UKMO) Unified Model","1ee7757f-8097-432c-b473-b2a2a1266f30" +"Other","Models","","VIC-LSM","Variable Infiltration Capacity (VIC) Land Surface Model","87a9b8ff-5da4-4a9e-815b-2564a1af2719" +"Other","Models","","WRF","Weather Research and Forecasting (WRF) Model","6fb2817f-c3e3-4332-85ad-79f74227e6bc" +"Other","Models","","","","0a184cdc-c074-4946-90a6-02f03c686341" +"Other","NOT APPLICABLE","","NOT APPLICABLE","","cffdd7e9-e25d-4c85-86ae-ff651532f02e" +"Other","NOT APPLICABLE","","","","76b8f939-8558-4a10-8139-c7f8a0162102" +"Other","Photographs","","AERIAL PHOTOGRAPHS","AERIAL PHOTOGRAPHS","3cb5948f-2a92-4c2a-9410-eb17a1045d8e" +"Other","Photographs","","STEREOGRAPHIC PHOTOGRAPHS","","c9219254-6f80-495b-b3dc-92b1abfdaa8b" +"Other","Photographs","","","","af32bc6d-1bfc-4a2b-8a63-43fcd20a773e" +"Other","Physical Models","","Analytical Lab","","ac63eed1-779d-4085-92f8-5743ec64a942" +"Other","Physical Models","","LABORATORY","LABORATORY","3cbb9f17-ddb1-48d3-a507-786887e485af" +"Other","Physical Models","","PHOTOSYNTHESIS CHAMBER","PHOTOSYNTHESIS CHAMBER","ec465fa3-b45e-4f0f-8a3b-857f91c8dbed" +"Other","Physical Models","","","","c85170ef-cf60-470e-b9d0-f22c138911fd" +"Other","Reports","","MISSION REPORTS","","f9846838-fdbc-4aa0-86e9-b0e70e97d0e2" +"Other","Reports","","Publications","","2e555886-1baa-4f05-899b-1d14ab69fe62" +"Other","Reports","","","","d62db12c-fdcf-40ec-a714-4fb7c615aebe" +"Other","","","","","5cd7da77-cb95-40aa-8775-b6df68e0aa63" +"Space-based Platforms","Earth Observation Satellites","Advanced Earth Observing Satellite (ADEOS)","ADEOS-II","Advanced Earth Observing Satellite-II","5d00fc17-cf10-4d1b-b871-07099d0b728a" +"Space-based Platforms","Earth Observation Satellites","Advanced Earth Observing Satellite (ADEOS)","ADEOS-I","Advanced Earth Observing Satellite-I","359bcfa1-966f-4d2b-a48d-ac12165d250f" +"Space-based Platforms","Earth Observation Satellites","Advanced Earth Observing Satellite (ADEOS)","","","119b40ad-749c-4ff6-af9b-1e9696f78dd8" +"Space-based Platforms","Earth Observation Satellites","Advanced Land Observing Satellite (ALOS)","ALOS-2","Advanced Land Observing Satellite-2","e4009ba2-7e5d-41ea-b4f9-c45788ad8589" +"Space-based Platforms","Earth Observation Satellites","Advanced Land Observing Satellite (ALOS)","ALOS","Advanced Land Observing Satellite","0bf5fb56-9d29-438a-a84f-a60296a2e503" +"Space-based Platforms","Earth Observation Satellites","Advanced Land Observing Satellite (ALOS)","","","6cca285c-edc4-4147-ba57-9cbbffbc0ae6" +"Space-based Platforms","Earth Observation Satellites","Advanced Technology Satellite (ATS)","ATS-1","Advanced Technology Satellite-1","5f78a0f6-bd07-4cbf-9e13-4ad44aeb4ac3" +"Space-based Platforms","Earth Observation Satellites","Advanced Technology Satellite (ATS)","ATS-2","Advanced Technology Satellite-2","1190ffd3-586f-46a5-bf9b-e7bf16281edd" +"Space-based Platforms","Earth Observation Satellites","Advanced Technology Satellite (ATS)","ATS-3","Advanced Technology Satellite-3","6988684a-7e7c-48a7-a1c3-2586dddd1fd4" +"Space-based Platforms","Earth Observation Satellites","Advanced Technology Satellite (ATS)","ATS-4","Advanced Technology Satellite-4","cb8e56df-863a-41a6-a389-237a9725ae8b" +"Space-based Platforms","Earth Observation Satellites","Advanced Technology Satellite (ATS)","","","14b369b6-19d4-41fe-b1bc-27807ecb666d" +"Space-based Platforms","Earth Observation Satellites","Aeros","AEROS-1","","6164d877-53a0-4ba2-b73a-9dfb363474c9" +"Space-based Platforms","Earth Observation Satellites","Aeros","AEROS-2","","df8ac2e0-810a-4671-b2dc-c031487d14ee" +"Space-based Platforms","Earth Observation Satellites","Aeros","","","52aef8fa-ae6a-451a-a227-d109a6605cf6" +"Space-based Platforms","Earth Observation Satellites","Alouette","ALOUETTE-1","","4f800938-81f5-4478-bb05-54915f641b70" +"Space-based Platforms","Earth Observation Satellites","Alouette","ALOUETTE-2","","080e9bc1-058f-4eab-b7ce-009b323299ca" +"Space-based Platforms","Earth Observation Satellites","Alouette","","","5981d335-9b9d-4043-a963-f71a678384ee" +"Space-based Platforms","Earth Observation Satellites","Applications Explorer Mission (AEM)","AEM-1","Applications Explorer Mission-1","cb310a29-01bb-4b52-8ff2-52dbfda7d050" +"Space-based Platforms","Earth Observation Satellites","Applications Explorer Mission (AEM)","AEM-2","Applications Explorer Mission-2","a796345a-53d4-400d-ba32-e7c7eaa1a1cc" +"Space-based Platforms","Earth Observation Satellites","Applications Explorer Mission (AEM)","AEM-3","Applications Explorer Mission-3","7921a2bb-f13b-43ce-ad18-cfce4f3deb9c" +"Space-based Platforms","Earth Observation Satellites","Applications Explorer Mission (AEM)","","","b1337c5b-c705-42c0-bc07-97689734253c" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Dynamics Mission-Aeolus (ADM-Aeolus)​","AD-A","Atmosphere Dynamics A (Explorer 19)","0e03a1c5-1d20-46ae-9041-94d1ff77783f" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Dynamics Mission-Aeolus (ADM-Aeolus)​","AD-B","Atmosphere Dynamics B (Explorer 24)","fd3a7054-3aec-41ea-a281-3edba4f9f313" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Dynamics Mission-Aeolus (ADM-Aeolus)​","AD-C","Atmosphere Dynamics C (Explorer 39)","23be0822-1db5-4bf6-bf28-f6bd36754ac3" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Dynamics Mission-Aeolus (ADM-Aeolus)​","","","d1bbc871-749b-4759-bf4f-f8349f8b4020" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Explorer (AE)","AE-A","Atmosphere Explorer A (Explorer 17)","5a2b20fa-89d3-4cfc-b186-fbc29113e910" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Explorer (AE)","AE-B","Atmosphere Explorer B (Explorer 32)","65bdc896-7ed5-4d22-8b15-df0914b5be69" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Explorer (AE)","AE-C","Atmosphere Explorer C (Explorer 51)","f62c196b-8ec3-40e8-a824-6849e5a496f2" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Explorer (AE)","AE-D","Atmosphere Explorer D (Explorer 54)","3516fe07-9d51-42f3-b635-b6a5001e1d6c" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Explorer (AE)","AE-E","Atmosphere Explorer E (Explorer 55)","340b5b79-16c4-4cb7-9476-5cbab3efd834" +"Space-based Platforms","Earth Observation Satellites","Atmosphere Explorer (AE)","","","96dcdb2e-3861-4a4b-97f4-764fd117a0f1" +"Space-based Platforms","Earth Observation Satellites","Beacon Explorer (BE)","BE-B","Beacon Explorer-B","f18c5acb-6318-4d40-bda2-459ec09c57f5" +"Space-based Platforms","Earth Observation Satellites","Beacon Explorer (BE)","BE-C","Beacon Explorer-C","b0376960-fe7c-4117-8da6-d56a124d09bf" +"Space-based Platforms","Earth Observation Satellites","Beacon Explorer (BE)","","","74cf41a6-464f-44bf-ba05-1535200d6354" +"Space-based Platforms","Earth Observation Satellites","Cartosat","CARTOSAT-2A","","16ee6fd3-565f-49b4-8b6e-73c4f8858e01" +"Space-based Platforms","Earth Observation Satellites","Cartosat","CARTOSAT-2","","71ccf8e3-7b1f-418d-9bc0-0ead78ec75ee" +"Space-based Platforms","Earth Observation Satellites","Cartosat","","","b65c6b10-a648-4a7c-9af1-71506ed9bb13" +"Space-based Platforms","Earth Observation Satellites","China-Brazil Earth Resources Satellite (CBERS)","CBERS-1","China-Brazil Earth Resource Satellite 1","0303de56-025a-416c-8a2e-ac14979dc455" +"Space-based Platforms","Earth Observation Satellites","China-Brazil Earth Resources Satellite (CBERS)","CBERS-2B","China-Brazil Earth Resource Satellite 2B","274b7618-c580-4466-8a63-f79b0beb778c" +"Space-based Platforms","Earth Observation Satellites","China-Brazil Earth Resources Satellite (CBERS)","CBERS-2","China-Brazil Earth Resource Satellite 2","808fa0c2-1d97-4347-a5dd-2b285000c6f2" +"Space-based Platforms","Earth Observation Satellites","China-Brazil Earth Resources Satellite (CBERS)","CBERS-3","China-Brazil Earth Resource Satellite 3","064b3481-8a82-4c2b-9d59-86eda10cff53" +"Space-based Platforms","Earth Observation Satellites","China-Brazil Earth Resources Satellite (CBERS)","CBERS-4","China-Brazil Earth Resource Satellite 4","8551bdde-6ae3-459f-a903-ec1ce7fab5d9" +"Space-based Platforms","Earth Observation Satellites","China-Brazil Earth Resources Satellite (CBERS)","","","2b68d69c-e4c8-4194-8db6-8b9002607fb6" +"Space-based Platforms","Earth Observation Satellites","Constellation of Small Satellites for Mediterranean basin Observation (COSMO)","COSMO-SKYMED","Constellation of Small Satellites for Mediterranean basin Observation","97116573-f0a2-4e18-8601-77e43b717be6" +"Space-based Platforms","Earth Observation Satellites","Constellation of Small Satellites for Mediterranean basin Observation (COSMO)","COSMO-SkyMed Second Generation (CSG)","COSMO-SkyMed Second Generation (CSG)","b359999f-bb1e-43de-ae6e-1e9dc44e752a" +"Space-based Platforms","Earth Observation Satellites","Constellation of Small Satellites for Mediterranean basin Observation (COSMO)","","","7545e1af-1a3a-4ebc-95e3-cbff49cca4c5" +"Space-based Platforms","Earth Observation Satellites","Cosmos","COSMOS 1500","","04bda92c-0e4f-4e60-82d0-2242b14ce0c4" +"Space-based Platforms","Earth Observation Satellites","Cosmos","COSMOS 49","","8491e067-951e-4cba-9619-d376b5c628a0" +"Space-based Platforms","Earth Observation Satellites","Cosmos","","","0aee28fe-1c74-4743-8855-003bc1075174" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5B/F3","Defense Meteorological Satellite Program-F3","7ed12e98-95b1-406c-a58a-f4bbfa405269" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-1/F1","Defense Meteorological Satellite Program-F1","f2a6694b-5ba1-464a-9d0f-d0212e492d53" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-1/F2","Defense Meteorological Satellite Program-F2","caece537-38fc-4888-8ca7-1f4570dcf409" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-1/F3","Defense Meteorological Satellite Program-F3","06d68016-affc-4477-86f5-e14a7a9839f2" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-1/F4","Defense Meteorological Satellite Program-F4","66014559-5d7a-4f53-811a-1c5b682e4e56" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-1/F5","Defense Meteorological Satellite Program-F5","60e10f22-c473-4368-888f-886a751662ea" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F10","Defense Meteorological Satellite Program-F10","aa866680-32cd-4bd2-88ee-ae7b45c629da" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F11","Defense Meteorological Satellite Program-F11","0d8490b8-347e-4f61-a747-07700c863b47" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F12","Defense Meteorological Satellite Program-F12","60bf045b-f556-4461-8dcc-54dc63300537" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F13","Defense Meteorological Satellite Program-F13","48a1fe2e-6cb2-44ad-8303-0a3328b1e5e4" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F14","Defense Meteorological Satellite Program-F14","b13ff0b8-748c-475c-8512-361ae27a9395" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F15","Defense Meteorological Satellite Program-F15","0661540e-f7b7-469b-9ef7-eaa0dd7a6d10" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F6","Defense Meteorological Satellite Program-F6","030470d1-f545-4775-90b3-b12978cd6315" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F7","Defense Meteorological Satellite Program-F7","b8d201a6-28e8-4889-bc23-97babf5a75c5" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F8","Defense Meteorological Satellite Program-F8","d6a9e2e1-7c3b-4c10-9ffb-59c40b1b2061" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-2/F9","Defense Meteorological Satellite Program-F9","88f4f200-a0fc-4325-aea6-6f525ca31bfe" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-3/F15","Defense Meteorological Satellite Program-F15","4d78ad33-3b1d-4ddc-9d4a-296600363d45" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-3/F16","Defense Meteorological Satellite Program-F16","2f4b0671-f9a0-4912-96cd-96527a4c0678" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-3/F17","Defense Meteorological Satellite Program-F17","be9ed5c4-4d6b-45fa-9bf7-55b7995fbd15" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-3/F18","Defense Meteorological Satellite Program-F18","859c1a88-56d5-48c2-839d-6d18f7746379" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP 5D-3/F19","Defense Meteorological Satellite Program-F19","d1ad8ea7-b460-44b2-a96a-1040d156eeb4" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","DMSP","Defense Meteorological Satellite Program","64dfed70-dca2-4656-83d9-63e74c1b0740" +"Space-based Platforms","Earth Observation Satellites","Defense Meteorological Satellite Program (DMSP)","","","1cf8cbcd-c1be-4c78-9272-b62adad59aa1" +"Space-based Platforms","Earth Observation Satellites","Deimos","Deimos-2","Deimos-2 Minisatellite Mission","48e0f5f2-08fb-4739-8c5f-f53e24003f8c" +"Space-based Platforms","Earth Observation Satellites","Deimos","","","f122ab59-266b-4be9-99ad-4c2172bcf97c" +"Space-based Platforms","Earth Observation Satellites","Diadem","DIADEM-1C","","5edd7e9b-8b22-438a-b2e2-2c708bd0ac9c" +"Space-based Platforms","Earth Observation Satellites","Diadem","DIADEM-1D","","143a5181-7601-4cc7-96d1-2b1a04b08fa7" +"Space-based Platforms","Earth Observation Satellites","Diadem","","","4a21b488-a0ed-4b11-9b7a-a32e123b555e" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 1st Generation (DMC-1G)","ALSAT-1","","5ec20355-ec48-41cf-9020-9d094af549e6" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 1st Generation (DMC-1G)","BEIJING-1","","05d8035f-176b-451a-a52b-43d2cc6286bb" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 1st Generation (DMC-1G)","BILSAT-1","BILSAT-1","144d9185-4435-4cb3-8f09-b3f569eb3a33" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 1st Generation (DMC-1G)","NIGERIASAT-1","NIGERIASAT-1","cf904fd3-2fba-40b8-9950-4e200b83a919" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 1st Generation (DMC-1G)","UK-DMC","United Kingdom-Disaster Monitoring Constellation","2a79b3d1-6417-4ec7-bf03-ac03f0b45266" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 1st Generation (DMC-1G)","","","591c05ef-9b21-4c96-84b5-33f95cca3ab7" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 2nd Generation (DMC-2G)","Deimos-1","Deimos-1 Microsatellite Mission","8b35d386-0999-4b6e-ad12-f8501427b0ca" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 2nd Generation (DMC-2G)","NigeriaSat-2","NigeriaSat-2","1dda5116-4079-445e-ae1c-614e49879cf3" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 2nd Generation (DMC-2G)","NigeriaSat-X","NigeriaSat-X","35cafb99-393d-4727-a89d-5472512b2fdf" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 2nd Generation (DMC-2G)","UK-DMC-2","United Kingdom-Disaster Monitoring Constellation-2","03afbb23-76cc-4241-b5a3-853367f8461f" +"Space-based Platforms","Earth Observation Satellites","Disaster Monitoring Constellation- 2nd Generation (DMC-2G)","","","e5184d15-eec8-4703-8318-243748ddbd0e" +"Space-based Platforms","Earth Observation Satellites","Dynamics Explorer (DE)","DE-1","Dynamics Explorer-1","59dcd28c-9bd0-4b00-a68c-d892c68bf614" +"Space-based Platforms","Earth Observation Satellites","Dynamics Explorer (DE)","DE-2","Dynamics Explorer-2","1bc7b5ee-93b6-4bc4-b340-89507104d33f" +"Space-based Platforms","Earth Observation Satellites","Dynamics Explorer (DE)","","","74bd6271-10ce-428d-8368-4abbd12da55f" +"Space-based Platforms","Earth Observation Satellites","EXPLORER","EXPLORER-9","Air Density Sphere","84d39d18-7ae4-4f86-9626-694de58da933" +"Space-based Platforms","Earth Observation Satellites","EXPLORER","","","0c52630e-cc77-42ab-b1ae-cb736486200e" +"Space-based Platforms","Earth Observation Satellites","Earth Explorers","Biomass","Biomass monitoring mission for Carbon Assessment","a9b21edd-49b7-43be-8e35-8652bbc5559a" +"Space-based Platforms","Earth Observation Satellites","Earth Explorers","CRYOSAT-2","CRYOSAT-2","a915ab2f-46c5-493b-9f18-aeb3383ee72b" +"Space-based Platforms","Earth Observation Satellites","Earth Explorers","GOCE","Gravity Field and Steady-State Ocean Circulation Explorer","b4fc57c3-7f36-40dc-8067-8b1f4dff4e3d" +"Space-based Platforms","Earth Observation Satellites","Earth Explorers","SMOS","Soil Moisture and Ocean Salinity (Earth Explorer Opportunity Mission)","a641c997-0bd2-41aa-ba43-8e03066c3c2a" +"Space-based Platforms","Earth Observation Satellites","Earth Explorers","","","fe9b35e7-6243-44bb-ac42-ce8350e7a86f" +"Space-based Platforms","Earth Observation Satellites","Earth Resources Observation Satellite (EROS)","EROS-A1","","ca01c6b2-f799-4f8a-bb33-d553a244048e" +"Space-based Platforms","Earth Observation Satellites","Earth Resources Observation Satellite (EROS)","EROS-B1","","ce7434f6-7558-434a-afbf-c29500e4ca0d" +"Space-based Platforms","Earth Observation Satellites","Earth Resources Observation Satellite (EROS)","","","52de5848-a1f3-4efe-a784-2bb93fc51f1d" +"Space-based Platforms","Earth Observation Satellites","Echo","ECHO-1","","9b532124-c5a7-40c7-9788-a61ff1295363" +"Space-based Platforms","Earth Observation Satellites","Echo","ECHO-2","","6e2adc45-a039-46cb-b8e5-e4743df7e656" +"Space-based Platforms","Earth Observation Satellites","Echo","","","0a3e3bc3-d878-44f0-9650-145a53062c36" +"Space-based Platforms","Earth Observation Satellites","Elektro-L","Elektro-L N1","Geostationary Operational Meteorological Satellite","6d0d4c3e-acfb-4bfd-ab0d-4478e18e4b19" +"Space-based Platforms","Earth Observation Satellites","Elektro-L","Elektro-L N3","","2c780dff-fce3-4625-8b89-a7cd2d64d6ec" +"Space-based Platforms","Earth Observation Satellites","Elektro-L","","","882c16a9-0bc6-4773-8066-e25ea8de3c9d" +"Space-based Platforms","Earth Observation Satellites","Environmental Science Services Administration (ESSA)","ESSA-3","Environmental Science Services Administration Satellite 3","c7706afe-079a-4966-8a9e-6a688ca9b880" +"Space-based Platforms","Earth Observation Satellites","Environmental Science Services Administration (ESSA)","ESSA-4","Environmental Science Services Administration Satellite 4","50992afe-f79e-47fc-a1a2-126dc2c42c9a" +"Space-based Platforms","Earth Observation Satellites","Environmental Science Services Administration (ESSA)","ESSA-5","Environmental Science Services Administration Satellite 5","8b67c88a-b62f-4585-a5d3-8e0005f42fd0" +"Space-based Platforms","Earth Observation Satellites","Environmental Science Services Administration (ESSA)","ESSA-7","Environmental Science Services Administration Satellite 7","2e4252b9-5b53-41bb-8212-1e63a540181f" +"Space-based Platforms","Earth Observation Satellites","Environmental Science Services Administration (ESSA)","ESSA-9","Environmental Science Services Administration Satellite 9","1dc828a8-8502-479d-b7c4-d5139c06029a" +"Space-based Platforms","Earth Observation Satellites","Environmental Science Services Administration (ESSA)","","","65cb3e7c-d4d8-46df-a5fc-aec63e58e8df" +"Space-based Platforms","Earth Observation Satellites","Etalon","ETALON-1","","0bd45536-e8d5-42bf-998f-05ce4d0f0a49" +"Space-based Platforms","Earth Observation Satellites","Etalon","ETALON-2","","c9c07cf0-49eb-4c7f-aeff-2e95caae9500" +"Space-based Platforms","Earth Observation Satellites","Etalon","","","820b20d7-03b3-43a3-9c7a-f28fa3b0bfe2" +"Space-based Platforms","Earth Observation Satellites","European Remote Sensing Satellite (ERS)","ERS-1","European Remote Sensing Satellite-1","02c85d04-228e-4bf3-bb03-d72c22681dff" +"Space-based Platforms","Earth Observation Satellites","European Remote Sensing Satellite (ERS)","ERS-2","European Remote Sensing Satellite-2","affbd015-9373-4413-b76f-e91d01c4f5e3" +"Space-based Platforms","Earth Observation Satellites","European Remote Sensing Satellite (ERS)","","","3b6b4870-ae80-4488-b9fb-f9152037ec59" +"Space-based Platforms","Earth Observation Satellites","FengYun-2","FY-2D","FengYun-2D","3019aa61-89f6-4226-97b3-6c80ef65da10" +"Space-based Platforms","Earth Observation Satellites","FengYun-2","FY-2E","FengYun-2E","d2b2dc9e-7a97-4e16-8562-1087a74fb9c9" +"Space-based Platforms","Earth Observation Satellites","FengYun-2","","","e3344a00-36a4-49c2-b05e-5b540044b510" +"Space-based Platforms","Earth Observation Satellites","FengYun-3","FY-3A","FengYun-3A","2f734fc9-2cfa-4a60-b71e-1357a168fbd1" +"Space-based Platforms","Earth Observation Satellites","FengYun-3","FY-3B","FengYun-3B","f0030752-05f7-404b-9dd1-2b159d6be13e" +"Space-based Platforms","Earth Observation Satellites","FengYun-3","FY-3C","FengYun-3C","c65041d4-7a29-48da-86e6-02ac03d366ff" +"Space-based Platforms","Earth Observation Satellites","FengYun-3","","","84ec9a79-3594-4915-8475-66fdb6e1481c" +"Space-based Platforms","Earth Observation Satellites","FireBIRD","BIROS","Bi-spectral InfraRed Optical System","8e53aafe-f7a5-4629-893e-0a3ae1a6fe1d" +"Space-based Platforms","Earth Observation Satellites","FireBIRD","TET-1","Technology Experiment Carrier-1","67e5bbab-0c9b-40e5-acf7-054671f35d2b" +"Space-based Platforms","Earth Observation Satellites","FireBIRD","","","9b165321-e03c-44dc-bb9c-d10c32c93ab6" +"Space-based Platforms","Earth Observation Satellites","GHGSat","GHGSat-C1","Greenhouse Gas Satellite - C1","38a680f5-6c96-490d-9683-8c5588090e34" +"Space-based Platforms","Earth Observation Satellites","GHGSat","GHGSat-C2","Greenhouse Gas Satellite - C2","6564cc55-1032-4e52-b1d4-b177224d3805" +"Space-based Platforms","Earth Observation Satellites","GHGSat","GHGSat-D","Greenhouse Gas Satellite - Demonstrator","1aabc727-a8d8-4dff-a248-8e485d147b00" +"Space-based Platforms","Earth Observation Satellites","GHGSat","","","82823ffa-e4d5-4877-bf0a-b9eb5b8c1108" +"Space-based Platforms","Earth Observation Satellites","Geodetic Earth Orbiting Satellite (GEOS)","GEOS-1","Geodetic Earth Orbiting Satellite-1","a44b20a7-be0a-40d5-baba-8a77022db3a1" +"Space-based Platforms","Earth Observation Satellites","Geodetic Earth Orbiting Satellite (GEOS)","GEOS-2","Geodetic Earth Orbiting Satellite-2","d3b6b9b2-055e-4a11-b0e6-58f233f24b37" +"Space-based Platforms","Earth Observation Satellites","Geodetic Earth Orbiting Satellite (GEOS)","GEOS-3","Geodetic Earth Orbiting Satellite-3","73ac5529-c0ec-46b5-a592-84b197bb0a35" +"Space-based Platforms","Earth Observation Satellites","Geodetic Earth Orbiting Satellite (GEOS)","","","608e831d-f722-4a97-b173-a308d7bc6dd2" +"Space-based Platforms","Earth Observation Satellites","Geodetic Satellite (GEOSAT)","GEOSAT","Geodetic Satellite","053da8e9-78d7-4d7f-997a-d06773323b7e" +"Space-based Platforms","Earth Observation Satellites","Geodetic Satellite (GEOSAT)","GFO-1","GEOSAT FOLLOW-ON-1","84d55533-31f1-4601-acad-5444b31b62b4" +"Space-based Platforms","Earth Observation Satellites","Geodetic Satellite (GEOSAT)","","","b78f1a1f-2e62-4f21-8031-670f008bdaa5" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-10","Geostationary Operational Environmental Satellite 10","6decd6f7-1572-4716-908e-53320218efa1" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-11","Geostationary Operational Environmental Satellite 11","2b10bfcf-f7ab-4ce1-9a4e-0b6f397a7ae0" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-12","Geostationary Operational Environmental Satellite 12","a93b5d7d-5bf4-49d3-b05f-b5f0b55b1bf6" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-13","Geostationary Operational Environmental Satellite 13","3c57a713-8cfe-4e65-8d6c-d30a59786313" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-14","Geostationary Operational Environmental Satellite 14","9dfc4f09-66e5-4e70-b4f9-72f52855c9c3" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-15","Geostationary Operational Environmental Satellite 15","e9415082-d8d2-4073-ba8a-fe22a2c521b6" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-16","Geostationary Operational Environmental Satellite 16","cbc78fde-7247-4906-b553-92c125fd848d" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-17","Geostationary Operational Environmental Satellite 17","bec0b215-7fe0-46e8-855a-d1807779f004" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-1","Geostationary Operational Environmental Satellite 1","9a5e161d-6979-4c0f-a6bd-7d3c268fef18" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-2","Geostationary Operational Environmental Satellite 2","59b9924a-a10f-4205-9051-ed611164fd97" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-3","Geostationary Operational Environmental Satellite 3","54aa88e0-f005-4525-bb26-1b8ed615b5f2" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-4","Geostationary Operational Environmental Satellite 4","eb1b830e-d451-46df-a8c6-4538ed9a5960" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-5","Geostationary Operational Environmental Satellite 5","cc07c141-768f-4e46-a222-5a423b6018a0" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-6","Geostationary Operational Environmental Satellite 6","93ca4f6a-2552-408b-adc2-2a3ca64a4a66" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-7","Geostationary Operational Environmental Satellite 7","2c8920b1-3ed2-417f-90d7-f94a387c77ac" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-8","Geostationary Operational Environmental Satellite 8","64fabc3c-0684-4325-9831-bf7cc461684d" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-9","Geostationary Operational Environmental Satellite 9","2304694e-c900-4d63-b458-80163d5dcd86" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES","NOAA Geostationary Operational Environmental Satellites","6b9ee582-1641-4f3b-8ce2-22ad3aae93fa" +"Space-based Platforms","Earth Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","","","e31e924e-9e50-4856-b85d-862ee3d084a4" +"Space-based Platforms","Earth Observation Satellites","HJ1","HJ1A","","d65fc363-e9b4-410a-b5e3-8dbd87b510b4" +"Space-based Platforms","Earth Observation Satellites","HJ1","HJ1B","","3edef6e1-db0b-4806-b586-8869a7c986ba" +"Space-based Platforms","Earth Observation Satellites","HJ1","","","1bf53ccb-74d1-46ad-a024-b16d3ff01442" +"Space-based Platforms","Earth Observation Satellites","Himawari","Himawari-8","","dd2591d9-35a1-4037-9664-bbfcf4c80b71" +"Space-based Platforms","Earth Observation Satellites","Himawari","Himawari-9","","e43cfa6a-fb75-4eeb-8674-25917275ea7e" +"Space-based Platforms","Earth Observation Satellites","Himawari","","","d8b7fc7d-9cf3-4020-947d-f33d712b64ab" +"Space-based Platforms","Earth Observation Satellites","Ice, Cloud and Land Elevation Satellite (ICESat)","ICESat-2","Ice, Cloud, and land Elevation Satellite-2","0a7dad22-dace-4cdc-9a5b-7dfde4aa2822" +"Space-based Platforms","Earth Observation Satellites","Ice, Cloud and Land Elevation Satellite (ICESat)","ICESat","Ice, Cloud and Land Elevation Satellite","71536bf5-2d19-4c63-a127-95264da38082" +"Space-based Platforms","Earth Observation Satellites","Ice, Cloud and Land Elevation Satellite (ICESat)","","","3eb57645-3c25-4718-a255-21c8d19d0517" +"Space-based Platforms","Earth Observation Satellites","Improved TIROS Operational Satellite (ITOS)","ITOS-1","","b080d2a3-c089-4ddf-bbfb-3e24495413b3" +"Space-based Platforms","Earth Observation Satellites","Improved TIROS Operational Satellite (ITOS)","","","80e95a88-b44e-444e-bd79-2e6dbb56b170" +"Space-based Platforms","Earth Observation Satellites","Indian Mini Satellite (IMS)","IMS-1","Indian Mini Satellite-1","a4d7359a-ec66-49d6-a394-3cf2794dd552" +"Space-based Platforms","Earth Observation Satellites","Indian Mini Satellite (IMS)","IMS-2","Indian Mini Satellite-2","aa137482-53a7-455d-b8d8-52d487380c2a" +"Space-based Platforms","Earth Observation Satellites","Indian Mini Satellite (IMS)","","","fecf6a37-ffa9-4e11-90cf-1abfeb95cb95" +"Space-based Platforms","Earth Observation Satellites","Indian National Satellite (INSAT)","INSAT-1A","Indian National Satellite-1A","5142bd37-853c-4d34-a2bb-13de9d97b773" +"Space-based Platforms","Earth Observation Satellites","Indian National Satellite (INSAT)","INSAT-1B","Indian National Satellite-1B","9dfe63d1-5b6a-4ac4-ae19-1572ab43445e" +"Space-based Platforms","Earth Observation Satellites","Indian National Satellite (INSAT)","INSAT-3D","","5999e653-21ea-49ef-977a-13b5fe40fa36" +"Space-based Platforms","Earth Observation Satellites","Indian National Satellite (INSAT)","INSAT","Indian National Satellite","dadc6f66-e044-420a-b1d0-4cc11b2f169d" +"Space-based Platforms","Earth Observation Satellites","Indian National Satellite (INSAT)","","","949ab40f-3954-4c81-a063-275d0e13a14e" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-1A","Indian Remote Sensing Satellite-1A","8f7e0fb3-1917-4bb5-ae90-93af14ef0c51" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-1B","Indian Remote Sensing Satellite-1B","b1734eeb-aa26-471d-9300-694c80aa8b42" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-1C","Indian Remote Sensing Satellite-1C","0b60f93d-dad7-4bb8-a41b-22d5f5d58835" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-1D","Indian Remote Sensing Satellite-1D","27b32f62-3460-4541-a1d5-507538b2b34c" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-O2","Oceansat-2","df967339-0096-4445-8732-0071f1de9e27" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-P2","Indian Remote Sensing Satellite-P2","0f7493be-f2c7-427b-befb-d4e33f08016c" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-P3","Indian ISRO IRS-P3 Spacecraft","dbbc7680-269b-42de-a33c-25e541aa6a74" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-P4","Indian Remote Sensing Satellite-P4 (OCEANSAT-1)","9e3bc460-c94c-462f-a207-aa580f2b5b07" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-P5","Indian Remote Sensing Satellite-P5 (CARTOSAT-1)","1d98408e-7465-4d31-86fa-3835a137b78d" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-P6","Indian Remote Sensing Satellite-P6","cdbfcd3f-bde3-44b1-8318-e2ee7873fc57" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-R2A","Indian Remote Sensing Satellite-R2A","56535da7-3b47-41e2-a3a9-b88a6abbc5ef" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","IRS-RS2","Indian Remote Sensing Satellite-RS2","fd710ee8-797c-490a-9f90-064a38141f99" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","K1","Kalpana-1","87daf1d5-4f7c-40e9-8d31-4c816c320029" +"Space-based Platforms","Earth Observation Satellites","Indian Remote Sensing Satellite (IRS)","","","3e8bc0c6-f599-4e23-9535-449af00edd61" +"Space-based Platforms","Earth Observation Satellites","International Satellite for Ionospheric Studies (ISIS)","ISIS-1","International Satellite for Ionospheric Studies-1","0e8963d6-040a-4df2-a7f6-c7dbc1ef1bda" +"Space-based Platforms","Earth Observation Satellites","International Satellite for Ionospheric Studies (ISIS)","ISIS-2","International Satellite for Ionospheric Studies-2","a3725789-7cae-48f1-9c2c-a27bc30c79a1" +"Space-based Platforms","Earth Observation Satellites","International Satellite for Ionospheric Studies (ISIS)","","","dfc148f7-69ed-401a-b2d2-f2c4097ef9b6" +"Space-based Platforms","Earth Observation Satellites","Japan Geostationary Meteorological Satellite (GMS)","GMS-1","Geostationary Meteorological Satellite-1","2a4d7fd4-36e7-42a4-9239-5e89ec0b142d" +"Space-based Platforms","Earth Observation Satellites","Japan Geostationary Meteorological Satellite (GMS)","GMS-2","Geostationary Meteorological Satellite-2","63c5a148-a766-45c0-b604-6c0c706ff368" +"Space-based Platforms","Earth Observation Satellites","Japan Geostationary Meteorological Satellite (GMS)","GMS-3","Geostationary Meteorological Satellite-3","a8952068-667a-4d77-8e4c-e40bcd310cdd" +"Space-based Platforms","Earth Observation Satellites","Japan Geostationary Meteorological Satellite (GMS)","GMS-4","Geostationary Meteorological Satellite-4","16dbe86f-4f86-4f78-a393-9c047759c0ee" +"Space-based Platforms","Earth Observation Satellites","Japan Geostationary Meteorological Satellite (GMS)","GMS-5","Geostationary Meteorological Satellite-5","0c08e0d6-ed87-4fc8-8dc9-77887a8bb256" +"Space-based Platforms","Earth Observation Satellites","Japan Geostationary Meteorological Satellite (GMS)","GMS","Japan Geostationary Meteorological Satellite","acf612e2-fcf8-40a5-a08a-dd59d689ef0b" +"Space-based Platforms","Earth Observation Satellites","Japan Geostationary Meteorological Satellite (GMS)","","","deeecd30-32e0-4b89-ae24-31e3e6641b4c" +"Space-based Platforms","Earth Observation Satellites","Japan Marine Observation Satellite (MOS)","MOS-1B","Japanese Marine Observation Satellite-1B","3f023faf-79fe-4efd-99cf-efdea9fd2e67" +"Space-based Platforms","Earth Observation Satellites","Japan Marine Observation Satellite (MOS)","MOS-1","Japanese Marine Observation Satellite 1","cdf3698d-ace4-432b-80aa-8757f8d53d58" +"Space-based Platforms","Earth Observation Satellites","Japan Marine Observation Satellite (MOS)","","","f835f27c-becb-4ad7-a2d5-c0385f3418f3" +"Space-based Platforms","Earth Observation Satellites","Japanese Earth Resources Satellite (JERS)","JERS-1","Japanese Earth Resources Satellite-1","f3230e87-898e-45d1-aa7f-b5b42eb3a3fc" +"Space-based Platforms","Earth Observation Satellites","Japanese Earth Resources Satellite (JERS)","","","f79e1dd5-797c-4aa6-ab58-433c1abaec26" +"Space-based Platforms","Earth Observation Satellites","Joint Altimetry Satellite Oceanography Network (JASON)","JASON-1","","4ea59dad-ed94-453e-a991-62c790a1d101" +"Space-based Platforms","Earth Observation Satellites","Joint Altimetry Satellite Oceanography Network (JASON)","JASON-3","Joint Altimetry Satellite Oceanography Network - 3","bffa816a-c210-46ed-81cb-ffdf3310c1a5" +"Space-based Platforms","Earth Observation Satellites","Joint Altimetry Satellite Oceanography Network (JASON)","","","d3747d32-f82d-4a98-aa49-aad5653897fe" +"Space-based Platforms","Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-1","Joint Polar Satellite System - 1","7b7147b8-cd9f-4978-ae0a-0af43ed79aa7" +"Space-based Platforms","Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-2","Joint Polar Satellite System - 2","043dc242-1014-4e9a-91ee-c472b791b026" +"Space-based Platforms","Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-3","Joint Polar Satellite System - 3","2ab4ba32-0bb3-4e4e-bac6-1ff4a3baf0df" +"Space-based Platforms","Earth Observation Satellites","Joint Polar Satellite System (JPSS)","JPSS-4","Joint Polar Satellite System - 4","10adce36-ce10-4ae6-94f9-211911c7dd15" +"Space-based Platforms","Earth Observation Satellites","Joint Polar Satellite System (JPSS)","NOAA-20","Joint Polar Satellite System - 1","586db0b3-5f94-466e-b7c1-a2dbedc0c1fc" +"Space-based Platforms","Earth Observation Satellites","Joint Polar Satellite System (JPSS)","Suomi-NPP","Suomi National Polar-orbiting Partnership","85a52725-e6a1-430a-8506-c08c59ef31c7" +"Space-based Platforms","Earth Observation Satellites","Joint Polar Satellite System (JPSS)","","","5c2364ca-c01a-4f69-8808-282c3854b2f6" +"Space-based Platforms","Earth Observation Satellites","Korea Multi-Purpose Satellite (KOMPSAT)","KOMPSAT-1","Korea Multi-Purpose Satellite - 1","caf7cd97-6a64-4e31-9b7e-d96854eb9b6a" +"Space-based Platforms","Earth Observation Satellites","Korea Multi-Purpose Satellite (KOMPSAT)","KOMPSAT-2","Korea Multi-Purpose Satellite - 2","88d9cd91-a26e-467a-9554-c5d927540421" +"Space-based Platforms","Earth Observation Satellites","Korea Multi-Purpose Satellite (KOMPSAT)","KOMPSAT-5","Korea Multi-Purpose Satellite - 5","6b65fb1a-d7ee-4abd-bacb-d2a912110d60" +"Space-based Platforms","Earth Observation Satellites","Korea Multi-Purpose Satellite (KOMPSAT)","","","9abdb7c0-7b8e-426b-8bc7-57ea4a30d82c" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-1","LANDSAT-1","d41eb9c0-7683-428a-ac86-5643bbfa3985" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-2","LANDSAT-2","dbaddf64-af69-4e82-a4a8-41f5c76ee496" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-3","LANDSAT-3","8d323d5a-0332-4e58-80c5-8dd9f486f482" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-4","LANDSAT-4","0db82778-12de-4cac-9a86-8f2b97feb7f1" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-5","LANDSAT-5","fe920fff-7852-42cf-b1dc-b2223b24cf2e" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-6","LANDSAT-6","b912164c-36a5-4d93-9638-1afb3e4c4354" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-7","LANDSAT-7","c7a09e9f-3c99-4b31-a521-313c379ba2b4" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-8","LANDSAT-8","13e3a08a-0d28-4e3f-a306-a20d9fb4fff8" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT-9","LANDSAT-9","5d3ce672-39fb-4dd5-be5e-55f81fb7f40f" +"Space-based Platforms","Earth Observation Satellites","Landsat","LANDSAT","LANDSAT","77d92504-8160-4f72-90b9-a7c9640f4361" +"Space-based Platforms","Earth Observation Satellites","Landsat","","","3cc4a1e8-3b94-4567-90b3-32137aec2d9e" +"Space-based Platforms","Earth Observation Satellites","Laser Geodetic Satellite (LAGEOS)","LAGEOS-1","Laser Geodetic Satellite-1","8124c4a5-fb77-455c-9ecd-3cf325fc12a9" +"Space-based Platforms","Earth Observation Satellites","Laser Geodetic Satellite (LAGEOS)","LAGEOS-2","Laser Geodetic Satellite-2","e1dfd1ca-9bd1-4628-b4ad-c82dfb3c1974" +"Space-based Platforms","Earth Observation Satellites","Laser Geodetic Satellite (LAGEOS)","","","4fc659a0-c543-4538-87c6-0ed2a7ab8b55" +"Space-based Platforms","Earth Observation Satellites","Megha-Tropiques","MEGHA-TROPIQUES","Megha-Tropiques","b4306533-7593-4e76-b0e1-154a74e27d69" +"Space-based Platforms","Earth Observation Satellites","Megha-Tropiques","","","7bca3532-02ec-4ab7-a01b-14185479c209" +"Space-based Platforms","Earth Observation Satellites","Meteorological Operational Satellite (METOP)","METOP-A","Meteorological Operational Satellite - A","8143808e-1005-4fed-a469-c2bd5f1521bf" +"Space-based Platforms","Earth Observation Satellites","Meteorological Operational Satellite (METOP)","METOP-B","Meteorological Operational Satellite - B","c9f84df0-e807-46e3-8fce-c33e9201fbc2" +"Space-based Platforms","Earth Observation Satellites","Meteorological Operational Satellite (METOP)","METOP-C","Meteorological Operational Satellite - C","6120cea0-c943-4c7c-bddd-8d8648d58022" +"Space-based Platforms","Earth Observation Satellites","Meteorological Operational Satellite (METOP)","","","8c192c86-d07c-4e7b-af8f-92aa4b40fca7" +"Space-based Platforms","Earth Observation Satellites","Meteor","Meteor 2-21","","a94d5d7d-ef21-4849-aa30-854aedd21c69" +"Space-based Platforms","Earth Observation Satellites","Meteor","Meteor-2","","8895542e-f840-4eeb-a615-b7871e6a580e" +"Space-based Platforms","Earth Observation Satellites","Meteor","Meteor-3M","","5a326a88-e23a-42c3-967a-7150bbf2acda" +"Space-based Platforms","Earth Observation Satellites","Meteor","Meteor-3","","b4ebacc9-59d5-45ae-95af-81d986d5ad3e" +"Space-based Platforms","Earth Observation Satellites","Meteor","Meteor-M N1","Meteorological Satellite Meteor-M N1","34e29a6e-63ef-4701-9f03-4dd233f146f6" +"Space-based Platforms","Earth Observation Satellites","Meteor","Meteor-M N2","Meteorological Satellite Meteor-M N2","20e6f8e4-f60d-4ffb-ab85-0423c5078a52" +"Space-based Platforms","Earth Observation Satellites","Meteor","","","d1a7ef15-31ab-4647-918a-4a1d62028ae4" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-10","","01ee202c-22c5-442d-b4fd-65f424057ea3" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-11","","bc69ef64-c468-4e8a-9a41-3b421e79cc90" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-1","METEOSAT-1","a7852052-09a6-4c48-b720-9dfb086df3db" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-2","METEOSAT-2","59df537a-0912-4943-834e-9feb08d09d59" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-3","METEOSAT-P2","4ce99530-44bb-435b-ac46-3e3f0ddde484" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-4","Meteosat Operational Programme 1 (MOP-1)","ceb704ea-58eb-441a-8f86-9d2d7017240c" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-5","Meteosat Operational Programme 2 (MOP-2)","a2069a17-e6be-49f4-a796-72aede755493" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-6","Meteosat Operational Programme 3 (MOP-3)","6f9f4776-ca2a-478a-b077-0b15fe8d2c3a" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-7","METEOSAT-7","75d48be5-2e6d-442f-9e97-0146706f7261" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-8","","1ef73a04-e012-4389-9646-cdeb7c04dc92" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT-9","","07dfead6-2cbc-4703-8533-c4d07e2ec67c" +"Space-based Platforms","Earth Observation Satellites","Meteosat","METEOSAT","Meteosat Operational Programme","dbfa9c1a-1853-4c48-8adf-f51ca6715c43" +"Space-based Platforms","Earth Observation Satellites","Meteosat","MSG","Meteosat Second Generation","5aac06ef-6ade-49b6-a98c-45516a9a646a" +"Space-based Platforms","Earth Observation Satellites","Meteosat","","","28eac19a-5500-4a21-af30-ab7a364ff8d0" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","ACE (DECADAL SURVEY)","Aerosol - Cloud - Ecosystems","44de39ab-8595-42d9-8d9e-ca94c4da4b0c" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","ASCENDS","Active Sensing of CO2 Emissions over Nights, Days, and Seasons","5129ca8d-e299-4966-b0d9-a55c4b302601" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","CLARREO","Climate Absolute Radiance and Refractivity Observatory","86f284dc-ebd2-4c9c-93dc-1e0e26a0a033" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","GEO-CAPE","Geostationary Coastal and Air Pollution Events","cbd436e1-03bf-4e59-8b31-fac71597bc01" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","GRACE-FO","Gravity Recovery and Climate Experiment Follow-On","f75e34e2-ebe7-4a6c-8bf6-da596a36b632" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","HYSPIRI","Hyperspectral Infrared Imager","da4db91a-044b-4b01-ad1a-e1684e492adf" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","SMAP","Soil Moisture Active and Passive Observatory","7ee03239-24ff-433e-ab7e-8be8b9b2636b" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","SWOT","Surface Water Ocean Topography","63b6f3d6-3e9a-40c9-ae91-13f580c7b6c3" +"Space-based Platforms","Earth Observation Satellites","NASA Decadal Survey","","","9bdc4d60-38da-4d6c-ba2f-2a588aa9921b" +"Space-based Platforms","Earth Observation Satellites","NASA Earth System Science Pathfinder","CALIPSO","Cloud-Aerosol Lidar and Infrared Pathfinder Satellite Observations","01b319ce-cbe2-4894-bb33-04c43ceef23b" +"Space-based Platforms","Earth Observation Satellites","NASA Earth System Science Pathfinder","CloudSat","","f3a724fa-5d0c-4ca1-872b-41ef08ab7b5d" +"Space-based Platforms","Earth Observation Satellites","NASA Earth System Science Pathfinder","GRACE","Gravity Recovery and Climate Experiment","2e7aa2e6-9d25-4c6e-aef3-6e86d3773bac" +"Space-based Platforms","Earth Observation Satellites","NASA Earth System Science Pathfinder","","","de1e0fd4-d865-4726-9bde-96804cf455b7" +"Space-based Platforms","Earth Observation Satellites","NASA Small Explorer (SMEX)","AIM","Aeronomy of Ice in the Mesosphere","dda33ba1-2108-4297-a221-d94726c60792" +"Space-based Platforms","Earth Observation Satellites","NASA Small Explorer (SMEX)","","","ec3e5f45-f6a2-4d1f-aa6f-51a638c7852f" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus-1","","fc1b2147-7086-4164-a2e5-596f83e1431c" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus-2","","486c2802-dca4-49a3-8bb8-4889e6961014" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus-3","","acc28309-0d1a-4533-9b18-c5ac2b0deea8" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus-4","","6b956645-9c85-4b3d-8771-159a62005911" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus-5","","955e7643-bd77-44aa-ba05-f7b841ce582b" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus-6","","6bbdcd8e-cbe4-48db-96e6-1d5f1dd1e857" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus-7","Nimbus-7","0af3eeb1-3339-46ad-964f-2d18dce319fe" +"Space-based Platforms","Earth Observation Satellites","Nimbus","Nimbus","","df91d23f-2c02-4bc1-92c1-a105fb0deb05" +"Space-based Platforms","Earth Observation Satellites","Nimbus","","","f91ad0ef-29bd-4594-a843-60beaaf858ca" +"Space-based Platforms","Earth Observation Satellites","OrbView","OrbView-1","OSC Microlab-1 Satellite","7a186060-a313-4047-ba21-27a0ffdff8e4" +"Space-based Platforms","Earth Observation Satellites","OrbView","OrbView-2","Orbital Sciences Corporation OrbView-2 Satellite","aef85316-b8f8-422a-add0-8130b113fa7d" +"Space-based Platforms","Earth Observation Satellites","OrbView","","","f221869f-1552-4f72-a308-7e79d0ab98e1" +"Space-based Platforms","Earth Observation Satellites","Orbiting Carbon Observatory","OCO-2","Orbiting Carbon Observatory-2","6d5f222a-7750-4fd3-aa14-3c0d0059bc85" +"Space-based Platforms","Earth Observation Satellites","Orbiting Carbon Observatory","OCO-3","","da687fb4-016d-4b4d-92c2-380640ca5640" +"Space-based Platforms","Earth Observation Satellites","Orbiting Carbon Observatory","","","e57b586f-09ba-45ad-868c-4c232d6034b4" +"Space-based Platforms","Earth Observation Satellites","Orbiting Geophysical Observatory (OGO)","OGO-1","Orbiting Geophysical Observatory-1","b81f052e-9e45-4097-8189-f4c2f0572dd4" +"Space-based Platforms","Earth Observation Satellites","Orbiting Geophysical Observatory (OGO)","OGO-2","Orbiting Geophysical Observatory-2","40b55ae6-fce7-46f1-aa84-ef7313056289" +"Space-based Platforms","Earth Observation Satellites","Orbiting Geophysical Observatory (OGO)","OGO-3","Orbiting Geophysical Observatory-3","52dcf6a3-8b08-40a4-acb0-3c1c2fdc55cc" +"Space-based Platforms","Earth Observation Satellites","Orbiting Geophysical Observatory (OGO)","OGO-4","Orbiting Geophysical Observatory-4","ff60d0cf-4665-40b6-b375-dd59dba896f9" +"Space-based Platforms","Earth Observation Satellites","Orbiting Geophysical Observatory (OGO)","OGO-5","Orbiting Geophysical Observatory-5","38eefa42-2943-43d6-9186-d797d089c9df" +"Space-based Platforms","Earth Observation Satellites","Orbiting Geophysical Observatory (OGO)","OGO-6","Orbiting Geophysical Observatory-6","fa5f5aff-4c2f-4613-b082-28454520544e" +"Space-based Platforms","Earth Observation Satellites","Orbiting Geophysical Observatory (OGO)","","","3e77610e-bb50-4c45-a62a-c50194ec16c2" +"Space-based Platforms","Earth Observation Satellites","Pleiades","Pleiades-1A","Pleiades-1A","a0b1f332-41b9-4eec-8a9e-67778193a679" +"Space-based Platforms","Earth Observation Satellites","Pleiades","Pleiades-1B","Pleiades-1B","92bdb34f-5df0-498d-b3c9-477ff3a1f80a" +"Space-based Platforms","Earth Observation Satellites","Pleiades","","","516a9bb2-0171-4ad2-8d4f-3f7d1219d393" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA POES","NOAA Polar Orbiting Environmental Satellites","a2620edb-fa1b-4e76-99db-581a1766f22a" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-10","National Oceanic & Atmospheric Administration-10","19ca6acd-5a83-4f3c-8237-fd3178dad1af" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-11","National Oceanic & Atmospheric Administration-11","b2e2ad86-b73f-44fd-9992-6f32820ea847" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-12","National Oceanic & Atmospheric Administration-12","6b3f1f0f-353b-45b7-9dc0-567afa2c82c5" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-13","National Oceanic & Atmospheric Administration-13","4357816a-ede9-4a78-852c-fd6474671567" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-14","National Oceanic & Atmospheric Administration-14","d4bfa8e2-4ce3-482e-8b2a-1297f65fdc8a" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-15","National Oceanic & Atmospheric Administration-15","7441d55f-26c8-4f7f-ad75-1402c6a6e470" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-16","National Oceanic & Atmospheric Administration-16","53a886bf-db3f-4b8c-a111-ba6593dae207" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-17","National Oceanic & Atmospheric Administration-17","b4d60d40-59b9-46ab-a4c5-a2e534680b05" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-18","National Oceanic & Atmospheric Administration-18","37afee26-f2fd-47df-b8e0-7cccd71e6b8c" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-19","National Oceanic & Atmospheric Administration-19","b7461b99-2b6f-460a-ae7f-6bb37515684d" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-1","National Oceanic & Atmospheric Administration-1","f80b13a8-7692-4d1a-be08-851544cd0cde" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-2","National Oceanic & Atmospheric Administration-2","52354476-6975-457e-9d1d-e0f3b5e8f407" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-3","National Oceanic & Atmospheric Administration-3","613988b8-740a-461d-a24f-39cc84a8ba8d" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-4","National Oceanic & Atmospheric Administration-4","3e1c1312-4559-4318-a64f-d7aafd08550b" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-5","National Oceanic & Atmospheric Administration-5","550199a6-a331-4392-b5d3-30270c83f773" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-6","National Oceanic & Atmospheric Administration-6","b8b9a664-2e7e-4dae-8efc-1ce4ace7ac63" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-7","National Oceanic & Atmospheric Administration-7","fd4a398d-682c-4748-8349-83a8aa47cebf" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-8","National Oceanic & Atmospheric Administration-8","a6a7b0e4-f58a-42fe-b723-d6405d4afde2" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","NOAA-9","National Oceanic & Atmospheric Administration-9","304d5731-5627-4f4a-9b9e-3de6f39f9b3d" +"Space-based Platforms","Earth Observation Satellites","Polar Orbiting Environmental Satellites (POES)","","","e8baa3a4-ef5a-455a-bf25-d61e59fc9bb3" +"Space-based Platforms","Earth Observation Satellites","Quickbird","QUICKBIRD-2","DigitalGlobe's QuickBird-2","4240f2ff-8d4a-438d-bbae-f62ae3504922" +"Space-based Platforms","Earth Observation Satellites","Quickbird","QUICKBIRD","DigitalGlobe's QuickBird","04c144cb-2195-4dd7-a7d3-8dacfb550abd" +"Space-based Platforms","Earth Observation Satellites","Quickbird","","","2760ac04-0903-4eb2-a3f9-8f6b853b8ab7" +"Space-based Platforms","Earth Observation Satellites","Radarsat","RADARSAT-1","","d5e3bc6f-fea5-453e-9942-6ce982bca119" +"Space-based Platforms","Earth Observation Satellites","Radarsat","RADARSAT-2","","b9c23439-5e16-4329-b719-4704dd7903e6" +"Space-based Platforms","Earth Observation Satellites","Radarsat","","","705a396b-83dd-4223-b8be-f002f6b93502" +"Space-based Platforms","Earth Observation Satellites","Resurs","RESURS-O1","","75227aec-09d6-47e5-bdd1-4eeed285ff9b" +"Space-based Platforms","Earth Observation Satellites","Resurs","Resurs DK 1","Environmental Satellite Resurs-DK N1","ff2141a6-5682-44da-88fc-9a4e78de35ad" +"Space-based Platforms","Earth Observation Satellites","Resurs","Resurs-P N1","Environmental Satellite Resurs-P N1","a7560954-fe13-4e8a-bb12-1289154a3a24" +"Space-based Platforms","Earth Observation Satellites","Resurs","Resurs-P N2","Environmental Satellite Resurs-P N2","b00d17a2-b509-4b42-86fd-d50bf50cfc3c" +"Space-based Platforms","Earth Observation Satellites","Resurs","","","ef6c9735-8d68-4432-9e5e-a2c1ccd2fa90" +"Space-based Platforms","Earth Observation Satellites","SAOCOM","SAOCOM-1A","SAR Observation & Communications Satellite-1A","804292cd-616b-491b-a477-7954368104b6" +"Space-based Platforms","Earth Observation Satellites","SAOCOM","SAOCOM-1B","SAR Observation & Communications Satellite-1B","0aea2992-f0c0-4799-9191-8b733aec8a96" +"Space-based Platforms","Earth Observation Satellites","SAOCOM","","","1669252a-0ee7-4491-a1ff-9523a2cd916d" +"Space-based Platforms","Earth Observation Satellites","Satelite de Aplicaciones Cientifico (SAC)","SAC-A","Satelite de Aplicaciones Cientifico - A","f3be80dc-37f6-44b9-afd4-37c261c13367" +"Space-based Platforms","Earth Observation Satellites","Satelite de Aplicaciones Cientifico (SAC)","SAC-C","Satelite de Aplicaciones Cientifico - C","12fff8c1-4062-48ce-a85e-ef85cc6fc370" +"Space-based Platforms","Earth Observation Satellites","Satelite de Aplicaciones Cientifico (SAC)","SAC-D","Satélite de Aplicaciones Científico - D","fb9164bb-4dba-4598-ba56-cb24d8db5527" +"Space-based Platforms","Earth Observation Satellites","Satelite de Aplicaciones Cientifico (SAC)","","","ea7e0cb4-5764-4ca4-89f6-913b22a47eff" +"Space-based Platforms","Earth Observation Satellites","Sentinel-1","Sentinel-1A","Sentinel-1A","c7279e54-f7c1-4ee7-a957-719d6021a3f6" +"Space-based Platforms","Earth Observation Satellites","Sentinel-1","Sentinel-1B","Sentinel-1B","9940dbad-1a9a-4858-a0e8-af35b21277e2" +"Space-based Platforms","Earth Observation Satellites","Sentinel-1","","","007c3084-89db-458e-8387-14e192b6cb8e" +"Space-based Platforms","Earth Observation Satellites","Sentinel-2","Sentinel-2A","Sentinel-2A","6f1c359b-b1a6-47c1-979e-0689e637fbdc" +"Space-based Platforms","Earth Observation Satellites","Sentinel-2","Sentinel-2B","Sentinel-2B","f2445400-1981-4ef3-bf7c-f4aa35923ae9" +"Space-based Platforms","Earth Observation Satellites","Sentinel-2","","","2ce20983-98b2-40b9-bb0e-a08074fb93b3" +"Space-based Platforms","Earth Observation Satellites","Sentinel-3","Sentinel-3A","Sentinel-3A","5449d87b-5573-450f-8acb-2fdfeab3c8ce" +"Space-based Platforms","Earth Observation Satellites","Sentinel-3","Sentinel-3B","Sentinel-3B","41163801-6aac-43e5-aed7-9f52613a6a73" +"Space-based Platforms","Earth Observation Satellites","Sentinel-3","","","8a19f309-46ee-424b-be9f-e7e57e5b8ca0" +"Space-based Platforms","Earth Observation Satellites","Sentinel-5","Sentinel-5P","Sentinel-5 Precursor","77e9a75e-2c3b-428b-8b21-b6a902dd8fee" +"Space-based Platforms","Earth Observation Satellites","Sentinel-5","","","dc626ae7-1ebe-4b9d-9b73-c048fa92434f" +"Space-based Platforms","Earth Observation Satellites","Sentinel-6","Sentinel-6A","Sentinel-6A","1f0f5178-9d7a-41ae-8f04-d6262415c30c" +"Space-based Platforms","Earth Observation Satellites","Sentinel-6","","","0df95c0e-77a5-46b5-94f4-3e5ae1391450" +"Space-based Platforms","Earth Observation Satellites","Swarm","Swarm-A","","054787a6-0c47-43af-a4ee-05c572dd1705" +"Space-based Platforms","Earth Observation Satellites","Swarm","Swarm-B","","ab7f9a64-ca5d-4795-94ff-fd5367d39f9f" +"Space-based Platforms","Earth Observation Satellites","Swarm","Swarm-C","","769a52d4-7db1-4b8e-8d39-6fee4e74d34f" +"Space-based Platforms","Earth Observation Satellites","Swarm","","","1d6d5f82-acd5-4bd2-9324-12884718b353" +"Space-based Platforms","Earth Observation Satellites","Synchronous Meteorological Satellites (SMS)","SMS-1","Synchronous Meteorological Satellite 1","3cb9e3b6-5d97-4258-a546-7a955c76cb8b" +"Space-based Platforms","Earth Observation Satellites","Synchronous Meteorological Satellites (SMS)","SMS-2","Synchronous Meteorological Satellite 2","ca25d8a5-40d0-4eb7-9f3f-9c97074ef1be" +"Space-based Platforms","Earth Observation Satellites","Synchronous Meteorological Satellites (SMS)","SMS","Synchronous Meteorological Satellites","389f0bec-1032-4b0b-9118-033c9b07402f" +"Space-based Platforms","Earth Observation Satellites","Synchronous Meteorological Satellites (SMS)","","","9abcdc9a-6442-4e2e-848a-8b72b954896c" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","SPOT-1","Systeme Probatoire Pour l'Observation de la Terre-1","807f2f4d-1c2e-43ed-87f2-17d7dcced093" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","SPOT-2","Systeme Probatoire Pour l'Observation de la Terre-2","9a59260a-16a7-4853-8920-35ede91561ee" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","SPOT-3","Systeme Probatoire Pour l'Observation de la Terre-3","d333cd96-f1f0-4179-9fbc-162b18fcb8c8" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","SPOT-4","Systeme Probatoire Pour l'Observation de la Terre-4","5fe45cae-f4ce-4287-8af8-0d824807f3fc" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","SPOT-5","Systeme Probatoire Pour l'Observation de la Terre-5","08e3f2c8-0d9d-4f94-b2fe-bb110b151134" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","SPOT-6","Systeme Probatoire Pour l'Observation de la Terre-6","b5b5a3c9-a393-4766-a7d6-ef6c97969e78" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","SPOT-7","Systeme Probatoire Pour l'Observation de la Terre-7","5993e605-b045-43fb-bd9b-928892b7386d" +"Space-based Platforms","Earth Observation Satellites","Systeme Probatoire Pour l'Observation de la Terre (SPOT)","","","5615d18d-4217-42a0-a53d-77298834fc2e" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","TIROS-2","Television Infrared Observation Satellite-2","abcc3bb4-8f36-4008-b12e-d29b028ecad9" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","TIROS-3","Television Infrared Observation Satellite-3","0752330f-2d01-4129-89da-8544369206cb" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","TIROS-4","Television Infrared Observation Satellite-4","d6369522-f750-4946-9946-2d2ed6ce56b5" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","TIROS-7","Television Infrared Observation Satellite-7","d39b3bd9-de76-4a80-841f-57c9be70ed5b" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","TIROS-M","Television Infrared Observation Satellite-M","292335bb-5733-4f54-bb1f-84ab20f838f3" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","TIROS-N","Television Infrared Observation Satellite-N","51bf313d-a403-412e-b672-a1312e823675" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","TIROS","Television Infrared Observation Satellite","6096b1ec-25d5-4b9b-9358-a17d8b481646" +"Space-based Platforms","Earth Observation Satellites","Television Infrared Observation Satellite (TIROS)","","","75b34f33-a790-4164-9cc0-02a997279e61" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","TROPICS/01","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 01","66445c7d-6628-4955-8403-17cbe4a1de4a" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","TROPICS/02","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 02","5f2b1f43-f737-4236-8231-5f89d1802cf6" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","TROPICS/03","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 03","ccf920b3-c5a0-4408-8c84-0cc8743adc33" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","TROPICS/04","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 04","f1594cda-7e89-4cab-8c6f-02ee081b59a5" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","TROPICS/05","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 05","1071feea-75f0-49f7-a87a-9e08b153ccc3" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","TROPICS/06","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 06","bd1174ed-f4ed-463a-b372-de14e45d658b" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","TROPICS/07","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats - 07","9f7b095a-94af-4ca3-8917-d1e1b8b99b80" +"Space-based Platforms","Earth Observation Satellites","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats (TROPICS)","","","eeecdc48-ff49-4f60-9419-3f99632fd660" +"Space-based Platforms","Earth Observation Satellites","Worldview","WORLDVIEW-1","DigitalGlobe WORLDVIEW-1","7f13b4d2-9114-4890-ac6d-30da1a333d74" +"Space-based Platforms","Earth Observation Satellites","Worldview","WORLDVIEW-2","DigitalGlobe WORLDVIEW-2","ff0ed18d-c476-4dc4-a248-d42ad74bb4a1" +"Space-based Platforms","Earth Observation Satellites","Worldview","WORLDVIEW-3","DigitalGlobe WORLDVIEW-3","dfb49f10-0755-464f-96b1-fc037802c86d" +"Space-based Platforms","Earth Observation Satellites","Worldview","WORLDVIEW-4","DigitalGlobe WORLDVIEW-4","341b5eb7-19bd-4337-83f3-885730103df1" +"Space-based Platforms","Earth Observation Satellites","Worldview","","","45694b28-c8a0-4a89-affc-082282ae9db0" +"Space-based Platforms","Earth Observation Satellites","","AJISAI","Experimental Geodetic Satellite (Japanese EGS)","3a152f3f-de95-4b7a-88c8-7c26fb4ba368" +"Space-based Platforms","Earth Observation Satellites","","ARGON","","d35399a9-d4dc-45f2-b69d-55160ac26d10" +"Space-based Platforms","Earth Observation Satellites","","ASIM","Atmosphere-Space Interactions Monitor on the ISS","f2b0301b-2f33-4048-9381-25a92226ed66" +"Space-based Platforms","Earth Observation Satellites","","Aeolus","Earth Explorer Atmospheric Dynamics Mission Aeolus","e31c4750-9903-4de7-95ef-faa9610f3a63" +"Space-based Platforms","Earth Observation Satellites","","Aquarius SAC-D","Aquarius SAC-D","e13d801e-19a3-4516-a64c-27f003b3d963" +"Space-based Platforms","Earth Observation Satellites","","Aqua","Earth Observing System, Aqua","ea7fd15d-190d-43f3-bdd3-75f5d88dc3f8" +"Space-based Platforms","Earth Observation Satellites","","Aura","Earth Observing System, Aura","59d2e030-5377-4b5b-92ce-f488d418c45f" +"Space-based Platforms","Earth Observation Satellites","","CASSIOPE","Cascade SmallSat and Ionospheric Polar Explorer","66f5d236-40fb-4a41-96a4-761d48103765" +"Space-based Platforms","Earth Observation Satellites","","CFOSAT","Chinese-French Oceanography Satellite","7c3fab1c-d17e-4e5c-870e-994793c2594e" +"Space-based Platforms","Earth Observation Satellites","","CHAMP","Challenging Minisatellite Payload","f5509236-8a81-4ebe-af91-d65aa58d4ab5" +"Space-based Platforms","Earth Observation Satellites","","CLARREO Pathfinder","","6bfd2526-e039-40e0-9abe-ac370f755d20" +"Space-based Platforms","Earth Observation Satellites","","COMS","Communication, Ocean and Meteorological Satellite","ec484699-009f-4f39-93aa-d11379b4288a" +"Space-based Platforms","Earth Observation Satellites","","CORIOLIS","Coriolis","bac2e743-1d02-4868-8bd6-b8b8741e3794" +"Space-based Platforms","Earth Observation Satellites","","CORONA","","14bedb8d-7d18-4ae6-9882-9cf87bd3824e" +"Space-based Platforms","Earth Observation Satellites","","CRRES","Combined Release and Radiation Effects Satellite","c0f0a8dc-bcfd-4959-bb06-692501b9c2bb" +"Space-based Platforms","Earth Observation Satellites","","CRYOSAT","CRYOSAT","e377ef25-1612-4b8d-ac98-54e3977d7e31" +"Space-based Platforms","Earth Observation Satellites","","CYGNSS","Cyclone Global Navigation Satellite System","18fd52d4-c60c-4ef5-b39a-960ae9916472" +"Space-based Platforms","Earth Observation Satellites","","DASH-2","","4ccfdd4d-3ec2-412d-b49e-fccf2cdc7c35" +"Space-based Platforms","Earth Observation Satellites","","ENVISAT","Environmental Satellite","a1498dff-002d-4d67-9091-16822c608221" +"Space-based Platforms","Earth Observation Satellites","","EO-1","Earth Observing 1","19a621c6-f735-4972-ab32-fcf001a38a46" +"Space-based Platforms","Earth Observation Satellites","","EP-TOMS","Earth Probe-TOMS","16d6e31d-f61a-4caa-b51d-8648a4e915c9" +"Space-based Platforms","Earth Observation Satellites","","ERBS","Earth Radiation Budget Satellite","d69f8964-e168-489e-9bda-a273f9a3a167" +"Space-based Platforms","Earth Observation Satellites","","EXOS-A","","5753c582-923c-4b37-9985-c2dc006c6337" +"Space-based Platforms","Earth Observation Satellites","","EarthCARE","Earth Clouds, Aerosol and Radiation Explorer","bf66ef8c-acc5-4c2f-b519-db0cbee37c99" +"Space-based Platforms","Earth Observation Satellites","","FASTSAT-1","Fast, Affordable, Science and Technology SATellite, 1","3fd43f36-3fbf-462b-8a3f-2eb6f5219b3e" +"Space-based Platforms","Earth Observation Satellites","","FLEX","Fluorescence Explorer (FLEX)","acfdfa87-7490-47db-a1dd-94a3bfb6a16d" +"Space-based Platforms","Earth Observation Satellites","","FORMOSAT-2","FORMOSAT-2","2a5acbda-7149-4bf7-8be2-9076f07e9b7f" +"Space-based Platforms","Earth Observation Satellites","","FSSCat","","b369f647-96ad-4418-84d2-ee5fed065863" +"Space-based Platforms","Earth Observation Satellites","","FengYun-1","","edf02962-aafa-484f-84e5-2549f6db7552" +"Space-based Platforms","Earth Observation Satellites","","GA-EMS OTB-2","General Atomics Electromagnetic Systems Orbital Test Bed 2","37f7b455-082f-4385-89d7-9292e9f9c750" +"Space-based Platforms","Earth Observation Satellites","","GCOM-C","Global Change Observation Mission – Climate","18512c09-2590-4804-8b43-dd9caea53b5d" +"Space-based Platforms","Earth Observation Satellites","","GCOM-W1","Global Change Observation Mission 1st-Water","8781da14-5ced-4d64-81cd-8daa10a1c30d" +"Space-based Platforms","Earth Observation Satellites","","GEO-KOMPSAT-2B","Geostationary - Korea Multi-Purpose Satellite-2","20950d05-0365-4984-9d9c-2c7845b4611a" +"Space-based Platforms","Earth Observation Satellites","","GEOEYE-1","GeoEye-1","47943416-e045-4d6d-b18e-3d1cc51734e0" +"Space-based Platforms","Earth Observation Satellites","","GEOSTATIONARY SATELLITES","","2c8530dc-b6cc-445f-87dc-36e76a1cb29c" +"Space-based Platforms","Earth Observation Satellites","","GFZ-1","GeoForschungsZentrum-1","976e92c4-150c-4068-bed5-60d5f030d7e2" +"Space-based Platforms","Earth Observation Satellites","","GLORY","","40e64334-e37c-4292-8b72-67c93bb24d41" +"Space-based Platforms","Earth Observation Satellites","","GOMS","Geostationary Operational Meteorological Satellite","55823c7c-0503-4012-911e-d503ff62f750" +"Space-based Platforms","Earth Observation Satellites","","GOSAT-2","Green-house gas Observing Satellite - 2","67c230f3-5587-4f74-84d1-4c24a74276e4" +"Space-based Platforms","Earth Observation Satellites","","GOSAT","Greenhouse Gases Observing Satellite","a21322af-38e0-4386-8e9b-9bf25cf30e16" +"Space-based Platforms","Earth Observation Satellites","","GPM","Global Precipitation Measurement","33a893cb-b328-462e-9cb0-d8c27823239e" +"Space-based Platforms","Earth Observation Satellites","","HCMM","Heat Capacity Mapping Mission","20dc9390-40d9-441e-86d2-4ab1e97a276b" +"Space-based Platforms","Earth Observation Satellites","","HEXAGON KH-9","HEXAGON KH-9 Reconnaissance Satellite","7d97b6ca-83de-44e1-8d3b-f45755e38a8d" +"Space-based Platforms","Earth Observation Satellites","","HY2-A","Haiyang-2A","fe07a2e4-a6cd-401c-af3e-433bbc8c2c98" +"Space-based Platforms","Earth Observation Satellites","","HY2-B","Haiyang-2B","7ef45b8e-ac63-41b2-9e8b-7becfa7d7431" +"Space-based Platforms","Earth Observation Satellites","","ICEYE","ICEYE","42c6ff80-849b-4ef5-b6ff-fd9416b8cf33" +"Space-based Platforms","Earth Observation Satellites","","ICON","Ionospheric Connection Explorer","4a3988a7-f1c6-4c0a-a93b-9221adbca49b" +"Space-based Platforms","Earth Observation Satellites","","IKONOS","IKONOS","c84a3a2f-b4a1-4306-9fcf-7d22ab12f252" +"Space-based Platforms","Earth Observation Satellites","","IMAGE","Imager for Magnetopause -to - Aurora Global Exploration","95985c5e-3904-4710-8f45-8157f0171a0a" +"Space-based Platforms","Earth Observation Satellites","","IS-40e","Intelsat 40e","62de6540-a614-4770-9e68-fde03001fdb4" +"Space-based Platforms","Earth Observation Satellites","","Kanopus-V","Environmental Satellite Kanopus-V","a93bb213-7862-4aa5-a113-38669e557a76" +"Space-based Platforms","Earth Observation Satellites","","LANYARD","","81d3b212-1f8f-4ac8-8292-dce0eb8f3a9c" +"Space-based Platforms","Earth Observation Satellites","","LAPAN-TUBSAT","","3e634ba7-19fc-45ce-9d50-14e108a567ef" +"Space-based Platforms","Earth Observation Satellites","","LARES","LAser Relativity Satellite","ef053df7-ff76-47f3-a335-5d4e87e51b92" +"Space-based Platforms","Earth Observation Satellites","","MAGSAT","","8ba6dbf3-9537-4c10-8254-128d49ef9c17" +"Space-based Platforms","Earth Observation Satellites","","MIDAS 2","Missile Defense Alarm System 2","cc93fc95-4b03-4d67-ab48-8216434a8944" +"Space-based Platforms","Earth Observation Satellites","","MMS","Magnetospheric Multiscale","76673a7f-44c8-4dde-83c2-1104b060061f" +"Space-based Platforms","Earth Observation Satellites","","MONITOR-E","","11212d0c-dd70-46ff-9082-ce3e44a49280" +"Space-based Platforms","Earth Observation Satellites","","MSTI-2","Miniature Sensor Technology Integration-2","68d7cb26-318b-4149-bb75-adc6e3863483" +"Space-based Platforms","Earth Observation Satellites","","MT1","Megha-Tropiques","9e09177b-bc72-41e9-921a-a4546f89e20a" +"Space-based Platforms","Earth Observation Satellites","","MTSAT-1R","Multi-functional Transport Satellite 1 Replacement","fc4a8eda-b910-4df6-8012-d573e5835707" +"Space-based Platforms","Earth Observation Satellites","","MTSAT-2","The Multi-functional Transport Satellite 2","02db0949-495c-4579-8ff5-d1a9079c88b7" +"Space-based Platforms","Earth Observation Satellites","","MTSAT","Multi-functional Transport Satellite","e3679e9e-5a95-46f4-a856-e51d459469fd" +"Space-based Platforms","Earth Observation Satellites","","NCEP GTS","National Centers for Environmental Prediction Global Telecommunications Systems","efdc8649-0ef2-4d41-999a-2bb104a06f34" +"Space-based Platforms","Earth Observation Satellites","","NISAR","NASA-ISRO Synthetic Aperture Radar","a6fddcb3-881b-484a-bbc9-39591b6359ab" +"Space-based Platforms","Earth Observation Satellites","","NPOESS (National Polar-orbiting Operational Environmental Satellite System )","","45ec5189-ffc5-452d-b365-f6989f1433f1" +"Space-based Platforms","Earth Observation Satellites","","ODIN","ODIN","1f7c6ae3-d38e-42b7-a874-60298b0fcfa1" +"Space-based Platforms","Earth Observation Satellites","","OKEAN-O","Ukranian-Russian Ocean Remote Sensing System","53d5ea21-07bb-44b5-88e6-3775e90ca528" +"Space-based Platforms","Earth Observation Satellites","","OSTM/JASON-2","Joint Altimetry Satellite Oceanography Network - 2","987f0e52-e554-475a-b680-50df620a520e" +"Space-based Platforms","Earth Observation Satellites","","PACE","Plankton, Aerosol, Cloud, ocean Ecosystem mission","eb4175de-3ee7-4897-bbbe-590ad7e09b4f" +"Space-based Platforms","Earth Observation Satellites","","PAGEOS 1","Passive Geodetic Earth Orbiting Satellite 1","43a6ecc5-a1d4-4b89-8d4d-e04a10264ab6" +"Space-based Platforms","Earth Observation Satellites","","PARASOL","Polarization and Anisotropy of Reflectances for Atmospheric Sciences coupled with Observations from a Lidar","aef6c60c-b5c5-46b9-9a84-d99a9c08b06a" +"Space-based Platforms","Earth Observation Satellites","","PAZ","SAR Observation Spanish Satellite","8ac70aba-53e7-45c0-8b4a-2c0197114b09" +"Space-based Platforms","Earth Observation Satellites","","PROBA-1","Project for On-Board Autonomy, PROBA-1","fe4a4604-029e-4cdc-93f0-6d8799dd25e5" +"Space-based Platforms","Earth Observation Satellites","","PROBA-2","Project for On-Board Autonomy, PROBA-2","ce3e3563-34ff-4a39-8c81-c9856758e403" +"Space-based Platforms","Earth Observation Satellites","","PROBA-3","Project for On-Board Autonomy, PROBA-3","96a26a3b-bd87-462e-b155-f57677bf4b83" +"Space-based Platforms","Earth Observation Satellites","","PlanetScope","PlanetScope","6fffd5bf-1d22-487a-8b4c-495992ef3b28" +"Space-based Platforms","Earth Observation Satellites","","Proba-V","Project for On-Board Autonomy - Vegetation","6f507389-2c7c-41b4-a638-95bdc73b63a3" +"Space-based Platforms","Earth Observation Satellites","","Project for On-Board Autonomy (PROBA)","","a9a057e8-bfee-464c-9c1f-1913c889caee" +"Space-based Platforms","Earth Observation Satellites","","QUIKSCAT","QUIKSCAT","5ab01e26-7baf-4960-bd6e-cb64b47cbfed" +"Space-based Platforms","Earth Observation Satellites","","RAPIDEYE","RapidEye","439293ac-ef6a-4f4c-a578-a57d504e783a" +"Space-based Platforms","Earth Observation Satellites","","SAGE-III","Stratospheric Aerosol and Gas Experiment-III","c7063bba-13bf-45e1-be70-7499be35d304" +"Space-based Platforms","Earth Observation Satellites","","SARAL","Satellite with ARgos and ALtiKa","4e62dd32-7776-4646-ae8d-b85d97df415a" +"Space-based Platforms","Earth Observation Satellites","","SATELLITES","SATELLITES","17b1489c-fba7-4252-bf23-b981148343f1" +"Space-based Platforms","Earth Observation Satellites","","SCATSAT-1","Scatterometer Satellite-1","fbfed562-4772-48fe-b2bb-7ebced3a7c9f" +"Space-based Platforms","Earth Observation Satellites","","SCD","Satellites de Coleta de Dados","7b07a0be-b4c9-4837-9521-287bf07198aa" +"Space-based Platforms","Earth Observation Satellites","","SCISAT-1/ACE","Atmospheric Chemistry Experiment","5419ac51-33aa-4f66-bc37-9f2c73846c9e" +"Space-based Platforms","Earth Observation Satellites","","SEASAT 1","Ocean Dynamics Satellite","1bffe898-f4a2-458e-92c5-cd7c9c1cd5f0" +"Space-based Platforms","Earth Observation Satellites","","SES-14","","8dd76819-1baa-4ccd-8544-23c2923f2d84" +"Space-based Platforms","Earth Observation Satellites","","SLATS","Super Low Altitude Test Satellite (SLATS)","89bac9f6-0c4f-4b3d-92dc-f6bee4b6906c" +"Space-based Platforms","Earth Observation Satellites","","SME","Solar Mesospheric Explorer","4e357ecc-78bd-4da7-b28a-4b34f61f8587" +"Space-based Platforms","Earth Observation Satellites","","SNOE","Student Nitric Oxide Explorer","9210813e-eb6f-4d0f-bb1b-d76b4446b4a9" +"Space-based Platforms","Earth Observation Satellites","","STARLETTE","","9b6eb5b1-08b6-435f-9e25-ad95e017fb32" +"Space-based Platforms","Earth Observation Satellites","","STELLA","","149dcad2-bf7c-4c0c-bb53-5ae32d71ecfb" +"Space-based Platforms","Earth Observation Satellites","","SUNSAT","Stellenbosch University Satellite","8798ac25-d327-4d6e-910f-d06306133f88" +"Space-based Platforms","Earth Observation Satellites","","SeaHawk","SeaHawk Cubesat","c5d1a6fc-b484-45cb-be94-2e2a23155d63" +"Space-based Platforms","Earth Observation Satellites","","SkySat","SkySat constellation","e9611632-822d-468b-9748-a392991a0718" +"Space-based Platforms","Earth Observation Satellites","","Spire","Spire constellation","da278af5-097b-47e7-903d-4deac395c4de" +"Space-based Platforms","Earth Observation Satellites","","TDX","TanDEM-X","6c21f29b-5dd4-4e96-a6fb-44e4788d1973" +"Space-based Platforms","Earth Observation Satellites","","THEOS","Thai Earth Observation System","84ddaf4a-fe17-4f01-becf-8164ae255b73" +"Space-based Platforms","Earth Observation Satellites","","TIMED","Thermosphere, Ionosphere, Mesosphere Energetics and Dynamics","5ab193bc-b931-41ac-819b-e49391abd272" +"Space-based Platforms","Earth Observation Satellites","","TIPS","Tether Physics and Survivability","7b9c2b8c-0f57-42bc-ab52-ba3cf542f14e" +"Space-based Platforms","Earth Observation Satellites","","TIUNGSAT-1","","f1503638-4366-4025-8d27-6aefedc4c4dd" +"Space-based Platforms","Earth Observation Satellites","","TOPEX/POSEIDON","Ocean Topography Experiment","e5eb6afb-5d3e-4767-ad08-5293c5b2d88b" +"Space-based Platforms","Earth Observation Satellites","","TOPSAT","","24e15a6d-d600-4eb1-9757-022a19f583fe" +"Space-based Platforms","Earth Observation Satellites","","TRMM","Tropical Rainfall Measuring Mission","89c509e6-13f6-4d6e-b46c-0479d2c7d88d" +"Space-based Platforms","Earth Observation Satellites","","TSINGHUA-1","","f9922bc7-cbad-4230-ad65-08c5998a8e0f" +"Space-based Platforms","Earth Observation Satellites","","TSX","TerraSAR-X","a5c7a4c7-bbf4-42df-a754-20cb6b98317a" +"Space-based Platforms","Earth Observation Satellites","","Terra","Earth Observing System, Terra (AM-1)","80eca755-c564-4616-b910-a4c4387b7c54" +"Space-based Platforms","Earth Observation Satellites","","UARS","Upper Atmosphere Research Satellite","b6c5c7d5-ad6a-4cdd-82cc-9259377ff044" +"Space-based Platforms","Earth Observation Satellites","","VANGUARD","","9db79338-5030-45c2-9bf7-c81bfcefb9e1" +"Space-based Platforms","Earth Observation Satellites","","WESTPAC","Western Pacific Laser Satellite","3d031666-2116-4ebc-8daa-3e98ddcf4f60" +"Space-based Platforms","Earth Observation Satellites","","ZEIA","","6365670e-6e12-437d-baa9-d1deecd87fba" +"Space-based Platforms","Earth Observation Satellites","","Zhangheng 1","Zhangheng 1","52ae802c-b2fd-4548-aefd-ec4e4325b803" +"Space-based Platforms","Earth Observation Satellites","","","","3466eed1-2fbb-49bf-ab0b-dc08731d502b" +"Space-based Platforms","Interplanetary Spacecraft","FLYBY","MARINER 2","","2351e160-5a9c-4d1c-81f0-775bbae1848e" +"Space-based Platforms","Interplanetary Spacecraft","FLYBY","PIONEER 10","","7fc65dd8-ff85-4ca3-a9df-40a8c33b7c2f" +"Space-based Platforms","Interplanetary Spacecraft","FLYBY","PIONEER 11","","7b3df542-ec26-4460-b26b-b0e195baae76" +"Space-based Platforms","Interplanetary Spacecraft","FLYBY","VOYAGER 1","","1cc11f32-9643-4fa4-9384-18cab2852604" +"Space-based Platforms","Interplanetary Spacecraft","FLYBY","VOYAGER 2","","353cc3e0-7d96-451a-bf57-350bf031a0e5" +"Space-based Platforms","Interplanetary Spacecraft","FLYBY","","","1cf127d1-ee7d-4cd7-9e66-516805f42f28" +"Space-based Platforms","Interplanetary Spacecraft","LANDER","VENERA-13","","21d992d3-447f-4ae1-9ef2-088c736895c1" +"Space-based Platforms","Interplanetary Spacecraft","LANDER","VENERA-14","","95e65b17-0aa8-4146-999c-b807b42e8ad6" +"Space-based Platforms","Interplanetary Spacecraft","LANDER","","","c12d28c9-5a4c-4897-b82b-67ed59d14e75" +"Space-based Platforms","Interplanetary Spacecraft","ORBITER","PIONEER VENUS","","c77cd248-34be-4d62-aaae-43fb073a1438" +"Space-based Platforms","Interplanetary Spacecraft","ORBITER","","","07eea0dc-fc62-4b0d-88ee-2813a22034da" +"Space-based Platforms","Interplanetary Spacecraft","","LUNOKHOD","Lunar Retroreflector Array","1daac324-8de1-49d1-b8ca-e221f5e33a1b" +"Space-based Platforms","Interplanetary Spacecraft","","","","16d65a72-e685-4c98-88a9-689c5f75d358" +"Space-based Platforms","Navigation Satellites","Beidou (China's Satellite Navigation System)","Beidou","Beidou Satellites","b4306421-a1b1-4d56-ad84-6f0c57806369" +"Space-based Platforms","Navigation Satellites","Beidou (China's Satellite Navigation System)","","","ef679d6a-a05b-4976-a236-ce2158b758ea" +"Space-based Platforms","Navigation Satellites","GLObal NAvigation Satellite System (GLONASS)","GLONASS-40-82","Global Navigation Satellite System 40-82","6cadd8c2-ecd7-4816-ad6a-c14e19d7e809" +"Space-based Platforms","Navigation Satellites","GLObal NAvigation Satellite System (GLONASS)","GLONASS","(GLObal NAvigation Satellite System)","00274700-26c1-4c44-88a4-10a7ec6214de" +"Space-based Platforms","Navigation Satellites","GLObal NAvigation Satellite System (GLONASS)","","","960f8eb8-6ca9-47d3-ae4a-7e21ebfad4c0" +"Space-based Platforms","Navigation Satellites","Galileo (Europe's European Satellite Navigation System)","Galileo","Galileo Satellites","59fae923-a986-41e5-8fe2-30bd3b9cb625" +"Space-based Platforms","Navigation Satellites","Galileo (Europe's European Satellite Navigation System)","","","b1c1ecfd-eb6c-4a51-b86e-2ae64babc27d" +"Space-based Platforms","Navigation Satellites","Global Positioning System (GPS)","GPS-35","Global Positioning System Satellites-35","185961ca-55f3-49f4-b795-b1dce8de893c" +"Space-based Platforms","Navigation Satellites","Global Positioning System (GPS)","GPS-36","Global Positioning System Satellites-36","428adb40-4cd5-4923-98fc-cddc83c6b577" +"Space-based Platforms","Navigation Satellites","Global Positioning System (GPS)","GPS","Global Positioning System Satellites","e66a90c4-3a5c-4e52-b039-bc93857642bf" +"Space-based Platforms","Navigation Satellites","Global Positioning System (GPS)","","","7bf16419-1047-4902-a4fa-38c74bceb3bd" +"Space-based Platforms","Navigation Satellites","India's Regional Navigation Satellite System (IRNSS)","IRNSS","India’s Regional Navigation Satellite System Satellites","4c93cc0b-ca0e-4421-ac60-559b6390b89b" +"Space-based Platforms","Navigation Satellites","India's Regional Navigation Satellite System (IRNSS)","","","bad22a08-f8ab-49b3-b266-005b21496626" +"Space-based Platforms","Navigation Satellites","NAVSTAR","NAVSTAR","NAVSTAR Global Positioning System","17da87fb-d1c9-4fca-befd-f14ec5a2fa02" +"Space-based Platforms","Navigation Satellites","NAVSTAR","","","41de58a7-f1e3-453f-9094-80cb8e839b36" +"Space-based Platforms","Navigation Satellites","Quasi-Zenith Satellite System (QZSS)","QZSS","Quasi-Zenith Satellite System Satellites","9f9d2fac-92f3-4bc5-80ea-e68da85dd352" +"Space-based Platforms","Navigation Satellites","Quasi-Zenith Satellite System (QZSS)","","","225fb800-22b1-4d06-88ac-2bb391ac0906" +"Space-based Platforms","Navigation Satellites","Satellite-Based Augmentation System (SBAS)","SBAS","Satellite-Based Augmentation System Satellites","6c37b37f-44f3-4cfd-859d-44f9266d97cb" +"Space-based Platforms","Navigation Satellites","Satellite-Based Augmentation System (SBAS)","","","612454e6-06ce-4bd3-b4f2-6db85f49a013" +"Space-based Platforms","Navigation Satellites","","FEDSAT","","736ef795-ec95-415f-b10a-456366f8a185" +"Space-based Platforms","Navigation Satellites","","","","1506fb17-7ac4-44ce-bde5-074885bdb2d2" +"Space-based Platforms","Solar/Space Observation Satellites","Explorer","EXPLORER-31 (DME-A)","","4a23392b-1472-4437-868a-eaf788b6b690" +"Space-based Platforms","Solar/Space Observation Satellites","Explorer","EXPLORER-33","Interplanetary Monitoring Platform D (IMP-D)","e54cff9a-7866-448b-adad-88b344021e3c" +"Space-based Platforms","Solar/Space Observation Satellites","Explorer","EXPLORER-35","Interplanetary Monitoring Platform D (IMP-E)","ac093d50-d9c2-4aca-87d6-0c79a9ce6cb3" +"Space-based Platforms","Solar/Space Observation Satellites","Explorer","Explorer-7","","c6092442-77cc-4978-9e4d-3ebea97db988" +"Space-based Platforms","Solar/Space Observation Satellites","Explorer","","","182e52f4-6ce7-42e3-b50e-42a3725eeca3" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-10","","49178ef5-a003-4de2-9553-066f629bb072" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-11","","d1c98f16-ae13-45a0-b1bf-de4fd2a5b1c7" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-12","","ccc4869c-ff0c-41ef-b621-eaeae1ffb79b" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-13","","98685a1b-9825-43c0-b0d9-6a65f8cb8c7c" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-14","","530c0bf3-28b9-4cb7-ad4e-979ad7444933" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-15","","f9649a77-f89c-4b3a-a5e5-624ccfccf97d" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-16","","72ebfb29-14dd-4306-a28c-ecfc25fc8ad6" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-1","","f86fcbce-178c-410a-8e6e-380c0bc392ad" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-2","","f2b36444-124d-4f32-97c7-dc8a09b2d0f0" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-3","","a520a517-f8da-4bf7-9dec-5e8758dad38a" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-4","","79de5661-cfa3-491d-bb30-4414452676e8" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-5","","18ceff7d-c5cd-4a72-86af-9a3ac0a884c4" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-6","","b048b823-7125-4426-b25d-121c85044bb4" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-7","","e8fbbfce-0ba2-431c-8533-a1ec9347efd1" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-8","","2fa330c6-862b-408a-bdea-cc0eb502f3d2" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","GOES-9","","8651726e-1f93-4a65-9e09-4be1e3075e5d" +"Space-based Platforms","Solar/Space Observation Satellites","Geostationary Operational Environmental Satellite (GOES)","","","6e332c25-caeb-4917-afb6-af757bcecd72" +"Space-based Platforms","Solar/Space Observation Satellites","Helios","HELIOS 1","","9bb5d516-de20-41eb-9b54-109f939b764c" +"Space-based Platforms","Solar/Space Observation Satellites","Helios","HELIOS 2","","5d34bc0e-e9a2-422e-aa9d-8dcb826af251" +"Space-based Platforms","Solar/Space Observation Satellites","Helios","","","b5e6d6de-2d7b-4876-86b1-cd94a494d44d" +"Space-based Platforms","Solar/Space Observation Satellites","Interplanetary Monitoring Platform (IMP)","IMP-8","Interplanetary Monitoring Platform-8","4b4e3fbd-27e9-4022-ab65-09026234ed14" +"Space-based Platforms","Solar/Space Observation Satellites","Interplanetary Monitoring Platform (IMP)","IMP-I","Interplanetary Monitoring Platform-I","7b36ad79-8cf3-46a9-b26c-52f3a0f1eac9" +"Space-based Platforms","Solar/Space Observation Satellites","Interplanetary Monitoring Platform (IMP)","","","98767da4-f273-4c32-a12f-0df5429ac15e" +"Space-based Platforms","Solar/Space Observation Satellites","Living with a Star","SDO","Solar Dynamics Observatory","8c1066ca-a1e6-47c2-aab8-ac70ed33f948" +"Space-based Platforms","Solar/Space Observation Satellites","Living with a Star","","","9277b570-917c-4fd2-acba-3cb167c4c4c9" +"Space-based Platforms","Solar/Space Observation Satellites","NASA Medium Class Explorers (MIDEX)","THEMIS","Time History of Events and Macroscale Interactions During Substorms","6524ba60-7265-49ae-b368-c18d981e7381" +"Space-based Platforms","Solar/Space Observation Satellites","NASA Medium Class Explorers (MIDEX)","","","b003a4a0-0dc3-498b-9795-a197e25cff6c" +"Space-based Platforms","Solar/Space Observation Satellites","NASA Small Explorer (SMEX)","GEMS","Gravity and Extreme Magnetism Small Explorer","d7a1d916-1dc9-4dbd-8a7e-554be1b7379c" +"Space-based Platforms","Solar/Space Observation Satellites","NASA Small Explorer (SMEX)","TRACE","Transition Region and Coronal Explorer","437b468d-4635-4cb9-b875-0795beb47f6d" +"Space-based Platforms","Solar/Space Observation Satellites","NASA Small Explorer (SMEX)","","","a1dfb99c-1819-4a09-9024-81d9c3486eac" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-1","Orbiting Solar Observatory-1","a0e267fd-fde9-490a-a582-cd57464382ba" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-2","Orbiting Solar Observatory-2","3aea48c3-0abb-4c1a-87f7-4035473d0015" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-3","Orbiting Solar Observatory-3","fb5ac938-4c9a-4abd-9b62-7ae1ac63b34e" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-4","Orbiting Solar Observatory-4","b7eaad99-82e7-4edb-a3d3-9e10d2c209c3" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-5","Orbiting Solar Observatory-5","73ae7b33-4b42-47a6-ac52-5aaf791823ac" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-6","Orbiting Solar Observatory-6","a364e4c0-444a-4dec-9fa4-cf740e340411" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-7","Orbiting Solar Observatory-7","a2f755b5-e29a-4e57-8372-ab18a76c62ca" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","OSO-8","Orbiting Solar Observatory-8","e58bc59d-a030-4cc4-80a9-f9cb7f294244" +"Space-based Platforms","Solar/Space Observation Satellites","Orbiting Solar Observatory (OSO)","","","1a5dc311-b702-4712-868a-f306bbdc0833" +"Space-based Platforms","Solar/Space Observation Satellites","Pioneer","PIONEER 6","","f5041b9b-2a20-4cd3-9154-f9c62fbf6d1f" +"Space-based Platforms","Solar/Space Observation Satellites","Pioneer","PIONEER 7","","1128de1e-ca90-4400-8ee8-3659106f3d65" +"Space-based Platforms","Solar/Space Observation Satellites","Pioneer","PIONEER 7","","35fa31c4-a259-4b5d-82e0-48b5bdddd13a" +"Space-based Platforms","Solar/Space Observation Satellites","Pioneer","","","7c63ec87-b637-492f-8650-ef7a7bcf1b9f" +"Space-based Platforms","Solar/Space Observation Satellites","Radio Astronomy Explorer (RAE)","RAE-A","Radio Astronomy Explorer-A","f4c1befd-8eae-4cc0-b7ce-1a5306f79fa8" +"Space-based Platforms","Solar/Space Observation Satellites","Radio Astronomy Explorer (RAE)","RAE-B","Radio Astronomy Explorer-B (Explorer 49)","82b2d471-ddff-4c3c-8eed-82e834cc0029" +"Space-based Platforms","Solar/Space Observation Satellites","Radio Astronomy Explorer (RAE)","","","c381eef8-a0be-407e-b85b-67757d724af8" +"Space-based Platforms","Solar/Space Observation Satellites","Solar Radiation (SOLRAD)","SOLRAD-10","Solar Radiation-10","895be672-a1c7-4bf0-a6fb-13816bac13c8" +"Space-based Platforms","Solar/Space Observation Satellites","Solar Radiation (SOLRAD)","SOLRAD-1","Solar Radiation-1","e101ee62-014e-4cc0-8262-088272d6f65f" +"Space-based Platforms","Solar/Space Observation Satellites","Solar Radiation (SOLRAD)","SOLRAD-7A","Solar Radiation-7A","032d5a46-7a5e-46d2-ae07-034e59a611b4" +"Space-based Platforms","Solar/Space Observation Satellites","Solar Radiation (SOLRAD)","SOLRAD-7B","Solar Radiation-7B","a59bfb93-9bb4-47c1-84ea-5357788e97a3" +"Space-based Platforms","Solar/Space Observation Satellites","Solar Radiation (SOLRAD)","SOLRAD-8","Solar Radiation-8","d17cc4a4-bf4a-4b9f-8314-6aed5e32f588" +"Space-based Platforms","Solar/Space Observation Satellites","Solar Radiation (SOLRAD)","SOLRAD-9","Solar Radiation-9","849f648c-c8d7-448c-bea6-5fd642705a14" +"Space-based Platforms","Solar/Space Observation Satellites","Solar Radiation (SOLRAD)","","","c15fcde1-b44a-4d20-91e8-c6c807325b08" +"Space-based Platforms","Solar/Space Observation Satellites","Solar TErrestrial RElations Observatory (STEREO)","STEREO A","Solar Terrestrial Relations Observatory A","68820e6c-4047-4830-99a8-57e13cc5699d" +"Space-based Platforms","Solar/Space Observation Satellites","Solar TErrestrial RElations Observatory (STEREO)","STEREO B","Solar Terrestrial Relations Observatory B","ad945ca6-cd6f-4e21-abe0-e7e7bba68523" +"Space-based Platforms","Solar/Space Observation Satellites","Solar TErrestrial RElations Observatory (STEREO)","","","45ca37e2-2ca8-4562-b9f4-cec6b8251c9f" +"Space-based Platforms","Solar/Space Observation Satellites","","ACE","Advanced Composition Explorer (ACE)","a60eb82b-e058-4b1d-bc09-864d886e8c48" +"Space-based Platforms","Solar/Space Observation Satellites","","ACRIMSAT","Active Cavity Radiometer Irradiance Monitor Satellite","76e768b0-150f-4986-8504-42a713c9c841" +"Space-based Platforms","Solar/Space Observation Satellites","","C/NOFS","Communication and Navigation Outage Forecast System","18f50c33-af5a-48b1-9a34-9be9347cedbc" +"Space-based Platforms","Solar/Space Observation Satellites","","CLUSTER-II","CLUSTER-II","436570eb-cb83-48d3-81d7-a6b6c6a777b4" +"Space-based Platforms","Solar/Space Observation Satellites","","COSMIC/FORMOSAT-3","Constellation Observing System for Meteorology, Ionosphere and Climate","236ccd86-2d36-4312-b73b-c273039e3a2d" +"Space-based Platforms","Solar/Space Observation Satellites","","DSCOVR","Deep Space Climate Observatory","d9cc74c9-34f5-48a4-a982-e4c6f8a5171c" +"Space-based Platforms","Solar/Space Observation Satellites","","EQUATOR-S","","44941da4-aae8-4776-8db0-f2c3eb5eb5e6" +"Space-based Platforms","Solar/Space Observation Satellites","","FAST","Fast Auroral Snapshot Explorer","17d64f1b-288c-4e11-9253-dc6468310607" +"Space-based Platforms","Solar/Space Observation Satellites","","FERMI","Fermi Gamma-ray Space Telescope","848796c8-2654-4c1e-b70f-a85834f4fcef" +"Space-based Platforms","Solar/Space Observation Satellites","","GEOTAIL","","7d44ede4-e2e4-43b8-a970-11f1f75394d5" +"Space-based Platforms","Solar/Space Observation Satellites","","GRO","Gamma-Ray Observatory","1f48df58-92d6-4f8c-bb95-872709133d7b" +"Space-based Platforms","Solar/Space Observation Satellites","","HESSI","High Energy Solar Spectroscopic Imager","bd6d6791-759d-4ebc-baef-0b2148648b91" +"Space-based Platforms","Solar/Space Observation Satellites","","HINODE","Hinode (Solar-B)","c5799ec3-693e-4ee7-ad8e-376b2e515a44" +"Space-based Platforms","Solar/Space Observation Satellites","","HINOTORI","","5255d395-6dd9-49ba-aaf4-44450f708a3c" +"Space-based Platforms","Solar/Space Observation Satellites","","HST","Hubble Space Telescope","253d5637-2f35-464d-bc79-db0f843604fe" +"Space-based Platforms","Solar/Space Observation Satellites","","IRAS","Infrared Astronomy Satellite","c31354ca-9db7-4ea5-b1ed-9b2dbfc06118" +"Space-based Platforms","Solar/Space Observation Satellites","","POLAR","POLAR","9c2ad4c0-d1ee-4940-85c7-53d903b500ab" +"Space-based Platforms","Solar/Space Observation Satellites","","RHESSI","Reuven Ramaty High Energy Solar Spectroscopic Imager","ac6d0fd3-a559-4f59-b862-51addf61944a" +"Space-based Platforms","Solar/Space Observation Satellites","","SAMPEX","SolarAnomalous and Magnetospheric Particle Explorer","7747d786-1e89-4c8e-a9ea-3e90c93d95e0" +"Space-based Platforms","Solar/Space Observation Satellites","","SMM","Solar Maximum Mission","d109e6f1-c4b6-45bc-9e1a-4d23a2bae1b1" +"Space-based Platforms","Solar/Space Observation Satellites","","SOHO","Solar and Heliospheric Observatory","43e942db-8536-4268-8bd4-cea81573b8ee" +"Space-based Platforms","Solar/Space Observation Satellites","","SORCE","Solar Radiation and Climate Experiment","3c45bc59-32ce-4e5d-a602-6fec80ff7f1c" +"Space-based Platforms","Solar/Space Observation Satellites","","STPSat-3","U.S. Air Force Space Test Program Satellite 3","b5e24e20-f99f-423f-83ac-d3eb5989ac48" +"Space-based Platforms","Solar/Space Observation Satellites","","TSIS-1","Total and Spectral Solar Irradiance Sensor-1","6f00151d-b33f-472a-a263-eff7b46b296d" +"Space-based Platforms","Solar/Space Observation Satellites","","ULYSSES","","72594fae-e32a-4f62-88ad-d871ef0ff29a" +"Space-based Platforms","Solar/Space Observation Satellites","","WIND","","0aad04f5-5438-4800-a0c9-6155656a720e" +"Space-based Platforms","Solar/Space Observation Satellites","","YOHKOH","","cea7a056-9bc7-43be-a689-8a15fac587b7" +"Space-based Platforms","Solar/Space Observation Satellites","","","","8e8b7689-0a8e-47a4-9c68-5f6a207104d5" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Apollo","APOLLO-SOYUZ","","6368896e-e7dc-4b4a-b081-7283a3700a02" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Apollo","APOLLO-SOYUZ","","812c1d73-a38d-498c-9b6b-493a6634a21a" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Apollo","APOLLO","","84be98c7-9e25-42a7-8da6-0336b8bd8fcc" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Apollo","","","c6cf9028-9a62-4a0d-8cce-a2a5b1262758" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-10","","3fb34887-645d-4eea-94c3-a0b15df84a3d" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-11","","6dbd3d85-18ca-4bc6-984b-add0889db68f" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-12","","3bd3a9c0-07cf-41eb-917d-d40162429a59" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-3","","1c4b5e76-b447-4dab-acb5-4badecbf682a" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-4","","799b81e7-1b2d-4837-88e0-a01836697615" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-5","","3aa4763b-bc85-4609-96fe-0d0eff904fef" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-6","","6c0aee1a-955d-48c1-acc0-f7d095030308" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-7","","92df7f2e-7258-4140-be9f-888b1ae454ce" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-8","","93baec30-36eb-499b-9523-10e30b8ed846" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-9","","a0925c59-450c-46be-8735-a0ead1bbf437" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI","","1ef441a3-0fa2-4c1d-81d8-4312dcdde415" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","","","443bd29e-d615-498d-8580-300249cb7695" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","ATLAS","Atmospheric Laboratory for Applications and Science","f875bfd2-1712-4cd4-99dd-058aada97f91" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-099","Challenger Space Shuttle","af8374fb-1543-4eb2-a67e-5da2237505d3" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-102","Columbia Space Shuttle","5bfe76ac-90dc-4620-8da8-1178cf637b2d" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-103","Discovery Space Shuttle","f03dc3d3-f280-4ff4-b0e6-de800bb21ebb" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-104","Atlantis Space Shuttle","595c5eb0-2a7d-452b-8a62-d492375b78fa" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-105","Endeavour Space Shuttle","15541ce2-b06c-4597-8eb1-745e1c72600b" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPACE SHUTTLES","","a771d41b-2298-47fd-9e5d-f99370540e98" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPACELAB-1","","320292c9-dd15-43db-bbe7-36a217efc535" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPACELAB-3","","70d24549-a5ef-47b1-8131-f5c48e7e93d4" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPAS-II","Shuttle Pallet Satellite-II","73fef640-5d7a-4798-93d3-a97b712287a2" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SRL-1","Space Radar Laboratory-1","184a4b22-f26d-4358-8eb1-ab4262d4524e" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SRL-2","Space Radar Laboratory-2","4e7df1af-daec-4ee1-9e83-9f013d573fc1" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-11","Space Transport System STS-11","a7443743-c640-4eaf-a525-61651a9d954d" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-2","Space Transport System STS-2","c0866d20-5a1e-4365-965b-0673826bd398" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-34","Space Transport System STS-34","307e058f-5a6c-4b6b-b1a3-6a06a559a21b" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-39","Space Transport System STS-39","45da4f3c-c73d-4299-ba88-e26775f3c9f2" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-41G","Space Transport System STS-41G","186b17f1-68bc-4f05-8b2b-932d24c57e3a" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-41","Space Transport System STS-41","ab66dd2f-7d5a-4e6f-a3dc-ec34849cf766" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-43","Space Transport System STS-43","e771da36-4162-407d-add9-46e6e0e80417" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-45","Space Transport System STS-45","50b3f253-e76a-4895-bd28-e477052ca1bb" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-51B","Space Transport System STS-51B","da093451-5b0d-49cc-87ad-18ce04aff12f" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-51F","Space Transport System STS-51F","430147e6-cf02-4d33-8806-033c85364fd4" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-55","Space Transport System STS-55","9e00a9bb-bff6-44aa-976c-fd1ac1c014b0" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-56","Space Transport System STS-56","6462dbc4-9b1f-4cb4-9ae1-8eed8bf3f17c" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-59","Space Transport System STS-59","ba33ff1b-a3a6-4d01-b6e6-a78ce7f20e32" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-62","Space Transport System STS-62","019b76a2-3576-4a03-a91f-8519319d66ee" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-64","Space Transport System STS-64","b978a160-ed2c-41e2-b993-7429ba4b2688" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-66","Space Transport System STS-66","8b619f22-98ef-4a50-871d-04fc49ecdf03" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-68","Space Transport System STS-68","8dd0a34f-2aba-4313-bc2e-b9a742d91862" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-72","Space Transport System STS-72","391b3a49-2960-4be9-a12b-29f2f912da99" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-7","Space Transport System STS-7","806b38f9-e3d7-4ac9-b403-7af2fdcc5381" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-99","Space Transport System STS-99","cc33ee94-f31e-4e4a-a659-f5c6fc244710" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-9","Space Transport System STS-9","d03c64a2-2352-424f-8345-ee17fc859167" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","","","3ef93fbf-1e19-42a9-a91f-502d125dbb7c" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","CALET","CALorimetric Electron Telescope (CALET)","b86cb129-67f0-40e1-91c4-5b4755cd8477" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","ISS","International Space Station","93c5d18c-be62-46c4-9545-42f73a854d85" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","MERCURY","","b0e515cf-ed97-4870-bdde-6c00b0c998ee" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","MIR-PRIRODA","PRIRODA Module of MIR Space Station","207e6805-2bdf-4954-8178-c4cd63ce2269" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","OSTA-1","Office of Space & Terrestrial Applications-1","e554b6aa-8d53-4fc5-a7d3-e43808d9e41b" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","SKYLAB","","b0f992d7-3ff5-4470-849a-a540a9f8ce3e" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","SOYUZ","","0a14ea80-5b3a-4d6f-a81b-38150a1fbe93" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","","","a4297e6c-efe4-4194-8309-0b8bd658445b" +"Space-based Platforms","Space Stations/Crewed Spacecraft","","","","388e72a1-b851-4b78-9e69-747e06ae215f" +"Space-based Platforms","","","","","b39a69b4-c3b9-4a94-b296-bbbbe5e4c847" +"Water-based Platforms","Buoys","Moored","ATLAS MOORINGS","Autonomous Temperature Line Acquisition System","d52d296b-370a-4741-8f07-e6b6873191c6" +"Water-based Platforms","Buoys","Moored","BUOYS","","3c5df34c-b231-460d-b3b6-4145c1fa8f25" +"Water-based Platforms","Buoys","Moored","DART","Deep-ocean Assessment and Reporting of Tsunamis","b29f3baa-5bb8-4b64-8c5b-27c3de8084bd" +"Water-based Platforms","Buoys","Moored","MOORINGS","","fbcd0c2b-f8ac-4199-9a37-5e7a39150730" +"Water-based Platforms","Buoys","Moored","NDBC MOORED BUOY","","3d83b3e3-1be0-4ab8-9cf5-3b7ade27586e" +"Water-based Platforms","Buoys","Moored","TAO","TROPICAL ATMOSPHERE OCEAN","c9cb3b35-570d-4aa4-a8e1-2a21aacc67c4" +"Water-based Platforms","Buoys","Moored","TRITON","TRIangle Trans-Ocean Buoy Network","22946f69-ea37-451d-afe5-409b42dcd983" +"Water-based Platforms","Buoys","Moored","","","15a80a3c-a97b-4872-896c-b7e6292663b8" +"Water-based Platforms","Buoys","Unmoored","MOUSS","MOdular Underwater Sampling System","e8299623-dad3-4773-b14a-39482873322f" +"Water-based Platforms","Buoys","Unmoored","PALACE FLOAT","Profiling Autonomous Lagrangian Circulation Explorer","b4d40e77-a862-418e-a8dc-f7b7e704b4cc" +"Water-based Platforms","Buoys","Unmoored","PROTEUS","Profile Telemetry of Upper Ocean Currents","c9bfbe86-064a-4d64-875b-cb36bff3f9e9" +"Water-based Platforms","Buoys","Unmoored","","","a5418190-0d3e-4dfb-a9d1-7e5bd0453d61" +"Water-based Platforms","Buoys","","","","99c4602d-1de6-4f4b-88e2-3bd13bd9a385" +"Water-based Platforms","Fixed Platforms","Subsurface","GEOSTAR","GEophysical and Oceanographic STation for Abyssal Research","1d168c0e-82cd-407c-a49a-f343b4fc4e24" +"Water-based Platforms","Fixed Platforms","Subsurface","NEMO-SN1","NEutrino Mediterranean Observatory - Submarine Network 1","83212677-16fc-42ab-9a23-cdbbacfa1d18" +"Water-based Platforms","Fixed Platforms","Subsurface","SN-2","Submarine Network 2","d227bc01-e09a-4356-89d3-84cae164eeec" +"Water-based Platforms","Fixed Platforms","Subsurface","SN-4","Submarine Network 4","85e347f2-d65d-4941-a252-0b0c55653b37" +"Water-based Platforms","Fixed Platforms","Subsurface","","","0353603c-a179-41d3-bd20-c97c140d2167" +"Water-based Platforms","Fixed Platforms","Surface","C-MAN","Coastal Marine Network","7fdf83a9-e0b3-4bb2-a6f4-801078f62cc9" +"Water-based Platforms","Fixed Platforms","Surface","DRILLING PLATFORMS","","cd14c407-881b-4fc1-8222-f1eeed77f4e2" +"Water-based Platforms","Fixed Platforms","Surface","OCEAN PLATFORMS","","5a4e787b-55e4-47d4-9520-ee74d6efdb6e" +"Water-based Platforms","Fixed Platforms","Surface","OCEAN WEATHER STATIONS","","d26f4894-667e-4e29-8e0b-5db476c98464" +"Water-based Platforms","Fixed Platforms","Surface","Sea Ice Mass Balance Station","","31e96f2f-9b8e-454f-a1f8-e8d791c13a33" +"Water-based Platforms","Fixed Platforms","Surface","","","d93ffd52-5072-4736-b16a-cc4e5113e8b2" +"Water-based Platforms","Fixed Platforms","","","","3c199bbf-beb6-4ab8-a8ff-60ddcd199f12" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","AUVS","Autonomous Underwater Vehicles","1ea3829f-9479-46f5-a075-315da09867ae" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Argus","","ddc7ed71-2626-4b81-8079-82c04d0bdc91" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Deep Discoverer","","023cf280-8fd9-4a4d-8e18-54fac3f6dbbb" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Global Explorer","","464643c0-4600-4d38-9927-9587fa8904bb" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Guru","","9b01b91a-d937-4148-b4f5-63e5254b6195" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Hercules","","654fb060-af2f-4d5d-af89-2216ef7939ca" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Jason II","","b7831fc5-0da7-4c2a-b4d6-dae934648d95" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Jason","","74995db1-1047-4e0b-b0c9-b4b9f7bdd6b6" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Little Hercules","","b3ef5a11-5c6d-4f14-a0bb-a90e8614a908" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Phantom DHD2+2","","897c4eed-6f5a-4b60-9780-a73362ec84f2" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","RCV-150","","420ea41e-a300-4c15-9e5d-eb395f56e986" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","ROPOS","","127be6b4-50ad-496d-939b-5c1dc47ac4ff" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","SEAGLIDER","","51edfe40-a819-400d-9067-5d114b27b825" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","SEASOAR","","d975d656-aa72-41fe-857f-1aa15b0543e2" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Seirios","","f21d8715-f805-427d-b006-57a5d1240d1c" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Sonsub Innovator","","2adc78b1-be95-4cec-82a9-603f6a493d5b" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","Yogi","","940914db-9ad3-438c-8118-7a0abb0c4a92" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","","","31eb34c8-016e-48c4-9404-7d94ee66cfde" +"Water-based Platforms","Uncrewed Vehicles","Surface","Kingfisher","","dba6c8ed-8444-4e18-965c-9c0e30186ac3" +"Water-based Platforms","Uncrewed Vehicles","Surface","Saildrone","","6077a16e-dc27-47ba-b2b8-6ae731615925" +"Water-based Platforms","Uncrewed Vehicles","Surface","","","e634b062-56ba-41a9-9c95-0cff642b5974" +"Water-based Platforms","Uncrewed Vehicles","","","","b0488156-f2de-4635-b8b0-ec8d70ee8622" +"Water-based Platforms","Vessels","Subsurface","Alvin","","57323291-3348-4292-812e-7436d6a0781a" +"Water-based Platforms","Vessels","Subsurface","Clelia","","78c6cfd9-0df5-435e-9bb1-d14322db928f" +"Water-based Platforms","Vessels","Subsurface","DeepWorker 2000","","97b4bebd-71e2-4ac5-9d75-fdb89b9eaba2" +"Water-based Platforms","Vessels","Subsurface","Johnson-Sea-Link II","","cb5ab3cc-48d1-4b0c-b72b-700a6faee11e" +"Water-based Platforms","Vessels","Subsurface","Johnson-Sea-Link I","","ae078302-17ab-4cc5-ba7d-7a8a0102c01b" +"Water-based Platforms","Vessels","Subsurface","MIR II","","2fcdab81-7527-4344-a26c-632746e94423" +"Water-based Platforms","Vessels","Subsurface","MIR I","","15f4ae34-a5c9-43e0-84d6-246690648fca" +"Water-based Platforms","Vessels","Subsurface","Pisces V","","0f50133b-1ef8-4c67-97a3-ac0604a41fc8" +"Water-based Platforms","Vessels","Subsurface","SUBMARINE","","9e903361-9170-421b-b0ab-3fa6d160c20a" +"Water-based Platforms","Vessels","Subsurface","","","35f1c0af-8379-4812-a130-08d84514fc98" +"Water-based Platforms","Vessels","Surface","AIRBOAT","","18d0b454-a951-4d21-a58a-b984deade210" +"Water-based Platforms","Vessels","Surface","B/O MYTILUS","","3f6d798a-28df-46fa-80ea-7502f90b0fc3" +"Water-based Platforms","Vessels","Surface","B/O SG","B/O SARMIENTO DE GAMBOA","bccde7bb-3a29-4919-85ce-0b8f446d707d" +"Water-based Platforms","Vessels","Surface","F/V GREAT PACIFIC","","034a82a9-1dfc-4648-91fd-94aa6f8ed56f" +"Water-based Platforms","Vessels","Surface","NOAA Delaware II","NOAA Ship Delaware II","15f524d9-5155-466a-9d46-364d977bd864" +"Water-based Platforms","Vessels","Surface","Nancy Foster","NOAA Ship Nancy Foster","1a2349cd-6a6e-42bc-8c59-82e93f9372e6" +"Water-based Platforms","Vessels","Surface","Okeanos Explorer","NOAA Ship Okeanos Explorer","4838472f-2b4c-4107-bd9e-3bf78a7c5562" +"Water-based Platforms","Vessels","Surface","Oregon II","NOAA Ship Oregon II","b789b66d-e120-438b-96c1-2849c971040d" +"Water-based Platforms","Vessels","Surface","R/V AA","R/V Aurora Australis","90fadab8-daa5-4725-9e58-8fa81f05a960" +"Water-based Platforms","Vessels","Surface","R/V AKADEMIK M.A. LAVRENTYEV","","cdc27a9f-6118-4ab8-bf2c-d762e6dbbbdf" +"Water-based Platforms","Vessels","Surface","R/V ALPHA HELIX","","c5bdef62-eb89-4489-914f-7476f53bd45d" +"Water-based Platforms","Vessels","Surface","R/V AMA","R/V AMIR MOULAY ABDALLAH","f7a8f86c-08cc-4792-9ef0-50db79865e93" +"Water-based Platforms","Vessels","Surface","R/V ARANDA","","162fb231-6969-422b-a9e4-4de35cd595b7" +"Water-based Platforms","Vessels","Surface","R/V ARAON","","e6cf0811-fc28-45d3-99f9-1c537146cca8" +"Water-based Platforms","Vessels","Surface","R/V Annie","","3bd7ce49-0a7d-4460-a40b-79cf848471e1" +"Water-based Platforms","Vessels","Surface","R/V Atlantis","","3b39f0fb-7cfb-495e-a752-82f87eba8fa3" +"Water-based Platforms","Vessels","Surface","R/V DOLPHIN","","eba994bb-dd12-4941-ad6b-89d073e992f9" +"Water-based Platforms","Vessels","Surface","R/V FERRELL","","367f4bab-327f-425e-b047-3a2699126e11" +"Water-based Platforms","Vessels","Surface","R/V HERITAGE","","bbb476e8-9e6a-461f-882d-a213213705f2" +"Water-based Platforms","Vessels","Surface","R/V ITALIA","","e2e59fcb-be11-4ff2-bd7f-eee34a76aa45" +"Water-based Platforms","Vessels","Surface","R/V ITALICA","","6cf9a0ac-18c6-492a-b302-62ad4c918fcf" +"Water-based Platforms","Vessels","Surface","R/V Ivan Petrov","","810bc419-c1ea-4f38-b05f-6471e3621274" +"Water-based Platforms","Vessels","Surface","R/V JangMok","Research Vessel JangMok","6ff96d84-74e5-4dc3-9d80-6c0d5d534256" +"Water-based Platforms","Vessels","Surface","R/V L'ASTRO","R/V L'ASTROLABE","40e85d85-0619-48ab-83ab-dc7371d1eeaf" +"Water-based Platforms","Vessels","Surface","R/V LL","R/V LADY LISA","bc5dbb9e-0395-4291-933b-a2281be644ca" +"Water-based Platforms","Vessels","Surface","R/V LMG","R/V Laurence M. Gould","1c4e4aa2-b801-479f-b814-c18201db0960" +"Water-based Platforms","Vessels","Surface","R/V LOUIS S. ST. LAURENT","","e15a4f8d-c1e9-4239-8271-45551c3e2553" +"Water-based Platforms","Vessels","Surface","R/V MILLER FREEMAN","","2405ed08-fc64-4251-a242-c879181ebafd" +"Water-based Platforms","Vessels","Surface","R/V Manta","","884ca19a-8b6c-462c-85b8-23baacb72704" +"Water-based Platforms","Vessels","Surface","R/V NBP","R/V Nathaniel B. Palmer","a9c4dcab-bbd0-4f67-b2c0-bbbe71b8245e" +"Water-based Platforms","Vessels","Surface","R/V ONNURI","","3ccb3423-b471-437e-87d0-e964702bd90f" +"Water-based Platforms","Vessels","Surface","R/V OREGON","","eedf5ea0-c814-4b9f-9985-dba84cb07b50" +"Water-based Platforms","Vessels","Surface","R/V OSHORO-MARU","","9506524f-5cd7-43f3-8763-afe95283bf30" +"Water-based Platforms","Vessels","Surface","R/V PALMETTO","","03e37490-87d9-412d-80e1-b351fbe9d03d" +"Water-based Platforms","Vessels","Surface","R/V PANDALUS","","3fa51d3e-c177-4bfb-a189-4bba46686ec1" +"Water-based Platforms","Vessels","Surface","R/V POLARSTERN","","7d682090-e4cc-4634-93ec-beba19afda60" +"Water-based Platforms","Vessels","Surface","R/V PROFESSOR KHROMOV","","6405bead-664f-4452-b1d8-39b1f889ebaf" +"Water-based Platforms","Vessels","Surface","R/V Point Sur","R/V Point Sur","373f55d4-b13d-46fb-a72a-a391ccff99d9" +"Water-based Platforms","Vessels","Surface","R/V RHB","R/V RONALD H. BROWN","c21b5468-c3b6-4da2-bc6e-19d2109474c4" +"Water-based Platforms","Vessels","Surface","R/V Sally Ride","Research Vessel Sally Ride","3d58c65d-cca7-4a69-a882-c18b801411c6" +"Water-based Platforms","Vessels","Surface","R/V TANGAROA","","c99251bf-e937-4d59-8899-54d7b71a5667" +"Water-based Platforms","Vessels","Surface","R/V Thompson","Research Vessel Thomas G. Thompson","896d7c41-6ddc-4a23-acc4-ee946cf32a7f" +"Water-based Platforms","Vessels","Surface","R/V UM","R/V UMITAKA MARU","c37c3a9c-7eaa-4f3f-ae3a-dd1e62924388" +"Water-based Platforms","Vessels","Surface","R/V WECOMA","","82f1ab0b-3028-4f33-a7ad-81ac973bdf0c" +"Water-based Platforms","Vessels","Surface","R/V XUELONG","","3361bc7c-c1fa-485a-a18a-e67adc5637be" +"Water-based Platforms","Vessels","Surface","R/V YUZ","R/V YUZHMORGEOLOGIYA","3055b6f7-a545-489d-86c2-e52a24e0da9c" +"Water-based Platforms","Vessels","Surface","RCV-150","","7ec61a93-3c42-4af1-adca-8f26d22d3d27" +"Water-based Platforms","Vessels","Surface","RRS DISCOVERY","","e3d46087-97c7-4f61-8a90-f9b3ec5a7c6f" +"Water-based Platforms","Vessels","Surface","RSS JAMES CLARK ROSS","RSS JAMES CLARK ROSS","30585903-f838-4b9c-86c2-8778559475f7" +"Water-based Platforms","Vessels","Surface","Reuben Lasker","NOAA Ship Reuben Lasker","978bfb08-a88d-46c3-830e-13e26d55d35b" +"Water-based Platforms","Vessels","Surface","Ships","","1bb21d0f-bf48-42b5-8e09-cc0d58407e4a" +"Water-based Platforms","Vessels","Surface","ZODIACS","","600ecdea-31c3-40e6-809a-226f74ffdec5" +"Water-based Platforms","Vessels","Surface","","","59b97a6c-385e-40a2-8422-ecbdb6023c4c" +"Water-based Platforms","Vessels","","","","f843aa6e-0f5a-4e1d-9c9f-96169a283789" +"Water-based Platforms","","","","","267606d3-4918-4651-b40d-be12b09dd2fe" diff --git a/pyQuARC/schemas/projects.csv b/pyQuARC/schemas/projects.csv index 4e867ca7..940dda46 100644 --- a/pyQuARC/schemas/projects.csv +++ b/pyQuARC/schemas/projects.csv @@ -1,4 +1,4 @@ -"Keyword Version: 10.7","Revision: 2021-07-23 10:28:52","Timestamp: 2021-08-17 09:30:45","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/projects/?format=xml""Case native" +"Keyword Version: 13.2","Revision: 2022-03-18 16:22:13","Timestamp: 2022-03-28 09:16:54","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/projects/?format=xml","Case native" Bucket,Short_Name,Long_Name,UUID "A - C","25090-E/ANT","","07a12d76-3794-4d1f-8db3-96a4c9814d54" "A - C","AAE","Australasian Antarctic Expedition of 1911-14","cda4025c-b996-442d-90f9-1b75af7ff6e6" @@ -20,6 +20,7 @@ Bucket,Short_Name,Long_Name,UUID "A - C","AC SQUARED","Antarctic Climate and Atmospheric Circulation","5e860805-4b5f-4605-9380-6e9791646d9b" "A - C","ACCENT","Atmospheric Composition Change","ad8642d7-f741-47b8-bcf9-17764dd977c0" "A - C","ACCE","Atlantic Climate and Circulation Experiment","9aa5e178-40ee-44eb-8731-2d488394da49" +"A - C","ACCLIP","Asian Summer Monsoon Chemical and CLimate Impact Project","258fbd3e-3848-4d0c-885c-5704256b5bc4" "A - C","ACCO-NET","Arctic Circum-Polar Coastal Observatory Network","1fffaa58-72f8-4044-a4cc-f7cc57c07b09" "A - C","ACCP","Accelerated Canopy Chemistry Program","086f7566-5193-4bc3-a75a-c073e379bbe9" "A - C","ACDP","Arctic Coastal Dynamics Program","36d131d7-5961-405e-9d3b-09db4d292bfa" @@ -89,6 +90,7 @@ Bucket,Short_Name,Long_Name,UUID "A - C","ALOS-2","Advanced Land Observing Satellite 2","2da57231-bb54-4862-84da-944489bebbb6" "A - C","ALPEX","Alpine Experiment","cbcdf37a-0921-4a20-8f4a-00cb40b43098" "A - C","AM-DTR","Antarctic meteorology: dynamics, turbulence and radiation","c2ff36f2-6845-44d6-8074-eeff162b1c4b" +"A - C","AMAPPS","Atlantic Marine Assessment Program for Protected Species","ec3ec9ab-c1ac-4566-bb0c-3ecfb220446c" "A - C","AMBER","Arctic Marine Biodiversity and Ecosystem Research","63beee03-8d32-4b59-8690-83f32bdbbda8" "A - C","AMBS","Antarctic Multibeam Bathymetry & Geophysical Synthesis","fac9a08e-22b7-48dc-bff9-60e9156ba0eb" "A - C","AMERIFLUX","","d3e59590-c9b4-46f2-9f66-e7de357935f5" @@ -130,6 +132,7 @@ Bucket,Short_Name,Long_Name,UUID "A - C","APIOS","Acid Precipitation In Ontario Study","4b2c9ccf-cb37-480a-92a2-21ff2c46a0a3" "A - C","APIS","Antarctic Pack Ice Seals Project","bc14beec-ff4f-4b80-8349-cc08e4a2f007" "A - C","AQ-NWP100","Arctic Quest - Northwest passage 100 Year Celebration","d008094b-2a76-440c-90e2-1dcab4444e8a" +"A - C","AQDH","Air Quality Data for Health-Related Applications","48b63b37-24ba-4707-8aa9-72d53ab79f96" "A - C","AQUARIUS SAC-D","AQUARIUS SAC-D","17b47095-5ac1-4d99-9ff1-7a662d535c66" "A - C","AQUARIUS","","a158023c-e9d1-4d71-b8f6-5bd3afa4b095" "A - C","ARB","Aerosol Research Branch Light Detection and Ranging Project","c12673b5-68cd-481b-ba98-10c0e9136ff8" @@ -182,6 +185,7 @@ Bucket,Short_Name,Long_Name,UUID "A - C","ARW/SJC","Aerosols and Rain Water at Sao Jose dos Campos,SP, Brazil","fe0e72ea-1d70-43f5-85dc-096c94099264" "A - C","ARWAMLP","Animas River Watershed Abandoned Mine Lands Project","72d37a19-68c1-4d6c-90cb-6cbc527e51f9" "A - C","ASAID","Antarctic Surface Accumulation and Ice Discharge","8a1daa35-8f35-4302-b501-2e665035c7b6" +"A - C","ASCENDS","Active Sensing of CO2 Emissions over Nights, Days, and Seasons","7184f2f4-c89e-44fb-a35a-db1c63f11c77" "A - C","ASGAMAGE","Air Sea Gas Marine Aerosol and Gas Exchange","d90cb544-cf4c-4d75-bd15-c45ba92840f3" "A - C","ASHCAN","","bc5be83a-4550-403c-a40b-b60012c3f483" "A - C","ASHOE","Airborne Southern Hemisphere Ozone Experiment","cb7afa44-df4a-424c-8b2d-b26e447b0274" @@ -278,6 +282,8 @@ Bucket,Short_Name,Long_Name,UUID "A - C","BigFoot","BigFoot","5d514a31-380c-4a84-8050-cc358d51cd82" "A - C","C-AMP","CEOP Asian Monsoon Experiment","09d79dd9-9c84-4625-ad55-3e2edf2393e0" "A - C","C-MAP","Clean Air Mapping and Analysis Program","a9e667e3-da0c-4c6d-94ff-02258c346c95" +"A - C","C3VP","Canadian CloudSat/CALIPSO Validation Project","c2f95e5d-9fe5-49b3-b712-019d78172753" +"A - C","C3VP","","e4a7a825-1158-41bc-afa2-9b81422ea876" "A - C","CABRILLO","SOUTHERN CALIFORNIA BIGHT REGIONAL INVESTIGATIONS LIFE, LAND, AND OCEAN","77509487-4f7d-4685-a47b-f3e3a468f197" "A - C","CACHE-PEP","Natural climate variability-palaeoclimate through Antarctic Peninsula to pole","ba565e80-c481-4e75-b133-60cb72bf7d4a" "A - C","CALCOFI","California Cooperative Oceanic Fisheries Investigations","69efba4b-e680-44c0-8080-fa561cbb2c75" @@ -329,6 +335,7 @@ Bucket,Short_Name,Long_Name,UUID "A - C","CBMP","Circumpolar Biodiversity Monitoring Program","0b578aa0-e4f0-4af1-95d3-6b2093ed80a7" "A - C","CBP","Chesapeake Bay Program","12ee3357-2079-4924-a956-6ba4498a9a65" "A - C","CBR","Columbia Basin Research","6cf29a28-1b97-444b-9d3d-ad9f23599cef" +"A - C","CC-VEx","CALIPSO-CloudSat Validation Experiment","36635fd7-4504-470a-8d12-b420374349dc" "A - C","CCAMLR","Commission for the Conservation of Antarctic Marine Living Resources","50faa646-2d5e-460a-b676-3b76aaa4aa8d" "A - C","CCAP","Coastal Change Analysis Project","584dd91f-bbf4-4c20-8d4b-f5b5e57cd001" "A - C","CCAWS","Cryospheric Change Analysis Web Services","591b5ce9-d323-4005-a558-5761d1828649" @@ -416,6 +423,7 @@ Bucket,Short_Name,Long_Name,UUID "A - C","COMAAR","Coordination of Observation/Monitoring of the Arctic for Assessment and Research","caf420b8-fd11-4c59-acdc-58176f8db734" "A - C","COMARGE","Continental Margins","5acaedee-52a3-4ece-9812-7fdc3426e9f2" "A - C","COMET","Cooperative Program for Operational Meteorology, Education, and Training","5c70d6af-b73d-418e-a793-47481302eeb5" +"A - C","COMEX","CO2 and MEthane eXperiment","10e3f0f0-f15f-4203-9481-8c5941ba1982" "A - C","COMITE","Coastal Ocean MIcrobial Plankton and Temperature","c77f71dc-57b5-4579-bba4-6f1a743f76d3" "A - C","COML","CENSUS OF MARINE LIFE","bb4e35cc-520c-4d24-984f-d81cb2965a85" "A - C","COMPASS","Comprehensive Meteorological datase for Antarctic Scientific and applied Studies","0e7404f6-1094-47e8-a967-a1e0247e024b" @@ -432,6 +440,7 @@ Bucket,Short_Name,Long_Name,UUID "A - C","COSPAR","Committee on Space Research","a2cd5a8a-fb88-47a1-8dfa-91c519403f24" "A - C","COTS","NOAA Coastal Observation Technology System (COTS)","4236799a-f395-4a7c-98c6-bb387b5ac7d3" "A - C","COUNTRY FOOD SAFETY","Engaging communities in the monitoring of zoonoses, country food safety and wildlife health.","061abbeb-2278-4274-a632-664a82cf7a0d" +"A - C","CPEX-AW","Convective Processes Experiment - Aerosols & Winds","6aa2a5ed-41e0-4eaa-ac23-6dd05a22c147" "A - C","CPEX","Convective Processes Experiment","861ffbe4-50be-4e26-bfb3-8f7e9bd3c215" "A - C","CRAC-ICE","Collaborative Research into Antarctic Calving and ICeberg Evolution","69966e64-9135-4d58-a1f5-85db86edb20b" "A - C","CREDDP","Columbia River Estuary Data Development Program","1761ff72-1908-48a1-ae6e-ac53daaf04e4" @@ -467,6 +476,7 @@ Bucket,Short_Name,Long_Name,UUID "D - F","DC3","Deep Convective Clouds and Chemistry Project","3e0843ae-d6ed-4972-b164-53adc891563a" "D - F","DCOTSS","Dynamics and Chemistry of the Summer Stratosphere","dd7b9be5-7fe0-40a2-a152-4f8fece249f9" "D - F","DDC","IPCC Data Distribution Centre","6485f13c-b08d-4a4e-af5e-43e45e13f936" +"D - F","DEDC","Digital Elevation Data Collection","68e15ab6-7c9d-4111-83b1-39e6b78cd6ac" "D - F","DENALI","Denali National Park and Preserve","e1ebbbd6-3233-44ae-82a8-9c276d300ace" "D - F","DEVOTE","Development and Evaluation of satellite ValidatiOn Tools by Experimenters","b5c35cc4-a0fa-47db-baaf-3ae7a7b34a8c" "D - F","DE","DIGITAL EARTH","6fd129b1-f3d8-4551-8e39-6d137c24199a" @@ -527,6 +537,7 @@ Bucket,Short_Name,Long_Name,UUID "D - F","ELTA","EROS Long Term Archive","c8ee049e-dd41-4566-ae69-0e11c655e41a" "D - F","EMAP","Environmental Monitoring and Assessment Program","2f144b3b-b730-412e-9b45-2c36117269c0" "D - F","EMEFS","Eulerian Model Evaluation Field Study","6b2b0b1c-e8ce-48f8-8b75-62221d2096f5" +"D - F","EMIT","Earth Surface Mineral Dust Source Investigation","8d8038bb-2664-4cbe-8838-878f1083e401" "D - F","EMOLT","Environmental Monitors on Lobster Traps","895ecaa3-bbe0-40d1-92ae-5ad66b00272e" "D - F","EMPACT","Environmental Monitoring for Public Access and Community Tracking","b7b161b4-4c62-44f5-84d6-d2081c71d068" "D - F","EMP","Ecosystem Monitoring Program (Monitoreo de Ecosistemas)","5c039105-946e-444c-90ab-a7c19ed179b5" @@ -691,6 +702,7 @@ Bucket,Short_Name,Long_Name,UUID "G - I","GHOST","Global Holocene Spatial and Temporal Climate Variability","91d0d91a-6395-49a0-b498-41f71ae83ecc" "G - I","GHRSST-PP","GODAE High Resolution Sea Surface Temperature Pilot Project","5aff2260-a3d8-4a1f-a6bf-3a44c103c5fe" "G - I","GHRSST","Group for High Resolution Sea Surface Temperature","e44e6bb9-dcf6-4c22-a524-05b6c3437d35" +"G - I","GHSL","Global High Resolution Urban Data from Landsat","d48e3f37-3474-4567-8090-2372a80809f9" "G - I","GIANT","Geodetic Infrastructure in Antarctica","75a35f6c-cbf4-4bb3-980e-66b0ad359c1f" "G - I","GIG91","GPS IERS and Geodynamics Experiment","cffc6f70-5ced-4c7c-995f-00fa6d5cfa21" "G - I","GIIPSY","Global Inter-agency IPY Polar Snapshot Year","d4827c6a-7578-402d-90ef-79e68b588e49" @@ -728,12 +740,14 @@ Bucket,Short_Name,Long_Name,UUID "G - I","GOA","GREENING OF THE ARCTIC: CIRCUMPOLAR BIOMASS:","e0dd2ca8-0755-46a1-baeb-d8cdab69ba82" "G - I","GODAE","Global Ocean Data Assimilation Experiment","f87c4748-eb6d-4124-b8eb-8a16c622ae09" "G - I","GODAR","Global Oceanographic Data Archaeology and Rescue Project","5629611c-a84f-4138-8ac0-a304604f7bae" +"G - I","GOES-R PLT","GOES-R Post Launch Test (PLT) Field Campaign","1281dfb5-22f5-4389-b75a-1825823f09f2" "G - I","GOES","Geostationary Operational Environmental Satellites","1d281ec3-287f-4738-8076-dc1b9f38c77d" "G - I","GOFC","Global Observation of Forest Cover","c9c66102-64c6-4c83-988a-c9c3f106f5db" "G - I","GOMA","Gulf of Maine Program","fb0aad7e-44a4-4948-887f-4a01b9b7bf6e" "G - I","GOMC/ESIP","Gulf of Maine Council's Ecosystem Indicators Program (ESIP)","7c043737-8ee2-4109-98a6-ede57211437a" "G - I","GOMC","Gulf of Maine Council on the Marine Environment","9db20a07-d2bf-435d-b0ff-cd5a490cc73f" "G - I","GOME","Global Ozone Monitoring Experiment","d7b3c789-37ea-40d5-8083-87853faf7e78" +"G - I","GOMMAPPS","Gulf of Mexico Marine Assessment Program for Protected Species","f7dde357-a040-4df1-957e-6f322d0ccff1" "G - I","GOMMP","Gulf of Maine Monitoring Programs","7b3c86a9-772e-4304-83d8-81ca5f7e63d4" "G - I","GOMODP","Gulf of Maine Ocean Data Partnership","7e697331-97c1-42ea-a231-2dda917795fa" "G - I","GOMOOS","Gulf of Maine Ocean Observing System","58edba36-02dd-495c-9d4b-b64d7d9feb3a" @@ -753,6 +767,7 @@ Bucket,Short_Name,Long_Name,UUID "G - I","GPS/MET","Global Positioning System Meteorology Experiment","5db1f46d-cf7e-4824-8516-7f7d3dce3858" "G - I","GPW","Gridded Population of the World","213d3605-1c30-4136-bcaa-a7b8fed24ae0" "G - I","GRACE-DA-DM","Gravity Recovery and Climate Experiment Data Assimilation for Drought Monitoring","ebd6c0a5-d863-48e1-bf92-102b3e6dafb5" +"G - I","GRACE-FO","Gravity Recovery and Climate Experiment Follow-On","59363e18-f160-4e0e-8335-75ace684bfeb" "G - I","GRACE","Gravity Recovery and Climate Experiment","6928865b-cbfb-4e72-ad44-2415232d60fa" "G - I","GRAND","Global Reservoir and Dam Database","b3210ad3-5825-45ee-8434-643e1b64673e" "G - I","GRANIT","Geographically Referenced Analysis and Information Transfer System","d246db77-4f90-463e-a153-17c1d054f54a" @@ -825,6 +840,7 @@ Bucket,Short_Name,Long_Name,UUID "G - I","HyMeX","HYdrological cycle in Mediterranean EXperiment (HyMeX)","59a050da-525a-4416-8e2d-d291f837051d" "G - I","Hydroclimatology","Hydroclimatology Collection","9a0c4d32-54c1-450e-aafd-f086678ed176" "G - I","Hypoxia Watch","","18e56193-e740-44c1-b605-4ad9a3f33f16" +"G - I","HyspIRI Airborne","Hyperspectral Infrared Imager Airborne","2763c022-cc0c-44fc-9708-06b019aa548e" "G - I","I-TASC","INTERPOLAR Transnational Art Science Consortium","ed429593-cea7-41ca-ab0c-88fdcfa42f04" "G - I","IAA ENVIRONMENTAL PROGRAM","","7baa56b9-69a2-48c9-abe0-0b6a65b16344" "G - I","IAA ICHTHYOLOGY","","038aa02e-e499-4a71-9bd4-5d5bd007c9b4" @@ -842,6 +858,7 @@ Bucket,Short_Name,Long_Name,UUID "G - I","ICASS VI","International Congress of Arctic Social Sciences VI in Nuuk, 2007-2008.","cc62cf38-7902-46dd-81d9-9f302bf9d2f2" "G - I","ICBEMP","INTERIOR COLUMBIA ECOSYSTEM MANAGEMENT PROJECT","c071b16f-372c-498d-bde7-f16d7f9ed690" "G - I","ICE MASS BALANCE BY SATELLITE G","Ice and snow mass change of Arctic and Antarctic polar regions using GRACE satellite gravimetry","fb15914c-a38c-49dd-bb7d-2ee395ad0638" +"G - I","ICE POP","International Collaborative Experiment for PyeongChang Olympic and Paralympics","ae5bb0a4-8538-4e2e-a514-ce2ef158a7e6" "G - I","ICE STORIES","Ice Stories: Educational Resources for the International Polar Year","5fdab7af-be2f-4460-bd7c-d6bff63db500" "G - I","ICE-89","","61b9ca54-d9a7-41e5-b5ae-988028117924" "G - I","ICE-READER","Ice REference Antarctic Data for Environmental Research","8d5253a9-aff6-4d00-9f09-db76e1c06723" @@ -1091,6 +1108,7 @@ Bucket,Short_Name,Long_Name,UUID "M - O","MC3E","Midlatitude Continental Convective Clouds Experiment","e7347ded-45e0-4c90-8e0f-66e00f725dea" "M - O","MCM-LTER","McMurdo Dry Valleys Long term Ecological Research Project","37d886d4-a2ef-40e3-90bf-7b22ad389d9b" "M - O","MC","Magnetospheric Constellation","1b9aa220-a09f-478a-8068-27acd9997da2" +"M - O","MDBC","Mesophotic and Deep Benthic Communities","bd779e0a-c8d2-4ee0-a438-7d724485060b" "M - O","MDN","Mercury Deposition Program","0c9d65f7-ad67-4e2c-8ba7-fac5920ecba0" "M - O","MECCA","Model Evaluation Consortium for Climate Change Assessment","6bb51d32-d3bc-4379-a96b-dba4145c3272" "M - O","MECHANISM ON ASIAN MONSOON","","c168c987-6724-4f31-a027-3a396cad6318" @@ -1136,6 +1154,7 @@ Bucket,Short_Name,Long_Name,UUID "M - O","MONITOREO VOLCANOLOGICO","VOLCANOLOGIA DECEPCION","de61250d-9722-49b9-b111-5fffecbe0165" "M - O","MONITOREO_DE_ECOSISTEMAS","Penguin Monitoring of Antarctic Peninsula, South Orkney Is., South Shetland Is.","06a77e43-0e64-4cfa-9125-d442bfaced33" "M - O","MOORINGS AND THE TIME SERIES","MOORINGS AND THE TIME SERIES","00e0cdba-ac18-4ced-b5c9-5299b9aa6cc6" +"M - O","MOOSE","Michigan-Ontario Ozone Source Experiment","4a6aadbd-b965-4935-bb9c-7fd36981d9da" "M - O","MOPITT","Measurements Of Pollution In The Troposphere","ea8d8915-bce6-4f31-855c-e1a9085acbc2" "M - O","MOS-1/1b","Marine Observation Satellite","aa7490a5-b263-4088-b04a-45e33be64bce" "M - O","MOVE","MOVE: Perspectives on Relocation and Resettlement in the Circumpolar North","cc9892f8-6575-4e52-90f5-5dc6af739253" @@ -1172,6 +1191,7 @@ Bucket,Short_Name,Long_Name,UUID "M - O","NARSTO","North American Research Strategy for Tropospheric Ozone","d42ea5e2-355e-466b-97b7-08cd8ead37de" "M - O","NARWHAL","Inter-disciplinary Studies of the Narwhal with a Focus on Tusk Function.","59667f9f-200e-4635-bc0a-29eb1e75ce71" "M - O","NASA ACCESS","NASA's Advancing Collaborative Connections for Earth System Science","9ad5850e-2134-4a80-a22f-50c4fddd31d5" +"M - O","NASA CubeSat","NASA CubeSat Launch Initiative","106de99f-6b91-4f4d-9e59-a245cf81e065" "M - O","NASA DECADAL-SURVEY","NASA Decadal Survey Studies","c069a3b5-a5f3-4eec-9668-b8890e1aef9f" "M - O","NASA-Airborne-Lidar","NASA-Airborne-Lidar","44fc3652-62c1-4a7c-8023-55730e982a47" "M - O","NASA/COTF","NASA's Classroom of the Future","4d7110fa-0a59-4bfd-8f61-035b664f53c4" @@ -1343,6 +1363,7 @@ Bucket,Short_Name,Long_Name,UUID "P - R","PDDB","Paleobiology Data Base Project","8e206784-b48e-4487-948d-b263430c8368" "P - R","PEMG","FRENCH FIRST GLOBAL METEOROLOGIC EXPERIMENT","fe0a81fb-a773-49ee-b669-eb276b1d90a5" "P - R","PEM","Pacific Exploratory Mission in the Tropical Pacific","16c53dc7-1c57-4a80-b5c1-6580a0bcc23f" +"P - R","PEND","Natural Disasters","5107ce26-93b0-4d02-bedd-39c851d9be19" "P - R","PFSFC","Project on the Forecast of Sea and Fishing Conditions","905a2989-4cba-484b-8162-9984311aa642" "P - R","PG","Portland Greenmap","5e4057aa-5596-4ce1-b55a-268d5f187d4a" "P - R","PHOENIX","Exploring Antarctic Dry Valleys in Preparation for Mars Landings","c75b2984-4e92-4090-ad7d-a953338b4c30" @@ -1436,6 +1457,7 @@ Bucket,Short_Name,Long_Name,UUID "P - R","RECURSOS PESQUEROS","Fishing Resources, Instituto Antartico Argentino","ce91a92c-d2bf-4458-aed3-10c69a94d0d0" "P - R","REEF RELIEF","Reef Relief Organization","6e9f473c-13bd-4a8a-9efd-bc8dc865fdc0" "P - R","REEF","Reef Environmental Education Foundation","7f41ba25-22ef-4478-9d56-290b5d00bdea" +"P - R","RELAMPAGO","Remote Sensing of Electrification, Lightning, and Mesoscale/Microscale Processes with Adaptive Ground Observations","f48525b9-cc8a-4ff9-9d28-e908dcb43f60" "P - R","REMIB","THE WORLD BIODIVERSITY INFORMATION NETWORK","44362c00-384e-4638-94aa-d6bedf341a1f" "P - R","REMOSUR","Remote sensing monitoring and forecast of surging glaciers","ddb370b3-814e-4d60-882f-3b8a6d5f19c0" "P - R","REPRESENTATIONS OF SAMI IN THE","Representations of Sami in Nineteenth Century Polar Literature: The Arctic 'Other'","336d04f9-93f8-48fd-bece-50862dff852e" @@ -1472,12 +1494,14 @@ Bucket,Short_Name,Long_Name,UUID "S - U","SAGESTEP","SAGEBRUSH STEPPE TREATMENT EVALUATION PROJECT","a0df12bf-3892-43e7-bf79-afe8238c9b8e" "S - U","SAHEL_NAFR","Sahelian and NW Africa 14-Day NDVI Composites","1890e99e-1ece-4aa6-bec0-caf414fc2140" "S - U","SAHFOS","Sir Alister Hardy Foundation for Ocean Science","fcdc4134-dfae-4124-80a6-c699f45589d0" +"S - U","SAIL","Surface Atmosphere Integrated Field Laboratory","035c9893-cbe4-4c38-8a96-b99f245c2c60" "S - U","SALE-UNITED","SALE Unified International Team for Exploration and Discovery","838c6d52-4b04-4bb1-9508-23bc011bc33d" "S - U","SAM-II","Stratospheric Aerosol Measurement II","f261a48f-e9f0-4d19-b506-638defc45aad" "S - U","SAMAP","Sea Area Monitoring Action Plan","de6f934d-9c87-437f-b53f-81e50c982a6c" "S - U","SANDS","Sediment Analysis Network for Decision Support","e3ab5006-cc26-4b24-a4cb-66c9a4ba92d8" "S - U","SANGIS","San Diego Geographic Information Systems","d07b1e83-e9cc-4fc7-b503-d4a047ad1ff8" "S - U","SARAL","","dee88d1d-91cf-45da-bd00-d9fa0d8fba60" +"S - U","SARP","Student Airborne Research Program","89d4349b-69d8-4786-96eb-55363bbe28a9" "S - U","SAR","Species At Risk","a29a67d6-5ae3-408f-a57e-fffc6c046348" "S - U","SASSI","Synoptic Antarctic Shelf-Slope Interactions Study","ad0f7611-4431-43b9-8160-b0a53482b9fa" "S - U","SAVE","South Atlantic Ventilation Experiment","d408634c-22b2-4eba-94f7-d447f4d08303" @@ -1500,6 +1524,7 @@ Bucket,Short_Name,Long_Name,UUID "S - U","SCICEX","Scientific Ice Expeditions","a34190c4-bdd8-49e0-b89b-be687081eecf" "S - U","SCIENCEPUB","Arctic Natural Climate and Environmental Changes and Human Adaptation: From Science to Public Awareness","e4fc4ae3-7f46-450d-82ec-1f833c488e40" "S - U","SCISAT_ACE","Atmospheric Chemistry Experiment","2375a07c-cb6c-4803-968b-98e09b8a0e71" +"S - U","SCOAPE","Satellite Coastal and Oceanic Atmospheric Pollution Experiment","3c419e47-14fc-422e-ae48-4c8fe3b1ec5a" "S - U","SCOPE NITROGEN","SCOPE NITROGEN PROJECT","065824bc-7753-44e0-b419-c17d55edf819" "S - U","SCOPEX","The South Channel Ocean Productivity Experiment","b1792395-5f2f-46b9-b294-1dacd6ebe0a0" "S - U","SCOTIA","Sedimentary Connections and Ocean Thoroughfare in the Antarctic","9bc49ad8-1954-4516-869a-f7521a812b10" @@ -1564,6 +1589,7 @@ Bucket,Short_Name,Long_Name,UUID "S - U","SIBEX","Second International Biomass Experiment","939b6403-4402-4a7c-adcd-c65ddaf8bae0" "S - U","SICPP","Seasonal-to-Interannual Climate Prediction Program","73341f9f-84d4-4010-8392-ba88bd1c6714" "S - U","SIESIP","Seasonal to Inter-annual Earth Science Information Partners","1f5310d7-4911-4f36-89a5-8e7902fb51a9" +"S - U","SIF-ESDR","Solar Induced Fluorescence Earth Science Data Record","15ec2483-ea12-434b-9cdb-c0c20d8aaacf" "S - U","SIID-SMARA","Sea Ice and Iceberg Drift Project, Servicio Meteorologico de la Armada","535c0aba-c89b-4dab-81d6-d7cf387d8894" "S - U","SIKU","Sea Ice Knowledge and Use Assessing Arctic Environmental and Social Change","a47a342c-80ea-45f0-91a5-4002eac16d1d" "S - U","SIMBA DRIFT STATION","Sea Ice Mass Balance in the Antarctic-SIMBA Drift Station","bea1cc90-4271-4883-858f-77d69ebe683c" @@ -1629,6 +1655,7 @@ Bucket,Short_Name,Long_Name,UUID "S - U","SSEOP","Space Shuttle Earth Photographs Observation Project","7f8ab939-7ac5-439a-83bd-558a2a18a172" "S - U","SSE","Surface Solar Energy","c338e4a4-6c91-4ad6-942b-009a4a269b4a" "S - U","SSF","Superfund Site Footprints","b57aee86-44cd-4d37-b907-4c1b85b5578c" +"S - U","SSP","Shared Socioeconomic Pathways","dd1965ee-cf37-4773-81df-a3ec5f97e8a2" "S - U","STACS","","290355e7-b79c-461e-8f45-f298cf7a6244" "S - U","STARDUST","","f6b85a37-80a6-49f8-90b3-7ef5e2ec80f7" "S - U","START","Global Change System for Analysis, Research and Training, IGBP","222195a6-1f14-47a6-816a-4bde7e74d8f5" @@ -1650,6 +1677,7 @@ Bucket,Short_Name,Long_Name,UUID "S - U","SUPERDARN","Super Dual Auroral Network","3dcde0ef-c407-4b04-947e-17b5cd96aac6" "S - U","SURE","Sulfate Regional Experiment","fe538355-a0c4-4229-b235-f4adf84256c0" "S - U","SWAMP","Southwest Area Monsoon Project","0a4a7d30-32af-4e91-bbf5-a6381a6e8d22" +"S - U","SWOT","Surface Water Ocean Topography","98dbcfdf-763a-4d62-9f6c-3520818a7f68" "S - U","Salp_Antarctic","","27fc3ee5-600e-4add-82b1-50c3c769571c" "S - U","SanctSound","NOAA-Navy Sanctuary Soundscapes Monitoring Project","2752029e-90f5-4147-9834-17e14d6c8f90" "S - U","SeaWiFS","Sea-viewing Wide Field-of-view Sensor","7906156a-dcf2-4078-b0fc-d4134eb08e87" @@ -1671,6 +1699,7 @@ Bucket,Short_Name,Long_Name,UUID "S - U","TARFOX","Tropospheric Aerosol Radiative Forcing Observational Experiment","0788780a-b8ab-4c05-acf8-a2c25f36967d" "S - U","TASTE-IDEA","Trans-Antarctic Scientific Traverses Expeditions & Ice Divide of East Antarctica","bfa8dbee-7fee-4360-9160-a955f18cff4a" "S - U","TC4","Tropical Composition, Cloud and Climate Coupling Mission","423253e2-37b0-4696-9bb4-10beb012ec00" +"S - U","TCI","Tropical Cyclone Intensity","5bdeb9a4-d23b-4bb2-99fd-311e6fb79d40" "S - U","TCM-90","Tropical Cyclone Motion","ba984ec5-fc8b-492a-af83-73c76159a8e0" "S - U","TCSP","Tropical Cloud Systems and Processes","24c9dc22-cba5-43f7-a899-179a7eaccf48" "S - U","TCTE","Total Solar Irradiance Calibration Transfer Experiment","e06ed515-b130-4760-84a4-43857c4f0723" @@ -1704,12 +1733,15 @@ Bucket,Short_Name,Long_Name,UUID "S - U","TOPEX/POSEIDON","Ocean Topography Experiment","576fad0f-97e7-4d92-ac19-dbd46afdba22" "S - U","TOPP","Tagging of Pacific Predators","78a4190b-ca8f-4577-950d-a6680a9b6964" "S - U","TOR","TerraSAR-X Tracking, Occultation & Ranging Cat. A","4dcad6bb-0238-42ac-9eae-6c415f393278" +"S - U","TOTE/VOTE","Tropical Ozone Transport Experiment/Vortex Ozone Transport","c4c3e1d1-41d1-4fe4-9bfc-7ea4af3e42e5" "S - U","TOVS Pathfinder","TOVS Path A","31b6a610-6119-4a12-b33d-1d38301f54cb" "S - U","TPAF","Taxonomy and physiology of Antarctic fungi","a6dfe3d8-6ef2-409e-a734-637f76e9be67" +"S - U","TRACER-AQ","Tracking Aerosol Convection ExpeRiment – Air Quality","4f9f5ca4-24c0-49a6-950f-991e0ee827bf" "S - U","TRANPAT","Antarctic Peninsula Magnetotelluric Transects","fed4efd8-4353-4adb-9bc5-da3d13c3db30" "S - U","TRANSPAC","","714ef2b8-8c4b-45b4-a7cb-f984dd676f13" "S - U","TREES","Tropical Resources and Environment Monitoring by Satellite","614b0942-6420-457c-b68d-82ac64df0a19" "S - U","TRENZ","TRophic Ecology of the Nearshore Zone","b76fad89-06bb-454e-a779-ae57f6d6cbd0" +"S - U","TRMM-LBA","Tropical Rainfall Measuring Mission-Large-Scale Biosphere-Atmosphere Experiment in Amazonia","ee6e630d-b701-4cbd-933a-2b040d60e30f" "S - U","TRMM","Tropical Rainfall Measuring Mission Project","168a28d0-b862-4f23-944d-776b00b6feb2" "S - U","TROPESS","TRopospheric Ozone and its Precursors from Earth System Sounding","9adb566d-f4c5-403b-a518-42542aa28c8d" "S - U","TROPICS (EVI-3)","Time-Resolved Observations of Precipitation structure and storm Intensity with a Constellation of Smallsats","09d6e6fb-4a00-460e-9c7e-bb5b311b9467" @@ -1796,6 +1828,7 @@ Bucket,Short_Name,Long_Name,UUID "V - Z","WDC-Soils","ISRIC WDC-Soils","e529c3c6-4a0e-4776-afb8-14357052d921" "V - Z","WDC/GSD","World Data Center for Geoinformatics and Sustainable Development","015ba8fd-e81f-44ae-973c-f8b5432f1b45" "V - Z","WDS","World Data Center for Geophysics, Boulder","6fae13e2-162e-40ca-8edb-62b79ed97f19" +"V - Z","WDTS","Western Diversity Time Series","3aeb3f8b-f189-418f-b50a-e596f6978809" "V - Z","WELD","WEB-ENABLED LANDSAT DATA","94ad0ebc-0300-4897-8870-fb6b800083c8" "V - Z","WEPOLEX","Weddell Polynya Expedition","d265a95f-aba4-45be-ac11-55c19661e46d" "V - Z","WERATLAS","","e98627c4-0bc4-4a98-8159-f611860fb78c" diff --git a/pyQuARC/schemas/providers.csv b/pyQuARC/schemas/providers.csv index 3ee107ff..f85272f9 100644 --- a/pyQuARC/schemas/providers.csv +++ b/pyQuARC/schemas/providers.csv @@ -1,4 +1,4 @@ -"Keyword Version: 10.7","Revision: 2021-08-05 15:22:55","Timestamp: 2021-08-17 10:51:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/providers/?format=xml""Case native" +"Keyword Version: 13.2","Revision: 2022-03-25 14:20:39","Timestamp: 2022-03-28 09:00:57","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/providers/?format=xml","Case native" Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Data_Center_URL,UUID "ACADEMIC","GERMANY","","","DE/DLR","German Aerospace Center (DLR)","","2f9d7c12-c02d-41fb-a168-4d91794187f7" "ACADEMIC","GERMANY","","","","","","d780c4ea-4b39-4fda-a0d3-4f5bee42530d" @@ -838,6 +838,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "ACADEMIC","","","","UNC-CHAPEL_HILL/DCS","Department of Computer Science, University of North Carolina at Chapel Hill","http://www.cs.unc.edu/","0105c1c8-53f4-454e-ae3c-ca200fff0c6e" "ACADEMIC","","","","UNC-CHAPEL_HILL/DICE","DATA INTENSIVE CYBER ENVIRONMENTS, UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL","","59a40dc6-f382-435b-9437-d1b8b31212b5" "ACADEMIC","","","","UNC-CHAPEL_HILL/ILS/MRC","METADATA RESEARCH CENTER, SCHOOL OF INFORMATION AND LIBRARY SCIENCES, UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL","http://ils.unc.edu/mrc/","b2f49af1-6fdf-4f1b-baf0-4046247db4de" +"ACADEMIC","","","","UNC-WILMINGTON/CMS","Center for Marine Science, University of North Carolina at Chapel Hill","","7491a7e0-3f92-4445-9b65-10c685c4f145" "ACADEMIC","","","","UNC-WILMINGTON/SMEC","Science and Mathematics Education Center, University of North Carolina at Wilmington","http://www.uncw.edu/smec/","21393c4d-e5bf-41db-95ec-e76521a787cf" "ACADEMIC","","","","UND/NSERC","","http://www.nserc.und.edu","b332cf8e-4225-4143-a994-6df3ad2535ed" "ACADEMIC","","","","UND/UMAC","Upper Midwest Aerospace Consortium, University of North Dakota","http://www.umac.org/","37c9ecca-2cdc-42d3-957c-33b8360eae97" @@ -1010,6 +1011,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "ACADEMIC","","","","UWA/OCEAN","School of Oceanography, University of Washington","http://www.ocean.washington.edu/","461e8220-3ccc-47ac-b965-51988b4ec5fd" "ACADEMIC","","","","UWA/SAFS/CBR","Columbia Basin Research, School of Aquatics and Fisheries Sciences, University of Washington","http://www.cbr.washington.edu/","6fee77c2-5793-482b-990f-27bc95d75c74" "ACADEMIC","","","","UWA/SAFS/UWFC","University of Washington Fish Collection, School of Aquatic and Fishery Sciences, University of Washington","http://uwfishcollection.org/","8463b70c-0dba-4823-a16f-0ce4213b1d05" +"ACADEMIC","","","","UWA/SEFS","School of Environmental and Forest Sciences, University of Washington","","cb25895d-c1aa-4cc6-b93f-3e870dec557c" "ACADEMIC","","","","UWC/BOT/SA","SeaweedAfrica, Department of Botany, University of the Western Cape","http://www.seaweedafrica.org/","0292343d-4af6-4e6d-9e3f-21a191c0c40c" "ACADEMIC","","","","UWF/CEDB","Center for Environmental Diagnostics and Bioremediation, University of West Florida","http://uwf.edu/wjeffrey/data","0de507b5-3507-4798-a4ea-ab9b997a655b" "ACADEMIC","","","","UWI-GB/NAS","Department of Natural and Applied Sciences, University of Wisconsin-Green Bay","http://www.uwgb.edu/nas/","e8b1d501-f85d-4ec5-a71a-58d9c1276c49" @@ -1246,6 +1248,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "COMMERCIAL","","","","PISCES","PISCES Conservation Ltd.","http://www.irchouse.demon.co.uk/","6f749e4c-7047-4339-bf9d-a1566dfb4767" "COMMERCIAL","","","","PLACEWAYS","PLACEWAYS","http://www.placeways.com/","733376ed-98bc-4766-a160-8680a8fe1a79" "COMMERCIAL","","","","PS","Pocket Systems Ltd","http://www.pocket.co.uk","18d3f3a2-dc18-4fc5-a047-c214acfb08aa" +"COMMERCIAL","","","","Planet Labs","","https://www.planet.com/","28c18820-a23c-4f76-9538-2d4ed31e4db0" "COMMERCIAL","","","","RAMAS","Ramas Ecological Software","http://www.ramas.com/","2291fcbe-2d34-4f95-ba92-5f025f497125" "COMMERCIAL","","","","REGENT","Regent Instruments Inc.","http://www.regent.qc.ca","7fcca8c5-6d5a-419e-b17d-f7a1e076d525" "COMMERCIAL","","","","RGI","Resource GIS and Imaging Ltd.","http://www.rgi.bc.ca/","2678db16-2d91-444a-9a75-2fca4a90c7fa" @@ -1483,6 +1486,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "CONSORTIA/INSTITUTIONS","","","","RRES/GCTE SOMNET/EUROSOMNET","European Soil Organic Matter Network, Global Change and Terrestrial Ecosystems Soil Organic Matter Network, Rothamsted Research","http://www.rothamsted.bbsrc.ac.uk/aen/eusomnet/","e5a04166-2faa-4d25-86f7-e271e99709c7" "CONSORTIA/INSTITUTIONS","","","","RRES/GCTE SOMNET","Global Change and Terrestrial Ecosystems Soil Organic Matter Network, Rothamsted Research","http://www.rothamsted.bbsrc.ac.uk/aen/somnet/index.htm","40483400-caa9-40c2-8b4a-0f9a717d3baf" "CONSORTIA/INSTITUTIONS","","","","RRES/ROTH","Rothamsted, Rothamsted Research","http://www.rothamsted.bbsrc.ac.uk/iacr/tiacrhome.html","7dc6b32d-01db-4aa6-b930-5f54b0182799" +"CONSORTIA/INSTITUTIONS","","","","Radiant Earth Foundation","Radiant Earth Foundation","","eecf4b61-8315-4bed-8dda-f03f873ef827" "CONSORTIA/INSTITUTIONS","","","","ReCREMA","Research Center for Renewable Energy Mapping and Assessement at Masdar Institute","http://www.masdar.ac.ae/research/research-centers/sponsored-research-centers/research-center-for-renewable-energy-mapping-and-assessment-recrema","b3680ca6-1ba9-4405-9efd-99330832b313" "CONSORTIA/INSTITUTIONS","","","","Riskinabox","Risk in a Box","http://riskinabox.org/","53807239-8daf-417b-8ecf-628fec79d875" "CONSORTIA/INSTITUTIONS","","","","SAHANA FOUNDATION","Sahana Foundation","http://thesahanafoundation.org/index.php?page=home.php","cd2895a4-ac60-4fb6-acf9-22dac0072038" @@ -1893,6 +1897,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "GOVERNMENT AGENCIES-NON-US","GERMANY","","","DE/UK/IMK","Institut fur Meteorologie und Klimaforschung (IMK), Universitat Fridericiana Karlsruhe (University of Karlsruhe), Germany","http://www.imk-tro.kit.edu/","adbae959-2a62-496d-8198-211b27f856ed" "GOVERNMENT AGENCIES-NON-US","GERMANY","","","DE/ZALF","Leibniz-Centre for Agricultural Landscape and Land Use Research, Germany","http://www.zalf.de/","fb762aa7-adfd-498f-bb35-25353840305e" "GOVERNMENT AGENCIES-NON-US","GERMANY","","","","","","c1d6f18d-1a8c-4ed1-a85d-c2b0912fbf5f" +"GOVERNMENT AGENCIES-NON-US","GREECE","","","GR/IAASARS","National Observatory of Athens","https://www.noa.gr/en/","fcd2cc59-6cca-4e92-8d09-ddee37e8fc52" "GOVERNMENT AGENCIES-NON-US","GREECE","","","GR/NCMR/HNODC","Hellenic National Oceanographic Data Centre, National Centre For Marine Research, Greece","http://hnodc.ncmr.ariadne-t.gr/","9cddf866-30fd-402f-ac08-8073b301664a" "GOVERNMENT AGENCIES-NON-US","GREECE","","","","","","1203569f-a48d-4d25-93c1-95dd78fd2a08" "GOVERNMENT AGENCIES-NON-US","ICELAND","","","IS/IMO","ICELANDIC METEOROLOGICAL OFFICE","http://en.vedur.is","8ab7b279-982f-41a8-876b-cfa120d066ec" @@ -2244,8 +2249,8 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NESDIS/STAR","Center for Satellite Applications and Research, NESDIS, NOAA, U.S. Department of Commerce","http://www.orbit.nesdis.noaa.gov","006a1451-9ef8-4250-bb17-48a4e40bf96d" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NESDIS","National Environmental Satellite, Data, and Information Services, NOAA, U.S. Department of Commerce","http://www.nesdis.noaa.gov","71a5b7b8-b944-4d42-8338-80811fdf335e" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NIC","National Ice Center, NOAA, U.S. Department of Commerce","http://www.natice.noaa.gov/","2d8e6164-8d90-4a60-82a9-4acffbcc6abb" +"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC/MML","Marine Mammal Laboratory, Alaska Fisheries Science Center, National Marine Fisheries","https://www.fisheries.noaa.gov/about/marine-mammal-laboratory","1b38ecb4-294d-4b16-a219-bf469faeb4e8" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC/NMML/APIS","Antarctic Pack Ice Seals, National Marine Mammal Laboratory, Alaska Fisheries Science Center, NMFS, NOAA, U.S. Department of Commerce","http://nmml.afsc.noaa.gov/apis/apis.htm","4e1f47fa-2c18-4ed1-a4a2-d58a0a36a329" -"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC/NMML","National Marine Mammal Laboratory, Alaska Fisheries Science Center, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","http://www.afsc.noaa.gov/nmml/","1b38ecb4-294d-4b16-a219-bf469faeb4e8" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC","Alaska Fisheries Science Center, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","http://www.afsc.noaa.gov/","4271e7d0-b722-4039-9d1a-ee3a0d2c5de0" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AKRO","Alaska Regional Office, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","https://alaskafisheries.noaa.gov","22d89beb-cb38-4d0b-ab45-807a278ea307" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/FSED","Fisheries Statistics and Economics Division, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","http://www.st.nmfs.gov/st1/","6a298419-613c-4462-ac73-060922350117" @@ -2853,6 +2858,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/JPL/CC","Climate Change: NASA's Eyes on the Earth, Jet Propulsion Laboratory, NASA","https://climate.nasa.gov/","76d506b7-89cd-478b-b3ed-134533a00a6c" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/JPL/CMDS","Coastal Marine Discovery Service, Jet Propulsion Laboratory, NASA","http://cmds.jpl.nasa.gov/","5bb02f1b-65a5-4b37-a62d-b87f8ee70e46" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/JPL/ECOSTRESS","ECOsystem Spaceborne Thermal Radiometer Experiment on Space Station, Jet Propulsion Laboratory, NASA","https://ecostress.jpl.nasa.gov/","e6f2b759-7954-41f8-834b-f257ad99976f" +"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/JPL/EMIT","","","2180640a-ec49-4a1a-a063-460fcdb587a6" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/JPL/ESSD","Earth and Space Science Division, Jet Propulsion Laboratory, NASA","https://science.jpl.nasa.gov/","b6cc66fe-18b5-47ca-b085-982b47a56e56" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/JPL/GDGPS","Global Differential GPS, Jet Propulsion Laboratory, NASA","http://www.gdgps.net/","12d8bbc3-cf26-474f-8160-4702c459c3aa" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/JPL/GENESIS","GPS Environmental and Earth Science Information System, Jet Propulsion Laboratory, NASA","https://genesis.jpl.nasa.gov/genesis/","678b3e29-d7d4-4408-b6c9-08d1c17c8c2d" @@ -2901,7 +2907,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/GHCC","Global Hydrology and Climate Center, Marshall Space Flight Center, NASA","https://weather.msfc.nasa.gov/","69e19bdc-2aad-47f9-9246-746a69d1981e" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/GHRC/DISCOVER","Distributed Information Services for Climate and Ocean Products and Visualizations for Earth Research/Global Hydrology Resource Center, Marshall Space Flight Center, NASA","https://ghrc.nsstc.nasa.gov/home/projects/discover","be9f9e7f-1241-4eee-8370-5bd72b2c0ce6" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/GHRC/LANCE","Global Hydrology Resource Center, Marshall Space Flight Center, NASA - Land Atmosphere Near real-time Capability for EOS","https://lance.nsstc.nasa.gov/","9b194e6c-f499-43bf-9060-0adcb45e4f6d" -"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/GHRC","Global Hydrology Resource Center, Marshall Space Flight Center, NASA","https://ghrc.nsstc.nasa.gov/home/","da0a888d-cf97-45f5-99b3-6de866832935" +"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/GHRC","Global Hydrometeorology Resource Center, Marshall Space Flight Center, NASA","https://ghrc.nsstc.nasa.gov/home/","da0a888d-cf97-45f5-99b3-6de866832935" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/LIFTOFF","Liftoff, Marshall Space Flight Center, NASA","http://liftoff.msfc.nasa.gov/","4d4db62b-2452-4427-821c-7aedd7df6313" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/NSSTC","National Space Science and Technology Center, Marshall Space Flight Center, NASA","https://www.nasa.gov/centers/marshall/scienceandtechnology/nsstc.html","59bf21d2-1183-44d2-b78c-85d50c57b097" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","NASA","","","NASA/MSFC/SEE","Space Environments and Effects Program, Marshall Space Flight Center, NASA","https://see.msfc.nasa.gov/","f95d6d1c-a73c-4121-b4b7-f5f5e922b280" @@ -3150,6 +3156,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "MULTINATIONAL ORGANIZATIONS","","","","CIP","International Potato Center","http://www.cipotato.org/","b869d5ab-c105-4287-8a46-18bcbebd8b37" "MULTINATIONAL ORGANIZATIONS","","","","CLIVAR VACS","Variability of the African Climate System, CLIVAR","http://www.clivar.org/organization/vacs/vacs.php","4b71feac-07f9-4c7b-a917-48365032caaa" "MULTINATIONAL ORGANIZATIONS","","","","CMEMS","Copernicus - Marine Environment Monitoring Service","","a30665e4-6ce3-473b-bb47-9324e4210b33" +"MULTINATIONAL ORGANIZATIONS","","","","EARSC","European Association of Remote Sensing","https://earsc.org/","05c52cf9-0bb3-490f-a62d-f86816b0b24a" "MULTINATIONAL ORGANIZATIONS","","","","ECMWF","European Centre for Medium-Range Weather Forecasts","https://www.ecmwf.int/","b2acf9ee-ae0e-4754-b17f-efb51868ed2d" "MULTINATIONAL ORGANIZATIONS","","","","ECOCEAN","ECOCEAN Research, Education and Conservation","http://ecocean.org/","794a1ac9-3686-462a-982f-3b1e1f97a866" "MULTINATIONAL ORGANIZATIONS","","","","EC","European Commission","https://ec.europa.eu/commission/index_en","57a14338-6965-41de-9876-41fa6d259c51" @@ -3458,6 +3465,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "NON-GOVERNMENT/NON-PROFIT ORGANIZATIONS","","","","OPENDAP","OPeNDAP Inc.","http://www.opendap.org/","237c661e-c0c0-4eab-a5e1-8c61f276f4b8" "NON-GOVERNMENT/NON-PROFIT ORGANIZATIONS","","","","OSDTI","Open Source Data Turbine Initiative","http://www.dataturbine.org","92a14709-0b76-4a3e-9f93-ab7bf9b47415" "NON-GOVERNMENT/NON-PROFIT ORGANIZATIONS","","","","OSGEO","Open Source Geospatial Foundation","https://www.osgeo.org/","dc6a4b6d-8fa0-4ebf-9488-9d8f10da9211" +"NON-GOVERNMENT/NON-PROFIT ORGANIZATIONS","","","","PANGEO","PANGEO","https://pangeo.io/","c699c446-bed7-4b8f-987a-6d5b36ad9984" "NON-GOVERNMENT/NON-PROFIT ORGANIZATIONS","","","","PAN","Pesticide Action Network","http://www.panna.org","7276f031-eba7-49b0-9a8c-d19b90d9e4e9" "NON-GOVERNMENT/NON-PROFIT ORGANIZATIONS","","","","PCCS","Provincetown Center for Coastal Studies","http://www.coastalstudies.org/","6ba8cf10-cbb1-4330-9b82-05e4e436e14c" "NON-GOVERNMENT/NON-PROFIT ORGANIZATIONS","","","","PF","The Peregrine Fund","http://www.peregrinefund.org","81b0d605-ee60-4ba4-9cae-dd005c2f0249" diff --git a/pyQuARC/schemas/rucontenttype.csv b/pyQuARC/schemas/rucontenttype.csv index 3dfbd68d..8b834d06 100644 --- a/pyQuARC/schemas/rucontenttype.csv +++ b/pyQuARC/schemas/rucontenttype.csv @@ -1,90 +1,103 @@ -"Hits: 89","page_num: 1","page_size: 2000","Keyword Version: 10.7","Revision: 2021-07-23 10:30:38","Timestamp: 2021-08-17 09:31:10","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/rucontenttype/?format=xml""Case native" -Type,Subtype,UUID -"DATA SET LANDING PAGE","","","8826912b-c89e-4810-b446-39b98b5d937c" -"DOWNLOAD SOFTWARE","MOBILE APP","","5fedeefd-2609-488c-a897-fe168cae34dd" -"DOWNLOAD SOFTWARE","","","ca8b62c9-5f31-40bd-92a9-8d30081309e2" -"EXTENDED METADATA","DMR++ MISSING DATA","","4cc17021-b9cc-4b3f-a4f1-f05f7c1aeb2d" -"EXTENDED METADATA","DMR++","","f02b0c6a-7fd9-473d-a1cb-a6482e8daa61" -"EXTENDED METADATA","","","3c9d4493-22fd-48a8-9af5-bf0d16b7ede5" -"GET CAPABILITIES","GIBS","","ca5440d6-a9e4-416b-8e35-c4769f664b95" -"GET CAPABILITIES","OpenSearch","","09c6e3ea-f8e0-4052-8b41-c3b1269799ed" -"GET CAPABILITIES","","","2892b502-2c66-42d5-af3d-bcddb57d9195" -"GET DATA VIA DIRECT ACCESS","","","172cd72d-30d3-4795-8660-dc38820faba0" -"GET DATA","APPEEARS","","6b8f0bfc-d9a4-4af1-9d94-6dcfade03bda" -"GET DATA","CERES Ordering Tool","","93bc7186-2634-49ae-a8da-312d893ef15e" -"GET DATA","DATA COLLECTION BUNDLE","","444f03b4-e588-42da-aee6-73028f3c45be" -"GET DATA","DATA TREE","","3c2a68a6-d8c2-4f14-8208-e57a4446ad71" -"GET DATA","DATACAST URL","","2fc3797c-71b5-4d01-8ae1-d5634ec625ce" -"GET DATA","DIRECT DOWNLOAD","","8e33a2dd-df13-4079-8636-391abb5344c6" -"GET DATA","EOSDIS DATA POOL","","3779ec72-c1e0-4a0f-aff8-8e2a2a7af486" -"GET DATA","Earthdata Search","","5b8013bb-0b15-4811-8aa3-bfc108c3a041" -"GET DATA","GIOVANNI","","2e869d22-88fe-43dc-852d-9f50c911ad02" -"GET DATA","GoLIVE Portal","","9bfb0f20-189e-411b-a678-768bf3fa256e" -"GET DATA","IceBridge Portal","","3c60609c-d48d-47c4-b069-43951fa0aea3" -"GET DATA","LAADS","","0b50c12d-a6ae-4d63-b42b-d99bf7aa2da0" -"GET DATA","LANCE","","aa11ac15-3042-4634-b47e-acc368f608bd" -"GET DATA","MIRADOR","","9b05d2a3-9a5a-425c-b6ed-59e0e56814fa" -"GET DATA","MODAPS","","26431afd-cb37-4772-9e97-3a36f6dff32d" -"GET DATA","NOAA CLASS","","a36f1716-a310-41f5-b4d8-6c6a5fc933d9" -"GET DATA","NOMADS","","b434314f-949f-4c26-be57-2ea4c7f03643" -"GET DATA","Order","","bd91340d-a8b3-4c01-b262-71e50fe69c83" -"GET DATA","PORTAL","","49be0345-a6af-4608-98d8-9b2343e60077" -"GET DATA","Sub-Orbital Order Tool","","459decfe-53ee-41ce-b608-d7578b04ef7b" -"GET DATA","Subscribe","","38219044-ad26-4a32-98c0-dca8ad3cd29a" -"GET DATA","USGS EARTH EXPLORER","","4485a5b6-d84c-4c98-980e-164863ca518f" -"GET DATA","VERTEX","","5520d1de-f7f5-4798-9ebc-698885805489" -"GET DATA","VIRTUAL COLLECTION","","78d28911-a87c-40a0-ada2-c14f7cfb0834" -"GET DATA","","","750f6c61-0f15-4185-94d8-c029dec04bc5" -"GET RELATED VISUALIZATION","GIOVANNI","","690210ef-4cf8-4645-b68d-921466bba6a2" -"GET RELATED VISUALIZATION","MAP","","e6f9524a-e4bc-460a-bdf3-a5e8f0e921a9" -"GET RELATED VISUALIZATION","SOTO","","389ab1cf-fbf4-49ee-bf22-e40643fa00f6" -"GET RELATED VISUALIZATION","WORLDVIEW","","eeff646c-6faf-468e-a0ab-ff78fc6f86f9" -"GET RELATED VISUALIZATION","","","dd2adc64-c7bd-4dbf-976b-f0496966817c" -"GOTO WEB TOOL","HITIDE","","a7225578-b398-4222-a7a0-8f5175338ddf" -"GOTO WEB TOOL","LIVE ACCESS SERVER (LAS)","","20ab6d52-f5a7-439c-a044-6ef2452a2838" -"GOTO WEB TOOL","MAP VIEWER","","c1c61697-b4bd-467c-9db4-5bd0115545a3" -"GOTO WEB TOOL","SIMPLE SUBSET WIZARD (SSW)","","6ffc54ea-001a-4c03-afff-5086b2da8f59" -"GOTO WEB TOOL","SUBSETTER","","bf37a20c-8e99-4187-b91b-3ea254f006f9" -"GOTO WEB TOOL","","","ffccf1c0-f25d-4747-ac4a-f09444383031" -"PROFESSIONAL HOME PAGE","","","f00cf885-8fc5-42ca-a70e-1689530f00cf" -"PROJECT HOME PAGE","","","6e72d128-7d28-4bd0-bac0-8c5ffd8b31f1" -"USE SERVICE API","GRADS DATA SERVER (GDS)","","5c0cd574-0255-4202-9b5b-3da8711b7ed7" -"USE SERVICE API","MAP SERVICE","","0c3aa5c6-f1f9-4c16-aa96-30672028d26c" -"USE SERVICE API","OPENDAP DATA","","eae7a041-b004-48df-8d4e-d758969e3185" -"USE SERVICE API","OpenSearch","","89b80cbd-027f-4eab-823f-ae00c268f5bf" -"USE SERVICE API","SERVICE CHAINING","","411d2781-822c-4c48-8d5b-4b51b100ce0a" -"USE SERVICE API","TABULAR DATA STREAM (TDS)","","7b664934-70c4-4694-b8c1-416e7c91afb9" -"USE SERVICE API","THREDDS DATA","","77cae7cb-4676-4c69-a88b-d78971496f97" -"USE SERVICE API","WEB COVERAGE SERVICE (WCS)","","029540bb-7f5c-44ba-8578-61e2f858be60" -"USE SERVICE API","WEB FEATURE SERVICE (WFS)","","c4d406e6-7a34-42aa-bd79-f7f9265cc7bd" -"USE SERVICE API","WEB MAP SERVICE (WMS)","","b0e2089c-3c1d-4c12-b833-e07365a4038e" -"USE SERVICE API","WEB MAP TILE SERVICE (WMTS)","","7aac9f91-20c4-4234-9153-e850c8ace8a9" -"USE SERVICE API","","","d117cf5c-8d23-4662-be62-7b883cecb219" -"VIEW RELATED INFORMATION","ALGORITHM DOCUMENTATION","","fcc9411c-a1c9-415d-a16c-75c42f2cec45" -"VIEW RELATED INFORMATION","ALGORITHM THEORETICAL BASIS DOCUMENT (ATBD)","","fd01f7ec-fdf6-4440-b974-75f12fb4ec5f" -"VIEW RELATED INFORMATION","ANOMALIES","","914cbb7e-5b20-4bcd-86e3-ffcfa26f0a73" -"VIEW RELATED INFORMATION","CASE STUDY","","3112d474-b44f-4af1-8266-c3dd6d28220f" -"VIEW RELATED INFORMATION","DATA CITATION POLICY","","40cf5001-15ec-4d9a-913c-bb323f2974fc" -"VIEW RELATED INFORMATION","DATA PRODUCT SPECIFICATION","","415cfe86-4d71-4100-8f35-6404caec1c91" -"VIEW RELATED INFORMATION","DATA QUALITY","","0eba3253-8eb7-4e43-9627-9cff48775e27" -"VIEW RELATED INFORMATION","DATA RECIPE","","547600e9-b60a-44eb-b14b-5c6e1f2c094e" -"VIEW RELATED INFORMATION","DELIVERABLES CHECKLIST","","be0460d8-ca8e-45c8-b637-8fb4ce5a5e97" -"VIEW RELATED INFORMATION","GENERAL DOCUMENTATION","","aebf20eb-39c7-4f4f-aecf-a628f703867b" -"VIEW RELATED INFORMATION","HOW-TO","","7ebd73e5-b0aa-4cf2-ace5-1d3890c2c3ce" -"VIEW RELATED INFORMATION","IMPORTANT NOTICE","","2af2cfc4-9390-43da-8fa8-1f272e8ee0b0" -"VIEW RELATED INFORMATION","INSTRUMENT/SENSOR CALIBRATION DOCUMENTATION","","fc3c1abb-92c1-49c2-90d4-161c70cff44a" -"VIEW RELATED INFORMATION","MICRO ARTICLE","","4f3c0b04-1fe6-4e11-994a-9cc4afd09ce0" -"VIEW RELATED INFORMATION","PI DOCUMENTATION","","367f8b8a-e57e-4c49-b971-0b5c6a484186" -"VIEW RELATED INFORMATION","PROCESSING HISTORY","","7cfa5214-7f69-4355-b259-286be88f25d1" -"VIEW RELATED INFORMATION","PRODUCT HISTORY","","b292f51f-d2b4-4e65-84a9-e50306238989" -"VIEW RELATED INFORMATION","PRODUCT QUALITY ASSESSMENT","","b7ed88ce-3f04-40ea-863e-ac58bd048ff3" -"VIEW RELATED INFORMATION","PRODUCT USAGE","","1132a0fc-888b-4332-ad0a-dc5c6e615afa" -"VIEW RELATED INFORMATION","PRODUCTION HISTORY","","0b597285-eaac-4cbd-94cc-d87ae8046681" -"VIEW RELATED INFORMATION","PUBLICATIONS","","13a4deec-bd22-4864-9804-77fac181f484" -"VIEW RELATED INFORMATION","READ-ME","","aa3cea98-b20a-4de8-8f22-7a8b30784625" -"VIEW RELATED INFORMATION","REQUIREMENTS AND DESIGN","","86b8b121-d710-4c5b-84b0-7b40717f6c76" -"VIEW RELATED INFORMATION","SCIENCE DATA PRODUCT SOFTWARE DOCUMENTATION","","e8e6e972-832f-4501-a721-4108f33332d6" -"VIEW RELATED INFORMATION","SCIENCE DATA PRODUCT VALIDATION","","15b0a4c4-b39d-48f5-92d2-905e45e6dc6a" -"VIEW RELATED INFORMATION","USER FEEDBACK PAGE","","ab2fce71-e5f9-4ba6-bfb1-bc428a8b7dd8" -"VIEW RELATED INFORMATION","USER'S GUIDE","","d1996d91-e824-4b24-b94e-3aae4543b63b" -"VIEW RELATED INFORMATION","","","5ec1bb9d-0efc-4099-9b31-ec791bbd8145" +"Hits: 102","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:23:23","Timestamp: 2022-03-28 09:17:49","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/rucontenttype/?format=xml","Case native" +URLContentType,Type,Subtype,UUID +"CollectionURL","DATA SET LANDING PAGE","","8826912b-c89e-4810-b446-39b98b5d937c" +"CollectionURL","EXTENDED METADATA","DMR++ MISSING DATA","4cc17021-b9cc-4b3f-a4f1-f05f7c1aeb2d" +"CollectionURL","EXTENDED METADATA","DMR++","f02b0c6a-7fd9-473d-a1cb-a6482e8daa61" +"CollectionURL","EXTENDED METADATA","","3c9d4493-22fd-48a8-9af5-bf0d16b7ede5" +"CollectionURL","PROFESSIONAL HOME PAGE","","f00cf885-8fc5-42ca-a70e-1689530f00cf" +"CollectionURL","PROJECT HOME PAGE","","6e72d128-7d28-4bd0-bac0-8c5ffd8b31f1" +"CollectionURL","","","c7bbd6c7-8b0a-46ed-a428-a2f0453ed69e" +"DataCenterURL","HOME PAGE","","05c685ab-8ce0-4b8a-8eba-b15fc6bbddfa" +"DataCenterURL","","","b2df0d8e-d236-4fd2-a4f6-12951b3bb17a" +"DataContactURL","HOME PAGE","","e5803df8-c802-4f3f-96f5-53e534835887" +"DataContactURL","","","65373de8-3fb3-4882-a8ca-cfe23a4ff58e" +"DistributionURL","DOWNLOAD SOFTWARE","MOBILE APP","5fedeefd-2609-488c-a897-fe168cae34dd" +"DistributionURL","DOWNLOAD SOFTWARE","","ca8b62c9-5f31-40bd-92a9-8d30081309e2" +"DistributionURL","GET CAPABILITIES","GIBS","ca5440d6-a9e4-416b-8e35-c4769f664b95" +"DistributionURL","GET CAPABILITIES","OpenSearch","09c6e3ea-f8e0-4052-8b41-c3b1269799ed" +"DistributionURL","GET CAPABILITIES","","2892b502-2c66-42d5-af3d-bcddb57d9195" +"DistributionURL","GET DATA VIA DIRECT ACCESS","","172cd72d-30d3-4795-8660-dc38820faba0" +"DistributionURL","GET DATA","APPEEARS","6b8f0bfc-d9a4-4af1-9d94-6dcfade03bda" +"DistributionURL","GET DATA","CERES Ordering Tool","93bc7186-2634-49ae-a8da-312d893ef15e" +"DistributionURL","GET DATA","DATA COLLECTION BUNDLE","444f03b4-e588-42da-aee6-73028f3c45be" +"DistributionURL","GET DATA","DATA TREE","3c2a68a6-d8c2-4f14-8208-e57a4446ad71" +"DistributionURL","GET DATA","DATACAST URL","2fc3797c-71b5-4d01-8ae1-d5634ec625ce" +"DistributionURL","GET DATA","DIRECT DOWNLOAD","8e33a2dd-df13-4079-8636-391abb5344c6" +"DistributionURL","GET DATA","EOSDIS DATA POOL","3779ec72-c1e0-4a0f-aff8-8e2a2a7af486" +"DistributionURL","GET DATA","Earthdata Search","5b8013bb-0b15-4811-8aa3-bfc108c3a041" +"DistributionURL","GET DATA","GIOVANNI","2e869d22-88fe-43dc-852d-9f50c911ad02" +"DistributionURL","GET DATA","GoLIVE Portal","9bfb0f20-189e-411b-a678-768bf3fa256e" +"DistributionURL","GET DATA","IceBridge Portal","3c60609c-d48d-47c4-b069-43951fa0aea3" +"DistributionURL","GET DATA","LAADS","0b50c12d-a6ae-4d63-b42b-d99bf7aa2da0" +"DistributionURL","GET DATA","LANCE","aa11ac15-3042-4634-b47e-acc368f608bd" +"DistributionURL","GET DATA","MIRADOR","9b05d2a3-9a5a-425c-b6ed-59e0e56814fa" +"DistributionURL","GET DATA","MLHub","7ff3e5a8-650a-4cd1-80db-cca0fd209a84" +"DistributionURL","GET DATA","MODAPS","26431afd-cb37-4772-9e97-3a36f6dff32d" +"DistributionURL","GET DATA","NOAA CLASS","a36f1716-a310-41f5-b4d8-6c6a5fc933d9" +"DistributionURL","GET DATA","NOMADS","b434314f-949f-4c26-be57-2ea4c7f03643" +"DistributionURL","GET DATA","Order","bd91340d-a8b3-4c01-b262-71e50fe69c83" +"DistributionURL","GET DATA","PORTAL","49be0345-a6af-4608-98d8-9b2343e60077" +"DistributionURL","GET DATA","Sub-Orbital Order Tool","459decfe-53ee-41ce-b608-d7578b04ef7b" +"DistributionURL","GET DATA","Subscribe","38219044-ad26-4a32-98c0-dca8ad3cd29a" +"DistributionURL","GET DATA","USGS EARTH EXPLORER","4485a5b6-d84c-4c98-980e-164863ca518f" +"DistributionURL","GET DATA","VERTEX","5520d1de-f7f5-4798-9ebc-698885805489" +"DistributionURL","GET DATA","VIRTUAL COLLECTION","78d28911-a87c-40a0-ada2-c14f7cfb0834" +"DistributionURL","GET DATA","","750f6c61-0f15-4185-94d8-c029dec04bc5" +"DistributionURL","GOTO WEB TOOL","HITIDE","a7225578-b398-4222-a7a0-8f5175338ddf" +"DistributionURL","GOTO WEB TOOL","LIVE ACCESS SERVER (LAS)","20ab6d52-f5a7-439c-a044-6ef2452a2838" +"DistributionURL","GOTO WEB TOOL","MAP VIEWER","c1c61697-b4bd-467c-9db4-5bd0115545a3" +"DistributionURL","GOTO WEB TOOL","SIMPLE SUBSET WIZARD (SSW)","6ffc54ea-001a-4c03-afff-5086b2da8f59" +"DistributionURL","GOTO WEB TOOL","SUBSETTER","bf37a20c-8e99-4187-b91b-3ea254f006f9" +"DistributionURL","GOTO WEB TOOL","","ffccf1c0-f25d-4747-ac4a-f09444383031" +"DistributionURL","USE SERVICE API","GRADS DATA SERVER (GDS)","5c0cd574-0255-4202-9b5b-3da8711b7ed7" +"DistributionURL","USE SERVICE API","MAP SERVICE","0c3aa5c6-f1f9-4c16-aa96-30672028d26c" +"DistributionURL","USE SERVICE API","OPENDAP DATA","eae7a041-b004-48df-8d4e-d758969e3185" +"DistributionURL","USE SERVICE API","OpenSearch","89b80cbd-027f-4eab-823f-ae00c268f5bf" +"DistributionURL","USE SERVICE API","SERVICE CHAINING","411d2781-822c-4c48-8d5b-4b51b100ce0a" +"DistributionURL","USE SERVICE API","TABULAR DATA STREAM (TDS)","7b664934-70c4-4694-b8c1-416e7c91afb9" +"DistributionURL","USE SERVICE API","THREDDS DATA","77cae7cb-4676-4c69-a88b-d78971496f97" +"DistributionURL","USE SERVICE API","WEB COVERAGE SERVICE (WCS)","029540bb-7f5c-44ba-8578-61e2f858be60" +"DistributionURL","USE SERVICE API","WEB FEATURE SERVICE (WFS)","c4d406e6-7a34-42aa-bd79-f7f9265cc7bd" +"DistributionURL","USE SERVICE API","WEB MAP SERVICE (WMS)","b0e2089c-3c1d-4c12-b833-e07365a4038e" +"DistributionURL","USE SERVICE API","WEB MAP TILE SERVICE (WMTS)","7aac9f91-20c4-4234-9153-e850c8ace8a9" +"DistributionURL","USE SERVICE API","","d117cf5c-8d23-4662-be62-7b883cecb219" +"DistributionURL","","","d25982b9-92e9-4ec0-ab44-48e79ecbe137" +"PublicationURL","VIEW RELATED INFORMATION","ALGORITHM DOCUMENTATION","fcc9411c-a1c9-415d-a16c-75c42f2cec45" +"PublicationURL","VIEW RELATED INFORMATION","ALGORITHM THEORETICAL BASIS DOCUMENT (ATBD)","fd01f7ec-fdf6-4440-b974-75f12fb4ec5f" +"PublicationURL","VIEW RELATED INFORMATION","ANOMALIES","914cbb7e-5b20-4bcd-86e3-ffcfa26f0a73" +"PublicationURL","VIEW RELATED INFORMATION","CASE STUDY","3112d474-b44f-4af1-8266-c3dd6d28220f" +"PublicationURL","VIEW RELATED INFORMATION","DATA CITATION POLICY","40cf5001-15ec-4d9a-913c-bb323f2974fc" +"PublicationURL","VIEW RELATED INFORMATION","DATA PRODUCT SPECIFICATION","415cfe86-4d71-4100-8f35-6404caec1c91" +"PublicationURL","VIEW RELATED INFORMATION","DATA QUALITY","0eba3253-8eb7-4e43-9627-9cff48775e27" +"PublicationURL","VIEW RELATED INFORMATION","DATA RECIPE","547600e9-b60a-44eb-b14b-5c6e1f2c094e" +"PublicationURL","VIEW RELATED INFORMATION","DELIVERABLES CHECKLIST","be0460d8-ca8e-45c8-b637-8fb4ce5a5e97" +"PublicationURL","VIEW RELATED INFORMATION","GENERAL DOCUMENTATION","aebf20eb-39c7-4f4f-aecf-a628f703867b" +"PublicationURL","VIEW RELATED INFORMATION","HOW-TO","7ebd73e5-b0aa-4cf2-ace5-1d3890c2c3ce" +"PublicationURL","VIEW RELATED INFORMATION","IMPORTANT NOTICE","2af2cfc4-9390-43da-8fa8-1f272e8ee0b0" +"PublicationURL","VIEW RELATED INFORMATION","INSTRUMENT/SENSOR CALIBRATION DOCUMENTATION","fc3c1abb-92c1-49c2-90d4-161c70cff44a" +"PublicationURL","VIEW RELATED INFORMATION","MICRO ARTICLE","4f3c0b04-1fe6-4e11-994a-9cc4afd09ce0" +"PublicationURL","VIEW RELATED INFORMATION","PI DOCUMENTATION","367f8b8a-e57e-4c49-b971-0b5c6a484186" +"PublicationURL","VIEW RELATED INFORMATION","PROCESSING HISTORY","7cfa5214-7f69-4355-b259-286be88f25d1" +"PublicationURL","VIEW RELATED INFORMATION","PRODUCT HISTORY","b292f51f-d2b4-4e65-84a9-e50306238989" +"PublicationURL","VIEW RELATED INFORMATION","PRODUCT QUALITY ASSESSMENT","b7ed88ce-3f04-40ea-863e-ac58bd048ff3" +"PublicationURL","VIEW RELATED INFORMATION","PRODUCT USAGE","1132a0fc-888b-4332-ad0a-dc5c6e615afa" +"PublicationURL","VIEW RELATED INFORMATION","PRODUCTION HISTORY","0b597285-eaac-4cbd-94cc-d87ae8046681" +"PublicationURL","VIEW RELATED INFORMATION","PUBLICATIONS","13a4deec-bd22-4864-9804-77fac181f484" +"PublicationURL","VIEW RELATED INFORMATION","READ-ME","aa3cea98-b20a-4de8-8f22-7a8b30784625" +"PublicationURL","VIEW RELATED INFORMATION","REQUIREMENTS AND DESIGN","86b8b121-d710-4c5b-84b0-7b40717f6c76" +"PublicationURL","VIEW RELATED INFORMATION","SCIENCE DATA PRODUCT SOFTWARE DOCUMENTATION","e8e6e972-832f-4501-a721-4108f33332d6" +"PublicationURL","VIEW RELATED INFORMATION","SCIENCE DATA PRODUCT VALIDATION","15b0a4c4-b39d-48f5-92d2-905e45e6dc6a" +"PublicationURL","VIEW RELATED INFORMATION","USER FEEDBACK PAGE","ab2fce71-e5f9-4ba6-bfb1-bc428a8b7dd8" +"PublicationURL","VIEW RELATED INFORMATION","USER'S GUIDE","d1996d91-e824-4b24-b94e-3aae4543b63b" +"PublicationURL","VIEW RELATED INFORMATION","","5ec1bb9d-0efc-4099-9b31-ec791bbd8145" +"PublicationURL","","","894edd57-afb3-4bb3-878f-fc245d8b6e82" +"VisualizationURL","Color Map","GITC","87117fb4-888c-41b9-a795-d13d436d828b" +"VisualizationURL","Color Map","Giovanni","197d7881-a01b-4892-822f-94ca72aea2f4" +"VisualizationURL","Color Map","Harmony GDAL","503206c2-c5ae-4d65-8c18-be8d06370c0c" +"VisualizationURL","Color Map","","58848eb9-9c2c-491e-847e-5a4f3d9f6889" +"VisualizationURL","GET RELATED VISUALIZATION","GIOVANNI","690210ef-4cf8-4645-b68d-921466bba6a2" +"VisualizationURL","GET RELATED VISUALIZATION","MAP","e6f9524a-e4bc-460a-bdf3-a5e8f0e921a9" +"VisualizationURL","GET RELATED VISUALIZATION","SOTO","389ab1cf-fbf4-49ee-bf22-e40643fa00f6" +"VisualizationURL","GET RELATED VISUALIZATION","WORLDVIEW","eeff646c-6faf-468e-a0ab-ff78fc6f86f9" +"VisualizationURL","GET RELATED VISUALIZATION","","dd2adc64-c7bd-4dbf-976b-f0496966817c" +"VisualizationURL","","","731f4e5c-d200-4c56-9daa-e6fad17415ef" diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 8e14e60b..968881de 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1463,6 +1463,26 @@ "Platform/Instrument/ComposedOf/Characteristics" ] } + ], + "umm-g": [ + { + "fields": [ + "Platforms/Characteristics/Value", + "Platforms/Characteristics" + ] + }, + { + "fields": [ + "Platforms/Instruments/Characteristics/Value", + "Platforms/Instruments/Characteristics" + ] + }, + { + "fields": [ + "Platforms/Instruments/ComposedOf/Characteristics/Value", + "Platforms/Instruments/ComposedOf/Characteristics" + ] + } ] }, "severity": "error", @@ -1724,6 +1744,14 @@ "DIF/Related_URL/URL_Content_Type/Type" ] } + ], + "umm-g": [ + { + "fields": [ + "RelatedUrls/MimeType", + "RelatedUrls/Type" + ] + } ] }, "data": [ @@ -2039,6 +2067,18 @@ "Platform/Instrument/ComposedOf/ShortName" ] } + ], + "umm-g": [ + { + "fields": [ + "Platforms/Instruments/ShortName" + ] + }, + { + "fields": [ + "Platforms/Instruments/ComposedOf/ShortName" + ] + } ] }, "severity": "error", @@ -2110,6 +2150,13 @@ "Platform/ShortName" ] } + ], + "umm-g": [ + { + "fields": [ + "Platforms/ShortName" + ] + } ] }, "severity": "error", @@ -2138,6 +2185,13 @@ "Distribution/Format" ] } + ], + "umm-g": [ + { + "fields": [ + "DataGranule/ArchiveAndDistributionInformation/Format" + ] + } ] }, "severity": "error", @@ -2380,6 +2434,13 @@ "Project/ShortName" ] } + ], + "umm-g": [ + { + "fields": [ + "Projects/ShortName" + ] + } ] }, "severity": "error", @@ -2710,6 +2771,13 @@ "Project/ShortName" ] } + ], + "umm-g": [ + { + "fields": [ + "Projects/ShortName" + ] + } ] }, "severity": "info", @@ -2822,6 +2890,13 @@ "Collection/OnlineResources/OnlineResource/Description" ] } + ], + "umm-g": [ + { + "fields": [ + "RelatedUrls/Description" + ] + } ] }, "severity": "info", @@ -2901,6 +2976,16 @@ "SpatialExtent/HorizontaSpatialDomain/Geometry/Gpolygons" ] } + ], + "umm-g": [ + { + "fields": [ + "SpatialExtent/HorizontaSpatialDomain/Geometry/Points", + "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles", + "SpatialExtent/HorizontaSpatialDomain/Geometry/Lines", + "SpatialExtent/HorizontaSpatialDomain/Geometry/Gpolygons" + ] + } ] }, "severity": "info", @@ -3129,6 +3214,13 @@ "RelatedUrl/Type" ] } + ], + "umm-g": [ + { + "fields": [ + "RelatedUrls/Type" + ] + } ] }, "severity": "error", @@ -3173,6 +3265,13 @@ "Platform/Characteristics" ] } + ], + "umm-g": [ + { + "fields": [ + "Platforms/Characteristics" + ] + } ] }, "severity": "warning", @@ -3631,7 +3730,7 @@ "get_data_url_check_umm": { "rule_name": "GET DATA URL check for UMM JSON", "fields_to_apply": { - "umm-json": [ + "umm-g": [ { "fields": [ "RelatedUrls" @@ -3944,4 +4043,4 @@ "severity": "warning", "check_id": "controlled_keywords_check" } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/sciencekeywords.csv b/pyQuARC/schemas/sciencekeywords.csv index 99490c7e..dac00019 100644 --- a/pyQuARC/schemas/sciencekeywords.csv +++ b/pyQuARC/schemas/sciencekeywords.csv @@ -1,4 +1,4 @@ -"Keyword Version: 10.7","Revision: 2021-08-05 15:56:41","Timestamp: 2021-08-18 14:49:49","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords/?format=xml""Case native" +"Keyword Version: 13.2","Revision: 2022-03-18 16:23:43","Timestamp: 2022-03-28 12:29:53","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords/?format=xml","Case native" Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_Variable,UUID "EARTH SCIENCE SERVICES","DATA ANALYSIS AND VISUALIZATION","CALIBRATION/VALIDATION","CALIBRATION","","","","ecf29317-bd5e-447b-b911-f8bfb153c83b" "EARTH SCIENCE SERVICES","DATA ANALYSIS AND VISUALIZATION","CALIBRATION/VALIDATION","VALIDATION","","","","b283a59c-0e9a-469c-baf4-591b64cd4671" @@ -354,6 +354,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","ATMOSPHERE","ALTITUDE","STRATOPAUSE","","","","82191e97-53ba-413d-9a08-acd8b848e0b0" "EARTH SCIENCE","ATMOSPHERE","ALTITUDE","TROPOPAUSE","","","","c3447c90-7490-4f04-89c1-c5274ba8f8f6" "EARTH SCIENCE","ATMOSPHERE","ALTITUDE","","","","","16bfcf54-f8e1-4c8e-9bd4-a1ac06ea95a0" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","ACETYLENE","","","04833f72-ac6d-40b0-b1ae-1f55eb25b5dd" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","ATMOSPHERIC CARBON DIOXIDE","CARBON DIOXIDE PROFILES","","03ddc432-906d-4469-bb00-179c828dbea4" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","ATMOSPHERIC CARBON DIOXIDE","CARBON DIOXIDE SURFACE","","194d8a3c-9cdd-45f3-8b4c-ce7830d9df46" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","ATMOSPHERIC CARBON DIOXIDE","PARTIAL PRESSURE OF CARBON DIOXIDE","","a65cfcfa-1028-4cc8-a4d5-9e78f487a612" @@ -363,6 +364,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","ATMOSPHERIC CARBON MONOXIDE","","","88a1b416-1589-45a4-9923-452975ec35c7" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","CHLORINATED HYDROCARBONS","","","cdab2cca-6767-427e-b464-09fe26ec59db" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","DICARBON MONOXIDE","","","94863274-c0fc-4386-9bac-5b6f5d1b9d06" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","ETHANE","","","93a95204-8ded-4cde-8937-38e373c41df6" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","FORMALDEHYDE","","","bc05d7d2-3c96-4bb6-b759-d45e3c673b86" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","FORMIC ACID","","","eb1bfadc-8aa6-477b-af6a-6c320aa21351" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","HYDROGEN CYANIDE","","","af157837-bdbd-4a9a-b24e-6a79adfef57f" @@ -374,12 +376,17 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","CARBON AND HYDROCARBON COMPOUNDS","","","","19ab681c-bdd7-4793-bbdb-1ec498575314" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","BROMINE MONOXIDE","","","39c478bd-620e-455c-904d-4621965e376c" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CARBON TETRACHLORIDE","","","1ecb1e7c-50fc-4951-b610-5140475d87ed" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CARBON TETRAFLUORIDE","","","cf96b289-d316-4abc-8540-b8849e2f6140" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CARBONYL FLUORIDE","","","cbfabd7a-7032-4f67-acd8-8f6f1e026eff" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CHLORINE DIOXIDE","","","a56d397b-bff5-4a14-b54c-366470e023c7" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CHLORINE MONOXIDE","","","6f96d1bd-f6ba-437a-9079-c575c4822248" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CHLORINE NITRATE","","","a9104127-6846-4123-8ab0-b65c61a0018d" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CHLOROFLUOROCARBONS","CFC-11","","94472216-6cd7-434b-beec-17067fb69b2e" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CHLOROFLUOROCARBONS","CFC-12","","97efdb7f-b2aa-4a6d-b338-30f3ad849c1f" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","CHLOROFLUOROCARBONS","","","e78ae4ce-807a-4417-ad6e-a458c6da6638" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","HALOCARBONS","","","13588158-07b6-4294-a00c-fa095b6ad4fd" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","HALONS","","","33e3c858-25ee-4a5e-a938-93779679ed06" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","HYDROCHLOROFLUOROCARBONS","HCFC-22","","f2464ebf-811a-43c2-bd50-9e80e03e07b3" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","HYDROCHLOROFLUOROCARBONS","","","f6b97280-74d0-4233-bd17-f9f3d9dd21c2" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","HYDROFLUOROCARBONS","","","ed5106fd-a73f-4203-87a3-9c9e7e85dcfc" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","HYDROGEN CHLORIDE","","","146a0a0b-1b42-41a6-b1f7-a27615b006a0" @@ -388,6 +395,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","METHANOL","","","228c14d1-e9bf-4c25-a67b-92c99bc2a8b7" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","METHYL BROMIDE","","","9b6ca807-7719-48aa-864d-ebb45a519ff8" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","METHYL CHLORIDE","","","676248f0-75cd-466d-93f1-351440027c82" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","METHYL FLUORIDE","","","50753922-d435-4c1a-a4ad-8caa9a67afcb" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HALOCARBONS AND HALOGENS","","","","d46a5046-e1c6-4a09-a2f1-db6a21eda611" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HYDROGEN COMPOUNDS","DEUTERIUM OXIDE/HEAVY WATER","","","4904a081-ffb5-430c-b659-08cd55d41818" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","HYDROGEN COMPOUNDS","HYDROGEN OXIDES","HYDROGEN OXIDE PROFILES","","4a4379fb-1dbb-40ff-8c74-f2b8edda55ec" @@ -407,8 +415,10 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","NITRIC OXIDE","","","82a60ed8-5414-4ce0-858c-c50b27b12bc8" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","NITROGEN DIOXIDE","","","f8e65155-27c1-483e-a9b8-85399897c3ae" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","NITROGEN OXIDES","","","e82ebd1c-8241-4ca0-95a9-a6e1432519cd" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","NITROGEN","","","ef36cb15-ad64-4bdc-9331-42cc5b493671" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","NITROUS OXIDE","","","cf08917f-4cef-456f-99b0-57dc468da877" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","PEROXYACETYL NITRATE","","","e66fdcc7-3a94-48a0-aa21-5964f9ddaf23" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","PEROXYNITRIC ACID","","","c2b7b126-8737-4933-ba27-fe64226a0363" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","Peroxyacyl Nitrate","","","d44d3115-91d1-4655-9e6e-babfe39e1632" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NITROGEN COMPOUNDS","","","","9e5ec924-2fd3-4cbb-a7eb-ffde114d0cb9" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","NOBLE GAS","ATMOSPHERIC RADON","RADON PROFILES","","0857df34-93ca-4c8e-a909-3621ea1dcbe7" @@ -419,6 +429,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","OXYGEN COMPOUNDS","ATMOSPHERIC OZONE","OZONE SURFACE","","e00bfcb8-8968-400d-af2e-86a288f3443f" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","OXYGEN COMPOUNDS","ATMOSPHERIC OZONE","TOTAL OZONE","","b9107ec3-c777-4e71-9046-55bd7ed57ef0" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","OXYGEN COMPOUNDS","ATMOSPHERIC OZONE","","","dd316647-9043-40c3-9329-f22f9215fefa" +"EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","OXYGEN COMPOUNDS","HYDROGEN PEROXIDE","","","75662ed3-35c5-41ee-abba-51ce435d1b31" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","OXYGEN COMPOUNDS","MOLECULAR OXYGEN","","","61f4f3d0-7895-4cce-94e3-d249001d5ee8" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","OXYGEN COMPOUNDS","","","","4cc9b4fa-5097-447f-914c-eb90820938c6" "EARTH SCIENCE","ATMOSPHERE","ATMOSPHERIC CHEMISTRY","PHOTOCHEMISTRY","PHOTOLYSIS RATES","","","0fd2b083-e65c-443b-9794-2c355ebac06b" @@ -1054,8 +1065,12 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","MAMMALS","EVEN-TOED UNGULATES","","","7b0bc104-eed1-4bc1-b12b-3cf9add700da" "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","MAMMALS","RODENTS","","","fae29067-5d65-455a-a515-b1ac52881285" "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","MAMMALS","","","","f5161094-3593-4bc1-85ea-c8c2ecab1d9a" +"EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","MARINE MAMMALS","DOLPHINS","","","557e8ffd-807d-41b7-9cd3-ccc3f2690cf5" +"EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","MARINE MAMMALS","PINNIPED","","","a659fc9d-9d6a-4e47-b052-9270baa48dd4" +"EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","MARINE MAMMALS","","","","4cf1a3bd-20ce-42d7-95ac-9a4ece7be12c" "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","REPTILES","ALLIGATORS/CROCODILES","","","3f1803fa-3ada-4762-96e4-28966dfdcc83" "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","REPTILES","LIZARDS/SNAKES","","","7dce336b-8596-45f0-bc76-f82b26e1405f" +"EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","REPTILES","TURTLES","SEA TURTLES","","c9cb7c91-1b1d-42d8-b5f8-596e657138f9" "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","REPTILES","TURTLES","","","2037d286-6285-49df-aeb4-6e429b18d595" "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","REPTILES","","","","5d3725b6-743b-4dda-bb54-b64f201ec4d1" "EARTH SCIENCE","BIOLOGICAL CLASSIFICATION","ANIMALS/VERTEBRATES","","","","","14802b53-b702-438f-8c8a-f51506807ce6" @@ -1448,6 +1463,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","CLIMATE INDICATORS","CRYOSPHERIC INDICATORS","CLIMATE WARMING","","","","49d638f4-bdfa-4a6e-b154-cce1717d307f" "EARTH SCIENCE","CLIMATE INDICATORS","CRYOSPHERIC INDICATORS","DEPTH HOAR","","","","82f49e65-c032-4f74-b5c2-a3f8058b7a71" "EARTH SCIENCE","CLIMATE INDICATORS","CRYOSPHERIC INDICATORS","FIRN LIMIT","","","","9fec9f47-c45d-4f15-8be5-d71424f33647" +"EARTH SCIENCE","CLIMATE INDICATORS","CRYOSPHERIC INDICATORS","GLACIAL MEASUREMENTS","GLACIER ELEVATION/ICE SHEET ELEVATION","Hypsometry","","6a2b291c-f78b-48c3-869f-9a4c8a40bc6c" "EARTH SCIENCE","CLIMATE INDICATORS","CRYOSPHERIC INDICATORS","GLACIAL MEASUREMENTS","GLACIER ELEVATION/ICE SHEET ELEVATION","","","83bd640d-cd05-49a8-9ec7-aab60820b126" "EARTH SCIENCE","CLIMATE INDICATORS","CRYOSPHERIC INDICATORS","GLACIAL MEASUREMENTS","GLACIER FACIES","","","613c1fba-8710-47fb-a8e1-e4cd50bb97e1" "EARTH SCIENCE","CLIMATE INDICATORS","CRYOSPHERIC INDICATORS","GLACIAL MEASUREMENTS","GLACIER MASS BALANCE/ICE SHEET MASS BALANCE","","","6095d796-68e0-4c7d-aa4f-f2e5bd8c4916" @@ -1703,6 +1719,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","CRYOSPHERE","SNOW/ICE","REFLECTANCE","BIDIRECTIONAL REFLECTANCE FACTOR","","","eddd1f51-a6ae-4c35-bac5-e68131fcb386" "EARTH SCIENCE","CRYOSPHERE","SNOW/ICE","REFLECTANCE","","","","00a21e9c-0c1d-4931-b9fa-b0204625a98a" "EARTH SCIENCE","CRYOSPHERE","SNOW/ICE","RIVER ICE","","","","52e6600b-7a51-4267-8b62-e79034db3a48" +"EARTH SCIENCE","CRYOSPHERE","SNOW/ICE","SNOW CLASSIFICATION","","","","97fd3b62-917d-4946-8c8a-29d2a15bf6dd" "EARTH SCIENCE","CRYOSPHERE","SNOW/ICE","SNOW COVER","","","","c8ff0035-4776-4eb9-8cc9-a63d380102c8" "EARTH SCIENCE","CRYOSPHERE","SNOW/ICE","SNOW DENSITY","","","","ba2e2eff-77e0-4071-8884-b2af06e5fc7b" "EARTH SCIENCE","CRYOSPHERE","SNOW/ICE","SNOW DEPTH","","","","47bc8942-6fdd-4173-bf38-209e933d843f" @@ -2188,8 +2205,8 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","LAND SURFACE","SOILS","SOIL IMPEDANCE","","","","bcc72093-b2d4-47e8-9213-7f48172e0e95" "EARTH SCIENCE","LAND SURFACE","SOILS","SOIL INFILTRATION","","","","2283a2fe-19ec-4b1d-a553-20ec9713a658" "EARTH SCIENCE","LAND SURFACE","SOILS","SOIL MECHANICS","","","","e9d5ae5a-0718-44f2-9694-b791b646a825" -"EARTH SCIENCE","LAND SURFACE","SOILS","SOIL MOISTURE/WATER CONTENT","ROOT ZONE SOIL MOISTURE","","","09e712bf-7389-4980-8115-af4282469eb8" "EARTH SCIENCE","LAND SURFACE","SOILS","SOIL MOISTURE/WATER CONTENT","ROOT ZONE SOIL MOISTURE","","","4353d710-3d65-44b3-b988-26af1415646a" +"EARTH SCIENCE","LAND SURFACE","SOILS","SOIL MOISTURE/WATER CONTENT","SURFACE SOIL MOISTURE","","","09e712bf-7389-4980-8115-af4282469eb8" "EARTH SCIENCE","LAND SURFACE","SOILS","SOIL MOISTURE/WATER CONTENT","","","","bbe2ea34-8842-4a9f-9b0b-95dd3c71857f" "EARTH SCIENCE","LAND SURFACE","SOILS","SOIL PH","","","","357193c5-154d-487b-a1c3-a1a90d15918c" "EARTH SCIENCE","LAND SURFACE","SOILS","SOIL PLASTICITY","","","","2da4e52a-b43b-4ff0-9e4d-c98438a38c6d" @@ -2244,8 +2261,11 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","BATHYMETRY/SEAFLOOR TOPOGRAPHY","","","","","c16bda61-353b-4668-af2f-bbb98785b6fa" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","BARRIER ISLANDS","","","","7e28f2e0-a641-4085-be07-366ed6e701f4" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","BEACHES","","","","4ba798ce-ad0b-4809-94fa-ec1b8e294252" +"EARTH SCIENCE","OCEANS","COASTAL PROCESSES","BOTTOM COVER TYPE","","","","22450240-b06c-4954-a8d6-c6b756dab92d" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","COASTAL ELEVATION","","","","1fbf5df2-ab7c-43fc-9bb2-8eb3f8891f7b" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","CORAL REEFS","CORAL BLEACHING","","","f5df87b6-ed50-4da0-9ba5-7ce4c907bdb3" +"EARTH SCIENCE","OCEANS","COASTAL PROCESSES","CORAL REEFS","CORAL REEF ASSESSMENT","","","3edb3342-dab8-41d6-9f6a-28dd448528ec" +"EARTH SCIENCE","OCEANS","COASTAL PROCESSES","CORAL REEFS","CORAL REEF EXTENT","","","7e24064a-7035-402a-ab9d-fa5e5c359720" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","CORAL REEFS","","","","ad497e7a-48fa-45e1-90a5-b052508bdb30" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","DELTAS","","","","f9f0f92b-7901-4dda-8d64-be4e845ce29b" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","DUNES","","","","6f7b2753-aed1-4783-a7cc-781d00d13a0f" @@ -2267,11 +2287,18 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","SEDIMENTATION","","","","9457740a-897b-4adc-96fb-f3e3aafa34ea" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","SHOALS","","","","4c2d2255-680d-47d6-adb2-179093593f8a" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","SHORELINE DISPLACEMENT","","","","1a740c3e-7032-4f72-93e8-d0ba343d82e0" +"EARTH SCIENCE","OCEANS","COASTAL PROCESSES","SHORELINES","SHORELINE MAPPING","","","3472f70b-874f-4dc5-87db-4b3ebc4b9aaa" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","SHORELINES","","","","1d3b4eb7-9931-44bf-8457-26847051b7a8" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","STORM SURGE","","","","9edd23d0-68a9-4bae-8887-705058f48ba7" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","TIDAL HEIGHT","","","","9ab67e8f-066e-47b8-838d-8cd5e7460119" "EARTH SCIENCE","OCEANS","COASTAL PROCESSES","","","","","b6fd22ab-dca7-4dfa-8812-913453b5695b" +"EARTH SCIENCE","OCEANS","HYDROGRAPHY","","","","","916b2963-6c1d-48ee-8f97-8606febf8db7" +"EARTH SCIENCE","OCEANS","MARINE ENVIRONMENT MONITORING","ENFORCEMENT","","","","43763945-ceea-4716-8e77-068393300a7e" "EARTH SCIENCE","OCEANS","MARINE ENVIRONMENT MONITORING","MARINE OBSTRUCTIONS","","","","56e4dd42-e393-4aa2-b4d9-9e96d85c9768" +"EARTH SCIENCE","OCEANS","MARINE ENVIRONMENT MONITORING","MARINE SUBMERGED DEBRIS","","","","8e5371ad-4e70-48cf-9109-bfe995b7230c" +"EARTH SCIENCE","OCEANS","MARINE ENVIRONMENT MONITORING","MARINE SURFACE ELEMENTS","MARINE SURFACE DEBRIS","","","d594fc9c-556b-4eb5-9ec3-0d2126ca9cd5" +"EARTH SCIENCE","OCEANS","MARINE ENVIRONMENT MONITORING","MARINE SURFACE ELEMENTS","MARINE VESSELS","","","f81de12c-5f0c-4027-8ff1-de84d1bacb60" +"EARTH SCIENCE","OCEANS","MARINE ENVIRONMENT MONITORING","MARINE SURFACE ELEMENTS","","","","e6c6507d-59dd-49f4-9afa-bb7393a718c6" "EARTH SCIENCE","OCEANS","MARINE ENVIRONMENT MONITORING","","","","","ca154e02-a226-4cc7-8e4a-4474e7eb1eeb" "EARTH SCIENCE","OCEANS","MARINE GEOPHYSICS","MAGNETIC ANOMALIES","","","","e31f905d-bd2a-4fe9-89d8-909e1d2b9b1a" "EARTH SCIENCE","OCEANS","MARINE GEOPHYSICS","MARINE GRAVITY FIELD","","","","ad09b215-e837-4d9f-acbc-2b45e5b81825" @@ -2307,12 +2334,16 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","ACOUSTIC SCATTERING","","","","b4a924bb-0d42-4169-bad7-3856f69f0c4a" "EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","ACOUSTIC TOMOGRAPHY","","","","1295cf9a-c345-40eb-9b79-82bddc6acf50" "EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","ACOUSTIC VELOCITY","","","","e4aae1a4-b4d5-4b13-9cc0-c0df6234ce3b" +"EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","AMBIENT NOISE","BIOLOGICAL AMBIENT NOISE","","","96f15c48-4ea1-4c68-92f0-d59218856bb5" +"EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","AMBIENT NOISE","PHYSICAL AMBIENT NOISE","","","b016722f-5441-41c1-97c4-6612c87c4311" +"EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","AMBIENT NOISE","TOTAL AMBIENT NOISE","","","f1f90445-4272-4390-92b1-2efc626a9ed1" "EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","AMBIENT NOISE","","","","a74abbc1-dd75-4f22-bbec-7d45091a4593" "EARTH SCIENCE","OCEANS","OCEAN ACOUSTICS","","","","","0517ae1f-7617-4f3b-80cb-649178032825" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","ALKALINITY","","","","4eab7956-e59e-4615-8d5c-39a16faa1f27" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","AMMONIA","","","","64d17528-29b4-4e2e-843a-7f7035bb5717" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","BIOGEOCHEMICAL CYCLES","","","","f1e6caa5-2c97-407d-a0db-7bf01794d8e3" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","BIOMEDICAL CHEMICALS","","","","97636cf7-189f-4953-9807-64fbcc60f72c" +"EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","CARBON DIOXIDE","CARBON DIOXIDE PARTIAL PRESSURE","","","6bf8c40d-6bc0-410b-92a5-349bd88dc021" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","CARBON DIOXIDE","","","","26afa886-4866-4536-be3a-6f9db9aacd97" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","CARBONATE","","","","68f7ba1b-a2f9-41b6-9bc1-fd187942fbed" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","CARBON","","","","5c52009f-2c44-4db1-b62b-135c6181bad2" @@ -2330,9 +2361,12 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","NITROGEN DIOXIDE","","","","54054bc3-5faa-4b0d-b5dd-cf04595369b5" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","NITROGEN","","","","db5357c9-cc9d-4693-86fe-6bb88555d434" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","NITROUS OXIDE","","","","d1c2bba5-799d-412b-80e0-fa04058416e3" +"EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","NUTRIENTS","NUTRIENT PROFILES","","","0f6a760e-999c-4275-9748-d682ad73fd58" +"EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","NUTRIENTS","SURFACE NUTRIENTS","","","4d06267b-8f85-4b7b-9b2f-97a09f804d70" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","NUTRIENTS","","","","8dd7c9f0-51d0-4037-b1d0-a2517c1770ad" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","OCEAN TRACERS","","","","080db90f-79ff-4900-941d-9c02fe2df862" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","ORGANIC CARBON","","","","d3055f47-258e-4556-a885-54cd1fff4680" +"EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","ORGANIC MATTER","COLORED DISSOLVED ORGANIC MATTER","","","18e0fad3-b6f4-4120-9221-f82fb2ffd384" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","ORGANIC MATTER","","","","b2bdeb71-81b5-43e6-a8b1-b09c215c8d1a" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","OXYGEN","","","","90aa8838-79bd-4b28-b518-8217e863c385" "EARTH SCIENCE","OCEANS","OCEAN CHEMISTRY","PHOSPHATE","","","","0b513d8c-bfd3-44ee-976e-42757b8375a2" @@ -2350,16 +2384,26 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","BUOY POSITION","","","","81f51367-8467-4183-baea-6b526780fcc7" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","CONVECTION","","","","10a9c153-f37d-48fe-920d-c790d946ab07" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","DIFFUSION","","","","6fe4680b-96e8-4304-ab32-c17a0769932c" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","EDDIES","MESOSCALE EDDIES","","","fc95c990-47cb-4087-a08f-235dd1eb1260" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","EDDIES","SUBMESOCALE EDDIES","","","160c0b4d-6c03-4576-a4ea-f743a3a69d13" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","EDDIES","","","","13927300-c59c-491a-91f3-f1540bcb2d8d" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","FRESH WATER FLUX","","","","bdd42024-d1a4-4fb2-a16a-06ac0cc1dedc" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","FRONTS","","","","22b339b5-1af5-46e3-8191-d93729001eeb" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","GYRES","","","","fc0a6bb2-27f0-48e8-89f1-ebfc7ccd4823" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN CURRENTS","CURRENT PROFILES","","","811512a3-5138-43c5-99e5-d1373e2710a8" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN CURRENTS","SPEED PROFILES","","","7744f889-b25e-4d0e-bcf6-d94cbf63df22" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN CURRENTS","SUBSURFACE CURRENTS","","","abb21298-124f-4f12-92e8-affbb5c8fba8" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN CURRENTS","SURFACE CURRENTS","","","b3647731-a71a-4af4-bfa2-e53b61efafeb" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN CURRENTS","SURFACE SPEED","","","64bcd669-cbb0-41ff-a4bf-9ce1050d12c7" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN CURRENTS","","","","510c5f78-e19e-4ce4-b59a-8937aeb84631" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN MASS","","","","d96bcb09-f240-41cc-84d0-6af9fb3509de" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","OCEAN MIXED LAYER","","","","48ec6449-373c-41f6-8a61-8f1e9ed95737" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","SUBDUCTION","","","","c6f748f7-3a2a-4c76-90bd-8e8d7a691b21" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","THERMOHALINE CIRCULATION","","","","aa1bc71c-daeb-401e-9e29-ebde975482cf" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","TURBULENCE","","","","b9f343a1-0b8d-4e88-91bc-21f5d551963f" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","UPWELLING/DOWNWELLING","","","","75ab3537-34b1-4025-b758-7296626079ba" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","VORTICITY","POTENTIAL VORTICITY","","","aad49974-99ab-4623-a716-ea73e2f46ad1" +"EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","VORTICITY","RELATIVE VORTICITY","","","ace6a51d-36af-4330-893f-d1fecc8ac904" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","VORTICITY","","","","55715ed3-471e-46a8-97b6-b463708a2cbe" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","WATER MASSES","","","","113edd07-7b1a-4082-b054-b58d3f23b93a" "EARTH SCIENCE","OCEANS","OCEAN CIRCULATION","WIND-DRIVEN CIRCULATION","","","","03fbea0a-74b9-4c78-8752-a588cff27f17" @@ -2386,6 +2430,8 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN OPTICS","APHOTIC/PHOTIC ZONE","","","","4e8943e7-daf9-41f2-8a5e-b415b82e6381" "EARTH SCIENCE","OCEANS","OCEAN OPTICS","ATTENUATION/TRANSMISSION","","","","71c78d69-9cfe-48e9-8dd2-9c75acf22283" "EARTH SCIENCE","OCEANS","OCEAN OPTICS","BIOLUMINESCENCE","","","","90f97e5b-f883-4a34-a3bc-7dea8d96eb7d" +"EARTH SCIENCE","OCEANS","OCEAN OPTICS","CHLOROPHYLL","CHLOROPHYLL CONCENTRATION","","","0f816677-9e94-4e3b-b409-513335769af8" +"EARTH SCIENCE","OCEANS","OCEAN OPTICS","CHLOROPHYLL","","","","15cc550b-068c-49f4-b082-bc2a43675606" "EARTH SCIENCE","OCEANS","OCEAN OPTICS","EXTINCTION COEFFICIENTS","","","","5f2ec7b9-3e8c-4d12-bba6-0f84c08729e0" "EARTH SCIENCE","OCEANS","OCEAN OPTICS","FLUORESCENCE","","","","a60ae1b6-abfc-4905-8c09-772da7bb1a10" "EARTH SCIENCE","OCEANS","OCEAN OPTICS","GELBSTOFF","","","","87b074b4-9b73-4e69-b8c0-0f112b1cfa6d" @@ -2404,15 +2450,9 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN PRESSURE","SEA LEVEL PRESSURE","","","","e5bca08d-ecb3-4b85-8acd-fed782875aa2" "EARTH SCIENCE","OCEANS","OCEAN PRESSURE","WATER PRESSURE","","","","dd025312-0d27-44e0-ae05-7cfcc1aa17f0" "EARTH SCIENCE","OCEANS","OCEAN PRESSURE","","","","","bfa56100-6fb5-4e49-9633-298fa3b45508" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","ADVECTION","","","","470e3f31-86af-4a9b-9279-ce1ba125d1dd" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","DIFFUSION","","","","73432d3c-341a-48e7-a765-30395ce588be" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","EVAPORATION","","","","1cc632bd-8ed6-46ae-8948-15d7b3e1524a" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","ICE GROWTH/MELT","","","","ac5ba325-b613-4f2e-ae7d-f81e478f5091" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","PRECIPITATION","","","","bfa93e9c-392f-4f59-8cc8-0866e24531f5" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","RUNOFF","","","","132ef849-3da3-4252-8f70-8dd36e790844" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","SNOW MELT","","","","e22f7a00-3f3e-48ce-82c5-f69203239570" -"EARTH SCIENCE","OCEANS","OCEAN SALINITY BUDGET","","","","","8c0570f6-c5d1-4675-99be-68d9d3b9d90c" +"EARTH SCIENCE","OCEANS","OCEAN TEMPERATURE","OCEAN BARRIER LAYER","","","","a76f878d-c6fb-49bf-9165-3cac5fb61d80" "EARTH SCIENCE","OCEANS","OCEAN TEMPERATURE","OCEAN MIXED LAYER","","","","64074461-95d0-4538-869a-0114e39216aa" +"EARTH SCIENCE","OCEANS","OCEAN TEMPERATURE","OCEAN TEMPERATURE PROFILES","","","","f952e80e-77de-4dc8-aa6b-0f3be186aba5" "EARTH SCIENCE","OCEANS","OCEAN TEMPERATURE","POTENTIAL TEMPERATURE","","","","e02b0b50-a0f2-4c47-841b-9689fdb99121" "EARTH SCIENCE","OCEANS","OCEAN TEMPERATURE","SEA SURFACE TEMPERATURE","SEA SURFACE SUBSKIN TEMPERATURE","","","68a09c56-be36-4100-8757-3a6eec7dc251" "EARTH SCIENCE","OCEANS","OCEAN TEMPERATURE","SEA SURFACE TEMPERATURE","SEA SURFACE FOUNDATION TEMPERATURE","","","e4d58a7f-7eaa-4f75-996a-18238c698063" @@ -2437,9 +2477,13 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN WAVES","SIGNIFICANT WAVE HEIGHT","","","","1ac6850e-9266-4e90-ba83-b6a6cc4ae365" "EARTH SCIENCE","OCEANS","OCEAN WAVES","STORM SURGE","","","","0bf50cd4-8a97-468c-8e73-047e3e09a03d" "EARTH SCIENCE","OCEANS","OCEAN WAVES","SURF BEAT","","","","a90526a9-5476-45bc-9a15-73ac2dfc62ab" +"EARTH SCIENCE","OCEANS","OCEAN WAVES","SWELLS","SWELL DIRECTION","","","b23597aa-ccb2-40be-920d-5663769cd502" +"EARTH SCIENCE","OCEANS","OCEAN WAVES","SWELLS","SWELL HEIGHT","","","5e9ad407-bd70-43ae-a901-6b07f100db27" +"EARTH SCIENCE","OCEANS","OCEAN WAVES","SWELLS","SWELL PERIOD","","","7a8920f3-e531-47e0-bb23-a9f816cfb7bf" "EARTH SCIENCE","OCEANS","OCEAN WAVES","SWELLS","","","","4e4d3c18-cdd4-474a-a936-6e127ec526f7" "EARTH SCIENCE","OCEANS","OCEAN WAVES","TOPOGRAPHIC WAVES","","","","3dd99ea6-51bd-4b78-bf2e-d5aeca7f5bc8" "EARTH SCIENCE","OCEANS","OCEAN WAVES","TSUNAMIS","","","","7a79a3f3-1817-4c9f-8485-550a022b5a8d" +"EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE DIRECTION","","","","037ce518-b71f-4599-b37f-feab9cc9809d" "EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE FETCH","","","","09b326df-79b3-41b8-8998-e06344b0fe0d" "EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE FREQUENCY","","","","0d91f6d9-44c4-4418-90b0-00feb09c6fc0" "EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE HEIGHT","","","","0fc68280-1361-43e1-bc5a-40c49e9679b7" @@ -2450,10 +2494,13 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE SETUP","","","","4dd520ea-30fc-416d-b98c-340fd23431d3" "EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE SPECTRA","","","","e79ff727-c598-4a1c-8b4f-b6019fcf386b" "EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE SPEED/DIRECTION","","","","e52114b2-adbc-4e3e-9c87-1a7f245fe5ef" +"EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE SPEED","","","","d02bae1c-b05e-4c56-b964-7f49610efc3b" "EARTH SCIENCE","OCEANS","OCEAN WAVES","WAVE TYPES","","","","a4f0e0d2-4bcb-4675-b874-e6e0f3a8c462" "EARTH SCIENCE","OCEANS","OCEAN WAVES","WIND WAVES","","","","0c9adb35-b203-42d7-8ccf-b7f2079db7ce" "EARTH SCIENCE","OCEANS","OCEAN WAVES","","","","","a04804d5-1064-48fd-a7a7-8da8e10399e1" "EARTH SCIENCE","OCEANS","OCEAN WINDS","CONVERGENCE/DIVERGENCE","","","","b59e188c-49b8-41b3-94c4-0bc1dbb554fe" +"EARTH SCIENCE","OCEANS","OCEAN WINDS","SURFACE WINDS","WIND DIRECTION","","","d78e5503-d78e-466d-97bb-e68d6e768a9d" +"EARTH SCIENCE","OCEANS","OCEAN WINDS","SURFACE WINDS","WIND SPEED","","","a7ce84a3-8329-4eb7-b5de-72d2dea8c6bf" "EARTH SCIENCE","OCEANS","OCEAN WINDS","SURFACE WINDS","","","","fbc53539-ce4e-4e3e-bbd2-8270386616b4" "EARTH SCIENCE","OCEANS","OCEAN WINDS","TURBULENCE","","","","13aeaea0-ab45-4148-abcf-c6becf7a8934" "EARTH SCIENCE","OCEANS","OCEAN WINDS","VERTICAL WIND MOTION","","","","ab1e152c-eab9-400a-a90f-15cb64ed2a75" @@ -2462,10 +2509,25 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","OCEAN WINDS","WIND SHEAR","","","","855c22f5-d1e0-4ccf-81bd-c8120e7c4055" "EARTH SCIENCE","OCEANS","OCEAN WINDS","WIND STRESS","","","","91d73256-925d-4d04-9b55-aaf088080cac" "EARTH SCIENCE","OCEANS","OCEAN WINDS","","","","","346cade5-801a-4afc-9652-48d02905bc4f" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","CONDUCTIVITY","CONDUCTIVITY PROFILES","","","9709d1cb-e165-4aa5-be87-daa2989aac31" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","CONDUCTIVITY","SURFACE CONDUCTIVITY","","","a819235a-68b0-46f2-9d96-49b73fd31092" "EARTH SCIENCE","OCEANS","SALINITY/DENSITY","CONDUCTIVITY","","","","7041e51c-e2de-405a-b154-6016f624f54f" "EARTH SCIENCE","OCEANS","SALINITY/DENSITY","DENSITY","","","","007ab607-2ee1-484d-85fb-0bfb89f18c9b" "EARTH SCIENCE","OCEANS","SALINITY/DENSITY","DESALINIZATION","","","","41926d67-161a-4add-bb12-66038c919efb" "EARTH SCIENCE","OCEANS","SALINITY/DENSITY","HALOCLINE","","","","04305c55-14f0-42a3-a099-79eb326946d7" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","ABSOLUTE SALINITY","","","f1964fd8-9ab6-4f36-b761-131ff79a12bc" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","ADVECTION","","470e3f31-86af-4a9b-9279-ce1ba125d1dd" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","DIFFUSION","","73432d3c-341a-48e7-a765-30395ce588be" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","EVAPORATION","","1cc632bd-8ed6-46ae-8948-15d7b3e1524a" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","ICE GROWTH/MELT","","ac5ba325-b613-4f2e-ae7d-f81e478f5091" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","PRECIPITATION","","bfa93e9c-392f-4f59-8cc8-0866e24531f5" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","RUNOFF","","132ef849-3da3-4252-8f70-8dd36e790844" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","SNOW MELT","","e22f7a00-3f3e-48ce-82c5-f69203239570" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY BUDGET","","","8c0570f6-c5d1-4675-99be-68d9d3b9d90c" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SALINITY PROFILES","","","972d17d7-7dea-4df2-bec5-24e8ca873dbd" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","OCEAN SURFACE SALINITY","","","1544c1fe-58dd-4b19-bf9e-457b4f21ef29" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","PRACTICAL SALINITY","","","9c778b59-6ed9-442e-897e-c48ce5baa3b0" +"EARTH SCIENCE","OCEANS","SALINITY/DENSITY","OCEAN SALINITY","","","","1a4e5774-7d4a-4ce7-9a4c-e2c72c8c377f" "EARTH SCIENCE","OCEANS","SALINITY/DENSITY","POTENTIAL DENSITY","","","","fe4a246b-4614-422b-8ca5-0481ee417318" "EARTH SCIENCE","OCEANS","SALINITY/DENSITY","PYCNOCLINE","","","","2ad73f85-8bad-4e5a-a902-e83eee910b5e" "EARTH SCIENCE","OCEANS","SALINITY/DENSITY","SALINITY","","","","7e95b5fc-1d58-431a-af36-948b29fa870d" @@ -2491,13 +2553,23 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE AGE","","","","b6085d71-a7ee-4b65-9c9c-ff374bdc3974" "EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE CONCENTRATION","","","","bb27bbb7-7bc4-4e38-833a-30e0a7861ccc" "EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE ELEVATION","","","","6e2f1371-05b1-41db-a6d9-bccd7cc2b3da" +"EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE MOTION","SEA ICE DIRECTION","","","ab411758-5abe-4a89-9319-97eba1510cda" +"EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE MOTION","SEA ICE SPEED","","","ad4646f8-bf09-4751-9072-e6cec59af253" "EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE MOTION","","","","a47ab696-7ed9-4374-8965-c8996e61463d" +"EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE ORIGIN","","","","48d9b511-8e99-4b6d-a0e8-e87b71bd172e" +"EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE TOPOGRAPHY","","","","15547b03-1b99-4c60-92eb-216a2908f504" "EARTH SCIENCE","OCEANS","SEA ICE","SEA ICE/OCEAN CLASSIFICATION","","","","dc2d2e73-4028-41d2-96f9-0b800fa95ea4" "EARTH SCIENCE","OCEANS","SEA ICE","SNOW DEPTH","","","","5575125b-7f15-4d46-ba47-f86de96a1a25" "EARTH SCIENCE","OCEANS","SEA ICE","SNOW MELT","","","","32259124-81f7-4845-b2fb-6435d7bb5804" "EARTH SCIENCE","OCEANS","SEA ICE","","","","","d73e969a-4b66-4713-8d63-fa3cbb1e25e3" +"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","DYNAMIC TOPOGRAPHY","ABSOLUTE DYNAMIC TOPOGRAPHY","","","7e1fc68e-5a7e-4a59-8ae6-3fa15bdae12d" +"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","DYNAMIC TOPOGRAPHY","MEAN DYNAMIC TOPOGRAPHY","","","cf89619d-c67d-43f0-a217-c8684ce7c984" +"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","DYNAMIC TOPOGRAPHY","","","","940550d2-1d9f-4c28-b9ba-857c2dc8ef95" +"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","MEAN SEA SURFACE","","","","70082342-c777-49e9-88e5-a4a77728d3cc" +"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","SEA LEVEL","MEAN SEA LEVEL","","","f3ea8884-87a8-4a12-96d5-98e21a9fa2c7" +"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","SEA LEVEL","SEA LEVEL ANOMALY","","","0fde8353-9773-4948-b206-9c273c2100c8" "EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","SEA LEVEL","","","","9ac7a1c5-4179-47bc-8589-ebaa90d6cbd1" -"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","SEA SURFACE HEIGHT","SEA SURFACE HEIGHT ANOMALY _SSHA_","","","3798a6c9-9b39-4e22-bee4-be80d39049fe" +"EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","SEA SURFACE HEIGHT","SEA SURFACE HEIGHT ANOMALY (SSHA)","","","3798a6c9-9b39-4e22-bee4-be80d39049fe" "EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","SEA SURFACE HEIGHT","","","","5c0b448c-7eb4-4e8c-8403-260cbb6114bb" "EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","SEA SURFACE SLOPE","","","","52a32bd3-d701-49e1-a827-67b3d96d8e56" "EARTH SCIENCE","OCEANS","SEA SURFACE TOPOGRAPHY","","","","","68f93a0c-1525-4f5a-9545-5d94191a3dbf" @@ -2507,7 +2579,12 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","TIDES","TIDAL HEIGHT","","","","9afcf69c-f56f-45a9-afd9-6f929850326b" "EARTH SCIENCE","OCEANS","TIDES","TIDAL RANGE","","","","a5a6266a-9457-4acf-b140-fcdc8bc00a00" "EARTH SCIENCE","OCEANS","TIDES","","","","","e3bef663-6116-4f15-995c-38c7cdc9652c" +"EARTH SCIENCE","OCEANS","WATER QUALITY","HARMFUL ALGAL BLOOM (HABs)","CELL CONCENTRATION","","","bce85eb7-e9fc-48ed-9595-9d45c4482728" +"EARTH SCIENCE","OCEANS","WATER QUALITY","HARMFUL ALGAL BLOOM (HABs)","TOXIN CONCENTRATION","","","631935dd-0a9f-4627-bbb1-c224ac0a7766" +"EARTH SCIENCE","OCEANS","WATER QUALITY","HARMFUL ALGAL BLOOM (HABs)","","","","ba506291-2799-4877-a886-8e906704a060" "EARTH SCIENCE","OCEANS","WATER QUALITY","OCEAN CONTAMINANTS","","","","f1ee3e81-09b9-48d4-81d9-5faeb90430cc" +"EARTH SCIENCE","OCEANS","WATER QUALITY","SEA SURFACE CONTAMINANTS","MICROPLASTIC CONCENTRATION","","","4e0ac490-817b-4735-93a3-ab6775486023" +"EARTH SCIENCE","OCEANS","WATER QUALITY","SEA SURFACE CONTAMINANTS","","","","ff13560a-161c-4ac9-b79c-4910936cf465" "EARTH SCIENCE","OCEANS","WATER QUALITY","","","","","1ee8a323-f0ba-4a21-b597-50890c527c8e" "EARTH SCIENCE","OCEANS","","","","","","91697b7d-8f2b-4954-850e-61d5f61c867d" "EARTH SCIENCE","PALEOCLIMATE","ICE CORE RECORDS","CALCIUM","","","","7b9fb947-97cd-4354-a799-f14a81564132" diff --git a/pyQuARC/schemas/temporalresolutionrange.csv b/pyQuARC/schemas/temporalresolutionrange.csv index 1451eaa4..2388f483 100644 --- a/pyQuARC/schemas/temporalresolutionrange.csv +++ b/pyQuARC/schemas/temporalresolutionrange.csv @@ -1,4 +1,4 @@ -"Hits: 20","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:32","Timestamp: 2021-09-27 10:03:56","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/temporalresolutionrange/?format=xml""Case native" +"Hits: 20","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:51","Timestamp: 2022-03-28 09:00:07","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/temporalresolutionrange/?format=xml","Case native" Temporal_Resolution_Range,UUID "1 minute - < 1 hour","bca20202-2b06-4657-a425-5b0e416bce0c" "1 second - < 1 minute","48ff676f-836c-4cff-bc88-4c4cc06b2e1b" diff --git a/pyQuARC/schemas/version.txt b/pyQuARC/schemas/version.txt index b3f89dc2..1e691fda 100644 --- a/pyQuARC/schemas/version.txt +++ b/pyQuARC/schemas/version.txt @@ -1 +1 @@ -2021-05-12 +2022-03-28 \ No newline at end of file diff --git a/pyQuARC/schemas/verticalresolutionrange.csv b/pyQuARC/schemas/verticalresolutionrange.csv index 4f7c8f2f..907ed099 100644 --- a/pyQuARC/schemas/verticalresolutionrange.csv +++ b/pyQuARC/schemas/verticalresolutionrange.csv @@ -1,4 +1,4 @@ -"Hits: 8","page_num: 1","page_size: 2000","Keyword Version: 11.1","Revision: 2021-09-08 10:39:31","Timestamp: 2021-09-27 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/verticalresolutionrange/?format=xml""Case native" +"Hits: 8","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:51","Timestamp: 2022-03-28 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/verticalresolutionrange/?format=xml","Case native" Vertical_Resolution_Range,UUID "1 meter - < 10 meters","201337ea-fa14-4e58-a538-e92c5ff734a4" "10 meters - < 30 meters","20505a5b-4df8-4430-83a3-ad7b212c9bfc" From 3382e7eb49f191265405500eb510f3c3f4302c55 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Fri, 1 Apr 2022 09:57:38 -0500 Subject: [PATCH 068/261] Added umm-g cspatial extent requirement fulfillment check --- pyQuARC/schemas/rule_mapping.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 968881de..2e962c63 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2980,10 +2980,10 @@ "umm-g": [ { "fields": [ - "SpatialExtent/HorizontaSpatialDomain/Geometry/Points", - "SpatialExtent/HorizontaSpatialDomain/Geometry/BoundingRectangles", - "SpatialExtent/HorizontaSpatialDomain/Geometry/Lines", - "SpatialExtent/HorizontaSpatialDomain/Geometry/Gpolygons" + "SpatialExtent/HorizontalSpatialDomain/Geometry/Points", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles", + "SpatialExtent/HorizontalSpatialDomain/Geometry/Lines", + "SpatialExtent/HorizontalSpatialDomain/Geometry/Gpolygons" ] } ] From 117340429f37c8ac955a382d0d97bd59f6ce0cc0 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 13:53:48 -0500 Subject: [PATCH 069/261] Edited datetime_format_check --- pyQuARC/schemas/rule_mapping.json | 33 ++++--------------------------- 1 file changed, 4 insertions(+), 29 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 8e14e60b..3dbb173a 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -376,16 +376,6 @@ } ], "umm-json": [ - { - "fields": [ - "MetadataDate/Date" - ] - }, - { - "fields": [ - "AdditionalAttribute/UpdateDate" - ] - }, { "fields": [ "TemporalExtent/RangeDateTime/BeginningDateTime" @@ -402,28 +392,13 @@ ] }, { - "fields": [ - "TemporalExtent/PeriodicDateTime" + "fields": [ + "ProviderDates/Date?Type=DELETE" ] }, { - "fields": [ - "TemporalExtent/PeriodicDateTime/StartDate" - ] - }, - { - "fields": [ - "TemporalExtent/PeriodicDateTime/EndDate" - ] - }, - { - "fields": [ - "PaleoTemporalCoverage/PaleoStartDate" - ] - }, - { - "fields": [ - "PaleoTemporalCoverage/PaleoEndDate" + "fields": [ + "DataGranule/ProductionDateTime" ] } ] From b0f6727ae125129578c4071433d89a2691477485 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 13:55:19 -0500 Subject: [PATCH 070/261] Edited url_check --- pyQuARC/schemas/rule_mapping.json | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 3dbb173a..cb16a692 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -465,32 +465,7 @@ "umm-json": [ { "fields": [ - "DataCenters/ContactInformation/RelatedURLs/Url" - ] - }, - { - "fields": [ - "DataCenters/ContactPerson/ContactInformation/RelatedURLs/Url" - ] - }, - { - "fields": [ - "DataCenters/ContactGroup/ContactInformation/RelatedURLs/Url" - ] - }, - { - "fields": [ - "ContactPerson/ContactInformation/RelatedURLs/Url" - ] - }, - { - "fields": [ - "ContactGroup/ContactInformation/RelatedURLs/Url" - ] - }, - { - "fields": [ - "RelatedUrl/URL" + "RelatedUrls/URL" ] } ] From 2d3cf4ed420cfe65f7f20f6b594615c7f09f50b5 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 14:29:26 -0500 Subject: [PATCH 071/261] Revert "Edited url_check" This reverts commit b0f6727ae125129578c4071433d89a2691477485. --- pyQuARC/schemas/rule_mapping.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index cb16a692..3dbb173a 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -465,7 +465,32 @@ "umm-json": [ { "fields": [ - "RelatedUrls/URL" + "DataCenters/ContactInformation/RelatedURLs/Url" + ] + }, + { + "fields": [ + "DataCenters/ContactPerson/ContactInformation/RelatedURLs/Url" + ] + }, + { + "fields": [ + "DataCenters/ContactGroup/ContactInformation/RelatedURLs/Url" + ] + }, + { + "fields": [ + "ContactPerson/ContactInformation/RelatedURLs/Url" + ] + }, + { + "fields": [ + "ContactGroup/ContactInformation/RelatedURLs/Url" + ] + }, + { + "fields": [ + "RelatedUrl/URL" ] } ] From a5209bab7673854ff2a09682196ce4cdaa6b3a35 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 14:30:15 -0500 Subject: [PATCH 072/261] Revert "Edited datetime_format_check" This reverts commit 117340429f37c8ac955a382d0d97bd59f6ce0cc0. --- pyQuARC/schemas/rule_mapping.json | 33 +++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 3dbb173a..8e14e60b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -376,6 +376,16 @@ } ], "umm-json": [ + { + "fields": [ + "MetadataDate/Date" + ] + }, + { + "fields": [ + "AdditionalAttribute/UpdateDate" + ] + }, { "fields": [ "TemporalExtent/RangeDateTime/BeginningDateTime" @@ -392,13 +402,28 @@ ] }, { - "fields": [ - "ProviderDates/Date?Type=DELETE" + "fields": [ + "TemporalExtent/PeriodicDateTime" ] }, { - "fields": [ - "DataGranule/ProductionDateTime" + "fields": [ + "TemporalExtent/PeriodicDateTime/StartDate" + ] + }, + { + "fields": [ + "TemporalExtent/PeriodicDateTime/EndDate" + ] + }, + { + "fields": [ + "PaleoTemporalCoverage/PaleoStartDate" + ] + }, + { + "fields": [ + "PaleoTemporalCoverage/PaleoEndDate" ] } ] From 39d899e702e57d8e895737645f22ac96c80250e5 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 14:42:45 -0500 Subject: [PATCH 073/261] Updated range date logic checks 1 and 2 --- pyQuARC/schemas/rule_mapping.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 8e14e60b..63e3b1b5 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -78,6 +78,15 @@ ], "relation": "lte" } + ], + "umm-g": [ + { + "fields": [ + "TemporalExtent/RangeDateTime/BeginningDateTime", + "TemporalExtent/RangeDateTime/EndingDateTime" + ], + "relation": "lte" + } ] }, "severity": "error", @@ -112,6 +121,15 @@ ], "relation": "neq" } + ], + "umm-g": [ + { + "fields": [ + "TemporalExtent/RangeDateTime/BeginningDateTime", + "TemporalExtent/RangeDateTime/EndingDateTime" + ], + "relation": "neq" + } ] }, "severity": "warning", From b1e3b82bcdb87cc7653401be63929e8002db99c9 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 14:46:27 -0500 Subject: [PATCH 074/261] Updated datetime_format_check --- pyQuARC/schemas/rule_mapping.json | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 63e3b1b5..246be93c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -444,6 +444,33 @@ "PaleoTemporalCoverage/PaleoEndDate" ] } + ], + "umm-g": [ + { + "fields": [ + "TemporalExtent/RangeDateTime/BeginningDateTime" + ] + }, + { + "fields": [ + "TemporalExtent/RangeDateTime/EndingDateTime" + ] + }, + { + "fields": [ + "TemporalExtent/SingleDateTime" + ] + }, + { + "fields": [ + "ProviderDates/Date?Type=DELETE" + ] + }, + { + "fields": [ + "DataGranule/ProductionDateTime" + ] + } ] }, "severity": "error" From 9a7b4f52bb7e5b5f5bdf67a2a58bdd07cd6b37a2 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 15:36:33 -0500 Subject: [PATCH 075/261] Updated url_check --- pyQuARC/schemas/rule_mapping.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 246be93c..f4e25222 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -560,7 +560,14 @@ }, { "fields": [ - "RelatedUrl/URL" + "RelatedUrls/URL" + ] + } + ], + "umm-g": [ + { + "fields": [ + "RelatedUrls/URL" ] } ] From 9e20ee6c1a7f17d58f49b14af0dd692239413a68 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 15:41:58 -0500 Subject: [PATCH 076/261] Edited delete_time_check --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f4e25222..af5ff7f6 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -882,6 +882,13 @@ "MetadataDate/Type=DELETE" ] } + ], + "umm-g": [ + { + "fields": [ + "ProviderDates/Date?Type=DELETE" + ] + } ] }, "data": [ From d90bc5456f6056437bc7121c4d6a7309896cba16 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 4 Apr 2022 15:46:53 -0500 Subject: [PATCH 077/261] Edited characteristic_name_check --- pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index af5ff7f6..251757db 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1321,6 +1321,20 @@ "Platform/Instrument/ComposedOf/Characteristics" ] } + ], + "umm-g": [ + { + "fields": [ + "Platform/Instrument/Characteristics/Name", + "Platform/Instrument/Characteristics" + ] + }, + { + "fields": [ + "Platform/Instrument/ComposedOf/Characteristics/Name", + "Platform/Instrument/ComposedOf/Characteristics" + ] + } ] }, "severity": "error", From 190c8ab7e657118d181905641e139fc548fdfc42 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 5 Apr 2022 11:15:35 -0500 Subject: [PATCH 078/261] Update schema_validator.py Added default check_messages parameter for __init__ function of SchemaValidator class in schema_validator.py --- pyQuARC/code/schema_validator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index 0e1b1315..8b2cb2bd 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -8,7 +8,7 @@ from lxml import etree from urllib.request import pathname2url -from .constants import ECHO10, UMM_JSON, SCHEMA_PATHS +from .constants import ECHO10, UMM_JSON, SCHEMA_PATHS, SCHEMAS class SchemaValidator: @@ -19,7 +19,7 @@ class SchemaValidator: PATH_SEPARATOR = "/" def __init__( - self, check_messages, metadata_format=ECHO10, + self, check_messages=SCHEMAS["json"][2], metadata_format=ECHO10, ): """ Args: From 32bd72c36fcf0917b4c10c8cabe7df499c13a4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 5 Apr 2022 13:52:32 -0500 Subject: [PATCH 079/261] Remove default arg, pass None as arg to SchemaValidator on test --- pyQuARC/code/schema_validator.py | 3 +-- tests/test_schema_validator.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index 8b2cb2bd..292806ec 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -1,4 +1,3 @@ -from email import message_from_string import json import os import re @@ -19,7 +18,7 @@ class SchemaValidator: PATH_SEPARATOR = "/" def __init__( - self, check_messages=SCHEMAS["json"][2], metadata_format=ECHO10, + self, check_messages, metadata_format=ECHO10, ): """ Args: diff --git a/tests/test_schema_validator.py b/tests/test_schema_validator.py index 45368fdb..5787f091 100644 --- a/tests/test_schema_validator.py +++ b/tests/test_schema_validator.py @@ -12,7 +12,7 @@ class TestSchemaValidator: def setup_method(self): self.data = self.read_data() - self.schema_validator = SchemaValidator() + self.schema_validator = SchemaValidator(None) def read_data(self): result = {} From ae5fe3f47b0371a7173739c15c4d8edd374dfe95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 5 Apr 2022 14:05:28 -0500 Subject: [PATCH 080/261] Rename 'umm-json' to 'umm-c' --- pyQuARC/schemas/rule_mapping.json | 182 +++++++++++++++--------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e40c1d15..070a4de2 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -70,7 +70,7 @@ "relation": "lte" } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtents/RangeDateTimes/BeginningDateTime", @@ -104,7 +104,7 @@ "relation": "neq" } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtents/RangeDateTimes/BeginningDateTime", @@ -138,7 +138,7 @@ "relation": "lte" } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Projects/StartDate", @@ -172,7 +172,7 @@ "relation": "neq" } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Projects/StartDate", @@ -213,7 +213,7 @@ "relation": "lt" } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtents/PeriodicDateTimes/StartDate", @@ -375,7 +375,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataDates/Date?Type=CREATE" @@ -538,7 +538,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataCenters/ContactInformation/RelatedUrls/URL" @@ -595,7 +595,7 @@ "relation": "neq" } ], - "umm-json": [ + "umm-c": [ { "fields": [ "EntryTitle", @@ -625,7 +625,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Abstract" @@ -667,7 +667,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DOI/DOI" @@ -700,7 +700,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "AdditionalAttribute/Value" @@ -735,7 +735,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ProcessingLevel/Id" @@ -783,7 +783,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ScienceKeywords/Category", @@ -821,7 +821,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DOI/Authority" @@ -860,7 +860,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataDates/Date?Type=DELETE" @@ -890,7 +890,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DOI/MissingReason" @@ -916,7 +916,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ProcessingLevel/ProcessingLevelDescription" @@ -941,7 +941,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "CollectionProgress" @@ -982,7 +982,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtents/EndsAtPresentFlag", @@ -1016,7 +1016,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtents/EndsAtPresentFlag", @@ -1039,7 +1039,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ContactPersons/ContactInformation/ContactMechanisms/Type" @@ -1096,7 +1096,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ContactPersons/Roles" @@ -1135,7 +1135,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataCenters/ContactGroups/Roles" @@ -1196,7 +1196,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "AdditionalAttribute/DataType" @@ -1284,7 +1284,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/Name", @@ -1351,7 +1351,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/Description", @@ -1418,7 +1418,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/Unit", @@ -1485,7 +1485,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/Value", @@ -1546,7 +1546,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/Name" @@ -1608,7 +1608,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/Instruments/Characteristics/Description" @@ -1670,7 +1670,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/Unit" @@ -1722,7 +1722,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/Value" @@ -1812,7 +1812,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/HorizontaSpatialDomain/Geometry/CoordinateSystem" @@ -1868,7 +1868,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/GranuleSpatialRepresentation" @@ -1902,7 +1902,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataCenters/ShortName" @@ -1923,7 +1923,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataCenters/LongName" @@ -2005,7 +2005,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/Instruments/ShortName", @@ -2069,7 +2069,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/Instruments/ShortName" @@ -2112,7 +2112,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/Instruments/LongName" @@ -2145,7 +2145,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/ShortName" @@ -2173,7 +2173,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ArchiveAndDistributionInformation/FileDistributionInformation/Format" @@ -2201,7 +2201,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/LongName" @@ -2249,7 +2249,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "LocationKeywords/Category" @@ -2294,7 +2294,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "LocationKeywords/Category", @@ -2326,7 +2326,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/Type" @@ -2376,7 +2376,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Projects/ShortName", @@ -2415,7 +2415,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Projects/ShortName" @@ -2443,7 +2443,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Projects/LongName" @@ -2471,7 +2471,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "VersionDescription" @@ -2503,7 +2503,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "CollectionDataType" @@ -2533,7 +2533,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataCenters/ShortName" @@ -2567,7 +2567,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate", @@ -2597,7 +2597,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/VerticalSpatialDomain/Type" @@ -2634,7 +2634,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/SpatialCoverageType" @@ -2673,7 +2673,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/VerticalSpatialDomain/Unit" @@ -2710,7 +2710,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/VerticalSpatialDomain/Unit" @@ -2745,7 +2745,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Projects/ShortName" @@ -2773,7 +2773,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/SpatialCoverageType" @@ -2801,7 +2801,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialRepresentationInfo/HorizontalCoordinateSystem/GeodeticModel/HorizontalDatumName" @@ -2899,7 +2899,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "LocationKeywords/Category" @@ -2933,7 +2933,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/HorizontalSpatialDomain/Geometry/Point", @@ -2965,7 +2965,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "UseConstraints/LicenseURL/Linkage", @@ -2994,7 +2994,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ResourceCitation/OtherCitationDetails" @@ -3033,7 +3033,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ContactPerson/FirstName", @@ -3074,7 +3074,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DOI/Explanation", @@ -3134,7 +3134,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "CollectionProgress", @@ -3164,7 +3164,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "RelatedUrls/Type" @@ -3186,7 +3186,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "RelatedUrl/Type", @@ -3215,7 +3215,7 @@ "characteristic_name_uniqueness_check_umm": { "rule_name": "Characteristic Name Uniqueness Check for UMM JSON", "fields_to_apply": { - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/Characteristics" @@ -3245,7 +3245,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtent/RangeDateTime/EndingDateTime", @@ -3276,7 +3276,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtent/RangeDateTime/BeginningDateTime", @@ -3303,7 +3303,7 @@ ] } ], - "umm-json":[ + "umm-c":[ { "fields": [ "DataDates/Date?Type=REVIEW" @@ -3333,7 +3333,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "ISOTopicCategory" @@ -3443,7 +3443,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtents/SingleDateTimes", @@ -3471,7 +3471,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "UseConstraints/LicenseURL/Protocol" @@ -3508,7 +3508,7 @@ "relation": "eq" } ], - "umm-json": [ + "umm-c": [ { "fields": [ "CollectionCitations/Version", @@ -3566,7 +3566,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "MetadataDates/Date" @@ -3623,7 +3623,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "RelatedUrls/Description", @@ -3652,7 +3652,7 @@ "get_data_url_check_umm": { "rule_name": "GET DATA URL check for UMM JSON", "fields_to_apply": { - "umm-json": [ + "umm-c": [ { "fields": [ "RelatedUrls" @@ -3673,7 +3673,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialRepresentationInfo/Horizontal_Resolution_Range" @@ -3694,7 +3694,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialRepresentationInfo/Vertical_Resolution_Range" @@ -3743,7 +3743,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DirectoryNames" @@ -3768,7 +3768,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "PaleoTemporalCoverages/ChronostratigraphicUnits/Eon", @@ -3794,7 +3794,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Instrument/NumberOfInstruments", @@ -3828,7 +3828,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataCenters/ShortName" @@ -3882,7 +3882,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platform/Characteristics/DataType", @@ -3923,7 +3923,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "Platforms/Type" @@ -3944,7 +3944,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "SpatialExtent/HorizontalSpatialDomain/ResolutionAndCoordinateSystem/HorizontalDataResolution/NonGriddedResolutions/Unit" @@ -3988,7 +3988,7 @@ "periodic_duration_unit_check": { "rule_name": "Periodic Duration Unit Check", "fields_to_apply": { - "umm-json": [ + "umm-c": [ { "fields": [ "TemporalExtents/PeriodicDateTimes/DurationUnit" @@ -4009,7 +4009,7 @@ "url_description_uniqueness_check": { "rule_name": "URL Description Uniqueness Check", "fields_to_apply": { - "umm-json": [ + "umm-c": [ { "fields": [ "RelatedUrls" @@ -4028,7 +4028,7 @@ "metadata_update_time_logic_check": { "rule_name": "Metadata Update Time Logic Check", "fields_to_apply": { - "umm-json": [ + "umm-c": [ { "fields": [ "MetadataDates/Date?Type=UPDATE", From add28ef96b9d41cb254bda6b2f5b74b0713a44e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 5 Apr 2022 14:13:36 -0500 Subject: [PATCH 081/261] Update supported formats --- pyQuARC/code/constants.py | 2 ++ pyQuARC/main.py | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index 0bc6d379..5d565f3d 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -6,6 +6,8 @@ UMM_C = "umm-c" UMM_G = "umm-g" +SUPPORTED_FORMATS = [DIF, ECHO10, UMM_C, UMM_G] + ROOT_DIR = ( # go up one directory Path(__file__).resolve().parents[1] diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 593e5c7d..81c3b13e 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -8,11 +8,11 @@ if __name__ == '__main__': from code.checker import Checker - from code.constants import COLOR, ECHO10 + from code.constants import COLOR, ECHO10, SUPPORTED_FORMATS from code.downloader import Downloader else: from .code.checker import Checker - from .code.constants import COLOR, ECHO10 + from .code.constants import COLOR, ECHO10, SUPPORTED_FORMATS from .code.downloader import Downloader @@ -212,6 +212,7 @@ def display_results(self): --concept_ids --file --fake + --format """ parser = argparse.ArgumentParser() download_group = parser.add_mutually_exclusive_group() @@ -243,7 +244,7 @@ def display_results(self): action="store", nargs="?", type=str, - help="The metadata format (currently supported: 'echo10' and 'dif10')", + help=f"The metadata format (currently supported: {', '.join(SUPPORTED_FORMATS)})", ) args = parser.parse_args() @@ -255,6 +256,12 @@ def display_results(self): ) exit() + if args.format and (args.format not in SUPPORTED_FORMATS): + parser.error( + f"The given format is not supported. Only {', '.join(SUPPORTED_FORMATS)} are supported." + ) + exit() + arc = ARC( query=args.query, input_concept_ids=args.concept_ids or [], From 05ec1e652655e0e23b9e6d68db9908d401ad807d Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 6 Apr 2022 11:39:58 -0500 Subject: [PATCH 082/261] Potential fix to delete_time_check --- pyQuARC/schemas/rule_mapping.json | 17 +++++++++++------ tests/fixtures/test_cmr_metadata.umm-c | 4 ++++ tests/fixtures/test_cmr_metadata.umm-g | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 251757db..5e9af1be 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -393,10 +393,10 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ - "MetadataDate/Date" + "MetadataDates/Date" ] }, { @@ -461,6 +461,11 @@ "TemporalExtent/SingleDateTime" ] }, + { + "fields": [ + "ProviderDates/Date" + ] + }, { "fields": [ "ProviderDates/Date?Type=DELETE" @@ -861,7 +866,7 @@ ] } ], - "umm-json": [ + "umm-c": [ { "fields": [ "DataDate/Date" @@ -874,12 +879,12 @@ }, { "fields": [ - "MetadataDate/Date" + "MetadataDates/Date" ] }, { "fields": [ - "MetadataDate/Type=DELETE" + "MetadataDates/Type=DELETE" ] } ], @@ -888,7 +893,7 @@ "fields": [ "ProviderDates/Date?Type=DELETE" ] - } + } ] }, "data": [ diff --git a/tests/fixtures/test_cmr_metadata.umm-c b/tests/fixtures/test_cmr_metadata.umm-c index 2f5fe8bc..ab44028d 100644 --- a/tests/fixtures/test_cmr_metadata.umm-c +++ b/tests/fixtures/test_cmr_metadata.umm-c @@ -27,6 +27,10 @@ { "Type": "UPDATE", "Date": "2021-09-15T15:54:00.000Z" + }, + { + "Type": "DELETE", + "Date": "2010-01-01T00:00:00.000Z" } ], "VersionDescription": "Collection Version 6.1 Processing and Reprocessing", diff --git a/tests/fixtures/test_cmr_metadata.umm-g b/tests/fixtures/test_cmr_metadata.umm-g index 8622abae..a9f2ebac 100644 --- a/tests/fixtures/test_cmr_metadata.umm-g +++ b/tests/fixtures/test_cmr_metadata.umm-g @@ -10,7 +10,7 @@ "Date": "2018-09-19T02:00:00Z", "Type": "Update" }, { - "Date": "2030-08-19T03:00:00Z", + "Date": "2010-08-19T03:00:00Z", "Type": "Delete" }], "CollectionReference": { From 36b4c8e418379e13d7d0ab048112026d790124ec Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 6 Apr 2022 11:56:44 -0500 Subject: [PATCH 083/261] Edited delete_time_check to be lowercase so that it works --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 34bdd6fc..81ac4c10 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -518,7 +518,7 @@ }, { "fields": [ - "ProviderDates/Date?Type=DELETE" + "ProviderDates/Date?Type=Delete" ] }, { @@ -932,7 +932,7 @@ "umm-g": [ { "fields": [ - "ProviderDates/Date?Type=DELETE" + "ProviderDates/Date?Type=Delete" ] } ] From 0898b94d4accc96759952b3dc69ec7d71187e586 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Thu, 7 Apr 2022 15:05:28 -0500 Subject: [PATCH 084/261] Resolving conflicts from PR --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 2e962c63..7a585ca4 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3730,6 +3730,13 @@ "get_data_url_check_umm": { "rule_name": "GET DATA URL check for UMM JSON", "fields_to_apply": { + "umm-json": [ + { + "fields": [ + "RelatedUrls" + ] + } + ], "umm-g": [ { "fields": [ From 9de8942a4fedf8bea3a13f1bf3fbdf17f8161260 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 8 Apr 2022 10:42:51 -0500 Subject: [PATCH 085/261] Added 's' to the end of 'platform' and 'instrument' for the characteristic_field_name check --- pyQuARC/schemas/rule_mapping.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 81ac4c10..4579bcae 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1371,14 +1371,14 @@ "umm-g": [ { "fields": [ - "Platform/Instrument/Characteristics/Name", - "Platform/Instrument/Characteristics" + "Platforms/Instruments/Characteristics/Name", + "Platforms/Instruments/Characteristics" ] }, { "fields": [ - "Platform/Instrument/ComposedOf/Characteristics/Name", - "Platform/Instrument/ComposedOf/Characteristics" + "Platforms/Instruments/ComposedOf/Characteristics/Name", + "Platforms/Instruments/ComposedOf/Characteristics" ] } ] From 87a651bffa95694bf99270e06158ae58bb5dc3e6 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Mon, 11 Apr 2022 08:33:02 -0500 Subject: [PATCH 086/261] Modified rule_mappings for characteristic_name_uniqueness_check_umm --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 5b74222d..be358db1 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3318,7 +3318,7 @@ "umm-g": [ { "fields": [ - "Platforms/Characteristics" + "Platforms/Instruments/Characteristics" ] } ] From 190f201acd1cca1a062cca2bd37a88cfc68426c6 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 11 Apr 2022 09:38:02 -0500 Subject: [PATCH 087/261] Added OrbitCalculatedSpatialDomains/EquatorCrossingDateTime to datetime_format_check --- pyQuARC/schemas/rule_mapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 4579bcae..2cd81f21 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -525,6 +525,11 @@ "fields": [ "DataGranule/ProductionDateTime" ] + }, + { + "fields": [ + "OrbitCalculatedSpatialDomains/EquatorCrossingDateTime" + ] } ] }, From a5e0d2513d362cba2ee58bf027757cd6ca2c8d0c Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Mon, 11 Apr 2022 11:21:59 -0500 Subject: [PATCH 088/261] Added organization_short_name_gcmd_check Added check for organization_short_name_gcmd_check in checks.json, dif fields in rule_mapping --- pyQuARC/schemas/checks.json | 5 +++++ pyQuARC/schemas/rule_mapping.json | 7 +++++++ tests/fixtures/test_cmr_metadata.dif10 | 4 ++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 7a26a8f8..6f9614bf 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -64,6 +64,11 @@ "check_function": "mime_type_check", "available": true }, + "organization_short_name_gcmd_check": { + "data_type": "string", + "check_function": "organization_short_name_gcmd_check", + "available": true + }, "organization_long_name_gcmd_check": { "data_type": "string", "check_function": "organization_long_name_gcmd_check", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 070a4de2..d808022b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1902,6 +1902,13 @@ ] } ], + "dif10": [ + { + "fields": [ + "DIF/Organization/Organization_Name/Short_Name" + ] + } + ], "umm-c": [ { "fields": [ diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index f006da3f..da33b244 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -133,8 +133,8 @@ ORIGINATOR - NASA/GSFC/SED/ESD/HBSL/BISB/MODAPS - MODIS Adaptive Processing System, Biospheric Information Systems Branch, Hydrospheric and Biospheric Sciences Laboratory, Earth Sciences Division, Science and Exploration Directorate, Goddard Space Flight Center, NASA + dale + bob https://modaps.modaps.eosdis.nasa.gov/ From c8e12e898a2117a6870ff08217671492e6b82466 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Mon, 11 Apr 2022 11:59:43 -0500 Subject: [PATCH 089/261] Added organization_short_long_name_consistency_check organization_short_long_name_consistency_check - added to rule_mapping, checks, check messages --- pyQuARC/schemas/check_messages.json | 8 +++++ pyQuARC/schemas/checks.json | 5 +++ pyQuARC/schemas/rule_mapping.json | 44 ++++++++++++++++++++++++++ tests/fixtures/test_cmr_metadata.dif10 | 4 +-- 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index b29994ab..59f2604f 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -135,6 +135,14 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this long name added to the GCMD KMS." }, + "organization_short_long_name_consistency_check":{ + "failure": "The provided data center short name `{}` and long name `{}` aren't consistent.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please supply the corresponding long name for the short name." + }, "umm_controlled_collection_state_list_check": { "failure": "The provided Collection State `{}` is invalid.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 6f9614bf..2dd24c3f 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -74,6 +74,11 @@ "check_function": "organization_long_name_gcmd_check", "available": true }, + "organization_short_long_name_consistency_check": { + "data_type": "string", + "check_function": "organization_short_long_name_consistency_check", + "available": true + }, "instrument_short_long_name_consistency_check": { "data_type": "string", "check_function": "instrument_short_long_name_consistency_check", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index d808022b..06404649 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1941,6 +1941,50 @@ "severity": "error", "check_id": "organization_long_name_gcmd_check" }, + "organization_short_long_name_consistency_check": { + "rule_name": "Organization Short/Longname Consistency Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Organization/Organization_Name/Short_Name", + "DIF/Organization/Organization_Name/Long_Name" + ], + "dependencies": [ + [ + "organization_short_name_gcmd_check", + "DIF/Organization/Organization_Name/Short_Name" + ], + [ + "organization_long_name_gcmd_check", + "DIF/Organization/Organization_Name/Long_Name" + ] + ] + } + ], + "umm-c": [ + { + "fields": [ + "DataCenters/ShortName", + "DataCenters/LongName" + ], + "dependencies": [ + [ + "organization_short_name_gcmd_check", + "DataCenters/ShortName" + ], + [ + "organization_long_name_gcmd_check", + "DataCenters/LongName" + ] + ] + } + ] + + }, + "severity": "error", + "check_id": "organization_short_long_name_consistency_check" + }, "instrument_short_long_name_consistency_check": { "rule_name": "Instrument Short/Longname Consistency Check", "fields_to_apply": { diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index da33b244..5bab9bd7 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -133,8 +133,8 @@ ORIGINATOR - dale - bob + DE/DLR + MODIS Adaptive Processing System, Biospheric Information Systems Branch, Hydrospheric and Biospheric Sciences Laboratory, Earth Sciences Division, Science and Exploration Directorate, Goddard Space Flight Center, NASA https://modaps.modaps.eosdis.nasa.gov/ From 464d149c80db095b40336bcb409cbd29c7398772 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Mon, 11 Apr 2022 15:23:52 -0500 Subject: [PATCH 090/261] changed severity for user services check --- pyQuARC/schemas/rule_mapping.json | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 070a4de2..5b917c44 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -467,12 +467,12 @@ ] }, { - "fields":[ + "fields": [ "Projects/StartDate" ] }, { - "fields":[ + "fields": [ "Projects/EndDate" ] } @@ -901,7 +901,8 @@ "severity": "error", "data": [ [ - "Not Applicable", "Unknown" + "Not Applicable", + "Unknown" ] ], "check_id": "controlled_keywords_check" @@ -3050,7 +3051,7 @@ } ] }, - "severity": "error", + "severity": "warning", "check_id": "user_services_check" }, "doi_missing_reason_explanation": { @@ -3303,7 +3304,7 @@ ] } ], - "umm-c":[ + "umm-c": [ { "fields": [ "DataDates/Date?Type=REVIEW" @@ -3998,8 +3999,8 @@ }, "data": [ [ - "DAY", - "MONTH", + "DAY", + "MONTH", "YEAR" ] ], @@ -4040,5 +4041,5 @@ }, "severity": "info", "check_id": "date_compare" - } -} + } +} \ No newline at end of file From 94ba07d3d91c8e01304f3b1845e8a3c5744d66bc Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 11 Apr 2022 15:47:07 -0500 Subject: [PATCH 091/261] Added Instrument Characteristic DataType field to characteristic_data_type check --- pyQuARC/schemas/rule_mapping.json | 4 ++-- tests/fixtures/test_cmr_metadata.dif10 | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 070a4de2..1f7d32bf 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3877,8 +3877,8 @@ }, { "fields": [ - "DIF/Platform/Characteristics/DataType", - "DIF/Platform/Characteristics" + "DIF/Platform/Instrument/Characteristics/DataType", + "DIF/Platform/Instrument/Characteristics" ] } ], diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index f006da3f..b11736c2 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -87,6 +87,13 @@ MODIS Moderate-Resolution Imaging Spectroradiometer Imaging Spectroradiometry + + EquatorCrossingTime + Local time of the equator crossing and direction (ascending or descending) + Time/direction (ascending) + Local Mean Time + 3:30, ascending + From a13dd01eaeb2135daab6baa8761338c579e28001 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 11 Apr 2022 15:50:06 -0500 Subject: [PATCH 092/261] Added Instrument Characteristic DataType field to characteristic_data_type check --- tests/fixtures/test_cmr_metadata.dif10 | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index b11736c2..f8e80bdd 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -87,13 +87,14 @@ MODIS Moderate-Resolution Imaging Spectroradiometer Imaging Spectroradiometry - - EquatorCrossingTime - Local time of the equator crossing and direction (ascending or descending) - Time/direction (ascending) - Local Mean Time - 3:30, ascending - + + + Local time of the equator crossing and direction (ascending or descending) + Time/direction (ascending) + Local Mean Time + 3:30, ascending + + From 06a28fe9fd39e41e3e5c9e164325444a8b3c76fb Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 11 Apr 2022 15:51:59 -0500 Subject: [PATCH 093/261] Revert "Added Instrument Characteristic DataType field to characteristic_data_type check" This reverts commit a13dd01eaeb2135daab6baa8761338c579e28001. --- tests/fixtures/test_cmr_metadata.dif10 | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index f8e80bdd..b11736c2 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -87,14 +87,13 @@ MODIS Moderate-Resolution Imaging Spectroradiometer Imaging Spectroradiometry - - - Local time of the equator crossing and direction (ascending or descending) - Time/direction (ascending) - Local Mean Time - 3:30, ascending - - + + EquatorCrossingTime + Local time of the equator crossing and direction (ascending or descending) + Time/direction (ascending) + Local Mean Time + 3:30, ascending + From ca8732c5fb74f032f32fa9a7bebfc0279ea17acd Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 11 Apr 2022 16:01:26 -0500 Subject: [PATCH 094/261] Added DIF/Extended_Metadata/Metadata/Value field to url_check --- pyQuARC/schemas/rule_mapping.json | 5 +++++ tests/fixtures/test_cmr_metadata.dif10 | 16 +++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 1f7d32bf..e4064cde 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -536,6 +536,11 @@ "fields": [ "DIF/Related_URL/URL" ] + }, + { + "fields": [ + "DIF/Extended_Metadata/Metadata/Value" + ] } ], "umm-c": [ diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index b11736c2..cf602c83 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -87,13 +87,15 @@ MODIS Moderate-Resolution Imaging Spectroradiometer Imaging Spectroradiometry - - EquatorCrossingTime - Local time of the equator crossing and direction (ascending or descending) - Time/direction (ascending) - Local Mean Time - 3:30, ascending - + + + EquatorCrossingTime + Local time of the equator crossing and direction (ascending or descending) + Time/direction (ascending) + Local Mean Time + 3:30, ascending + + From 5cd253746aa5be9b8754c06f9c13e31c29c1a1a5 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Mon, 11 Apr 2022 16:14:00 -0500 Subject: [PATCH 095/261] AModified rule_mappings and checks.json for organization_short_name_gcmd_check (DIF10) --- pyQuARC/schemas/checks.json | 7 ++++++- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 7a26a8f8..64fb7284 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -64,6 +64,11 @@ "check_function": "mime_type_check", "available": true }, + "organization_short_name_gcmd_check": { + "data_type": "string", + "check_function": "organization_short_name_gcmd_check", + "available": true + }, "organization_long_name_gcmd_check": { "data_type": "string", "check_function": "organization_long_name_gcmd_check", @@ -254,4 +259,4 @@ "check_function": "url_description_uniqueness_check", "available": true } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 5b917c44..954ea028 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1903,6 +1903,13 @@ ] } ], + "dif10": [ + { + "fields": [ + "DIF/Organization/Organization_Name/Short_Name" + ] + } + ], "umm-c": [ { "fields": [ From 8fec7181fa05f463e079ef120d7ef589e6cc5d84 Mon Sep 17 00:00:00 2001 From: Essence Raphael Date: Mon, 11 Apr 2022 16:16:27 -0500 Subject: [PATCH 096/261] Add UMM-G functionality for checks assigned to me --- pyQuARC/schemas/check_messages.json | 66 ++++++------- pyQuARC/schemas/rule_mapping.json | 148 +++++++++++++++++++++++++--- 2 files changed, 167 insertions(+), 47 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index b29994ab..7d1cbd9c 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -295,30 +295,30 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this data format added to the Granule Data Format GCMD List." }, - "platform_long_name_gcmd_check": { - "failure": "The provided platform long name `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform added to the GCMD Platform KMS." - }, - "spatial_keyword_gcmd_check": { - "failure": "The provided spatial keyword `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this spatial keyword added to the GCMD Locations KMS." - }, - "platform_type_gcmd_check": { - "failure": "The provided platform type `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform type added to the GCMD Platforms KMS." - }, + "platform_long_name_gcmd_check": { + "failure": "The provided platform long name `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform added to the GCMD Platform KMS." + }, + "spatial_keyword_gcmd_check": { + "failure": "The provided spatial keyword `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this spatial keyword added to the GCMD Locations KMS." + }, + "platform_type_gcmd_check": { + "failure": "The provided platform type `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform type added to the GCMD Platforms KMS." + }, "campaign_short_long_name_consistency_check": { "failure": "The provided campaign short name `{}` and long name `{}` aren't consistent.", "help": { @@ -456,12 +456,12 @@ "remediation": "Please make sure the coordinate values are correct." }, "vertical_spatial_domain_type_check": { - "failure": "The Vertical Spatial Domain Type `{}` does not align with the values used in the UMM-C schema.", + "failure": "The Vertical Spatial Domain Type `{}` does not align with the values used in the UMM-G schema.", "help": { "message": "", "url": "" }, - "remediation": "Please provide a Vertical Spatial Domain Type from the following options to align with the UMM: ['Atmosphere Layer', 'Maximum Altitude', 'Maximum Depth', 'Minimum Altitude', 'Minimum Depth']" + "remediation": "Please provide a Vertical Spatial Domain Type from the following options to align with the UMM: ['Atmosphere Layer', 'Pressure', 'Altitude', 'Depth']" }, "oneOf": { "failure": "One of `{}` should be populated.", @@ -485,7 +485,7 @@ "message": "", "url": "" }, - "remediation": "Please provide a depth unit from the following list: ['Fathoms', 'Feet', 'HectoPascals', 'Meters', 'Millibars']" + "remediation": "Please provide a depth unit from the following list: ['Fathoms', 'Feet', 'HectoPascals', 'Kilometers', 'Meters', 'Millibars','PoundsPerSquareInch', 'Atmosphere', 'InchesOfMercury', 'InchesOfWater']" }, "altitude_unit_check": { "failure": "The Altitude Unit provided `{}` is invalid.", @@ -493,7 +493,7 @@ "message": "", "url": "" }, - "remediation": "Please provide a altitude unit from the following list: ['HectoPascals', 'Kilometers', 'Millibars']" + "remediation": "Please provide a altitude unit from the following list: ['Fathoms', 'Feet', 'HectoPascals', 'Kilometers', 'Meters', 'Millibars','PoundsPerSquareInch', 'Atmosphere', 'InchesOfMercury', 'InchesOfWater']" }, "campaign_name_presence_check": { "failure": "Campaign/Project name is missing.", @@ -701,7 +701,7 @@ "message": "", "url": "" }, - "remediation": "Please provide at least one of SingleDateTime, RangeDateTime, PeriodicDateTime" + "remediation": "Please provide at least one of SingleDateTime or RangeDateTime" }, "ftp_protocol_check": { "failure": "FTP links should no longer be used due to US Government security requirements. This check only applies to NASA/EOSDIS records.", @@ -850,11 +850,11 @@ "url_description_uniqueness_check": { "failure": "Duplicate URL description name/s `{}`.", "help": { - "message": "", - "url": "" + "message": "", + "url": "" }, "remediation": "Please provide a unique name for each URL description." - }, + }, "metadata_update_time_logic_check": { "failure": "Note: the UPDATE Metadata Date comes before the provided CREATE Metadata Date.", "help": { @@ -871,4 +871,4 @@ }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 070a4de2..a95a65c5 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -467,15 +467,52 @@ ] }, { - "fields":[ + "fields": [ "Projects/StartDate" ] }, { - "fields":[ + "fields": [ "Projects/EndDate" ] } + ], + "umm-g": [ + { + "fields": [ + "TemporalExtent/RangeDateTime/BeginningDateTime" + ] + }, + { + "fields": [ + "TemporalExtent/RangeDateTime/EndingDateTime" + ] + }, + { + "fields": [ + "TemporalExtent/SingleDateTime" + ] + }, + { + "fields": [ + "ProviderDates/Date" + ] + }, + { + "fields": [ + "ProviderDates/Date?Type=Delete" + ] + }, + { + "fields": [ + "DataGranule/ProductionDateTime" + ] + }, + { + "fields": [ + "OrbitCalculatedSpatialDomains/EquatorCrossingDateTime" + ] + } ] }, "severity": "error", @@ -901,7 +938,8 @@ "severity": "error", "data": [ [ - "Not Applicable", "Unknown" + "Not Applicable", + "Unknown" ] ], "check_id": "controlled_keywords_check" @@ -2576,6 +2614,16 @@ "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/SouthBoundingCoordinate" ] } + ], + "umm-g": [ + { + "fields": [ + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/WestBoundingCoordinate", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/NorthBoundingCoordinate", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/EastBoundingCoordinate", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles/SouthBoundingCoordinate" + ] + } ] }, "severity": "error" @@ -2603,15 +2651,21 @@ "SpatialExtent/VerticalSpatialDomain/Type" ] } + ], + "umm-g": [ + { + "fields": [ + "SpatialExtent/VerticalSpatialDomains/Type" + ] + } ] }, "data": [ [ "Atmosphere Layer", - "Maximum Altitude", - "Maximum Depth", - "Minimum Altitude", - "Minimum Depth" + "Pressure", + "Altitude", + "Depth" ] ], "severity": "error", @@ -2679,6 +2733,13 @@ "SpatialExtent/VerticalSpatialDomain/Unit" ] } + ], + "umm-g": [ + { + "fields": [ + "SpatialExtent/VerticalSpatialDomains/Unit?Type=Depth" + ] + } ] }, "data": [ @@ -2686,8 +2747,13 @@ "Fathoms", "Feet", "HectoPascals", + "Kilometers", "Meters", - "Millibars" + "Millibars", + "PoundsPerSquareInch", + "Atmosphere", + "InchesOfMercury", + "InchesOfWater" ] ], "severity": "warning", @@ -2716,13 +2782,27 @@ "SpatialExtent/VerticalSpatialDomain/Unit" ] } + ], + "umm-g": [ + { + "fields": [ + "SpatialExtent/VerticalSpatialDomains/Unit?Type=Altitude" + ] + } ] }, "data": [ [ + "Fathoms", + "Feet", "HectoPascals", "Kilometers", - "Millibars" + "Meters", + "Millibars", + "PoundsPerSquareInch", + "Atmosphere", + "InchesOfMercury", + "InchesOfWater" ] ], "severity": "warning", @@ -3303,7 +3383,7 @@ ] } ], - "umm-c":[ + "umm-c": [ { "fields": [ "DataDates/Date?Type=REVIEW" @@ -3451,6 +3531,14 @@ "TemporalExtents/PeriodicDateTimes" ] } + ], + "umm-g": [ + { + "fields": [ + "TemporalExtent/SingleDateTime", + "TemporalExtent/RangeDateTime" + ] + } ] }, "severity": "info", @@ -3577,6 +3665,38 @@ "DataDates/Date" ] } + ], + "umm-g": [ + { + "fields": [ + "ProviderDates/Date" + ] + }, + { + "fields": [ + "DataGranule/ProductionDateTime" + ] + }, + { + "fields": [ + "TemporalExtent/RangeDateTime/BeginningDateTime" + ] + }, + { + "fields": [ + "TemporalExtent/RangeDateTime/EndingDateTime" + ] + }, + { + "fields": [ + "TemporalExtent/SingleDateTime" + ] + }, + { + "fields": [ + "OrbitCalculatedSpatialDomains/EquatorCrossingDateTime" + ] + } ] }, "data": [ @@ -3998,8 +4118,8 @@ }, "data": [ [ - "DAY", - "MONTH", + "DAY", + "MONTH", "YEAR" ] ], @@ -4040,5 +4160,5 @@ }, "severity": "info", "check_id": "date_compare" - } -} + } +} \ No newline at end of file From d8d0c123a9b5207582c42d54e83f82df5a117991 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Tue, 12 Apr 2022 10:08:13 -0500 Subject: [PATCH 097/261] Changed 80 to 20 in rule_mappings and checks_messages for the characteristic_unit_length_check --- pyQuARC/schemas/check_messages.json | 58 ++++++++++++++--------------- pyQuARC/schemas/rule_mapping.json | 2 +- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index b29994ab..85b46b98 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -295,30 +295,30 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this data format added to the Granule Data Format GCMD List." }, - "platform_long_name_gcmd_check": { - "failure": "The provided platform long name `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform added to the GCMD Platform KMS." - }, - "spatial_keyword_gcmd_check": { - "failure": "The provided spatial keyword `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this spatial keyword added to the GCMD Locations KMS." - }, - "platform_type_gcmd_check": { - "failure": "The provided platform type `{}` does not comply with the GCMD.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform type added to the GCMD Platforms KMS." - }, + "platform_long_name_gcmd_check": { + "failure": "The provided platform long name `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform added to the GCMD Platform KMS." + }, + "spatial_keyword_gcmd_check": { + "failure": "The provided spatial keyword `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this spatial keyword added to the GCMD Locations KMS." + }, + "platform_type_gcmd_check": { + "failure": "The provided platform type `{}` does not comply with the GCMD.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform type added to the GCMD Platforms KMS." + }, "campaign_short_long_name_consistency_check": { "failure": "The provided campaign short name `{}` and long name `{}` aren't consistent.", "help": { @@ -397,7 +397,7 @@ "message": "", "url": "" }, - "remediation": "Please modify the unit to be less than 80 characters." + "remediation": "Please modify the unit to be less than 20 characters." }, "characteristic_value_length_check": { "failure": "The value has more characters than the maximum number allowed.", @@ -850,11 +850,11 @@ "url_description_uniqueness_check": { "failure": "Duplicate URL description name/s `{}`.", "help": { - "message": "", - "url": "" + "message": "", + "url": "" }, "remediation": "Please provide a unique name for each URL description." - }, + }, "metadata_update_time_logic_check": { "failure": "Note: the UPDATE Metadata Date comes before the provided CREATE Metadata Date.", "help": { @@ -871,4 +871,4 @@ }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 954ea028..95661f5e 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1690,7 +1690,7 @@ ] }, "data": [ - 80, + 20, "lte" ], "severity": "error", From 49814051759e9ac8f8e6b5a5191b648273d8d122 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 12 Apr 2022 10:11:05 -0500 Subject: [PATCH 098/261] Edited allowed length and error message for the characteristic_unit_length_check --- pyQuARC/schemas/check_messages.json | 2 +- pyQuARC/schemas/rule_mapping.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index b29994ab..b086965f 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -397,7 +397,7 @@ "message": "", "url": "" }, - "remediation": "Please modify the unit to be less than 80 characters." + "remediation": "Please modify the unit to be less than 20 characters." }, "characteristic_value_length_check": { "failure": "The value has more characters than the maximum number allowed.", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e4064cde..9f54864e 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1694,7 +1694,7 @@ ] }, "data": [ - 80, + 20, "lte" ], "severity": "error", From f8bf07d1611f1d1c73d99be7b71dfdeb9d0f5f16 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 12 Apr 2022 10:21:09 -0500 Subject: [PATCH 099/261] Added Extended_Metadata/Metadata/Value field to the DOI_validity check --- pyQuARC/schemas/rule_mapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 9f54864e..0210d23c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -670,6 +670,11 @@ "fields": [ "DIF/Associated_DOIs/DOI" ] + }, + { + "fields": [ + "DIF/Extended_Metadata/Metadata/Value" + ] } ], "umm-c": [ From c6baf105e2cb18b49dcac71454c858664d46a17d Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 12 Apr 2022 10:22:35 -0500 Subject: [PATCH 100/261] Added Extended_Metadata/Metadata/Value field to the DOI_validity check --- tests/fixtures/test_cmr_metadata.dif10 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index cf602c83..690480c9 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -248,7 +248,7 @@ VIEW RELATED INFORMATION GENERAL DOCUMENTATION - https://modis-atmos.gsfc.nasa.gov/products/water-vapor + http://modis-atmos.gsfc.nasa.gov/products/water-vapor Overview of MODIS Water Vapor products. text/html From 7ee7a43ed95dfaa40ba1b3218e2b5ec4889e35ba Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 12 Apr 2022 10:22:54 -0500 Subject: [PATCH 101/261] Revert "Added Extended_Metadata/Metadata/Value field to the DOI_validity check" This reverts commit c6baf105e2cb18b49dcac71454c858664d46a17d. --- tests/fixtures/test_cmr_metadata.dif10 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index 690480c9..cf602c83 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -248,7 +248,7 @@ VIEW RELATED INFORMATION GENERAL DOCUMENTATION - http://modis-atmos.gsfc.nasa.gov/products/water-vapor + https://modis-atmos.gsfc.nasa.gov/products/water-vapor Overview of MODIS Water Vapor products. text/html From 1f7068156dcc3f3a542b2f8a7f38a99cfcc62f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 12 Apr 2022 10:34:37 -0500 Subject: [PATCH 102/261] Use urllib parse to grab params --- pyQuARC/code/custom_checker.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/pyQuARC/code/custom_checker.py b/pyQuARC/code/custom_checker.py index 1e1d7b40..dcf950e5 100644 --- a/pyQuARC/code/custom_checker.py +++ b/pyQuARC/code/custom_checker.py @@ -1,3 +1,6 @@ +from urllib.parse import urlparse + + class CustomChecker: """ Class to implement custom checks @@ -20,8 +23,8 @@ def _get_path_value_recursively(subset_of_metadata_content, path_list, container Example: 'Collection/RangeDateTime/StartDate' -> ['Collection', 'RangeDateTime', 'StartDate'] container (set): The container that holds all the path values - query_params (dict): The key:value pair to distinguish a field in umm-c - eg: "Type": "DELETE" + query_params (list): The [key, value] pair to distinguish a field in umm-c + eg: ["Type", "DELETE"] """ try: root_content = subset_of_metadata_content[path_list[0]] @@ -74,14 +77,12 @@ def _get_path_value(content_to_validate, path_string): """ container = list() - path = path_string.split('/') - query_params = None - if ("?" in path[-1]): - split = path[-1].split('?') - path[-1], query = split[0], split[-1].split("=") - query_params = (query[0], query[1]) + parsed = urlparse(path_string) + path = parsed.path.split('/') + if q := parsed.query: + query_params = q.split('=') CustomChecker._get_path_value_recursively( content_to_validate, path, container, query_params) From 485e2f232b848aaa1422ea406cdebfb4232d0830 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 12 Apr 2022 10:44:10 -0500 Subject: [PATCH 103/261] Added URL fields to the url_description_uniqueness_check --- pyQuARC/schemas/rule_mapping.json | 12 ++++++++++++ tests/fixtures/test_cmr_metadata.dif10 | 9 --------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 0210d23c..251a8ce5 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4030,6 +4030,18 @@ "DataCenters/ContactInformation/RelatedUrls" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Multimedia_Sample/URL" + ] + }, + { + "fields": [ + "DIF/Related_URL" + ] + } ] }, "severity": "info", diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index cf602c83..f006da3f 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -87,15 +87,6 @@ MODIS Moderate-Resolution Imaging Spectroradiometer Imaging Spectroradiometry - - - EquatorCrossingTime - Local time of the equator crossing and direction (ascending or descending) - Time/direction (ascending) - Local Mean Time - 3:30, ascending - - From a4e95977c76ea9ff8663b74ab26d2ffd7105f027 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 12 Apr 2022 10:53:06 -0500 Subject: [PATCH 104/261] Added DIF/Project start and end date fields to the datetime_format check so that the project start/end date logic check would work --- pyQuARC/schemas/rule_mapping.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 251a8ce5..fd334b91 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -373,6 +373,16 @@ "fields": [ "DIF/Dataset_Citation/Dataset_Release_Date" ] + }, + { + "fields": [ + "DIF/Project/Start_Date" + ] + }, + { + "fields": [ + "DIF/Project/End_Date" + ] } ], "umm-c": [ From 40156415c52ce4fe7f7efbe2dd97995b05bafb37 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 12 Apr 2022 10:55:32 -0500 Subject: [PATCH 105/261] Removing Extended_Metadata/Metadata/Value field from DOI validity check --- pyQuARC/schemas/rule_mapping.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fd334b91..d730aa18 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -680,11 +680,6 @@ "fields": [ "DIF/Associated_DOIs/DOI" ] - }, - { - "fields": [ - "DIF/Extended_Metadata/Metadata/Value" - ] } ], "umm-c": [ From 0c6ac7291882d110b71e4d28fb652c47a8d69dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 12 Apr 2022 11:47:07 -0500 Subject: [PATCH 106/261] Refactor --- pyQuARC/code/custom_validator.py | 6 ++---- pyQuARC/code/string_validator.py | 2 -- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index f7554454..d363223b 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -15,9 +15,7 @@ def ends_at_present_flag_logic_check( ends_at_present_flag, ending_date_time, collection_state ): collection_state = collection_state.upper() - if ends_at_present_flag == None: - valid = True - else: + if not (valid := ends_at_present_flag == None): valid = ( ends_at_present_flag == True and not (ending_date_time) and collection_state == "ACTIVE" @@ -247,4 +245,4 @@ def url_description_uniqueness_check(related_urls): return { "valid": not bool(duplicates), "value": ', '.join(duplicates) - } \ No newline at end of file + } diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index cd4c2a84..798e8647 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -62,8 +62,6 @@ def controlled_keywords_check(value, keywords_list): """ if type(value) == str: value = [value] - else: - value = value validity = True for i in value: From 516c220bb2d31cdf67a3020dcee471a802e3d256 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Tue, 12 Apr 2022 14:53:36 -0500 Subject: [PATCH 107/261] Removed dif10 field from altitude_unit_check since controlled vocab does not apply for dif10 --- pyQuARC/schemas/rule_mapping.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 95661f5e..410d3f34 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2711,13 +2711,6 @@ ] } ], - "dif10": [ - { - "fields": [ - "DIF/Spatial_Coverage/Geometry/Bounding_Rectangle/Altitude_Unit" - ] - } - ], "umm-c": [ { "fields": [ From 50251949aa458e3dca41e0c99d84b6bf410b3088 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 13 Apr 2022 08:49:35 -0500 Subject: [PATCH 108/261] Added space before link in abstract --- tests/fixtures/test_cmr_metadata.dif10 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index f006da3f..bc95d4fc 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -232,7 +232,7 @@ No Fee - The MODIS/Aqua Total Precipitable Water Vapor 5-Min L2 Swath 1km and 5km (MYD05_L2) product consists of atmospheric column water-vapor amounts. This product is derived from data collected by the Moderate-Resolution Imaging Spectroradiometer (MODIS) on board the Aqua satellite. There are two different algorithms used to derive total precipitable water vapor in this data product: a near-infrared algorithm and an infrared algorithm. The near-infrared algorithm relies on observations of reflected solar radiation in MODIS's near-infrared channels, thus, the near-infrared retrievals are only produced during the daytime over surfaces that reflect near-infrared energy. As a result, the near-infrared algorithm is only applied over clear, cloud free land areas of the globe and above clouds over both the land and ocean. Over clear ocean areas, water-vapor estimates are provided over extended sun glint areas. Data produced by the near-infrared algorithm are generated at a 1-km spatial resolution. The other algorithm is the infrared algorithm which can be used to derive atmospheric precipitable water vapor profiles during both day and night. Data from the infrared algorithm are generated at a 5-km spatial resolution when at least nine field of views (FOVs) are cloud free. The infrared-derived precipitable water vapor is generated as a component of product MYD07, and is simply added to product MYD05 for convenience. There are two MODIS Precipitable Water Vapor products: MOD05_L2, containing data collected from the Terra platform; and MYD05_L2, containing data collected from the Aqua platform. This dataset has a short name of MYD05_L2 and provides data from the Aqua platform only. The MODIS Adaptive Processing System (MODAPS) is currently generating an improved version 6.1 (061) for all MODIS Level-1 (L1) and higher-level Level-2 (L2) & Level-3 (L3) Atmosphere Team products. The decision to create a new improved Collection 6.1 (061) was driven by the need to address a number of issues in the current Collection 6 (006) Level-1B (L1B) data, which have a negative impact in varying degrees in downstream products. It should be noted that the near-infrared algorithm refinement for this product is no longer being supported by NASA and as such there has been no update to this algorithm for Collection 6.1.For more information, visit the MODIS Atmosphere website at:https://modis-atmos.gsfc.nasa.gov/products/water-vapor + The MODIS/Aqua Total Precipitable Water Vapor 5-Min L2 Swath 1km and 5km (MYD05_L2) product consists of atmospheric column water-vapor amounts. This product is derived from data collected by the Moderate-Resolution Imaging Spectroradiometer (MODIS) on board the Aqua satellite. There are two different algorithms used to derive total precipitable water vapor in this data product: a near-infrared algorithm and an infrared algorithm. The near-infrared algorithm relies on observations of reflected solar radiation in MODIS's near-infrared channels, thus, the near-infrared retrievals are only produced during the daytime over surfaces that reflect near-infrared energy. As a result, the near-infrared algorithm is only applied over clear, cloud free land areas of the globe and above clouds over both the land and ocean. Over clear ocean areas, water-vapor estimates are provided over extended sun glint areas. Data produced by the near-infrared algorithm are generated at a 1-km spatial resolution. The other algorithm is the infrared algorithm which can be used to derive atmospheric precipitable water vapor profiles during both day and night. Data from the infrared algorithm are generated at a 5-km spatial resolution when at least nine field of views (FOVs) are cloud free. The infrared-derived precipitable water vapor is generated as a component of product MYD07, and is simply added to product MYD05 for convenience. There are two MODIS Precipitable Water Vapor products: MOD05_L2, containing data collected from the Terra platform; and MYD05_L2, containing data collected from the Aqua platform. This dataset has a short name of MYD05_L2 and provides data from the Aqua platform only. The MODIS Adaptive Processing System (MODAPS) is currently generating an improved version 6.1 (061) for all MODIS Level-1 (L1) and higher-level Level-2 (L2) & Level-3 (L3) Atmosphere Team products. The decision to create a new improved Collection 6.1 (061) was driven by the need to address a number of issues in the current Collection 6 (006) Level-1B (L1B) data, which have a negative impact in varying degrees in downstream products. It should be noted that the near-infrared algorithm refinement for this product is no longer being supported by NASA and as such there has been no update to this algorithm for Collection 6.1.For more information, visit the MODIS Atmosphere website at: https://modis-atmos.gsfc.nasa.gov/products/water-vapor From 219e08d0e5618e8c29413425be32741c88b19ad4 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 13 Apr 2022 09:28:21 -0500 Subject: [PATCH 109/261] Added Related_URL/Mime_Type to mime_type_gcmd_check --- pyQuARC/schemas/rule_mapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index d730aa18..780bcc86 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3742,6 +3742,11 @@ "fields": [ "DIF/Use_Constraints/License_URL/Mime_Type" ] + }, + { + "fields": [ + "DIF/Related_URL/Mime_Type" + ] } ] }, From ede0f85485e59900c7010b0840a1bcd28652783e Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 14 Apr 2022 08:20:07 -0500 Subject: [PATCH 110/261] Added MetadataSpecification/URL to url_check --- pyQuARC/schemas/rule_mapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 2cd81f21..83aa1481 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -630,6 +630,11 @@ "fields": [ "RelatedUrls/URL" ] + }, + { + "fields": [ + "MetadataSpecification/URL" + ] } ] }, From 017ea2678865ca78c1bedaf1b005e45909997554 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 14 Apr 2022 13:03:10 -0500 Subject: [PATCH 111/261] Fixed DOI validty check so it doesn't flag allowed non-doi values and added DIF/Extended_Metadata/Metadata/Value to the check --- pyQuARC/code/url_validator.py | 7 +++++-- pyQuARC/schemas/rule_mapping.json | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index 0a20ff44..47ec7573 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -97,9 +97,12 @@ def doi_check(doi): """ if "doi.org/" in doi: url = doi - else: + return UrlValidator.health_and_status_check(url) + elif "10." in doi: url = f"https://www.doi.org/{doi}" - return UrlValidator.health_and_status_check(url) + return UrlValidator.health_and_status_check(url) + else: + return None @staticmethod @if_arg diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 780bcc86..d130976c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -680,6 +680,11 @@ "fields": [ "DIF/Associated_DOIs/DOI" ] + }, + { + "fields": [ + "DIF/Extended_Metadata/Metadata/Value" + ] } ], "umm-c": [ From 10b96583b83dad28c9a7d5be48aa4f1600582b62 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 14 Apr 2022 13:13:33 -0500 Subject: [PATCH 112/261] Edited names for characteristic_name_uniqueness_check and added DIF field --- pyQuARC/code/custom_validator.py | 4 ++-- pyQuARC/schemas/check_messages.json | 4 ++-- pyQuARC/schemas/checks.json | 8 ++++---- pyQuARC/schemas/rule_mapping.json | 15 +++++++++++---- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index f70c8f95..26ca7259 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -180,7 +180,7 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag @staticmethod @if_arg - def characteristic_name_uniqueness_check(characteristics): + def characteristic_name_uniqueness_check_echo10(characteristics): seen, duplicates = set(), set() for characteristic in characteristics['Characteristic']: name = characteristic['Name'] @@ -196,7 +196,7 @@ def characteristic_name_uniqueness_check(characteristics): @staticmethod @if_arg - def characteristic_name_uniqueness_check_umm(characteristics): + def characteristic_name_uniqueness_check(characteristics): seen, duplicates = set(), set() for characteristic in characteristics: name = characteristic['Name'] diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index b086965f..65159d48 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -639,7 +639,7 @@ }, "remediation": "Please provide a corresponding GCMD compliant Online Resource Type for each Online Resource URL." }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_echo10": { "failure": "Duplicate characteristic name/s `{}`.", "help": { "message": "", @@ -647,7 +647,7 @@ }, "remediation": "Please provide a unique name for each characteristic." }, - "characteristic_name_uniqueness_check_umm": { + "characteristic_name_uniqueness_check": { "failure": "Duplicate characteristic name/s `{}`.", "help": { "message": "", diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 7a26a8f8..3df2bdb0 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -209,14 +209,14 @@ "check_function": "online_resource_type_gcmd_check", "available": true }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_echo10": { "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check", + "check_function": "characteristic_name_uniqueness_check_echo10", "available": true }, - "characteristic_name_uniqueness_check_umm": { + "characteristic_name_uniqueness_check": { "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check_umm", + "check_function": "characteristic_name_uniqueness_check", "available": true }, "validate_ending_datetime_against_granules": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index d130976c..e97e23dd 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3218,7 +3218,7 @@ "severity": "warning", "check_id": "availability_check" }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_echo10": { "rule_name": "Characteristic Name Uniqueness Check", "fields_to_apply": { "echo10": [ @@ -3230,9 +3230,9 @@ ] }, "severity": "warning", - "check_id": "characteristic_name_uniqueness_check" + "check_id": "characteristic_name_uniqueness_check_echo10" }, - "characteristic_name_uniqueness_check_umm": { + "characteristic_name_uniqueness_check": { "rule_name": "Characteristic Name Uniqueness Check for UMM JSON", "fields_to_apply": { "umm-c": [ @@ -3241,10 +3241,17 @@ "Platforms/Characteristics" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Characteristics" + ] + } ] }, "severity": "warning", - "check_id": "characteristic_name_uniqueness_check_umm" + "check_id": "characteristic_name_uniqueness_check" }, "validate_ending_datetime_against_granules": { "rule_name": "Ending Datetime validation against granules", From bb527556c2ef5c6c1c6f1c9252572c9b94fd63d8 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 14 Apr 2022 13:26:00 -0500 Subject: [PATCH 113/261] Revert "Edited names for characteristic_name_uniqueness_check and added DIF field" This reverts commit 10b96583b83dad28c9a7d5be48aa4f1600582b62. --- pyQuARC/code/custom_validator.py | 4 ++-- pyQuARC/schemas/check_messages.json | 4 ++-- pyQuARC/schemas/checks.json | 8 ++++---- pyQuARC/schemas/rule_mapping.json | 15 ++++----------- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 26ca7259..f70c8f95 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -180,7 +180,7 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag @staticmethod @if_arg - def characteristic_name_uniqueness_check_echo10(characteristics): + def characteristic_name_uniqueness_check(characteristics): seen, duplicates = set(), set() for characteristic in characteristics['Characteristic']: name = characteristic['Name'] @@ -196,7 +196,7 @@ def characteristic_name_uniqueness_check_echo10(characteristics): @staticmethod @if_arg - def characteristic_name_uniqueness_check(characteristics): + def characteristic_name_uniqueness_check_umm(characteristics): seen, duplicates = set(), set() for characteristic in characteristics: name = characteristic['Name'] diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 65159d48..b086965f 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -639,7 +639,7 @@ }, "remediation": "Please provide a corresponding GCMD compliant Online Resource Type for each Online Resource URL." }, - "characteristic_name_uniqueness_check_echo10": { + "characteristic_name_uniqueness_check": { "failure": "Duplicate characteristic name/s `{}`.", "help": { "message": "", @@ -647,7 +647,7 @@ }, "remediation": "Please provide a unique name for each characteristic." }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_umm": { "failure": "Duplicate characteristic name/s `{}`.", "help": { "message": "", diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 3df2bdb0..7a26a8f8 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -209,14 +209,14 @@ "check_function": "online_resource_type_gcmd_check", "available": true }, - "characteristic_name_uniqueness_check_echo10": { + "characteristic_name_uniqueness_check": { "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check_echo10", + "check_function": "characteristic_name_uniqueness_check", "available": true }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_umm": { "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check", + "check_function": "characteristic_name_uniqueness_check_umm", "available": true }, "validate_ending_datetime_against_granules": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e97e23dd..d130976c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3218,7 +3218,7 @@ "severity": "warning", "check_id": "availability_check" }, - "characteristic_name_uniqueness_check_echo10": { + "characteristic_name_uniqueness_check": { "rule_name": "Characteristic Name Uniqueness Check", "fields_to_apply": { "echo10": [ @@ -3230,9 +3230,9 @@ ] }, "severity": "warning", - "check_id": "characteristic_name_uniqueness_check_echo10" + "check_id": "characteristic_name_uniqueness_check" }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_umm": { "rule_name": "Characteristic Name Uniqueness Check for UMM JSON", "fields_to_apply": { "umm-c": [ @@ -3241,17 +3241,10 @@ "Platforms/Characteristics" ] } - ], - "dif10": [ - { - "fields": [ - "DIF/Platform/Characteristics" - ] - } ] }, "severity": "warning", - "check_id": "characteristic_name_uniqueness_check" + "check_id": "characteristic_name_uniqueness_check_umm" }, "validate_ending_datetime_against_granules": { "rule_name": "Ending Datetime validation against granules", From 17bb049ac85686c8cba5e81fd9833d2d42879a05 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 14 Apr 2022 13:26:39 -0500 Subject: [PATCH 114/261] Revert "Fixed DOI validty check so it doesn't flag allowed non-doi values and added DIF/Extended_Metadata/Metadata/Value to the check" This reverts commit 017ea2678865ca78c1bedaf1b005e45909997554. --- pyQuARC/code/url_validator.py | 7 ++----- pyQuARC/schemas/rule_mapping.json | 5 ----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index 47ec7573..0a20ff44 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -97,12 +97,9 @@ def doi_check(doi): """ if "doi.org/" in doi: url = doi - return UrlValidator.health_and_status_check(url) - elif "10." in doi: - url = f"https://www.doi.org/{doi}" - return UrlValidator.health_and_status_check(url) else: - return None + url = f"https://www.doi.org/{doi}" + return UrlValidator.health_and_status_check(url) @staticmethod @if_arg diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index d130976c..780bcc86 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -680,11 +680,6 @@ "fields": [ "DIF/Associated_DOIs/DOI" ] - }, - { - "fields": [ - "DIF/Extended_Metadata/Metadata/Value" - ] } ], "umm-c": [ From 20af5412a171ec56002d8fcb1491c5d824cb8bdc Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 14 Apr 2022 14:22:51 -0500 Subject: [PATCH 115/261] Changed `rule_name` of `characteristic_data_type` to include Platforms --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 06404649..ed02c5ec 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3891,7 +3891,7 @@ "check_id": "data_center_short_name_gcmd_check" }, "characteristic_data_type": { - "rule_name": "Instrument Characteristics Data Type Presence Check", + "rule_name": "Platform/Instrument Characteristics Data Type Presence Check", "fields_to_apply": { "echo10": [ { From 1834ab0ab59c0622b527e0f4bc742c22a5a7de81 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 15 Apr 2022 08:32:26 -0500 Subject: [PATCH 116/261] Changed characteristic_name_uniqueness_check to characteristic_name_uniqueness_check_echo10 because it currently only works with echo10 --- pyQuARC/code/custom_validator.py | 2 +- pyQuARC/schemas/check_messages.json | 2 +- pyQuARC/schemas/checks.json | 4 ++-- pyQuARC/schemas/rule_mapping.json | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index f70c8f95..4ae7400f 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -180,7 +180,7 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag @staticmethod @if_arg - def characteristic_name_uniqueness_check(characteristics): + def characteristic_name_uniqueness_check_echo10(characteristics): seen, duplicates = set(), set() for characteristic in characteristics['Characteristic']: name = characteristic['Name'] diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index b086965f..82f61aa1 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -639,7 +639,7 @@ }, "remediation": "Please provide a corresponding GCMD compliant Online Resource Type for each Online Resource URL." }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_echo10": { "failure": "Duplicate characteristic name/s `{}`.", "help": { "message": "", diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 7a26a8f8..e079cb30 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -209,9 +209,9 @@ "check_function": "online_resource_type_gcmd_check", "available": true }, - "characteristic_name_uniqueness_check": { + "characteristic_name_uniqueness_check_echo10": { "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check", + "check_function": "characteristic_name_uniqueness_check_echo10", "available": true }, "characteristic_name_uniqueness_check_umm": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 780bcc86..c011328a 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3213,8 +3213,8 @@ "severity": "warning", "check_id": "availability_check" }, - "characteristic_name_uniqueness_check": { - "rule_name": "Characteristic Name Uniqueness Check", + "characteristic_name_uniqueness_check_echo10": { + "rule_name": "Characteristic Name Uniqueness Check for ECHO10", "fields_to_apply": { "echo10": [ { @@ -3225,7 +3225,7 @@ ] }, "severity": "warning", - "check_id": "characteristic_name_uniqueness_check" + "check_id": "characteristic_name_uniqueness_check_echo10" }, "characteristic_name_uniqueness_check_umm": { "rule_name": "Characteristic Name Uniqueness Check for UMM JSON", From 0faf4dc2cdaa84b13f636b08fa041d7d33f4607f Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 15 Apr 2022 08:45:49 -0500 Subject: [PATCH 117/261] changed characteristic_name_uniqueness_check_umm to characteristic_name_uniqueness_check --- pyQuARC/code/custom_validator.py | 2 +- pyQuARC/schemas/check_messages.json | 2 +- pyQuARC/schemas/checks.json | 4 ++-- pyQuARC/schemas/rule_mapping.json | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 4ae7400f..26ca7259 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -196,7 +196,7 @@ def characteristic_name_uniqueness_check_echo10(characteristics): @staticmethod @if_arg - def characteristic_name_uniqueness_check_umm(characteristics): + def characteristic_name_uniqueness_check(characteristics): seen, duplicates = set(), set() for characteristic in characteristics: name = characteristic['Name'] diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 82f61aa1..65159d48 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -647,7 +647,7 @@ }, "remediation": "Please provide a unique name for each characteristic." }, - "characteristic_name_uniqueness_check_umm": { + "characteristic_name_uniqueness_check": { "failure": "Duplicate characteristic name/s `{}`.", "help": { "message": "", diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index e079cb30..3df2bdb0 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -214,9 +214,9 @@ "check_function": "characteristic_name_uniqueness_check_echo10", "available": true }, - "characteristic_name_uniqueness_check_umm": { + "characteristic_name_uniqueness_check": { "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check_umm", + "check_function": "characteristic_name_uniqueness_check", "available": true }, "validate_ending_datetime_against_granules": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index c011328a..accf3018 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3227,8 +3227,8 @@ "severity": "warning", "check_id": "characteristic_name_uniqueness_check_echo10" }, - "characteristic_name_uniqueness_check_umm": { - "rule_name": "Characteristic Name Uniqueness Check for UMM JSON", + "characteristic_name_uniqueness_check": { + "rule_name": "Characteristic Name Uniqueness Check", "fields_to_apply": { "umm-c": [ { @@ -3239,7 +3239,7 @@ ] }, "severity": "warning", - "check_id": "characteristic_name_uniqueness_check_umm" + "check_id": "characteristic_name_uniqueness_check" }, "validate_ending_datetime_against_granules": { "rule_name": "Ending Datetime validation against granules", From ddecf2220cf7a202540def2c2468c2b6e9176701 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 15 Apr 2022 09:02:01 -0500 Subject: [PATCH 118/261] Adding DIF10 field to characteristic_name_uniqueness_check --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index accf3018..5605796f 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3236,6 +3236,13 @@ "Platforms/Characteristics" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Characteristics" + ] + } ] }, "severity": "warning", From 213a50f01f961f23f4c0e22c05718da560e4c994 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 15 Apr 2022 09:43:30 -0500 Subject: [PATCH 119/261] added check for platform long name presence, edited rule_mapping and check_messages --- pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 65159d48..094dbec8 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -823,6 +823,14 @@ }, "remediation": "Recommend adding a platform type for the corresponding platform." }, + "platform_long_name_presence_check": { + "failure": "The platform long name is not provided.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the platform long name." + }, "horizontal_data_resolution_unit_check": { "failure": "The Horizontal Data Resolution Unit provided `{}` is invalid.", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 5605796f..209dc197 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3961,6 +3961,20 @@ "severity": "error", "check_id": "presence_check" }, + "platform_long_name_presence_check": { + "rule_name": "Platform Longname Presence Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Platform/Long_Name" + ] + } + ] + }, + "severity": "warning", + "check_id": "presence_check" + }, "horizontal_data_resolution_unit_check": { "rule_name": "Horizontal Data Resolution Unit Controlled Vocabulary Check", "fields_to_apply": { From 5d09fc1cfa5d06af220c346abd5ec9e035f021c5 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 15 Apr 2022 10:18:12 -0500 Subject: [PATCH 120/261] added check for instrument long name presence, edited rule_mapping and check_messages --- pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 094dbec8..d5e4ec70 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -279,6 +279,14 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this instrument added to the GCMD Instrument KMS." }, + "instrument_long_name_presence_check": { + "failure": "The instrument long name is missing.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please add the associated instrument long name." + }, "platform_short_name_gcmd_check": { "failure": "The provided platform short name `{}` does not comply with the GCMD.", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 209dc197..ca8d1f2c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2143,6 +2143,20 @@ "severity": "error", "check_id": "instrument_long_name_gcmd_check" }, + "instrument_long_name_presence_check": { + "rule_name": "Instrument Longname Presence Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Platform/Instrument/Long_Name" + ] + } + ] + }, + "severity": "warning", + "check_id": "presence_check" + }, "platform_short_name_gcmd_check": { "rule_name": "Platform Shortname GCMD Check", "fields_to_apply": { From 085fc56581b381bf46b706134837d0c6fb30f966 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 15 Apr 2022 10:34:58 -0500 Subject: [PATCH 121/261] added check for project long name presence, edited rule_mapping and check_messages --- pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index d5e4ec70..3d2b23e6 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -351,6 +351,14 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this campaign long name added to the GCMD Projects KMS." }, + "campaign_long_name_presence_check": { + "failure": "The project long name is missing.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please add the associated project long name" + }, "characteristic_name_check": { "failure": "A characteristic name is missing for the provided characteristic. ", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index ca8d1f2c..5e1a6e20 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2483,6 +2483,20 @@ "severity": "error", "check_id": "campaign_long_name_gcmd_check" }, + "campaign_long_name_presence_check": { + "rule_name": "Campaign Long Name Presence Check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Project/Long_Name" + ] + } + ] + }, + "severity": "warning", + "check_id": "presence_check" + }, "version_description_not_provided": { "rule_name": "Version Description Not Provided", "fields_to_apply": { From 207d8dea710df4eab51bbd1f54980eda9726865d Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Fri, 15 Apr 2022 13:39:13 -0500 Subject: [PATCH 122/261] Modified rule_mappings for characteristic_value_check --- pyQuARC/schemas/rule_mapping.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index be358db1..64ccf70a 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1507,12 +1507,6 @@ } ], "umm-g": [ - { - "fields": [ - "Platforms/Characteristics/Value", - "Platforms/Characteristics" - ] - }, { "fields": [ "Platforms/Instruments/Characteristics/Value", From de6a4eb2be4cd4e5145cc0f8100e944dd149cfb5 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Fri, 15 Apr 2022 13:44:38 -0500 Subject: [PATCH 123/261] AModified rule_mappings for data_format_gcmd_check --- pyQuARC/schemas/rule_mapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 64ccf70a..c8a74f31 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2227,6 +2227,11 @@ "fields": [ "DataGranule/ArchiveAndDistributionInformation/Format" ] + }, + { + "fields": [ + "DataGranule/ArchiveAndDistributionInformation/Files/Format" + ] } ] }, From 7bda208d476cdefa9a5c63296ce841504b27dd05 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Fri, 15 Apr 2022 13:46:56 -0500 Subject: [PATCH 124/261] Modified rule_mappings for spatial_extent_requirement_fulfillment_check --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index c8a74f31..9856357c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3014,7 +3014,7 @@ "SpatialExtent/HorizontalSpatialDomain/Geometry/Point", "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles", "SpatialExtent/HorizontalSpatialDomain/Geometry/Lines", - "SpatialExtent/HorizontalSpatialDomain/Geometry/Gpolygons" + "SpatialExtent/HorizontalSpatialDomain/Geometry/GPolygons" ] } ], @@ -3024,7 +3024,7 @@ "SpatialExtent/HorizontalSpatialDomain/Geometry/Points", "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles", "SpatialExtent/HorizontalSpatialDomain/Geometry/Lines", - "SpatialExtent/HorizontalSpatialDomain/Geometry/Gpolygons" + "SpatialExtent/HorizontalSpatialDomain/Geometry/GPolygons" ] } ] From ee989f533796fadf333a196980c02e1b321f556d Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Fri, 15 Apr 2022 13:49:13 -0500 Subject: [PATCH 125/261] Modified rule_mappings for characteristic_name_uniqueness_check --- pyQuARC/schemas/rule_mapping.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 9856357c..fda33aa2 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3319,6 +3319,11 @@ "fields": [ "Platforms/Instruments/Characteristics" ] + }, + { + "fields": [ + "Platforms/Instruments/ComposedOf/Characteristics" + ] } ] }, From 5316cc3ecd4f1f6418d09cf43bdecb20d5e0d267 Mon Sep 17 00:00:00 2001 From: Essence Raphael Date: Mon, 18 Apr 2022 13:14:01 -0500 Subject: [PATCH 126/261] Modify rule_mappings for depth unit check, altitude unit check, and vertical spatial domain type check. Add vertical spatial domain type and unit checks for umm-g --- pyQuARC/schemas/check_messages.json | 20 ++++++- pyQuARC/schemas/rule_mapping.json | 90 +++++++++++++++++++++++------ 2 files changed, 89 insertions(+), 21 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 7d1cbd9c..7bfd8f4f 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -456,6 +456,14 @@ "remediation": "Please make sure the coordinate values are correct." }, "vertical_spatial_domain_type_check": { + "failure": "The Vertical Spatial Domain Type `{}` does not align with the values used in the UMM-C schema.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a Vertical Spatial Domain Type from the following options to align with the UMM: ['Atmosphere Layer', 'Maximum Altitude', 'Maximum Depth', 'Minimum Altitude', 'Minimum Depth']" + }, + "vertical_spatial_domain_type_check_ummg": { "failure": "The Vertical Spatial Domain Type `{}` does not align with the values used in the UMM-G schema.", "help": { "message": "", @@ -485,7 +493,7 @@ "message": "", "url": "" }, - "remediation": "Please provide a depth unit from the following list: ['Fathoms', 'Feet', 'HectoPascals', 'Kilometers', 'Meters', 'Millibars','PoundsPerSquareInch', 'Atmosphere', 'InchesOfMercury', 'InchesOfWater']" + "remediation": "Please provide a depth unit from the following list: ['Fathoms', 'Feet', 'HectoPascals', 'Meters', 'Millibars']" }, "altitude_unit_check": { "failure": "The Altitude Unit provided `{}` is invalid.", @@ -493,7 +501,15 @@ "message": "", "url": "" }, - "remediation": "Please provide a altitude unit from the following list: ['Fathoms', 'Feet', 'HectoPascals', 'Kilometers', 'Meters', 'Millibars','PoundsPerSquareInch', 'Atmosphere', 'InchesOfMercury', 'InchesOfWater']" + "remediation": "Please provide a altitude unit from the following list: ['HectoPascals', 'Kilometers', 'Millibars']" + }, + "vertical_spatial_domain_unit_check_ummg": { + "failure": "The Unit provided `{}` is invalid.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a unit from the following list: ['Fathoms', 'Feet', 'HectoPascals', 'Kilometers', 'Meters', 'Millibars','PoundsPerSquareInch', 'Atmosphere', 'InchesOfMercury', 'InchesOfWater']" }, "campaign_name_presence_check": { "failure": "Campaign/Project name is missing.", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a95a65c5..3a60205d 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2217,6 +2217,18 @@ "ArchiveAndDistributionInformation/FileDistributionInformation/Format" ] } + ], + "umm-g": [ + { + "fields": [ + "DataGranule/ArchiveAndDistributionInformation/Format" + ] + }, + { + "fields": [ + "DataGranule/ArchiveAndDistributionInformation/Files/Format" + ] + } ] }, "severity": "error", @@ -2651,7 +2663,23 @@ "SpatialExtent/VerticalSpatialDomain/Type" ] } - ], + ] + }, + "data": [ + [ + "Atmosphere Layer", + "Maximum Altitude", + "Maximum Depth", + "Minimum Altitude", + "Minimum Depth" + ] + ], + "severity": "error", + "check_id": "controlled_keywords_check" + }, + "vertical_spatial_domain_type_check_ummg": { + "rule_name": "Vertical Spatial Domain Type Check UMM-G", + "fields_to_apply": { "umm-g": [ { "fields": [ @@ -2730,14 +2758,7 @@ "umm-c": [ { "fields": [ - "SpatialExtent/VerticalSpatialDomain/Unit" - ] - } - ], - "umm-g": [ - { - "fields": [ - "SpatialExtent/VerticalSpatialDomains/Unit?Type=Depth" + "SpatialInformation/VerticalCoordinateSystem/DepthSystemDefinition/DistanceUnits" ] } ] @@ -2747,13 +2768,8 @@ "Fathoms", "Feet", "HectoPascals", - "Kilometers", "Meters", - "Millibars", - "PoundsPerSquareInch", - "Atmosphere", - "InchesOfMercury", - "InchesOfWater" + "Millibars" ] ], "severity": "warning", @@ -2779,14 +2795,28 @@ "umm-c": [ { "fields": [ - "SpatialExtent/VerticalSpatialDomain/Unit" + "SpatialInformation/VerticalCoordinateSystem/AltitudeSystemDefinition/DistanceUnits" ] } - ], + ] + }, + "data": [ + [ + "HectoPascals", + "Kilometers", + "Millibars" + ] + ], + "severity": "warning", + "check_id": "controlled_keywords_check" + }, + "vertical_spatial_domain_unit_check_ummg": { + "rule_name": "Vertical Spatial Domain Unit Check UMM-G", + "fields_to_apply": { "umm-g": [ { "fields": [ - "SpatialExtent/VerticalSpatialDomains/Unit?Type=Altitude" + "SpatialExtent/VerticalSpatialDomains/Unit" ] } ] @@ -2805,7 +2835,7 @@ "InchesOfWater" ] ], - "severity": "warning", + "severity": "error", "check_id": "controlled_keywords_check" }, "campaign_name_presence_check": { @@ -3022,6 +3052,16 @@ "SpatialExtent/HorizontalSpatialDomain/Geometry/Gpolygons" ] } + ], + "umm-g": [ + { + "fields": [ + "SpatialExtent/HorizontalSpatialDomain/Geometry/Points", + "SpatialExtent/HorizontalSpatialDomain/Geometry/BoundingRectangles", + "SpatialExtent/HorizontalSpatialDomain/Geometry/Lines", + "SpatialExtent/HorizontalSpatialDomain/Geometry/GPolygons" + ] + } ] }, "severity": "info", @@ -3301,6 +3341,18 @@ "Platforms/Characteristics" ] } + ], + "umm-g": [ + { + "fields": [ + "Platforms/Instruments/Characteristics" + ] + }, + { + "fields": [ + "Platforms/Instruments/ComposedOf/Characteristics" + ] + } ] }, "severity": "warning", From 58ae2b398cf283f8be2c537d9ef6aa9fed1f9729 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Mon, 18 Apr 2022 15:59:36 -0500 Subject: [PATCH 127/261] modified rule_mappings and check_messages for platform_short_long_name_consistency_check --- pyQuARC/schemas/check_messages.json | 8 ++++ pyQuARC/schemas/rule_mapping.json | 60 +++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 85b46b98..b9bef4dd 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -287,6 +287,14 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this platform added to the GCMD platform KMS." }, + "platform_short_long_name_consistency_check": { + "failure": "The provided platform short name `{}` and long name `{}` aren't consistent.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please supply the corresponding long name for the short name." + }, "data_format_gcmd_check": { "failure": "The provided data format `{}` does not comply with the GCMD.", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 410d3f34..0131c835 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2164,6 +2164,66 @@ "severity": "error", "check_id": "platform_short_name_gcmd_check" }, + "platform_short_long_name_consistency_check": { + "rule_name": "Platform Short/Longname Consistency Check", + "fields_to_apply": { + "echo10": [ + { + "fields": [ + "Collection/Platforms/Platform/ShortName", + "Collection/Platforms/Platform/LongName" + ], + "dependencies": [ + [ + "platform_short_name_gcmd_check", + "Collection/Platforms/Platform/ShortName" + ], + [ + "platform_long_name_gcmd_check", + "Collection/Platforms/Platform/LongName" + ] + ] + } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Short_Name", + "DIF/Platform/Long_Name" + ], + "dependencies": [ + [ + "platform_short_name_gcmd_check", + "DIF/Platform/Short_Name" + ], + [ + "platform_long_name_gcmd_check", + "DIF/Platform/Long_Name" + ] + ] + } + ], + "umm-c": [ + { + "fields": [ + "Platforms/ShortName", + "Platforms/LongName" + ], + "dependencies": [ + [ + "platform_short_name_gcmd_check", + "Platforms/ShortName" + ], + [ + "platform_long_name_gcmd_check", + "Platforms/LongName" + ] + ] + } + ] + }, + "severity": "error" + }, "data_format_gcmd_check": { "rule_name": "Data Format GCMD Check", "fields_to_apply": { From 2b4532225233f1b88bc55f9a2daa92584e0b57fb Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 18 Apr 2022 16:03:38 -0500 Subject: [PATCH 128/261] Edited doi_check in url_validator to only apply if the value passed is a doi --- pyQuARC/code/url_validator.py | 7 +++++-- pyQuARC/schemas/rule_mapping.json | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index 0a20ff44..b8421406 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -97,9 +97,12 @@ def doi_check(doi): """ if "doi.org/" in doi: url = doi - else: + return UrlValidator.health_and_status_check(url) + elif "10." in doi: url = f"https://www.doi.org/{doi}" - return UrlValidator.health_and_status_check(url) + return UrlValidator.health_and_status_check(url) + else: + return {"valid": True} @staticmethod @if_arg diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 5e1a6e20..4f0b0f44 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -680,6 +680,11 @@ "fields": [ "DIF/Associated_DOIs/DOI" ] + }, + { + "fields": [ + "DIF/Extended_Metadata/Metadata/Value" + ] } ], "umm-c": [ From 5e95fe1298309d6aae59fee6f9ffd921094cfb07 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 18 Apr 2022 16:07:43 -0500 Subject: [PATCH 129/261] Removed DIF10 fields from characteristic_name_uniqueness_check --- pyQuARC/schemas/rule_mapping.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 4f0b0f44..87715d68 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3269,13 +3269,6 @@ "Platforms/Characteristics" ] } - ], - "dif10": [ - { - "fields": [ - "DIF/Platform/Characteristics" - ] - } ] }, "severity": "warning", From 15dba7ec9983e1476e4bd43d67b45b425aad1206 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 19 Apr 2022 10:35:36 -0500 Subject: [PATCH 130/261] Update rule_mapping.json Updated "characteristic_data_type" - changed "rule_name" to more generic rule name --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index ed02c5ec..fb67de6f 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3891,7 +3891,7 @@ "check_id": "data_center_short_name_gcmd_check" }, "characteristic_data_type": { - "rule_name": "Platform/Instrument Characteristics Data Type Presence Check", + "rule_name": "Characteristics Data Type Presence Check", "fields_to_apply": { "echo10": [ { From 2e67b2c09039f4adf21018dcfadd378dcd8bcb72 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 19 Apr 2022 17:35:19 -0500 Subject: [PATCH 131/261] Edits for validating datetime with granules "- Updated field names in rule_mapping.json - Removed ""dependencies"" from checks.json - Moved ""dependencies"" to rule_mapping.json - Edited validate_datetime_against_granules and validate_ending_datetime_against_granules in datetime_validator.py" --- pyQuARC/code/datetime_validator.py | 4 +-- pyQuARC/schemas/checks.json | 10 -------- pyQuARC/schemas/rule_mapping.json | 40 ++++++++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/pyQuARC/code/datetime_validator.py b/pyQuARC/code/datetime_validator.py index 9ad33198..305229fc 100644 --- a/pyQuARC/code/datetime_validator.py +++ b/pyQuARC/code/datetime_validator.py @@ -89,7 +89,7 @@ def validate_datetime_against_granules(datetime, collection_shortname, sort_key, Returns: (dict) An object with the validity of the check and the instance """ - granules = requests.get(f'{CMR_URL}/search/granules.json?short_name={collection_shortname}&sort_key[]=-{sort_key}').json() + granules = requests.get(f'{CMR_URL}/search/granules.json?short_name={collection_shortname}&sort_key[]={sort_key}').json() if len(granules['feed']['entry']) > 0: last_granule = granules['feed']['entry'][0] @@ -116,7 +116,7 @@ def validate_ending_datetime_against_granules(ending_datetime, collection_shortn return DatetimeValidator.validate_datetime_against_granules( ending_datetime, collection_shortname, - 'end_date', + '-end_date', 'time_end' ) diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 2dd24c3f..b44f1cc8 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -232,21 +232,11 @@ "validate_ending_datetime_against_granules": { "data_type": "datetime", "check_function": "validate_ending_datetime_against_granules", - "dependencies": [ - [ - "datetime_format_check" - ] - ], "available": true }, "validate_beginning_datetime_against_granules": { "data_type": "datetime", "check_function": "validate_beginning_datetime_against_granules", - "dependencies": [ - [ - "datetime_format_check" - ] - ], "available": true }, "get_data_url_check": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fb67de6f..4efa9f84 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3285,6 +3285,12 @@ "fields": [ "Collection/Temporal/RangeDateTime/EndingDateTime", "Collection/ShortName" + ], + "dependencies": [ + [ + "datetime_format_check", + "Collection/Temporal/RangeDateTime/EndingDateTime" + ] ] } ], @@ -3293,14 +3299,26 @@ "fields": [ "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time", "DIF/Entry_ID/Short_Name" + ], + "dependencies": [ + [ + "datetime_format_check", + "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time" + ] ] } ], "umm-c": [ { "fields": [ - "TemporalExtent/RangeDateTime/EndingDateTime", + "TemporalExtents/RangeDateTimes/EndingDateTime", "ShortName" + ], + "dependencies": [ + [ + "datetime_format_check", + "TemporalExtents/RangeDateTimes/EndingDateTime" + ] ] } ] @@ -3316,6 +3334,12 @@ "fields": [ "Collection/Temporal/RangeDateTime/BeginningDateTime", "Collection/ShortName" + ], + "dependencies": [ + [ + "datetime_format_check", + "Collection/Temporal/RangeDateTime/BeginningDateTime" + ] ] } ], @@ -3324,14 +3348,26 @@ "fields": [ "DIF/Temporal_Coverage/Range_DateTime/Beginning_Date_Time", "DIF/Entry_ID/Short_Name" + ], + "dependencies": [ + [ + "datetime_format_check", + "DIF/Temporal_Coverage/Range_DateTime/Beginning_Date_Time" + ] ] } ], "umm-c": [ { "fields": [ - "TemporalExtent/RangeDateTime/BeginningDateTime", + "TemporalExtents/RangeDateTimes/BeginningDateTime", "ShortName" + ], + "dependencies": [ + [ + "datetime_format_check", + "TemporalExtents/RangeDateTimes/BeginningDateTime" + ] ] } ] From f3f23e7af8d17a79d1be8c013ce8413a0414b937 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 26 Apr 2022 13:59:01 -0500 Subject: [PATCH 132/261] Edited field path for DIF/Multimedia_Sample in the url description uniqueness check --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 87715d68..5abefd2e 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4091,7 +4091,7 @@ "dif10": [ { "fields": [ - "DIF/Multimedia_Sample/URL" + "DIF/Multimedia_Sample" ] }, { From b4d1073779019d22618862a8fb895005c87ba714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 26 Apr 2022 14:18:28 -0500 Subject: [PATCH 133/261] Consolidate uniqueness checks --- pyQuARC/code/custom_validator.py | 45 ++++------------------- pyQuARC/schemas/checks.json | 14 +------ pyQuARC/schemas/rule_mapping.json | 24 ++++++------ tests/fixtures/test_cmr_metadata.dif10 | 7 ++++ tests/fixtures/test_cmr_metadata.umm-json | 19 ++++++++++ 5 files changed, 48 insertions(+), 61 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index d363223b..d92fdc8c 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -167,33 +167,17 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag "valid": validity, "value": collection_state } - - @staticmethod - @if_arg - def characteristic_name_uniqueness_check(characteristics): - seen, duplicates = set(), set() - for characteristic in characteristics['Characteristic']: - name = characteristic['Name'] - if name in seen: - duplicates.add(name) - else: - seen.add(name) - - return { - "valid": not bool(duplicates), - "value": ', '.join(duplicates) - } - + @staticmethod @if_arg - def characteristic_name_uniqueness_check_umm(characteristics): + def uniqueness_check(list_of_objects, key): seen, duplicates = set(), set() - for characteristic in characteristics: - name = characteristic['Name'] - if name in seen: - duplicates.add(name) + for url_obj in list_of_objects: + description = url_obj.get(key) + if description in seen: + duplicates.add(description) else: - seen.add(name) + seen.add(description) return { "valid": not bool(duplicates), @@ -231,18 +215,3 @@ def get_data_url_check_umm(related_urls): "value": "N/A" } - @staticmethod - @if_arg - def url_description_uniqueness_check(related_urls): - seen, duplicates = set(), set() - for url_obj in related_urls: - description = url_obj.get('Description') - if description in seen: - duplicates.add(description) - else: - seen.add(description) - - return { - "valid": not bool(duplicates), - "value": ', '.join(duplicates) - } diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 7a26a8f8..9c2d7973 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -209,14 +209,9 @@ "check_function": "online_resource_type_gcmd_check", "available": true }, - "characteristic_name_uniqueness_check": { + "uniqueness_check": { "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check", - "available": true - }, - "characteristic_name_uniqueness_check_umm": { - "data_type": "custom", - "check_function": "characteristic_name_uniqueness_check_umm", + "check_function": "uniqueness_check", "available": true }, "validate_ending_datetime_against_granules": { @@ -248,10 +243,5 @@ "data_type": "custom", "check_function": "get_data_url_check_umm", "available": true - }, - "url_description_uniqueness_check": { - "data_type": "custom", - "check_function": "url_description_uniqueness_check", - "available": true } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e40c1d15..446d2343 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3204,27 +3204,28 @@ "echo10": [ { "fields": [ - "Collection/Platforms/Platform/Characteristics" + "Collection/Platforms/Platform/Characteristics/Characteristic" ] } - ] - }, - "severity": "warning", - "check_id": "characteristic_name_uniqueness_check" - }, - "characteristic_name_uniqueness_check_umm": { - "rule_name": "Characteristic Name Uniqueness Check for UMM JSON", - "fields_to_apply": { + ], "umm-json": [ { "fields": [ "Platforms/Characteristics" ] } + ], + "dif10": [ + { + "fields": [ + "DIF/Platform/Characteristics" + ] + } ] }, + "data": ["Name"], "severity": "warning", - "check_id": "characteristic_name_uniqueness_check_umm" + "check_id": "uniqueness_check" }, "validate_ending_datetime_against_granules": { "rule_name": "Ending Datetime validation against granules", @@ -4022,8 +4023,9 @@ } ] }, + "data": ["Description"], "severity": "info", - "check_id": "url_description_uniqueness_check" + "check_id": "uniqueness_check" }, "metadata_update_time_logic_check": { "rule_name": "Metadata Update Time Logic Check", diff --git a/tests/fixtures/test_cmr_metadata.dif10 b/tests/fixtures/test_cmr_metadata.dif10 index f006da3f..8f316638 100644 --- a/tests/fixtures/test_cmr_metadata.dif10 +++ b/tests/fixtures/test_cmr_metadata.dif10 @@ -83,6 +83,13 @@ Local Mean Time 3:30, ascending + + EquatorCrossingTime + Local time of the equator crossing and direction (ascending or descending) + Time/direction (ascending) + Local Mean Time + 3:30, ascending + MODIS Moderate-Resolution Imaging Spectroradiometer diff --git a/tests/fixtures/test_cmr_metadata.umm-json b/tests/fixtures/test_cmr_metadata.umm-json index f8764df6..592da249 100644 --- a/tests/fixtures/test_cmr_metadata.umm-json +++ b/tests/fixtures/test_cmr_metadata.umm-json @@ -285,6 +285,13 @@ "Platforms": [ { "Characteristics": [ + { + "DataType": "STRING", + "Description": "Local time of the equator crossing and direction (ascending or descending)", + "Name": "EquatorCrossingTime", + "Unit": "Local Mean Time", + "Value": "10:30, descending" + }, { "DataType": "STRING", "Description": "Local time of the equator crossing and direction (ascending or descending)", @@ -365,6 +372,12 @@ } ], "RelatedUrls": [ + { + "Description": "The LP DAAC website provides detailed information on discovery, distribution, access, and support of land data products.", + "Type": "HOME PAGE", + "URL": "https://lpdaac.usgs.gov/", + "URLContentType": "DataContactURL" + }, { "Description": "The LP DAAC website provides detailed information on discovery, distribution, access, and support of land data products.", "Type": "HOME PAGE", @@ -408,6 +421,12 @@ } ], "RelatedUrls": [ + { + "Description": "The LP DAAC website provides detailed information on discovery, distribution, access, and support of land data products.", + "Type": "HOME PAGE", + "URL": "https://lpdaac.usgs.gov/", + "URLContentType": "DataCenterURL" + }, { "Description": "The LP DAAC website provides detailed information on discovery, distribution, access, and support of land data products.", "Type": "HOME PAGE", From 5b5dd6bcfce3e5d0d567266a9fe597ee93a8dc1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 26 Apr 2022 14:20:26 -0500 Subject: [PATCH 134/261] Update `not not` to `bool` --- pyQuARC/code/custom_validator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index d92fdc8c..496eec94 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -21,7 +21,7 @@ def ends_at_present_flag_logic_check( and not (ending_date_time) and collection_state == "ACTIVE" ) or ( ends_at_present_flag == False - and not not (ending_date_time) and collection_state == "COMPLETE" + and bool(ending_date_time) and collection_state == "COMPLETE" ) return {"valid": valid, "value": ends_at_present_flag} @@ -32,7 +32,7 @@ def ends_at_present_flag_presence_check( ): valid = True if ends_at_present_flag == None: - valid = not not (ending_date_time) and collection_state == "COMPLETE" + valid = bool(ending_date_time) and collection_state == "COMPLETE" return {"valid": valid, "value": ends_at_present_flag} From 5c858a1fb526d6f54fc7458b27845976fbc7953a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 26 Apr 2022 14:21:43 -0500 Subject: [PATCH 135/261] Refactor --- pyQuARC/code/checker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index b43495c4..25218ce9 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -221,10 +221,10 @@ def run(self, metadata_content): Returns: (dict): The results of the jsonschema check and all custom checks """ + parser = parse if self.metadata_format == UMM_JSON: - json_metadata = json.loads(metadata_content) - else: - json_metadata = parse(metadata_content) + parser = json.loads + json_metadata = parser(metadata_content) result_schema = self.perform_schema_check( metadata_content ) From 8e3d1e5598fcef04e0ff3969ff14c882f7d26c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 26 Apr 2022 14:44:44 -0500 Subject: [PATCH 136/261] Add newline --- pyQuARC/schemas/check_messages.json | 2 +- pyQuARC/schemas/checks.json | 2 +- pyQuARC/schemas/rule_mapping.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 6ae8678e..74819b37 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -895,4 +895,4 @@ }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." } -} \ No newline at end of file +} diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 64fb7284..6f9614bf 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -259,4 +259,4 @@ "check_function": "url_description_uniqueness_check", "available": true } -} \ No newline at end of file +} diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f8915e3e..7855fbe7 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4302,4 +4302,4 @@ "severity": "info", "check_id": "date_compare" } -} \ No newline at end of file +} From 688e33f284e710789a11fe57de358dac815d87b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 26 Apr 2022 16:22:43 -0500 Subject: [PATCH 137/261] Fix `ends_at_present_flag` logic --- pyQuARC/code/custom_validator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index fc10ded9..56e380a2 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -15,7 +15,7 @@ def ends_at_present_flag_logic_check( ends_at_present_flag, ending_date_time, collection_state ): collection_state = collection_state.upper() - if not ends_at_present_flag: + if ends_at_present_flag == None: valid = True else: valid = ( From b4b551810849d88fdc54f8e3158d0c59a23b1336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 26 Apr 2022 17:02:09 -0500 Subject: [PATCH 138/261] Update to a bit more restrictive doi matching --- pyQuARC/code/url_validator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index b8421406..c5bc7c98 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -98,7 +98,7 @@ def doi_check(doi): if "doi.org/" in doi: url = doi return UrlValidator.health_and_status_check(url) - elif "10." in doi: + elif doi.strip().startswith("10."): # doi always starts with "10." url = f"https://www.doi.org/{doi}" return UrlValidator.health_and_status_check(url) else: From cb0e9bd6b74766fe3194dfa0390b8ffae6349f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 27 Apr 2022 11:07:54 -0500 Subject: [PATCH 139/261] Refactor --- pyQuARC/code/custom_validator.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 496eec94..0eadb19c 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -157,10 +157,11 @@ def boolean_check(field_value): def collection_progress_consistency_check(collection_state, ends_at_present_flag, ending_date_time): # Logic: https://github.com/NASA-IMPACT/pyQuARC/issues/61 validity = True + ending_date_time = bool(ending_date_time) if collection_state in ["ACTIVE", "IN WORK"]: - validity = (not bool(ending_date_time)) and str(ends_at_present_flag).lower() == "true" + validity = (not ending_date_time) and str(ends_at_present_flag).lower() == "true" elif collection_state == "COMPLETE": - validity = bool(ending_date_time) and (not bool(str(ends_at_present_flag)) or ends_at_present_flag.lower() == "false") + validity = ending_date_time and (not bool(str(ends_at_present_flag)) or ends_at_present_flag.lower() == "false") else: validity = False return { @@ -173,8 +174,7 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag def uniqueness_check(list_of_objects, key): seen, duplicates = set(), set() for url_obj in list_of_objects: - description = url_obj.get(key) - if description in seen: + if description := url_obj.get(key) in seen: duplicates.add(description) else: seen.add(description) @@ -204,14 +204,10 @@ def get_data_url_check(metadata_json): @staticmethod def get_data_url_check_umm(related_urls): + return_obj = { 'valid': False, 'value': 'N/A'} for url_obj in related_urls: - if url_obj.get("Type") == "GET DATA" and (url := url_obj.get("URL")): - return { - "valid": True, - "value": url - } - return { - "valid": False, - "value": "N/A" - } - + if validity := url_obj.get("Type") == "GET DATA" and (url := url_obj.get("URL")): + return_obj['valid'] = validity + return_obj['value'] = url + break + return return_obj From 0dfba8b0487c09a8dedb175388ed5f5147109539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 27 Apr 2022 12:01:33 -0500 Subject: [PATCH 140/261] Add format specific `data` field --- pyQuARC/code/checker.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index 9efcd7d4..65de6a0b 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -172,6 +172,8 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): for field_dict in list_of_fields_to_apply: dependencies = self.scheduler.get_all_dependencies(rule_id, check, field_dict) main_field = field_dict["fields"][0] + if data := field_dict.get("data"): + external_data = data result_dict.setdefault(main_field, {}) if not self._check_dependencies_validity(dependencies, field_dict): continue From 80c1e4a2d0512ec56aef1ed376eec37ab8943bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 27 Apr 2022 12:02:12 -0500 Subject: [PATCH 141/261] Consolidate get_url_check for all formats --- pyQuARC/schemas/checks.json | 5 ----- pyQuARC/schemas/rule_mapping.json | 19 +++++++++---------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 9c2d7973..988097d8 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -238,10 +238,5 @@ "data_type": "custom", "check_function": "get_data_url_check", "available": true - }, - "get_data_url_check_umm": { - "data_type": "custom", - "check_function": "get_data_url_check_umm", - "available": true } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 446d2343..31252313 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3642,17 +3642,13 @@ "dif10": [ { "fields": [ - "DIF" + "DIF/Related_URL" + ], + "data": [ + ["URL_Content_Type", "Type"] ] } - ] - }, - "severity": "error", - "check_id": "get_data_url_check" - }, - "get_data_url_check_umm": { - "rule_name": "GET DATA URL check for UMM JSON", - "fields_to_apply": { + ], "umm-json": [ { "fields": [ @@ -3661,8 +3657,11 @@ } ] }, + "data": [ + ["Type"] + ], "severity": "error", - "check_id": "get_data_url_check_umm" + "check_id": "get_data_url_check" }, "horizontal_resolution_range_check": { "rule_name": "Horizontal resolution Range GCMD Check", From 7547b88c2901c1a875aef0d61de26348b8ed5809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 27 Apr 2022 12:02:40 -0500 Subject: [PATCH 142/261] Update `CHANGELOG` --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94b02973..83465c39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,7 +59,7 @@ To specify the "Email" field, in the `rule_mapping`, a user would put in `Contac ### List of added and updated checks -- GET DATA URL Check UMM (check name: ) +- GET DATA URL Check - Data Center Long Name Check - URL Description Uniqueness Check - Periodic Duration Unit Check From edef74a147928b7515c122450d63032d90ac77a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 27 Apr 2022 16:07:09 -0500 Subject: [PATCH 143/261] Update DOI check --- pyQuARC/code/url_validator.py | 7 ++----- pyQuARC/schemas/check_messages.json | 4 ++-- pyQuARC/schemas/rule_mapping.json | 10 ++++++++++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index c5bc7c98..fe928f34 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -95,14 +95,11 @@ def doi_check(doi): Returns: (dict) An object with the validity of the check and the instance/results """ - if "doi.org/" in doi: - url = doi - return UrlValidator.health_and_status_check(url) - elif doi.strip().startswith("10."): # doi always starts with "10." + if doi.strip().startswith("10."): # doi always starts with "10." url = f"https://www.doi.org/{doi}" return UrlValidator.health_and_status_check(url) else: - return {"valid": True} + return {"valid": False, "value": doi} @staticmethod @if_arg diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index dc7cd64a..236572a9 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -53,7 +53,7 @@ "message": "", "url": "https://wiki.earthdata.nasa.gov/display/CMR/DOI" }, - "remediation": "Provide a valid DOI." + "remediation": "Provide a valid DOI. Make sure the field contains only the DOI string (eg. 10.1109/5.771073), not the URL." }, "doi_missing_reason_presence_check": { "failure": "No DOI or MissingReason provided.", @@ -911,4 +911,4 @@ }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." } -} \ No newline at end of file +} diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 351cfd39..7bb6ce1e 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -700,6 +700,11 @@ "fields": [ "Collection/DOI/DOI" ] + }, + { + "fields": [ + "Collection/AssociatedDOIs/AssociatedDOI/DOI" + ] } ], "dif10": [ @@ -734,6 +739,11 @@ "fields": [ "PublicationReferences/DOI/DOI" ] + }, + { + "fields": [ + "AssociatedDOIs/DOI" + ] } ] }, From 35024b5d90d3d6cd2e8e85a56b75a803e7a86f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 27 Apr 2022 16:17:30 -0500 Subject: [PATCH 144/261] Update doi check to add accurate invalid value --- pyQuARC/code/url_validator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index fe928f34..aa65c565 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -95,11 +95,11 @@ def doi_check(doi): Returns: (dict) An object with the validity of the check and the instance/results """ + valid = False if doi.strip().startswith("10."): # doi always starts with "10." url = f"https://www.doi.org/{doi}" - return UrlValidator.health_and_status_check(url) - else: - return {"valid": False, "value": doi} + valid = UrlValidator.health_and_status_check(url).get("valid") + return {"valid": valid, "value": doi} @staticmethod @if_arg From 11bd14bb9d047aa7afbb4f02cadfa3f5b0f1def8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 28 Apr 2022 11:41:34 -0500 Subject: [PATCH 145/261] Add support for date in dif10 datetime fields --- CHANGELOG.md | 8 ++ pyQuARC/code/datetime_validator.py | 52 ++++++++++-- pyQuARC/code/scheduler.py | 14 ++-- pyQuARC/schemas/check_messages.json | 8 ++ pyQuARC/schemas/checks.json | 7 +- pyQuARC/schemas/rule_mapping.json | 119 ++++++++++++++++++++++------ 6 files changed, 169 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5916151c..253dc1cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ # CHANGELOG +## v1.1.6 + +- Prioritized field dependencies to check dependencies +- Added collection `version` to collection datetime validation with granules for accuracy +- Allowed DIF10 datetime fields to support ISO Date (not just ISO Datetime) +- Generalized and renamed `datetime_compare` check to `date_compare` + ## v1.1.5 + - Added reader for specific columns from GCMD csvs - Fixed bug to handle cases when there are multiple entries for same shortname but the first entry has missing long name diff --git a/pyQuARC/code/datetime_validator.py b/pyQuARC/code/datetime_validator.py index 9ad33198..fdf24de4 100644 --- a/pyQuARC/code/datetime_validator.py +++ b/pyQuARC/code/datetime_validator.py @@ -40,6 +40,24 @@ def _iso_datetime(datetime_string): pass return False + @staticmethod + def _iso_date(date_string): + """ + Converts the input date string to iso datetime object + + Args: + date_string (str): the datestring + + Returns: + (datetime.datetime) If the string is valid iso string, False otherwise + """ + + try: + value = datetime.strptime(date_string, "%Y-%m-%d") + return value + except: + return False + @staticmethod @if_arg def iso_format_check(datetime_string): @@ -58,6 +76,24 @@ def iso_format_check(datetime_string): "value": datetime_string, } + @staticmethod + @if_arg + def date_datetime_format_check(datetime_string): + """ + Performs the Date/DateTime Format Check + Checks if the datetime_string is a valid ISO date or ISO datetime string + + Args: + datetime_string (str): The date or datetime string + + Returns: + (dict) An object with the validity of the check and the instance + """ + return { + "valid": bool(DatetimeValidator._iso_datetime(datetime_string)) or bool(DatetimeValidator._iso_date(datetime_string)), + "value": datetime_string, + } + @staticmethod @if_arg def compare(first, second, relation): @@ -66,8 +102,8 @@ def compare(first, second, relation): Returns: (dict) An object with the validity of the check and the instance """ - first = DatetimeValidator._iso_datetime(first) - second = DatetimeValidator._iso_datetime(second) + first = DatetimeValidator._iso_datetime(first) or DatetimeValidator._iso_date(first) + second = DatetimeValidator._iso_datetime(second) or DatetimeValidator._iso_date(second) if not(second): second = datetime.now().replace(tzinfo=pytz.UTC) # Making it UTC for comparison with other UTC times result = BaseValidator.compare(first, second, relation) @@ -77,7 +113,7 @@ def compare(first, second, relation): } @staticmethod - def validate_datetime_against_granules(datetime, collection_shortname, sort_key, time_key): + def validate_datetime_against_granules(datetime, collection_shortname, version, sort_key, time_key): """ Validates the collection datetime against the datetime of the last granule in the collection @@ -89,7 +125,7 @@ def validate_datetime_against_granules(datetime, collection_shortname, sort_key, Returns: (dict) An object with the validity of the check and the instance """ - granules = requests.get(f'{CMR_URL}/search/granules.json?short_name={collection_shortname}&sort_key[]=-{sort_key}').json() + granules = requests.get(f'{CMR_URL}/search/granules.json?short_name={collection_shortname}&version={version}&sort_key[]={sort_key}').json() if len(granules['feed']['entry']) > 0: last_granule = granules['feed']['entry'][0] @@ -102,7 +138,7 @@ def validate_datetime_against_granules(datetime, collection_shortname, sort_key, @staticmethod @if_arg - def validate_ending_datetime_against_granules(ending_datetime, collection_shortname): + def validate_ending_datetime_against_granules(ending_datetime, collection_shortname, version): """ Validates the collection EndingDatetime against the datetime of the last granule in the collection @@ -116,13 +152,14 @@ def validate_ending_datetime_against_granules(ending_datetime, collection_shortn return DatetimeValidator.validate_datetime_against_granules( ending_datetime, collection_shortname, - 'end_date', + version, + '-end_date', 'time_end' ) @staticmethod @if_arg - def validate_beginning_datetime_against_granules(beginning_datetime, collection_shortname): + def validate_beginning_datetime_against_granules(beginning_datetime, collection_shortname, version): """ Validates the collection BeginningDateTime against the datetime of the last granule in the collection @@ -136,6 +173,7 @@ def validate_beginning_datetime_against_granules(beginning_datetime, collection_ return DatetimeValidator.validate_datetime_against_granules( beginning_datetime, collection_shortname, + version, 'start_date', 'time_start' ) diff --git a/pyQuARC/code/scheduler.py b/pyQuARC/code/scheduler.py index 974a3c59..e212d97b 100644 --- a/pyQuARC/code/scheduler.py +++ b/pyQuARC/code/scheduler.py @@ -27,13 +27,13 @@ def get_all_dependencies(self, rule_id, check, field_dict=None): dependencies_from_fields = [] if field_dict: - dependencies_from_fields = field_dict.get("dependencies", []) - else: - rule = self.rule_mapping.get(rule_id) - if field_objects := rule.get("fields_to_apply").get(self.metadata_format): - for field_object in field_objects: - if field_dependencies := field_object.get("dependencies"): - dependencies_from_fields.extend(field_dependencies) + return dependencies_from_fields + + rule = self.rule_mapping.get(rule_id) + if field_objects := rule.get("fields_to_apply").get(self.metadata_format): + for field_object in field_objects: + if field_dependencies := field_object.get("dependencies"): + dependencies_from_fields.extend(field_dependencies) dependencies.extend(dependencies_from_fields) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 3cd8950b..ffcbfb0c 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -7,6 +7,14 @@ }, "remediation": "Make sure the datetime complies with ISO 1601 standard." }, + "date_datetime_format_check": { + "failure": "`{}` does not adhere to the ISO 1601 standard for date or datetime.", + "help": { + "message": "", + "url": "https://www.w3.org/TR/NOTE-datetime" + }, + "remediation": "Make sure the date or datetime complies with ISO 1601 standard." + }, "data_update_time_logic_check": { "failure": "The UpdateTime `{}` comes before the provided InsertTime `{}`.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 8843543c..f025952e 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -1,5 +1,5 @@ { - "date_compare": { + "datetime_compare": { "data_type": "datetime", "check_function": "compare", "dependencies": [ @@ -14,6 +14,11 @@ "check_function": "iso_format_check", "available": true }, + "date_datetime_format_check": { + "data_type": "datetime", + "check_function": "date_datetime_format_check", + "available": true + }, "url_check": { "data_type": "url", "check_function": "health_and_status_check", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index dd481d9b..f14ecdad 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -17,12 +17,17 @@ "DIF/Metadata_Dates/Data_Last_Revision", "DIF/Metadata_Dates/Data_Creation" ], - "relation": "gte" + "relation": "gte", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] } ] }, "severity": "info", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "data_revision_date_logic_check": { "rule_name": "Data Revision Date Logic Check", @@ -42,12 +47,17 @@ "DIF/Metadata_Dates/Metadata_Last_Revision", "DIF/Metadata_Dates/Metadata_Creation" ], - "relation": "gte" + "relation": "gte", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] } ] }, "severity": "info", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "range_date_time_logic_check_1": { "rule_name": "Range Date Time Logic Check", @@ -67,12 +77,17 @@ "DIF/Temporal_Coverage/Range_DateTime/Beginning_Date_Time", "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time" ], - "relation": "lte" + "relation": "lte", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] } ] }, "severity": "error", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "range_date_time_logic_check_2": { "rule_name": "Range Date Time Logic Check", @@ -92,12 +107,17 @@ "DIF/Temporal_Coverage/Range_DateTime/Beginning_Date_Time", "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time" ], - "relation": "neq" + "relation": "neq", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] } ] }, "severity": "warning", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "project_date_time_logic_check_1": { "rule_name": "Project Date Time Logic Check", @@ -117,12 +137,17 @@ "DIF/Project/Start_Date", "DIF/Project/End_Date" ], - "relation": "lte" + "relation": "lte", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] } ] }, "severity": "error", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "project_date_time_logic_check_2": { "rule_name": "Project Date Time Logic Check", @@ -142,12 +167,17 @@ "DIF/Project/Start_Date", "DIF/Project/End_Date" ], - "relation": "neq" + "relation": "neq", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] } ] }, "severity": "warning", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "periodic_date_time_logic_check": { "rule_name": "Periodic Date Time Logic Check", @@ -167,19 +197,29 @@ "DIF/Temporal_Coverage/Periodic_DateTime/Start_Date", "DIF/Temporal_Coverage/Periodic_DateTime/End_Date" ], - "relation": "lt" + "relation": "lt", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] }, { "fields": [ "DIF/Temporal_Coverage/Paleo_DateTime/Paleo_Start_Date", "DIF/Temporal_Coverage/Paleo_DateTime/Paleo_Stop_Date" ], - "relation": "lt" + "relation": "lt", + "dependencies": [ + [ + "date_datetime_format_check" + ] + ] } ] }, "severity": "error", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "datetime_format_check": { "rule_name": "Datetime ISO Format Check", @@ -240,7 +280,13 @@ "Collection/Campaigns/Campaign/EndDate" ] } - ], + ] + }, + "severity": "error" + }, + "date_datetime_format_check": { + "rule_name": "Date or Datetime ISO Format Check", + "fields_to_apply": { "dif10": [ { "fields": [ @@ -319,7 +365,8 @@ } ] }, - "severity": "error" + "severity": "error", + "check_id": "date_datetime_format_check" }, "url_check": { "rule_name": "URL Health and Status Check", @@ -579,7 +626,7 @@ "gte" ], "severity": "info", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "doi_missing_reason_enumeration_check": { "rule_name": "DOI Missing Reason Enumeration Check", @@ -1951,7 +1998,8 @@ { "fields": [ "Collection/Temporal/RangeDateTime/EndingDateTime", - "Collection/ShortName" + "Collection/ShortName", + "Collection/VersionId" ] } ], @@ -1959,9 +2007,15 @@ { "fields": [ "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time", - "DIF/Entry_ID/Short_Name" + "DIF/Entry_ID/Short_Name", + "DIF/Entry_ID/Version" ] } + ], + "dependencies": [ + [ + "date_datetime_format_check" + ] ] }, "severity": "warning" @@ -1973,7 +2027,8 @@ { "fields": [ "Collection/Temporal/RangeDateTime/BeginningDateTime", - "Collection/ShortName" + "Collection/ShortName", + "Collection/VersionId" ] } ], @@ -1981,7 +2036,13 @@ { "fields": [ "DIF/Temporal_Coverage/Range_DateTime/Beginning_Date_Time", - "DIF/Entry_ID/Short_Name" + "DIF/Entry_ID/Short_Name", + "DIF/Entry_ID/Version" + ], + "dependencies": [ + [ + "date_datetime_format_check" + ] ] } ] @@ -1995,11 +2056,21 @@ { "fields": [ "DIF/Metadata_Dates/Metadata_Future_Review" + ], + "dependencies": [ + [ + "date_datetime_format_check" + ] ] }, { "fields": [ "DIF/Metadata_Dates/Data_Future_Review" + ], + "dependencies": [ + [ + "date_datetime_format_check" + ] ] } ] @@ -2009,7 +2080,7 @@ "gte" ], "severity": "info", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "iso_topic_category_check": { "rule_name": "ISO Topic Category Vocabulary Check", @@ -2217,7 +2288,7 @@ "neq" ], "severity": "info", - "check_id": "date_compare" + "check_id": "datetime_compare" }, "url_desc_presence_check": { "rule_name": "Online Description Presence Check", From 1b25bf2af108c2b6aaf123cdc6c769c1f698fa41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 28 Apr 2022 12:00:24 -0500 Subject: [PATCH 146/261] Update GCMD keyword url --- pyQuARC/code/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index d2212db5..5a722059 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -63,7 +63,7 @@ "bright": Style.BRIGHT } -GCMD_BASIC_URL = "https://gcmdservices.gsfc.nasa.gov/kms/concepts/concept_scheme/" +GCMD_BASIC_URL = "https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/" GCMD_LINKS = { keyword: f"{GCMD_BASIC_URL}{keyword}?format=csv" for keyword in GCMD_KEYWORDS From 2b0b6bbf1b54adb50e09531439f43c4a54e7e08a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 28 Apr 2022 13:47:12 -0500 Subject: [PATCH 147/261] Add sensor number check --- pyQuARC/code/custom_validator.py | 12 ++++++++++++ pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/checks.json | 5 +++++ pyQuARC/schemas/rule_mapping.json | 5 ++++- 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 40c463de..c904ec42 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -211,3 +211,15 @@ def get_data_url_check(metadata_json): "valid": validity, "value": value } + + @staticmethod + @if_arg + def count_check(count, values, key): + sensors = values.get(key, []) + if not isinstance(sensors, list): + sensors = [sensors] + num_sensors = len(sensors) + return { + "valid": int(count) == num_sensors, + "value": (count, num_sensors) + } diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index ffcbfb0c..0ff8f8a0 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -782,5 +782,13 @@ "url": "" }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "sensor_number_check": { + "failure": "The NumberOfSensors value `{}` does not match with the number of sensors provided `{}`.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Make sure they match." } } diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index f025952e..bb9a5371 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -243,5 +243,10 @@ "data_type": "custom", "check_function": "get_data_url_check", "available": true + }, + "count_check": { + "data_type": "custom", + "check_function": "count_check", + "available": true } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f14ecdad..7a46ae44 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2439,11 +2439,14 @@ { "fields": [ "DIF/Platform/Instrument/NumberOfSensors", - "DIF/Platform/Instrument/Sensor/Short_Name" + "DIF/Platform/Instrument" ] } ] }, + "data": [ + "Sensor" + ], "severity": "error", "check_id": "count_check" } From 1e0d6c21421e90a789bf34a586b1b531394cf952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 28 Apr 2022 13:51:06 -0500 Subject: [PATCH 148/261] Update version --- CHANGELOG.md | 2 +- pyQuARC/version.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83465c39..67bebcff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # CHANGELOG -## v2.0.0 +## v1.2.0 - Added support for [UMM-JSON](https://earthdata.nasa.gov/esdis/esco/standards-and-references/eso-umm-information) collection level metadata - Added support for some UMM fields that look like the following: diff --git a/pyQuARC/version.txt b/pyQuARC/version.txt index e25d8d9f..26aaba0e 100644 --- a/pyQuARC/version.txt +++ b/pyQuARC/version.txt @@ -1 +1 @@ -1.1.5 +1.2.0 From 129bb06808a0a7aa99203c371f80695b60587678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 28 Apr 2022 13:59:01 -0500 Subject: [PATCH 149/261] Updated `CHANGELOG` --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 253dc1cd..f1902b6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - Added collection `version` to collection datetime validation with granules for accuracy - Allowed DIF10 datetime fields to support ISO Date (not just ISO Datetime) - Generalized and renamed `datetime_compare` check to `date_compare` +- Updated auto GCMD keywords downloader to use the new GCMD url +- Added sensor number check ## v1.1.5 From d8ab9ba499f35f94763096e56ab7d8ef55ad0a5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 28 Apr 2022 14:28:24 -0500 Subject: [PATCH 150/261] Add support for `echo-g` --- pyQuARC/code/constants.py | 5 +- pyQuARC/schemas/echo-g_schema.xsd | 1997 +++++++++++++++++++++++ pyQuARC/schemas/rule_mapping.json | 7 + tests/fixtures/test_cmr_metadata.echo-g | 181 ++ 4 files changed, 2188 insertions(+), 2 deletions(-) create mode 100644 pyQuARC/schemas/echo-g_schema.xsd create mode 100644 tests/fixtures/test_cmr_metadata.echo-g diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index 5d565f3d..62e04c9b 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -5,8 +5,9 @@ ECHO10 = "echo10" UMM_C = "umm-c" UMM_G = "umm-g" +ECHO10G = "echo-g" -SUPPORTED_FORMATS = [DIF, ECHO10, UMM_C, UMM_G] +SUPPORTED_FORMATS = [DIF, ECHO10, UMM_C, UMM_G, ECHO10G] ROOT_DIR = ( # go up one directory @@ -45,7 +46,7 @@ f"{UMM_G}-json-schema" ], "csv": GCMD_KEYWORDS, - "xsd": [ f"{DIF}_schema", f"{ECHO10}_schema" ], + "xsd": [ f"{DIF}_schema", f"{ECHO10}_schema", f"{ECHO10G}_schema" ], "xml": [ "catalog" ] } diff --git a/pyQuARC/schemas/echo-g_schema.xsd b/pyQuARC/schemas/echo-g_schema.xsd new file mode 100644 index 00000000..ddb5b36d --- /dev/null +++ b/pyQuARC/schemas/echo-g_schema.xsd @@ -0,0 +1,1997 @@ + + + + + + The main element that holds all granules + being ingested. + + + + + + + + + + + + + + Name of data center where this metadata + file was originated. + + + + + + + + + + + The granules to insert or replace. A + replace will be performed automatically if a granule + already exists. + + + + + Partial metadata adds to be applied to + granules. The metadata will be updated if the referenced + field already exists. + + + + + Partial metadata deletes to be applied + to granules + + + + + Granules that should be immediately + deleted. To set a future delete time, use a partial + metadata update. + + + + + Granules to be verified. Each granule + supplied will be matched with the current instance in + ECHO in order to find any metadata mismatches. The + supplied granules will then be inserted or + replaced. + + + + + Inventories of granules to be checked + for existence in ECHO. Supplying zero inventories + indicates that existence checking should be + skipped. + + + + + + + List of granules + + + + + + + + + Stores the basic descriptive characteristics + associated with a granule. + Adopted from Release B Science Data Processing + Segment (SDPS) for the ECS Project. Refer to 311-CD-008-001 + May 15, 1996. Additional attributes been added for book + keeping information. + + + + + + + The date/time this granule was entered + data provider's database. + + + + + The date/time that data provider last + updated the granule info on data provider's + database. + + + + + The date/time that data provider + deleted the granule from data provider's + database. + + + + + This entity holds the reference + information from a granule to a collection. Granule + referencing the collection either by collection short + name and collection version or by collection dataset + ID. + + + + + The numerical value indicates the type + of the restriction that applies on the granule for data + access. + + + + + The restriction comment applied on the + granule for data access. This data could be defined for + each granule. If there is no restriction comment given + for the granule, the restriction comment of its primary + collection will be used if applicable. + + + + + + + + + + + This entity stores basic descriptive + characteristics associated with a + granule. + + + + + This entity stores basic descriptive + characteristics related to the Program Generation + Executable associated with a granule. + + + + + This entity contains records, which + describe the basis of the time system used for a specific + collection. + + + + + Holds granule spatial domain + information. + + + + + 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. + + + + + Names of the geophysical parameter + expressed in the data as well as associated quality flags + and quality status. + + + + + References to the relevant platforms + associated with the acquisition of the + granule. + + + + + References to attributes describing the + scientific endeavor(s) to which the collection is + associated. Scientific endeavors include campaigns, + projects, interdisciplinary science investigations, + missions, field experiments, etc. + + + + + An additional attribute for the + granule. The attribute name and type must exist in the + parent collection for this granule. Additional attributes + are the same as PSAs. + + + + + This entity contains the identification + of the input granules for a specific + granule. + + + + + This entity stores the two dimensional + coordinate system information for the granule. The two + dimensional coordinate 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 price of the granule data when + order. + + + + + This entity stores the online URL(s) + for the collections if there is any. Those URLs either + provide the site where the user can obtain collection + data or give the further instruction of obtaining the + collection data. + + + + + This entity holds all types of online + URL associated with the granule such as guide document or + ordering site etc. + + + + + Indication of whether the granule is + orderable. + + + + + The file format of the raw data (such + as HDF) for this granule. + + + + + + + + + + + +

Indication of whether the granule is visible or not. + Visibility is a basic access control mechanism that + bypasses all ACL rules. If a granule is not visible, + only users with the owning provider role will be able + to see the item. All other users will not see the item + no matter what ACL permissions are in place.

+

If group based permissions are needed, use the + restriction flag field instead of visibility. Normally + visibility is used when an item is first ingested. + Making the item not visible allows the provider time to + install any ACL rules or order options required before + users will see the item. Visibility is more commonly + set at the collection level than the granule level. If + a collection is not visible, none of the granules in + the collection will be visible.

+
+
+
+ + + A percentage value indicating how much + of the area of a granule (the ECS data unit) has been + obscured by clouds. It is worth noting that there are + many different measures of cloud cover within the ECS + data holdings and that the cloud cover parameter that is + represented in the DataPool is specific to Data + Set. + + + + + + + + The list of browse images associated + with this granule. + + + + + The list of browse image urls + associated with this granule. + + + +
+
+ + + This entity stores the basic descriptive + characteristics associated with a granule. + + + + + 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 SizeMBDataGranule element. The issue with SizeMBDataGranule is that end + users don't know if the size was 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. + + + + + The size attribute will indicate the volume of data contained in + the granule. Please use DataGranuleSizeInBytes for the size of the granule. The issue + with this element is that end users don't know if the size was 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. + + + + + Allows the provider to provide the checksum value for the file. + + + + + Granule level, stating what + reprocessing may be performed on this + granule. + + + + + + + + + + + Granule level, stating what + reprocessing has been performed on this + granule. + + + + + + + + + + + Unique identifier for locally produced + granule that ECS ingests and is required to + capture. + + + + + + + + + + + This attribute is used to identify if a + granule was collected during the day, night (between + sunset and sunrise) or both. + + + + + The date and time a specific granule + was produced by a PGE. + + + + + Granule version identifier for PGE + defined granule defined by the + producer. + + + + + + + + + + + If a granule contains more than 1 data file, + the rest of the files can be described in this element. + + + + + + + Allows the provider to describe other granule files if more than 1 exists. + + + + + This field describes the name of the actual file. + + + + + + + + + + + The size in Bytes of the volume of data contained in the granule. + Bytes are defined as eight bits. + + + + + The file format of the raw data (such + as HDF) for this granule. + + + + + + + + + + + The file mime-type of the raw data (such + as application/x-hdf) for this granule. + + + + + + + + + + + Allows the provider to provide the checksum value for the file. + + + + + + + Allows the provider to provide a checksum value and checksum algorithm + name to allow the user to calculate the checksum. If Checksum is used both the value and the algorithm are required. + + + + + Describes the checksum value for a file. + + + + + + + + + + + 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. + + + + + + + + + + + + + + + + + + + + + + + + This entity stores the basic descriptive + characteristics associated with a granule. + + + + + Name of product generation + executive. + + + + + + + + + + + Version of the Delivered Algorithm + Package that applied when produce the + granule. + + + + + + + + + + + + + This is a pseudo entity to hold granule + spatial domain information. + + + + + 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. + + + + + This entity contains the domain value + and type for the granule's vertical spatial + domain. + + + + + This is a pseudo entity to hold granule + horizontal spatial domain information. + + + + + + + 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. + + + + + 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. + + + + + + + + + + + + + This is a pseudo entity to hold granule + horizontal spatial domain information. + + + + + The appropriate numeric or alpha code + used to identify the various zones in this grid + coordinate system. + + + + + + + + + + + + + This entity stores orbital coverage + information of the granule. This coverage is an + alternative way of express granule spatial coverage. + This information supports orbital backtrack search + apply on granule. + + + + + + + + This entity holds the geometry representing + the spatial coverage information of a + granule. + + + + + The horizontal spatial coverage of a + point. + + + + + This entity holds the horizontal + spatial coverage of a line. ECHO stores horizontal + spatial coverage bounding rectangle type information + using oracle spatial type expression as a four points + polygon. + + + + + A GPolygon represents an area on the + earth represented by a main boundary with optional + boundaries excluded regions from the main + boundary. + + + + + This entity holds the horizontal + spatial coverage of a line. A line area contains at least + two points expressed with (PointLongitude, + PointLatitude). A Line entity forms with at least two + Point entity. ECHO stores horizontal spatial coverage + Line type information using oracle spatial type + expression. + + + + + + + This entity stores orbital coverage + information of the granule. This coverage is an alternative + way of express granule spatial coverage. This information + supports orbital backtrack search apply on + granule. + + + + + 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). + + + + + Granule's starting + latitude. + + + + + Ascending or descending. Valid input: + "A" or "D". + + + + + Granule's ending + latitude. + + + + + Ascending or descending. Valid input: + "A" or "D". + + + + + Granule's horizontal spatial coverage + of a point. + + + + + + + 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. + + + + + + + + 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. + + + + + The reference to the orbital model to + be used to calculate the geo-location of this data in + order to determine global spatial + extent. + + + + + + + + + + + The orbit number to be used in + calculating the spatial extent of this + data. + + + + + Orbit number at start of data + granule. + + + + + Orbit number at end of data + granule. + + + + + This attribute represents the + terrestrial longitude of the descending equator + crossing. + + + + + This attribute represents the date and + time of the descending equator + crossing. + + + + + + + This entity contains the name of the + geophysical parameter expressed in the data as well as + associated quality flags and quality status. The quality + status 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. + + + + + + + + This entity contains the name of the + geophysical parameter expressed in the data as well as + associated quality flags and quality status. The quality + status 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. + + + + + The measured science parameter + expressed in the data granule. + + + + + + + + + + + The name of the geophysical parameter + expressed in the data as well as associated quality flags + and quality status. + + + + + The name of the geophysical parameter + expressed in the data as well as associated quality flags + and quality status. + + + + + + + This entity contains the name of the + geophysical parameter expressed in the data as well as + associated quality flags and quality status. The quality + status 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. + + + + + Granule level % missing data. This + attribute can be repeated for individual parameters + within a granule. + + + + + Granule level % out of bounds data. + This attribute can be repeated for individual parameters + within a granule. + + + + + Granule level % interpolated data. This + attribute can be repeated for individual parameters + within a granule. + + + + + 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) + + + + + + + This entity contains the name of the + geophysical parameter expressed in the data as well as + associated quality flags and quality status. The quality + status 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. + + + + + 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. + + + + + + + + + + + A text explanation of the criteria used + to set automatic quality flag; including thresholds or + other criteria. + + + + + + + + + + + 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. + + + + + + + + + + + A text explanation of the criteria used + to set operational quality flag; including thresholds or + other criteria. + + + + + + + + + + + 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. + + + + + + + + + + + A text explanation of the criteria used + to set science quality flag; including thresholds or + other criteria. + + + + + + + + + + + + + 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, AM-1, Aqua, Aura, BALLOONS, BUOYS, + C-130, DEM, DMSP-F1, ERS-1, GOES-10, LANDSAT-1, METEOSAT-2, + NIMBUS-2, NOAA-6, TERRA, TRMM, etc. + + + + + The unique platform name. (e.g. + GOES-8). + + + + + + + + + + + References to the devices in the parent + collection that were used to measure or record data, + including direct human observation. + + + + + + + + + + + + This entity is used to reference + characteristics defined in the parent + collection. + + + + + The name of the characteristic + attribute. + + + + + + + + + + + The value of the Characteristic + attribute. + + + + + + + + + + + + + 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 sensor or the instrument and sensor are used + synonymously (e.g. AVHRR) the both Instrument and Sensor + should be recorded. The Sensor 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. + + + + + The unique identifier of an + instrument. + + + + + + + + + + + This entity is used to define item + additional attributes (unprocessed, custom + data). + + + + + References to sensory subcomponents in + the parent collection's instrument used by various + sources in the granule. A sensor reference may contain + characteristics specific to the + granule. + + + + + 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). + + + + + + + A reference to a sensory subcomponent in + the parent collection's instrument used by various sources in + this granule. A sensor reference may contain characteristics + specific to the granule. These characteristics are not + checked against the referenced sensor. + + + + + A sensor is a defined sensory + sub-component of an instrument. (e.g. + InstrumentShortName=ASTER, NumberofSensors= 3, + SensorShortName= SWIR, SensorShortName= TIR, + SensorShortName= VNIR) In cases where the Instrument has + a single Sensor or the Instrument and Sensor are + synonymous then both attributes should be populated. + (e.g. AVHRR). Sensors cannot exist without + Instruments. + + + + + + + + + + + + + + This entity contains attributes describing + the scientific endeavor(s) to which the collection is + associated. Scientific endeavors include campaigns, projects, + interdisciplinary science investigations, missions, field + experiments, etc. Seems to be a reference to one that exists + at collection level. + + + + + The unique identifier by which a + campaign/project/experiment is known. The campain/project + is the scientific endeavor associated with the + acquisition of the collection. Collections may be + associated with multiple campaigns. + + + + + + + + + + + + + This entity stores the Product Specific + Attributes with value a granule + associates. + + + + + + + + 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. + + + + + Additional attribute + name. + + + + + + + + + + + The ordered list of values of the + additioanl attribute for this granule. The values will be + kept in the order which they appear. + + + + + + + This entity contains the identification of + the input granule(s) for a specific + granule. + + + + + + + + + + + + + + + + This entity stores the two dimensional coordinate + system information for the granule. The two dimensional + coordinate 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 following discussion on Landsat's PATH/ROW is + an example of grid information. The Path is the + longitudinal center line of a Landsat scene corresponding + to the center of an orbital track that represented by grid + Y lines. + The Row is the Latitudinal center line of a Landsat + scene that corresponding to grid X lines. The indication of + the two dimensional coordinate system type is "WRS-2". The + two dimensional coordinate system information can be used + to designate a geographic search for a nominal scene + center. + + + + + + The horizontal starting line of the + nominal scene center based on the coordinate system. This + value could be either entered directly as part of + metadata or extracted from PSA value based on a + pre-defined PSA name. + + + + + The horizontal ending line of the + nominal scene center based on the coordinate system. This + value could be either entered directly as part of + metadata or extracted from PSA value based on a + pre-defined PSA name. + + + + + The vertical starting line of the + nominal scene center based on the coordinate system. This + value could be either entered directly as part of + metadata or extracted from PSA value based on a + pre-defined PSA name. + + + + + The vertical ending line of the nominal + scene center based on the coordinate system. This value + could be either entered directly as part of metadata or + extracted from PSA value based on a pre-defined PSA + name. + + + + + The type of the two dimensional + coordinate system defined by the providers such as + "WRS-2" for Landsat scene. + + + + + + + + + + + + + + + + + + Granule that should be immediately + deleted. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Orbit start and end direction. A for + ascending orbit and D for descending. + + + + + + + + + A list of fields that can be updated on a + granule. + + + + + A single field to be + updated. + + + + + + + A field to be added to a granule. Not all + fields of a granule support partial updates. If an update is + required for a non-supported field, perform a complete + granule replacement rather than a partial metadata + update. + + + + + + + Updates a link to a browse image. + The browse image's ProviderBrowseId must be provided + to identify it. + + + + + Updates a link to a browse image. + The browse image's ProviderBrowseUrl must be provided + to identify it. + + + + + + Updates an online access URL. The URL + will be used as the key to identify the online access + URL to be added or replaced. + + + + + Updates an online access URL. The URL + will be used as the key to identify the online resource + to be added or replaced. + + + + + Updates a measured parameter. The + parameter name will be used as the key to identify the + measured parameter to be added or replaced.The entire + measured parameter will be added or + replaced. + + + + + Updates an additional attribute + reference. The attribute name will be used as the key + to identify the additional attribute reference to be + added or replaced.The entire additional attribute + reference will be added or replaced. + + + + + Updates the temporal information for + the granule. The entire temporal information will be + replaced during an add. Refer to the Granule + documentation for more information. + + + + + The day/night flag to update. Refer + to the Granule documentation for more + information. + + + + + Updates the delete time of the + granule. Refer to the Granule documentation for more + information. + + + + + Updates the cloud cover of the + granule. Refer to the Granule documentation for more + information. + + + + + Updates the restriction flag of the + granule. Refer to the Granule documentation for more + information. + + + + + Updates the visible flag of the + granule. Refer to the granule documentation for more + information. + + + + + Updates the spatial coverage for the + granule. The entire spatial coverage will be replaced + during an add. Refer to the Granule documentation for + more information. + + + + + + The fields that should be targeted by + this update. Only the fields in this list will be updated + and the other fields in the added element will be + ignored. This element is only for backward compatibility + and should not be used for new development. This field + will be removed in the future. + + + + + Indicates the previous value held by an + updated field. This will only be set when updating + primary key values explicitly using the + UpdateTargetFields. This element is only for backward + compatibility and should not be used for new development. + This field will be removed in the + future. + + + + + + + + + + + + This entity contains records, which + describe the basis of the time system used for a specific + collection. + + + + + This entity stores the start and end + date/time of a collection. + + + + + This entity stores the time of day and + calendar date for an ECS collection. This information + provides a means of encoding a single date and time for a + granule occurring at that time or during the period + covered by the time (e.g. one-day for a single date + excluding the time within the day). + + + + + + + A list of fields to be deleted from a + granule. + + + + + + + + The field that should be deleted. Some + fields require a value to indicate the key of the field to + the correct instance can be identified. + + + + + Deletes a link to the browse image with + the specified ProviderBrowseId. + + + + + Deletes an online access URL with the + given value. The entire URL element will be deleted. The + value of this element should be the + URL. + + + + + + + + + + + Deletes an online resource URL with the + given value. The entire URL element will be deleted. The + value of this element should be the + URL. + + + + + + + + + + + Deletes the measured parameter. The + value of this element should be the measured parameter + name. The entire measured parameter will be + deleted. + + + + + + + + + + + Deletes an additional attribute + reference from the granule. The value of this element + should be the additional attribute + name. + + + + + + + + + + + Deletes the temporal information from + the granule. + + + + + Deletes the day/night flag from the + granule. + + + + + Deletes the remove time from the + granule. The granule will no longer be automatically + removed. + + + + + Deletes the cloud cover information + from the granule. + + + + + Deletes the restriction flag from the + granule. + + + + + Indicates that all online access URLs + should be deleted from the granules. + + + + + Indicates that all online resources + should be deleted from the granules. + + + + + Indicates that all additional + attributes should be deleted from the + granules. + + + + + Indicates that all links to browse + images should be deleted from the + granules. + + + + + Deletes the spatial coverage from the + granule. + + + + + + + A target field for an update that should + only affect a single field of the metadata. This type is only + for backward compatibility and should not be used for new + development. + + + + + + + + + + + + + + + + + + + + + + A list of single fields that are the target + of the update. + + + + + A single field that is the target of + the update. + + + + + + + A partial add to be applied to a granule. + The partial add may contain one or more fields. If the field + being updated contains a unique key and the field already + exists, it will be updated or replaced, otherwise it will be + added. Refer to the individual field documentation for + details. + + + + + The list of granules to + update. + + + + + The fields that should be added to the + referenced granule. If the field already exists in the + collection, it will be updated or + replaced. + + + + + + + A partial delete to be applied to a + granule. The partial delete may contain one or more fields. + If a delete is attempted the field will be set to a default + value. Refer to the individual field documentation for + details. + + + + + The list of granules to + update. + + + + + The fields that should be deleted from + the granule. + + + + + + + A list of granule partial metadata + adds. + + + + + A single granule partial metadata + add. + + + + + + + A list of granule partial metadata + deletes. + + + + + A single granule partial metadata + delete. + + + + + + + + + + A reference to a granule to be + updated + + + + + The date this change occured in the + provider's database. If this is provided we will validate + that this date is greater than or equal to the date in + the granule. The granule's last update data will be + updated with this value. + + + + + The granule UR of the granule to which + the update will be applied. + + + + + + + A list of granule update + targets. + + + + + A single granule update + target + + + + + + + Possible values for the day night flag. If + no day night flag information is available, the unspecified + value should be used. + + + + + + + + + + + + + + + + + + + + + + + List of granule + inventories. + + + + + + + + An inventory of granules for a given + collection. An empty GranuleURs element represents an + inventory with no granules. + + + + + The parent collection for this granule + inventory. + + + + + The references to granules that are + expected to exist for the given parent collection in + ECHO. + + + + +
diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 0d82db7b..fcfd04d3 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -541,6 +541,13 @@ "OrbitCalculatedSpatialDomains/EquatorCrossingDateTime" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/InsertTime" + ] + } ] }, "severity": "error", diff --git a/tests/fixtures/test_cmr_metadata.echo-g b/tests/fixtures/test_cmr_metadata.echo-g new file mode 100644 index 00000000..d5569791 --- /dev/null +++ b/tests/fixtures/test_cmr_metadata.echo-g @@ -0,0 +1,181 @@ + + SC:ATL08.005:241695844 + 2022-04-15 + 2022-04-15T10:27:27.492Z + + ATLAS/ICESat-2 L3A Land and Vegetation Height V005 + + + 44.2424182892 + ATL08_20220210222256_07731412_005_01.h5 + UNSPECIFIED + 2022-04-06T02:30:43.000Z + + + + 2022-02-10T22:22:59.217Z + 2022-02-10T22:26:32.279Z + + + + + + 125.75586345146665 + -79 + A + -50 + A + + + + + + 19005 + 125.75586345146665 + 2022-02-10T21:09:27.619Z + + + + + https://n5eil01u.ecs.nsidc.org/DP7/ATLAS/ATL08.005/2022.02.10/ATL08_20220210222256_07731412_005_01.h5 + application/x-hdfeos + + + + + https://n5eil01u.ecs.nsidc.org/DP7/ATLAS/ATL08.005/2022.02.10/ATL08_20220210222256_07731412_005_01.iso.xml + USER SUPPORT + text/xml + + + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.default.default1.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.default.default2.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1l.groundtrack.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1l.h_canopy_abs.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1l.h_te_median.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1l.n_ca_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1l.n_te_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1r.groundtrack.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1r.h_canopy_abs.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1r.h_te_median.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1r.n_ca_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt1r.n_te_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2l.groundtrack.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2l.h_canopy_abs.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2l.h_te_median.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2l.n_ca_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2l.n_te_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2r.groundtrack.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2r.h_canopy_abs.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2r.h_te_median.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2r.n_ca_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt2r.n_te_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3l.groundtrack.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3l.h_canopy_abs.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3l.h_te_median.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3l.n_ca_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3l.n_te_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3r.groundtrack.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3r.h_canopy_abs.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3r.h_te_median.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3r.n_ca_photons.jpg + image/jpeg + + + https://n5eil01u.ecs.nsidc.org/DP0/BRWS/Browse.001/2022.04.15/ATL08_20220210222256_07731412_005_01_BRW.gt3r.n_te_photons.jpg + image/jpeg + + + From df40159b428b65222140d0972194cee1cb57484b Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 3 May 2022 13:16:13 -0500 Subject: [PATCH 151/261] Update Instrument Shortname GCMD Check Update instrument_short_name_gcmd_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fcfd04d3..54cca75e 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2256,6 +2256,18 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/ShortName" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName" + ] + } + ], "dif10": [ { "fields": [ From 62c1a298c507d6fc99668af111609b5ad5ebd5c9 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 3 May 2022 13:22:39 -0500 Subject: [PATCH 152/261] Update Platform Shortname GCMD Check Update platform_short_name_gcmd_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 54cca75e..6ca8b8df 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2375,6 +2375,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/ShortName" + ] + } + ], "dif10": [ { "fields": [ From ebf4b431559b094eb21551b5ac6bf08d29446c0a Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 3 May 2022 13:33:36 -0500 Subject: [PATCH 153/261] Update Data Format GCMD Check Update data_format_gcmd_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 6ca8b8df..9cfc7c9b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2477,6 +2477,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/DataFormat" + ] + } + ], "dif10": [ { "fields": [ From e5fa78667e15804496b95d66769d85ab2fb9fa3c Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 3 May 2022 13:57:13 -0500 Subject: [PATCH 154/261] Update Campaign Short Name GCMD Check Update campaign_short_name_gcmd_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 9cfc7c9b..ea44d895 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2738,6 +2738,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Campaigns/Campaign/ShortName" + ] + } + ], "dif10": [ { "fields": [ From 08720f13fec2e24ffe0c146d4b14a25d9b3f4afd Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 3 May 2022 15:01:31 -0500 Subject: [PATCH 155/261] Update Bounding Coordinates Logic Check Update bounding_coordinate_logic_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index ea44d895..21ffa9c1 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2915,6 +2915,16 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/WestBoundingCoordinate", + "Granule/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/NorthBoundingCoordinate", + "Granule/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/EastBoundingCoordinate", + "Granule/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/SouthBoundingCoordinate" + ] + } + ], "dif10": [ { "fields": [ From 2b9102df971d15c39a1f9d5e1b383ecafa73cfef Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 3 May 2022 15:40:39 -0500 Subject: [PATCH 156/261] Update Vertical Spatial Domain Type Check Update vertical_spatial_domain_type_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 21ffa9c1..9430e7c0 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2968,6 +2968,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Spatial/VerticalSpatialDomains/VerticalSpatialDomain/Type" + ] + } + ], "dif10": [ { "fields": [ From 15e1135cdccf9a628ea4ab269638e31edaa89957 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 3 May 2022 16:35:02 -0500 Subject: [PATCH 157/261] Update Campaign Name Presence Check Update campaign_name_presence_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 9430e7c0..ddbaca3e 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3166,6 +3166,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Campaigns/Campaign/ShortName" + ] + } + ], "dif10": [ { "fields": [ From b6d8d65711af9247daffbd6a1537dd3beed626c5 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 4 May 2022 14:40:36 -0500 Subject: [PATCH 158/261] added onlineaccessurl_presence_check --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fcfd04d3..f54c86d1 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3206,6 +3206,13 @@ "Collection/OnlineAccessURLs/OnlineAccessURL/URL" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineAccessURLs/OnlineAccessURL/URL" + ] + } ] }, "severity": "error", From c4bee4f308fada5206e935cc3ca634cc594f68df Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 4 May 2022 16:03:00 -0500 Subject: [PATCH 159/261] Update Online Resource URL Presence Check Update online_resource_url_presence_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index ddbaca3e..6087950c 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3277,6 +3277,13 @@ "Collection/OnlineResources/OnlineResource/URL" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineResources/OnlineResource/URL" + ] + } ] }, "severity": "error", From 114498cb3d6c7dbaf5f76fcab52f6e006878e855 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 4 May 2022 16:10:23 -0500 Subject: [PATCH 160/261] Update Online Access URL Description Check Update online_access_url_description_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 6087950c..36c1bf81 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3298,6 +3298,13 @@ "Collection/OnlineAccessURLs/OnlineAccessURL/URLDescription" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineAccessURLs/OnlineAccessURL/URLDescription" + ] + } ] }, "severity": "info", From 20c7f5130fc854aaef10389971051287b8263e5a Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 4 May 2022 16:16:16 -0500 Subject: [PATCH 161/261] Update Online Resource URL Description Check Update online_resource_url_description_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 36c1bf81..e8660b76 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3320,6 +3320,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineResources/OnlineResource/Description" + ] + } + ], "umm-g": [ { "fields": [ From 9f451fe15212db80b7be179c832f3d9344f9ab99 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 4 May 2022 17:12:13 -0500 Subject: [PATCH 162/261] Update ECHO10 OPeNDAP URL Location Check Update opendap_url_location_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e8660b76..f4ba7b38 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3347,6 +3347,13 @@ "Collection/OnlineAccessURLs/OnlineAccessURL/URL" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineAccessURLs/OnlineAccessURL/URL" + ] + } ] }, "severity": "error", From e0b2c4503235ff7614b1db556cc557461185c582 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 4 May 2022 17:35:24 -0500 Subject: [PATCH 163/261] Update Spatial Extent Requirement Fulfillment Check Update spatial_extent_requirement_fulfillment_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f4ba7b38..e2a56828 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3400,6 +3400,16 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Spatial/HorizontalSpatialDomain/Geometry/Point", + "Granule/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle", + "Granule/Spatial/HorizontalSpatialDomain/Geometry/GPolygon", + "Granule/Spatial/HorizontalSpatialDomain/Geometry/Line" + ] + } + ], "dif10": [ { "fields": [ From acb8f9777cfd7ae4f52dfd4cdf9ffcb3b827c5b9 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 5 May 2022 09:39:37 -0500 Subject: [PATCH 164/261] Update Boolean check Update boolean_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e2a56828..6fc245f9 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3598,6 +3598,18 @@ "Collection/Visible" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/Orderable" + ] + }, + { + "fields": [ + "Granule/Visible" + ] + } ] }, "severity": "error", From bc21a118597f3e78e4965955e1bdb35e98cd1c8d Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 5 May 2022 09:53:11 -0500 Subject: [PATCH 165/261] Update Online Resource Type GCMD Check Update online_resource_type_gcmd_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 6fc245f9..7b1ba355 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3673,6 +3673,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineResources/OnlineResource/Type" + ] + } + ], "umm-c": [ { "fields": [ From 3ca02dd488c59a2de2e4a2c440c22cd9d8250490 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 5 May 2022 10:00:39 -0500 Subject: [PATCH 166/261] Update Online Resource Type Presence Check Update online_resource_type_presence_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 7b1ba355..82f68780 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3709,6 +3709,14 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineResources/OnlineResource/Type", + "Granule/OnlineResources/OnlineResource/URL" + ] + } + ], "umm-c": [ { "fields": [ From c10fcb045fe5a540400b902c6cec8843ab25c0e7 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 5 May 2022 11:43:50 -0500 Subject: [PATCH 167/261] Update Temporal Extent Requirement Check Update temporal_extent_requirement_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 82f68780..a50e8656 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4022,6 +4022,13 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/Temporal/SingleDateTime", + "Granule/Temporal/RangeDateTime" ] + } + ], "dif10": [ { "fields": [ From a802c704b2770535397da62d27278674ffd4069b Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 5 May 2022 12:39:03 -0500 Subject: [PATCH 168/261] Update Online Description Presence Check Update url_desc_presence_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a50e8656..0f0c3357 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4238,6 +4238,20 @@ ] } ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineAccessURLs/OnlineAccessURL/URLDescription", + "Granule/OnlineAccessURLs/OnlineAccessURL/URL" + ] + }, + { + "fields": [ + "Granule/OnlineResources/OnlineResource/Description", + "Granule/OnlineResources/OnlineResource/URL" + ] + } + ], "dif10": [ { "fields": [ From 88081436e2f7b1cfb7482810a9f754917000b988 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 5 May 2022 13:16:52 -0500 Subject: [PATCH 169/261] Update Mime Type GCMD Check Update mime_type_gcmd_check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/rule_mapping.json | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 0f0c3357..08112802 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4377,6 +4377,29 @@ "mime_type_gcmd_check": { "rule_name": "Mime Type GCMD Check", "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/DataGranule/AdditionalFile/MimeType" + ] + }, + { + "fields": [ + "Granule/AssociatedBrowseImageUrls/ProviderBrowseUrl/MimeType" + ] + }, + { + "fields": [ + "Granule/OnlineAccessURLs/OnlineAccessURL/MimeType" + ] + }, + { + "fields": [ + "Granule/OnlineResources/OnlineResource/MimeType" + ] + } + + ], "dif10": [ { "fields": [ From e68faf39ae00a936c43267304a20f04ed03f64a8 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 13:42:57 -0500 Subject: [PATCH 170/261] Added echo-g fields for ISO Datetime format check --- pyQuARC/schemas/rule_mapping.json | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f54c86d1..e2348180 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -547,6 +547,41 @@ "fields": [ "Granule/InsertTime" ] + }, + { + "fields": [ + "Granule/Temporal/RangeDateTime/BeginningDateTime" + ] + }, + { + "fields": [ + "Granule/Temporal/RangeDateTime/EndingDateTime" + ] + }, + { + "fields": [ + "Granule/Temporal/SingleDateTime" + ] + }, + { + "fields": [ + "Granule/LastUpdate" + ] + }, + { + "fields": [ + "Granule/DeleteTime" + ] + }, + { + "fields": [ + "Granule/DataGranule/ProductionDateTime" + ] + }, + { + "fields": [ + "Granule/OrbitCalculatedSpatialDomains/OrbitCalculatedSpatialDomain/EquatorCrossingDateTime" + ] } ] }, From 9e29f99c80321f2ea3d0ce5d5c7ef525d7528ef7 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 14:09:03 -0500 Subject: [PATCH 171/261] Added echo-g fields to range_date_time_check_1 --- pyQuARC/schemas/rule_mapping.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e2348180..4a089352 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -87,6 +87,15 @@ ], "relation": "lte" } + ], + "echo-g": [ + { + "fields": [ + "Granule/Temporal/RangeDateTime/BeginningDateTime", + "Granule/Temporal/RangeDateTime/EndingDateTime" + ], + "relation": "lte" + } ] }, "severity": "error", From 29645b025478917caa115d230de9dc1eb599d8cd Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 14:11:08 -0500 Subject: [PATCH 172/261] Added echo-g fields to range_datetime_logic_check_2 --- pyQuARC/schemas/rule_mapping.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 4a089352..5ae858b9 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -139,6 +139,15 @@ ], "relation": "neq" } + ], + "echo-g": [ + { + "fields": [ + "Granule/Temporal/RangeDateTime/BeginningDateTime", + "Granule/Temporal/RangeDateTime/EndingDateTime" + ], + "relation": "neq" + } ] }, "severity": "warning", From c5e71a74f190cb20b12c8833edd7d6b3b67ee5ba Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 14:21:35 -0500 Subject: [PATCH 173/261] Added echo-g fields to url health and status check --- pyQuARC/schemas/rule_mapping.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 5ae858b9..7ea82e01 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -711,6 +711,23 @@ "MetadataSpecification/URL" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineAccessURLs/OnlineAccessURL/URL" + ] + }, + { + "fields": [ + "Granule/OnlineResources/OnlineResource/URL" + ] + }, + { + "fields": [ + "Granule/AssociatedBrowseImageUrls/ProviderBrowseUrl/URL" + ] + } ] }, "severity": "error", From b91935c3fa6191dd4dac3f33660a3d9c93e8330e Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 14:30:49 -0500 Subject: [PATCH 174/261] Added echo-g field to delete time check --- pyQuARC/schemas/rule_mapping.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 7ea82e01..a07afb20 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1052,6 +1052,13 @@ "ProviderDates/Date?Type=Delete" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/DeleteTime" + ] + } ] }, "data": [ From 8601adf2844c805ad88a646d0fcf622d061889ec Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 14:52:00 -0500 Subject: [PATCH 175/261] Added echo-g fields to data type check --- pyQuARC/schemas/rule_mapping.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a07afb20..a73c10d4 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1411,6 +1411,28 @@ "Platform/Instrument/ComposedOf/Characteristics/DataType" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/AdditionalAttributes/AdditionalAttribute/DataType" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Characteristics/Characteristic/DataType" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/DataType" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/DataType" + ] + } ] }, "data": [ From 73083aa5bad7a2bae1bf525da80fb5cedf7a0f91 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 15:02:03 -0500 Subject: [PATCH 176/261] added echo-g fields for characteristic name check --- pyQuARC/schemas/rule_mapping.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a73c10d4..b73f906b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1528,6 +1528,26 @@ "Platforms/Instruments/ComposedOf/Characteristics" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/Characteristics/Characteristic/Name", + "Granule/Platforms/Platform/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Name", + "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Name", + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic" + ] + } ] }, "severity": "error", From 38208d386a8c45c0f62f812ddffdd53989ece592 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 5 May 2022 15:07:07 -0500 Subject: [PATCH 177/261] Removed characteristic fields for data type check --- pyQuARC/schemas/rule_mapping.json | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index b73f906b..dac6bf15 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1417,21 +1417,6 @@ "fields": [ "Granule/AdditionalAttributes/AdditionalAttribute/DataType" ] - }, - { - "fields": [ - "Granule/Platforms/Platform/Characteristics/Characteristic/DataType" - ] - }, - { - "fields": [ - "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/DataType" - ] - }, - { - "fields": [ - "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/DataType" - ] } ] }, From 118e7835aaafaa241b000cd1210151ed9999c22d Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Thu, 5 May 2022 16:52:48 -0500 Subject: [PATCH 178/261] Update ECHO10 Granule Vertical Spatial Domain ... Update ECHO10 Granule Vertical Spatial Domain Type Check in rule_mapping.json for ECHO10 Granules Renamed "vertical_spatial_domain_type_check_granule" to "vertical_spatial_domain_type_check_granule" in rule_mapping.json and check_messages.json --- pyQuARC/schemas/check_messages.json | 2 +- pyQuARC/schemas/rule_mapping.json | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 68393c1e..6f7a76aa 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -495,7 +495,7 @@ }, "remediation": "Please provide a Vertical Spatial Domain Type from the following options to align with the UMM: ['Atmosphere Layer', 'Maximum Altitude', 'Maximum Depth', 'Minimum Altitude', 'Minimum Depth']" }, - "vertical_spatial_domain_type_check_ummg": { + "vertical_spatial_domain_type_check_granule": { "failure": "The Vertical Spatial Domain Type `{}` does not align with the values used in the UMM-G schema.", "help": { "message": "", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 08112802..ebd4d401 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2968,13 +2968,6 @@ ] } ], - "echo-g": [ - { - "fields": [ - "Granule/Spatial/VerticalSpatialDomains/VerticalSpatialDomain/Type" - ] - } - ], "dif10": [ { "fields": [ @@ -3002,9 +2995,16 @@ "severity": "error", "check_id": "controlled_keywords_check" }, - "vertical_spatial_domain_type_check_ummg": { - "rule_name": "Vertical Spatial Domain Type Check UMM-G", + "vertical_spatial_domain_type_check_granule": { + "rule_name": "Vertical Spatial Domain Type Check Granule", "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Spatial/VerticalSpatialDomains/VerticalSpatialDomain/Type" + ] + } + ], "umm-g": [ { "fields": [ From 0576731df37a1613db23ddc95df6064934f812c9 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 6 May 2022 13:36:08 -0500 Subject: [PATCH 179/261] added echo-g fields for characteristic value check --- pyQuARC/schemas/rule_mapping.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index dac6bf15..5ea62b3b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1748,6 +1748,26 @@ "Platforms/Instruments/ComposedOf/Characteristics" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/Characteristics/Characteristic/Value", + "Granule/Platforms/Platform/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Value", + "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic" + ] + }, + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic/Value", + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/Characteristics/Characteristic" + ] + } ] }, "severity": "error", From 47a90c39a944a7e691a92fff5c2c599f3ece026a Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 6 May 2022 13:42:47 -0500 Subject: [PATCH 180/261] added echo-g fields for mime type presence check --- pyQuARC/schemas/rule_mapping.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 5ea62b3b..ac3e62c1 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2037,6 +2037,14 @@ "RelatedUrls/Type" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/OnlineResources/OnlineResource/MimeType", + "Granule/OnlineResources/OnlineResource/Type" + ] + } ] }, "data": [ From cbec554fb2f006a0bb52a7c8ee167c370603b0c5 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 6 May 2022 13:59:49 -0500 Subject: [PATCH 181/261] added echo-g fields for default date check --- pyQuARC/schemas/rule_mapping.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index ac3e62c1..2e3f4c6a 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4222,6 +4222,18 @@ "OrbitCalculatedSpatialDomains/EquatorCrossingDateTime" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/InsertTime" + ] + }, + { + "fields": [ + "Granule/LastUpdate" + ] + } ] }, "data": [ From 56e5f001c9707e93bb21b6e7d1e176c4cea227bc Mon Sep 17 00:00:00 2001 From: Essence Raphael Date: Tue, 10 May 2022 09:12:15 -0500 Subject: [PATCH 182/261] Add echo-g fields for data_update_time_logic_check and datetime_format_check --- pyQuARC/schemas/rule_mapping.json | 78 ++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fcfd04d3..df246508 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -11,6 +11,15 @@ "relation": "gte" } ], + "echo-g": [ + { + "fields": [ + "Granule/LastUpdate", + "Granule/InsertTime" + ], + "relation": "gte" + } + ], "dif10": [ { "fields": [ @@ -79,9 +88,9 @@ "relation": "lte" } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "TemporalExtent/RangeDateTime/BeginningDateTime", "TemporalExtent/RangeDateTime/EndingDateTime" ], @@ -122,9 +131,9 @@ "relation": "neq" } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "TemporalExtent/RangeDateTime/BeginningDateTime", "TemporalExtent/RangeDateTime/EndingDateTime" ], @@ -547,6 +556,11 @@ "fields": [ "Granule/InsertTime" ] + }, + { + "fields": [ + "Granule/LastUpdate" + ] } ] }, @@ -647,9 +661,9 @@ ] } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "RelatedUrls/URL" ] }, @@ -976,12 +990,12 @@ ] } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "ProviderDates/Date?Type=Delete" ] - } + } ] }, "data": [ @@ -1416,15 +1430,15 @@ ] } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "Platforms/Instruments/Characteristics/Name", "Platforms/Instruments/Characteristics" ] }, { - "fields": [ + "fields": [ "Platforms/Instruments/ComposedOf/Characteristics/Name", "Platforms/Instruments/ComposedOf/Characteristics" ] @@ -2128,7 +2142,6 @@ ] } ] - }, "severity": "error", "check_id": "organization_short_long_name_consistency_check" @@ -3603,9 +3616,9 @@ ] } ], - "umm-g":[ + "umm-g": [ { - "fields":[ + "fields": [ "RelatedUrls/Type", "RelatedUrls/URL" ] @@ -3652,7 +3665,9 @@ } ] }, - "data": ["Name"], + "data": [ + "Name" + ], "severity": "warning", "check_id": "uniqueness_check" }, @@ -3669,7 +3684,7 @@ [ "datetime_format_check", "Collection/Temporal/RangeDateTime/EndingDateTime" - ] + ] ] } ], @@ -3683,7 +3698,7 @@ [ "datetime_format_check", "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time" - ] + ] ] } ], @@ -3697,7 +3712,7 @@ [ "datetime_format_check", "TemporalExtents/RangeDateTimes/EndingDateTime" - ] + ] ] } ] @@ -3718,7 +3733,7 @@ [ "datetime_format_check", "Collection/Temporal/RangeDateTime/BeginningDateTime" - ] + ] ] } ], @@ -3732,7 +3747,7 @@ [ "datetime_format_check", "DIF/Temporal_Coverage/Range_DateTime/Beginning_Date_Time" - ] + ] ] } ], @@ -3746,7 +3761,7 @@ [ "datetime_format_check", "TemporalExtents/RangeDateTimes/BeginningDateTime" - ] + ] ] } ] @@ -4150,7 +4165,10 @@ "DIF/Related_URL" ], "data": [ - ["URL_Content_Type", "Type"] + [ + "URL_Content_Type", + "Type" + ] ] } ], @@ -4170,7 +4188,9 @@ ] }, "data": [ - ["Type"] + [ + "Type" + ] ], "severity": "error", "check_id": "get_data_url_check" @@ -4564,15 +4584,17 @@ ] } ], - "umm-g":[ + "umm-g": [ { - "fields":[ + "fields": [ "RelatedUrls" ] } ] }, - "data": ["Description"], + "data": [ + "Description" + ], "severity": "info", "check_id": "uniqueness_check" }, @@ -4592,4 +4614,4 @@ "severity": "info", "check_id": "date_compare" } -} +} \ No newline at end of file From 25e840a5b0bc34c246a864d3b1f1cf24b5a1ebe4 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Tue, 10 May 2022 15:27:27 -0500 Subject: [PATCH 183/261] Add Granule Single Date Time Check, Update date... Added Granule Single Date Time Check in rule_mapping.json and check_messages.json Update Datetime ISO Format Check in rule_mapping.json for ECHO10 Granules --- pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/rule_mapping.json | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 6f7a76aa..09d278b6 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -926,5 +926,13 @@ "url": "" }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "granule_single_date_time_check": { + "failure": "The Beginning Date Time and the Ending Date Time are the same.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing a Single Date Time instead of a Range Date Time." } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index ebd4d401..a77b9aa4 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -547,6 +547,16 @@ "fields": [ "Granule/InsertTime" ] + }, + { + "fields": [ + "Granule/Temporal/RangeDateTime/BeginningDateTime" + ] + }, + { + "fields": [ + "Granule/Temporal/RangeDateTime/EndingDateTime" + ] } ] }, @@ -4757,5 +4767,21 @@ }, "severity": "info", "check_id": "date_compare" + }, + "granule_single_date_time_check": { + "rule_name": "Granule Single Date Time Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Temporal/RangeDateTime/BeginningDateTime", + "Granule/Temporal/RangeDateTime/EndingDateTime" + ], + "relation":"neq" + } + ] + }, + "severity": "warning", + "check_id": "date_compare" } } From 79ade4ad2b95c2d0a2508ad3af2e09485468c743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 10 May 2022 17:11:38 -0500 Subject: [PATCH 184/261] Add support for version and custom cmr host --- pyQuARC/code/downloader.py | 16 +++++++--------- pyQuARC/main.py | 19 +++++++++++++++---- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index 440eb139..5d102f3b 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -4,7 +4,7 @@ from xmltodict import parse -from .constants import DIF, ECHO10, UMM_JSON +from .constants import CMR_URL class Downloader: @@ -12,22 +12,19 @@ class Downloader: Downloads data given a concept ID """ - BASE_URL = ( - "https://cmr.earthdata.nasa.gov/search/concepts/{concept_id}.{metadata_format}" - ) + BASE_URL = "{cmr_host}/search/concepts/" COLLECTION = "collection" GRANULE = "granule" INVALID = "invalid" - def __init__(self, concept_id, metadata_format, version=None): + def __init__(self, concept_id, metadata_format, version=None, cmr_host=CMR_URL): """ Args: concept_id (str): The concept id of the metadata to download metadata_format (str): The file format of the metadata to download version (str): The version of the metadata to download """ - # TODO: Handle versions here self.concept_id = concept_id self.version = version self.metadata_format = metadata_format @@ -35,6 +32,7 @@ def __init__(self, concept_id, metadata_format, version=None): # big XML string or dict is stored here self.downloaded_content = None + self.cmr_host = cmr_host def _valid_concept_id(self): """ @@ -56,9 +54,9 @@ def _construct_url(self): """ concept_id_type = Downloader._concept_id_type(self.concept_id) - constructed_url = Downloader.BASE_URL.format( - concept_id=self.concept_id, metadata_format=self.metadata_format - ) + base_url = Downloader.BASE_URL.format(cmr_host=self.cmr_host) + version = f'/{self.version}' if self.version else '' + constructed_url = f"{base_url}{self.concept_id}{version}.{self.metadata_format}" return constructed_url diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 593e5c7d..8e64f63a 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -8,11 +8,11 @@ if __name__ == '__main__': from code.checker import Checker - from code.constants import COLOR, ECHO10 + from code.constants import COLOR, ECHO10, CMR_URL from code.downloader import Downloader else: from .code.checker import Checker - from .code.constants import COLOR, ECHO10 + from .code.constants import COLOR, ECHO10, CMR_URL from .code.downloader import Downloader @@ -37,7 +37,8 @@ def __init__( metadata_format=ECHO10, checks_override=None, rules_override=None, - messages_override=None + messages_override=None, + cmr_host=CMR_URL, ): """ Args: @@ -68,6 +69,7 @@ def __init__( self.checks_override = checks_override self.rules_override = rules_override self.messages_override = messages_override + self.cmr_host = cmr_host def _cmr_query(self): """ @@ -140,7 +142,7 @@ def validate(self): if self.concept_ids: for concept_id in tqdm(self.concept_ids): - downloader = Downloader(concept_id, self.metadata_format) + downloader = Downloader(concept_id, self.metadata_format, self.cmr_host) content = downloader.download().encode() validation_errors = checker.run(content) @@ -212,6 +214,7 @@ def display_results(self): --concept_ids --file --fake + --cmr_url """ parser = argparse.ArgumentParser() download_group = parser.add_mutually_exclusive_group() @@ -245,6 +248,13 @@ def display_results(self): type=str, help="The metadata format (currently supported: 'echo10' and 'dif10')", ) + parser.add_argument( + "--cmr_host", + action="store", + nargs="?", + type=str, + help="The cmr host to use. Default is: https://cmr.earthdata.nasa.gov", + ) args = parser.parse_args() parser.usage = parser.format_help().replace("optional ", "") @@ -261,6 +271,7 @@ def display_results(self): fake=args.fake, file_path=args.file, metadata_format=args.format or ECHO10, + cmr_host=args.cmr_host or CMR_URL, ) results = arc.validate() arc.display_results() From 600be79c31c3693be351d9f53e2a9625d7b42a43 Mon Sep 17 00:00:00 2001 From: Samuel Ayers Date: Wed, 11 May 2022 11:23:40 -0500 Subject: [PATCH 185/261] Add URL Description Uniqueness Check (echo-g) "Added Online Resource Description Uniqueness Check and Online Access Description Uniqueness Check in rule_mapping.json and check_messages.json Added uniqueness_check_echog in checks.json Added uniqueness_check_echog in custom_validator.py" --- pyQuARC/code/custom_validator.py | 17 +++++++++++++++ pyQuARC/schemas/check_messages.json | 16 +++++++++++++++ pyQuARC/schemas/checks.json | 5 +++++ pyQuARC/schemas/rule_mapping.json | 32 ++++++++++++++++++++++++++++- 4 files changed, 69 insertions(+), 1 deletion(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index f81e6f57..b2a5b968 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -172,6 +172,23 @@ def uniqueness_check(list_of_objects, key): "value": ', '.join(duplicates) } + @staticmethod + @if_arg + def uniqueness_check_echog(list_of_objects, key): + seen, duplicates = set(), set() + if isinstance(list_of_objects, list): + for url_obj in list_of_objects: + description = url_obj[key] + if description in seen: + duplicates.add(description) + else: + seen.add(description) + + return { + "valid": not bool(duplicates), + "value": ', '.join(duplicates) + } + @staticmethod def get_data_url_check(related_urls, key): return_obj = { 'valid': False, 'value': 'N/A'} diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 09d278b6..61d1867d 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -911,6 +911,22 @@ }, "remediation": "Please provide a unique name for each URL description." }, + "online_resource_description_uniqueness_check": { + "failure": "Duplicate URL description name/s `{}`.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a unique name for each URL description." + }, + "online_access_description_uniqueness_check": { + "failure": "Duplicate URL description name/s `{}`.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Please provide a unique name for each URL description." + }, "metadata_update_time_logic_check": { "failure": "Note: the UPDATE Metadata Date comes before the provided CREATE Metadata Date.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 492925b1..64d24a57 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -224,6 +224,11 @@ "check_function": "uniqueness_check", "available": true }, + "uniqueness_check_echog":{ + "data_type": "custom", + "check_function": "uniqueness_check_echog", + "available": true + }, "validate_ending_datetime_against_granules": { "data_type": "datetime", "check_function": "validate_ending_datetime_against_granules", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a77b9aa4..f2cc4204 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4752,7 +4752,37 @@ "severity": "info", "check_id": "uniqueness_check" }, - "metadata_update_time_logic_check": { + "online_resource_description_uniqueness_check": { + "rule_name": "Online Resource Description Uniqueness Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/OnlineResources/OnlineResource" + ] + } + ] + }, + "data": ["Description"], + "severity": "info", + "check_id": "uniqueness_check_echog" + }, + "online_access_description_uniqueness_check": { + "rule_name": "Online Access Description Uniqueness Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/OnlineAccessURLs/OnlineAccessURL" + ] + } + ] + }, + "data": ["URLDescription"], + "severity": "info", + "check_id": "uniqueness_check_echog" + }, + "metadata_update_time_logic_check": { "rule_name": "Metadata Update Time Logic Check", "fields_to_apply": { "umm-c": [ From a5baec22b2d00233d3013536e71275f594864c23 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Thu, 12 May 2022 14:04:32 -0500 Subject: [PATCH 186/261] Added function to compare granule and collection platforms --- pyQuARC/code/string_validator.py | 27 +++++++++++++++++++++++++++ pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/checks.json | 5 +++++ pyQuARC/schemas/rule_mapping.json | 22 ++++++++++++++++++++++ 4 files changed, 62 insertions(+) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 798e8647..b1457617 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -1,6 +1,9 @@ +import requests + from .base_validator import BaseValidator from .gcmd_validator import GcmdValidator from .utils import if_arg +from .constants import CMR_URL class StringValidator(BaseValidator): @@ -199,6 +202,30 @@ def platform_short_long_name_consistency_check(*args): "value": (args[0], args[1]), } + @staticmethod + @if_arg + def validate_granule_platform_against_collection(platform_shortname, collection_shortname): + """ + Validates the platform shortname provided in the granule metadata + against the platform shortname provided at the collection level. + + Args: + platform_shortname (str): shortname of the platform + collection_shortname (str): Shortname of the parent collection + + Returns: + (dict) An object with the validity of the check and the instance + """ + collection = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&sort_key[]=platform').json() + + if len(collection['feed']['entry']) > 0: + coll_data = collection['feed']['entry'][0] + coll_platform_list = coll_data['platforms'] + return { + "valid": platform_shortname in coll_platform_list, + "value": platform_shortname + } + @staticmethod @if_arg def spatial_keyword_gcmd_check(value): diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 68393c1e..18782b78 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -311,6 +311,14 @@ }, "remediation": "Please supply the corresponding long name for the short name." }, + "validate_granule_platform_against_collection": { + "failure": "The platform short name listed in the granule metadata, `{}`, does not match the platform short name listed in the collection metadata.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the correct platform short name in the granule metadata." + }, "data_format_gcmd_check": { "failure": "The provided data format `{}` does not comply with the GCMD.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 492925b1..74ef21da 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -114,6 +114,11 @@ "check_function": "platform_short_long_name_consistency_check", "available": true }, + "validate_granule_platform_against_collection": { + "data_type": "string", + "check_function": "validate_granule_platform_against_collection", + "available": true + }, "spatial_keyword_gcmd_check": { "data_type": "string", "check_function": "spatial_keyword_gcmd_check", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 2e3f4c6a..2afc57ef 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2515,6 +2515,13 @@ "Platforms/ShortName" ] } + ], + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/ShortName" + ] + } ] }, "severity": "error", @@ -4616,6 +4623,21 @@ "severity": "warning", "check_id": "presence_check" }, + "validate_granule_platform_against_collection": { + "rule_name": "Granule Platform Short Name Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/ShortName", + "Granule/Collection/ShortName" + ] + } + ] + }, + "severity": "error", + "check_id": "validate_granule_platform_against_collection" + }, "horizontal_data_resolution_unit_check": { "rule_name": "Horizontal Data Resolution Unit Controlled Vocabulary Check", "fields_to_apply": { From f2932e0d31df20af8595ab53cfde337b136b1b1f Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 16 May 2022 10:43:06 -0500 Subject: [PATCH 187/261] Added Granule Instrument Short Name Check and modified Granule Platform Short Name Check --- pyQuARC/code/string_validator.py | 47 +++++++++++++++++++++++++---- pyQuARC/schemas/check_messages.json | 8 +++++ pyQuARC/schemas/checks.json | 5 +++ pyQuARC/schemas/rule_mapping.json | 21 ++++++++++++- 4 files changed, 74 insertions(+), 7 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index b1457617..c574ea38 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -1,3 +1,4 @@ +from platform import platform import requests from .base_validator import BaseValidator @@ -161,6 +162,35 @@ def instrument_long_name_gcmd_check(value): "value": value, } + @staticmethod + @if_arg + def validate_granule_instrument_against_collection(instrument_shortname, collection_shortname=None, version=None, dataset_id=None): + """ + Validates the instrument shortname provided in the granule metadata + against the instrument shortname provided at the collection level. + + Args: + instrument_shortname (str): shortname of the instrument + collection_shortname (str): Shortname of the parent collection + + Returns: + (dict) An object with the validity of the check and the instance + """ + if collection_shortname or version == None: + collections = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&instrument={instrument_shortname}').json() + else: + collections = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&instrument={instrument_shortname}').json() + + if collections['feed']['entry']: + return { + "valid": True, + "value": instrument_shortname + } + return { + "valid": False, + "value": instrument_shortname + } + @staticmethod @if_arg def platform_short_name_gcmd_check(value): @@ -204,7 +234,7 @@ def platform_short_long_name_consistency_check(*args): @staticmethod @if_arg - def validate_granule_platform_against_collection(platform_shortname, collection_shortname): + def validate_granule_platform_against_collection(platform_shortname, collection_shortname=None, version=None, dataset_id=None): """ Validates the platform shortname provided in the granule metadata against the platform shortname provided at the collection level. @@ -216,13 +246,18 @@ def validate_granule_platform_against_collection(platform_shortname, collection_ Returns: (dict) An object with the validity of the check and the instance """ - collection = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&sort_key[]=platform').json() + if collection_shortname or version == None: + collection = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&platform={platform_shortname}').json() + else: + collection = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&platform={platform_shortname}').json() - if len(collection['feed']['entry']) > 0: - coll_data = collection['feed']['entry'][0] - coll_platform_list = coll_data['platforms'] + if collection['feed']['entry']: + return { + "valid": True, + "value": platform_shortname + } return { - "valid": platform_shortname in coll_platform_list, + "valid": False, "value": platform_shortname } diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 18782b78..a044043f 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -295,6 +295,14 @@ }, "remediation": "Please add the associated instrument long name." }, + "validate_granule_instrument_against_collection": { + "failure": "The instrument short name listed in the granule metadata, `{}`, does not match the instrument short name listed in the collection metadata.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the correct instrument short name in the granule metadata." + }, "platform_short_name_gcmd_check": { "failure": "The provided platform short name `{}` does not comply with the GCMD.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 74ef21da..be7694fd 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -94,6 +94,11 @@ "check_function": "instrument_long_name_gcmd_check", "available": true }, + "validate_granule_instrument_against_collection": { + "data_type": "string", + "check_function": "validate_granule_instrument_against_collection", + "available": true + }, "platform_short_name_gcmd_check": { "data_type": "string", "check_function": "platform_short_name_gcmd_check", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 2afc57ef..7c1845ee 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2485,6 +2485,23 @@ "severity": "warning", "check_id": "presence_check" }, + "validate_granule_instrument_against_collection": { + "rule_name": "Granule Instrument Short Name Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/ShortName", + "Granule/Collection/ShortName", + "Granule/Collection/VersionId", + "Granule/Collection/DataSetId" + ] + } + ] + }, + "severity": "error", + "check_id": "validate_granule_instrument_against_collection" + }, "platform_short_name_gcmd_check": { "rule_name": "Platform Shortname GCMD Check", "fields_to_apply": { @@ -4630,7 +4647,9 @@ { "fields": [ "Granule/Platforms/Platform/ShortName", - "Granule/Collection/ShortName" + "Granule/Collection/ShortName", + "Granule/Collection/VersionId", + "Granule/Collection/DataSetId" ] } ] From 25faf0f5ab2368228fd9c0e68317a09f25940dfc Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 16 May 2022 10:46:48 -0500 Subject: [PATCH 188/261] Modified instrument/platform granule checks --- pyQuARC/code/string_validator.py | 12 ++++++++++++ pyQuARC/schemas/check_messages.json | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index c574ea38..71309cc4 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -176,6 +176,12 @@ def validate_granule_instrument_against_collection(instrument_shortname, collect Returns: (dict) An object with the validity of the check and the instance """ + if instrument_shortname == None: + return { + "valid": False, + "value": None + } + if collection_shortname or version == None: collections = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&instrument={instrument_shortname}').json() else: @@ -246,6 +252,12 @@ def validate_granule_platform_against_collection(platform_shortname, collection_ Returns: (dict) An object with the validity of the check and the instance """ + if platform_shortname == None: + return { + "valid": False, + "value": None + } + if collection_shortname or version == None: collection = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&platform={platform_shortname}').json() else: diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index a044043f..9763287a 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -296,7 +296,7 @@ "remediation": "Please add the associated instrument long name." }, "validate_granule_instrument_against_collection": { - "failure": "The instrument short name listed in the granule metadata, `{}`, does not match the instrument short name listed in the collection metadata.", + "failure": "The instrument short name listed in the granule metadata is missing or does not match the instrument short name listed in the collection metadata.", "help": { "message": "", "url": "" @@ -320,7 +320,7 @@ "remediation": "Please supply the corresponding long name for the short name." }, "validate_granule_platform_against_collection": { - "failure": "The platform short name listed in the granule metadata, `{}`, does not match the platform short name listed in the collection metadata.", + "failure": "The platform short name listed in the granule metadata is missing or does not match the platform short name listed in the collection metadata.", "help": { "message": "", "url": "" From c6875cc069a9b069afb0222b14cb2af2a818bf91 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Mon, 16 May 2022 11:01:45 -0500 Subject: [PATCH 189/261] Added Granule Sensor Short Name Check --- pyQuARC/code/string_validator.py | 41 +++++++++++++++++++++++++++++ pyQuARC/schemas/check_messages.json | 8 ++++++ pyQuARC/schemas/checks.json | 5 ++++ pyQuARC/schemas/rule_mapping.json | 17 ++++++++++++ 4 files changed, 71 insertions(+) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 71309cc4..38923a5f 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -172,6 +172,8 @@ def validate_granule_instrument_against_collection(instrument_shortname, collect Args: instrument_shortname (str): shortname of the instrument collection_shortname (str): Shortname of the parent collection + version (str): version of the collection + dataset_id (str): Entry title of the parent collection Returns: (dict) An object with the validity of the check and the instance @@ -197,6 +199,43 @@ def validate_granule_instrument_against_collection(instrument_shortname, collect "value": instrument_shortname } + @staticmethod + @if_arg + def validate_granule_sensor_against_collection(sensor_shortname, collection_shortname=None, version=None, dataset_id=None): + """ + Validates the sensor shortname provided in the granule metadata + against the sensor shortname provided at the collection level. + + Args: + sensor_shortname (str): shortname of the sensor + collection_shortname (str): Shortname of the parent collection + version (str): version of the collection + dataset_id (str): Entry title of the parent collection + + Returns: + (dict) An object with the validity of the check and the instance + """ + if sensor_shortname == None: + return { + "valid": False, + "value": None + } + + if collection_shortname or version == None: + collection = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&sensor={sensor_shortname}').json() + else: + collection = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&sensor={sensor_shortname}').json() + + if collection['feed']['entry']: + return { + "valid": True, + "value": sensor_shortname + } + return { + "valid": False, + "value": sensor_shortname + } + @staticmethod @if_arg def platform_short_name_gcmd_check(value): @@ -248,6 +287,8 @@ def validate_granule_platform_against_collection(platform_shortname, collection_ Args: platform_shortname (str): shortname of the platform collection_shortname (str): Shortname of the parent collection + version (str): version of the collection + dataset_id (str): Entry title of the parent collection Returns: (dict) An object with the validity of the check and the instance diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 9763287a..d4d59513 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -303,6 +303,14 @@ }, "remediation": "Recommend providing the correct instrument short name in the granule metadata." }, + "validate_granule_sensor_against_collection": { + "failure": "The sensor short name listed in the granule metadata is missing or does not match the sensor short name listed in the collection metadata.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the correct sensor short name in the granule metadata." + }, "platform_short_name_gcmd_check": { "failure": "The provided platform short name `{}` does not comply with the GCMD.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index be7694fd..2cce433e 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -99,6 +99,11 @@ "check_function": "validate_granule_instrument_against_collection", "available": true }, + "validate_granule_sensor_against_collection": { + "data_type": "string", + "check_function": "validate_granule_sensor_against_collection", + "available": true + }, "platform_short_name_gcmd_check": { "data_type": "string", "check_function": "platform_short_name_gcmd_check", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 7c1845ee..7127ad4e 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4657,6 +4657,23 @@ "severity": "error", "check_id": "validate_granule_platform_against_collection" }, + "validate_granule_sensor_against_collection": { + "rule_name": "Granule Sensor Short Name Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName", + "Granule/Collection/ShortName", + "Granule/Collection/VersionId", + "Granule/Collection/DataSetId" + ] + } + ] + }, + "severity": "error", + "check_id": "validate_granule_sensor_against_collection" + }, "horizontal_data_resolution_unit_check": { "rule_name": "Horizontal Data Resolution Unit Controlled Vocabulary Check", "fields_to_apply": { From 8eb379180b3442337faa5ffb3c7148a84600ec8f Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 18 May 2022 08:32:20 -0500 Subject: [PATCH 190/261] Added rule mapping and messages for granule platform presence check --- pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index d4d59513..eb91037f 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -903,6 +903,14 @@ }, "remediation": "Recommend providing the platform long name." }, + "granule_platform_presence_check": { + "failure": "The platform short name is missing.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the platform short name." + }, "horizontal_data_resolution_unit_check": { "failure": "The Horizontal Data Resolution Unit provided `{}` is invalid.", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 7127ad4e..141dcfff 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4640,6 +4640,20 @@ "severity": "warning", "check_id": "presence_check" }, + "granule_platform_presence_check": { + "rule name": "Granule Platform Presence Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/ShortName" + ] + } + ] + }, + "severity": "info", + "check_id": "presence_check" + }, "validate_granule_platform_against_collection": { "rule_name": "Granule Platform Short Name Check", "fields_to_apply": { From 35c704940b56209362ac6ed286f0af2ad54f4ba1 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 18 May 2022 08:33:29 -0500 Subject: [PATCH 191/261] Modified messages for the granule plat/inst/sens consistency checks --- pyQuARC/schemas/check_messages.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index eb91037f..9429e788 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -296,7 +296,7 @@ "remediation": "Please add the associated instrument long name." }, "validate_granule_instrument_against_collection": { - "failure": "The instrument short name listed in the granule metadata is missing or does not match the instrument short name listed in the collection metadata.", + "failure": "The instrument short name listed in the granule metadata does not match the instrument short name listed in the collection metadata.", "help": { "message": "", "url": "" @@ -304,7 +304,7 @@ "remediation": "Recommend providing the correct instrument short name in the granule metadata." }, "validate_granule_sensor_against_collection": { - "failure": "The sensor short name listed in the granule metadata is missing or does not match the sensor short name listed in the collection metadata.", + "failure": "The sensor short name listed in the granule metadata does not match the sensor short name listed in the collection metadata.", "help": { "message": "", "url": "" @@ -328,7 +328,7 @@ "remediation": "Please supply the corresponding long name for the short name." }, "validate_granule_platform_against_collection": { - "failure": "The platform short name listed in the granule metadata is missing or does not match the platform short name listed in the collection metadata.", + "failure": "The platform short name listed in the granule metadata does not match the platform short name listed in the collection metadata.", "help": { "message": "", "url": "" From a1a92b2271ddfe2f2d6c4a980cd3239a272d5123 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 18 May 2022 08:43:21 -0500 Subject: [PATCH 192/261] Added granule instrument presence check --- pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/rule_mapping.json | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 9429e788..8f687658 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -295,6 +295,14 @@ }, "remediation": "Please add the associated instrument long name." }, + "granule_instrument_presence_check": { + "failure": "The instrument short name is missing.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the instrument short name." + }, "validate_granule_instrument_against_collection": { "failure": "The instrument short name listed in the granule metadata does not match the instrument short name listed in the collection metadata.", "help": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 141dcfff..e06b2fbb 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2485,6 +2485,20 @@ "severity": "warning", "check_id": "presence_check" }, + "granule_instrument_presence_check": { + "rule_name": "Granule Instrument Presence Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/ShortName" + ] + } + ] + }, + "severity": "info", + "check_id": "presence_check" + }, "validate_granule_instrument_against_collection": { "rule_name": "Granule Instrument Short Name Check", "fields_to_apply": { From 58d148977e6909a34da844f8f7b7b1bab3355927 Mon Sep 17 00:00:00 2001 From: Jenny Wood Date: Fri, 20 May 2022 15:56:26 -0500 Subject: [PATCH 193/261] Added validate_granule_data_format_against_collection_check and granule_data_format_presence_check --- pyQuARC/code/string_validator.py | 58 +++++++++++--- pyQuARC/schemas/check_messages.json | 20 ++++- pyQuARC/schemas/checks.json | 12 ++- pyQuARC/schemas/rule_mapping.json | 112 +++++++++++++++++++++------- 4 files changed, 161 insertions(+), 41 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 798e8647..904c90e7 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -1,6 +1,9 @@ +import requests + from .base_validator import BaseValidator from .gcmd_validator import GcmdValidator from .utils import if_arg +from .constants import CMR_URL class StringValidator(BaseValidator): @@ -89,9 +92,10 @@ def science_keywords_gcmd_check(*args): """ value = None received_keyword = [arg.upper().strip() for arg in args if arg] - validity, invalid_value = StringValidator.gcmdValidator.validate_science_keyword( - received_keyword - ) + ( + validity, + invalid_value, + ) = StringValidator.gcmdValidator.validate_science_keyword(received_keyword) if not validity: value = f"'{invalid_value}' in the hierarchy '{'/'.join(received_keyword)}'" return {"valid": validity, "value": value if value else received_keyword} @@ -244,9 +248,7 @@ def campaign_long_name_gcmd_check(value): @if_arg def data_format_gcmd_check(value): return { - "valid": StringValidator.gcmdValidator.validate_data_format( - value.upper() - ), + "valid": StringValidator.gcmdValidator.validate_data_format(value.upper()), "value": value, } @@ -275,9 +277,10 @@ def location_gcmd_check(*args): """ value = None received_keyword = [arg.upper().strip() for arg in args if arg] - validity, invalid_value = StringValidator.gcmdValidator.validate_location_hierarchy( - received_keyword - ) + ( + validity, + invalid_value, + ) = StringValidator.gcmdValidator.validate_location_hierarchy(received_keyword) if not validity: value = f"'{invalid_value}' in the hierarchy '{'/'.join(received_keyword)}'" return {"valid": validity, "value": value if value else received_keyword} @@ -297,7 +300,10 @@ def chrono_gcmd_check(*args): """ value = None received_keyword = [arg.upper().strip() for arg in args if arg] - validity, invalid_value = StringValidator.gcmdValidator.validate_chrono_unit_hierarchy( + ( + validity, + invalid_value, + ) = StringValidator.gcmdValidator.validate_chrono_unit_hierarchy( received_keyword ) if not validity: @@ -353,3 +359,35 @@ def idnnode_shortname_gcmd_check(resource_type): ), "value": resource_type, } + + @staticmethod + @if_arg + def validate_granule_data_format_against_collection( + granule_data_format, collection_shortname=None, version=None, dataset_id=None + ): + """ + Validates the data format provided in the granule metadata + against the data format provided at the collection level. + + Args: + granule_data_format (str): data format in the collection + collection_shortname (str): Shortname of the parent collection + version (str): version of the collection + dataset_id (str): Entry title of the parent collection + + Returns: + (dict) An object with the validity of the check and the instance + """ + + if collection_shortname and version: + collection = requests.get( + f"{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&granule_data_format={granule_data_format}" + ).json() + else: + collection = requests.get( + f"{CMR_URL}/search/collections.json?DatasetId={dataset_id}&granule_data_format={granule_data_format}" + ).json() + + if collection["feed"]["entry"]: + return {"valid": True, "value": granule_data_format} + return {"valid": False, "value": granule_data_format} diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 68393c1e..6b4dcfad 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -135,7 +135,7 @@ }, "remediation": "Please submit a request to support@earthdata.nasa.gov to have this long name added to the GCMD KMS." }, - "organization_short_long_name_consistency_check":{ + "organization_short_long_name_consistency_check": { "failure": "The provided data center short name `{}` and long name `{}` aren't consistent.", "help": { "message": "", @@ -926,5 +926,21 @@ "url": "" }, "remediation": "Either provide a valid GCMD keyword or submit a request to support@earthdata.nasa.gov to have this keyword added to the GCMD KMS." + }, + "validate_granule_data_format_against_collection_check": { + "failure": "The data format listed in the granule metadata does not match the data format listed in the collection metadata", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the data format listed in the collection metadata." + }, + "granule_data_format_presence_check": { + "failure": "The granule data format is missing.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the granule data format." } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 492925b1..ae0d6f48 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -234,9 +234,19 @@ "check_function": "validate_beginning_datetime_against_granules", "available": true }, + "validate_granule_data_format_against_collection_check": { + "data_type": "string", + "check_function": "validate_granule_data_format_against_collection", + "available": true + }, "get_data_url_check": { "data_type": "custom", "check_function": "get_data_url_check", "available": true + }, + "granule_data_format_presence_check": { + "data_type": "custom", + "check_function": "presence_check", + "available": true } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fcfd04d3..dbea60b4 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -79,9 +79,9 @@ "relation": "lte" } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "TemporalExtent/RangeDateTime/BeginningDateTime", "TemporalExtent/RangeDateTime/EndingDateTime" ], @@ -122,9 +122,9 @@ "relation": "neq" } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "TemporalExtent/RangeDateTime/BeginningDateTime", "TemporalExtent/RangeDateTime/EndingDateTime" ], @@ -647,9 +647,9 @@ ] } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "RelatedUrls/URL" ] }, @@ -976,12 +976,12 @@ ] } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "ProviderDates/Date?Type=Delete" ] - } + } ] }, "data": [ @@ -1416,15 +1416,15 @@ ] } ], - "umm-g": [ + "umm-g": [ { - "fields": [ + "fields": [ "Platforms/Instruments/Characteristics/Name", "Platforms/Instruments/Characteristics" ] }, { - "fields": [ + "fields": [ "Platforms/Instruments/ComposedOf/Characteristics/Name", "Platforms/Instruments/ComposedOf/Characteristics" ] @@ -2128,7 +2128,6 @@ ] } ] - }, "severity": "error", "check_id": "organization_short_long_name_consistency_check" @@ -3603,9 +3602,9 @@ ] } ], - "umm-g":[ + "umm-g": [ { - "fields":[ + "fields": [ "RelatedUrls/Type", "RelatedUrls/URL" ] @@ -3652,7 +3651,9 @@ } ] }, - "data": ["Name"], + "data": [ + "Name" + ], "severity": "warning", "check_id": "uniqueness_check" }, @@ -3669,7 +3670,7 @@ [ "datetime_format_check", "Collection/Temporal/RangeDateTime/EndingDateTime" - ] + ] ] } ], @@ -3683,7 +3684,7 @@ [ "datetime_format_check", "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time" - ] + ] ] } ], @@ -3697,7 +3698,7 @@ [ "datetime_format_check", "TemporalExtents/RangeDateTimes/EndingDateTime" - ] + ] ] } ] @@ -3718,7 +3719,7 @@ [ "datetime_format_check", "Collection/Temporal/RangeDateTime/BeginningDateTime" - ] + ] ] } ], @@ -3732,7 +3733,7 @@ [ "datetime_format_check", "DIF/Temporal_Coverage/Range_DateTime/Beginning_Date_Time" - ] + ] ] } ], @@ -3746,7 +3747,7 @@ [ "datetime_format_check", "TemporalExtents/RangeDateTimes/BeginningDateTime" - ] + ] ] } ] @@ -4150,7 +4151,10 @@ "DIF/Related_URL" ], "data": [ - ["URL_Content_Type", "Type"] + [ + "URL_Content_Type", + "Type" + ] ] } ], @@ -4170,7 +4174,9 @@ ] }, "data": [ - ["Type"] + [ + "Type" + ] ], "severity": "error", "check_id": "get_data_url_check" @@ -4564,15 +4570,17 @@ ] } ], - "umm-g":[ + "umm-g": [ { - "fields":[ + "fields": [ "RelatedUrls" ] } ] }, - "data": ["Description"], + "data": [ + "Description" + ], "severity": "info", "check_id": "uniqueness_check" }, @@ -4591,5 +4599,53 @@ }, "severity": "info", "check_id": "date_compare" + }, + "validate_granule_data_format_against_collection_check": { + "rule_name": "Validate Granule Data Format Against Collection Check", + "fields_to_apply": { + "umm-g": [ + { + "fields": [ + "DataGranule/ArchiveAndDistributionInformation/Format", + "CollectionReference/ShortName", + "CollectionReference/Version", + "CollectionReference/EntryTitle" + ] + } + ], + "echo-g": [ + { + "fields": [ + "Granule/DataFormat", + "Granule/ShortName", + "Granule/Version", + "Granule/Collection/DataSetId" + ] + } + ] + }, + "severity": "error", + "check_id": "validate_granule_data_format_against_collection_check" + }, + "granule_data_format_presence_check": { + "rule_name": "Granule Data Format Presence Check", + "fields_to_apply": { + "umm-g": [ + { + "fields": [ + "DataGranule/ArchiveAndDistributionInformation/Format" + ] + } + ], + "echo-g": [ + { + "fields": [ + "Granule/DataFormat" + ] + } + ] + }, + "severity": "warning", + "check_id": "granule_data_format_presence_check" } -} +} \ No newline at end of file From 221b7b91d19c1c9ad3b784ae60b6a5e55473efaf Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Tue, 24 May 2022 09:32:11 -0500 Subject: [PATCH 194/261] Add Granule Project Short Name Check umm-g/echo-g Added Granule Project Short Name Check in rule_mapping.json, checks.json, check_messages.json, and string_validator.py Added set_cmr_prms, granule_project_validate_against_collection, collection_in_cmr, and validate_against_collection functions in string_validator.py Added cmr_request function in base_validator.py Modified Granule Project Short Name Check --- pyQuARC/code/base_validator.py | 9 ++++++ pyQuARC/code/string_validator.py | 39 +++++++++++++++++++++++++ pyQuARC/schemas/check_messages.json | 16 ++++++++++ pyQuARC/schemas/checks.json | 10 +++++++ pyQuARC/schemas/rule_mapping.json | 29 +++++++++++++++++- tests/fixtures/test_cmr_metadata.echo-g | 7 ++++- tests/fixtures/test_cmr_metadata.umm-g | 13 ++++----- 7 files changed, 113 insertions(+), 10 deletions(-) diff --git a/pyQuARC/code/base_validator.py b/pyQuARC/code/base_validator.py index e42c21dd..5e115015 100644 --- a/pyQuARC/code/base_validator.py +++ b/pyQuARC/code/base_validator.py @@ -1,3 +1,8 @@ +import requests + +from .constants import CMR_URL + + class BaseValidator: """ Base class for all the validators @@ -38,3 +43,7 @@ def is_in(value, list_of_values): def compare(first, second, relation): func = getattr(BaseValidator, relation) return func(first, second) + + @staticmethod + def cmr_request(cmr_prms): + return requests.get(f'{CMR_URL}/search/{cmr_prms}') \ No newline at end of file diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 798e8647..c56001da 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -353,3 +353,42 @@ def idnnode_shortname_gcmd_check(resource_type): ), "value": resource_type, } + + @staticmethod + def set_cmr_prms(collection_entry_title, collection_shortname, collection_version): + #name = '' + if collection_entry_title == None: + cmr_prms = f'collections.umm_json?shortName={collection_shortname}&version={collection_version}' + else: + cmr_prms = f'collections.umm_json?entry_title={collection_entry_title}' + return cmr_prms + + @staticmethod + def granule_project_validate_against_collection(cmr_prms, project_shortname): + if not(StringValidator.collection_in_cmr(cmr_prms)): + validity = True + else: + validity = StringValidator.validate_against_collection(cmr_prms, 'project', project_shortname) + return validity + + @staticmethod + def collection_in_cmr(cmr_prms): + return BaseValidator.cmr_request(cmr_prms).json()['hits'] > 0 + + @staticmethod + def validate_against_collection(cmr_prms, prm, prm_value): + cmr_request_prms = f'{cmr_prms}&{prm}={prm_value}' + request = BaseValidator.cmr_request(cmr_request_prms).json()['hits'] + validity = request > 0 + return validity + + @staticmethod + @if_arg + def granule_project_short_name_check(project_shortname, collection_entry_title=None, collection_shortname=None, collection_version=None): + cmr_prms = StringValidator.set_cmr_prms(collection_entry_title, collection_shortname, collection_version) + validity = StringValidator.granule_project_validate_against_collection(cmr_prms, project_shortname) + return { + "valid": validity, + "value": project_shortname + } + diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 61d1867d..de95869f 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -950,5 +950,21 @@ "url": "" }, "remediation": "Recommend providing a Single Date Time instead of a Range Date Time." + }, + "granule_project_short_name_check": { + "failure": "The campaign short name listed in the granule metadata is missing or does not match the campaign short name listed in the collection metadata.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing [campaign short name listed in collection metadata] as the campaign short name in the granule metadata." + }, + "granule_sensor_short_name_check": { + "failure": "The sensor short name listed in the granule metadata is missing or does not match the sensor short name listed in the collection metadata.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing [sensor short name listed in collection metadata] as the sensor short name in the granule metadata." } } diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 64d24a57..6e3a70aa 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -243,5 +243,15 @@ "data_type": "custom", "check_function": "get_data_url_check", "available": true + }, + "granule_project_short_name_check": { + "data_type": "string", + "check_function": "granule_project_short_name_check", + "available": true + }, + "granule_sensor_short_name_check": { + "data_type": "string", + "check_function": "granule_sensor_short_name_check", + "available": true } } diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f2cc4204..dcbc435f 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4813,5 +4813,32 @@ }, "severity": "warning", "check_id": "date_compare" + }, + "granule_project_short_name_check": { + "rule_name": "Granule Project Short Name Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Campaigns/Campaign/ShortName", + "Granule/Collection/DataSetId", + "Granule/Collection/ShortName", + "Granule/Collection/VersionId" + ] + } + ], + "umm-g": [ + { + "fields": [ + "Projects/ShortName", + "CollectionReference/EntryTitle", + "CollectionReference/ShortName", + "CollectionReference/Version" + ] + } + ] + }, + "severity": "info", + "check_id": "granule_project_short_name_check" } -} +} \ No newline at end of file diff --git a/tests/fixtures/test_cmr_metadata.echo-g b/tests/fixtures/test_cmr_metadata.echo-g index d5569791..00df0637 100644 --- a/tests/fixtures/test_cmr_metadata.echo-g +++ b/tests/fixtures/test_cmr_metadata.echo-g @@ -3,7 +3,7 @@ 2022-04-15 2022-04-15T10:27:27.492Z - ATLAS/ICESat-2 L3A Land and Vegetation Height V005 + ASTER Digital Elevation Model V003 44.2424182892 @@ -35,6 +35,11 @@ 2022-02-10T21:09:27.619Z + + + Terra + + https://n5eil01u.ecs.nsidc.org/DP7/ATLAS/ATL08.005/2022.02.10/ATL08_20220210222256_07731412_005_01.h5 diff --git a/tests/fixtures/test_cmr_metadata.umm-g b/tests/fixtures/test_cmr_metadata.umm-g index a9f2ebac..57b1870c 100644 --- a/tests/fixtures/test_cmr_metadata.umm-g +++ b/tests/fixtures/test_cmr_metadata.umm-g @@ -14,8 +14,7 @@ "Type": "Delete" }], "CollectionReference": { - "ShortName": "CollectionShortName", - "Version": "1.6" + "EntryTitle": "ASTER Digital Elevation Model V003" }, "AccessConstraints": { "Description" : "Public Access", @@ -193,6 +192,9 @@ "ScienceQualityFlagExplanation": "Science Quality Flag Explanation" } }], + "Projects": [{ + "ShortName": "Terra" + }], "Platforms": [{ "ShortName": "Aqua", "Instruments": [{ @@ -205,7 +207,7 @@ "Value": "22F" }], "ComposedOf": [{ - "ShortName": "AMSR-E_ChildInstrument", + "ShortName": "SWIR", "Characteristics": [{ "Name": "ChildInstrumentCharacteristicName3", "Value": "250" @@ -215,11 +217,6 @@ "OperationalModes": ["Mode1", "Mode2"] }] }], - "Projects": [{ - "ShortName": "Project1" - }, { - "ShortName": "Project2" - }], "AdditionalAttributes": [{ "Name": "AdditionalAttribute1 Name1", "Values": ["AdditionalAttribute1 Value3", "AdditionalAttribute1 Value4"] From 007eefc890b1d29f91b239737b86b444d3981452 Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Tue, 24 May 2022 15:58:03 -0500 Subject: [PATCH 195/261] Added Granule Sensor Short Name Check Added Added Granule Sensor Short Name Check in rule_mapping.json, checks.json, check_messages.json, and string_validator.py Added granule_sensor_validate_against_collection function in string_validator.py --- pyQuARC/code/string_validator.py | 20 ++++++++++++++++++ pyQuARC/schemas/checks.json | 2 +- pyQuARC/schemas/rule_mapping.json | 27 +++++++++++++++++++++++++ tests/fixtures/test_cmr_metadata.echo-g | 15 +++++++++++++- tests/fixtures/test_cmr_metadata.umm-g | 2 +- 5 files changed, 63 insertions(+), 3 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index c56001da..ec1a0f94 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -392,3 +392,23 @@ def granule_project_short_name_check(project_shortname, collection_entry_title=N "value": project_shortname } + @staticmethod + def granule_sensor_validate_against_collection(cmr_prms, sensor_shortname): + if not(StringValidator.collection_in_cmr(cmr_prms)): + validity = True + else: + validity = StringValidator.validate_against_collection(cmr_prms, 'sensor', sensor_shortname) + return validity + + @staticmethod + @if_arg + def granule_sensor_short_name_check(sensor_shortname, collection_entry_title=None, collection_shortname=None, collection_version=None): + print('test') + cmr_prms = StringValidator.set_cmr_prms(collection_entry_title, collection_shortname, collection_version) + print(cmr_prms) + validity = StringValidator.granule_sensor_validate_against_collection(cmr_prms, sensor_shortname) + print(validity) + return { + "valid": validity, + "value": sensor_shortname + } diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 6e3a70aa..1b9236db 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -254,4 +254,4 @@ "check_function": "granule_sensor_short_name_check", "available": true } -} +} \ No newline at end of file diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index dcbc435f..be85de17 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4840,5 +4840,32 @@ }, "severity": "info", "check_id": "granule_project_short_name_check" + }, + "granule_sensor_short_name_check": { + "rule_name": "Granule Sensor Short Name Check", + "fields_to_apply": { + "echo-g": [ + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName", + "Granule/Collection/DataSetId", + "Granule/Collection/ShortName", + "Granule/Collection/VersionId" + ] + } + ], + "umm-g": [ + { + "fields": [ + "Platforms/Instruments/ComposedOf/ShortName", + "CollectionReference/EntryTitle", + "CollectionReference/ShortName", + "CollectionReference/Version" + ] + } + ] + }, + "severity": "info", + "check_id": "granule_sensor_short_name_check" } } \ No newline at end of file diff --git a/tests/fixtures/test_cmr_metadata.echo-g b/tests/fixtures/test_cmr_metadata.echo-g index 00df0637..f79a10d8 100644 --- a/tests/fixtures/test_cmr_metadata.echo-g +++ b/tests/fixtures/test_cmr_metadata.echo-g @@ -35,9 +35,22 @@ 2022-02-10T21:09:27.619Z + + + + + + + SWIR + + + + + + - Terra + Tarra diff --git a/tests/fixtures/test_cmr_metadata.umm-g b/tests/fixtures/test_cmr_metadata.umm-g index 57b1870c..616eecdb 100644 --- a/tests/fixtures/test_cmr_metadata.umm-g +++ b/tests/fixtures/test_cmr_metadata.umm-g @@ -193,7 +193,7 @@ } }], "Projects": [{ - "ShortName": "Terra" + "ShortName": "Tarra" }], "Platforms": [{ "ShortName": "Aqua", From 74ff546723c35824f6c614e18f86e5475bddf1ac Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Wed, 25 May 2022 16:26:09 -0500 Subject: [PATCH 196/261] Update string_validator.py Removed unnecessary lines of code --- pyQuARC/code/string_validator.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index ec1a0f94..ac561f1c 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -356,7 +356,6 @@ def idnnode_shortname_gcmd_check(resource_type): @staticmethod def set_cmr_prms(collection_entry_title, collection_shortname, collection_version): - #name = '' if collection_entry_title == None: cmr_prms = f'collections.umm_json?shortName={collection_shortname}&version={collection_version}' else: @@ -403,11 +402,8 @@ def granule_sensor_validate_against_collection(cmr_prms, sensor_shortname): @staticmethod @if_arg def granule_sensor_short_name_check(sensor_shortname, collection_entry_title=None, collection_shortname=None, collection_version=None): - print('test') cmr_prms = StringValidator.set_cmr_prms(collection_entry_title, collection_shortname, collection_version) - print(cmr_prms) validity = StringValidator.granule_sensor_validate_against_collection(cmr_prms, sensor_shortname) - print(validity) return { "valid": validity, "value": sensor_shortname From 4c3484d1bbbef228c8d7e0758424451d9df765d2 Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Thu, 26 May 2022 09:23:05 -0500 Subject: [PATCH 197/261] Update base_validator.py Added extra line --- pyQuARC/code/base_validator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyQuARC/code/base_validator.py b/pyQuARC/code/base_validator.py index 5e115015..ab95e375 100644 --- a/pyQuARC/code/base_validator.py +++ b/pyQuARC/code/base_validator.py @@ -46,4 +46,5 @@ def compare(first, second, relation): @staticmethod def cmr_request(cmr_prms): - return requests.get(f'{CMR_URL}/search/{cmr_prms}') \ No newline at end of file + return requests.get(f'{CMR_URL}/search/{cmr_prms}') + From 7293118a11f0df1b564ec312b01632e27ad60a06 Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Thu, 26 May 2022 09:23:55 -0500 Subject: [PATCH 198/261] Update checks.json Added extra line --- pyQuARC/schemas/checks.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 1b9236db..6e3a70aa 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -254,4 +254,4 @@ "check_function": "granule_sensor_short_name_check", "available": true } -} \ No newline at end of file +} From 87486b61b136de91f2014bb5a92f42ff8a4c4235 Mon Sep 17 00:00:00 2001 From: Jenny Wood <57103986+jenny-m-wood@users.noreply.github.com> Date: Thu, 26 May 2022 13:10:43 -0500 Subject: [PATCH 199/261] Update pyQuARC/schemas/check_messages.json Co-authored-by: svbagwell <70609840+svbagwell@users.noreply.github.com> --- pyQuARC/schemas/check_messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 6b4dcfad..0d7967ad 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -943,4 +943,4 @@ }, "remediation": "Recommend providing the granule data format." } -} \ No newline at end of file +} From 97da067a20f7815d432de571ec570e98994974e4 Mon Sep 17 00:00:00 2001 From: Jenny Wood <57103986+jenny-m-wood@users.noreply.github.com> Date: Thu, 26 May 2022 13:10:55 -0500 Subject: [PATCH 200/261] Update pyQuARC/schemas/checks.json Co-authored-by: svbagwell <70609840+svbagwell@users.noreply.github.com> --- pyQuARC/schemas/checks.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index ae0d6f48..72cf4a66 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -249,4 +249,4 @@ "check_function": "presence_check", "available": true } -} \ No newline at end of file +} From a4c1f33ec770695eaf2ffdf81f497efbc35f1625 Mon Sep 17 00:00:00 2001 From: Jenny Wood <57103986+jenny-m-wood@users.noreply.github.com> Date: Thu, 26 May 2022 13:11:08 -0500 Subject: [PATCH 201/261] Update pyQuARC/schemas/rule_mapping.json Co-authored-by: svbagwell <70609840+svbagwell@users.noreply.github.com> --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index dbea60b4..91079d6b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4648,4 +4648,4 @@ "severity": "warning", "check_id": "granule_data_format_presence_check" } -} \ No newline at end of file +} From fe78c8eba54dfad50ec8ab8ebd514421fcbaa469 Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Thu, 26 May 2022 14:46:59 -0500 Subject: [PATCH 202/261] Update rule_mapping.json Added new line at end of file --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index be85de17..562eb102 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4868,4 +4868,4 @@ "severity": "info", "check_id": "granule_sensor_short_name_check" } -} \ No newline at end of file +} From 0905055eca7240908970bc1a8ccca2786e8c86e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 26 May 2022 15:35:21 -0500 Subject: [PATCH 203/261] Refactor --- pyQuARC/code/checker.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index 65de6a0b..3573a1ca 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -172,8 +172,7 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): for field_dict in list_of_fields_to_apply: dependencies = self.scheduler.get_all_dependencies(rule_id, check, field_dict) main_field = field_dict["fields"][0] - if data := field_dict.get("data"): - external_data = data + external_data = field_dict.get("data") or external_data result_dict.setdefault(main_field, {}) if not self._check_dependencies_validity(dependencies, field_dict): continue From 30ccddf42389a4c6d8a82bfd0a09c5f0b0f9b9eb Mon Sep 17 00:00:00 2001 From: esr0004 <90414279+esr0004@users.noreply.github.com> Date: Tue, 31 May 2022 11:25:51 -0500 Subject: [PATCH 204/261] Update pyQuARC/schemas/rule_mapping.json Co-authored-by: svbagwell <70609840+svbagwell@users.noreply.github.com> --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index df246508..8b3f5531 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4614,4 +4614,4 @@ "severity": "info", "check_id": "date_compare" } -} \ No newline at end of file +} From 36d5c92033408994549358f03e453d035beebb5a Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 31 May 2022 14:52:13 -0500 Subject: [PATCH 205/261] Added granule sensor presence check --- pyQuARC/code/custom_validator.py | 21 +++++++++++++++++++++ pyQuARC/schemas/check_messages.json | 8 ++++++++ pyQuARC/schemas/checks.json | 5 +++++ pyQuARC/schemas/rule_mapping.json | 17 +++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index f81e6f57..28db0454 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -1,7 +1,9 @@ import json +import requests from .base_validator import BaseValidator from .string_validator import StringValidator +from .constants import CMR_URL from .utils import if_arg @@ -98,6 +100,25 @@ def presence_check(*field_values): return {"valid": validity, "value": value} + @staticmethod + def granule_sensor_presence_check(sensor_values, collection_shortname=None, version=None, dataset_id=None): + """ + Checks if sensor is provided at the granule level if provided at + collection level + """ + if dataset_id == None: + collection = requests.get(f'{CMR_URL}/search/collections.umm_json?short_name={collection_shortname}&version={version}').json() + else: + collection = requests.get(f'{CMR_URL}/search/collections.umm_json?DatasetId={dataset_id}').json() + + instruments = collection['items'][0]['umm']['Platforms'][0]['Instruments'][0] + + if 'ComposedOf' in instruments.keys(): + response = CustomValidator.presence_check(sensor_values) + return response + else: + return None + @staticmethod @if_arg def opendap_url_location_check(field_value): diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 8f687658..2ca1dec0 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -311,6 +311,14 @@ }, "remediation": "Recommend providing the correct instrument short name in the granule metadata." }, + "granule_sensor_presence_check": { + "failure": "The sensor short name is missing.", + "help": { + "message": "", + "url": "" + }, + "remediation": "Recommend providing the sensor short name." + }, "validate_granule_sensor_against_collection": { "failure": "The sensor short name listed in the granule metadata does not match the sensor short name listed in the collection metadata.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 2cce433e..9a06a7c1 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -194,6 +194,11 @@ "check_function": "presence_check", "available": true }, + "granule_sensor_presence_check": { + "data_type": "custom", + "check_function": "granule_sensor_presence_check", + "available": true + }, "doi_link_update": { "data_type": "url", "check_function": "doi_link_update", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index e06b2fbb..5111ab46 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4685,6 +4685,23 @@ "severity": "error", "check_id": "validate_granule_platform_against_collection" }, + "granule_sensor_presence_check": { + "rule_name": "Granule Sensor Presence Check", + "fields_to_apply": { + "echo-g" : [ + { + "fields": [ + "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName", + "Granule/Collection/ShortName", + "Granule/Collection/VersionId", + "Granule/Collection/DataSetId" + ] + } + ] + }, + "severity": "info", + "check_id": "granule_sensor_presence_check" + }, "validate_granule_sensor_against_collection": { "rule_name": "Granule Sensor Short Name Check", "fields_to_apply": { From ab601a11be8e330f51b693eec88fa61ecbc47618 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 1 Jun 2022 08:47:22 -0500 Subject: [PATCH 206/261] added umm-g fields to comparison checks --- pyQuARC/schemas/rule_mapping.json | 54 +++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 5111ab46..2220d645 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2494,6 +2494,13 @@ "Granule/Platforms/Platform/Instruments/Instrument/ShortName" ] } + ], + "umm-g": [ + { + "fields": [ + "Platform/Instrument/ShortName" + ] + } ] }, "severity": "info", @@ -2511,6 +2518,16 @@ "Granule/Collection/DataSetId" ] } + ], + "umm-g": [ + { + "fields": [ + "Platform/Instrument/ShortName", + "CollectionReference/ShortName", + "CollectionReference/Version", + "CollectionReference/EntryTitle" + ] + } ] }, "severity": "error", @@ -4663,6 +4680,13 @@ "Granule/Platforms/Platform/ShortName" ] } + ], + "umm-g": [ + { + "fields": [ + "Platforms/ShortName" + ] + } ] }, "severity": "info", @@ -4680,6 +4704,16 @@ "Granule/Collection/DataSetId" ] } + ], + "umm-g": [ + { + "fields": [ + "Platforms/ShortName", + "CollectionReference/ShortName", + "CollectionReference/Version", + "CollectionReference/EntryTitle" + ] + } ] }, "severity": "error", @@ -4697,6 +4731,16 @@ "Granule/Collection/DataSetId" ] } + ], + "umm-g": [ + { + "fields": [ + "Platform/Instrument/ComposedOf/ShortName", + "CollectionReference/ShortName", + "CollectionReference/Version", + "CollectionReference/EntryTitle" + ] + } ] }, "severity": "info", @@ -4714,6 +4758,16 @@ "Granule/Collection/DataSetId" ] } + ], + "umm-g": [ + { + "fields": [ + "Platform/Instrument/ComposedOf/ShortName", + "CollectionReference/ShortName", + "CollectionReference/Version", + "CollectionReference/EntryTitle" + ] + } ] }, "severity": "error", From a9fb26cf7048ce124a712b903ca30e46788e0b1e Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Wed, 1 Jun 2022 09:20:42 -0500 Subject: [PATCH 207/261] Addressing Essence's comments -- adding and deleting echo-g fields --- pyQuARC/schemas/rule_mapping.json | 49 +++++++++++++++++++------------ 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 2220d645..fea92a8b 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -1411,13 +1411,6 @@ "Platform/Instrument/ComposedOf/Characteristics/DataType" ] } - ], - "echo-g": [ - { - "fields": [ - "Granule/AdditionalAttributes/AdditionalAttribute/DataType" - ] - } ] }, "data": [ @@ -1515,12 +1508,6 @@ } ], "echo-g": [ - { - "fields": [ - "Granule/Platforms/Platform/Characteristics/Characteristic/Name", - "Granule/Platforms/Platform/Characteristics/Characteristic" - ] - }, { "fields": [ "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Name", @@ -1750,12 +1737,6 @@ } ], "echo-g": [ - { - "fields": [ - "Granule/Platforms/Platform/Characteristics/Characteristic/Value", - "Granule/Platforms/Platform/Characteristics/Characteristic" - ] - }, { "fields": [ "Granule/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Value", @@ -4288,6 +4269,36 @@ "fields": [ "Granule/LastUpdate" ] + }, + { + "fields": [ + "Granule/Temporal/RangeDateTime/BeginningDateTime" + ] + }, + { + "fields": [ + "Granule/Temporal/RangeDateTime/EndingDateTime" + ] + }, + { + "fields": [ + "Granule/Temporal/SingleDateTime" + ] + }, + { + "fields": [ + "Granule/DeleteTime" + ] + }, + { + "fields": [ + "Granule/DataGranule/ProductionDateTime" + ] + }, + { + "fields": [ + "Granule/OrbitCalculatedSpatialDomains/OrbitCalculatedSpatialDomain/EquatorCrossingDateTime" + ] } ] }, From 3a986f7f5187e7c80c482683f9f5afd51e164ff9 Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Wed, 1 Jun 2022 09:57:49 -0500 Subject: [PATCH 208/261] Updates based on feedback from Essence Added field for data_format_gcmd_check in rule_mapping.json, deleted extra space --- pyQuARC/schemas/rule_mapping.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 562eb102..095d6af7 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2492,6 +2492,11 @@ "fields": [ "Granule/DataFormat" ] + }, + { + "fields": [ + "Granule/DataGranule/AdditionalFile/Format" + ] } ], "dif10": [ @@ -4408,7 +4413,6 @@ "Granule/OnlineResources/OnlineResource/MimeType" ] } - ], "dif10": [ { From 349e3543890f21a9dde327ae4b6aa478e2a87202 Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Wed, 1 Jun 2022 12:25:18 -0500 Subject: [PATCH 209/261] Update check_messages.json Update wording of failure and remediation messages for granule_project_short_name_check --- pyQuARC/schemas/check_messages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index de95869f..3891e4fd 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -952,12 +952,12 @@ "remediation": "Recommend providing a Single Date Time instead of a Range Date Time." }, "granule_project_short_name_check": { - "failure": "The campaign short name listed in the granule metadata is missing or does not match the campaign short name listed in the collection metadata.", + "failure": "The campaign/project short name listed in the granule metadata does not match the campaign/project short name listed in the collection metadata.", "help": { "message": "", "url": "" }, - "remediation": "Recommend providing [campaign short name listed in collection metadata] as the campaign short name in the granule metadata." + "remediation": "Recommend providing the correct campaign/project in the granule metadata." }, "granule_sensor_short_name_check": { "failure": "The sensor short name listed in the granule metadata is missing or does not match the sensor short name listed in the collection metadata.", From 6e4661a41dac9b7e84cb63b97fd01de056acee3c Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Wed, 1 Jun 2022 12:32:33 -0500 Subject: [PATCH 210/261] Update check_messages.json Update remediation message for `granule_project_short_name_check` Update failure and remediation messages for `granule_sensor_short_name_check` --- pyQuARC/schemas/check_messages.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 3891e4fd..284c73ea 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -957,14 +957,14 @@ "message": "", "url": "" }, - "remediation": "Recommend providing the correct campaign/project in the granule metadata." + "remediation": "Recommend providing the correct campaign/project short name in the granule metadata." }, "granule_sensor_short_name_check": { - "failure": "The sensor short name listed in the granule metadata is missing or does not match the sensor short name listed in the collection metadata.", + "failure": "The sensor short name listed in the granule metadata does not match the sensor short name listed in the collection metadata.", "help": { "message": "", "url": "" }, - "remediation": "Recommend providing [sensor short name listed in collection metadata] as the sensor short name in the granule metadata." + "remediation": "Recommend providing the correct sensor short name in the granule metadata." } } From 5114e6786c0ca85dd591143f36a0d7d3be78bb2a Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Wed, 1 Jun 2022 12:36:45 -0500 Subject: [PATCH 211/261] Update test_cmr_metadata.echo-g Removing changes to test_cmr_metadata.echo-g --- tests/fixtures/test_cmr_metadata.echo-g | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/tests/fixtures/test_cmr_metadata.echo-g b/tests/fixtures/test_cmr_metadata.echo-g index f79a10d8..d5569791 100644 --- a/tests/fixtures/test_cmr_metadata.echo-g +++ b/tests/fixtures/test_cmr_metadata.echo-g @@ -3,7 +3,7 @@ 2022-04-15 2022-04-15T10:27:27.492Z - ASTER Digital Elevation Model V003 + ATLAS/ICESat-2 L3A Land and Vegetation Height V005 44.2424182892 @@ -35,24 +35,6 @@ 2022-02-10T21:09:27.619Z - - - - - - - SWIR - - - - - - - - - Tarra - - https://n5eil01u.ecs.nsidc.org/DP7/ATLAS/ATL08.005/2022.02.10/ATL08_20220210222256_07731412_005_01.h5 From 575ea4bd7afc25f1559e0cdeb1121c3c498a9e1b Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Wed, 1 Jun 2022 12:37:52 -0500 Subject: [PATCH 212/261] Update test_cmr_metadata.umm-g Removing changes to test_cmr_metadata.umm-g --- tests/fixtures/test_cmr_metadata.umm-g | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/fixtures/test_cmr_metadata.umm-g b/tests/fixtures/test_cmr_metadata.umm-g index 616eecdb..a9f2ebac 100644 --- a/tests/fixtures/test_cmr_metadata.umm-g +++ b/tests/fixtures/test_cmr_metadata.umm-g @@ -14,7 +14,8 @@ "Type": "Delete" }], "CollectionReference": { - "EntryTitle": "ASTER Digital Elevation Model V003" + "ShortName": "CollectionShortName", + "Version": "1.6" }, "AccessConstraints": { "Description" : "Public Access", @@ -192,9 +193,6 @@ "ScienceQualityFlagExplanation": "Science Quality Flag Explanation" } }], - "Projects": [{ - "ShortName": "Tarra" - }], "Platforms": [{ "ShortName": "Aqua", "Instruments": [{ @@ -207,7 +205,7 @@ "Value": "22F" }], "ComposedOf": [{ - "ShortName": "SWIR", + "ShortName": "AMSR-E_ChildInstrument", "Characteristics": [{ "Name": "ChildInstrumentCharacteristicName3", "Value": "250" @@ -217,6 +215,11 @@ "OperationalModes": ["Mode1", "Mode2"] }] }], + "Projects": [{ + "ShortName": "Project1" + }, { + "ShortName": "Project2" + }], "AdditionalAttributes": [{ "Name": "AdditionalAttribute1 Name1", "Values": ["AdditionalAttribute1 Value3", "AdditionalAttribute1 Value4"] From 1537af733815d0291e74cd646745006abd47b68d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 09:33:09 -0500 Subject: [PATCH 213/261] Add revision version argument --- pyQuARC/code/downloader.py | 10 +++++----- pyQuARC/main.py | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index 5d102f3b..4da0b785 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -1,8 +1,7 @@ -import json import re import requests -from xmltodict import parse +from urllib.parse import urlparse from .constants import CMR_URL @@ -32,7 +31,9 @@ def __init__(self, concept_id, metadata_format, version=None, cmr_host=CMR_URL): # big XML string or dict is stored here self.downloaded_content = None - self.cmr_host = cmr_host + + parsed_url = urlparse(cmr_host) + self.cmr_host = f'{parsed_url.scheme}://{parsed_url.netloc}' def _valid_concept_id(self): """ @@ -57,7 +58,6 @@ def _construct_url(self): base_url = Downloader.BASE_URL.format(cmr_host=self.cmr_host) version = f'/{self.version}' if self.version else '' constructed_url = f"{base_url}{self.concept_id}{version}.{self.metadata_format}" - return constructed_url def log_error(self, error_message_code, kwargs): @@ -100,7 +100,7 @@ def download(self): "status_code": response.status_code, }, ) - return + raise Exception(f"CMR request failed: {url}") # stores the data in the downloaded_content variable self.downloaded_content = response.text diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 8e64f63a..79aadfcf 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -38,6 +38,7 @@ def __init__( checks_override=None, rules_override=None, messages_override=None, + version=None, cmr_host=CMR_URL, ): """ @@ -70,6 +71,7 @@ def __init__( self.rules_override = rules_override self.messages_override = messages_override self.cmr_host = cmr_host + self.version = version def _cmr_query(self): """ @@ -142,7 +144,7 @@ def validate(self): if self.concept_ids: for concept_id in tqdm(self.concept_ids): - downloader = Downloader(concept_id, self.metadata_format, self.cmr_host) + downloader = Downloader(concept_id, self.metadata_format, self.version, self.cmr_host) content = downloader.download().encode() validation_errors = checker.run(content) @@ -214,7 +216,8 @@ def display_results(self): --concept_ids --file --fake - --cmr_url + --cmr_host + --version """ parser = argparse.ArgumentParser() download_group = parser.add_mutually_exclusive_group() @@ -255,6 +258,13 @@ def display_results(self): type=str, help="The cmr host to use. Default is: https://cmr.earthdata.nasa.gov", ) + parser.add_argument( + "--version", + action="store", + nargs="?", + type=str, + help="The revision version of the collection. Default is the latest version.", + ) args = parser.parse_args() parser.usage = parser.format_help().replace("optional ", "") @@ -272,6 +282,7 @@ def display_results(self): file_path=args.file, metadata_format=args.format or ECHO10, cmr_host=args.cmr_host or CMR_URL, + version=args.version or None, ) results = arc.validate() arc.display_results() From 05b2b8c20bda5e578d965da102ab94c3530b6124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 10:37:16 -0500 Subject: [PATCH 214/261] Add support for `not` relations --- pyQuARC/code/base_validator.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pyQuARC/code/base_validator.py b/pyQuARC/code/base_validator.py index e42c21dd..2aad0339 100644 --- a/pyQuARC/code/base_validator.py +++ b/pyQuARC/code/base_validator.py @@ -34,7 +34,13 @@ def gte(first, second): def is_in(value, list_of_values): return value in list_of_values + @staticmethod + def contains(list_of_values, value): + return value in list_of_values + @staticmethod def compare(first, second, relation): + if relation.startswith('not_'): + return not BaseValidator.compare(first, second, relation[4:]) func = getattr(BaseValidator, relation) return func(first, second) From 6361fe59a71e74c5b4869649203db4b70820c262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 10:38:40 -0500 Subject: [PATCH 215/261] Rename `presence_check` to `one_item_presence_check` --- CHECKS.md | 2 +- pyQuARC/code/custom_validator.py | 2 +- pyQuARC/schemas/checks.json | 9 ++------ pyQuARC/schemas/rule_mapping.json | 34 +++++++++++++++++-------------- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/CHECKS.md b/CHECKS.md index 75b03c7e..08d20558 100644 --- a/CHECKS.md +++ b/CHECKS.md @@ -73,7 +73,7 @@ Checks if the field value is one of the controlled keywords; provide the control Checks if the doi provided resolves to a valid document. -#### `presence_check` +#### `one_item_presence_check` Checks if one of the given fields is populated. diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index de60e688..3c133945 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -96,7 +96,7 @@ def bounding_coordinate_logic_check(west, north, east, south): return result @staticmethod - def presence_check(*field_values): + def one_item_presence_check(*field_values): """ Checks if one of the field has a value """ diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 988097d8..91d0cc18 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -164,9 +164,9 @@ "check_function": "chrono_gcmd_check", "available": true }, - "presence_check": { + "one_item_presence_check": { "data_type": "custom", - "check_function": "presence_check", + "check_function": "one_item_presence_check", "available": true }, "doi_link_update": { @@ -179,11 +179,6 @@ "check_function": "bounding_coordinate_logic_check", "available": true }, - "opendap_url_location_check": { - "data_type": "custom", - "check_function": "opendap_url_location_check", - "available": true - }, "user_services_check": { "data_type": "custom", "check_function": "user_services_check", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 31252313..3b0f5457 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2542,7 +2542,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "bounding_coordinate_logic_check": { "rule_name": "Bounding Coordinates Logic Check", @@ -2754,7 +2754,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "spatial_coverage_type_presence_check": { "rule_name": "Spatial Coverage Type Presence Check", @@ -2782,7 +2782,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "horizontal_datum_name_check": { "rule_name": "Horizontal Datum Name Check", @@ -2810,7 +2810,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "online_access_url_presence_check": { "rule_name": "Online Access URL Presence Check", @@ -2824,7 +2824,7 @@ ] }, "severity": "error", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "online_resource_url_presence_check": { "rule_name": "Online Resource URL Presence Check", @@ -2838,7 +2838,7 @@ ] }, "severity": "error", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "online_access_url_description_check": { "rule_name": "Online Access URL Description Check", @@ -2852,7 +2852,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "online_resource_url_description_check": { "rule_name": "Online Resource URL Description Check", @@ -2866,7 +2866,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "opendap_url_location_check": { "rule_name": "ECHO10 OPeNDAP URL Location Check", @@ -2879,8 +2879,12 @@ } ] }, + "data": [ + "opendap" + ], + "relation": "not_contains", "severity": "error", - "check_id": "opendap_url_location_check" + "check_id": "string_compare" }, "location_keyword_presence_check": { "rule_name": "Location Keyword Presence Check", @@ -2908,7 +2912,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "spatial_extent_requirement_fulfillment_check": { "rule_name": "Spatial Extent Requirement Fulfillment Check", @@ -2945,7 +2949,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "license_information_check": { "rule_name": "License Information Check", @@ -2975,7 +2979,7 @@ ] }, "severity": "warning", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "collection_citation_presence_check": { "rule_name": "Collection Citation Presence Check", @@ -3003,7 +3007,7 @@ ] }, "severity": "warning", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "user_services_check": { "rule_name": "User Services Check", @@ -3455,7 +3459,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "ftp_protocol_check": { "rule_name": "FTP Protocol Check", @@ -3932,7 +3936,7 @@ ] }, "severity": "error", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "horizontal_data_resolution_unit_check": { "rule_name": "Horizontal Data Resolution Unit Controlled Vocabulary Check", From c17844b04958dc915f5d9c02830aacd6fe98eedd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 10:39:29 -0500 Subject: [PATCH 216/261] Add support for external `relation` --- pyQuARC/code/checker.py | 4 +++- pyQuARC/code/custom_checker.py | 4 ++-- tests/fixtures/test_cmr_metadata.echo10 | 4 ++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index 3573a1ca..fe627873 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -166,6 +166,7 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): rule_id ) or self.rule_mapping.get(rule_id) external_data = rule_mapping.get("data", []) + relation = rule_mapping.get("relation") list_of_fields_to_apply = \ rule_mapping.get("fields_to_apply").get(self.metadata_format, {}) @@ -180,7 +181,8 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): func, metadata_content, field_dict, - external_data + external_data, + relation ) self.tracker.update_data(rule_id, main_field, result["valid"]) diff --git a/pyQuARC/code/custom_checker.py b/pyQuARC/code/custom_checker.py index dcf950e5..158fe57a 100644 --- a/pyQuARC/code/custom_checker.py +++ b/pyQuARC/code/custom_checker.py @@ -88,7 +88,7 @@ def _get_path_value(content_to_validate, path_string): content_to_validate, path, container, query_params) return container - def run(self, func, content_to_validate, field_dict, external_data): + def run(self, func, content_to_validate, field_dict, external_data, external_relation): """ Runs the custom check based on `func` to the `content_to_validate`'s `field_dict` path @@ -125,7 +125,7 @@ def run(self, func, content_to_validate, field_dict, external_data): validity = None for arg in args: function_args = [*arg] - function_args.extend([extra_arg for extra_arg in [relation, *external_data] if extra_arg]) + function_args.extend([extra_arg for extra_arg in [relation, *external_data, external_relation] if extra_arg]) func_return = func(*function_args) valid = func_return["valid"] # can be True, False or None if valid is not None: diff --git a/tests/fixtures/test_cmr_metadata.echo10 b/tests/fixtures/test_cmr_metadata.echo10 index bde1f69f..72aa0a71 100644 --- a/tests/fixtures/test_cmr_metadata.echo10 +++ b/tests/fixtures/test_cmr_metadata.echo10 @@ -127,6 +127,10 @@ Lastly, users should continue to carefully observe and weigh information from th https://search.earthdata.nasa.gov/search?q=ACOS_L2S+7.3 Use the Earthdata Search to find and retrieve data sets across multiple data centers. + + https://opendap/search?q=ACOS_L2S+7.3 + Use the Earthdata Search to find and retrieve data sets across multiple data centers. + From a185647d1fd5509cc19182c6b64c97d86d4f3b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 10:44:24 -0500 Subject: [PATCH 217/261] Remove `opendap_url_location_check` --- pyQuARC/code/custom_validator.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 3c133945..e1a6fda7 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -115,15 +115,6 @@ def one_item_presence_check(*field_values): "value": value } - @staticmethod - @if_arg - def opendap_url_location_check(field_value): - # The field shouldn't have a opendap url - return { - "valid": 'opendap' not in field_value.lower(), - "value": field_value - } - @staticmethod @if_arg def user_services_check(first_name, middle_name, last_name): From 49a0fb48d8b6b2f7726d8e644d37fe53e4f12957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 13:37:14 -0500 Subject: [PATCH 218/261] Apply de morgan's law to the logic in `doi_missing_reason_explanation` --- pyQuARC/code/custom_validator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index e1a6fda7..951b93f4 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -130,7 +130,7 @@ def user_services_check(first_name, middle_name, last_name): @staticmethod def doi_missing_reason_explanation(explanation, missing_reason, doi): return { - "valid": not((not doi) and (missing_reason) and (not explanation)), + "valid": doi or not missing_reason or explanation, "value": explanation } From d511ef324dd7a494b38060fc6671622af5071cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 13:40:14 -0500 Subject: [PATCH 219/261] Refactor `user_services_check` --- pyQuARC/code/custom_validator.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 951b93f4..91d8c022 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -119,10 +119,10 @@ def one_item_presence_check(*field_values): @if_arg def user_services_check(first_name, middle_name, last_name): return { - "valid": not ( - first_name.lower() == 'user' and - last_name.lower() == 'services' and - (not middle_name or (middle_name.lower() == 'null')) + "valid": ( + first_name.lower() != 'user' or + last_name.lower() != 'services' or + (middle_name and (middle_name.lower() != 'null')) ), "value": f'{first_name} {middle_name} {last_name}' } From 644d019567e35466754278fda0c4699da43a48b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 14:16:35 -0500 Subject: [PATCH 220/261] Remove unnecessary variables --- pyQuARC/code/custom_validator.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 91d8c022..01059d36 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -149,15 +149,13 @@ def collection_progress_consistency_check(collection_state, ends_at_present_flag # Logic: https://github.com/NASA-IMPACT/pyQuARC/issues/61 validity = False collection_state = collection_state.upper() - ending_date_time_exists = bool(ending_date_time) - ends_at_present_flag_exists = bool(ends_at_present_flag) - ends_at_present_flag = str(ends_at_present_flag).lower() if ends_at_present_flag_exists else None + ends_at_present_flag = str(ends_at_present_flag).lower() if ends_at_present_flag else None if collection_state in ["ACTIVE", "IN WORK"]: - validity = (not ending_date_time_exists) and (ends_at_present_flag == "true") + validity = (not ending_date_time) and (ends_at_present_flag == "true") elif collection_state == "COMPLETE": - validity = ending_date_time_exists and ( - not ends_at_present_flag_exists or ( + validity = ending_date_time and ( + not ends_at_present_flag or ( ends_at_present_flag == "false" ) ) From ac5e3b02ee230260162d286437d2d612f2e6b36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 14:30:25 -0500 Subject: [PATCH 221/261] Run `ends_at_present_flag_logic_check` only if arg present --- pyQuARC/code/custom_validator.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 01059d36..5c33b0cb 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -11,18 +11,18 @@ def __init__(self): super().__init__() @staticmethod + @if_arg def ends_at_present_flag_logic_check( ends_at_present_flag, ending_date_time, collection_state ): collection_state = collection_state.upper() - if not (valid := ends_at_present_flag == None): - valid = ( - ends_at_present_flag == True - and not (ending_date_time) and collection_state == "ACTIVE" - ) or ( - ends_at_present_flag == False - and bool(ending_date_time) and collection_state == "COMPLETE" - ) + valid = ( + ends_at_present_flag == True + and not (ending_date_time) and collection_state == "ACTIVE" + ) or ( + ends_at_present_flag == False + and bool(ending_date_time) and collection_state == "COMPLETE" + ) return {"valid": valid, "value": ends_at_present_flag} From 4f799911b5aaf2a37981dc2cb14b652bf38c30b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 14:34:00 -0500 Subject: [PATCH 222/261] Rename to `date_or_datetime_format_check` --- pyQuARC/code/datetime_validator.py | 2 +- pyQuARC/schemas/check_messages.json | 2 +- pyQuARC/schemas/checks.json | 4 ++-- pyQuARC/schemas/rule_mapping.json | 28 ++++++++++++++-------------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/pyQuARC/code/datetime_validator.py b/pyQuARC/code/datetime_validator.py index fdf24de4..0ab042c8 100644 --- a/pyQuARC/code/datetime_validator.py +++ b/pyQuARC/code/datetime_validator.py @@ -78,7 +78,7 @@ def iso_format_check(datetime_string): @staticmethod @if_arg - def date_datetime_format_check(datetime_string): + def date_or_datetime_format_check(datetime_string): """ Performs the Date/DateTime Format Check Checks if the datetime_string is a valid ISO date or ISO datetime string diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 0ff8f8a0..13650209 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -7,7 +7,7 @@ }, "remediation": "Make sure the datetime complies with ISO 1601 standard." }, - "date_datetime_format_check": { + "date_or_datetime_format_check": { "failure": "`{}` does not adhere to the ISO 1601 standard for date or datetime.", "help": { "message": "", diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index bb9a5371..026a9759 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -14,9 +14,9 @@ "check_function": "iso_format_check", "available": true }, - "date_datetime_format_check": { + "date_or_datetime_format_check": { "data_type": "datetime", - "check_function": "date_datetime_format_check", + "check_function": "date_or_datetime_format_check", "available": true }, "url_check": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 7a46ae44..72e8f47a 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -20,7 +20,7 @@ "relation": "gte", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -50,7 +50,7 @@ "relation": "gte", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -80,7 +80,7 @@ "relation": "lte", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -110,7 +110,7 @@ "relation": "neq", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -140,7 +140,7 @@ "relation": "lte", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -170,7 +170,7 @@ "relation": "neq", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -200,7 +200,7 @@ "relation": "lt", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] }, @@ -212,7 +212,7 @@ "relation": "lt", "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -284,7 +284,7 @@ }, "severity": "error" }, - "date_datetime_format_check": { + "date_or_datetime_format_check": { "rule_name": "Date or Datetime ISO Format Check", "fields_to_apply": { "dif10": [ @@ -366,7 +366,7 @@ ] }, "severity": "error", - "check_id": "date_datetime_format_check" + "check_id": "date_or_datetime_format_check" }, "url_check": { "rule_name": "URL Health and Status Check", @@ -2014,7 +2014,7 @@ ], "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] }, @@ -2041,7 +2041,7 @@ ], "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } @@ -2059,7 +2059,7 @@ ], "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] }, @@ -2069,7 +2069,7 @@ ], "dependencies": [ [ - "date_datetime_format_check" + "date_or_datetime_format_check" ] ] } From 729ee36b79ea9ad00ec3bc1d18c07e575a760235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 6 Jun 2022 14:46:49 -0500 Subject: [PATCH 223/261] Fix empty field dependencies --- pyQuARC/code/scheduler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/code/scheduler.py b/pyQuARC/code/scheduler.py index e212d97b..92a47c8d 100644 --- a/pyQuARC/code/scheduler.py +++ b/pyQuARC/code/scheduler.py @@ -27,7 +27,7 @@ def get_all_dependencies(self, rule_id, check, field_dict=None): dependencies_from_fields = [] if field_dict: - return dependencies_from_fields + return field_dict.get("dependencies", []) rule = self.rule_mapping.get(rule_id) if field_objects := rule.get("fields_to_apply").get(self.metadata_format): From 1fbf3de6cdbde3c7a3069f730af63deed646a46b Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Tue, 7 Jun 2022 08:13:57 -0500 Subject: [PATCH 224/261] spelling mistakes in rule_mapping --- pyQuARC/schemas/rule_mapping.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index fea92a8b..d28adb57 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2479,7 +2479,7 @@ "umm-g": [ { "fields": [ - "Platform/Instrument/ShortName" + "Platforms/Instruments/ShortName" ] } ] @@ -2503,7 +2503,7 @@ "umm-g": [ { "fields": [ - "Platform/Instrument/ShortName", + "Platforms/Instruments/ShortName", "CollectionReference/ShortName", "CollectionReference/Version", "CollectionReference/EntryTitle" @@ -4746,7 +4746,7 @@ "umm-g": [ { "fields": [ - "Platform/Instrument/ComposedOf/ShortName", + "Platforms/Instruments/ComposedOf/ShortName", "CollectionReference/ShortName", "CollectionReference/Version", "CollectionReference/EntryTitle" @@ -4773,7 +4773,7 @@ "umm-g": [ { "fields": [ - "Platform/Instrument/ComposedOf/ShortName", + "Platforms/Instruments/ComposedOf/ShortName", "CollectionReference/ShortName", "CollectionReference/Version", "CollectionReference/EntryTitle" From 81b9611cf6da4e2900521c1a498472ffce954e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 7 Jun 2022 10:54:46 -0500 Subject: [PATCH 225/261] Add docstrings and minor refactor --- pyQuARC/code/custom_validator.py | 52 +++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 5c33b0cb..ef680f8c 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -38,10 +38,12 @@ def ends_at_present_flag_presence_check( @staticmethod def mime_type_check(mime_type, url_type, controlled_list): + """ + Checks that if the value for url_type is "USE SERVICE API", + the mime_type should be one of the values from a controlled list + For all other cases, the check should be valid + """ result = {"valid": True, "value": mime_type} - # The check checks that if the value for url_type is "USE SERVICE API", - # the mime_type should be one of the values from a controlled list - # For all other cases, the check should be valid if url_type: if "USE SERVICE API" in url_type: if mime_type: @@ -98,10 +100,10 @@ def bounding_coordinate_logic_check(west, north, east, south): @staticmethod def one_item_presence_check(*field_values): """ - Checks if one of the field has a value + Checks if one of the specified fields is populated + At least one of the `field_values` should not be null + It is basically a OneOf check """ - # At least one of all the fields should have a value - # It is basically a OneOf check validity = False value = None @@ -109,6 +111,7 @@ def one_item_presence_check(*field_values): if field_value: value = field_value validity = True + break return { "valid": validity, @@ -182,13 +185,40 @@ def uniqueness_check(list_of_objects, key): @staticmethod def get_data_url_check(related_urls, key): - return_obj = { 'valid': False, 'value': 'N/A'} + """Checks if the related_urls contains a "GET DATA" url + + Args: + related_urls (dict): The related_urls field of the object + Example: [ + { + "Description": "The LP DAAC product page provides information on Science Data Set layers and links for user guides, ATBDs, data access, tools, customer support, etc.", + "URLContentType": "CollectionURL", + "Type": "DATA SET LANDING PAGE", + "URL": "https://doi.org/10.5067/MODIS/MOD13Q1.061" + }, ... + ] or + [ + { + "Description": "The LP DAAC product page provides information on Science Data Set layers and links for user guides, ATBDs, data access, tools, customer support, etc.", + "URL_Content_Type": { + "Type": "GET DATA", + "Subtype>: "LAADS" + }, + "URL": "https://doi.org/10.5067/MODIS/MOD13Q1.061", + ... + }, ... + ] + key (list): The hierarchical list of keys + Example: ["Type"] + or + ["URL_Content_Type", "Type"] + """ + return_obj = { 'valid': False, 'value': 'N/A' } for url_obj in related_urls: + type = url_obj.get(key[0]) if len(key) == 2: - type = url_obj.get(key[0], {}).get(key[1]) - else: - type = url_obj.get(key[0]) - if validity := type == "GET DATA" and (url := url_obj.get("URL")): + type = (type or {}).get(key[1]) + if (validity := type == "GET DATA") and (url := url_obj.get("URL")): return_obj['valid'] = validity return_obj['value'] = url break From 7bd89f806b949d0494258fa2ba5f74b96277b28d Mon Sep 17 00:00:00 2001 From: Jenny Wood <57103986+jenny-m-wood@users.noreply.github.com> Date: Tue, 7 Jun 2022 11:28:15 -0500 Subject: [PATCH 226/261] Updated rule_mappings --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 91079d6b..1c007103 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4617,8 +4617,8 @@ { "fields": [ "Granule/DataFormat", - "Granule/ShortName", - "Granule/Version", + "Granule/Collection/ShortName", + "Granule/Collection/VersionId", "Granule/Collection/DataSetId" ] } From cc815ffc3212fd39517925e8dcc22195d489a616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 7 Jun 2022 13:31:10 -0500 Subject: [PATCH 227/261] Remove exception in favor of sending errors --- pyQuARC/code/downloader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index 4da0b785..03648c56 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -100,7 +100,7 @@ def download(self): "status_code": response.status_code, }, ) - raise Exception(f"CMR request failed: {url}") + return # stores the data in the downloaded_content variable self.downloaded_content = response.text From afdca663f5e17be13bc758ede0d14c1e06b30d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 7 Jun 2022 13:31:57 -0500 Subject: [PATCH 228/261] Collect and return pyquarc errors --- pyQuARC/code/checker.py | 15 ++++++++++----- pyQuARC/main.py | 33 +++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index 67d496cf..b80365c0 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -198,6 +198,7 @@ def perform_custom_checks(self, metadata_content): """ ordered_rule = self.scheduler.order_rules() result_dict = {} + pyquarc_errors = [] for rule_id in ordered_rule: try: rule_mapping = self.rules_override.get( @@ -209,9 +210,13 @@ def perform_custom_checks(self, metadata_content): if func: self._run_func(func, check, rule_id, metadata_content, result_dict) except Exception as e: - print(f"Running check for the rule: '{rule_id}' failed.\nPlease report the issue to https://github.com/NASA-IMPACT/pyquarc along with the metadata file and the following error message:") - print(f"ERROR: {e}") - return result_dict + pyquarc_errors.append( + { + "message": f"Running check for the rule: '{rule_id}' failed.", + "details": str(e) + } + ) + return result_dict, pyquarc_errors def run(self, metadata_content): """ @@ -227,8 +232,8 @@ def run(self, metadata_content): result_schema = self.perform_schema_check( metadata_content ) - result_custom = self.perform_custom_checks(json_metadata) + result_custom, pyquarc_errors = self.perform_custom_checks(json_metadata) result = { **result_schema, **result_custom } - return result + return result, pyquarc_errors diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 79aadfcf..fd6a5162 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -145,13 +145,28 @@ def validate(self): if self.concept_ids: for concept_id in tqdm(self.concept_ids): downloader = Downloader(concept_id, self.metadata_format, self.version, self.cmr_host) - content = downloader.download().encode() - - validation_errors = checker.run(content) + if not (content := downloader.download()): + self.errors.append( + { + "concept_id": concept_id, + "errors": [], + "pyquarc_errors": [ + { + "message": "No metadata content found. Please make sure the concept id is correct.", + "details": f"The request to CMR {self.cmr_host} failed for concept id {concept_id}", + } + ] + } + ) + continue + content = content.encode() + + validation_errors, pyquarc_errors = checker.run(content) self.errors.append( { "concept_id": concept_id, "errors": validation_errors, + "pyquarc_errors": pyquarc_errors } ) @@ -159,14 +174,14 @@ def validate(self): with open(os.path.abspath(self.file_path), "r") as myfile: content = myfile.read().encode() - validation_errors = checker.run(content) + validation_errors, pyquarc_errors = checker.run(content) self.errors.append( { "file": self.file_path, "errors": validation_errors, + "pyquarc_errors": pyquarc_errors } ) - return self.errors @staticmethod @@ -193,7 +208,7 @@ def display_results(self): error_prompt = "" for error in self.errors: title = error.get("concept_id") or error.get("file") - error_prompt += (f"\n\tMETADATA: {COLOR['title']}{COLOR['bright']}{title}{END}\n") + error_prompt += (f"\n\t{COLOR['title']}{COLOR['bright']}METADATA: {title}{END}\n") validity = True for field, result in error["errors"].items(): for rule_type, value in result.items(): @@ -205,6 +220,12 @@ def display_results(self): validity = False if validity: error_prompt += "\n\tNo validation errors\n" + + if (pyquarc_errors := error["pyquarc_errors"]): + error_prompt += (f"\n\t {COLOR['title']}{COLOR['bright']} pyQuARC ERRORS: {END}\n") + for error in pyquarc_errors: + error_prompt += (f"\t\t ERROR: {error['message']}. Details: {error['details']} \n") + result_string += error_prompt print(result_string) From 28e6a2c91d3e217a5539bd1e64399db4be74ed41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 8 Jun 2022 15:13:28 -0500 Subject: [PATCH 229/261] Refactor --- pyQuARC/code/custom_validator.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 08b33c65..63f7d3bb 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -55,11 +55,7 @@ def mime_type_check(mime_type, url_type, controlled_list): @staticmethod def availability_check(field_value, parent_value): # If the parent is available, the child should be available too, else it is invalid - validity = True - if parent_value: - if not field_value: - validity = False - return {"valid": validity, "value": parent_value} + return {"valid": bool(field_value) if parent_value else True, "value": parent_value} @staticmethod @if_arg From f6c99a64050223ff9a0a09d862592ef41fc96d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 8 Jun 2022 15:14:17 -0500 Subject: [PATCH 230/261] Remove unnecessary space --- pyQuARC/code/downloader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index b28c7e4d..1c73ad8e 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -6,7 +6,7 @@ class Downloader: """ Downloads data given a concept ID """ - + BASE_URL = ( "https://cmr.earthdata.nasa.gov/search/concepts/{concept_id}.{metadata_format}" ) From 31d717ff7e12202b008cf74afaeb465c053ea4a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 8 Jun 2022 15:19:42 -0500 Subject: [PATCH 231/261] Remove unnecessary check for version --- pyQuARC/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/main.py b/pyQuARC/main.py index fd6a5162..88db136c 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -294,7 +294,7 @@ def display_results(self): parser.error( "No metadata given, add --query or --concept_ids or --file or --fake" ) - exit() + arc = ARC( query=args.query, @@ -303,7 +303,7 @@ def display_results(self): file_path=args.file, metadata_format=args.format or ECHO10, cmr_host=args.cmr_host or CMR_URL, - version=args.version or None, + version=args.version, ) results = arc.validate() arc.display_results() From 016f9abe57019414d969238a6ebd1c1dd0d5d66c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 16 Jun 2022 13:46:44 -0500 Subject: [PATCH 232/261] Use generic variable --- pyQuARC/code/custom_validator.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index c904ec42..1d74d123 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -215,11 +215,11 @@ def get_data_url_check(metadata_json): @staticmethod @if_arg def count_check(count, values, key): - sensors = values.get(key, []) - if not isinstance(sensors, list): - sensors = [sensors] - num_sensors = len(sensors) + items = values.get(key, []) + if not isinstance(items, list): + items = [items] + num_items = len(items) return { - "valid": int(count) == num_sensors, - "value": (count, num_sensors) + "valid": int(count) == num_items, + "value": (count, num_items) } From aefed082d1290abae31f1485c30c3cee5ddf9526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 16 Jun 2022 13:56:11 -0500 Subject: [PATCH 233/261] Refactor --- pyQuARC/code/base_validator.py | 2 +- pyQuARC/code/checker.py | 2 +- pyQuARC/code/custom_checker.py | 4 ++-- pyQuARC/code/schema_validator.py | 9 ++++----- pyQuARC/code/string_validator.py | 4 ++-- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pyQuARC/code/base_validator.py b/pyQuARC/code/base_validator.py index 2aad0339..9fbb7475 100644 --- a/pyQuARC/code/base_validator.py +++ b/pyQuARC/code/base_validator.py @@ -41,6 +41,6 @@ def contains(list_of_values, value): @staticmethod def compare(first, second, relation): if relation.startswith('not_'): - return not BaseValidator.compare(first, second, relation[4:]) + return not (BaseValidator.compare(first, second, relation[4:])) func = getattr(BaseValidator, relation) return func(first, second) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index fe627873..2b488ce5 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -173,7 +173,7 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): for field_dict in list_of_fields_to_apply: dependencies = self.scheduler.get_all_dependencies(rule_id, check, field_dict) main_field = field_dict["fields"][0] - external_data = field_dict.get("data") or external_data + external_data = field_dict.get("data", external_data) result_dict.setdefault(main_field, {}) if not self._check_dependencies_validity(dependencies, field_dict): continue diff --git a/pyQuARC/code/custom_checker.py b/pyQuARC/code/custom_checker.py index 158fe57a..afe875f2 100644 --- a/pyQuARC/code/custom_checker.py +++ b/pyQuARC/code/custom_checker.py @@ -81,8 +81,8 @@ def _get_path_value(content_to_validate, path_string): parsed = urlparse(path_string) path = parsed.path.split('/') - if q := parsed.query: - query_params = q.split('=') + if key_value := parsed.query: + query_params = key_value.split('=') CustomChecker._get_path_value_recursively( content_to_validate, path, container, query_params) diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index 292806ec..57d06134 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -89,11 +89,10 @@ def run_json_validator(self, content_to_validate): field = SchemaValidator.PATH_SEPARATOR.join([str(x) for x in list(error.path)]) message = error.message remediation = None - if error.validator == "oneOf": - if check_message := self.check_messages.get(error.validator): - fields = [f'{field}/{obj["required"][0]}' for obj in error.validator_value] - message = check_message["failure"].format(fields) - remediation = check_message["remediation"] + if error.validator == "oneOf" and (check_message := self.check_messages.get(error.validator)): + fields = [f'{field}/{obj["required"][0]}' for obj in error.validator_value] + message = check_message["failure"].format(fields) + remediation = check_message["remediation"] errors.setdefault(field, {})["schema"] = { "message": [f"Error: {message}"], "remediation": remediation, diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 798e8647..77498d35 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -64,8 +64,8 @@ def controlled_keywords_check(value, keywords_list): value = [value] validity = True - for i in value: - if i not in keywords_list: + for keyword in value: + if keyword not in keywords_list: validity = False break From 01ca5a69e19a922efa115a769a167a3a693c68e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 16 Jun 2022 14:30:54 -0500 Subject: [PATCH 234/261] Fix `check_id` in rule_mapping --- pyQuARC/code/downloader.py | 5 ++++- pyQuARC/code/schema_validator.py | 8 +++++--- pyQuARC/main.py | 5 ++--- pyQuARC/schemas/rule_mapping.json | 6 +++--- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index 1c73ad8e..ccfa6c38 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -49,10 +49,13 @@ def _construct_url(self): Returns: (str) The URL constructed based on the concept ID """ + extension = self.metadata_format + if extension.startswith("umm-"): + extension = "umm-json" constructed_url = Downloader.BASE_URL.format( concept_id=self.concept_id, - metadata_format=self.metadata_format if not self.metadata_format.startswith("umm-") else "umm-json" + metadata_format=extension ) return constructed_url diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index e0127cf9..47b66f94 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -47,7 +47,7 @@ def read_xml_schema(self): # Temporarily set the environment variable os.environ['XML_CATALOG_FILES'] = os.environ.get('XML_CATALOG_FILES', catalog_path) - with open(SCHEMA_PATHS[f"{self.metadata_format}_schema"], "r") as schema_file: + with open(SCHEMA_PATHS[f"{self.metadata_format}_schema"]) as schema_file: file_content = schema_file.read().encode() xmlschema_doc = etree.parse(BytesIO(file_content)) schema = etree.XMLSchema(xmlschema_doc) @@ -57,7 +57,8 @@ def read_json_schema(self): """ Reads the json schema file """ - schema = json.load(open(SCHEMA_PATHS[f"{self.metadata_format}-json-schema"], "r")) + with open(SCHEMA_PATHS[f"{self.metadata_format}-json-schema"]) as schema_file: + schema = json.load(schema_file) return schema def run_json_validator(self, content_to_validate): @@ -72,7 +73,8 @@ def run_json_validator(self, content_to_validate): schema_store = {} if self.metadata_format == UMM_C: - schema_base = json.load(open(SCHEMA_PATHS["umm-cmn-json-schema"], "r")) + with open(SCHEMA_PATHS["umm-cmn-json-schema"]) as schema_file: + schema_base = json.load(schema_file) # workaround to read local referenced schema file (only supports uri) schema_store = { diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 81c3b13e..1707d9e6 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -254,13 +254,12 @@ def display_results(self): parser.error( "No metadata given, add --query or --concept_ids or --file or --fake" ) - exit() - if args.format and (args.format not in SUPPORTED_FORMATS): + format = args.format or ECHO10 + if (format not in SUPPORTED_FORMATS): parser.error( f"The given format is not supported. Only {', '.join(SUPPORTED_FORMATS)} are supported." ) - exit() arc = ARC( query=args.query, diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index a4c1512e..71fa6669 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2344,7 +2344,7 @@ ] }, "severity": "warning", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "platform_short_name_gcmd_check": { "rule_name": "Platform Shortname GCMD Check", @@ -2770,7 +2770,7 @@ ] }, "severity": "warning", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "version_description_not_provided": { "rule_name": "Version Description Not Provided", @@ -4460,7 +4460,7 @@ ] }, "severity": "warning", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "horizontal_data_resolution_unit_check": { "rule_name": "Horizontal Data Resolution Unit Controlled Vocabulary Check", From 3a1e815b0d959198a2cfd3debd89e529dcb47fa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 16 Jun 2022 21:20:22 -0500 Subject: [PATCH 235/261] Add missing import --- pyQuARC/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/main.py b/pyQuARC/main.py index fbe1c242..8b5e95e1 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -8,11 +8,11 @@ if __name__ == '__main__': from code.checker import Checker - from code.constants import COLOR, ECHO10, SUPPORTED_FORMATS + from code.constants import CMR_URL, COLOR, ECHO10, SUPPORTED_FORMATS from code.downloader import Downloader else: from .code.checker import Checker - from .code.constants import COLOR, ECHO10, SUPPORTED_FORMATS + from .code.constants import CMR_URL, COLOR, ECHO10, SUPPORTED_FORMATS from .code.downloader import Downloader From b7a77b3f7fd84d3a122aae7ac6bb807c7df93bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 16 Jun 2022 21:37:18 -0500 Subject: [PATCH 236/261] Remove rouge comma --- pyQuARC/schemas/rule_mapping.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index f5722c4b..c617ee77 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -3784,7 +3784,7 @@ [ "date_or_datetime_format_check" ] - ], + ] } ], "umm-c": [ From 6d4c45b949440460e399fcd364fc405635f0e426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 23 Jun 2022 10:54:57 -0500 Subject: [PATCH 237/261] Update `rule_mapping` --- pyQuARC/schemas/rule_mapping.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index dc22ba5b..824806e0 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -4426,7 +4426,7 @@ ] }, "severity": "error", - "check_id": "data_center_short_name_gcmd_check" + "check_id": "organization_short_name_gcmd_check" }, "characteristic_data_type": { "rule_name": "Characteristics Data Type Presence Check", @@ -4662,6 +4662,6 @@ ] }, "severity": "info", - "check_id": "date_compare" + "check_id": "datetime_compare" } } From 690814932bb04c53f8c27324b0aa43ddf76bf513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 23 Jun 2022 11:24:45 -0500 Subject: [PATCH 238/261] Rename `echo10` to `echo-c` --- pyQuARC/code/checker.py | 4 +- pyQuARC/code/constants.py | 8 +- pyQuARC/code/downloader.py | 10 +- pyQuARC/code/schema_validator.py | 6 +- pyQuARC/main.py | 10 +- .../{echo10_json.json => echo-c_json.json} | 0 .../{echo10_schema.xsd => echo-c_schema.xsd} | 0 pyQuARC/schemas/rule_mapping.json | 170 +++++++++--------- ...data.echo10 => bad_syntax_metadata.echo-c} | 0 tests/fixtures/common.py | 2 +- ...tadata.echo10 => no_error_metadata.echo-c} | 0 ...tadata.echo10 => test_cmr_metadata.echo-c} | 0 ...o10.json => test_cmr_metadata_echo-c.json} | 0 tests/test_downloader.py | 16 +- tests/test_schema_validator.py | 2 +- 15 files changed, 118 insertions(+), 110 deletions(-) rename pyQuARC/schemas/{echo10_json.json => echo-c_json.json} (100%) rename pyQuARC/schemas/{echo10_schema.xsd => echo-c_schema.xsd} (100%) rename tests/fixtures/{bad_syntax_metadata.echo10 => bad_syntax_metadata.echo-c} (100%) rename tests/fixtures/{no_error_metadata.echo10 => no_error_metadata.echo-c} (100%) rename tests/fixtures/{test_cmr_metadata.echo10 => test_cmr_metadata.echo-c} (100%) rename tests/fixtures/{test_cmr_metadata_echo10.json => test_cmr_metadata_echo-c.json} (100%) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index df079858..5bd9b9ff 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -13,7 +13,7 @@ from .string_validator import StringValidator from .url_validator import UrlValidator -from .constants import ECHO10, SCHEMA_PATHS +from .constants import ECHO10_C, SCHEMA_PATHS class Checker: @@ -23,7 +23,7 @@ class Checker: def __init__( self, - metadata_format=ECHO10, + metadata_format=ECHO10_C, messages_override=None, checks_override=None, rules_override=None diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index 62e04c9b..4cdfbd9d 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -2,12 +2,12 @@ from pathlib import Path DIF = "dif10" -ECHO10 = "echo10" +ECHO10_C = "echo-c" UMM_C = "umm-c" UMM_G = "umm-g" -ECHO10G = "echo-g" +ECHO10_G = "echo-g" -SUPPORTED_FORMATS = [DIF, ECHO10, UMM_C, UMM_G, ECHO10G] +SUPPORTED_FORMATS = [DIF, ECHO10_C, UMM_C, UMM_G, ECHO10_G] ROOT_DIR = ( # go up one directory @@ -46,7 +46,7 @@ f"{UMM_G}-json-schema" ], "csv": GCMD_KEYWORDS, - "xsd": [ f"{DIF}_schema", f"{ECHO10}_schema", f"{ECHO10G}_schema" ], + "xsd": [ f"{DIF}_schema", f"{ECHO10_C}_schema", f"{ECHO10_G}_schema" ], "xml": [ "catalog" ] } diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index b28c7e4d..d9760b5b 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -15,6 +15,14 @@ class Downloader: GRANULE = "granule" INVALID = "invalid" + FORMAT_MAP = { + "echo-c": "echo10", + "echo-g": "echo10", + "umm-c": "umm-json", + "umm-g": "umm-json", + "dif10": "dif10", + } + def __init__(self, concept_id, metadata_format, version=None): """ Args: @@ -52,7 +60,7 @@ def _construct_url(self): constructed_url = Downloader.BASE_URL.format( concept_id=self.concept_id, - metadata_format=self.metadata_format if not self.metadata_format.startswith("umm-") else "umm-json" + metadata_format=Downloader.FORMAT_MAP.get(self.metadata_format, "echo10") ) return constructed_url diff --git a/pyQuARC/code/schema_validator.py b/pyQuARC/code/schema_validator.py index e0127cf9..89775891 100644 --- a/pyQuARC/code/schema_validator.py +++ b/pyQuARC/code/schema_validator.py @@ -7,7 +7,7 @@ from lxml import etree from urllib.request import pathname2url -from .constants import ECHO10, SCHEMA_PATHS, UMM_C +from .constants import ECHO10_C, SCHEMA_PATHS, UMM_C class SchemaValidator: @@ -18,12 +18,12 @@ class SchemaValidator: PATH_SEPARATOR = "/" def __init__( - self, check_messages, metadata_format=ECHO10, + self, check_messages, metadata_format=ECHO10_C, ): """ Args: metadata_format (str): The format of the metadata that needs - to be validated. Can be any of { DIF, ECHO10, UMM_C, UMM_G }. + to be validated. Can be any of { DIF, ECHO10_C, UMM_C, UMM_G }. validation_paths (list of str): The path of the fields in the metadata that need to be validated. In the form ['Collection/StartDate', ...]. diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 81c3b13e..292a682e 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -8,11 +8,11 @@ if __name__ == '__main__': from code.checker import Checker - from code.constants import COLOR, ECHO10, SUPPORTED_FORMATS + from code.constants import COLOR, ECHO10_C, SUPPORTED_FORMATS from code.downloader import Downloader else: from .code.checker import Checker - from .code.constants import COLOR, ECHO10, SUPPORTED_FORMATS + from .code.constants import COLOR, ECHO10_C, SUPPORTED_FORMATS from .code.downloader import Downloader @@ -34,7 +34,7 @@ def __init__( input_concept_ids=[], fake=None, file_path=None, - metadata_format=ECHO10, + metadata_format=ECHO10_C, checks_override=None, rules_override=None, messages_override=None @@ -45,7 +45,7 @@ def __init__( input_concept_ids (list of str): The list of concept ids to download fake (bool): If set to true, used a fake data to perform the validation file_path (str): The absolute path to the sample/test metadata file - metadata_format (str): The format of the metadata file (echo10, dif10, etc) + metadata_format (str): The format of the metadata file (echo-c, dif10, echo-g etc) checks_override (str): The filepath of the checks_override file rules_override (str): The filepath of the rules_override file messages_override (str): The filepath of the checks_override file @@ -267,7 +267,7 @@ def display_results(self): input_concept_ids=args.concept_ids or [], fake=args.fake, file_path=args.file, - metadata_format=args.format or ECHO10, + metadata_format=args.format or ECHO10_C, ) results = arc.validate() arc.display_results() diff --git a/pyQuARC/schemas/echo10_json.json b/pyQuARC/schemas/echo-c_json.json similarity index 100% rename from pyQuARC/schemas/echo10_json.json rename to pyQuARC/schemas/echo-c_json.json diff --git a/pyQuARC/schemas/echo10_schema.xsd b/pyQuARC/schemas/echo-c_schema.xsd similarity index 100% rename from pyQuARC/schemas/echo10_schema.xsd rename to pyQuARC/schemas/echo-c_schema.xsd diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 32a18342..322adaed 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2,7 +2,7 @@ "data_update_time_logic_check": { "rule_name": "Data Update Time Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/LastUpdate", @@ -36,7 +36,7 @@ "data_revision_date_logic_check": { "rule_name": "Data Revision Date Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/RevisionDate", @@ -61,7 +61,7 @@ "range_date_time_logic_check_1": { "rule_name": "Range Date Time Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/RangeDateTime/BeginningDateTime", @@ -104,7 +104,7 @@ "range_date_time_logic_check_2": { "rule_name": "Range Date Time Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/RangeDateTime/BeginningDateTime", @@ -147,7 +147,7 @@ "project_date_time_logic_check_1": { "rule_name": "Project Date Time Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Campaigns/Campaign/StartDate", @@ -181,7 +181,7 @@ "project_date_time_logic_check_2": { "rule_name": "Project Date Time Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Campaigns/Campaign/StartDate", @@ -215,7 +215,7 @@ "periodic_date_time_logic_check": { "rule_name": "Periodic Date Time Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/PeriodicDateTime/StartDate", @@ -263,7 +263,7 @@ "datetime_format_check": { "rule_name": "Datetime ISO Format Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/InsertTime" @@ -570,7 +570,7 @@ "url_check": { "rule_name": "URL Health and Status Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Description" @@ -680,7 +680,7 @@ "shortname_uniqueness": { "rule_name": "Short Name uniqueness check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/DataSetId", @@ -714,7 +714,7 @@ "abstract_length_check": { "rule_name": "Abstract length check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Description" @@ -746,7 +746,7 @@ "doi_validity_check": { "rule_name": "DOI Validity Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/DOI/DOI" @@ -804,7 +804,7 @@ "doi_link_update": { "rule_name": "DOI Link Update", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/AdditionalAttributes/AdditionalAttribute/Value" @@ -839,7 +839,7 @@ "processing_level_id_check": { "rule_name": "EOSDIS Standard Processing Level ID Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/ProcessingLevelId" @@ -877,7 +877,7 @@ "science_keywords_gcmd_check": { "rule_name": "GCMD Science keywords check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/ScienceKeywords/ScienceKeyword/CategoryKeyword", @@ -920,7 +920,7 @@ "eosdis_doi_authority_check": { "rule_name": "EOSDIS DOI Authority Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/DOI/Authority" @@ -959,7 +959,7 @@ "delete_time_check": { "rule_name": "Delete Time Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/DeleteTime" @@ -1008,7 +1008,7 @@ "doi_missing_reason_enumeration_check": { "rule_name": "DOI Missing Reason Enumeration Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/DOI/MissingReason" @@ -1035,7 +1035,7 @@ "processing_level_description_length_check": { "rule_name": "Processing Level Description Length Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/ProcessingLevelDescription" @@ -1060,7 +1060,7 @@ "umm_controlled_collection_state_list_check": { "rule_name": "UMM Controlled Collection State List", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/CollectionState" @@ -1090,7 +1090,7 @@ "ends_at_present_flag_logic_check": { "rule_name": "Ends at present flag logic check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/EndsAtPresentFlag", @@ -1124,7 +1124,7 @@ "ends_at_present_flag_presence_check": { "rule_name": "Ends at present flag presence check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/EndsAtPresentFlag", @@ -1158,7 +1158,7 @@ "contact_mechanism_enum_check": { "rule_name": "Contact Mechanism Enumeration Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Contacts/Contact/OrganizationPhones/Phone/Type" @@ -1215,7 +1215,7 @@ "data_contact_role_enum_check": { "rule_name": "Data Contact Role Enumeration Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Contacts/Contact/ContactPersons/ContactPerson/JobPosition" @@ -1247,7 +1247,7 @@ "controlled_contact_role_check": { "rule_name": "Controlled Contact Role Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Contacts/Contact/Role" @@ -1283,7 +1283,7 @@ "data_type_control_check": { "rule_name": "Data type control Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/AdditionalAttributes/AdditionalAttribute/DataType" @@ -1370,7 +1370,7 @@ "characteristic_name_check": { "rule_name": "Characteristic Name Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/Name", @@ -1451,7 +1451,7 @@ "characteristic_desc_check": { "rule_name": "Characteristic Description Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/Description", @@ -1518,7 +1518,7 @@ "characteristic_unit_check": { "rule_name": "Characteristic Unit Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/Unit", @@ -1585,7 +1585,7 @@ "characteristic_value_check": { "rule_name": "Characteristic Value Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/Value", @@ -1666,7 +1666,7 @@ "characteristic_name_length_check": { "rule_name": "Characteristic Name Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/Name" @@ -1728,7 +1728,7 @@ "characteristic_desc_length_check": { "rule_name": "Characteristic Description Length Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/Description" @@ -1790,7 +1790,7 @@ "characteristic_unit_length_check": { "rule_name": "Characteristic Unit Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/Unit" @@ -1852,7 +1852,7 @@ "characteristic_value_length_check": { "rule_name": "Characteristic Value Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/Characteristics/Characteristic/Value" @@ -1904,7 +1904,7 @@ "mime_type_check": { "rule_name": "MIME type Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineResources/OnlineResource/MimeType", @@ -1960,7 +1960,7 @@ "coordinate_system_check": { "rule_name": "Coordinate System Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Spatial/HorizontalSpatialDomain/Geometry/Coordinate System" @@ -1994,7 +1994,7 @@ "product_flag_check": { "rule_name": "Product Flag Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/ProductFlag" @@ -2016,7 +2016,7 @@ "granule_spatial_representation_check": { "rule_name": "Granule Spatial Representation Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Spatial/GranuleSpatialRepresentation" @@ -2052,7 +2052,7 @@ "organization_short_name_gcmd_check": { "rule_name": "Organization Shortname GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/ProcessingCenter" @@ -2149,7 +2149,7 @@ "instrument_short_long_name_consistency_check": { "rule_name": "Instrument Short/Longname Consistency Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/ShortName", @@ -2257,7 +2257,7 @@ "instrument_short_name_gcmd_check": { "rule_name": "Instrument Shortname GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/ShortName" @@ -2312,7 +2312,7 @@ "instrument_long_name_gcmd_check": { "rule_name": "Instrument Longname GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Instruments/Instrument/LongName" @@ -2369,7 +2369,7 @@ "platform_short_name_gcmd_check": { "rule_name": "Platform Shortname GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/ShortName" @@ -2404,7 +2404,7 @@ "platform_short_long_name_consistency_check": { "rule_name": "Platform Short/Longname Consistency Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/ShortName", @@ -2464,7 +2464,7 @@ "data_format_gcmd_check": { "rule_name": "Data Format GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/DataFormat" @@ -2504,7 +2504,7 @@ "platform_long_name_gcmd_check": { "rule_name": "Platform Longname GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/LongName" @@ -2532,7 +2532,7 @@ "spatial_keyword_gcmd_check": { "rule_name": "Spatial Keyword GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/SpatialKeywords/Keyword" @@ -2629,7 +2629,7 @@ "platform_type_gcmd_check": { "rule_name": "Platform Type GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Type" @@ -2657,7 +2657,7 @@ "campaign_short_long_name_consistency_check": { "rule_name": "Campaign Short/Long name consistency Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Campaigns/Campaign/ShortName", @@ -2718,7 +2718,7 @@ "campaign_short_name_gcmd_check": { "rule_name": "Campaign Short Name GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Campaigns/Campaign/ShortName" @@ -2753,7 +2753,7 @@ "campaign_long_name_gcmd_check": { "rule_name": "Campaign Long Name GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Campaigns/Campaign/LongName" @@ -2795,7 +2795,7 @@ "version_description_not_provided": { "rule_name": "Version Description Not Provided", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/VersionDescription" @@ -2827,7 +2827,7 @@ "collection_data_type_enumeration_check": { "rule_name": "Collection Data Type Enumeration Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/CollectionDataType" @@ -2862,7 +2862,7 @@ "data_center_name_presence_check": { "rule_name": "Data Center Name Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/ArchiveCenter", @@ -2885,7 +2885,7 @@ "bounding_coordinate_logic_check": { "rule_name": "Bounding Coordinates Logic Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Spatial/HorizontalSpatialDomain/Geometry/BoundingRectangle/WestBoundingCoordinate", @@ -2931,7 +2931,7 @@ "vertical_spatial_domain_type_check": { "rule_name": "Vertical Spatial Domain Type Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Spatial/VerticalSpatialDomain/Type" @@ -2990,7 +2990,7 @@ "spatial_coverage_type_check": { "rule_name": "Spatial Coverage Type Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Spatial/SpatialCoverageType" @@ -3029,7 +3029,7 @@ "depth_unit_check": { "rule_name": "Depth Unit Controlled Vocabulary Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/SpatialInfo/VerticalCoordinateSystem/DepthSystemDefinition/DistanceUnits" @@ -3066,7 +3066,7 @@ "altitude_unit_check": { "rule_name": "Altitude Unit Controlled Vocabulary Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/SpatialInfo/VerticalCoordinateSystem/AltitudeSystemDefinition/DistanceUnits" @@ -3122,7 +3122,7 @@ "campaign_name_presence_check": { "rule_name": "Campaign Name Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Campaigns/Campaign/ShortName" @@ -3157,7 +3157,7 @@ "spatial_coverage_type_presence_check": { "rule_name": "Spatial Coverage Type Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Spatial/SpatialCoverageType" @@ -3185,7 +3185,7 @@ "horizontal_datum_name_check": { "rule_name": "Horizontal Datum Name Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/SpatialInfo/HorizontalCoordinateSystem/GeodeticModel/HorizontalDatumName" @@ -3213,7 +3213,7 @@ "online_access_url_presence_check": { "rule_name": "Online Access URL Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineAccessURLs/OnlineAccessURL/URL" @@ -3227,7 +3227,7 @@ "online_resource_url_presence_check": { "rule_name": "Online Resource URL Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineResources/OnlineResource/URL" @@ -3241,7 +3241,7 @@ "online_access_url_description_check": { "rule_name": "Online Access URL Description Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineAccessURLs/OnlineAccessURL/URLDescription" @@ -3255,7 +3255,7 @@ "online_resource_url_description_check": { "rule_name": "Online Resource URL Description Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineResources/OnlineResource/Description" @@ -3276,7 +3276,7 @@ "opendap_url_location_check": { "rule_name": "ECHO10 OPeNDAP URL Location Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineAccessURLs/OnlineAccessURL/URL" @@ -3290,7 +3290,7 @@ "location_keyword_presence_check": { "rule_name": "Location Keyword Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/SpatialKeywords/Keyword" @@ -3318,7 +3318,7 @@ "spatial_extent_requirement_fulfillment_check": { "rule_name": "Spatial Extent Requirement Fulfillment Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Spatial/HorizontalSpatialDomain/Geometry/Point", @@ -3365,7 +3365,7 @@ "license_information_check": { "rule_name": "License Information Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/UseConstraints" @@ -3395,7 +3395,7 @@ "collection_citation_presence_check": { "rule_name": "Collection Citation Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/CitationforExternalPublication" @@ -3423,7 +3423,7 @@ "user_services_check": { "rule_name": "User Services Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Contacts/Contact/ContactPersons/ContactPerson/FirstName", @@ -3471,7 +3471,7 @@ "doi_missing_reason_explanation": { "rule_name": "DOI Missing Reason Explanation", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/DOI/Explanation", @@ -3505,7 +3505,7 @@ "boolean_check": { "rule_name": "Boolean check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Orderable" @@ -3524,7 +3524,7 @@ "collection_progress_consistency_check": { "rule_name": "Collection Progress Related Fields Consistency Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/CollectionState", @@ -3572,7 +3572,7 @@ "online_resource_type_gcmd_check": { "rule_name": "Online Resource Type GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineResources/OnlineResource/Type" @@ -3600,7 +3600,7 @@ "online_resource_type_presence_check": { "rule_name": "Online Resource Type Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineResources/OnlineResource/Type", @@ -3631,7 +3631,7 @@ "characteristic_name_uniqueness_check": { "rule_name": "Characteristic Name Uniqueness Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic" @@ -3674,7 +3674,7 @@ "validate_ending_datetime_against_granules": { "rule_name": "Ending Datetime validation against granules", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/RangeDateTime/EndingDateTime", @@ -3723,7 +3723,7 @@ "validate_beginning_datetime_against_granules": { "rule_name": "Beginning Datetime validation against granules", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/RangeDateTime/BeginningDateTime", @@ -3906,7 +3906,7 @@ "temporal_extent_requirement_check": { "rule_name": "Temporal Extent Requirement Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Temporal/SingleDateTime", @@ -4110,7 +4110,7 @@ "url_desc_presence_check": { "rule_name": "Online Description Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/OnlineAccessURLs/OnlineAccessURL/URLDescription", @@ -4346,7 +4346,7 @@ "data_center_short_name_gcmd_check": { "rule_name": "Data Center Shortname GCMD Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/ProcessingCenter" @@ -4379,7 +4379,7 @@ "characteristic_data_type": { "rule_name": "Characteristics Data Type Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Characteristics/Characteristic/DataType", @@ -4446,7 +4446,7 @@ "platform_type_presence_check": { "rule_name": "Platform Type Presence Check", "fields_to_apply": { - "echo10": [ + "echo-c": [ { "fields": [ "Collection/Platforms/Platform/Type" diff --git a/tests/fixtures/bad_syntax_metadata.echo10 b/tests/fixtures/bad_syntax_metadata.echo-c similarity index 100% rename from tests/fixtures/bad_syntax_metadata.echo10 rename to tests/fixtures/bad_syntax_metadata.echo-c diff --git a/tests/fixtures/common.py b/tests/fixtures/common.py index 84e95fca..a79fcfa6 100644 --- a/tests/fixtures/common.py +++ b/tests/fixtures/common.py @@ -1 +1 @@ -DUMMY_METADATA_FILE_PATH = "tests/fixtures/test_cmr_metadata.echo10" +DUMMY_METADATA_FILE_PATH = "tests/fixtures/test_cmr_metadata.echo-c" diff --git a/tests/fixtures/no_error_metadata.echo10 b/tests/fixtures/no_error_metadata.echo-c similarity index 100% rename from tests/fixtures/no_error_metadata.echo10 rename to tests/fixtures/no_error_metadata.echo-c diff --git a/tests/fixtures/test_cmr_metadata.echo10 b/tests/fixtures/test_cmr_metadata.echo-c similarity index 100% rename from tests/fixtures/test_cmr_metadata.echo10 rename to tests/fixtures/test_cmr_metadata.echo-c diff --git a/tests/fixtures/test_cmr_metadata_echo10.json b/tests/fixtures/test_cmr_metadata_echo-c.json similarity index 100% rename from tests/fixtures/test_cmr_metadata_echo10.json rename to tests/fixtures/test_cmr_metadata_echo-c.json diff --git a/tests/test_downloader.py b/tests/test_downloader.py index 01b19f4f..e646c0ce 100644 --- a/tests/test_downloader.py +++ b/tests/test_downloader.py @@ -53,7 +53,7 @@ def test_concept_id_type_invalid(self): def test_construct_url_collection(self): real_collection = self.concept_ids["collection"]["real"] - downloader = Downloader(real_collection, "echo10") + downloader = Downloader(real_collection, "echo-c") assert ( downloader._construct_url() == f"https://cmr.earthdata.nasa.gov/search/concepts/{real_collection}.echo10" @@ -61,7 +61,7 @@ def test_construct_url_collection(self): def test_construct_url_granule(self): real_granule = self.concept_ids["granule"]["real"] - downloader = Downloader(real_granule, "echo10") + downloader = Downloader(real_granule, "echo-g") assert ( downloader._construct_url() @@ -71,7 +71,7 @@ def test_construct_url_granule(self): def test_log_error(self): # create a dummy granule downloader dummy_granule = self.concept_ids["granule"]["dummy"] - downloader = Downloader(dummy_granule, "echo10") + downloader = Downloader(dummy_granule, "echo-g") downloader.log_error("invalid_concept_id", { "concept_id": dummy_granule}) @@ -99,7 +99,7 @@ def test_log_error(self): def test_download_invalid_concept_id(self): invalid_concept_id = self.concept_ids["invalid"] - downloader = Downloader(invalid_concept_id, "echo10") + downloader = Downloader(invalid_concept_id, "echo-c") downloader.download() @@ -113,7 +113,7 @@ def test_download_invalid_concept_id(self): def test_download_dummy_collection_no_errors(self): dummy_collection = self.concept_ids["collection"]["dummy"] - downloader = Downloader(dummy_collection, "echo10") + downloader = Downloader(dummy_collection, "echo-c") downloader.download() @@ -131,7 +131,7 @@ def test_download_dummy_collection_no_errors(self): def test_download_real_collection_no_errors(self): real_collection = self.concept_ids["collection"]["real"] - downloader = Downloader(real_collection, "echo10") + downloader = Downloader(real_collection, "echo-c") downloader.download() @@ -140,7 +140,7 @@ def test_download_real_collection_no_errors(self): def test_download_dummy_granule_no_errors(self): dummy_granule = self.concept_ids["granule"]["dummy"] - downloader = Downloader(dummy_granule, "echo10") + downloader = Downloader(dummy_granule, "echo-g") downloader.download() @@ -158,7 +158,7 @@ def test_download_dummy_granule_no_errors(self): def test_download_real_granule_no_errors(self): real_collection = self.concept_ids["granule"]["real"] - downloader = Downloader(real_collection, "echo10") + downloader = Downloader(real_collection, "echo-c") downloader.download() diff --git a/tests/test_schema_validator.py b/tests/test_schema_validator.py index 5787f091..72af2bc1 100644 --- a/tests/test_schema_validator.py +++ b/tests/test_schema_validator.py @@ -21,7 +21,7 @@ def read_data(self): with open( os.path.join( os.getcwd(), - f"tests/fixtures/{data_key}.echo10" + f"tests/fixtures/{data_key}.echo-c" ), "r" ) as myfile: From 7e6dd24d72de39a4c70ecf31965dbd16d7c7ea9e Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Thu, 23 Jun 2022 15:17:17 -0500 Subject: [PATCH 239/261] Merged add/echo10-... branch, resolved conflicts - Merged add/echo10-granules-support into add/echo10-granules-support-sa branch - Resolved conflicts --- .DS_Store | Bin 0 -> 6148 bytes pyQuARC/.DS_Store | Bin 0 -> 6148 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store create mode 100644 pyQuARC/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..079650be246c38fc8fc3b4d2e1e0d73b9657a4b5 GIT binary patch literal 6148 zcmeHLJ1+!L6#nj7cF=4k5|NC?E8c~U%(9|Jt6&jJ_9Y&PZo(hn7tl!b{s5v7jxVIU2_qrsSLqUj4^JCB$ow5F9% z@EV2H;kl)9u@dui3dewB;5RbB?`{$USj8H)toOIKG;P|7|%!QK?bv!v?}S}Z=^~h9%e1KPxl|sLd>grA8LD9^$gxH zFZI}BMre+(a?xR1%{s>K4%gciCq}%<$k!fL{=_lo|1Uy4o5gEZ=w`=&W56-+$pG&U zJ`Kh|W2jJW9W==XLYO4A6grl@ozQ0mVW2ToNE#BMdymkeLVsci6;5_v`vn?9g(@6E zwJr#qS?DhmA+yu^zI2BO6uQ|l;25wOs8gqD?*CJ@zyIwZcjg#y4E!kuL^3;{}rT=&F2HcKx3$oG$ihafTY1qj)5O#;2jj3 B!(IRY literal 0 HcmV?d00001 diff --git a/pyQuARC/.DS_Store b/pyQuARC/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f3cefa26e17b66ad9ffc8eafbf97ab5db69f0e56 GIT binary patch literal 6148 zcmeHKJ5Iwu5S?|5FrrCGxiz97If02xj}(a-5=W$n<)Db(ci;-toPvTIz*VT=&CU?K zIH5#{%t*6uJ)hn6v*qy+ksIBW1EM|=Wl+ZC0K*1hKWj%4wXoCi8jG93cv@G>PNW(B zDg*rNQkqgtCC#Gems~!#eN|l)lSMs&EqmB|eY+h#oyGq0NB?r(dN+C(NTq#RVdpu` zsG@6HMY|urKXxP9XSnw-pJ({CPE~)MWP4O}o|98PkBKp03>X8u!T@SEOLiz|qcLC% z7z1kt`1|0YjJaYX7(N{sLJI&)VGe>h_Y$1r6?4T#5FUt=RG_3fZ84mr!|pXMS8N0& zot!owPIq?Np}4R+*7qTtTrOy%F<=bD4D{r(&-MR&d;cFN*_AP14E!qwTw08a5pGFq xYv<;;)_Uj_l!fCO!F38Ip%f#QOYspj2<)CGz+ABrgau+h0)Yk_jDcTe-~$=_OkV&1 literal 0 HcmV?d00001 From 73bea0d01b154e067796df514784e6a08f9e7666 Mon Sep 17 00:00:00 2001 From: Shelby Bagwell Date: Fri, 1 Jul 2022 14:56:05 -0500 Subject: [PATCH 240/261] changed my validation functions to align with Sam's --- pyQuARC/code/string_validator.py | 100 +++++----------------------- pyQuARC/schemas/check_messages.json | 16 ----- pyQuARC/schemas/checks.json | 10 --- pyQuARC/schemas/rule_mapping.json | 61 ----------------- 4 files changed, 17 insertions(+), 170 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 12663b4c..ae51e63b 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -1,5 +1,6 @@ from platform import platform import requests +import urllib from .base_validator import BaseValidator from .gcmd_validator import GcmdValidator @@ -178,64 +179,14 @@ def validate_granule_instrument_against_collection(instrument_shortname, collect Returns: (dict) An object with the validity of the check and the instance """ - if instrument_shortname == None: - return { - "valid": False, - "value": None - } - - if collection_shortname or version == None: - collections = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&instrument={instrument_shortname}').json() - else: - collections = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&instrument={instrument_shortname}').json() - - if collections['feed']['entry']: - return { - "valid": True, - "value": instrument_shortname - } + cmr_prms = StringValidator.set_cmr_prms({"entry_title": dataset_id, "shortName": collection_shortname, + "version": version}) + validity = StringValidator.granule_sensor_validate_against_collection(cmr_prms, "instrument", instrument_shortname) return { - "valid": False, + "valid": validity, "value": instrument_shortname } - @staticmethod - @if_arg - def validate_granule_sensor_against_collection(sensor_shortname, collection_shortname=None, version=None, dataset_id=None): - """ - Validates the sensor shortname provided in the granule metadata - against the sensor shortname provided at the collection level. - - Args: - sensor_shortname (str): shortname of the sensor - collection_shortname (str): Shortname of the parent collection - version (str): version of the collection - dataset_id (str): Entry title of the parent collection - - Returns: - (dict) An object with the validity of the check and the instance - """ - if sensor_shortname == None: - return { - "valid": False, - "value": None - } - - if collection_shortname or version == None: - collection = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&sensor={sensor_shortname}').json() - else: - collection = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&sensor={sensor_shortname}').json() - - if collection['feed']['entry']: - return { - "valid": True, - "value": sensor_shortname - } - return { - "valid": False, - "value": sensor_shortname - } - @staticmethod @if_arg def platform_short_name_gcmd_check(value): @@ -293,24 +244,11 @@ def validate_granule_platform_against_collection(platform_shortname, collection_ Returns: (dict) An object with the validity of the check and the instance """ - if platform_shortname == None: - return { - "valid": False, - "value": None - } - - if collection_shortname or version == None: - collection = requests.get(f'{CMR_URL}/search/collections.json?DatasetId={dataset_id}&platform={platform_shortname}').json() - else: - collection = requests.get(f'{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&platform={platform_shortname}').json() - - if collection['feed']['entry']: - return { - "valid": True, - "value": platform_shortname - } + cmr_prms = StringValidator.set_cmr_prms({"entry_title": dataset_id, "shortName": collection_shortname, + "version": version}) + validity = StringValidator.validate_against_collection(cmr_prms, "platform", platform_shortname) return { - "valid": False, + "valid": validity, "value": platform_shortname } @@ -470,13 +408,10 @@ def idnnode_shortname_gcmd_check(resource_type): } @staticmethod - def set_cmr_prms(collection_entry_title, collection_shortname, collection_version): - #name = '' - if collection_entry_title == None: - cmr_prms = f'collections.umm_json?shortName={collection_shortname}&version={collection_version}' - else: - cmr_prms = f'collections.umm_json?entry_title={collection_entry_title}' - return cmr_prms + def set_cmr_prms(params): + base_url = "collections.umm_json?" + params = {key:value for key, value in params.items() if value} + return f"{base_url}{urllib.parse.urlencode(params)}" @staticmethod def granule_project_validate_against_collection(cmr_prms, project_shortname): @@ -500,7 +435,8 @@ def validate_against_collection(cmr_prms, prm, prm_value): @staticmethod @if_arg def granule_project_short_name_check(project_shortname, collection_entry_title=None, collection_shortname=None, collection_version=None): - cmr_prms = StringValidator.set_cmr_prms(collection_entry_title, collection_shortname, collection_version) + cmr_prms = StringValidator.set_cmr_prms({"entry_title": collection_entry_title, "shortName": collection_shortname, + "version": collection_version}) validity = StringValidator.granule_project_validate_against_collection(cmr_prms, project_shortname) return { "valid": validity, @@ -518,11 +454,9 @@ def granule_sensor_validate_against_collection(cmr_prms, sensor_shortname): @staticmethod @if_arg def granule_sensor_short_name_check(sensor_shortname, collection_entry_title=None, collection_shortname=None, collection_version=None): - print('test') - cmr_prms = StringValidator.set_cmr_prms(collection_entry_title, collection_shortname, collection_version) - print(cmr_prms) + cmr_prms = StringValidator.set_cmr_prms({"entry_title": collection_entry_title, "shortName": collection_shortname, + "version": collection_version}) validity = StringValidator.granule_sensor_validate_against_collection(cmr_prms, sensor_shortname) - print(validity) return { "valid": validity, "value": sensor_shortname diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 71f99dfc..5d2aa92c 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -311,22 +311,6 @@ }, "remediation": "Recommend providing the correct instrument short name in the granule metadata." }, - "granule_sensor_presence_check": { - "failure": "The sensor short name is missing.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Recommend providing the sensor short name." - }, - "validate_granule_sensor_against_collection": { - "failure": "The sensor short name listed in the granule metadata does not match the sensor short name listed in the collection metadata.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Recommend providing the correct sensor short name in the granule metadata." - }, "platform_short_name_gcmd_check": { "failure": "The provided platform short name `{}` does not comply with the GCMD.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index b4031a9f..8838294d 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -99,11 +99,6 @@ "check_function": "validate_granule_instrument_against_collection", "available": true }, - "validate_granule_sensor_against_collection": { - "data_type": "string", - "check_function": "validate_granule_sensor_against_collection", - "available": true - }, "platform_short_name_gcmd_check": { "data_type": "string", "check_function": "platform_short_name_gcmd_check", @@ -194,11 +189,6 @@ "check_function": "presence_check", "available": true }, - "granule_sensor_presence_check": { - "data_type": "custom", - "check_function": "granule_sensor_presence_check", - "available": true - }, "doi_link_update": { "data_type": "url", "check_function": "doi_link_update", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index db13a9bb..4ba3978d 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2536,13 +2536,6 @@ ] } ], - "echo-g": [ - { - "fields": [ - "Granule/Platforms/Platform/ShortName" - ] - } - ], "dif10": [ { "fields": [ @@ -4896,60 +4889,6 @@ "severity": "error", "check_id": "validate_granule_platform_against_collection" }, - "granule_sensor_presence_check": { - "rule_name": "Granule Sensor Presence Check", - "fields_to_apply": { - "echo-g" : [ - { - "fields": [ - "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName", - "Granule/Collection/ShortName", - "Granule/Collection/VersionId", - "Granule/Collection/DataSetId" - ] - } - ], - "umm-g": [ - { - "fields": [ - "Platforms/Instruments/ComposedOf/ShortName", - "CollectionReference/ShortName", - "CollectionReference/Version", - "CollectionReference/EntryTitle" - ] - } - ] - }, - "severity": "info", - "check_id": "granule_sensor_presence_check" - }, - "validate_granule_sensor_against_collection": { - "rule_name": "Granule Sensor Short Name Check", - "fields_to_apply": { - "echo-g": [ - { - "fields": [ - "Granule/Platforms/Platform/Instruments/Instrument/Sensors/Sensor/ShortName", - "Granule/Collection/ShortName", - "Granule/Collection/VersionId", - "Granule/Collection/DataSetId" - ] - } - ], - "umm-g": [ - { - "fields": [ - "Platforms/Instruments/ComposedOf/ShortName", - "CollectionReference/ShortName", - "CollectionReference/Version", - "CollectionReference/EntryTitle" - ] - } - ] - }, - "severity": "error", - "check_id": "validate_granule_sensor_against_collection" - }, "horizontal_data_resolution_unit_check": { "rule_name": "Horizontal Data Resolution Unit Controlled Vocabulary Check", "fields_to_apply": { From 7e89099c15de49ad80211e5d5681c4c21c10e877 Mon Sep 17 00:00:00 2001 From: Samuel Ayers <55285758+spa0002@users.noreply.github.com> Date: Tue, 5 Jul 2022 13:50:24 -0500 Subject: [PATCH 241/261] Updates to string_validator, check_messages - Updated string_validator.py based on feedback from Slesa - Updated check_messages.json --- .DS_Store | Bin 6148 -> 6148 bytes pyQuARC/code/string_validator.py | 27 +- pyQuARC/schemas/MimeType.csv | 2 +- pyQuARC/schemas/check_messages.json | 4 +- pyQuARC/schemas/chronounits.csv | 2 +- pyQuARC/schemas/granuledataformat.csv | 5 +- pyQuARC/schemas/horizontalresolutionrange.csv | 2 +- pyQuARC/schemas/idnnode.csv | 2 +- pyQuARC/schemas/instruments.csv | 29 +- pyQuARC/schemas/locations.csv | 1100 ++++++++--------- pyQuARC/schemas/platforms.csv | 29 +- pyQuARC/schemas/projects.csv | 10 +- pyQuARC/schemas/providers.csv | 9 +- pyQuARC/schemas/rucontenttype.csv | 2 +- pyQuARC/schemas/sciencekeywords.csv | 4 +- pyQuARC/schemas/temporalresolutionrange.csv | 2 +- pyQuARC/schemas/version.txt | 2 +- pyQuARC/schemas/verticalresolutionrange.csv | 2 +- 18 files changed, 641 insertions(+), 592 deletions(-) diff --git a/.DS_Store b/.DS_Store index 079650be246c38fc8fc3b4d2e1e0d73b9657a4b5..aa52abaeb359897fbffb5309d26993c554922865 100644 GIT binary patch delta 21 ccmZoMXffEJ!^Sk5cd{N^4&#T-v)M8Q0ZVWO=Kufz delta 21 ccmZoMXffEJ!^YIiIa!Y_hw;MZ*=(7D07*y&s{jB1 diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index 9edba4a1..f4dfb0ca 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -1,4 +1,5 @@ import requests +import urllib from .base_validator import BaseValidator from .gcmd_validator import GcmdValidator @@ -361,12 +362,10 @@ def idnnode_shortname_gcmd_check(resource_type): } @staticmethod - def set_cmr_prms(collection_entry_title, collection_shortname, collection_version): - if collection_entry_title == None: - cmr_prms = f'collections.umm_json?shortName={collection_shortname}&version={collection_version}' - else: - cmr_prms = f'collections.umm_json?entry_title={collection_entry_title}' - return cmr_prms + def set_cmr_prms(params): + base_url = "collections.umm_json?" + params = {key:value for key, value in params.items() if value} + return f"{base_url}{urllib.parse.urlencode(params)}" @staticmethod def granule_project_validate_against_collection(cmr_prms, project_shortname): @@ -389,8 +388,11 @@ def validate_against_collection(cmr_prms, prm, prm_value): @staticmethod @if_arg - def granule_project_short_name_check(project_shortname, collection_entry_title=None, collection_shortname=None, collection_version=None): - cmr_prms = StringValidator.set_cmr_prms(collection_entry_title, collection_shortname, collection_version) + def granule_project_short_name_check(project_shortname, entry_title=None, short_name=None, version=None): + cmr_prms = StringValidator.set_cmr_prms({ + "entry_title": entry_title, + "short_name": short_name, + "version": version}) validity = StringValidator.granule_project_validate_against_collection(cmr_prms, project_shortname) return { "valid": validity, @@ -402,13 +404,16 @@ def granule_sensor_validate_against_collection(cmr_prms, sensor_shortname): if not(StringValidator.collection_in_cmr(cmr_prms)): validity = True else: - validity = StringValidator.validate_against_collection(cmr_prms, 'sensor', sensor_shortname) + validity = StringValidator.validate_against_collection(cmr_prms, 'instrument', sensor_shortname) return validity @staticmethod @if_arg - def granule_sensor_short_name_check(sensor_shortname, collection_entry_title=None, collection_shortname=None, collection_version=None): - cmr_prms = StringValidator.set_cmr_prms(collection_entry_title, collection_shortname, collection_version) + def granule_sensor_short_name_check(sensor_shortname, entry_title=None, short_name=None, version=None): + cmr_prms = StringValidator.set_cmr_prms({ + "entry_title": entry_title, + "short_name": short_name, + "version": version}) validity = StringValidator.granule_sensor_validate_against_collection(cmr_prms, sensor_shortname) return { "valid": validity, diff --git a/pyQuARC/schemas/MimeType.csv b/pyQuARC/schemas/MimeType.csv index 703295df..62a96161 100644 --- a/pyQuARC/schemas/MimeType.csv +++ b/pyQuARC/schemas/MimeType.csv @@ -1,4 +1,4 @@ -"Hits: 37","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:23:13","Timestamp: 2022-03-28 12:29:49","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/MimeType/?format=xml","Case native" +"Hits: 37","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:18:29","Timestamp: 2022-06-28 10:40:09","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/MimeType/?format=xml","Case native" MimeType,UUID "application/gml+xml","40bdf6e5-780c-43e2-ab8e-e5dfae4bd779" "application/gzip","a8ee535a-8bc8-46fd-8b97-917bd7ea7666" diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index e7e4185a..13a9241a 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -960,7 +960,7 @@ "remediation": "Recommend providing a Single Date Time instead of a Range Date Time." }, "granule_project_short_name_check": { - "failure": "The campaign/project short name listed in the granule metadata does not match the campaign/project short name listed in the collection metadata.", + "failure": "The campaign/project short name `{}` listed in the granule metadata does not match the campaign/project short name listed in the collection metadata.", "help": { "message": "", "url": "" @@ -968,7 +968,7 @@ "remediation": "Recommend providing the correct campaign/project short name in the granule metadata." }, "granule_sensor_short_name_check": { - "failure": "The sensor short name listed in the granule metadata does not match the sensor short name listed in the collection metadata.", + "failure": "The sensor short name `{}` listed in the granule metadata does not match the sensor short name listed in the collection metadata.", "help": { "message": "", "url": "" diff --git a/pyQuARC/schemas/chronounits.csv b/pyQuARC/schemas/chronounits.csv index 9dd06f1a..ee583075 100644 --- a/pyQuARC/schemas/chronounits.csv +++ b/pyQuARC/schemas/chronounits.csv @@ -1,4 +1,4 @@ -"Hits: 184","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:20:23","Timestamp: 2022-03-28 12:29:43","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/chronounits/?format=xml","Case native" +"Hits: 184","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:13:23","Timestamp: 2022-06-28 09:05:58","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/chronounits/?format=xml","Case native" Eon,Era,Period,Epoch,Age,Sub-Age,UUID "ARCHAEAN","EOARCHEAN","","","","","8dff752e-939d-4b16-a735-bb4af8dbd785" "ARCHAEAN","MESOARCHEAN","","","","","27660bb3-982e-414c-991a-707abd861f46" diff --git a/pyQuARC/schemas/granuledataformat.csv b/pyQuARC/schemas/granuledataformat.csv index 72975ac4..83047eba 100644 --- a/pyQuARC/schemas/granuledataformat.csv +++ b/pyQuARC/schemas/granuledataformat.csv @@ -1,4 +1,4 @@ -"Hits: 118","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:23:27","Timestamp: 2022-03-28 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/DataFormat/?format=xml","Case native" +"Hits: 121","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:18:40","Timestamp: 2022-06-28 10:40:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/DataFormat/?format=xml","Case native" Short_Name,Long_Name,UUID "ACCDB","Microsoft Access ACCDB File Format Family","378d394c-8230-49f1-8ba0-8ee7e7abe316" "ADF","ArcInfo Binary Grid Format","81782805-cc0d-4325-8f35-aa0c8e439b16" @@ -97,13 +97,16 @@ Short_Name,Long_Name,UUID "SPSS","Statistical Package for the Social Sciences (SPSS) Data File","e3b8b3e3-3dd0-41c2-a784-9697ba934d2d" "SQLite","Standard Query Language Lite","37adee23-d239-4e1d-8ac8-1c7e26f36dc6" "SYLK","Symbolic Link","dd61ff8e-5257-4018-8d99-3e8bdec58837" +"Sea-Bird CTD","Sea-Bird for Conductivity, Temperature, and Depth","ddcd5941-9ba8-4c39-a498-1e214d1bfa6e" "SeaBASS","SeaWiFS Bio-Optical Archive and Storage System Data Format","be0d9b66-445d-4109-8784-63f1ea80e729" "Shapefile","Esri Shapefile","a1d1fbdd-98f4-41e9-9aeb-a369a3b466a4" +"SonTek Castaway CTD","","8b7ff128-106e-4a40-9de9-5bf3b6404fc2" "TIFF","Tagged Image File Format","0225ee3e-c3b1-4a5d-bd22-b36462330b00" "Text File","","7de32ba8-eb3a-4e02-add3-3d828e46bd57" "TimeseriesML","","80323a44-3233-4472-b0d9-158cb9371719" "UF","Universal Format","f8c1fd07-20b6-47fe-a420-f01679c523d1" "VPF","Vector Product Format","75ce5e67-f1c3-4a53-bad3-34ba6f104a8c" +"Valeport CTD","","1528fc97-9aa0-4417-887b-c746fb0c6d23" "WKI","Lotus 1-2-3 Spreadsheet","5d95e94b-95f7-4db3-a555-a1363fc23df0" "WKT","Well-known text","5aedf9cd-c6cb-4c62-b54f-050549e4a270" "WaterML","Water Markup Language","8b3ff8b7-92b4-48ba-97dd-29e925069745" diff --git a/pyQuARC/schemas/horizontalresolutionrange.csv b/pyQuARC/schemas/horizontalresolutionrange.csv index 8f27b622..e32e8f5d 100644 --- a/pyQuARC/schemas/horizontalresolutionrange.csv +++ b/pyQuARC/schemas/horizontalresolutionrange.csv @@ -1,4 +1,4 @@ -"Hits: 15","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:50","Timestamp: 2022-03-28 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/horizontalresolutionrange/?format=xml","Case native" +"Hits: 15","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:17:38","Timestamp: 2022-06-28 09:06:03","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/horizontalresolutionrange/?format=xml","Case native" Horizontal_Resolution_Range,UUID "1 km - < 10 km or approximately .01 degree - < .09 degree","6dd8224f-944e-4798-ac48-44c23a567eeb" "1 meter - < 30 meters","abf43d91-a65d-4b3b-a6dd-593e211b2c7b" diff --git a/pyQuARC/schemas/idnnode.csv b/pyQuARC/schemas/idnnode.csv index c51e753d..04ce7311 100644 --- a/pyQuARC/schemas/idnnode.csv +++ b/pyQuARC/schemas/idnnode.csv @@ -1,4 +1,4 @@ -"Hits: 127","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:48","Timestamp: 2022-03-28 09:00:51","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/idnnode/?format=xml","Case native" +"Hits: 127","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:17:33","Timestamp: 2022-06-28 10:01:49","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/idnnode/?format=xml","Case native" Short_Name,Long_Name,UUID "ACADIS","","913d42e2-1641-4f5e-8273-379ddd3812d5" "ACE/CRC","","13381733-968f-4fd6-b70c-aac6a77b2657" diff --git a/pyQuARC/schemas/instruments.csv b/pyQuARC/schemas/instruments.csv index 73d09d64..9214e0f5 100644 --- a/pyQuARC/schemas/instruments.csv +++ b/pyQuARC/schemas/instruments.csv @@ -1,4 +1,4 @@ -"Keyword Version: 13.2","Revision: 2022-03-24 08:56:42","Timestamp: 2022-03-28 11:15:05","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/instruments/?format=xml","Case native" +"Keyword Version: 13.8","Revision: 2022-06-03 10:15:10","Timestamp: 2022-06-28 08:58:39","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/instruments/?format=xml","Case native" Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Altimeters","Lidar/Laser Altimeters","AIRBORNE LASER SCANNER","AIRBORNE LASER SCANNER","ff309a1a-606d-456b-82b6-5b3c182f66ff" "Earth Remote Sensing Instruments","Active Remote Sensing","Altimeters","Lidar/Laser Altimeters","ATLAS","Advanced Topographic Laser Altimeter System","b3684b4b-4f0b-48aa-8997-e3758fd04155" @@ -59,6 +59,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","GridRad","Gridded NEXRAD WSR-88D Radar","f23f32ff-f770-4046-941f-534014a2fcab" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","IFSAR","Interferometric Synthetic Aperture Radar","7c1508ab-b7c9-402a-9779-cd4388dcefdd" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","IMAGING RADAR SYSTEMS","Imaging Radar Systems, Real and Synthetic Aperture","9a351e42-4f5c-4d6b-b51f-152c513ad3ff" +"Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","KaRIn","Ka-band Radar Interferometer","e5c4d64f-fb76-40e1-84f0-d3019b70642d" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","NOXP","X-band Polarimetric Radar","2a342947-dc41-4ea0-b0a4-ba68bb732657" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","P-SAR","P-band Synthetic Aperture Radar (P-SAR)","1715936c-434b-410c-aa94-c2f6b5c08c95" "Earth Remote Sensing Instruments","Active Remote Sensing","Imaging Radars","","PALSAR-2","Phased Array type L-band Synthetic Aperture Radar 2","ade92813-1bb6-4ecd-af53-a8eb21f212d3" @@ -193,6 +194,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","ALIAS","Airborne Laser Infrared Absorption Spectrometer","298cf686-6365-4f47-b0c7-9619865cd8ab" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","ALPS","Airborne Laser Polarization Sensor","3efdeb69-25ca-4756-b293-d4d10af2a921" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","AOLFL","Airborne Oceanographic Lidar Fluorosensor","423dda9a-30fe-4fb2-abdb-a9ae31433ad7" +"Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","AROTAL","Airborne Raman Ozone, Temperature, and Aerosol Lidar","4bf7c312-654e-4505-8206-bc886f0cd84e" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","ATLAS","Airborne Tunable Laser Absorption Spectrometer","f0aac4fb-b886-4333-a947-3fede8da1f5b" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","Aerodyne Mini-TILDAS","Aerodyne Mini-Tunable Infrared Laser Direct Absorption Spectroscopy (TILDAS)","76ddbc4d-3d1d-44f5-ba5a-a13f4b525038" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","BACKSCATTER LIDAR","BACKSCATTER LIDAR","8059a3c0-6067-43d6-9695-199279d7d0de" @@ -201,7 +203,6 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","HSRL","High Spectral Resolution Lidar","8ab7e899-6854-48da-9cae-21df7539045e" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","JPL LASER HYGROMETERS","JPL LASER HYGROMETERS","fe1fa30a-adc4-4019-a176-f471e4f8f49c" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","KNOLLENBERG PROBE","KNOLLENBERG PROBE","4b99824c-39d1-4e1d-a5c7-c75baa04fb90" -"Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","KaRIn","Ka-band Radar Interferometer","e5c4d64f-fb76-40e1-84f0-d3019b70642d" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","LASER SPECTROMETER","LASER SPECTROMETER","0d45873c-9a8c-4cff-b27b-a1b0bd629cc4" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","LASE","Lidar Atmospheric Sensing Experiment","f53da431-a1cd-4151-9df9-9d82745797d0" "Earth Remote Sensing Instruments","Active Remote Sensing","Spectrometers/Radiometers","Lidar/Laser Spectrometers","LLS","Laser-Light Scattering","e605cb42-8974-4401-857e-ecd524390353" @@ -362,6 +363,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","MASP","Mobile Automatic Scanning Photometer","728fb833-a404-4b27-bc13-93290aedc047" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","MSBSP","Multi-Spectral Band Sun Photometer","ac85aed3-e8bb-4a4c-8ce6-8de68e0f03d2" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","MSP","Meridian Scanning Photometer","b2659aca-16d3-4c5f-9846-e8affdcaafa6" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","NOAA O3 Classic","Dual-Beam UV-Absorption Ozone Photometer","f21311d0-6788-472b-a315-b130932435c2" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","PHOTOMETERS","","806d0bc3-8d08-4418-800b-972292f3db99" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","POAM III","Polar Ozone and Aerosol Measurement III","06079669-cd05-4ccc-a635-0fa7785d6ac8" "Earth Remote Sensing Instruments","Passive Remote Sensing","Photon/Optical Detectors","Photometers","POAM II","Polar Ozone and Aerosol Measurement II","5e498269-5d5c-4006-b692-f031ff3e160e" @@ -457,6 +459,8 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LASER TRACKING SITE","","db819ac2-b841-4885-84a1-5aa8ddaec248" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LLR","Lunar Laser Ranging","dbf63ec2-4855-4499-81a5-181dd76e4cb2" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LRA","Laser Retroreflector Array","7bf72fe4-8e07-490b-88ec-84d63a57416d" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LRR CryoSat","Laser Retro-Reflector","f341648c-ed05-4def-8ba6-f7baff3a6836" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LRR ERS","Laser Retro-Reflector","2a11b62d-a8a4-4573-84c0-8a571aa39e35" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LRR","Laser Retro-Reflector","4b941002-170e-413b-aee4-860155b891e3" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","LT (SEASAT 1)","SEASAT 1 Laser Tracking","ab5ca508-7ae5-4ede-8c04-5998af821ff7" "Earth Remote Sensing Instruments","Passive Remote Sensing","Positioning/Navigation","Laser Ranging","Laser_RF","Laser Range Finder","0be9c8a4-d29d-4046-ad10-4ca80c765ee6" @@ -660,6 +664,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","BA","Charge Coupled Device-based Pushbroom Aft Viewing Camera B","e827d04c-bf67-4877-91a7-b39b819d5168" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","BF","Charge Coupled Device-based Pushbroom Fore Viewing Camera B","b8cf268c-8fb7-4686-866a-4acf7dc7b0ed" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","BJ-1 MSI","BJ-1 Multispectral Imager","7e5f9494-c191-4f20-984f-15ceb88b29d1" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","CAPI","Multiple-band Cloud and Aerosol Polarization Imager","1f991c5b-ee25-4074-871f-7f0cc015c468" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","CASI-1500","Compact Airborne Spectrographic Imager Model 1500","a159e29b-f717-401b-97e6-b1ed8d2e2acc" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","CASIE","Compact Airborne System for Imaging the Environment","affc0737-15e0-4d75-8c28-4f9004379296" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","CASI","Compact Airborne Spectrographic Imager","895234ca-e7fe-4343-ac53-52786aa0b811" @@ -764,6 +769,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","PHyTIR","Prototype HyspIRI Thermal Infrared Radiometer","1ce6f43e-8bee-4b3a-9a0e-3ea2a9f5e7b3" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","PIP","Precipitation Imaging Probe","477652cd-2ed0-4d78-b821-5fc4f5ae7a11" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","PLA","Panchromatic Linear Array","c1e7af7f-5610-4714-a79c-b1573a32cf01" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","PNEO","PNEO","fbf9d956-a972-44cc-9d84-84644e12505e" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","POLDER-1","Polarization/Directionality of the Earth's Reflectance-1","ecfc7717-1c5f-48ba-bc42-f37daaace47c" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","POLDER-2","Polarization/Directionality of the Earth's Reflectance-2","8f95953c-8c1b-44b1-8ca5-d1322e34e70d" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","POLDER-3","Polarization/Directionality of the Earth's Reflectance-3","b8616a2e-4fef-4d9b-98fb-5681dd70cf4a" @@ -790,6 +796,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","SSC","Snow/Cloud Discriminator Special Sensor C","e9764a4c-745e-43ac-b8bd-101ef391f014" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","SSM/I","Special Sensor Microwave/Imager","c5058bd9-6183-4c0a-a6aa-611540ba1196" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","SSMIS","Special Sensor Microwave Imager/Sounder","44d87436-a753-4d0c-80f6-7e6b48795575" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","SSTL S1-4","S1-4 Imager","5157581a-1d6c-4b5c-9905-b844c4864516" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","STRATOS","","9a8265a0-1ff1-47ac-9204-f839ab508471" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","SeaWiFS","Sea-Viewing Wide Field-of-View Sensor","769780b8-ba0e-4cd2-9575-88953c1010a0" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Imaging Spectrometers/Radiometers","Sentinel-2 MSI","Sentinel-2 Multispectral Imager","fc57a9a0-a287-4bcf-a517-20811b55596b" @@ -916,12 +923,14 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Radiometers","THIR","Temperature-Humidity Infrared Radiometer","5995cecc-a5da-4dd7-b78b-228454239292" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Radiometers","TMRS2","Tower Mounted Radiometer System 2","18b3f136-732e-4e1b-92fd-ca2a7f560330" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Radiometers","TMR","TOPEX Microwave Radiometer","c1a69b2c-52ff-4eb3-8e29-f1aaf5c0733c" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Radiometers","TMS","TROPICS Millimeter-wave Sounder","32be908e-2a4f-4d38-8e32-57bc13d70861" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Radiometers","TNR","Thermopile Net Radiometer","5be26ec2-f2c1-4a9e-8a31-ee58d236712b" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Radiometers","WINDSAT","WindSat","75bd4312-5e45-4943-be24-343f42ee5c82" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Radiometers","","","5b753e40-b3f1-426a-8d92-ffee1d675468" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","ACAM","Airborne Compact Atmospheric Mapper","e75f4f20-63df-4f25-bade-044f7668618b" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","ACE-FTS","Fourier Transform Spectrometer","79db06d1-7b80-4f8d-8466-ac7cbed4926a" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","ACES","Airborne Cavity Enhanced Spectrometer","03f9c0b1-4dcd-4293-8bfa-5fe0608ab332" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","ACGS","Atmospheric Carbon dioxide Grating Spectrometer","b28d2ec0-1639-4313-ab85-1661839413a1" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","ACSM","Aerosol Chemical Speciation Monitor","8a106157-e0a0-4a3e-bed1-4ce3b8e06151" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","AERS","Atmospheric/Emitted Radiation Sensor","30926fb0-7796-4ac1-9d8e-7cd1e4a4b7d1" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","AES","Atmospheric Emission Spectrometer","6980f340-0c50-4d14-8d4e-7b0359e0aad6" @@ -937,6 +946,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","CPSPD","Cloud Particle Spectrometer with Polarized Detection","05919a1b-a95d-4bb5-a597-55150efbb568" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","DASH-SP","Differential Aerosol Sizing and Hygroscopicity Spectrometer Probe","d7d7c6ae-b2c4-4e6d-a1e6-a9d7b859cff8" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","DFGAS","Difference Frequency Generation Absorption Spectrometer developed by University of Colorado, Boulder","73242f79-660e-4202-98b9-80111fe44e22" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","DIAS","Direct Irradiance Airborne Spectrometer","7bdfc7f8-1fed-4b26-a256-fcaa585aeaf2" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","DMT UHSAS","Ultra-High Sensitivity Aerosol Spectrometer Manufactured by Droplet Measurement Technologies","2dc89734-7e34-4bf8-83c8-0e3d75f850e8" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","DOAS","Differential Optical Absorption Spectrometers","2a1ec50d-e931-49d3-b45d-fc5108c4f92b" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","EB SPECTROMETER","Ebert-Fastie Spectrometer","399fa153-9fe9-4774-8764-bd98810f2cd9" @@ -947,6 +957,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","FPS","Fabry-Perot Spectrometer","9f8cb294-2481-45b3-a3e4-76026fe1567a" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","FSSP","Forward Scattering Spectrometer Probe","ea9c102c-6987-445e-a869-c853d2d8e912" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","FTIR SPECTROMETER","Fourier Transform Infrared Spectrometer","aa2c39cf-1c4c-437e-ae2d-29e6a77f1aa2" +"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","GAMS/LAABS","Gas and Aerosol Measurement Sensor/Langley Airborne A-Band Spectrometer","60fba55b-1325-453d-86ba-68f84242a09a" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","GOLD","Global-scale Observations of the Limb and Disk","b68224a0-262d-4001-94b8-e10a3fd7e799" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","GOME-2","Global Ozone Monitoring Experiment-2","5eaf2209-904b-49c8-b99f-1e8550cf95d0" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","GOME","Global Ozone Monitoring Experiment","a0b0fd02-9952-4110-bac9-940a1b6e996f" @@ -1005,7 +1016,6 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TEMPO","Tropospheric Emissions: Monitoring of Pollution","20b24a77-036d-46d0-9d3d-34dc924586cf" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TES","Tropospheric Emission Spectrometer","5207aaad-b875-40ed-b2cc-69c1b112fe37" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TIMS","Thermal Infrared Multispectral Scanner","1b947dd3-35e8-46a7-9dda-78789e06d767" -"Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TMWS","TROPICS Microwave Spectrometer","32be908e-2a4f-4d38-8e32-57bc13d70861" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","TOMS","Total Ozone Mapping Spectrometer","605a23e9-6d45-48dd-815f-4359f7b81627" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","USB4000 Hemi","OceanOptics USB4000 Spectrometer (Hemispherical)","24b5c870-6a34-4473-b992-7b045a6839fa" "Earth Remote Sensing Instruments","Passive Remote Sensing","Spectrometers/Radiometers","Spectrometers","USB4000 Tele","OceanOptics USB4000 Spectrometer (2º Telescope optics)","5ab06add-f445-4dce-b20f-da107bb8ff45" @@ -1080,6 +1090,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CHN ANALYZERS","Carbon, Hydrogen, Nitrogen Analyzers","276af45e-11f4-4545-a05a-f74a8ce2612e" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CHNS/O ELEMENTAL ANALYZERS","Carbon, Hydrogen, Nitrogen Elemental Analyzers","b9e15e2b-d3a4-42a5-9ddb-dff368d2a12f" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CIP","Cloud Imaging Probe","92f99316-b581-4adb-9980-aeb6bed64eee" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CLONO2","Chlorine Nitrate Instrument","74e78bef-2b00-4f6d-b422-8644db6a6e31" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CNC","Condensation Nuclei Counter","6c810285-f58a-4790-800e-1fb55919b30e" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CO2 ANALYZERS","CO2 ANALYZERS","7aecabfb-0047-484f-8396-efc0da16bc20" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CO2NDIR","Carbon Dioxide Nondispersive Infrared Analyzer","eeed0f6b-5821-420f-b928-b0db22cabf74" @@ -1088,6 +1099,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CPC","Cloud Particle Counter","7b08ac7a-6242-4fc5-bff9-e7d0c6341555" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CRDS","Cavity Ring-Down Spectroscopy","9a61fcbd-c75f-4940-939f-6e4c7d84d643" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","CairPol CairClip","CairPol CairClip O3-NO2","5d30bf16-e773-4d45-9fd9-a8e329d0c9b8" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","ClO/BrO","Multiple Axis Resonance Fluorescence Chemical Conversion Detector for ClO and BrO","d40b9033-af28-45bc-9d0e-fff5f0ae4aa4" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","DIFFERENTIAL MOBILITY ANALYZERS","","d1a3d7a9-cc76-4e8a-a587-b603ef30b5c2" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","DMA","Differential Mobility Analyzer","97a23ba4-085c-4690-b29d-ce5403d7aee6" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","EGC","Electron Gas Chromatograph","0ecdd685-9996-45af-b4e7-2df074c68368" @@ -1109,8 +1121,10 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","GNI","Giant Nuclei Impactor","ec165cc6-324d-4be1-8ace-48a660a1f900" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HAL","Harvard Halogens Experiment","0364f832-b1a8-4056-b811-51d3d1fc32ed" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HAMI","Hydrocarbon Automatic Measuring Instrument","6a7f7d2d-6d6d-4bd2-b814-0f8e4df3896a" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HOx","Harvard Hydroxyl Experiment","8d753940-10cf-49d6-811c-e757cb8fbdc1" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HPLC","High-Performance Liquid Chromatograph","66caadfa-f3e1-4491-918a-5db7c07f8e19" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","HTDMA","Humidified Tandem Differential Mobility Analyzer","f39b155d-7818-4812-8806-50d4d356d380" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Harvard CO2","High-Altitude Fast-Response CO2 Analyzer","0d63b22a-efe5-4fee-a0f8-eebe99efd05f" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Hawkeye 2DS","Hawkeye 2D-S Stereo Probe","f6fb2b75-e58c-4073-bcfb-9bee0b5e48ec" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","Hawkeye FCDP","Hawkeye Fast Cloud Droplet Probe","faf4c184-ea6b-40fb-803e-25cfa43c4de6" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","INCUBATOR","","d984900c-fb06-4e06-9400-3d51b868663c" @@ -1151,6 +1165,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","P-SYSTEM","High Pressure Gas Sampling System","f079e001-14f8-4a4b-85a3-1d73b98d0e3d" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","PAM","PORTABLE FLUORESCENCE ANALYZERS","972dae4e-73b2-46d1-8817-3789bef4e11b" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","PAN ANALYZER","PEROXYACETYL NITRATE ANALYZER","37d788e3-1313-44a9-9446-03f863b457ff" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","PANTHER","PAN and Trace Hydrohalocarbon ExpeRiment","2bb2fd20-fb6e-48d7-a22c-74fa4b6f205d" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","PCASP","Passive-Cavity Aerosol Spectrometer Probe","0ea6e92c-3970-4662-a960-b928fc46ec8b" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","PH METERS","PH METERS","5c38595e-5e7d-4513-9f0e-aa9b5f6b139f" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","PHOTOSYNTHESIS CHAMBER","PHOTOSYNTHESIS CHAMBER","b23f0161-64bb-45d7-b0c1-85aa9a1d2c8d" @@ -1189,6 +1204,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TOGA","Trace Organic Gas Analyzer","6684e131-f3d0-4db9-8efc-1e19083b9e2a" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TOTCAP","Tropospheric Ozone and Tracers from Commercial Aircraft Platforms","5f22a292-3c44-416a-ab29-fa9bfabb906b" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI APS-3321","TSI Aerodynamic Particle Sizer Model 3321","c8b31982-b01f-4fec-8b0b-87f3ce442dbd" +"In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI CNC-3760","TSI Model 3760 Condensation Nuclei Counter","5c035ce1-7747-43fc-b803-44d090c70fc5" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI CPC-3010","TSI Condensation Particle Counter 3010 Manufactured by TSI Inc.","664b4f38-b657-42de-9e76-f300805b02ac" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI CPC-3025","TSI Condensation Particle Counter 3025 Manufactured by TSI Inc.","3e507cc0-d6a2-4bd5-9598-70956268e9aa" "In Situ/Laboratory Instruments","Chemical Meters/Analyzers","","","TSI DustTrak","TSI DustTrak Aerosol Monitor","2c5970fb-69a7-4701-a271-b4b211ed476b" @@ -1386,6 +1402,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Probes","","","CLOUD LIQUID WATER PROBE","CLOUD LIQUID WATER PROBE","fd087700-68e9-48f2-a2f7-9781aa99ff1d" "In Situ/Laboratory Instruments","Probes","","","CPI PROBES","","984f0756-a0b9-4c2a-9128-3def832d7800" "In Situ/Laboratory Instruments","Probes","","","Campbell Scientific 107","Campbell Scientific 107 Temperature Probe","78bf23df-51db-490c-adf7-891a97b5f0bc" +"In Situ/Laboratory Instruments","Probes","","","DBH Tape","Diameter Measurement Tape","91608ee6-a979-4be5-8405-31cb9d94a85a" "In Situ/Laboratory Instruments","Probes","","","DIELECTRIC PROBE","DIELECTRIC PROBE","92252300-1348-4528-a46d-7936ec3355ef" "In Situ/Laboratory Instruments","Probes","","","ELECTRON MICROPROBES","","ff2d6f74-959c-42f2-9905-dd942fd80598" "In Situ/Laboratory Instruments","Probes","","","FCDP","FAST CLOUD DROPLET PROBE (FCDP)","cfc9cb35-d637-4e78-b1e0-680dedb9beed" @@ -1606,6 +1623,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","COLORIMETERS","COLORIMETERS","69ccced6-f07e-4225-b1a0-fea6720a9ee8" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","DACOM","Differential Absorption CO, CH4, N2O Measurements","534d85ff-0437-455e-b45b-fe3038aef23b" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","DPOPS","DCOTSS Portable Optical Particle Spectrometer","16237051-45ba-458f-99c2-18d4a8940630" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","FASTOZ","Langley In Situ Fast-Response Ozone Measurements","42273f31-d6e1-4a9e-9ca3-56fe87ffb98c" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","FIMS","Fast Integrated Mobility Spectrometer","d37362b4-6ebd-4494-b5fe-d2cc549a7fdf" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","FPDR-PDI","Flight Probe Dual Range Phase Doppler Interferometer","80493fab-ac58-4bc4-bd63-7da014e81b00" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","GC-EI-TOF","Gas Chromatography Electron Impact Mass Spectrometer","6594cfe7-b40d-4f91-b9e7-dd90b74d22f8" @@ -1625,6 +1643,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","MFR-7","Multifilter Rotating Shadowband Radiometer","45baca7f-18fc-4811-8fd9-015c395e0300" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","NET RADIOMETERS","NET RADIOMETERS","aa0f2b35-e7f2-47fe-a782-6c8040d5eb57" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","NMASS II","Nuclei-Mode Aerosol Size Spectrometer II","b2f03a5a-056d-44c9-af48-b0e46a1b94fb" +"In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","NO/NOy","NO and NOy Chemiluminescence Instrument (NO/NOy)","8ff9bae1-ef19-4e13-b5e3-12954e84e9dd" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","NOxyO3","NCAR NOxyO3","7b33ab96-9749-4f6d-bbb2-f889bb5ec52c" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","OPTSPEC","Optical Spectrometer","55facbdc-d4ed-4ee2-a74d-911b084c8ff8" "In Situ/Laboratory Instruments","Spectrometers/Radiometers","","","PARTICLE SPECTROMETERS","","d87a2454-21ba-4218-a50a-33ddc9ec31c5" @@ -1648,8 +1667,9 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hydrometers","","","","c848a856-6210-47c4-b8e3-97427f04a035" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hydrothermographs","","HYGROTHERMOGRAPHS","","c0293996-1fd5-46c1-a6e3-14beaefd8ad2" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hydrothermographs","","","","f82756a9-2df8-4dd3-96be-c2cecd5fc1fb" +"In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","CRYO","Cryogenic Hygrometer","4ab86d15-469c-422c-8d03-b49eda7456c4" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","FISH","Fast In-situ Stratospheric Hygrometer","ab3a6b71-992e-4f21-a383-950c24549214" -"In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","FPH","Lyman-Alpha Total Water","46a7ac7c-61e2-42d2-bffb-a55b306eefe8" +"In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","FPH","Frost Point Hygrometer","46a7ac7c-61e2-42d2-bffb-a55b306eefe8" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","HWV","Harvard Water Vapor","6f6b44a3-9bf6-498c-a4dd-4f2b6d0d498e" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","HYGROMETERS","","8a22fea1-f43e-4147-abca-13e44016a483" "In Situ/Laboratory Instruments","Temperature/Humidity Sensors","Hygrometers","","LASER HYGROMETERS","","1f440b16-46d6-4088-9430-73d7bf9a4c84" @@ -1823,6 +1843,7 @@ Category,Class,Type,Subtype,Short_Name,Long_Name,UUID "Solar/Space Observing Instruments","Photon/Optical Detectors","Cameras","","SPECTROHELIOGRAPHS","","fff596a8-f792-4627-8c3a-954012a1969b" "Solar/Space Observing Instruments","Photon/Optical Detectors","Cameras","","SPIN-SCAN AURORAL IMAGER","","ff1e71a9-62ed-4dbd-b0c7-f70c54a79d34" "Solar/Space Observing Instruments","Photon/Optical Detectors","Cameras","","","","6c0e547e-70cc-47db-8c8c-97c5ba73f1da" +"Solar/Space Observing Instruments","Photon/Optical Detectors","Charged Coupled Devices","","CCD","Charge-Coupled Device","e2f5c85c-ca3b-4f7e-8cbb-106f5fd99b53" "Solar/Space Observing Instruments","Photon/Optical Detectors","Charged Coupled Devices","","K-LINE CCD/SOLAR OSCILLATIONS","","657ac23c-4ee8-400c-bd41-165dfd3845f5" "Solar/Space Observing Instruments","Photon/Optical Detectors","Charged Coupled Devices","","","","b867df1d-a9dd-4c68-89db-1290217890a4" "Solar/Space Observing Instruments","Photon/Optical Detectors","Telescopes","","C/P","Coronagraph/Polarimeter","1cc74977-f4b6-44e1-a9f0-ff0af803f93c" diff --git a/pyQuARC/schemas/locations.csv b/pyQuARC/schemas/locations.csv index 22d9fb78..2374432e 100644 --- a/pyQuARC/schemas/locations.csv +++ b/pyQuARC/schemas/locations.csv @@ -1,551 +1,551 @@ -"Keyword Version: 13.2","Revision: 2022-03-18 16:20:26","Timestamp: 2022-03-28 13:19:26","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/locations/?format=xml","Case native" -Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location_Subregion3,UUID -"CONTINENT","AFRICA","CENTRAL AFRICA","ANGOLA","","9b0a194d-d617-4fed-9625-df176319892d" -"CONTINENT","AFRICA","CENTRAL AFRICA","CAMEROON","","a028edce-a3d9-4a16-a8c7-d2cb12d3a318" -"CONTINENT","AFRICA","CENTRAL AFRICA","CENTRAL AFRICAN REPUBLIC","","065fc27f-5b54-4cfc-a616-8661a55e04b8" -"CONTINENT","AFRICA","CENTRAL AFRICA","CHAD","","9b328d2c-07c9-4fd8-945d-f8d4d12e0bb3" -"CONTINENT","AFRICA","CENTRAL AFRICA","CONGO, DEMOCRATIC REPUBLIC","","3682524d-6ff3-4224-a635-9741726f025f" -"CONTINENT","AFRICA","CENTRAL AFRICA","CONGO","","0ebe4123-f42a-41fb-80ea-bb1b97b9db0b" -"CONTINENT","AFRICA","CENTRAL AFRICA","EQUATORIAL GUINEA","","3b515cd8-bc42-4fab-9990-df3be2817938" -"CONTINENT","AFRICA","CENTRAL AFRICA","GABON","","864e3511-3326-4b8f-a534-1a8945fcc3eb" -"CONTINENT","AFRICA","CENTRAL AFRICA","LAKE CHAD","","a1810ec4-2d03-4d98-b049-2cad380fb789" -"CONTINENT","AFRICA","CENTRAL AFRICA","","","f2ffbe58-8792-413b-805b-3e1c8de1c6ff" -"CONTINENT","AFRICA","EASTERN AFRICA","BURUNDI","","e5965e59-3d33-4bab-9220-688c12154702" -"CONTINENT","AFRICA","EASTERN AFRICA","DJIBOUTI","","75dc417f-5bdc-441b-bfa9-8a31a03598d6" -"CONTINENT","AFRICA","EASTERN AFRICA","ERITREA","","3f3cc6a3-81e3-49b6-b23a-b02678840e06" -"CONTINENT","AFRICA","EASTERN AFRICA","ETHIOPIA","","bf35988f-1bab-4b16-87c4-811c572f7b24" -"CONTINENT","AFRICA","EASTERN AFRICA","KENYA","","9a733984-abe2-4a34-b189-9bb62b9f9b85" -"CONTINENT","AFRICA","EASTERN AFRICA","LAKE MALAWI","","9bc94214-449d-4b97-b268-ef4b8dcadd23" -"CONTINENT","AFRICA","EASTERN AFRICA","LAKE TANGANYIKA","","fbf0a017-08a4-4bc8-a0f8-c178550a3ccb" -"CONTINENT","AFRICA","EASTERN AFRICA","LAKE VICTORIA","","6c7b31f5-8e07-4a2c-b94f-69be416c60a3" -"CONTINENT","AFRICA","EASTERN AFRICA","MALAWI","","bc151f49-5347-401a-a0b6-476656a2df23" -"CONTINENT","AFRICA","EASTERN AFRICA","MOZAMBIQUE","","d322d155-b8f0-4173-b382-b762a070e4d9" -"CONTINENT","AFRICA","EASTERN AFRICA","RWANDA","","4a86e5fb-6155-47c0-883b-2edb8e1257aa" -"CONTINENT","AFRICA","EASTERN AFRICA","SOMALIA","","48beae8c-e18a-4924-9d39-a6c7b18e29cb" -"CONTINENT","AFRICA","EASTERN AFRICA","TANZANIA","","28633bd4-eb04-43d6-9c1c-04b4a843fb63" -"CONTINENT","AFRICA","EASTERN AFRICA","UGANDA","","cdb3d558-8f51-45bc-8845-7362c63aa0f7" -"CONTINENT","AFRICA","EASTERN AFRICA","ZAMBIA","","d019b59f-23d5-4ee5-9b3a-ee8ed75d666d" -"CONTINENT","AFRICA","EASTERN AFRICA","ZIMBABWE","","ab8482e0-3abc-48ce-9216-a9932b0bb090" -"CONTINENT","AFRICA","EASTERN AFRICA","","","1837fc8f-4622-433b-8148-dd2b5826f6f2" -"CONTINENT","AFRICA","NORTHERN AFRICA","ALGERIA","","553fabba-37b9-4d16-aed1-cc6ac6f729e1" -"CONTINENT","AFRICA","NORTHERN AFRICA","EGYPT","","58813ee3-ea1f-40a3-a0da-1198d78c06dd" -"CONTINENT","AFRICA","NORTHERN AFRICA","LIBYA","","1e535be2-e7cf-42fc-aec4-6f8a6ca3727d" -"CONTINENT","AFRICA","NORTHERN AFRICA","MOROCCO","","cb410cb0-d8f3-42e2-9500-5576b802a7fa" -"CONTINENT","AFRICA","NORTHERN AFRICA","SOUTH SUDAN","","8cd9397d-ab47-490c-be80-3503be51d5dc" -"CONTINENT","AFRICA","NORTHERN AFRICA","SUDAN","","35c312f3-ef63-44c1-9668-b6c7f7ff025e" -"CONTINENT","AFRICA","NORTHERN AFRICA","TUNISIA","","434da207-97f4-4bb5-9550-40b0237f0a3f" -"CONTINENT","AFRICA","NORTHERN AFRICA","","","f8ea9f90-eb85-42b0-8d30-93e2bdca16ef" -"CONTINENT","AFRICA","SOUTHERN AFRICA","BOTSWANA","","444367b0-aa47-4d8b-94d7-41f7d69d2738" -"CONTINENT","AFRICA","SOUTHERN AFRICA","ESWATINI","","0dd6b942-de19-4712-bd1d-aa301f0ee965" -"CONTINENT","AFRICA","SOUTHERN AFRICA","LESOTHO","","96c2b110-5d8b-425b-a5e5-7066e6c7b52e" -"CONTINENT","AFRICA","SOUTHERN AFRICA","NAMIBIA","","a827feaf-9926-4a4d-b21f-dc044524b2b5" -"CONTINENT","AFRICA","SOUTHERN AFRICA","SOUTH AFRICA","","fb6d9fe3-10b5-4a75-be97-521d4058a4a9" -"CONTINENT","AFRICA","SOUTHERN AFRICA","","","7147d041-d762-4475-8762-3b00d49ba9a7" -"CONTINENT","AFRICA","WESTERN AFRICA","BENIN","","05d03731-d997-49d9-bfa3-6221d9e5bdeb" -"CONTINENT","AFRICA","WESTERN AFRICA","BURKINA FASO","","aa499067-03c9-4684-be74-223b8b58304d" -"CONTINENT","AFRICA","WESTERN AFRICA","COTE D'IVOIRE","","1e41939f-8c5e-4aee-8345-61736accffe4" -"CONTINENT","AFRICA","WESTERN AFRICA","GAMBIA","","2ffc8cf6-f9fb-4f0e-858a-53766c4ba4b8" -"CONTINENT","AFRICA","WESTERN AFRICA","GHANA","","4169d7ae-fa7e-4264-888c-c15b14c574cb" -"CONTINENT","AFRICA","WESTERN AFRICA","GUINEA-BISSAU","","b0d902f8-d1b3-4cc8-aa2c-58fd4fead65e" -"CONTINENT","AFRICA","WESTERN AFRICA","GUINEA","","4334c04a-1ab1-475d-9aab-bc30476a8b25" -"CONTINENT","AFRICA","WESTERN AFRICA","LIBERIA","","c7db33e9-b333-4aee-bcf8-8003fba420b0" -"CONTINENT","AFRICA","WESTERN AFRICA","MALI","","e0d8e561-956e-4450-9948-0568357c6abf" -"CONTINENT","AFRICA","WESTERN AFRICA","MAURITANIA","","2d39101d-4602-4688-91f0-84f1a37a1441" -"CONTINENT","AFRICA","WESTERN AFRICA","NIGERIA","","2a5c24de-0eb1-4049-a58b-7cc716ecd34c" -"CONTINENT","AFRICA","WESTERN AFRICA","NIGER","","7b1a37fd-aae9-4bcf-86b1-48e7db570f65" -"CONTINENT","AFRICA","WESTERN AFRICA","SENEGAL","","80e7a4da-82a2-449e-87d3-603d857058c5" -"CONTINENT","AFRICA","WESTERN AFRICA","SIERRA LEONE","","e17e528b-9730-46ca-9439-09bc2a3cf9c6" -"CONTINENT","AFRICA","WESTERN AFRICA","TOGO","","d66512f7-e44b-4cf0-a3cd-25750934b5f9" -"CONTINENT","AFRICA","WESTERN AFRICA","WESTERN SAHARA","","fab1118b-afa8-4cfd-a05b-ed808392e910" -"CONTINENT","AFRICA","WESTERN AFRICA","","","0bd7d518-6e4d-455e-95cd-2add85fc88fa" -"CONTINENT","AFRICA","","","","2ca1b865-5555-4375-aa81-72811335b695" -"CONTINENT","ANTARCTICA","ANTARCTIC PENINSULA","","","20229c10-303d-4fc9-89b0-8ae372df445f" -"CONTINENT","ANTARCTICA","BALLENY ISLANDS","","","84a3d9ed-7a8e-4286-b821-8389c774a719" -"CONTINENT","ANTARCTICA","CAPE MOBIUS OF TERRA NOVA BAY","","","789badd4-8d66-49dd-a4ff-98003f89864d" -"CONTINENT","ANTARCTICA","KING GEORGE ISLAND","","","a100adaa-1e50-44bd-b53f-94a986f5b495" -"CONTINENT","ANTARCTICA","LAUFF ISLAND","","","9464e2fc-1198-43b7-af7c-8b1ea53b2b0a" -"CONTINENT","ANTARCTICA","MAHER ISLAND","","","aa9be105-fc42-42db-94fd-79590dd84f67" -"CONTINENT","ANTARCTICA","MCMURDO SOUND","","","8e6ed09f-fc31-40ad-acbb-e2c0a05a642e" -"CONTINENT","ANTARCTICA","MERTZ GLACIER","","","3c374d0e-fb82-4e14-9119-2f958747dca4" -"CONTINENT","ANTARCTICA","PETER I ISLAND","","","9876ec21-7cb3-4f39-b7fe-1bf7c179fa22" -"CONTINENT","ANTARCTICA","Prydz Bay","","","adecb0c1-3fba-42df-9e13-26899e868bb5" -"CONTINENT","ANTARCTICA","ROSS ISLAND","","","21fb55d8-62f5-4453-b26a-794b6f0e88a5" -"CONTINENT","ANTARCTICA","SCOTT ISLAND","","","ac00af1a-62d1-4919-b84d-10a180b4f712" -"CONTINENT","ANTARCTICA","SEYMOUR ISLAND","","","b09b4bcf-dd12-4501-bf06-e44aa3b11af6" -"CONTINENT","ANTARCTICA","SHACKLETON GLACIER","","","151d5071-6896-4605-a902-2a68a7dae901" -"CONTINENT","ANTARCTICA","SIPLE ISLAND","","","d911a6dc-347c-45e6-8836-764fa7aac223" -"CONTINENT","ANTARCTICA","TERRA NOVA BAY","MT MELBOURNE","","87c840a4-1ecf-48fe-90cd-0b93d4b02c89" -"CONTINENT","ANTARCTICA","TERRA NOVA BAY","MT RITTMAN","","ad47931f-dec9-488b-b4a4-51696f9aa088" -"CONTINENT","ANTARCTICA","TERRA NOVA BAY","","","ee6ff7cd-2902-4856-bdf3-dc7cf95d0440" -"CONTINENT","ANTARCTICA","","","","70fb5a3b-35b1-4048-a8be-56a0d865281c" -"CONTINENT","ASIA","EASTERN ASIA","CHINA","HONG KONG","d5182160-6764-4662-80fe-1ec252d36f20" -"CONTINENT","ASIA","EASTERN ASIA","CHINA","MACAU","e1078fd4-fa6b-4c35-81ee-648bc086e9c5" -"CONTINENT","ASIA","EASTERN ASIA","CHINA","","523afb73-9b4c-4478-97e2-a7d5e228e31c" -"CONTINENT","ASIA","EASTERN ASIA","JAPAN","","9ae108db-2d76-44a1-b381-eba2df9554ad" -"CONTINENT","ASIA","EASTERN ASIA","MONGOLIA","","af7106d6-4f42-4797-a547-b9e2f4384c7f" -"CONTINENT","ASIA","EASTERN ASIA","NORTH KOREA","","ea7ae83d-94f5-4d2b-9b1a-6c8ac2b82c78" -"CONTINENT","ASIA","EASTERN ASIA","SOUTH KOREA","","2c12f87b-a4c7-4aec-b10b-0f3e37560ccf" -"CONTINENT","ASIA","EASTERN ASIA","TAIWAN","","d4c65f0d-f825-4040-8dd3-69b85979101a" -"CONTINENT","ASIA","EASTERN ASIA","","","a817d381-60e3-4f1b-aa38-041d83b67e70" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","AFGHANISTAN","","fa3c995d-58d6-4f06-9fb0-ec04e0456d7b" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","ARAL SEA","","e2408bfc-f7d3-49a6-ad87-f025654e3af9" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","BANGLADESH","","28761db9-82fe-4a24-9a89-0fd6047fa1ea" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","BHUTAN","","55a04c46-92cf-49c6-8c84-8cd2c058f1e4" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","HIMALAYAS","","f7026a7d-92db-4b7b-aa46-c839ff72e79a" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","INDIA","","446c1b9a-cee6-46e6-99be-3db5fbb798fb" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","IRAN","","7daf09eb-e8b7-4c69-b0d1-c53a429379cb" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","KAZAKHSTAN","","95ef2448-80da-4419-8c07-f05f7d625796" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","KYRGYZSTAN","","dca66e52-9406-4824-8639-602e12dc7d62" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","NEPAL","","5a3c4d08-5924-4ea7-a59b-06cc653deba7" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","PAKISTAN","","60b17f24-cf23-4209-91c4-975a87a7acb0" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","TAJIKISTAN","","05ccd1da-7d1e-4489-9e12-4168874c1b71" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","TURKMENISTAN","","d62d5dfe-b9a8-4107-aa4e-126192d5a487" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","UZBEKISTAN","","4642acf0-c21c-48a6-91f4-6fbd6d0966d4" -"CONTINENT","ASIA","SOUTHCENTRAL ASIA","","","ef8a6ecf-f0ca-4e05-81f9-d3be89e1ddc4" -"CONTINENT","ASIA","SOUTHEASTERN ASIA","CAMBODIA","","2d955182-b62b-43eb-9acc-74f1f1f062f7" -"CONTINENT","ASIA","SOUTHEASTERN ASIA","LAO PEOPLE'S DEMOCRATIC REPUBLIC","","0f023a42-94f0-4c8c-b2c9-792eaa6aa784" -"CONTINENT","ASIA","SOUTHEASTERN ASIA","MYANMAR","","71953a36-817f-4b70-83df-f056364ce65d" -"CONTINENT","ASIA","SOUTHEASTERN ASIA","THAILAND","","6af5848c-db4b-4dd0-a6fb-1b9c904ef21b" -"CONTINENT","ASIA","SOUTHEASTERN ASIA","VIETNAM","","8f4b20b4-633c-4a2e-941d-49e4b5ab3374" -"CONTINENT","ASIA","SOUTHEASTERN ASIA","","","9ea81338-dc64-4803-b0e2-db0e2aaa70cf" -"CONTINENT","ASIA","SOUTHERN ASIA","","","a8ee0d08-8772-4951-bbf0-4114dd07de03" -"CONTINENT","ASIA","WESTERN ASIA","ARMENIA","","42c902b9-ed3b-435f-89c3-150de74451f1" -"CONTINENT","ASIA","WESTERN ASIA","AZERBAIJAN","","f487ce0b-ade2-4c3d-976f-3101da973126" -"CONTINENT","ASIA","WESTERN ASIA","BLACK SEA","","b9c9d69b-9221-4aac-affb-5d3e98039251" -"CONTINENT","ASIA","WESTERN ASIA","CASPIAN SEA","","109670ea-5fc7-4726-b772-f315fa0fa603" -"CONTINENT","ASIA","WESTERN ASIA","GEORGIA","","d79e134c-a4d0-44f2-9706-cad2b59de992" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","BAHRAIN","a7334f57-6040-46a3-bde2-f87b26e8a3a3" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","GAZA STRIP","302ab5f2-5fa2-482d-9d22-8a7a1546a62d" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","IRAQ","b25e6700-8d6f-4c95-be85-dedc4f077b26" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","ISRAEL","3898679c-68f8-42af-bbf1-1400955e0076" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","JORDAN","232cab66-2a19-4d21-8ad2-8d60b1e87b07" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","KUWAIT","5db07c1e-355b-40d9-94b2-7fabe4119af3" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","LEBANON","1dbb3f84-a25b-4738-bbee-f5371f471aec" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","OMAN","925747d0-b5f0-4c51-9216-04980a785b54" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","PALESTINE","57be5043-4557-45ad-8ac5-e1f8fbf92efc" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","QATAR","1d131de3-da6c-40b9-84a5-02f8696e9f49" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","SAUDI ARABIA","798f3745-be8c-48b0-b903-0265dbe1f957" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","SYRIAN ARAB REPUBLIC","0d0210bb-0be8-47b0-94f2-8695e226ccc8" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","UNITED ARAB EMIRATES","7bc3667c-98be-4b3f-b831-33e1a784a37c" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","YEMEN","50d3d6bf-d409-466d-9ad8-469bf5d110a4" -"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","","8596fd82-b9bc-4b90-bf9b-23c7f59ac4ab" -"CONTINENT","ASIA","WESTERN ASIA","TURKEY","","26aad1c3-3d0e-4e4d-b1fe-e20961bb6b90" -"CONTINENT","ASIA","WESTERN ASIA","","","1b6309ac-463b-4512-ab29-9870f3f8ba19" -"CONTINENT","ASIA","","","","9e29690c-079c-4429-afed-ef061ab0c41e" -"CONTINENT","AUSTRALIA/NEW ZEALAND","AUSTRALIA","","","ce0984da-1151-41ff-8d92-ab551c9d08bc" -"CONTINENT","AUSTRALIA/NEW ZEALAND","NEW ZEALAND","","","d225920a-b027-4931-83d4-b60918251b59" -"CONTINENT","AUSTRALIA/NEW ZEALAND","","","","02156a5c-5ea1-43e3-acf1-a89e99027555" -"CONTINENT","EUROPE","CENTRAL EUROPE","","","e56c5b41-7568-42db-ae22-ae9c1c9dc26a" -"CONTINENT","EUROPE","EASTERN EUROPE","BELARUS","","e05da771-e0e8-4ce6-a599-078819c872b5" -"CONTINENT","EUROPE","EASTERN EUROPE","BLACK SEA","","afbc0a01-742e-49da-939e-3eaa3cf431b0" -"CONTINENT","EUROPE","EASTERN EUROPE","BULGARIA","","a708af36-ff82-4403-80cd-6b4ffc661cc4" -"CONTINENT","EUROPE","EASTERN EUROPE","CZECHIA","","ff28159f-dbc2-4585-bbfd-fbc8cabbffe3" -"CONTINENT","EUROPE","EASTERN EUROPE","HUNGARY","","250456aa-1202-411d-b88f-919386a4ebe5" -"CONTINENT","EUROPE","EASTERN EUROPE","MOLDOVA","","59c12b6b-c5b4-4e23-9281-731e3473cca3" -"CONTINENT","EUROPE","EASTERN EUROPE","POLAND","","09029b84-fdf7-45d2-b684-4152c9b55d7d" -"CONTINENT","EUROPE","EASTERN EUROPE","ROMANIA","","0295111a-b3ad-472c-a71c-9161c663716b" -"CONTINENT","EUROPE","EASTERN EUROPE","RUSSIAN FEDERATION","LAKE BAYKAL","b8631319-b4ee-4676-beaf-2aa179504be6" -"CONTINENT","EUROPE","EASTERN EUROPE","RUSSIAN FEDERATION","","8c10116a-e71d-45fd-a4b6-92e6b4bf234d" -"CONTINENT","EUROPE","EASTERN EUROPE","SLOVAKIA","","c707babd-bca8-46ea-90ab-8cf17a6c50fe" -"CONTINENT","EUROPE","EASTERN EUROPE","UKRAINE","","83b75894-bceb-466a-b7d4-a6cd37521ffc" -"CONTINENT","EUROPE","EASTERN EUROPE","","","5add948b-8520-4e55-808c-27f0be33d35a" -"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","CHANNEL ISLANDS","5ef2ae17-111c-4e9e-a6c9-95ce17a8b75c" -"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","IRELAND","4bcfd0d2-b5c7-47cb-8ded-d544a84f0c47" -"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","UNITED KINGDOM","1928f419-0c4b-4b06-9f66-eb37f49105de" -"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","","c9e8dfcd-18ac-405d-b6a0-934ae3c743d3" -"CONTINENT","EUROPE","NORTHERN EUROPE","ESTONIA","","f0b2da18-9290-4aaf-8e91-4b52e3d9dfc4" -"CONTINENT","EUROPE","NORTHERN EUROPE","GUERNSEY","","1a16071e-e3bc-43ea-a668-522bbc045fdb" -"CONTINENT","EUROPE","NORTHERN EUROPE","ICELAND","","5e64ca14-42f3-4222-8f2c-5db3c7b71d8f" -"CONTINENT","EUROPE","NORTHERN EUROPE","LATVIA","","e2e7fb18-459b-4d43-8065-ce5ca7e5bdb9" -"CONTINENT","EUROPE","NORTHERN EUROPE","LITHUANIA","","b58616f8-024f-45f1-be4f-8924557a82bc" -"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","ALAND ISLANDS","cbb172c1-a791-4a87-ab39-fe54508b26cd" -"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","DENMARK","98f7f9f6-90cb-4f52-8bec-8d21dd310c30" -"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","FINLAND","b198283f-02d9-424e-838a-8997a18139a9" -"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","NORWAY","4bbd9eec-9daa-45c5-9cc7-1d8fb8bffd79" -"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","SWEDEN","2edce566-82e1-4645-a94d-58cffa42f8e2" -"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","","5367bbef-371d-43be-a4cd-5f4f5ccc4403" -"CONTINENT","EUROPE","NORTHERN EUROPE","","","1b0b4340-30a6-4cdd-b356-9c6a0b674a29" -"CONTINENT","EUROPE","SOUTHERN EUROPE","ALBANIA","","ffcee960-5527-43e0-bfd0-ad48b1151cf0" -"CONTINENT","EUROPE","SOUTHERN EUROPE","ANDORRA","","e4efa84c-fe5a-49f0-81cd-0a6e7b38074d" -"CONTINENT","EUROPE","SOUTHERN EUROPE","BOSNIA AND HERZEGOVINA","","7691ebb7-81c0-4f38-945c-4462a203cccb" -"CONTINENT","EUROPE","SOUTHERN EUROPE","CROATIA","","0a19cdd4-48ec-4551-9e5f-7be860891f94" -"CONTINENT","EUROPE","SOUTHERN EUROPE","GREECE","","103ca372-ccaa-4cca-9e1a-ef2219ad6bb2" -"CONTINENT","EUROPE","SOUTHERN EUROPE","ITALY","","ff1cfc9c-5e73-4137-b8e1-d6f4e83e61c4" -"CONTINENT","EUROPE","SOUTHERN EUROPE","KOSOVO","","632e6bd5-cdd5-42fa-801f-66b553155905" -"CONTINENT","EUROPE","SOUTHERN EUROPE","MONTENEGRO","","d8f2db47-29ae-4999-aeca-360e4f98f256" -"CONTINENT","EUROPE","SOUTHERN EUROPE","NORTH MACEDONIA","","03280af1-94e4-4918-8a19-70b8445f9d6f" -"CONTINENT","EUROPE","SOUTHERN EUROPE","SAN MARINO","","18493ec7-f2a5-47bc-8200-8d9e0c41dcf3" -"CONTINENT","EUROPE","SOUTHERN EUROPE","SERBIA","","71c964af-7eec-4812-85de-04cadfd77934" -"CONTINENT","EUROPE","SOUTHERN EUROPE","SLOVENIA","","1e7cf5e6-e98a-45ae-a300-6ee43aaf9a1d" -"CONTINENT","EUROPE","SOUTHERN EUROPE","SPAIN","GIBRALTAR","1dd688e9-3c50-4be0-907a-423d2371dc3e" -"CONTINENT","EUROPE","SOUTHERN EUROPE","SPAIN","","cbbe14fb-a5ee-4236-84ae-cc8dee612b49" -"CONTINENT","EUROPE","SOUTHERN EUROPE","VATICAN CITY","","538d7162-9823-4942-ae11-3131c8fbd245" -"CONTINENT","EUROPE","SOUTHERN EUROPE","","","10b324f6-0541-42c2-938d-e2acec0de8ed" -"CONTINENT","EUROPE","WESTERN EUROPE","AUSTRIA","","e4d33a7a-f145-4aec-9d15-e21dc9916aad" -"CONTINENT","EUROPE","WESTERN EUROPE","BELGIUM","","132c1238-6779-443c-9a5c-3df2f238beae" -"CONTINENT","EUROPE","WESTERN EUROPE","FRANCE","","a4ab3fe4-b9c7-4aad-9eaa-ba63f38059e6" -"CONTINENT","EUROPE","WESTERN EUROPE","GERMANY","","953ea5cb-cd34-4ffc-a18b-f93173f2c7f6" -"CONTINENT","EUROPE","WESTERN EUROPE","LIECHTENSTEIN","","df8d8422-8497-44c4-a147-1e4d0bdb4ad0" -"CONTINENT","EUROPE","WESTERN EUROPE","LUXEMBOURG","","018ef16b-76e2-4d3d-a981-76bd7ea02e5f" -"CONTINENT","EUROPE","WESTERN EUROPE","MONACO","","8611d45f-c410-44ac-a2ea-d369b7c10011" -"CONTINENT","EUROPE","WESTERN EUROPE","NETHERLANDS","","c4ff980e-6edd-400f-9c99-951fa0d0c887" -"CONTINENT","EUROPE","WESTERN EUROPE","PORTUGAL","","73236574-93e5-4520-ad5d-e298fd28d42d" -"CONTINENT","EUROPE","WESTERN EUROPE","SWITZERLAND","","fc90f569-b291-40f5-bbe1-5c5c21075686" -"CONTINENT","EUROPE","WESTERN EUROPE","","","0cd8148f-6feb-42ea-b867-5af9a933d673" -"CONTINENT","EUROPE","","","","0b3765f7-20f7-4425-bd50-d1bb99d09d86" -"CONTINENT","NORTH AMERICA","CANADA","ALBERTA","","9cf876f7-1621-4e1b-bc56-056a0c28ed4b" -"CONTINENT","NORTH AMERICA","CANADA","BRITISH COLUMBIA","","12b71c1c-bdb2-4cc6-bab9-0569563da458" -"CONTINENT","NORTH AMERICA","CANADA","GEORGIAN BAY","","0b5164a2-ce21-4b36-9502-5e1d05a2e3ae" -"CONTINENT","NORTH AMERICA","CANADA","GREAT LAKES, CANADA","","2844fb17-9f62-47c9-90c4-d61125e0922e" -"CONTINENT","NORTH AMERICA","CANADA","HUDSON BAY","","f26c754c-1765-4a45-920e-792b43353a39" -"CONTINENT","NORTH AMERICA","CANADA","MANITOBA","","72e9e5dc-0f52-43df-8670-d5908806759e" -"CONTINENT","NORTH AMERICA","CANADA","NEW BRUNSWICK","","bab83514-4a6a-4ac5-a130-378ee49fdf18" -"CONTINENT","NORTH AMERICA","CANADA","NEWFOUNDLAND AND LABRADOR","","009ebc80-5561-40d1-98d9-13cbc5bd1591" -"CONTINENT","NORTH AMERICA","CANADA","NORTHWEST TERRITORIES","","95bed3b9-3c0f-4333-b9ac-2f2f5fede59e" -"CONTINENT","NORTH AMERICA","CANADA","NOVA SCOTIA","SCOTIAN SHELF","aa2adee8-f978-4e6a-921c-be457849d251" -"CONTINENT","NORTH AMERICA","CANADA","NOVA SCOTIA","","9dc6c179-4631-4804-99be-bdbbff83c679" -"CONTINENT","NORTH AMERICA","CANADA","NUNAVUT","","4185beef-8d24-4205-9fe7-2d1345671680" -"CONTINENT","NORTH AMERICA","CANADA","ONTARIO","","b907550e-6aa1-4cbf-b83b-08546f949d12" -"CONTINENT","NORTH AMERICA","CANADA","PRINCE EDWARD ISLAND","","8d1ef0a1-f9e1-4807-9025-717af90479cb" -"CONTINENT","NORTH AMERICA","CANADA","QUEBEC","","c977c83a-f171-4337-8001-abb2539cdc76" -"CONTINENT","NORTH AMERICA","CANADA","SASKATCHEWAN","","c7e30fc4-c8f0-4945-b161-214ab253f170" -"CONTINENT","NORTH AMERICA","CANADA","YUKON TERRITORY","","5da3b055-4215-4ec5-95f7-fdca626ebf57" -"CONTINENT","NORTH AMERICA","CANADA","","","d0081284-5cef-484d-b1ee-a6787b197a33" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","BELIZE","","5f8636bb-0dc3-4528-a1eb-da5ac3b51fe2" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","COSTA RICA","","58ee925e-3285-4192-8f0a-f49a5c211439" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","EL SALVADOR","","8d237194-e6b5-418b-ab67-e20e260867e9" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","GUATEMALA","","e325f579-2d4c-4c72-81f4-30cb8723261a" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","HONDURAS","","91409bfb-7fe2-4eaa-97d9-4bc96d5a85b0" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","NICARAGUA","","2274358d-11e5-442f-af41-e20fe1ba69c6" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","PANAMA","","190f39d7-66d7-4b5a-964f-0d47382d8e2e" -"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","","","0980d595-3dbe-4247-82f2-40b5e8df603f" -"CONTINENT","NORTH AMERICA","GREENLAND","","","9d15e288-95cd-476e-acdd-5e31add3ca32" -"CONTINENT","NORTH AMERICA","MEXICO","","","70d89073-6697-4eb6-b01b-989c623a5649" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ALABAMA","","9fe93f63-61b1-4232-bf5b-05703f803fce" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ALASKA","","ce93cb61-ead9-4b5c-b26f-0f22ea5e2b24" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ARIZONA","","c46d59a8-d874-4db8-87f5-d59ecbb79a29" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ARKANSAS","","69f4d2fa-5b3d-43fe-bd55-63f6c9d1ca5a" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","CALIFORNIA","","fc4f2acd-ace7-452b-a540-4162f9e9ddb0" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","COLORADO","","e10d421b-11fd-4344-b0ad-b4d3eaec2fe5" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","CONNECTICUT","","41ac6bda-027c-438b-b41f-a6e6cb2f03ce" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","DELAWARE","","dfe30ec4-50e4-402e-9ab0-f5f6d141bb9c" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","DISTRICT OF COLUMBIA","","2ad8b29a-df7d-4fdc-b7b9-bcd2ff8d9866" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","FLORIDA","FLORIDA KEYS","23e967b5-6a87-47a6-aa93-0a96dbe6c316" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","FLORIDA","","b607766c-83f5-42bb-96b2-2de4e7b488a4" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","GEORGIA","","a94fb5d3-6a0a-44a1-ac31-5e8978b5f0b1" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","GREAT LAKES","","271c9002-8a96-406e-a0ec-8fdbac41eb1e" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","HAWAII","","017ac312-b650-4800-992f-5167708b4d31" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IDAHO","","5e4b6864-4bf7-43a9-8ca6-2099cc40dd25" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ILLINOIS","","06b1e163-667a-4d13-b638-5273e7a65dad" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","INDIANA","","5061b32d-58dc-4a48-ba0a-5e8d3c686cc3" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IOWA","DAVENPORT","cd638f0d-4740-4ab3-938d-6f8f284f78ae" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IOWA","DES MOINES","8abe2036-a848-451a-8eee-ae7ccd9e401f" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IOWA","","ed048ffc-f15c-4b27-899e-70d00417685b" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","KANSAS","","42b510c8-3f17-4f95-85f5-011065fcc038" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","KENTUCKY","","7de86e45-f3e3-4475-af21-fc5a7f0c6349" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","LOUISIANA","","73c5d3e9-29f6-4352-a3db-1bc49bbff315" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MAINE","PORTLAND","11a7e181-3804-4ec7-8717-446546fdd014" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MAINE","","fcc2ca75-790a-4e69-80b6-7af8be328a71" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MARYLAND","","417c01a8-79c5-40e6-affc-8a462b0b4336" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MASSACHUSETTS","BOSTON","5ae6db89-e135-4e83-9317-c48ee0bc832c" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MASSACHUSETTS","","f9837873-62cd-402c-af8b-571876942a83" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MICHIGAN","GAYLORD","b4d4394b-729e-4b18-ac41-5b03b23a44bc" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MICHIGAN","","5561d10d-5224-4e09-9d68-caffd6bc3d74" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MINNESOTA","","2e2d65b6-d3de-4921-877c-2d3a4e447978" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MISSISSIPPI","","c3954181-53c1-4847-84dd-cf62815b985f" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MISSOURI","","c42c3695-f569-40f4-8330-9b6fde553abf" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MONTANA","","88030de5-d237-4074-943f-b6422790d58d" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEBRASKA","","48c90518-9246-452b-8874-d50975e87ef6" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEVADA","","2bdea9ad-43c4-4559-a156-6dad5d9ba137" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW HAMPSHIRE","","a2e161cb-6448-47b0-ab56-c15308152181" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW JERSEY","","bbbb53c6-a8e8-4db6-8849-07316a5ff6c8" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW MEXICO","","b8bdae16-f063-42a5-8d47-2ee863fa56e9" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW YORK","","854d0bb3-dcc3-48eb-a65a-2d26a8b87394" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NORTH CAROLINA","","a6eb6bdd-8aec-475f-a660-b8603219a5b0" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NORTH DAKOTA","","25ff6e15-1d40-4df6-b008-eb11c3a199d9" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","OHIO","","c23966c4-9e16-484c-a1ef-efcd2354d71c" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","OKLAHOMA","","31ea4578-9b23-4f66-b454-b7dae358267c" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","OREGON","","699d5c22-6bcd-4cfa-be0f-f06e34a63513" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","PENNSYLVANIA","","d7fa4d05-8c37-4e23-99eb-4f9a888a0d5d" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","RHODE ISLAND","","ea2ec2ff-f0e5-4366-8255-621ad52f9e5f" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","SOUTH CAROLINA","","a163e72a-e31f-4fa6-aef9-8f21f2e4b081" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","SOUTH DAKOTA","","d401d70a-eacf-4ee7-89a4-70b67f711ccd" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","TENNESSEE","","29ad7c2a-42d5-49e6-9093-e758da70432e" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","TEXAS","","0f01d3b9-3691-471e-b21b-3f42c512dcd2" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","UTAH","","71a722af-0cd9-4052-b4e8-f3af56201401" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","VERMONT","BURLINGTON","92a4dbc0-eb29-4417-a986-ee747c481881" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","VERMONT","","359e1e8f-1789-4c32-9afc-79c2fd6f9884" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","VIRGINIA","","c86d3f12-106a-435d-ba9e-d735b306b200" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WASHINGTON","","dcef091b-18b5-48bf-b191-69ab7a3511f1" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WEST VIRGINIA","","5f5917c3-7225-47d1-b465-03d7b8338060" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WISCONSIN","LA CROSSE","b9f52e70-8d85-45b6-b166-79201ce7d2bc" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WISCONSIN","","d8ad42ae-624f-48a2-be40-cf04c53e6543" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WYOMING","","c2847793-0bb8-41cf-b3e0-d4e4b27914ce" -"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","","","753f915c-70d4-49e1-9bd5-83e75f461e30" -"CONTINENT","NORTH AMERICA","","","","88bc8b39-ad19-4415-b426-e7d37450341a" -"CONTINENT","SOUTH AMERICA","AMAZONIA","","","bb293e12-6ffe-48e2-96e5-8f5ae9c137c2" -"CONTINENT","SOUTH AMERICA","ARGENTINA","","","838923bc-cda7-4cf5-a21a-0c777304a593" -"CONTINENT","SOUTH AMERICA","BOLIVIA","","","e6c50f42-9065-4ff8-a172-58d668fde547" -"CONTINENT","SOUTH AMERICA","BRAZIL","","","2a65dfd1-83e7-4886-a732-316b170522a1" -"CONTINENT","SOUTH AMERICA","CHILE","DIEGO RAMIREZ ISLANDS","ISLA BARTOLOME","dcc856e9-c215-4799-b64d-d406e3da8541" -"CONTINENT","SOUTH AMERICA","CHILE","DIEGO RAMIREZ ISLANDS","ISLA GONZALEZ","57d5b413-48b5-485a-ad7b-bd0201c64a60" -"CONTINENT","SOUTH AMERICA","CHILE","DIEGO RAMIREZ ISLANDS","","1132b6fb-a1fe-42df-a7c6-38ee030aceaa" -"CONTINENT","SOUTH AMERICA","CHILE","","","da26d486-1ee6-4689-abe9-5a59b2d572b1" -"CONTINENT","SOUTH AMERICA","COLOMBIA","","","452b929e-ffdb-48c8-b3a2-bddd1ab2bf97" -"CONTINENT","SOUTH AMERICA","ECUADOR","","","b7eb8278-0dc3-4121-87ea-14173279dfb4" -"CONTINENT","SOUTH AMERICA","FRENCH GUIANA","","","146ee1c3-67c3-45a0-ad64-c67f12032351" -"CONTINENT","SOUTH AMERICA","GUYANA","","","f58ab39c-6c61-47cf-9117-50aa4e8aa93a" -"CONTINENT","SOUTH AMERICA","PARAGUAY","","","3456a093-81b0-4f6b-9073-d17502a8072b" -"CONTINENT","SOUTH AMERICA","PERU","","","4366972c-aa2d-41cb-b9c3-4d6f57546f65" -"CONTINENT","SOUTH AMERICA","SURINAME","","","b2012be4-7977-4d49-ac23-bacd05e9a1d0" -"CONTINENT","SOUTH AMERICA","URUGUAY","","","989f1016-3a59-4520-935e-0f75467a740a" -"CONTINENT","SOUTH AMERICA","VENEZUELA","","","3bd4aae9-4415-44bb-ad97-5db303ad8cd8" -"CONTINENT","SOUTH AMERICA","","","","b7422ce5-a062-4e96-9a8b-36f9e3809e79" -"CONTINENT","","","","","0a672f19-dad5-4114-819a-2eb55bdbb56a" -"GEOGRAPHIC REGION","ARCTIC","","","","d40d9651-aa19-4b2c-9764-7371bb64b9a7" -"GEOGRAPHIC REGION","EASTERN HEMISPHERE","","","","116620fb-2762-4032-9bfa-152d109c029d" -"GEOGRAPHIC REGION","EQUATORIAL","","","","7c5c3754-7b3d-4c08-9ea3-670ed82629ec" -"GEOGRAPHIC REGION","EURASIA","","","","350fb2da-c713-497e-9d7d-42dcad0df83f" -"GEOGRAPHIC REGION","GLOBAL LAND","","","","61cc17c8-4f06-4556-8117-8ba9bb329a3f" -"GEOGRAPHIC REGION","GLOBAL OCEAN","","","","3d4e44c4-5d99-4a9b-8388-43c63533ee97" -"GEOGRAPHIC REGION","GLOBAL","","","","51e3593f-4b42-4141-972e-96666c479f9c" -"GEOGRAPHIC REGION","MID-LATITUDE","","","","46769685-522d-49c3-ad81-22e1cc8c0c2b" -"GEOGRAPHIC REGION","NORTHERN HEMISPHERE","","","","507794a1-9563-49a4-b2d3-8a28347c1fd7" -"GEOGRAPHIC REGION","OCEANIA","","","","e3205e96-9379-4b6c-86e0-c012090549f7" -"GEOGRAPHIC REGION","POLAR","","","","3fedcf7c-7b0c-4b51-abd2-2c54de713061" -"GEOGRAPHIC REGION","SAHEL","","","","deeef0af-f305-4fd4-9796-e9e1906e5e15" -"GEOGRAPHIC REGION","SOUTHERN HEMISPHERE","","","","417235ba-103a-443c-bb43-75a1a772a2e2" -"GEOGRAPHIC REGION","TROPICS","","","","639c23bd-f64a-4061-a535-4a1a842d230f" -"GEOGRAPHIC REGION","WESTERN HEMISPHERE","","","","a29a6a2b-e0e5-4ba9-9768-df67db4f34a6" -"GEOGRAPHIC REGION","","","","","204270d9-8039-4768-851e-63635af5fb65" -"OCEAN","ARCTIC OCEAN","BARENTS SEA","","","a4cb5149-19c8-45dc-976b-9cd590a7365a" -"OCEAN","ARCTIC OCEAN","BEAUFORT SEA","","","86ed3782-8e30-4547-a774-35100b224d5a" -"OCEAN","ARCTIC OCEAN","CHUKCHI SEA","","","7e35ea67-a0c9-49fa-97de-e5f8f5b9ee6d" -"OCEAN","ARCTIC OCEAN","","","","1ed45273-3e2b-4586-b852-05578c04041b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","AZORES","","946f1f4f-fddc-418b-8177-38ba747e0e64" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","BALTIC SEA","","41cd228c-4677-4900-9507-70144d8b50bc" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","BAY OF FUNDY","","6e4b47ff-1d42-42d7-b5a0-a15cb27e39cc" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","BERMUDA","","4811b042-546d-43de-88c4-fdfef09fab80" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CANARY ISLANDS","","69534766-c309-4145-8963-2bdb7b57340b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CAPE COD","","48f4e536-a426-4735-b0c4-f80a1d0afa19" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CAPE VERDE","","9aaf0f2f-6e85-4175-b4c2-a6dc31d8793a" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ANGUILLA","835b0d04-f380-4e59-a19e-6652ae04dbea" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ANTIGUA AND BARBUDA","97b6f4a7-a03a-4b6b-a6f3-fbd80f84fa95" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ARUBA","f39da294-1678-4cca-b545-885612e9f7de" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","BAHAMAS","31c5e65c-05b6-4806-830f-94c912f03c77" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","BARBADOS","b770fd0c-6169-42e8-ad30-7fde13c5c6c5" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","BONAIRE","bc7f49de-7e63-495c-af20-851938d4f6bc" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CARIBBEAN","ad18da3f-fbdb-4bc1-ab4d-008e9b8f6002" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CAYMAN ISLANDS","5e154e2c-192d-4ef6-9279-84563cfcc5f5" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CUBA","3588a42b-43bc-43d1-ad7b-3c43ba3bec4b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CURACAO","f0dd2220-9947-41db-a185-b05aaf26963b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","DOMINICAN REPUBLIC","a5b56209-919d-4ace-9954-cbda4e58a3be" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","DOMINICA","54fc3042-e1a5-4381-859f-e80335831de4" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","GRENADA","8d9e2612-e2ab-4895-9a26-c968522019f1" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","GUADELOUPE","7ff548d5-896a-48c5-9ffb-28aa4d47825f" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","HAITI","63246421-f046-4770-acd9-d0a3d31bbd36" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","JAMAICA","9a539ebb-1b71-4e56-9581-e42c0a9c96ea" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","MARTINIQUE","fe4326f9-1089-4ede-ae32-5d7bc7d2349b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","MONTSERRAT","46cfe46b-7a99-413b-b763-dd8c8f579e1a" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","NAVASSA ISLAND","21be5553-67cb-4e54-9807-f1b558d72ae4" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","NETHERLANDS ANTILLES","514053f8-27a3-4fcb-8ce8-0d63cb345740" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","PUERTO RICO","8e8ff5a7-ca10-4322-a5d6-84c08d73775a" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","SABA","caa8da5b-48da-44fd-946c-24717d8bfdec" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST BARTHELEMY","2a726c91-2cd0-4b08-a301-30396de71b91" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST EUSTATIUS","9c1c7783-8214-480b-a1e6-68240ce803ce" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST KITTS AND NEVIS","b870624c-8668-4c3e-9f0d-6c2f08bce62b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST LUCIA","477a9a14-0c23-4f74-a82b-565fd3a856ab" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST MAARTEN","d729cdbb-b302-42fb-8c72-3068302eada6" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST MARTIN","74335c3e-c856-48d3-a4de-d6fe4c7db775" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST VINCENT AND THE GRENADINES","844d7d6f-e9e8-4632-83e8-115a6e972e18" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","TRINIDAD AND TOBAGO","b117b0ec-3013-48a2-81b5-58215bca8e1e" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","TRISTAN DA CUNHA","35203540-ed8a-4087-82aa-bfcdc3bc11ec" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","TURKS AND CAICOS ISLANDS","00fdb6a0-3063-45d3-9930-71b5a9a3206c" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","VIRGIN ISLANDS","2ed1d456-b067-45bc-857f-8ba5fe87035e" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","","eb176e48-13e2-413c-85d6-b37e16303573" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","DAVIS STRAIT","","29e79a9c-f1a9-4832-8813-e3a12dfddec6" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GEORGES BANK","","7a1f45ea-4804-4ae0-8949-e4f33223d39d" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GRAND BANKS","","56c7983c-33fa-4abc-95d4-8ae848048abb" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GULF OF MAINE","","9c31f745-a3d1-4007-99ae-fceca2019fab" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GULF OF MEXICO","","75fab119-51a6-4b59-9711-f6c3cd3139db" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GULF OF ST LAWRENCE","","70c4057c-7ecc-4ff5-a6e6-5d5b0bb2af3b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","IRISH SEA","ISLE OF MAN","977f6d42-8d3a-4875-8a7b-ed225622519c" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","IRISH SEA","","452868d2-bcca-4cb5-8d5d-102b4f6019eb" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","LABRADOR SEA","","0006e246-4296-448c-9b81-a0831cad7f1c" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","LONG ISLAND SOUND","","f6ed7b70-c420-46e0-97db-2aecd9748788" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MADEIRA","","283ecddd-37db-471c-a600-a45b4419918e" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","ADRIATIC SEA","5c439818-3a80-4c6d-9d2c-74ea1f1a294a" +"Keyword Version: 13.8","Revision: 2022-06-03 10:13:26","Timestamp: 2022-06-28 10:33:05","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/locations/?format=xml","Case native" +Location_Category,Location_Type,Location_Subregion1,Location_Subregion2,Location_Subregion3,Location_Subregion4,UUID +"CONTINENT","AFRICA","CENTRAL AFRICA","ANGOLA","","","9b0a194d-d617-4fed-9625-df176319892d" +"CONTINENT","AFRICA","CENTRAL AFRICA","CAMEROON","","","a028edce-a3d9-4a16-a8c7-d2cb12d3a318" +"CONTINENT","AFRICA","CENTRAL AFRICA","CENTRAL AFRICAN REPUBLIC","","","065fc27f-5b54-4cfc-a616-8661a55e04b8" +"CONTINENT","AFRICA","CENTRAL AFRICA","CHAD","","","9b328d2c-07c9-4fd8-945d-f8d4d12e0bb3" +"CONTINENT","AFRICA","CENTRAL AFRICA","CONGO, DEMOCRATIC REPUBLIC","","","3682524d-6ff3-4224-a635-9741726f025f" +"CONTINENT","AFRICA","CENTRAL AFRICA","CONGO","","","0ebe4123-f42a-41fb-80ea-bb1b97b9db0b" +"CONTINENT","AFRICA","CENTRAL AFRICA","EQUATORIAL GUINEA","","","3b515cd8-bc42-4fab-9990-df3be2817938" +"CONTINENT","AFRICA","CENTRAL AFRICA","GABON","","","864e3511-3326-4b8f-a534-1a8945fcc3eb" +"CONTINENT","AFRICA","CENTRAL AFRICA","LAKE CHAD","","","a1810ec4-2d03-4d98-b049-2cad380fb789" +"CONTINENT","AFRICA","CENTRAL AFRICA","","","","f2ffbe58-8792-413b-805b-3e1c8de1c6ff" +"CONTINENT","AFRICA","EASTERN AFRICA","BURUNDI","","","e5965e59-3d33-4bab-9220-688c12154702" +"CONTINENT","AFRICA","EASTERN AFRICA","DJIBOUTI","","","75dc417f-5bdc-441b-bfa9-8a31a03598d6" +"CONTINENT","AFRICA","EASTERN AFRICA","ERITREA","","","3f3cc6a3-81e3-49b6-b23a-b02678840e06" +"CONTINENT","AFRICA","EASTERN AFRICA","ETHIOPIA","","","bf35988f-1bab-4b16-87c4-811c572f7b24" +"CONTINENT","AFRICA","EASTERN AFRICA","KENYA","","","9a733984-abe2-4a34-b189-9bb62b9f9b85" +"CONTINENT","AFRICA","EASTERN AFRICA","LAKE MALAWI","","","9bc94214-449d-4b97-b268-ef4b8dcadd23" +"CONTINENT","AFRICA","EASTERN AFRICA","LAKE TANGANYIKA","","","fbf0a017-08a4-4bc8-a0f8-c178550a3ccb" +"CONTINENT","AFRICA","EASTERN AFRICA","LAKE VICTORIA","","","6c7b31f5-8e07-4a2c-b94f-69be416c60a3" +"CONTINENT","AFRICA","EASTERN AFRICA","MALAWI","","","bc151f49-5347-401a-a0b6-476656a2df23" +"CONTINENT","AFRICA","EASTERN AFRICA","MOZAMBIQUE","","","d322d155-b8f0-4173-b382-b762a070e4d9" +"CONTINENT","AFRICA","EASTERN AFRICA","RWANDA","","","4a86e5fb-6155-47c0-883b-2edb8e1257aa" +"CONTINENT","AFRICA","EASTERN AFRICA","SOMALIA","","","48beae8c-e18a-4924-9d39-a6c7b18e29cb" +"CONTINENT","AFRICA","EASTERN AFRICA","TANZANIA","","","28633bd4-eb04-43d6-9c1c-04b4a843fb63" +"CONTINENT","AFRICA","EASTERN AFRICA","UGANDA","","","cdb3d558-8f51-45bc-8845-7362c63aa0f7" +"CONTINENT","AFRICA","EASTERN AFRICA","ZAMBIA","","","d019b59f-23d5-4ee5-9b3a-ee8ed75d666d" +"CONTINENT","AFRICA","EASTERN AFRICA","ZIMBABWE","","","ab8482e0-3abc-48ce-9216-a9932b0bb090" +"CONTINENT","AFRICA","EASTERN AFRICA","","","","1837fc8f-4622-433b-8148-dd2b5826f6f2" +"CONTINENT","AFRICA","NORTHERN AFRICA","ALGERIA","","","553fabba-37b9-4d16-aed1-cc6ac6f729e1" +"CONTINENT","AFRICA","NORTHERN AFRICA","EGYPT","","","58813ee3-ea1f-40a3-a0da-1198d78c06dd" +"CONTINENT","AFRICA","NORTHERN AFRICA","LIBYA","","","1e535be2-e7cf-42fc-aec4-6f8a6ca3727d" +"CONTINENT","AFRICA","NORTHERN AFRICA","MOROCCO","","","cb410cb0-d8f3-42e2-9500-5576b802a7fa" +"CONTINENT","AFRICA","NORTHERN AFRICA","SOUTH SUDAN","","","8cd9397d-ab47-490c-be80-3503be51d5dc" +"CONTINENT","AFRICA","NORTHERN AFRICA","SUDAN","","","35c312f3-ef63-44c1-9668-b6c7f7ff025e" +"CONTINENT","AFRICA","NORTHERN AFRICA","TUNISIA","","","434da207-97f4-4bb5-9550-40b0237f0a3f" +"CONTINENT","AFRICA","NORTHERN AFRICA","","","","f8ea9f90-eb85-42b0-8d30-93e2bdca16ef" +"CONTINENT","AFRICA","SOUTHERN AFRICA","BOTSWANA","","","444367b0-aa47-4d8b-94d7-41f7d69d2738" +"CONTINENT","AFRICA","SOUTHERN AFRICA","ESWATINI","","","0dd6b942-de19-4712-bd1d-aa301f0ee965" +"CONTINENT","AFRICA","SOUTHERN AFRICA","LESOTHO","","","96c2b110-5d8b-425b-a5e5-7066e6c7b52e" +"CONTINENT","AFRICA","SOUTHERN AFRICA","NAMIBIA","","","a827feaf-9926-4a4d-b21f-dc044524b2b5" +"CONTINENT","AFRICA","SOUTHERN AFRICA","SOUTH AFRICA","","","fb6d9fe3-10b5-4a75-be97-521d4058a4a9" +"CONTINENT","AFRICA","SOUTHERN AFRICA","","","","7147d041-d762-4475-8762-3b00d49ba9a7" +"CONTINENT","AFRICA","WESTERN AFRICA","BENIN","","","05d03731-d997-49d9-bfa3-6221d9e5bdeb" +"CONTINENT","AFRICA","WESTERN AFRICA","BURKINA FASO","","","aa499067-03c9-4684-be74-223b8b58304d" +"CONTINENT","AFRICA","WESTERN AFRICA","COTE D'IVOIRE","","","1e41939f-8c5e-4aee-8345-61736accffe4" +"CONTINENT","AFRICA","WESTERN AFRICA","GAMBIA","","","2ffc8cf6-f9fb-4f0e-858a-53766c4ba4b8" +"CONTINENT","AFRICA","WESTERN AFRICA","GHANA","","","4169d7ae-fa7e-4264-888c-c15b14c574cb" +"CONTINENT","AFRICA","WESTERN AFRICA","GUINEA-BISSAU","","","b0d902f8-d1b3-4cc8-aa2c-58fd4fead65e" +"CONTINENT","AFRICA","WESTERN AFRICA","GUINEA","","","4334c04a-1ab1-475d-9aab-bc30476a8b25" +"CONTINENT","AFRICA","WESTERN AFRICA","LIBERIA","","","c7db33e9-b333-4aee-bcf8-8003fba420b0" +"CONTINENT","AFRICA","WESTERN AFRICA","MALI","","","e0d8e561-956e-4450-9948-0568357c6abf" +"CONTINENT","AFRICA","WESTERN AFRICA","MAURITANIA","","","2d39101d-4602-4688-91f0-84f1a37a1441" +"CONTINENT","AFRICA","WESTERN AFRICA","NIGERIA","","","2a5c24de-0eb1-4049-a58b-7cc716ecd34c" +"CONTINENT","AFRICA","WESTERN AFRICA","NIGER","","","7b1a37fd-aae9-4bcf-86b1-48e7db570f65" +"CONTINENT","AFRICA","WESTERN AFRICA","SENEGAL","","","80e7a4da-82a2-449e-87d3-603d857058c5" +"CONTINENT","AFRICA","WESTERN AFRICA","SIERRA LEONE","","","e17e528b-9730-46ca-9439-09bc2a3cf9c6" +"CONTINENT","AFRICA","WESTERN AFRICA","TOGO","","","d66512f7-e44b-4cf0-a3cd-25750934b5f9" +"CONTINENT","AFRICA","WESTERN AFRICA","WESTERN SAHARA","","","fab1118b-afa8-4cfd-a05b-ed808392e910" +"CONTINENT","AFRICA","WESTERN AFRICA","","","","0bd7d518-6e4d-455e-95cd-2add85fc88fa" +"CONTINENT","AFRICA","","","","","2ca1b865-5555-4375-aa81-72811335b695" +"CONTINENT","ANTARCTICA","ANTARCTIC PENINSULA","","","","20229c10-303d-4fc9-89b0-8ae372df445f" +"CONTINENT","ANTARCTICA","BALLENY ISLANDS","","","","84a3d9ed-7a8e-4286-b821-8389c774a719" +"CONTINENT","ANTARCTICA","CAPE MOBIUS OF TERRA NOVA BAY","","","","789badd4-8d66-49dd-a4ff-98003f89864d" +"CONTINENT","ANTARCTICA","KING GEORGE ISLAND","","","","a100adaa-1e50-44bd-b53f-94a986f5b495" +"CONTINENT","ANTARCTICA","LAUFF ISLAND","","","","9464e2fc-1198-43b7-af7c-8b1ea53b2b0a" +"CONTINENT","ANTARCTICA","MAHER ISLAND","","","","aa9be105-fc42-42db-94fd-79590dd84f67" +"CONTINENT","ANTARCTICA","MCMURDO SOUND","","","","8e6ed09f-fc31-40ad-acbb-e2c0a05a642e" +"CONTINENT","ANTARCTICA","MERTZ GLACIER","","","","3c374d0e-fb82-4e14-9119-2f958747dca4" +"CONTINENT","ANTARCTICA","PETER I ISLAND","","","","9876ec21-7cb3-4f39-b7fe-1bf7c179fa22" +"CONTINENT","ANTARCTICA","Prydz Bay","","","","adecb0c1-3fba-42df-9e13-26899e868bb5" +"CONTINENT","ANTARCTICA","ROSS ISLAND","","","","21fb55d8-62f5-4453-b26a-794b6f0e88a5" +"CONTINENT","ANTARCTICA","SCOTT ISLAND","","","","ac00af1a-62d1-4919-b84d-10a180b4f712" +"CONTINENT","ANTARCTICA","SEYMOUR ISLAND","","","","b09b4bcf-dd12-4501-bf06-e44aa3b11af6" +"CONTINENT","ANTARCTICA","SHACKLETON GLACIER","","","","151d5071-6896-4605-a902-2a68a7dae901" +"CONTINENT","ANTARCTICA","SIPLE ISLAND","","","","d911a6dc-347c-45e6-8836-764fa7aac223" +"CONTINENT","ANTARCTICA","TERRA NOVA BAY","MT MELBOURNE","","","87c840a4-1ecf-48fe-90cd-0b93d4b02c89" +"CONTINENT","ANTARCTICA","TERRA NOVA BAY","MT RITTMAN","","","ad47931f-dec9-488b-b4a4-51696f9aa088" +"CONTINENT","ANTARCTICA","TERRA NOVA BAY","","","","ee6ff7cd-2902-4856-bdf3-dc7cf95d0440" +"CONTINENT","ANTARCTICA","","","","","70fb5a3b-35b1-4048-a8be-56a0d865281c" +"CONTINENT","ASIA","EASTERN ASIA","CHINA","HONG KONG","","d5182160-6764-4662-80fe-1ec252d36f20" +"CONTINENT","ASIA","EASTERN ASIA","CHINA","MACAU","","e1078fd4-fa6b-4c35-81ee-648bc086e9c5" +"CONTINENT","ASIA","EASTERN ASIA","CHINA","","","523afb73-9b4c-4478-97e2-a7d5e228e31c" +"CONTINENT","ASIA","EASTERN ASIA","JAPAN","","","9ae108db-2d76-44a1-b381-eba2df9554ad" +"CONTINENT","ASIA","EASTERN ASIA","MONGOLIA","","","af7106d6-4f42-4797-a547-b9e2f4384c7f" +"CONTINENT","ASIA","EASTERN ASIA","NORTH KOREA","","","ea7ae83d-94f5-4d2b-9b1a-6c8ac2b82c78" +"CONTINENT","ASIA","EASTERN ASIA","SOUTH KOREA","","","2c12f87b-a4c7-4aec-b10b-0f3e37560ccf" +"CONTINENT","ASIA","EASTERN ASIA","TAIWAN","","","d4c65f0d-f825-4040-8dd3-69b85979101a" +"CONTINENT","ASIA","EASTERN ASIA","","","","a817d381-60e3-4f1b-aa38-041d83b67e70" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","AFGHANISTAN","","","fa3c995d-58d6-4f06-9fb0-ec04e0456d7b" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","ARAL SEA","","","e2408bfc-f7d3-49a6-ad87-f025654e3af9" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","BANGLADESH","","","28761db9-82fe-4a24-9a89-0fd6047fa1ea" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","BHUTAN","","","55a04c46-92cf-49c6-8c84-8cd2c058f1e4" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","HIMALAYAS","","","f7026a7d-92db-4b7b-aa46-c839ff72e79a" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","INDIA","","","446c1b9a-cee6-46e6-99be-3db5fbb798fb" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","IRAN","","","7daf09eb-e8b7-4c69-b0d1-c53a429379cb" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","KAZAKHSTAN","","","95ef2448-80da-4419-8c07-f05f7d625796" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","KYRGYZSTAN","","","dca66e52-9406-4824-8639-602e12dc7d62" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","NEPAL","","","5a3c4d08-5924-4ea7-a59b-06cc653deba7" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","PAKISTAN","","","60b17f24-cf23-4209-91c4-975a87a7acb0" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","TAJIKISTAN","","","05ccd1da-7d1e-4489-9e12-4168874c1b71" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","TURKMENISTAN","","","d62d5dfe-b9a8-4107-aa4e-126192d5a487" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","UZBEKISTAN","","","4642acf0-c21c-48a6-91f4-6fbd6d0966d4" +"CONTINENT","ASIA","SOUTHCENTRAL ASIA","","","","ef8a6ecf-f0ca-4e05-81f9-d3be89e1ddc4" +"CONTINENT","ASIA","SOUTHEASTERN ASIA","CAMBODIA","","","2d955182-b62b-43eb-9acc-74f1f1f062f7" +"CONTINENT","ASIA","SOUTHEASTERN ASIA","LAO PEOPLE'S DEMOCRATIC REPUBLIC","","","0f023a42-94f0-4c8c-b2c9-792eaa6aa784" +"CONTINENT","ASIA","SOUTHEASTERN ASIA","MYANMAR","","","71953a36-817f-4b70-83df-f056364ce65d" +"CONTINENT","ASIA","SOUTHEASTERN ASIA","THAILAND","","","6af5848c-db4b-4dd0-a6fb-1b9c904ef21b" +"CONTINENT","ASIA","SOUTHEASTERN ASIA","VIETNAM","","","8f4b20b4-633c-4a2e-941d-49e4b5ab3374" +"CONTINENT","ASIA","SOUTHEASTERN ASIA","","","","9ea81338-dc64-4803-b0e2-db0e2aaa70cf" +"CONTINENT","ASIA","SOUTHERN ASIA","","","","a8ee0d08-8772-4951-bbf0-4114dd07de03" +"CONTINENT","ASIA","WESTERN ASIA","ARMENIA","","","42c902b9-ed3b-435f-89c3-150de74451f1" +"CONTINENT","ASIA","WESTERN ASIA","AZERBAIJAN","","","f487ce0b-ade2-4c3d-976f-3101da973126" +"CONTINENT","ASIA","WESTERN ASIA","BLACK SEA","","","b9c9d69b-9221-4aac-affb-5d3e98039251" +"CONTINENT","ASIA","WESTERN ASIA","CASPIAN SEA","","","109670ea-5fc7-4726-b772-f315fa0fa603" +"CONTINENT","ASIA","WESTERN ASIA","GEORGIA","","","d79e134c-a4d0-44f2-9706-cad2b59de992" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","BAHRAIN","","a7334f57-6040-46a3-bde2-f87b26e8a3a3" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","GAZA STRIP","","302ab5f2-5fa2-482d-9d22-8a7a1546a62d" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","IRAQ","","b25e6700-8d6f-4c95-be85-dedc4f077b26" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","ISRAEL","","3898679c-68f8-42af-bbf1-1400955e0076" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","JORDAN","","232cab66-2a19-4d21-8ad2-8d60b1e87b07" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","KUWAIT","","5db07c1e-355b-40d9-94b2-7fabe4119af3" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","LEBANON","","1dbb3f84-a25b-4738-bbee-f5371f471aec" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","OMAN","","925747d0-b5f0-4c51-9216-04980a785b54" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","PALESTINE","","57be5043-4557-45ad-8ac5-e1f8fbf92efc" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","QATAR","","1d131de3-da6c-40b9-84a5-02f8696e9f49" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","SAUDI ARABIA","","798f3745-be8c-48b0-b903-0265dbe1f957" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","SYRIAN ARAB REPUBLIC","","0d0210bb-0be8-47b0-94f2-8695e226ccc8" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","UNITED ARAB EMIRATES","","7bc3667c-98be-4b3f-b831-33e1a784a37c" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","YEMEN","","50d3d6bf-d409-466d-9ad8-469bf5d110a4" +"CONTINENT","ASIA","WESTERN ASIA","MIDDLE EAST","","","8596fd82-b9bc-4b90-bf9b-23c7f59ac4ab" +"CONTINENT","ASIA","WESTERN ASIA","TURKEY","","","26aad1c3-3d0e-4e4d-b1fe-e20961bb6b90" +"CONTINENT","ASIA","WESTERN ASIA","","","","1b6309ac-463b-4512-ab29-9870f3f8ba19" +"CONTINENT","ASIA","","","","","9e29690c-079c-4429-afed-ef061ab0c41e" +"CONTINENT","AUSTRALIA/NEW ZEALAND","AUSTRALIA","","","","ce0984da-1151-41ff-8d92-ab551c9d08bc" +"CONTINENT","AUSTRALIA/NEW ZEALAND","NEW ZEALAND","","","","d225920a-b027-4931-83d4-b60918251b59" +"CONTINENT","AUSTRALIA/NEW ZEALAND","","","","","02156a5c-5ea1-43e3-acf1-a89e99027555" +"CONTINENT","EUROPE","CENTRAL EUROPE","","","","e56c5b41-7568-42db-ae22-ae9c1c9dc26a" +"CONTINENT","EUROPE","EASTERN EUROPE","BELARUS","","","e05da771-e0e8-4ce6-a599-078819c872b5" +"CONTINENT","EUROPE","EASTERN EUROPE","BLACK SEA","","","afbc0a01-742e-49da-939e-3eaa3cf431b0" +"CONTINENT","EUROPE","EASTERN EUROPE","BULGARIA","","","a708af36-ff82-4403-80cd-6b4ffc661cc4" +"CONTINENT","EUROPE","EASTERN EUROPE","CZECHIA","","","ff28159f-dbc2-4585-bbfd-fbc8cabbffe3" +"CONTINENT","EUROPE","EASTERN EUROPE","HUNGARY","","","250456aa-1202-411d-b88f-919386a4ebe5" +"CONTINENT","EUROPE","EASTERN EUROPE","MOLDOVA","","","59c12b6b-c5b4-4e23-9281-731e3473cca3" +"CONTINENT","EUROPE","EASTERN EUROPE","POLAND","","","09029b84-fdf7-45d2-b684-4152c9b55d7d" +"CONTINENT","EUROPE","EASTERN EUROPE","ROMANIA","","","0295111a-b3ad-472c-a71c-9161c663716b" +"CONTINENT","EUROPE","EASTERN EUROPE","RUSSIAN FEDERATION","LAKE BAYKAL","","b8631319-b4ee-4676-beaf-2aa179504be6" +"CONTINENT","EUROPE","EASTERN EUROPE","RUSSIAN FEDERATION","","","8c10116a-e71d-45fd-a4b6-92e6b4bf234d" +"CONTINENT","EUROPE","EASTERN EUROPE","SLOVAKIA","","","c707babd-bca8-46ea-90ab-8cf17a6c50fe" +"CONTINENT","EUROPE","EASTERN EUROPE","UKRAINE","","","83b75894-bceb-466a-b7d4-a6cd37521ffc" +"CONTINENT","EUROPE","EASTERN EUROPE","","","","5add948b-8520-4e55-808c-27f0be33d35a" +"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","CHANNEL ISLANDS","","5ef2ae17-111c-4e9e-a6c9-95ce17a8b75c" +"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","IRELAND","","4bcfd0d2-b5c7-47cb-8ded-d544a84f0c47" +"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","UNITED KINGDOM","","1928f419-0c4b-4b06-9f66-eb37f49105de" +"CONTINENT","EUROPE","NORTHERN EUROPE","BRITISH ISLES","","","c9e8dfcd-18ac-405d-b6a0-934ae3c743d3" +"CONTINENT","EUROPE","NORTHERN EUROPE","ESTONIA","","","f0b2da18-9290-4aaf-8e91-4b52e3d9dfc4" +"CONTINENT","EUROPE","NORTHERN EUROPE","GUERNSEY","","","1a16071e-e3bc-43ea-a668-522bbc045fdb" +"CONTINENT","EUROPE","NORTHERN EUROPE","ICELAND","","","5e64ca14-42f3-4222-8f2c-5db3c7b71d8f" +"CONTINENT","EUROPE","NORTHERN EUROPE","LATVIA","","","e2e7fb18-459b-4d43-8065-ce5ca7e5bdb9" +"CONTINENT","EUROPE","NORTHERN EUROPE","LITHUANIA","","","b58616f8-024f-45f1-be4f-8924557a82bc" +"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","ALAND ISLANDS","","cbb172c1-a791-4a87-ab39-fe54508b26cd" +"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","DENMARK","","98f7f9f6-90cb-4f52-8bec-8d21dd310c30" +"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","FINLAND","","b198283f-02d9-424e-838a-8997a18139a9" +"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","NORWAY","","4bbd9eec-9daa-45c5-9cc7-1d8fb8bffd79" +"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","SWEDEN","","2edce566-82e1-4645-a94d-58cffa42f8e2" +"CONTINENT","EUROPE","NORTHERN EUROPE","SCANDINAVIA","","","5367bbef-371d-43be-a4cd-5f4f5ccc4403" +"CONTINENT","EUROPE","NORTHERN EUROPE","","","","1b0b4340-30a6-4cdd-b356-9c6a0b674a29" +"CONTINENT","EUROPE","SOUTHERN EUROPE","ALBANIA","","","ffcee960-5527-43e0-bfd0-ad48b1151cf0" +"CONTINENT","EUROPE","SOUTHERN EUROPE","ANDORRA","","","e4efa84c-fe5a-49f0-81cd-0a6e7b38074d" +"CONTINENT","EUROPE","SOUTHERN EUROPE","BOSNIA AND HERZEGOVINA","","","7691ebb7-81c0-4f38-945c-4462a203cccb" +"CONTINENT","EUROPE","SOUTHERN EUROPE","CROATIA","","","0a19cdd4-48ec-4551-9e5f-7be860891f94" +"CONTINENT","EUROPE","SOUTHERN EUROPE","GREECE","","","103ca372-ccaa-4cca-9e1a-ef2219ad6bb2" +"CONTINENT","EUROPE","SOUTHERN EUROPE","ITALY","","","ff1cfc9c-5e73-4137-b8e1-d6f4e83e61c4" +"CONTINENT","EUROPE","SOUTHERN EUROPE","KOSOVO","","","632e6bd5-cdd5-42fa-801f-66b553155905" +"CONTINENT","EUROPE","SOUTHERN EUROPE","MONTENEGRO","","","d8f2db47-29ae-4999-aeca-360e4f98f256" +"CONTINENT","EUROPE","SOUTHERN EUROPE","NORTH MACEDONIA","","","03280af1-94e4-4918-8a19-70b8445f9d6f" +"CONTINENT","EUROPE","SOUTHERN EUROPE","SAN MARINO","","","18493ec7-f2a5-47bc-8200-8d9e0c41dcf3" +"CONTINENT","EUROPE","SOUTHERN EUROPE","SERBIA","","","71c964af-7eec-4812-85de-04cadfd77934" +"CONTINENT","EUROPE","SOUTHERN EUROPE","SLOVENIA","","","1e7cf5e6-e98a-45ae-a300-6ee43aaf9a1d" +"CONTINENT","EUROPE","SOUTHERN EUROPE","SPAIN","GIBRALTAR","","1dd688e9-3c50-4be0-907a-423d2371dc3e" +"CONTINENT","EUROPE","SOUTHERN EUROPE","SPAIN","","","cbbe14fb-a5ee-4236-84ae-cc8dee612b49" +"CONTINENT","EUROPE","SOUTHERN EUROPE","VATICAN CITY","","","538d7162-9823-4942-ae11-3131c8fbd245" +"CONTINENT","EUROPE","SOUTHERN EUROPE","","","","10b324f6-0541-42c2-938d-e2acec0de8ed" +"CONTINENT","EUROPE","WESTERN EUROPE","AUSTRIA","","","e4d33a7a-f145-4aec-9d15-e21dc9916aad" +"CONTINENT","EUROPE","WESTERN EUROPE","BELGIUM","","","132c1238-6779-443c-9a5c-3df2f238beae" +"CONTINENT","EUROPE","WESTERN EUROPE","FRANCE","","","a4ab3fe4-b9c7-4aad-9eaa-ba63f38059e6" +"CONTINENT","EUROPE","WESTERN EUROPE","GERMANY","","","953ea5cb-cd34-4ffc-a18b-f93173f2c7f6" +"CONTINENT","EUROPE","WESTERN EUROPE","LIECHTENSTEIN","","","df8d8422-8497-44c4-a147-1e4d0bdb4ad0" +"CONTINENT","EUROPE","WESTERN EUROPE","LUXEMBOURG","","","018ef16b-76e2-4d3d-a981-76bd7ea02e5f" +"CONTINENT","EUROPE","WESTERN EUROPE","MONACO","","","8611d45f-c410-44ac-a2ea-d369b7c10011" +"CONTINENT","EUROPE","WESTERN EUROPE","NETHERLANDS","","","c4ff980e-6edd-400f-9c99-951fa0d0c887" +"CONTINENT","EUROPE","WESTERN EUROPE","PORTUGAL","","","73236574-93e5-4520-ad5d-e298fd28d42d" +"CONTINENT","EUROPE","WESTERN EUROPE","SWITZERLAND","","","fc90f569-b291-40f5-bbe1-5c5c21075686" +"CONTINENT","EUROPE","WESTERN EUROPE","","","","0cd8148f-6feb-42ea-b867-5af9a933d673" +"CONTINENT","EUROPE","","","","","0b3765f7-20f7-4425-bd50-d1bb99d09d86" +"CONTINENT","NORTH AMERICA","CANADA","ALBERTA","","","9cf876f7-1621-4e1b-bc56-056a0c28ed4b" +"CONTINENT","NORTH AMERICA","CANADA","BRITISH COLUMBIA","","","12b71c1c-bdb2-4cc6-bab9-0569563da458" +"CONTINENT","NORTH AMERICA","CANADA","GEORGIAN BAY","","","0b5164a2-ce21-4b36-9502-5e1d05a2e3ae" +"CONTINENT","NORTH AMERICA","CANADA","GREAT LAKES, CANADA","","","2844fb17-9f62-47c9-90c4-d61125e0922e" +"CONTINENT","NORTH AMERICA","CANADA","HUDSON BAY","","","f26c754c-1765-4a45-920e-792b43353a39" +"CONTINENT","NORTH AMERICA","CANADA","MANITOBA","","","72e9e5dc-0f52-43df-8670-d5908806759e" +"CONTINENT","NORTH AMERICA","CANADA","NEW BRUNSWICK","","","bab83514-4a6a-4ac5-a130-378ee49fdf18" +"CONTINENT","NORTH AMERICA","CANADA","NEWFOUNDLAND AND LABRADOR","","","009ebc80-5561-40d1-98d9-13cbc5bd1591" +"CONTINENT","NORTH AMERICA","CANADA","NORTHWEST TERRITORIES","","","95bed3b9-3c0f-4333-b9ac-2f2f5fede59e" +"CONTINENT","NORTH AMERICA","CANADA","NOVA SCOTIA","SCOTIAN SHELF","","aa2adee8-f978-4e6a-921c-be457849d251" +"CONTINENT","NORTH AMERICA","CANADA","NOVA SCOTIA","","","9dc6c179-4631-4804-99be-bdbbff83c679" +"CONTINENT","NORTH AMERICA","CANADA","NUNAVUT","","","4185beef-8d24-4205-9fe7-2d1345671680" +"CONTINENT","NORTH AMERICA","CANADA","ONTARIO","","","b907550e-6aa1-4cbf-b83b-08546f949d12" +"CONTINENT","NORTH AMERICA","CANADA","PRINCE EDWARD ISLAND","","","8d1ef0a1-f9e1-4807-9025-717af90479cb" +"CONTINENT","NORTH AMERICA","CANADA","QUEBEC","","","c977c83a-f171-4337-8001-abb2539cdc76" +"CONTINENT","NORTH AMERICA","CANADA","SASKATCHEWAN","","","c7e30fc4-c8f0-4945-b161-214ab253f170" +"CONTINENT","NORTH AMERICA","CANADA","YUKON TERRITORY","","","5da3b055-4215-4ec5-95f7-fdca626ebf57" +"CONTINENT","NORTH AMERICA","CANADA","","","","d0081284-5cef-484d-b1ee-a6787b197a33" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","BELIZE","","","5f8636bb-0dc3-4528-a1eb-da5ac3b51fe2" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","COSTA RICA","","","58ee925e-3285-4192-8f0a-f49a5c211439" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","EL SALVADOR","","","8d237194-e6b5-418b-ab67-e20e260867e9" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","GUATEMALA","","","e325f579-2d4c-4c72-81f4-30cb8723261a" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","HONDURAS","","","91409bfb-7fe2-4eaa-97d9-4bc96d5a85b0" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","NICARAGUA","","","2274358d-11e5-442f-af41-e20fe1ba69c6" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","PANAMA","","","190f39d7-66d7-4b5a-964f-0d47382d8e2e" +"CONTINENT","NORTH AMERICA","CENTRAL AMERICA","","","","0980d595-3dbe-4247-82f2-40b5e8df603f" +"CONTINENT","NORTH AMERICA","GREENLAND","","","","9d15e288-95cd-476e-acdd-5e31add3ca32" +"CONTINENT","NORTH AMERICA","MEXICO","","","","70d89073-6697-4eb6-b01b-989c623a5649" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ALABAMA","","","9fe93f63-61b1-4232-bf5b-05703f803fce" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ALASKA","","","ce93cb61-ead9-4b5c-b26f-0f22ea5e2b24" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ARIZONA","","","c46d59a8-d874-4db8-87f5-d59ecbb79a29" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ARKANSAS","","","69f4d2fa-5b3d-43fe-bd55-63f6c9d1ca5a" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","CALIFORNIA","","","fc4f2acd-ace7-452b-a540-4162f9e9ddb0" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","COLORADO","","","e10d421b-11fd-4344-b0ad-b4d3eaec2fe5" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","CONNECTICUT","","","41ac6bda-027c-438b-b41f-a6e6cb2f03ce" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","DELAWARE","","","dfe30ec4-50e4-402e-9ab0-f5f6d141bb9c" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","DISTRICT OF COLUMBIA","","","2ad8b29a-df7d-4fdc-b7b9-bcd2ff8d9866" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","FLORIDA","FLORIDA KEYS","","23e967b5-6a87-47a6-aa93-0a96dbe6c316" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","FLORIDA","","","b607766c-83f5-42bb-96b2-2de4e7b488a4" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","GEORGIA","","","a94fb5d3-6a0a-44a1-ac31-5e8978b5f0b1" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","GREAT LAKES","","","271c9002-8a96-406e-a0ec-8fdbac41eb1e" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","HAWAII","","","017ac312-b650-4800-992f-5167708b4d31" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IDAHO","","","5e4b6864-4bf7-43a9-8ca6-2099cc40dd25" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","ILLINOIS","","","06b1e163-667a-4d13-b638-5273e7a65dad" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","INDIANA","","","5061b32d-58dc-4a48-ba0a-5e8d3c686cc3" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IOWA","DAVENPORT","","cd638f0d-4740-4ab3-938d-6f8f284f78ae" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IOWA","DES MOINES","","8abe2036-a848-451a-8eee-ae7ccd9e401f" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","IOWA","","","ed048ffc-f15c-4b27-899e-70d00417685b" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","KANSAS","","","42b510c8-3f17-4f95-85f5-011065fcc038" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","KENTUCKY","","","7de86e45-f3e3-4475-af21-fc5a7f0c6349" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","LOUISIANA","","","73c5d3e9-29f6-4352-a3db-1bc49bbff315" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MAINE","PORTLAND","","11a7e181-3804-4ec7-8717-446546fdd014" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MAINE","","","fcc2ca75-790a-4e69-80b6-7af8be328a71" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MARYLAND","","","417c01a8-79c5-40e6-affc-8a462b0b4336" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MASSACHUSETTS","BOSTON","","5ae6db89-e135-4e83-9317-c48ee0bc832c" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MASSACHUSETTS","","","f9837873-62cd-402c-af8b-571876942a83" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MICHIGAN","GAYLORD","","b4d4394b-729e-4b18-ac41-5b03b23a44bc" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MICHIGAN","","","5561d10d-5224-4e09-9d68-caffd6bc3d74" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MINNESOTA","","","2e2d65b6-d3de-4921-877c-2d3a4e447978" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MISSISSIPPI","","","c3954181-53c1-4847-84dd-cf62815b985f" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MISSOURI","","","c42c3695-f569-40f4-8330-9b6fde553abf" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","MONTANA","","","88030de5-d237-4074-943f-b6422790d58d" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEBRASKA","","","48c90518-9246-452b-8874-d50975e87ef6" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEVADA","","","2bdea9ad-43c4-4559-a156-6dad5d9ba137" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW HAMPSHIRE","","","a2e161cb-6448-47b0-ab56-c15308152181" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW JERSEY","","","bbbb53c6-a8e8-4db6-8849-07316a5ff6c8" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW MEXICO","","","b8bdae16-f063-42a5-8d47-2ee863fa56e9" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NEW YORK","","","854d0bb3-dcc3-48eb-a65a-2d26a8b87394" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NORTH CAROLINA","","","a6eb6bdd-8aec-475f-a660-b8603219a5b0" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","NORTH DAKOTA","","","25ff6e15-1d40-4df6-b008-eb11c3a199d9" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","OHIO","","","c23966c4-9e16-484c-a1ef-efcd2354d71c" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","OKLAHOMA","","","31ea4578-9b23-4f66-b454-b7dae358267c" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","OREGON","","","699d5c22-6bcd-4cfa-be0f-f06e34a63513" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","PENNSYLVANIA","","","d7fa4d05-8c37-4e23-99eb-4f9a888a0d5d" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","RHODE ISLAND","","","ea2ec2ff-f0e5-4366-8255-621ad52f9e5f" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","SOUTH CAROLINA","","","a163e72a-e31f-4fa6-aef9-8f21f2e4b081" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","SOUTH DAKOTA","","","d401d70a-eacf-4ee7-89a4-70b67f711ccd" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","TENNESSEE","","","29ad7c2a-42d5-49e6-9093-e758da70432e" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","TEXAS","","","0f01d3b9-3691-471e-b21b-3f42c512dcd2" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","UTAH","","","71a722af-0cd9-4052-b4e8-f3af56201401" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","VERMONT","BURLINGTON","","92a4dbc0-eb29-4417-a986-ee747c481881" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","VERMONT","","","359e1e8f-1789-4c32-9afc-79c2fd6f9884" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","VIRGINIA","","","c86d3f12-106a-435d-ba9e-d735b306b200" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WASHINGTON","","","dcef091b-18b5-48bf-b191-69ab7a3511f1" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WEST VIRGINIA","","","5f5917c3-7225-47d1-b465-03d7b8338060" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WISCONSIN","LA CROSSE","","b9f52e70-8d85-45b6-b166-79201ce7d2bc" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WISCONSIN","","","d8ad42ae-624f-48a2-be40-cf04c53e6543" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","WYOMING","","","c2847793-0bb8-41cf-b3e0-d4e4b27914ce" +"CONTINENT","NORTH AMERICA","UNITED STATES OF AMERICA","","","","753f915c-70d4-49e1-9bd5-83e75f461e30" +"CONTINENT","NORTH AMERICA","","","","","88bc8b39-ad19-4415-b426-e7d37450341a" +"CONTINENT","SOUTH AMERICA","AMAZONIA","","","","bb293e12-6ffe-48e2-96e5-8f5ae9c137c2" +"CONTINENT","SOUTH AMERICA","ARGENTINA","","","","838923bc-cda7-4cf5-a21a-0c777304a593" +"CONTINENT","SOUTH AMERICA","BOLIVIA","","","","e6c50f42-9065-4ff8-a172-58d668fde547" +"CONTINENT","SOUTH AMERICA","BRAZIL","","","","2a65dfd1-83e7-4886-a732-316b170522a1" +"CONTINENT","SOUTH AMERICA","CHILE","DIEGO RAMIREZ ISLANDS","ISLA BARTOLOME","","dcc856e9-c215-4799-b64d-d406e3da8541" +"CONTINENT","SOUTH AMERICA","CHILE","DIEGO RAMIREZ ISLANDS","ISLA GONZALEZ","","57d5b413-48b5-485a-ad7b-bd0201c64a60" +"CONTINENT","SOUTH AMERICA","CHILE","DIEGO RAMIREZ ISLANDS","","","1132b6fb-a1fe-42df-a7c6-38ee030aceaa" +"CONTINENT","SOUTH AMERICA","CHILE","","","","da26d486-1ee6-4689-abe9-5a59b2d572b1" +"CONTINENT","SOUTH AMERICA","COLOMBIA","","","","452b929e-ffdb-48c8-b3a2-bddd1ab2bf97" +"CONTINENT","SOUTH AMERICA","ECUADOR","","","","b7eb8278-0dc3-4121-87ea-14173279dfb4" +"CONTINENT","SOUTH AMERICA","FRENCH GUIANA","","","","146ee1c3-67c3-45a0-ad64-c67f12032351" +"CONTINENT","SOUTH AMERICA","GUYANA","","","","f58ab39c-6c61-47cf-9117-50aa4e8aa93a" +"CONTINENT","SOUTH AMERICA","PARAGUAY","","","","3456a093-81b0-4f6b-9073-d17502a8072b" +"CONTINENT","SOUTH AMERICA","PERU","","","","4366972c-aa2d-41cb-b9c3-4d6f57546f65" +"CONTINENT","SOUTH AMERICA","SURINAME","","","","b2012be4-7977-4d49-ac23-bacd05e9a1d0" +"CONTINENT","SOUTH AMERICA","URUGUAY","","","","989f1016-3a59-4520-935e-0f75467a740a" +"CONTINENT","SOUTH AMERICA","VENEZUELA","","","","3bd4aae9-4415-44bb-ad97-5db303ad8cd8" +"CONTINENT","SOUTH AMERICA","","","","","b7422ce5-a062-4e96-9a8b-36f9e3809e79" +"CONTINENT","","","","","","0a672f19-dad5-4114-819a-2eb55bdbb56a" +"GEOGRAPHIC REGION","ARCTIC","","","","","d40d9651-aa19-4b2c-9764-7371bb64b9a7" +"GEOGRAPHIC REGION","EASTERN HEMISPHERE","","","","","116620fb-2762-4032-9bfa-152d109c029d" +"GEOGRAPHIC REGION","EQUATORIAL","","","","","7c5c3754-7b3d-4c08-9ea3-670ed82629ec" +"GEOGRAPHIC REGION","EURASIA","","","","","350fb2da-c713-497e-9d7d-42dcad0df83f" +"GEOGRAPHIC REGION","GLOBAL LAND","","","","","61cc17c8-4f06-4556-8117-8ba9bb329a3f" +"GEOGRAPHIC REGION","GLOBAL OCEAN","","","","","3d4e44c4-5d99-4a9b-8388-43c63533ee97" +"GEOGRAPHIC REGION","GLOBAL","","","","","51e3593f-4b42-4141-972e-96666c479f9c" +"GEOGRAPHIC REGION","MID-LATITUDE","","","","","46769685-522d-49c3-ad81-22e1cc8c0c2b" +"GEOGRAPHIC REGION","NORTHERN HEMISPHERE","","","","","507794a1-9563-49a4-b2d3-8a28347c1fd7" +"GEOGRAPHIC REGION","OCEANIA","","","","","e3205e96-9379-4b6c-86e0-c012090549f7" +"GEOGRAPHIC REGION","POLAR","","","","","3fedcf7c-7b0c-4b51-abd2-2c54de713061" +"GEOGRAPHIC REGION","SAHEL","","","","","deeef0af-f305-4fd4-9796-e9e1906e5e15" +"GEOGRAPHIC REGION","SOUTHERN HEMISPHERE","","","","","417235ba-103a-443c-bb43-75a1a772a2e2" +"GEOGRAPHIC REGION","TROPICS","","","","","639c23bd-f64a-4061-a535-4a1a842d230f" +"GEOGRAPHIC REGION","WESTERN HEMISPHERE","","","","","a29a6a2b-e0e5-4ba9-9768-df67db4f34a6" +"GEOGRAPHIC REGION","","","","","","204270d9-8039-4768-851e-63635af5fb65" +"OCEAN","ARCTIC OCEAN","BARENTS SEA","","","","a4cb5149-19c8-45dc-976b-9cd590a7365a" +"OCEAN","ARCTIC OCEAN","BEAUFORT SEA","","","","86ed3782-8e30-4547-a774-35100b224d5a" +"OCEAN","ARCTIC OCEAN","CHUKCHI SEA","","","","7e35ea67-a0c9-49fa-97de-e5f8f5b9ee6d" +"OCEAN","ARCTIC OCEAN","","","","","1ed45273-3e2b-4586-b852-05578c04041b" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","AZORES","","","946f1f4f-fddc-418b-8177-38ba747e0e64" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","BALTIC SEA","","","41cd228c-4677-4900-9507-70144d8b50bc" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","BAY OF FUNDY","","","6e4b47ff-1d42-42d7-b5a0-a15cb27e39cc" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","BERMUDA","","","4811b042-546d-43de-88c4-fdfef09fab80" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CANARY ISLANDS","","","69534766-c309-4145-8963-2bdb7b57340b" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CAPE COD","","","48f4e536-a426-4735-b0c4-f80a1d0afa19" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CAPE VERDE","","","9aaf0f2f-6e85-4175-b4c2-a6dc31d8793a" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ANGUILLA","","835b0d04-f380-4e59-a19e-6652ae04dbea" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ANTIGUA AND BARBUDA","","97b6f4a7-a03a-4b6b-a6f3-fbd80f84fa95" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ARUBA","","f39da294-1678-4cca-b545-885612e9f7de" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","BAHAMAS","","31c5e65c-05b6-4806-830f-94c912f03c77" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","BARBADOS","","b770fd0c-6169-42e8-ad30-7fde13c5c6c5" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","BONAIRE","","bc7f49de-7e63-495c-af20-851938d4f6bc" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CARIBBEAN","","ad18da3f-fbdb-4bc1-ab4d-008e9b8f6002" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CAYMAN ISLANDS","","5e154e2c-192d-4ef6-9279-84563cfcc5f5" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CUBA","","3588a42b-43bc-43d1-ad7b-3c43ba3bec4b" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","CURACAO","","f0dd2220-9947-41db-a185-b05aaf26963b" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","DOMINICAN REPUBLIC","","a5b56209-919d-4ace-9954-cbda4e58a3be" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","DOMINICA","","54fc3042-e1a5-4381-859f-e80335831de4" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","GRENADA","","8d9e2612-e2ab-4895-9a26-c968522019f1" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","GUADELOUPE","","7ff548d5-896a-48c5-9ffb-28aa4d47825f" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","HAITI","","63246421-f046-4770-acd9-d0a3d31bbd36" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","JAMAICA","","9a539ebb-1b71-4e56-9581-e42c0a9c96ea" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","MARTINIQUE","","fe4326f9-1089-4ede-ae32-5d7bc7d2349b" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","MONTSERRAT","","46cfe46b-7a99-413b-b763-dd8c8f579e1a" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","NAVASSA ISLAND","","21be5553-67cb-4e54-9807-f1b558d72ae4" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","NETHERLANDS ANTILLES","","514053f8-27a3-4fcb-8ce8-0d63cb345740" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","PUERTO RICO","","8e8ff5a7-ca10-4322-a5d6-84c08d73775a" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","SABA","","caa8da5b-48da-44fd-946c-24717d8bfdec" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST BARTHELEMY","","2a726c91-2cd0-4b08-a301-30396de71b91" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST EUSTATIUS","","9c1c7783-8214-480b-a1e6-68240ce803ce" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST KITTS AND NEVIS","","b870624c-8668-4c3e-9f0d-6c2f08bce62b" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST LUCIA","","477a9a14-0c23-4f74-a82b-565fd3a856ab" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST MAARTEN","","d729cdbb-b302-42fb-8c72-3068302eada6" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST MARTIN","","74335c3e-c856-48d3-a4de-d6fe4c7db775" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","ST VINCENT AND THE GRENADINES","","844d7d6f-e9e8-4632-83e8-115a6e972e18" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","TRINIDAD AND TOBAGO","","b117b0ec-3013-48a2-81b5-58215bca8e1e" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","TRISTAN DA CUNHA","","35203540-ed8a-4087-82aa-bfcdc3bc11ec" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","TURKS AND CAICOS ISLANDS","","00fdb6a0-3063-45d3-9930-71b5a9a3206c" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","VIRGIN ISLANDS","","2ed1d456-b067-45bc-857f-8ba5fe87035e" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","CARIBBEAN SEA","","","eb176e48-13e2-413c-85d6-b37e16303573" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","DAVIS STRAIT","","","29e79a9c-f1a9-4832-8813-e3a12dfddec6" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GEORGES BANK","","","7a1f45ea-4804-4ae0-8949-e4f33223d39d" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GRAND BANKS","","","56c7983c-33fa-4abc-95d4-8ae848048abb" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GULF OF MAINE","","","9c31f745-a3d1-4007-99ae-fceca2019fab" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GULF OF MEXICO","","","75fab119-51a6-4b59-9711-f6c3cd3139db" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","GULF OF ST LAWRENCE","","","70c4057c-7ecc-4ff5-a6e6-5d5b0bb2af3b" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","IRISH SEA","ISLE OF MAN","","977f6d42-8d3a-4875-8a7b-ed225622519c" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","IRISH SEA","","","452868d2-bcca-4cb5-8d5d-102b4f6019eb" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","LABRADOR SEA","","","0006e246-4296-448c-9b81-a0831cad7f1c" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","LONG ISLAND SOUND","","","f6ed7b70-c420-46e0-97db-2aecd9748788" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MADEIRA","","","283ecddd-37db-471c-a600-a45b4419918e" "OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","ADRIATIC SEA","GULF OF TRIESTE","7b93c892-2fc4-417b-a4da-5c8a2fca361b" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","CEUTA","a1c03e9b-1eae-4ea5-be30-3b2cd217216c" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","CORSICA","09d995de-2158-43f7-b113-9babb9a1593e" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","CYPRUS","feff6e5e-27be-4404-af9c-c80b56d48ad4" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","DHEKELIA","63ddceba-4924-4c03-814f-ae7a90ddde62" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","MALTA","6d54689d-b634-4d5e-b2f9-752c3648bdcf" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","MARMARA SEA","c6679f10-7580-469c-99e8-d6f1e54b5245" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","SARDINIA","26ce44ec-4a5d-413f-ae6e-2064a374c8f1" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","SICILY","5ff76570-66c1-4095-af0b-f688fd8b026d" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","","c322d007-8d19-451b-ba46-daa216782248" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORTH SEA","LAESO","d68d3910-3eeb-4c18-b95c-561a30f38550" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORTH SEA","","4401ec0e-0d64-41d3-b4bd-2ff797865e83" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORWEGIAN SEA","FAEROE ISLANDS","539e03d8-2a5c-4786-8ed5-ff27cf595e36" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORWEGIAN SEA","","91dd3935-a1ae-48ca-b263-9b10ac732372" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","ROCKALL TROUGH","","6b36316f-992a-487e-987e-fa0de4a10603" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","SABLE ISLAND","","4e5212a7-40a1-4866-8e58-2ca71cc26054" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","ST PIERRE AND MIQUELON","","f2f14e18-261a-426f-96bc-2922264637b2" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","SVALBARD AND JAN MAYEN","","706ae2c4-750c-4a96-a7af-5133c357ae5c" -"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","","","a4202721-0cba-4fa1-853f-890f146b04f9" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","ARGENTINE ISLANDS","","b3f09053-bb27-4d49-a2fa-893547f5e14b" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","ASCENSION ISLAND","","14e52f21-8d11-484b-8c88-ca36ce712561" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","BOUVET ISLAND","","1eaf9a26-59b9-49fc-8f9f-1a72891edfe1" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","CAPE BASIN","","5177650d-a0e7-4466-a568-66ac2bdb8827" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","FALKLAND ISLANDS","","5c637509-8e68-4511-9b85-8bbee1107a7a" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","GOUDIER ISLAND","","f8a52f41-6584-457e-9162-7dde82c00d79" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","GOUGH ISLAND","","3629338b-cfef-4119-ae3c-b9c800776275" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SAO TOME AND PRINCIPE","","3a607d6a-1d8e-4bd2-8ce3-6d4a6ab21ad3" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SOUTH GEORGIA ISLAND","","a5d18d41-4e95-4442-93ee-6de73403d71f" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SOUTH ORKNEY ISLANDS","","798a293e-c19b-4103-93eb-c7eb5b27c214" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SOUTH SANDWICH ISLANDS","","baa8382b-6ee9-4a9d-9937-bf0e6b062ac7" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","ST HELENA","","597b10dd-8822-46a7-922d-7d9a99abd8c1" -"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","","","9ce6b6ba-8f9f-4585-9438-05619d768578" -"OCEAN","ATLANTIC OCEAN","","","","cf249a36-2e82-4d32-84cd-23a4f40bb393" -"OCEAN","INDIAN OCEAN","AMSTERDAM AND ST. PAUL ISLANDS","POINTE BENEDICTE","","e58dcd83-8521-4d5a-b528-9cf60a50274d" -"OCEAN","INDIAN OCEAN","AMSTERDAM AND ST. PAUL ISLANDS","","","a6f58ff3-7fd8-47a2-b007-6e23c104d272" -"OCEAN","INDIAN OCEAN","ANDAMAN ISLANDS","","","0b7d96be-3d27-40b8-9876-61b2d7c2bd58" -"OCEAN","INDIAN OCEAN","ARABIAN SEA","PERSIAN GULF","","9e75b714-9315-42e8-85c7-dbe502659e98" -"OCEAN","INDIAN OCEAN","ARABIAN SEA","","","a186eed4-d1b4-4d11-b218-b61708a9124c" -"OCEAN","INDIAN OCEAN","BAY OF BENGAL","","","66dc90fd-304a-4379-a9e1-18cf184cc6da" -"OCEAN","INDIAN OCEAN","BRITISH INDIAN OCEAN TERRITORY","","","4d9cb925-670c-43e6-af0f-40372df8b206" -"OCEAN","INDIAN OCEAN","BRUNEI","","","160b4977-218b-4d49-b1f1-0193f8ac2091" -"OCEAN","INDIAN OCEAN","CHRISTMAS ISLAND","","","8e82af62-b3b1-4fc6-95b0-adb9433aa23f" -"OCEAN","INDIAN OCEAN","COCOS ISLANDS","","","5bc49524-33cd-48b8-9c23-d648e8ecbad5" -"OCEAN","INDIAN OCEAN","COMOROS","","","e0137b35-e179-4601-8ff5-9292fafe5959" -"OCEAN","INDIAN OCEAN","CROZET ISLANDS","ILE DE LA POSSESSION, BASE ALFRED FAURE","","336b41d3-5597-46ee-9d26-8d992399da93" -"OCEAN","INDIAN OCEAN","CROZET ISLANDS","POSSESSION ISLAND","","12c922d0-63e7-453e-aef6-d8c4d21d93c0" -"OCEAN","INDIAN OCEAN","CROZET ISLANDS","","","57307aeb-06c4-443c-bdc3-e554d6414aa6" -"OCEAN","INDIAN OCEAN","FRENCH SOUTHERN TERRITORIES","","","d582a87a-8969-45bf-947a-2864d2d0fcd7" -"OCEAN","INDIAN OCEAN","INDONESIA","SUMATRA","","8b9f777c-3037-4fcf-9d7f-a2bcb809d2be" -"OCEAN","INDIAN OCEAN","INDONESIA","","","84aeedd2-6093-4252-9895-8dc063a9ad97" -"OCEAN","INDIAN OCEAN","KERGUELEN ISLANDS","PORT-AUX-FRANCAIS","","4095946b-4a9b-40f5-a0ee-fcfbae12b64e" -"OCEAN","INDIAN OCEAN","KERGUELEN ISLANDS","","","0958cd41-f5bf-444e-9e91-c8d9307effe7" -"OCEAN","INDIAN OCEAN","MADAGASCAR","","","d9f82c3c-0edf-445e-b838-eebc2278d4c1" -"OCEAN","INDIAN OCEAN","MALAYSIA","","","5f9a0900-8379-456b-bd5e-d6235a022bfa" -"OCEAN","INDIAN OCEAN","MALDIVES","","","eabe42d5-1826-4d7c-9988-4a6397873061" -"OCEAN","INDIAN OCEAN","MAURITIUS","","","5477242e-79ee-4139-bb1f-ab3ace1eb864" -"OCEAN","INDIAN OCEAN","MAYOTTE","","","ea8a08f7-9b41-4541-8078-e9c9dd41d7f3" -"OCEAN","INDIAN OCEAN","NICOBAR ISLANDS","","","a09d128e-c786-48cc-b569-c1a6bbb1f772" -"OCEAN","INDIAN OCEAN","RED SEA","","","d7808080-aea5-48f3-b0da-78141ef6324e" -"OCEAN","INDIAN OCEAN","REUNION","","","16cc58c4-fd7b-40b7-8f33-30d26674fd8b" -"OCEAN","INDIAN OCEAN","SEYCHELLES","","","dc173a40-c1a0-4fd0-b059-2db52ca65639" -"OCEAN","INDIAN OCEAN","SINGAPORE","","","6364bdbb-cdec-4059-a2b5-6b873c09fc7d" -"OCEAN","INDIAN OCEAN","SRI LANKA","","","149fef08-334f-4eb4-a4b6-12ebe8eb9570" -"OCEAN","INDIAN OCEAN","TIMOR-LESTE","","","f58fbdce-3ee6-4dc1-b9ca-27953d89955f" -"OCEAN","INDIAN OCEAN","ZANZIBAR","","","02fb6908-e5bd-4dd0-a627-2f6e13b4281f" -"OCEAN","INDIAN OCEAN","","","","4b75a3a2-9811-43b9-8f8c-64d0ae4d9ca8" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","AMERICAN SAMOA","","d4db292f-3097-4843-a6c5-291cf993bea9" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","BAKER ISLAND","","1cefbe03-03dd-4dd2-abed-0eac80bf00cf" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","HAWAII ISLAND","91e466e3-2a02-4ce2-a62d-1b0bb2d13683" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","KAHOOLAWE","43bdd952-dc95-45a0-bf60-05a4c958ff0c" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","KAUAI","45fe9be8-818b-465e-ad75-b025ff447844" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","LANAI","456dc4c6-5750-449c-b2cf-61969bcf728c" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","MAUI","74ab7a7c-6ec5-4dd2-a1d4-0274dced3e3d" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","MOLOKAI","5eaf4989-04fa-4b01-8239-f325951832df" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","NIIHAU","6d9ffb4c-1dc6-4e69-98ce-2b87f00d6d98" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","OAHU","e554d02d-0532-4bcb-a8b8-ce869c25cd15" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","","2006ec69-34f2-4ece-8823-6dc49f892b02" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HOWLAND ISLAND","","626ee48e-c58c-4cbf-a15e-23bc0331857b" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","JARVIS ISLAND","","b3b5dbff-09a4-45f1-b1c2-847e3c8e6153" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","JOHNSTON ATOLL","","7ba7460f-32d8-4364-9608-eec6387133e9" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","KINGMAN REEF","","4ad44654-2b00-4544-a149-1f01056e57c0" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","KIRIBATI","","00fdc4bb-8f93-4170-bca1-e51315b46304" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","MIDWAY ATOLL","","075b5332-e4cc-4367-ab95-5b327b4712b4" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","PALMYRA ATOLL","","0086ca79-d40d-4119-97d0-f5911df75a37" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","UNITED STATES MINOR OUTLYING ISLANDS","","1e3fd59a-fed3-4c99-8e3f-28c16c0fcea1" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","WAKE ISLAND","","e142eefd-c5cb-48b4-8bdd-87a3ddc7ad8f" -"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","","","54340be8-8bd7-40be-a9d0-2e212bddd5d9" -"OCEAN","PACIFIC OCEAN","EASTERN PACIFIC OCEAN","GALAPAGOS ISLANDS","","2ed1cf61-0636-4a43-9acd-037c563a1a8b" -"OCEAN","PACIFIC OCEAN","EASTERN PACIFIC OCEAN","","","dca3c058-59cd-48b1-9f61-b30557e87e51" -"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","BERING SEA","","d85ae1ed-4b5f-440d-aaf0-7f9d605fec3b" -"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","GULF OF ALASKA","","9972bea3-3817-44e8-9c14-bcda7750d820" -"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","OKINAWA","","cf414436-730e-407c-9175-fa97c4f6429d" -"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","SEA OF JAPAN","","d52321c6-ccc4-4a4a-bf94-638e57aaed63" -"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","SEA OF OKHOTSK","","0a63a576-6ceb-43d7-a606-b7a924881000" -"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","","","5488b1cc-08b2-41cf-9bd2-4a2cdd0990de" -"OCEAN","PACIFIC OCEAN","NORTHWEST PACIFIC OCEAN","","","7d10a16f-ca01-4ea5-b842-24c889210ab5" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","BASS STRAIT","","e70f8cd6-04d3-4ccb-9d50-cfc1603fc71a" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","NEW CALEDONIA","d1040157-9bcb-4013-b01c-66325a9ac227" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","PAPUA NEW GUINEA","f0757092-c0bf-4937-83bc-6011c682bae9" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","SOLOMON ISLANDS","34ade06e-d992-45aa-8fd1-9eabd2d417fc" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","VANUATU","dc107028-a895-4ec0-8570-dba4caf0468c" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","","33ceb9b7-d144-4e19-92b5-27861898bfd4" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","COOK ISLANDS","5aab4096-0a38-4c38-88f1-126001f3d037" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","FIJI","3c6073a8-432d-4cf9-9d48-1963cc5290ff" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","FRENCH POLYNESIA","9e683aa3-89a7-46fe-a4bb-d558719a9aa2" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","NIUE","79f4dd2f-07c5-4932-b507-f1db66b6240e" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","NORFOLK ISLAND","3fef61fe-15e9-4cd7-a43c-18d28c26706e" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","PITCAIRN ISLANDS","3c4bed7f-1e6b-435f-878f-70da1601f29b" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","PITCAIRN ISLAND","060156ad-6f16-4a9f-9515-e59a5aba05b4" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","SAMOA","55fcc7db-f0c6-4504-a686-b0318873efa2" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","TOKELAU","b0b29e5e-6028-49c5-bdc1-c288a7aa83ac" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","TONGA","dd3f51a1-9fe0-47ce-bdd5-772df3e450d5" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","TUVALU","09f61b6a-c4ef-46d1-be0d-16b396f84a16" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","WALLIS AND FUTUNA ISLANDS","37c58b9a-dbba-4941-bcc9-99b2ef10c43c" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","","e5a8c108-e85c-4aa1-8b59-1da5817287ee" -"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","","","fa0ec8a7-ebed-4f2d-834b-1fa6a1c2e0ed" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","EAST CHINA SEA","","6d61eeb2-a5a6-4364-b974-e5b4d317327f" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","CENTRAL PACIFIC KWAJ","2dda5d3d-a8f2-4e29-b300-f7383f8ae02d" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","GUAM","da0e4453-5f69-4656-a7f1-a68da6640dc8" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","MARSHALL ISLANDS","589b1245-f1f8-4a63-882f-0e2e72625df0" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","NAURU","b76e19a0-73aa-484a-9723-c7940191ec61" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","NORTHERN MARIANA ISLANDS","39fefc6a-a548-4a7f-96a8-434dae6d56ed" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","PALAU","ecac51c2-4def-4dac-b965-a5103402395b" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","","12f8b383-3220-464f-baf3-2ec810247e44" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","PHILIPPINES","","9f78dabd-0540-4724-b093-8c0fc05afd3f" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","SOUTH CHINA AND EASTERN ARCHIPELAGIC SEAS","","8537ebe8-8768-4463-ad22-8bbe508f43bf" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","SOUTH CHINA SEA","SPRATLY ISLANDS","ad78262c-aa77-41ff-ab1c-507988be9827" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","SOUTH CHINA SEA","","89eb3337-707f-496d-9850-a6312ca42ecf" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","YELLOW SEA","","d3e1cc23-39d3-42af-ab7e-c4f7a59858b7" -"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","","","922a749a-d663-495f-bd26-31e6cfb89c57" -"OCEAN","PACIFIC OCEAN","","","","a19e4450-64c4-4687-9080-cebded8a90eb" -"OCEAN","SOUTHERN OCEAN","BELLINGSHAUSEN SEA","","","17585ec9-4a92-4f37-96b4-034c9e7afa75" -"OCEAN","SOUTHERN OCEAN","DRAKE PASSAGE","","","dd540b86-0422-496c-9c6b-5800192d7f8e" -"OCEAN","SOUTHERN OCEAN","EAST ANTARCTIC CONTINENTAL SHELF","","","c09d2746-b111-4a47-86a6-3a5932b5ceb6" -"OCEAN","SOUTHERN OCEAN","HEARD AND MCDONALD ISLANDS","","","855fdce6-877e-433e-bae5-a6df132a4c8a" -"OCEAN","SOUTHERN OCEAN","MACQUARIE ISLAND","","","76b3388a-990c-4a46-b35a-748552b671d7" -"OCEAN","SOUTHERN OCEAN","ROSS SEA","","","d6cde6e4-f89b-4cde-8bdf-245a4c67c1ff" -"OCEAN","SOUTHERN OCEAN","SOUTH SHETLAND ISLANDS","","","fb580be4-2d1c-4226-b8bb-53c3ac03c634" -"OCEAN","SOUTHERN OCEAN","WEDDELL SEA","NORTHEAST WEDDELL SEA","","360d0f6d-35f8-477d-9999-17ed80fd1899" -"OCEAN","SOUTHERN OCEAN","WEDDELL SEA","","","8a101ca4-ba38-4e32-a14c-59501e4927d0" -"OCEAN","SOUTHERN OCEAN","","","","b791f381-1c1c-4958-bc7d-b72a15da1174" -"OCEAN","","","","","ff03e9fc-9882-4a5e-ad0b-830d8f1186cb" -"SOLID EARTH","CORE","","","","05af56f1-42b1-4205-8b85-0f3470f30011" -"SOLID EARTH","CRUST","","","","87a9b0a4-c94d-4ccd-a28a-89e2853dcbde" -"SOLID EARTH","MANTLE","","","","2da8b88a-1a2e-4635-9ba9-dd5f9c5aad99" -"SOLID EARTH","","","","","cd8541b7-973c-4365-bed3-c4ec0ffd9953" -"SPACE","EARTH MAGNETIC FIELD","BOW SHOCK","","","cae6eb69-7ef9-451c-a77e-4c32a9665ee2" -"SPACE","EARTH MAGNETIC FIELD","CUSP","","","35f9f5d9-c2fd-420e-a08d-34938fd22d6c" -"SPACE","EARTH MAGNETIC FIELD","HIGH LATITUDE MAGNETOSPHERE","","","77a3d69b-2fe6-48a0-9d85-bae062a4e2ff" -"SPACE","EARTH MAGNETIC FIELD","INNER MAGNETOSPHERE","","","1d44a144-2344-4a82-931b-6604bbbe14bc" -"SPACE","EARTH MAGNETIC FIELD","MAGNETOPAUSE","","","971933a3-b116-4fdc-91c6-3067eaeedc8c" -"SPACE","EARTH MAGNETIC FIELD","MAGNETOSPHERE (OTHER)","","","748c0239-be0b-42ef-8d82-587c09afdb1d" -"SPACE","EARTH MAGNETIC FIELD","MAGNETOTAIL","","","8cb93d1a-8405-4722-92dd-434ebc850088" -"SPACE","EARTH MAGNETIC FIELD","NEUTRAL SHEET","","","848254ad-c92c-44fd-8c01-a4755fef4673" -"SPACE","EARTH MAGNETIC FIELD","SPACE","","","6f2c3b1f-acae-4af0-a759-f0d57ccfc83f" -"SPACE","EARTH MAGNETIC FIELD","VAN ALLEN RADIATION BELTS","","","50e1aaa9-fea0-4322-8ba1-cf39efce9daa" -"SPACE","EARTH MAGNETIC FIELD","","","","8000a80c-9f8d-4406-80bc-3a4a75117df9" -"SPACE","SOLAR REGION","CHROMOSPHERE","","","af585cc5-aab9-49cc-b05d-afe4ca4de878" -"SPACE","SOLAR REGION","CORONA","","","f20c126e-476c-45de-af7e-5800f2237569" -"SPACE","SOLAR REGION","PHOTOSPHERE","","","260436f2-f80a-4e2a-9a8a-1c8780e33d13" -"SPACE","SOLAR REGION","SOLAR CORE","","","52cf52d6-c2d9-4dd5-88a6-580621eebfd4" -"SPACE","SOLAR REGION","SOLAR INTERIOR","","","2a363f95-3822-468e-98b5-2c92f7c05e00" -"SPACE","SOLAR REGION","","","","6fa811fb-3666-4970-9208-ca8a21d57138" -"SPACE","","","","","3ffa2d97-a066-4b3c-87f9-06779f12e726" -"VERTICAL LOCATION","BOUNDARY LAYER","","","","928f6ffd-4b96-43c5-91e9-9c655258ad44" -"VERTICAL LOCATION","IONOSPHERE","","","","a260baca-735f-4085-a0bc-212ac44aef3e" -"VERTICAL LOCATION","LAND SURFACE","","","","90761f8d-6abe-499c-b711-acec394daa59" -"VERTICAL LOCATION","MESOSPHERE","","","","8eb2ab2b-f923-47ca-9a13-f966cf11d802" -"VERTICAL LOCATION","SEA FLOOR","","","","096fd984-efe4-45db-9827-5ef972fedd5d" -"VERTICAL LOCATION","SEA SURFACE","","","","5810d615-a3fc-4f79-947a-bae456b728c2" -"VERTICAL LOCATION","STRATOSPHERE","","","","106a3756-af68-4ea1-8eae-a6f5e5a2265f" -"VERTICAL LOCATION","THERMOSPHERE","","","","0dc6a186-8da6-4a88-bb6b-3cc3343d2599" -"VERTICAL LOCATION","TROPOSPHERE","","","","1d6baa6e-5a29-4d4e-add7-a2b1ddfff712" -"VERTICAL LOCATION","","","","","f1d9391a-071b-4264-a409-de3739e516d0" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","ADRIATIC SEA","","5c439818-3a80-4c6d-9d2c-74ea1f1a294a" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","CEUTA","","a1c03e9b-1eae-4ea5-be30-3b2cd217216c" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","CORSICA","","09d995de-2158-43f7-b113-9babb9a1593e" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","CYPRUS","","feff6e5e-27be-4404-af9c-c80b56d48ad4" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","DHEKELIA","","63ddceba-4924-4c03-814f-ae7a90ddde62" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","MALTA","","6d54689d-b634-4d5e-b2f9-752c3648bdcf" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","MARMARA SEA","","c6679f10-7580-469c-99e8-d6f1e54b5245" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","SARDINIA","","26ce44ec-4a5d-413f-ae6e-2064a374c8f1" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","SICILY","","5ff76570-66c1-4095-af0b-f688fd8b026d" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","MEDITERRANEAN SEA","","","c322d007-8d19-451b-ba46-daa216782248" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORTH SEA","LAESO","","d68d3910-3eeb-4c18-b95c-561a30f38550" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORTH SEA","","","4401ec0e-0d64-41d3-b4bd-2ff797865e83" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORWEGIAN SEA","FAEROE ISLANDS","","539e03d8-2a5c-4786-8ed5-ff27cf595e36" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","NORWEGIAN SEA","","","91dd3935-a1ae-48ca-b263-9b10ac732372" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","ROCKALL TROUGH","","","6b36316f-992a-487e-987e-fa0de4a10603" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","SABLE ISLAND","","","4e5212a7-40a1-4866-8e58-2ca71cc26054" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","ST PIERRE AND MIQUELON","","","f2f14e18-261a-426f-96bc-2922264637b2" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","SVALBARD AND JAN MAYEN","","","706ae2c4-750c-4a96-a7af-5133c357ae5c" +"OCEAN","ATLANTIC OCEAN","NORTH ATLANTIC OCEAN","","","","a4202721-0cba-4fa1-853f-890f146b04f9" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","ARGENTINE ISLANDS","","","b3f09053-bb27-4d49-a2fa-893547f5e14b" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","ASCENSION ISLAND","","","14e52f21-8d11-484b-8c88-ca36ce712561" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","BOUVET ISLAND","","","1eaf9a26-59b9-49fc-8f9f-1a72891edfe1" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","CAPE BASIN","","","5177650d-a0e7-4466-a568-66ac2bdb8827" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","FALKLAND ISLANDS","","","5c637509-8e68-4511-9b85-8bbee1107a7a" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","GOUDIER ISLAND","","","f8a52f41-6584-457e-9162-7dde82c00d79" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","GOUGH ISLAND","","","3629338b-cfef-4119-ae3c-b9c800776275" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SAO TOME AND PRINCIPE","","","3a607d6a-1d8e-4bd2-8ce3-6d4a6ab21ad3" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SOUTH GEORGIA ISLAND","","","a5d18d41-4e95-4442-93ee-6de73403d71f" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SOUTH ORKNEY ISLANDS","","","798a293e-c19b-4103-93eb-c7eb5b27c214" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","SOUTH SANDWICH ISLANDS","","","baa8382b-6ee9-4a9d-9937-bf0e6b062ac7" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","ST HELENA","","","597b10dd-8822-46a7-922d-7d9a99abd8c1" +"OCEAN","ATLANTIC OCEAN","SOUTH ATLANTIC OCEAN","","","","9ce6b6ba-8f9f-4585-9438-05619d768578" +"OCEAN","ATLANTIC OCEAN","","","","","cf249a36-2e82-4d32-84cd-23a4f40bb393" +"OCEAN","INDIAN OCEAN","AMSTERDAM AND ST. PAUL ISLANDS","POINTE BENEDICTE","","","e58dcd83-8521-4d5a-b528-9cf60a50274d" +"OCEAN","INDIAN OCEAN","AMSTERDAM AND ST. PAUL ISLANDS","","","","a6f58ff3-7fd8-47a2-b007-6e23c104d272" +"OCEAN","INDIAN OCEAN","ANDAMAN ISLANDS","","","","0b7d96be-3d27-40b8-9876-61b2d7c2bd58" +"OCEAN","INDIAN OCEAN","ARABIAN SEA","PERSIAN GULF","","","9e75b714-9315-42e8-85c7-dbe502659e98" +"OCEAN","INDIAN OCEAN","ARABIAN SEA","","","","a186eed4-d1b4-4d11-b218-b61708a9124c" +"OCEAN","INDIAN OCEAN","BAY OF BENGAL","","","","66dc90fd-304a-4379-a9e1-18cf184cc6da" +"OCEAN","INDIAN OCEAN","BRITISH INDIAN OCEAN TERRITORY","","","","4d9cb925-670c-43e6-af0f-40372df8b206" +"OCEAN","INDIAN OCEAN","BRUNEI","","","","160b4977-218b-4d49-b1f1-0193f8ac2091" +"OCEAN","INDIAN OCEAN","CHRISTMAS ISLAND","","","","8e82af62-b3b1-4fc6-95b0-adb9433aa23f" +"OCEAN","INDIAN OCEAN","COCOS ISLANDS","","","","5bc49524-33cd-48b8-9c23-d648e8ecbad5" +"OCEAN","INDIAN OCEAN","COMOROS","","","","e0137b35-e179-4601-8ff5-9292fafe5959" +"OCEAN","INDIAN OCEAN","CROZET ISLANDS","ILE DE LA POSSESSION, BASE ALFRED FAURE","","","336b41d3-5597-46ee-9d26-8d992399da93" +"OCEAN","INDIAN OCEAN","CROZET ISLANDS","POSSESSION ISLAND","","","12c922d0-63e7-453e-aef6-d8c4d21d93c0" +"OCEAN","INDIAN OCEAN","CROZET ISLANDS","","","","57307aeb-06c4-443c-bdc3-e554d6414aa6" +"OCEAN","INDIAN OCEAN","FRENCH SOUTHERN TERRITORIES","","","","d582a87a-8969-45bf-947a-2864d2d0fcd7" +"OCEAN","INDIAN OCEAN","INDONESIA","SUMATRA","","","8b9f777c-3037-4fcf-9d7f-a2bcb809d2be" +"OCEAN","INDIAN OCEAN","INDONESIA","","","","84aeedd2-6093-4252-9895-8dc063a9ad97" +"OCEAN","INDIAN OCEAN","KERGUELEN ISLANDS","PORT-AUX-FRANCAIS","","","4095946b-4a9b-40f5-a0ee-fcfbae12b64e" +"OCEAN","INDIAN OCEAN","KERGUELEN ISLANDS","","","","0958cd41-f5bf-444e-9e91-c8d9307effe7" +"OCEAN","INDIAN OCEAN","MADAGASCAR","","","","d9f82c3c-0edf-445e-b838-eebc2278d4c1" +"OCEAN","INDIAN OCEAN","MALAYSIA","","","","5f9a0900-8379-456b-bd5e-d6235a022bfa" +"OCEAN","INDIAN OCEAN","MALDIVES","","","","eabe42d5-1826-4d7c-9988-4a6397873061" +"OCEAN","INDIAN OCEAN","MAURITIUS","","","","5477242e-79ee-4139-bb1f-ab3ace1eb864" +"OCEAN","INDIAN OCEAN","MAYOTTE","","","","ea8a08f7-9b41-4541-8078-e9c9dd41d7f3" +"OCEAN","INDIAN OCEAN","NICOBAR ISLANDS","","","","a09d128e-c786-48cc-b569-c1a6bbb1f772" +"OCEAN","INDIAN OCEAN","RED SEA","","","","d7808080-aea5-48f3-b0da-78141ef6324e" +"OCEAN","INDIAN OCEAN","REUNION","","","","16cc58c4-fd7b-40b7-8f33-30d26674fd8b" +"OCEAN","INDIAN OCEAN","SEYCHELLES","","","","dc173a40-c1a0-4fd0-b059-2db52ca65639" +"OCEAN","INDIAN OCEAN","SINGAPORE","","","","6364bdbb-cdec-4059-a2b5-6b873c09fc7d" +"OCEAN","INDIAN OCEAN","SRI LANKA","","","","149fef08-334f-4eb4-a4b6-12ebe8eb9570" +"OCEAN","INDIAN OCEAN","TIMOR-LESTE","","","","f58fbdce-3ee6-4dc1-b9ca-27953d89955f" +"OCEAN","INDIAN OCEAN","ZANZIBAR","","","","02fb6908-e5bd-4dd0-a627-2f6e13b4281f" +"OCEAN","INDIAN OCEAN","","","","","4b75a3a2-9811-43b9-8f8c-64d0ae4d9ca8" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","AMERICAN SAMOA","","","d4db292f-3097-4843-a6c5-291cf993bea9" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","BAKER ISLAND","","","1cefbe03-03dd-4dd2-abed-0eac80bf00cf" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","HAWAII ISLAND","","91e466e3-2a02-4ce2-a62d-1b0bb2d13683" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","KAHOOLAWE","","43bdd952-dc95-45a0-bf60-05a4c958ff0c" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","KAUAI","","45fe9be8-818b-465e-ad75-b025ff447844" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","LANAI","","456dc4c6-5750-449c-b2cf-61969bcf728c" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","MAUI","","74ab7a7c-6ec5-4dd2-a1d4-0274dced3e3d" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","MOLOKAI","","5eaf4989-04fa-4b01-8239-f325951832df" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","NIIHAU","","6d9ffb4c-1dc6-4e69-98ce-2b87f00d6d98" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","OAHU","","e554d02d-0532-4bcb-a8b8-ce869c25cd15" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HAWAIIAN ISLANDS","","","2006ec69-34f2-4ece-8823-6dc49f892b02" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","HOWLAND ISLAND","","","626ee48e-c58c-4cbf-a15e-23bc0331857b" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","JARVIS ISLAND","","","b3b5dbff-09a4-45f1-b1c2-847e3c8e6153" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","JOHNSTON ATOLL","","","7ba7460f-32d8-4364-9608-eec6387133e9" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","KINGMAN REEF","","","4ad44654-2b00-4544-a149-1f01056e57c0" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","KIRIBATI","","","00fdc4bb-8f93-4170-bca1-e51315b46304" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","MIDWAY ATOLL","","","075b5332-e4cc-4367-ab95-5b327b4712b4" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","PALMYRA ATOLL","","","0086ca79-d40d-4119-97d0-f5911df75a37" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","UNITED STATES MINOR OUTLYING ISLANDS","","","1e3fd59a-fed3-4c99-8e3f-28c16c0fcea1" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","WAKE ISLAND","","","e142eefd-c5cb-48b4-8bdd-87a3ddc7ad8f" +"OCEAN","PACIFIC OCEAN","CENTRAL PACIFIC OCEAN","","","","54340be8-8bd7-40be-a9d0-2e212bddd5d9" +"OCEAN","PACIFIC OCEAN","EASTERN PACIFIC OCEAN","GALAPAGOS ISLANDS","","","2ed1cf61-0636-4a43-9acd-037c563a1a8b" +"OCEAN","PACIFIC OCEAN","EASTERN PACIFIC OCEAN","","","","dca3c058-59cd-48b1-9f61-b30557e87e51" +"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","BERING SEA","","","d85ae1ed-4b5f-440d-aaf0-7f9d605fec3b" +"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","GULF OF ALASKA","","","9972bea3-3817-44e8-9c14-bcda7750d820" +"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","OKINAWA","","","cf414436-730e-407c-9175-fa97c4f6429d" +"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","SEA OF JAPAN","","","d52321c6-ccc4-4a4a-bf94-638e57aaed63" +"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","SEA OF OKHOTSK","","","0a63a576-6ceb-43d7-a606-b7a924881000" +"OCEAN","PACIFIC OCEAN","NORTH PACIFIC OCEAN","","","","5488b1cc-08b2-41cf-9bd2-4a2cdd0990de" +"OCEAN","PACIFIC OCEAN","NORTHWEST PACIFIC OCEAN","","","","7d10a16f-ca01-4ea5-b842-24c889210ab5" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","BASS STRAIT","","","e70f8cd6-04d3-4ccb-9d50-cfc1603fc71a" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","NEW CALEDONIA","","d1040157-9bcb-4013-b01c-66325a9ac227" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","PAPUA NEW GUINEA","","f0757092-c0bf-4937-83bc-6011c682bae9" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","SOLOMON ISLANDS","","34ade06e-d992-45aa-8fd1-9eabd2d417fc" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","VANUATU","","dc107028-a895-4ec0-8570-dba4caf0468c" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","MELANESIA","","","33ceb9b7-d144-4e19-92b5-27861898bfd4" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","COOK ISLANDS","","5aab4096-0a38-4c38-88f1-126001f3d037" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","FIJI","","3c6073a8-432d-4cf9-9d48-1963cc5290ff" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","FRENCH POLYNESIA","","9e683aa3-89a7-46fe-a4bb-d558719a9aa2" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","NIUE","","79f4dd2f-07c5-4932-b507-f1db66b6240e" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","NORFOLK ISLAND","","3fef61fe-15e9-4cd7-a43c-18d28c26706e" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","PITCAIRN ISLANDS","","3c4bed7f-1e6b-435f-878f-70da1601f29b" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","PITCAIRN ISLAND","","060156ad-6f16-4a9f-9515-e59a5aba05b4" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","SAMOA","","55fcc7db-f0c6-4504-a686-b0318873efa2" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","TOKELAU","","b0b29e5e-6028-49c5-bdc1-c288a7aa83ac" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","TONGA","","dd3f51a1-9fe0-47ce-bdd5-772df3e450d5" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","TUVALU","","09f61b6a-c4ef-46d1-be0d-16b396f84a16" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","WALLIS AND FUTUNA ISLANDS","","37c58b9a-dbba-4941-bcc9-99b2ef10c43c" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","POLYNESIA","","","e5a8c108-e85c-4aa1-8b59-1da5817287ee" +"OCEAN","PACIFIC OCEAN","SOUTH PACIFIC OCEAN","","","","fa0ec8a7-ebed-4f2d-834b-1fa6a1c2e0ed" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","EAST CHINA SEA","","","6d61eeb2-a5a6-4364-b974-e5b4d317327f" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","CENTRAL PACIFIC KWAJ","","2dda5d3d-a8f2-4e29-b300-f7383f8ae02d" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","GUAM","","da0e4453-5f69-4656-a7f1-a68da6640dc8" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","MARSHALL ISLANDS","","589b1245-f1f8-4a63-882f-0e2e72625df0" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","NAURU","","b76e19a0-73aa-484a-9723-c7940191ec61" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","NORTHERN MARIANA ISLANDS","","39fefc6a-a548-4a7f-96a8-434dae6d56ed" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","PALAU","","ecac51c2-4def-4dac-b965-a5103402395b" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","MICRONESIA","","","12f8b383-3220-464f-baf3-2ec810247e44" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","PHILIPPINES","","","9f78dabd-0540-4724-b093-8c0fc05afd3f" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","SOUTH CHINA AND EASTERN ARCHIPELAGIC SEAS","","","8537ebe8-8768-4463-ad22-8bbe508f43bf" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","SOUTH CHINA SEA","SPRATLY ISLANDS","","ad78262c-aa77-41ff-ab1c-507988be9827" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","SOUTH CHINA SEA","","","89eb3337-707f-496d-9850-a6312ca42ecf" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","YELLOW SEA","","","d3e1cc23-39d3-42af-ab7e-c4f7a59858b7" +"OCEAN","PACIFIC OCEAN","WESTERN PACIFIC OCEAN","","","","922a749a-d663-495f-bd26-31e6cfb89c57" +"OCEAN","PACIFIC OCEAN","","","","","a19e4450-64c4-4687-9080-cebded8a90eb" +"OCEAN","SOUTHERN OCEAN","BELLINGSHAUSEN SEA","","","","17585ec9-4a92-4f37-96b4-034c9e7afa75" +"OCEAN","SOUTHERN OCEAN","DRAKE PASSAGE","","","","dd540b86-0422-496c-9c6b-5800192d7f8e" +"OCEAN","SOUTHERN OCEAN","EAST ANTARCTIC CONTINENTAL SHELF","","","","c09d2746-b111-4a47-86a6-3a5932b5ceb6" +"OCEAN","SOUTHERN OCEAN","HEARD AND MCDONALD ISLANDS","","","","855fdce6-877e-433e-bae5-a6df132a4c8a" +"OCEAN","SOUTHERN OCEAN","MACQUARIE ISLAND","","","","76b3388a-990c-4a46-b35a-748552b671d7" +"OCEAN","SOUTHERN OCEAN","ROSS SEA","","","","d6cde6e4-f89b-4cde-8bdf-245a4c67c1ff" +"OCEAN","SOUTHERN OCEAN","SOUTH SHETLAND ISLANDS","","","","fb580be4-2d1c-4226-b8bb-53c3ac03c634" +"OCEAN","SOUTHERN OCEAN","WEDDELL SEA","NORTHEAST WEDDELL SEA","","","360d0f6d-35f8-477d-9999-17ed80fd1899" +"OCEAN","SOUTHERN OCEAN","WEDDELL SEA","","","","8a101ca4-ba38-4e32-a14c-59501e4927d0" +"OCEAN","SOUTHERN OCEAN","","","","","b791f381-1c1c-4958-bc7d-b72a15da1174" +"OCEAN","","","","","","ff03e9fc-9882-4a5e-ad0b-830d8f1186cb" +"SOLID EARTH","CORE","","","","","05af56f1-42b1-4205-8b85-0f3470f30011" +"SOLID EARTH","CRUST","","","","","87a9b0a4-c94d-4ccd-a28a-89e2853dcbde" +"SOLID EARTH","MANTLE","","","","","2da8b88a-1a2e-4635-9ba9-dd5f9c5aad99" +"SOLID EARTH","","","","","","cd8541b7-973c-4365-bed3-c4ec0ffd9953" +"SPACE","EARTH MAGNETIC FIELD","BOW SHOCK","","","","cae6eb69-7ef9-451c-a77e-4c32a9665ee2" +"SPACE","EARTH MAGNETIC FIELD","CUSP","","","","35f9f5d9-c2fd-420e-a08d-34938fd22d6c" +"SPACE","EARTH MAGNETIC FIELD","HIGH LATITUDE MAGNETOSPHERE","","","","77a3d69b-2fe6-48a0-9d85-bae062a4e2ff" +"SPACE","EARTH MAGNETIC FIELD","INNER MAGNETOSPHERE","","","","1d44a144-2344-4a82-931b-6604bbbe14bc" +"SPACE","EARTH MAGNETIC FIELD","MAGNETOPAUSE","","","","971933a3-b116-4fdc-91c6-3067eaeedc8c" +"SPACE","EARTH MAGNETIC FIELD","MAGNETOSPHERE (OTHER)","","","","748c0239-be0b-42ef-8d82-587c09afdb1d" +"SPACE","EARTH MAGNETIC FIELD","MAGNETOTAIL","","","","8cb93d1a-8405-4722-92dd-434ebc850088" +"SPACE","EARTH MAGNETIC FIELD","NEUTRAL SHEET","","","","848254ad-c92c-44fd-8c01-a4755fef4673" +"SPACE","EARTH MAGNETIC FIELD","SPACE","","","","6f2c3b1f-acae-4af0-a759-f0d57ccfc83f" +"SPACE","EARTH MAGNETIC FIELD","VAN ALLEN RADIATION BELTS","","","","50e1aaa9-fea0-4322-8ba1-cf39efce9daa" +"SPACE","EARTH MAGNETIC FIELD","","","","","8000a80c-9f8d-4406-80bc-3a4a75117df9" +"SPACE","SOLAR REGION","CHROMOSPHERE","","","","af585cc5-aab9-49cc-b05d-afe4ca4de878" +"SPACE","SOLAR REGION","CORONA","","","","f20c126e-476c-45de-af7e-5800f2237569" +"SPACE","SOLAR REGION","PHOTOSPHERE","","","","260436f2-f80a-4e2a-9a8a-1c8780e33d13" +"SPACE","SOLAR REGION","SOLAR CORE","","","","52cf52d6-c2d9-4dd5-88a6-580621eebfd4" +"SPACE","SOLAR REGION","SOLAR INTERIOR","","","","2a363f95-3822-468e-98b5-2c92f7c05e00" +"SPACE","SOLAR REGION","","","","","6fa811fb-3666-4970-9208-ca8a21d57138" +"SPACE","","","","","","3ffa2d97-a066-4b3c-87f9-06779f12e726" +"VERTICAL LOCATION","BOUNDARY LAYER","","","","","928f6ffd-4b96-43c5-91e9-9c655258ad44" +"VERTICAL LOCATION","IONOSPHERE","","","","","a260baca-735f-4085-a0bc-212ac44aef3e" +"VERTICAL LOCATION","LAND SURFACE","","","","","90761f8d-6abe-499c-b711-acec394daa59" +"VERTICAL LOCATION","MESOSPHERE","","","","","8eb2ab2b-f923-47ca-9a13-f966cf11d802" +"VERTICAL LOCATION","SEA FLOOR","","","","","096fd984-efe4-45db-9827-5ef972fedd5d" +"VERTICAL LOCATION","SEA SURFACE","","","","","5810d615-a3fc-4f79-947a-bae456b728c2" +"VERTICAL LOCATION","STRATOSPHERE","","","","","106a3756-af68-4ea1-8eae-a6f5e5a2265f" +"VERTICAL LOCATION","THERMOSPHERE","","","","","0dc6a186-8da6-4a88-bb6b-3cc3343d2599" +"VERTICAL LOCATION","TROPOSPHERE","","","","","1d6baa6e-5a29-4d4e-add7-a2b1ddfff712" +"VERTICAL LOCATION","","","","","","f1d9391a-071b-4264-a409-de3739e516d0" diff --git a/pyQuARC/schemas/platforms.csv b/pyQuARC/schemas/platforms.csv index 572fb6f4..3bb8a245 100644 --- a/pyQuARC/schemas/platforms.csv +++ b/pyQuARC/schemas/platforms.csv @@ -1,4 +1,4 @@ -"Keyword Version: 13.2","Revision: 2022-03-24 08:48:24","Timestamp: 2022-03-28 11:15:45","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/platforms/?format=xml","Case native" +"Keyword Version: 13.8","Revision: 2022-06-23 17:17:46","Timestamp: 2022-06-28 09:11:08","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/platforms/?format=xml","Case native" Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Air-based Platforms","Balloons","","BALLOONS","","a1586112-38f5-461c-9e88-0a95cf62062c" "Air-based Platforms","Balloons","","EOLE","","95707b1d-4451-4958-af57-0fdf70444cac" @@ -10,6 +10,7 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Air-based Platforms","Dropwindsondes","","Dropsondes","","fea5b6b5-7b78-4a4e-b722-e0b5a89e2632" "Air-based Platforms","Dropwindsondes","","","","2f8b489b-a1d3-43ff-baf4-935ceac2c4d4" "Air-based Platforms","Jet","","A340-600","Airbus A340-600","bab77f95-aa34-42aa-9a12-922d1c9fae63" +"Air-based Platforms","Jet","","Airplane","Airplane","8b7834c1-2c66-414e-a655-2298e7dcc479" "Air-based Platforms","Jet","","Alpha","H211 Alpha Jet","4595fee4-25d7-41f3-abe0-73203138c243" "Air-based Platforms","Jet","","CESSNA CITATION II","","80b0db4e-1a31-4b54-b61f-f4bd9f17d96a" "Air-based Platforms","Jet","","CONVAIR-990","CONVAIR-990 CORONADO","fc0c7954-fdd2-4a16-905e-d3688dfc9be1" @@ -25,6 +26,7 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Air-based Platforms","Jet","","HU-25A","Dassault HU-25A Guardian","d77685bd-aa94-4717-bd97-632699d999b5" "Air-based Platforms","Jet","","HU-25C","Dassault HU-25C Guardian","47b6caf1-e14c-458c-84a1-ec64cf29b534" "Air-based Platforms","Jet","","J-31","J-31 aircraft","293eba8a-cae4-4505-9c59-d1e223990ea4" +"Air-based Platforms","Jet","","LEARJET","","5c7ba790-030e-4cd6-99e8-9fe9809c5052" "Air-based Platforms","Jet","","NASA DC-8","NASA Douglas DC-8","a930c78a-6ed3-4a49-ad2d-bd2c5c36d291" "Air-based Platforms","Jet","","NASA ER-2","NASA Earth Resources-2","b16010e6-c7ea-4c98-929e-3f844ca2f2c2" "Air-based Platforms","Jet","","NASA S-3B VIKING","","7f1568aa-e87e-4b83-a622-e8f8a03f75bd" @@ -59,7 +61,6 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Air-based Platforms","Propeller","","HC-130","HC-130","8e7d2140-fbbb-4169-ba3e-e6d1fe6c7cf8" "Air-based Platforms","Propeller","","King Air","Beechcraft King Air","f959e3c5-f014-40b7-a134-4d41b616f79d" "Air-based Platforms","Propeller","","LA-27","Lake Seawolf LA-27","c88b260b-2acd-417e-9c82-3a8226b4e218" -"Air-based Platforms","Propeller","","LEARJET","","5c7ba790-030e-4cd6-99e8-9fe9809c5052" "Air-based Platforms","Propeller","","NASA ELECTRA","","b1a1eda8-55a5-43a0-a984-239ab657be68" "Air-based Platforms","Propeller","","NASA P-3","","45abac35-586f-4fed-ac38-5dcd59af2cc5" "Air-based Platforms","Propeller","","NCAR ELECTRA","NCAR ELECTRA","fdb96a23-16f4-4df4-a60b-a4d1123587ce" @@ -182,6 +183,11 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Other","Charts","","","","018e1ad9-a5ad-4fae-a712-ba376144fcc3" "Other","Maps","","MAPS","MAPS","8d56ab86-f13a-423b-b209-eca2baeb73ee" "Other","Maps","","","","d53da93a-cc40-457a-a708-6bd4eeb1ffc1" +"Other","Models","GEOS","GEOS-4","Goddard EOS Data Assimilation System-4","b42aa64a-6b63-4fd0-b953-4abf7558008c" +"Other","Models","GEOS","GEOS-5","Goddard EOS Data Assimilation System-5","42ad1501-744a-439c-a394-258db03d0304" +"Other","Models","GEOS","GEOS-Chem","Global 3-D chemical transport model (CTM) for atmospheric composition driven by meteorological input from the Goddard > Earth Observing System (GEOS) of the NASA Global Modeling and Assimilation Office","4773815f-2a76-425e-86cc-0bfd4c3b75c2" +"Other","Models","GEOS","GEOS","Goddard Earth Observing System","a3ca2fcc-658a-4249-b9b7-40a8bb5e03a9" +"Other","Models","GEOS","","","b92ec1f1-157e-4778-8bb3-c60a929bd1de" "Other","Models","Merged Analysis","IMERG","Integrated Multi-satellitE Retrievals for GPM","ddbadcdd-36dd-4db8-98c6-c603bec96c76" "Other","Models","Merged Analysis","LANDMET","CCNY NOAA-CREST Land Surface Atmospheric Boundary Processing Method","e951dc1d-eeb5-4d67-ad77-e60ee469486c" "Other","Models","Merged Analysis","Merged IR","NCEP/CPC L3 Half Hourly 4km Global (60S - 60N) Merged IR","98088db1-3135-4bbf-9a9b-215ca47d721b" @@ -216,9 +222,6 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Other","Models","","Forcing-LSM","Forcing data for Land Surface Model","862e790e-d42f-433a-8561-107562aceb64" "Other","Models","","GCM","General Circulation Model","d1e2c5e2-076b-4949-8125-384712a33b58" "Other","Models","","GDAS","Global Data Assimilation System","b316bcaf-1ab8-4a67-91b7-76c28bb29e4e" -"Other","Models","","GEOS-4","Goddard EOS Data Assimilation System-4","b42aa64a-6b63-4fd0-b953-4abf7558008c" -"Other","Models","","GEOS-5","Goddard EOS Data Assimilation System-5","42ad1501-744a-439c-a394-258db03d0304" -"Other","Models","","GEOS-Chem","Global 3-D chemical transport model (CTM) for atmospheric composition driven by meteorological input from the Goddard > Earth Observing System (GEOS) of the NASA Global Modeling and Assimilation Office","4773815f-2a76-425e-86cc-0bfd4c3b75c2" "Other","Models","","GLPPM","Great Lake Primary Productivity Model","913391a8-e711-43f3-ade2-ef26fddeba24" "Other","Models","","GOCART","Goddard Chemistry Aerosol Radiation and Transport Model","bacbb5ad-9269-48ce-8da2-c22d73b9a5f2" "Other","Models","","L4_C","SMAP Level 4 Carbon Flux Model","08ccef97-4faf-4678-8404-03945170aa21" @@ -394,6 +397,8 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Space-based Platforms","Earth Observation Satellites","European Remote Sensing Satellite (ERS)","ERS-1","European Remote Sensing Satellite-1","02c85d04-228e-4bf3-bb03-d72c22681dff" "Space-based Platforms","Earth Observation Satellites","European Remote Sensing Satellite (ERS)","ERS-2","European Remote Sensing Satellite-2","affbd015-9373-4413-b76f-e91d01c4f5e3" "Space-based Platforms","Earth Observation Satellites","European Remote Sensing Satellite (ERS)","","","3b6b4870-ae80-4488-b9fb-f9152037ec59" +"Space-based Platforms","Earth Observation Satellites","FengYun-1","FY-1A","FengYun-1A","3ad82f6f-152d-4565-ada3-0f1a4ceacb6f" +"Space-based Platforms","Earth Observation Satellites","FengYun-1","","","edf02962-aafa-484f-84e5-2549f6db7552" "Space-based Platforms","Earth Observation Satellites","FengYun-2","FY-2D","FengYun-2D","3019aa61-89f6-4226-97b3-6c80ef65da10" "Space-based Platforms","Earth Observation Satellites","FengYun-2","FY-2E","FengYun-2E","d2b2dc9e-7a97-4e16-8562-1087a74fb9c9" "Space-based Platforms","Earth Observation Satellites","FengYun-2","","","e3344a00-36a4-49c2-b05e-5b540044b510" @@ -694,7 +699,6 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Space-based Platforms","Earth Observation Satellites","","FLEX","Fluorescence Explorer (FLEX)","acfdfa87-7490-47db-a1dd-94a3bfb6a16d" "Space-based Platforms","Earth Observation Satellites","","FORMOSAT-2","FORMOSAT-2","2a5acbda-7149-4bf7-8be2-9076f07e9b7f" "Space-based Platforms","Earth Observation Satellites","","FSSCat","","b369f647-96ad-4418-84d2-ee5fed065863" -"Space-based Platforms","Earth Observation Satellites","","FengYun-1","","edf02962-aafa-484f-84e5-2549f6db7552" "Space-based Platforms","Earth Observation Satellites","","GA-EMS OTB-2","General Atomics Electromagnetic Systems Orbital Test Bed 2","37f7b455-082f-4385-89d7-9292e9f9c750" "Space-based Platforms","Earth Observation Satellites","","GCOM-C","Global Change Observation Mission – Climate","18512c09-2590-4804-8b43-dd9caea53b5d" "Space-based Platforms","Earth Observation Satellites","","GCOM-W1","Global Change Observation Mission 1st-Water","8781da14-5ced-4d64-81cd-8daa10a1c30d" @@ -743,6 +747,7 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Space-based Platforms","Earth Observation Satellites","","PROBA-2","Project for On-Board Autonomy, PROBA-2","ce3e3563-34ff-4a39-8c81-c9856758e403" "Space-based Platforms","Earth Observation Satellites","","PROBA-3","Project for On-Board Autonomy, PROBA-3","96a26a3b-bd87-462e-b155-f57677bf4b83" "Space-based Platforms","Earth Observation Satellites","","PlanetScope","PlanetScope","6fffd5bf-1d22-487a-8b4c-495992ef3b28" +"Space-based Platforms","Earth Observation Satellites","","Pleiades Neo","Pleiades Neo","0df25660-c2e5-4186-952e-c1fc53ab8ea3" "Space-based Platforms","Earth Observation Satellites","","Proba-V","Project for On-Board Autonomy - Vegetation","6f507389-2c7c-41b4-a638-95bdc73b63a3" "Space-based Platforms","Earth Observation Satellites","","Project for On-Board Autonomy (PROBA)","","a9a057e8-bfee-464c-9c1f-1913c889caee" "Space-based Platforms","Earth Observation Satellites","","QUIKSCAT","QUIKSCAT","5ab01e26-7baf-4960-bd6e-cb64b47cbfed" @@ -774,9 +779,11 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Space-based Platforms","Earth Observation Satellites","","TRMM","Tropical Rainfall Measuring Mission","89c509e6-13f6-4d6e-b46c-0479d2c7d88d" "Space-based Platforms","Earth Observation Satellites","","TSINGHUA-1","","f9922bc7-cbad-4230-ad65-08c5998a8e0f" "Space-based Platforms","Earth Observation Satellites","","TSX","TerraSAR-X","a5c7a4c7-bbf4-42df-a754-20cb6b98317a" +"Space-based Platforms","Earth Observation Satellites","","TanSat","Chinese Carbon Dioxide Observation Satellite","3b26dec5-2cb1-48ce-9873-048c321fdebe" "Space-based Platforms","Earth Observation Satellites","","Terra","Earth Observing System, Terra (AM-1)","80eca755-c564-4616-b910-a4c4387b7c54" "Space-based Platforms","Earth Observation Satellites","","UARS","Upper Atmosphere Research Satellite","b6c5c7d5-ad6a-4cdd-82cc-9259377ff044" "Space-based Platforms","Earth Observation Satellites","","VANGUARD","","9db79338-5030-45c2-9bf7-c81bfcefb9e1" +"Space-based Platforms","Earth Observation Satellites","","Vision-1","SSTL S1-4","337848d8-f442-4bd5-9a6a-c8374baef38c" "Space-based Platforms","Earth Observation Satellites","","WESTPAC","Western Pacific Laser Satellite","3d031666-2116-4ebc-8daa-3e98ddcf4f60" "Space-based Platforms","Earth Observation Satellites","","ZEIA","","6365670e-6e12-437d-baa9-d1deecd87fba" "Space-based Platforms","Earth Observation Satellites","","Zhangheng 1","Zhangheng 1","52ae802c-b2fd-4548-aefd-ec4e4325b803" @@ -920,15 +927,15 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI-9","","a0925c59-450c-46be-8735-a0ead1bbf437" "Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","GEMINI","","1ef441a3-0fa2-4c1d-81d8-4312dcdde415" "Space-based Platforms","Space Stations/Crewed Spacecraft","Gemini","","","443bd29e-d615-498d-8580-300249cb7695" -"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","ATLAS","Atmospheric Laboratory for Applications and Science","f875bfd2-1712-4cd4-99dd-058aada97f91" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","ATLAS-1","Atmospheric Laboratory for Applications and Science-1","a5cdaa1d-0ca7-4b37-bb53-166f9f168430" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","ATLAS-2","Atmospheric Laboratory for Applications and Science-2","e4e2e121-378a-48f0-b160-0ebd48030b50" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","ATLAS-3","Atmospheric Laboratory for Applications and Science-3","982f77c0-4379-4263-a231-c8dec440e57d" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-099","Challenger Space Shuttle","af8374fb-1543-4eb2-a67e-5da2237505d3" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-102","Columbia Space Shuttle","5bfe76ac-90dc-4620-8da8-1178cf637b2d" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-103","Discovery Space Shuttle","f03dc3d3-f280-4ff4-b0e6-de800bb21ebb" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-104","Atlantis Space Shuttle","595c5eb0-2a7d-452b-8a62-d492375b78fa" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","OV-105","Endeavour Space Shuttle","15541ce2-b06c-4597-8eb1-745e1c72600b" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPACE SHUTTLES","","a771d41b-2298-47fd-9e5d-f99370540e98" -"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPACELAB-1","","320292c9-dd15-43db-bbe7-36a217efc535" -"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPACELAB-3","","70d24549-a5ef-47b1-8131-f5c48e7e93d4" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SPAS-II","Shuttle Pallet Satellite-II","73fef640-5d7a-4798-93d3-a97b712287a2" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SRL-1","Space Radar Laboratory-1","184a4b22-f26d-4358-8eb1-ab4262d4524e" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","SRL-2","Space Radar Laboratory-2","4e7df1af-daec-4ee1-9e83-9f013d573fc1" @@ -953,6 +960,8 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-7","Space Transport System STS-7","806b38f9-e3d7-4ac9-b403-7af2fdcc5381" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-99","Space Transport System STS-99","cc33ee94-f31e-4e4a-a659-f5c6fc244710" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","STS-9","Space Transport System STS-9","d03c64a2-2352-424f-8345-ee17fc859167" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","Spacelab-1","","320292c9-dd15-43db-bbe7-36a217efc535" +"Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","Spacelab-3","","70d24549-a5ef-47b1-8131-f5c48e7e93d4" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Shuttle","","","3ef93fbf-1e19-42a9-a91f-502d125dbb7c" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","CALET","CALorimetric Electron Telescope (CALET)","b86cb129-67f0-40e1-91c4-5b4755cd8477" "Space-based Platforms","Space Stations/Crewed Spacecraft","Space Station","ISS","International Space Station","93c5d18c-be62-46c4-9545-42f73a854d85" @@ -972,6 +981,7 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Water-based Platforms","Buoys","Moored","TAO","TROPICAL ATMOSPHERE OCEAN","c9cb3b35-570d-4aa4-a8e1-2a21aacc67c4" "Water-based Platforms","Buoys","Moored","TRITON","TRIangle Trans-Ocean Buoy Network","22946f69-ea37-451d-afe5-409b42dcd983" "Water-based Platforms","Buoys","Moored","","","15a80a3c-a97b-4872-896c-b7e6292663b8" +"Water-based Platforms","Buoys","Unmoored","Argo-Float","","664e984c-b02d-4516-95b5-2afe0b56d7f7" "Water-based Platforms","Buoys","Unmoored","MOUSS","MOdular Underwater Sampling System","e8299623-dad3-4773-b14a-39482873322f" "Water-based Platforms","Buoys","Unmoored","PALACE FLOAT","Profiling Autonomous Lagrangian Circulation Explorer","b4d40e77-a862-418e-a8dc-f7b7e704b4cc" "Water-based Platforms","Buoys","Unmoored","PROTEUS","Profile Telemetry of Upper Ocean Currents","c9bfbe86-064a-4d64-875b-cb36bff3f9e9" @@ -1001,6 +1011,7 @@ Basis,Category,Sub_Category,Short_Name,Long_Name,UUID "Water-based Platforms","Uncrewed Vehicles","Subsurface","Phantom DHD2+2","","897c4eed-6f5a-4b60-9780-a73362ec84f2" "Water-based Platforms","Uncrewed Vehicles","Subsurface","RCV-150","","420ea41e-a300-4c15-9e5d-eb395f56e986" "Water-based Platforms","Uncrewed Vehicles","Subsurface","ROPOS","","127be6b4-50ad-496d-939b-5c1dc47ac4ff" +"Water-based Platforms","Uncrewed Vehicles","Subsurface","ROVS","Remotely Operated Vehicle","3d5edc3b-2f75-45a3-a02e-59b6a88c2652" "Water-based Platforms","Uncrewed Vehicles","Subsurface","SEAGLIDER","","51edfe40-a819-400d-9067-5d114b27b825" "Water-based Platforms","Uncrewed Vehicles","Subsurface","SEASOAR","","d975d656-aa72-41fe-857f-1aa15b0543e2" "Water-based Platforms","Uncrewed Vehicles","Subsurface","Seirios","","f21d8715-f805-427d-b006-57a5d1240d1c" diff --git a/pyQuARC/schemas/projects.csv b/pyQuARC/schemas/projects.csv index 940dda46..c2713a33 100644 --- a/pyQuARC/schemas/projects.csv +++ b/pyQuARC/schemas/projects.csv @@ -1,4 +1,4 @@ -"Keyword Version: 13.2","Revision: 2022-03-18 16:22:13","Timestamp: 2022-03-28 09:16:54","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/projects/?format=xml","Case native" +"Keyword Version: 13.8","Revision: 2022-06-06 08:39:47","Timestamp: 2022-06-28 06:01:48","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/projects/?format=xml","Case native" Bucket,Short_Name,Long_Name,UUID "A - C","25090-E/ANT","","07a12d76-3794-4d1f-8db3-96a4c9814d54" "A - C","AAE","Australasian Antarctic Expedition of 1911-14","cda4025c-b996-442d-90f9-1b75af7ff6e6" @@ -563,6 +563,7 @@ Bucket,Short_Name,Long_Name,UUID "D - F","EPI","Environmental Performance Index","3d01c591-1681-40d5-8c86-3d4d8319d654" "D - F","EPN","European Phenology Network","54044418-fc67-4af3-9b0d-f85f6ab1a54e" "D - F","EPOCA","European Project on Ocean Acidification","58220d60-13c7-4562-aa0e-1a046e326a2c" +"D - F","EPOCH","East Pacific Origins and Characteristics of Hurricanes","1bb284ac-a2e1-4b40-aac2-1f948af38715" "D - F","EPOCS","Equatorial Pacific Ocean Climate Studies","b280f2ca-0c43-4690-9724-9c495fec2efc" "D - F","EPPB","Enzyme Production by Psychrophilic Bacteria","9c3c6e76-c7e3-4ba4-8d8e-c6a673fba052" "D - F","EPS","EUMETSAT Polar System","0c48d025-9e99-4833-9728-b8fedb46a243" @@ -1126,6 +1127,7 @@ Bucket,Short_Name,Long_Name,UUID "M - O","MERRA TIME-MEAN OBSERVATION DATA","MERRA for Research and Applications Gridded Monthly Time-Mean Observation Dataset","715267b6-9f3a-41c4-b034-4a514044d715" "M - O","MERRA-2 Climatology","MERRA-2 Climate Statistics and Climatological Long Term Mean","7f951de2-9ebf-4143-ac9d-eb12676cae86" "M - O","MERRA-2 Observation","MERRA-2 Gridded Innovations and Observations","903049a1-7ea6-4a8e-ae6a-d17518ec1e2a" +"M - O","MERRA-2 Ocean","Modern-Era Retrospective Reanalysis Ocean – The GEOS-S2S-3 Weakly Coupled Reanalysis","786f0e12-ac27-44e6-a881-fb1c5c69d28a" "M - O","MERRA-2","The second Modern-Era Retrospective analysis for Research and Applications","7583957b-e902-4daf-a2b9-81b65c3f3b8f" "M - O","MERRA","Modern Era Retrospective-analysis for Research and Applications","d752196b-a543-4a6c-90c4-2653192160e2" "M - O","MERSAM","Temporal and spatial distribution of mercury and methyl mercury","da6f7ff1-84cf-4a1f-9b64-538518086d96" @@ -1134,6 +1136,8 @@ Bucket,Short_Name,Long_Name,UUID "M - O","MESOGAMM 86","","8c1f5b1f-d2d2-41e9-ae4b-1e4064226cc7" "M - O","MET-READER","Meteorological REference Antarctic Data for Environmental Research","292ad2e7-d152-4879-b61d-57084696ac06" "M - O","MEVO","Mount Erebus Volcano Observatory","0d7280d6-8bd8-475a-a9fb-2add8fb7c86c" +"M - O","MEaSUREs/HOMaGE","MEaSUREs HOMaGE: Heat and Ocean Mass from Gravity ESDR","0b1888e6-847b-450d-ac80-5ca40f0fe095" +"M - O","MEaSUREs/OSWV","MEaSUREs ESDR of the Ocean Surface Vector Winds, Stress, and Their Dynamically-Significant Derivatives","9edaf6a9-e822-4af3-982b-9213aafa63b8" "M - O","MEaSUREs","Making Earth System Data Records for Use in Research Environments","e3544d46-2f00-4f7b-ab04-0f7a60dbf52b" "M - O","MFSTEP","Mediterranean Ocean Forecasting System: Toward Environmental Predictions","e96d45ab-7668-4a46-8b69-8288666684eb" "M - O","MICROFRONTS","MICROFRINTS Experiment","d20a71e2-d319-46c2-b2a5-e0ce5f935f2d" @@ -1483,6 +1487,7 @@ Bucket,Short_Name,Long_Name,UUID "P - R","RVAP","Rifting and Volcanism on the Antarctic Peninsula","4ed22be3-b000-4691-8d09-8ba29a4f5dc5" "P - R","Russian Space Program","","ac7a8cd4-7787-4191-87e3-42a819418a47" "P - R","","","6e0ee015-7fde-40bf-af5a-5b95ad966e32" +"S - U","S-MODE","Sub-Mesoscale Ocean Dynamics Experiment","eb9c7c89-e580-4d44-ae77-c99794b5253a" "S - U","SACC","South Atlantic Climate Change Program","2a2bef31-8665-45e4-8ccc-625694e7a9de" "S - U","SAFARI 2000","Southern African Regional Science Initiative Project","1b6957bc-048b-4c4f-8593-0f33a85b6579" "S - U","SAGA II/III","Soviet/American Gas and Aerosol Expedition","ce88623c-13f2-496e-bd6d-391af8b0f5c7" @@ -1674,7 +1679,7 @@ Bucket,Short_Name,Long_Name,UUID "S - U","STUDIES OF NARWHAL TEETH","Inuit and Scientific Descriptions of the Narwhal, Connecting Parallel Perceptions: Inter-disciplinary Studies of the Narwhal with a Focus on Tusk Function","3bfa0235-06c8-4a0b-966f-3ae72f15389e" "S - U","SUCCESS","Subsonic Aircraft Contrail and Cloud Effects Special Study","f2a8c4b3-6365-42ac-bbad-0843c4ba9033" "S - U","SUEFP","SOUTHEASTERN U.S. ECOLOGICAL FRAMEWORK PROJECT","35362a9d-463a-4959-96a4-4fc077ca0ae9" -"S - U","SUPERDARN","Super Dual Auroral Network","3dcde0ef-c407-4b04-947e-17b5cd96aac6" +"S - U","SUPERDARN","Super Dual Auroral Radar Network","3dcde0ef-c407-4b04-947e-17b5cd96aac6" "S - U","SURE","Sulfate Regional Experiment","fe538355-a0c4-4229-b235-f4adf84256c0" "S - U","SWAMP","Southwest Area Monsoon Project","0a4a7d30-32af-4e91-bbf5-a6381a6e8d22" "S - U","SWOT","Surface Water Ocean Topography","98dbcfdf-763a-4d62-9f6c-3520818a7f68" @@ -1725,6 +1730,7 @@ Bucket,Short_Name,Long_Name,UUID "S - U","TOCS","TROPICAL OCEAN CLIMATE STUDY","49c7b990-d9c4-497a-8286-331dd465ca46" "S - U","TOGA COARE","TOGA Coupled Ocean Atmosphere Response Experiment","8c1b6882-7ed8-409c-9768-399a048a4eb4" "S - U","TOGA","Tropical Ocean Global Atmosphere","4d569982-00c1-4e7f-b357-0bf0b624998d" +"S - U","TOLNet","Tropospheric Ozone Lidar Network","65f63466-cf6b-4f39-adb0-df30533959e8" "S - U","TOMS-EP","Total Ozone Mapping Spectrometer-Earth Probe","792bad05-e748-405b-b636-26fdeb56c578" "S - U","TOMS-M3","Total Ozone Mapping Spectrometer-Meteor3","a426d6cc-877b-4096-b30f-9632c59f11c4" "S - U","TOMS-N7","Total Ozone Mapping Spectrometer-Nimbus7","68e9ba40-40fe-4cbb-9632-0c0d9fc9f833" diff --git a/pyQuARC/schemas/providers.csv b/pyQuARC/schemas/providers.csv index f85272f9..07ebeb20 100644 --- a/pyQuARC/schemas/providers.csv +++ b/pyQuARC/schemas/providers.csv @@ -1,4 +1,4 @@ -"Keyword Version: 13.2","Revision: 2022-03-25 14:20:39","Timestamp: 2022-03-28 09:00:57","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/providers/?format=xml","Case native" +"Keyword Version: 13.8","Revision: 2022-06-03 10:13:31","Timestamp: 2022-06-28 06:58:21","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/providers/?format=xml","Case native" Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Data_Center_URL,UUID "ACADEMIC","GERMANY","","","DE/DLR","German Aerospace Center (DLR)","","2f9d7c12-c02d-41fb-a168-4d91794187f7" "ACADEMIC","GERMANY","","","","","","d780c4ea-4b39-4fda-a0d3-4f5bee42530d" @@ -34,6 +34,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "ACADEMIC","","","","BGSU/GEOL","Department of Geology, Bowling Green State University","http://www.bgsu.edu/departments/geology/","0c7f3c26-a211-46c1-8e80-060da961398f" "ACADEMIC","","","","BJERKNES","Bjerknes Centre for Climate Research","http://www.bjerknes.uib.no","3835cea5-fc47-4266-83de-4083b3fc6a25" "ACADEMIC","","","","BNU/Land-Atmosphere Interaction","The Land-Atmosphere Interaction Research Group at Beijing Normal University","http://globalchange.bnu.edu.cn/","b80ef9b6-692f-4471-abd5-1dd6148dcd9b" +"ACADEMIC","","","","BRIS/GEOGRAPHY","School of Geographical Sciences, University of Bristol","https://research-information.bris.ac.uk/en/organisations/school-of-geographical-sciences","99d01c58-aa71-4a56-83d8-b2df44d2a63c" "ACADEMIC","","","","BROWN/GEO","Department of Geological Sciences, Brown University","http://www.geo.brown.edu/","4dd805f9-04c3-4a49-9593-a23eeae40678" "ACADEMIC","","","","BSU","Boise State University","https://boisestate.edu","f66a9543-a927-45d5-9c2f-91c5a7bb50bd" "ACADEMIC","","","","BU/EE/LCSC","Land Cover and Surface Climate Group, Department of Earth and Environment, Boston University","https://www.bu.edu/lcsc/","3c69aa2e-f30d-4841-af63-4ea072106e67" @@ -838,7 +839,7 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "ACADEMIC","","","","UNC-CHAPEL_HILL/DCS","Department of Computer Science, University of North Carolina at Chapel Hill","http://www.cs.unc.edu/","0105c1c8-53f4-454e-ae3c-ca200fff0c6e" "ACADEMIC","","","","UNC-CHAPEL_HILL/DICE","DATA INTENSIVE CYBER ENVIRONMENTS, UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL","","59a40dc6-f382-435b-9437-d1b8b31212b5" "ACADEMIC","","","","UNC-CHAPEL_HILL/ILS/MRC","METADATA RESEARCH CENTER, SCHOOL OF INFORMATION AND LIBRARY SCIENCES, UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL","http://ils.unc.edu/mrc/","b2f49af1-6fdf-4f1b-baf0-4046247db4de" -"ACADEMIC","","","","UNC-WILMINGTON/CMS","Center for Marine Science, University of North Carolina at Chapel Hill","","7491a7e0-3f92-4445-9b65-10c685c4f145" +"ACADEMIC","","","","UNC-WILMINGTON/CMS","Center for Marine Science, University of North Carolina at Wilmington","","7491a7e0-3f92-4445-9b65-10c685c4f145" "ACADEMIC","","","","UNC-WILMINGTON/SMEC","Science and Mathematics Education Center, University of North Carolina at Wilmington","http://www.uncw.edu/smec/","21393c4d-e5bf-41db-95ec-e76521a787cf" "ACADEMIC","","","","UND/NSERC","","http://www.nserc.und.edu","b332cf8e-4225-4143-a994-6df3ad2535ed" "ACADEMIC","","","","UND/UMAC","Upper Midwest Aerospace Consortium, University of North Dakota","http://www.umac.org/","37c9ecca-2cdc-42d3-957c-33b8360eae97" @@ -2249,8 +2250,8 @@ Bucket_Level0,Bucket_Level1,Bucket_Level2,Bucket_Level3,Short_Name,Long_Name,Dat "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NESDIS/STAR","Center for Satellite Applications and Research, NESDIS, NOAA, U.S. Department of Commerce","http://www.orbit.nesdis.noaa.gov","006a1451-9ef8-4250-bb17-48a4e40bf96d" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NESDIS","National Environmental Satellite, Data, and Information Services, NOAA, U.S. Department of Commerce","http://www.nesdis.noaa.gov","71a5b7b8-b944-4d42-8338-80811fdf335e" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NIC","National Ice Center, NOAA, U.S. Department of Commerce","http://www.natice.noaa.gov/","2d8e6164-8d90-4a60-82a9-4acffbcc6abb" -"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC/MML","Marine Mammal Laboratory, Alaska Fisheries Science Center, National Marine Fisheries","https://www.fisheries.noaa.gov/about/marine-mammal-laboratory","1b38ecb4-294d-4b16-a219-bf469faeb4e8" -"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC/NMML/APIS","Antarctic Pack Ice Seals, National Marine Mammal Laboratory, Alaska Fisheries Science Center, NMFS, NOAA, U.S. Department of Commerce","http://nmml.afsc.noaa.gov/apis/apis.htm","4e1f47fa-2c18-4ed1-a4a2-d58a0a36a329" +"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC/MML/APIS","Antarctic Pack Ice Seals, Marine Mammal Laboratory, Alaska Fisheries Science Center, NMFS, NOAA, U.S. Department of Commerce","https://www.fisheries.noaa.gov/about/marine-mammal-laboratory","4e1f47fa-2c18-4ed1-a4a2-d58a0a36a329" +"GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC/MML","Marine Mammal Laboratory, Alaska Fisheries Science Center, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","https://www.fisheries.noaa.gov/about/marine-mammal-laboratory","1b38ecb4-294d-4b16-a219-bf469faeb4e8" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AFSC","Alaska Fisheries Science Center, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","http://www.afsc.noaa.gov/","4271e7d0-b722-4039-9d1a-ee3a0d2c5de0" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/AKRO","Alaska Regional Office, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","https://alaskafisheries.noaa.gov","22d89beb-cb38-4d0b-ab45-807a278ea307" "GOVERNMENT AGENCIES-U.S. FEDERAL AGENCIES","DOC","NOAA","","DOC/NOAA/NMFS/FSED","Fisheries Statistics and Economics Division, National Marine Fisheries Service, NOAA, U.S. Department of Commerce","http://www.st.nmfs.gov/st1/","6a298419-613c-4462-ac73-060922350117" diff --git a/pyQuARC/schemas/rucontenttype.csv b/pyQuARC/schemas/rucontenttype.csv index 8b834d06..7fbe9597 100644 --- a/pyQuARC/schemas/rucontenttype.csv +++ b/pyQuARC/schemas/rucontenttype.csv @@ -1,4 +1,4 @@ -"Hits: 102","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:23:23","Timestamp: 2022-03-28 09:17:49","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/rucontenttype/?format=xml","Case native" +"Hits: 102","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:18:32","Timestamp: 2022-06-28 09:11:26","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/rucontenttype/?format=xml","Case native" URLContentType,Type,Subtype,UUID "CollectionURL","DATA SET LANDING PAGE","","8826912b-c89e-4810-b446-39b98b5d937c" "CollectionURL","EXTENDED METADATA","DMR++ MISSING DATA","4cc17021-b9cc-4b3f-a4f1-f05f7c1aeb2d" diff --git a/pyQuARC/schemas/sciencekeywords.csv b/pyQuARC/schemas/sciencekeywords.csv index dac00019..2258fce1 100644 --- a/pyQuARC/schemas/sciencekeywords.csv +++ b/pyQuARC/schemas/sciencekeywords.csv @@ -1,4 +1,4 @@ -"Keyword Version: 13.2","Revision: 2022-03-18 16:23:43","Timestamp: 2022-03-28 12:29:53","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords/?format=xml","Case native" +"Keyword Version: 13.8","Revision: 2022-06-03 10:19:12","Timestamp: 2022-06-28 04:58:39","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/sciencekeywords/?format=xml","Case native" Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_Variable,UUID "EARTH SCIENCE SERVICES","DATA ANALYSIS AND VISUALIZATION","CALIBRATION/VALIDATION","CALIBRATION","","","","ecf29317-bd5e-447b-b911-f8bfb153c83b" "EARTH SCIENCE SERVICES","DATA ANALYSIS AND VISUALIZATION","CALIBRATION/VALIDATION","VALIDATION","","","","b283a59c-0e9a-469c-baf4-591b64cd4671" @@ -1669,6 +1669,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","CRYOSPHERE","SEA ICE","HEAT FLUX","","","","5569b7a3-3a4b-4799-8c68-98126757074b" "EARTH SCIENCE","CRYOSPHERE","SEA ICE","ICE DEFORMATION","","","","1009557b-0d4b-4c13-81a0-fd95c15bf158" "EARTH SCIENCE","CRYOSPHERE","SEA ICE","ICE DEPTH/THICKNESS","","","","c7708bb6-a0fa-4905-b99d-c468da7d951a" +"EARTH SCIENCE","CRYOSPHERE","SEA ICE","ICE DRAFT","","","","3bacb194-cf25-42ae-95af-54a6a53898ef" "EARTH SCIENCE","CRYOSPHERE","SEA ICE","ICE EDGES","","","","5fa04fa9-06c7-41c7-98f9-f92756f080ea" "EARTH SCIENCE","CRYOSPHERE","SEA ICE","ICE EXTENT","","","","63b37017-9d57-4247-af4e-2df36ee3ed03" "EARTH SCIENCE","CRYOSPHERE","SEA ICE","ICE FLOES","","","","af0d756e-784e-4747-97d0-3425baf5d09b" @@ -2536,6 +2537,7 @@ Category,Topic,Term,Variable_Level_1,Variable_Level_2,Variable_Level_3,Detailed_ "EARTH SCIENCE","OCEANS","SEA ICE","HEAT FLUX","","","","ae1c9b54-caf2-4726-b180-5c6544f09111" "EARTH SCIENCE","OCEANS","SEA ICE","ICE DEFORMATION","","","","3cdebef6-902d-4c1a-9d7e-7609f8ee6ef6" "EARTH SCIENCE","OCEANS","SEA ICE","ICE DEPTH/THICKNESS","","","","a735d8ca-182c-4307-9305-186a065e84a4" +"EARTH SCIENCE","OCEANS","SEA ICE","ICE DRAFT","","","","ae4869cc-65f4-4f24-a77b-b77637f8818c" "EARTH SCIENCE","OCEANS","SEA ICE","ICE EDGES","","","","f0cd20bd-41e8-4ca0-9ae3-7c602c251858" "EARTH SCIENCE","OCEANS","SEA ICE","ICE EXTENT","","","","87feb47e-aee3-42f1-8c39-5109d9d5422e" "EARTH SCIENCE","OCEANS","SEA ICE","ICE FLOES","","","","aa15804c-5f7f-40cc-b949-aa3e4418fc27" diff --git a/pyQuARC/schemas/temporalresolutionrange.csv b/pyQuARC/schemas/temporalresolutionrange.csv index 2388f483..5fe8998a 100644 --- a/pyQuARC/schemas/temporalresolutionrange.csv +++ b/pyQuARC/schemas/temporalresolutionrange.csv @@ -1,4 +1,4 @@ -"Hits: 20","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:51","Timestamp: 2022-03-28 09:00:07","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/temporalresolutionrange/?format=xml","Case native" +"Hits: 20","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:17:38","Timestamp: 2022-06-28 09:11:33","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/temporalresolutionrange/?format=xml","Case native" Temporal_Resolution_Range,UUID "1 minute - < 1 hour","bca20202-2b06-4657-a425-5b0e416bce0c" "1 second - < 1 minute","48ff676f-836c-4cff-bc88-4c4cc06b2e1b" diff --git a/pyQuARC/schemas/version.txt b/pyQuARC/schemas/version.txt index 1e691fda..b2a85b4e 100644 --- a/pyQuARC/schemas/version.txt +++ b/pyQuARC/schemas/version.txt @@ -1 +1 @@ -2022-03-28 \ No newline at end of file +2022-06-28 \ No newline at end of file diff --git a/pyQuARC/schemas/verticalresolutionrange.csv b/pyQuARC/schemas/verticalresolutionrange.csv index 907ed099..ebee2f48 100644 --- a/pyQuARC/schemas/verticalresolutionrange.csv +++ b/pyQuARC/schemas/verticalresolutionrange.csv @@ -1,4 +1,4 @@ -"Hits: 8","page_num: 1","page_size: 2000","Keyword Version: 13.2","Revision: 2022-03-18 16:22:51","Timestamp: 2022-03-28 09:00:06","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/verticalresolutionrange/?format=xml","Case native" +"Hits: 8","page_num: 1","page_size: 2000","Keyword Version: 13.8","Revision: 2022-06-03 10:17:38","Timestamp: 2022-06-28 09:06:02","Terms Of Use: https://cdn.earthdata.nasa.gov/conduit/upload/5182/KeywordsCommunityGuide_Baseline_v1_SIGNED_FINAL.pdf","The most up to date XML representations can be found here: https://gcmd.earthdata.nasa.gov/kms/concepts/concept_scheme/verticalresolutionrange/?format=xml","Case native" Vertical_Resolution_Range,UUID "1 meter - < 10 meters","201337ea-fa14-4e58-a538-e92c5ff734a4" "10 meters - < 30 meters","20505a5b-4df8-4430-83a3-ad7b212c9bfc" From a96c77d34f0f640854d4b46f9b17b5ea4d7e02e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Jul 2022 21:22:32 +0000 Subject: [PATCH 242/261] Bump lxml from 4.6.5 to 4.9.1 Bumps [lxml](https://github.com/lxml/lxml) from 4.6.5 to 4.9.1. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-4.6.5...lxml-4.9.1) --- updated-dependencies: - dependency-name: lxml dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e95de393..0ac724fd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ colorama==0.4.4 idna==2.10 jsonschema==3.2.0 -lxml==4.6.5 +lxml==4.9.1 pathlib==1.0.1 pytest==5.4.3 pytz==2020.1 From d41eb0355c7072102d273bfa17262843ba034931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 18 Jul 2022 10:08:41 -0500 Subject: [PATCH 243/261] Refactor --- pyQuARC/code/base_validator.py | 5 -- pyQuARC/code/string_validator.py | 101 +++++++++++++++++-------------- 2 files changed, 56 insertions(+), 50 deletions(-) diff --git a/pyQuARC/code/base_validator.py b/pyQuARC/code/base_validator.py index 43fb6895..2d7f9491 100644 --- a/pyQuARC/code/base_validator.py +++ b/pyQuARC/code/base_validator.py @@ -49,8 +49,3 @@ def compare(first, second, relation): return not (BaseValidator.compare(first, second, relation[4:])) func = getattr(BaseValidator, relation) return func(first, second) - - @staticmethod - def cmr_request(cmr_prms): - return requests.get(f'{CMR_URL}/search/{cmr_prms}') - diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index f4dfb0ca..f555110f 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -7,6 +7,18 @@ from .constants import CMR_URL +def set_cmr_prms(params, format='json'): + base_url = f"collections.{format}?" + params = { key:value for key, value in params.items() if value } + return f"{base_url}{urllib.parse.urlencode(params)}" + +def cmr_request(cmr_prms): + return requests.get(f'{CMR_URL}/search/{cmr_prms}').json() + +def collection_in_cmr(cmr_prms): + return cmr_request(cmr_prms).get('hits', 0) > 0 + + class StringValidator(BaseValidator): """ Validator class for string values @@ -362,59 +374,52 @@ def idnnode_shortname_gcmd_check(resource_type): } @staticmethod - def set_cmr_prms(params): - base_url = "collections.umm_json?" - params = {key:value for key, value in params.items() if value} - return f"{base_url}{urllib.parse.urlencode(params)}" - - @staticmethod - def granule_project_validate_against_collection(cmr_prms, project_shortname): - if not(StringValidator.collection_in_cmr(cmr_prms)): - validity = True - else: - validity = StringValidator.validate_against_collection(cmr_prms, 'project', project_shortname) - return validity - - @staticmethod - def collection_in_cmr(cmr_prms): - return BaseValidator.cmr_request(cmr_prms).json()['hits'] > 0 - - @staticmethod - def validate_against_collection(cmr_prms, prm, prm_value): + def _validate_against_collection(cmr_prms, prm, prm_value): cmr_request_prms = f'{cmr_prms}&{prm}={prm_value}' - request = BaseValidator.cmr_request(cmr_request_prms).json()['hits'] - validity = request > 0 + hits = cmr_request(cmr_request_prms).get('hits', 0) + validity = hits > 0 return validity @staticmethod @if_arg def granule_project_short_name_check(project_shortname, entry_title=None, short_name=None, version=None): - cmr_prms = StringValidator.set_cmr_prms({ - "entry_title": entry_title, - "short_name": short_name, - "version": version}) - validity = StringValidator.granule_project_validate_against_collection(cmr_prms, project_shortname) + def granule_project_validate_against_collection(cmr_prms, project_shortname): + if not(collection_in_cmr(cmr_prms)): + validity = True + else: + validity = StringValidator._validate_against_collection(cmr_prms, 'project', project_shortname) + return validity + + cmr_prms = set_cmr_prms({ + "entry_title": entry_title, + "short_name": short_name, + "version": version + }, "umm_json") + + validity = granule_project_validate_against_collection(cmr_prms, project_shortname) return { "valid": validity, "value": project_shortname } - @staticmethod - def granule_sensor_validate_against_collection(cmr_prms, sensor_shortname): - if not(StringValidator.collection_in_cmr(cmr_prms)): - validity = True - else: - validity = StringValidator.validate_against_collection(cmr_prms, 'instrument', sensor_shortname) - return validity - @staticmethod @if_arg def granule_sensor_short_name_check(sensor_shortname, entry_title=None, short_name=None, version=None): - cmr_prms = StringValidator.set_cmr_prms({ - "entry_title": entry_title, - "short_name": short_name, - "version": version}) - validity = StringValidator.granule_sensor_validate_against_collection(cmr_prms, sensor_shortname) + + def granule_sensor_validate_against_collection(cmr_prms, sensor_shortname): + if not(collection_in_cmr(cmr_prms)): + validity = True + else: + validity = StringValidator._validate_against_collection(cmr_prms, 'instrument', sensor_shortname) + return validity + + cmr_prms = set_cmr_prms({ + "entry_title": entry_title, + "short_name": short_name, + "version": version + }, "umm_json") + + validity = granule_sensor_validate_against_collection(cmr_prms, sensor_shortname) return { "valid": validity, "value": sensor_shortname @@ -439,14 +444,20 @@ def validate_granule_data_format_against_collection( """ if collection_shortname and version: - collection = requests.get( - f"{CMR_URL}/search/collections.json?short_name={collection_shortname}&version={version}&granule_data_format={granule_data_format}" - ).json() + params = { + "short_name": collection_shortname, + "version": version, + } else: - collection = requests.get( - f"{CMR_URL}/search/collections.json?DatasetId={dataset_id}&granule_data_format={granule_data_format}" - ).json() + params = { + "DatasetId": dataset_id, + } + + params["granule_data_format"] = granule_data_format + query_string = set_cmr_prms(params, "json") + collection = cmr_request(query_string) + if collection["feed"]["entry"]: return {"valid": True, "value": granule_data_format} return {"valid": False, "value": granule_data_format} From b5ad775d30f4aad50aa8c6d550ddacfab933e5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 18 Jul 2022 10:18:55 -0500 Subject: [PATCH 244/261] Replace constant `CMR_URL` with func `get_cmr_url` --- pyQuARC/code/constants.py | 5 +++++ pyQuARC/code/datetime_validator.py | 4 ++-- pyQuARC/code/downloader.py | 4 ++-- pyQuARC/main.py | 11 +++++++---- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index a9dae664..a7a72ca2 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -1,3 +1,5 @@ +import os + from colorama import Fore, Style from pathlib import Path @@ -73,3 +75,6 @@ } CMR_URL = "https://cmr.earthdata.nasa.gov" + +def get_cmr_url(): + return os.environ.get("CMR_URL", CMR_URL) diff --git a/pyQuARC/code/datetime_validator.py b/pyQuARC/code/datetime_validator.py index 0ab042c8..f9187cb4 100644 --- a/pyQuARC/code/datetime_validator.py +++ b/pyQuARC/code/datetime_validator.py @@ -5,7 +5,7 @@ from datetime import datetime from .base_validator import BaseValidator -from .constants import CMR_URL +from .constants import get_cmr_url from .utils import if_arg @@ -125,7 +125,7 @@ def validate_datetime_against_granules(datetime, collection_shortname, version, Returns: (dict) An object with the validity of the check and the instance """ - granules = requests.get(f'{CMR_URL}/search/granules.json?short_name={collection_shortname}&version={version}&sort_key[]={sort_key}').json() + granules = requests.get(f'{get_cmr_url()}/search/granules.json?short_name={collection_shortname}&version={version}&sort_key[]={sort_key}').json() if len(granules['feed']['entry']) > 0: last_granule = granules['feed']['entry'][0] diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index 22b35227..6f69c3fc 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -3,7 +3,7 @@ from urllib.parse import urlparse -from .constants import CMR_URL +from .constants import get_cmr_url class Downloader: @@ -17,7 +17,7 @@ class Downloader: GRANULE = "granule" INVALID = "invalid" - def __init__(self, concept_id, metadata_format, version=None, cmr_host=CMR_URL): + def __init__(self, concept_id, metadata_format, version=None, cmr_host=get_cmr_url()): """ Args: concept_id (str): The concept id of the metadata to download diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 8b5e95e1..716c1e59 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -8,11 +8,11 @@ if __name__ == '__main__': from code.checker import Checker - from code.constants import CMR_URL, COLOR, ECHO10, SUPPORTED_FORMATS + from code.constants import get_cmr_url, COLOR, ECHO10, SUPPORTED_FORMATS from code.downloader import Downloader else: from .code.checker import Checker - from .code.constants import CMR_URL, COLOR, ECHO10, SUPPORTED_FORMATS + from .code.constants import get_cmr_url, COLOR, ECHO10, SUPPORTED_FORMATS from .code.downloader import Downloader @@ -39,7 +39,7 @@ def __init__( rules_override=None, messages_override=None, version=None, - cmr_host=CMR_URL, + cmr_host=get_cmr_url(), ): """ Args: @@ -300,6 +300,9 @@ def display_results(self): parser.error( f"The given format is not supported. Only {', '.join(SUPPORTED_FORMATS)} are supported." ) + + if args.cmr_host: + os.environ["CMR_URL"] = args.cmr_host arc = ARC( query=args.query, @@ -307,7 +310,7 @@ def display_results(self): fake=args.fake, file_path=args.file, metadata_format=args.format or ECHO10, - cmr_host=args.cmr_host or CMR_URL, + cmr_host=get_cmr_url(), version=args.version, ) results = arc.validate() From bf08496f27c572adbe73b6c4cabfdb183504053f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 18 Jul 2022 10:31:10 -0500 Subject: [PATCH 245/261] Add protocol to cmr url --- pyQuARC/code/constants.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index a7a72ca2..95bfe590 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -77,4 +77,7 @@ CMR_URL = "https://cmr.earthdata.nasa.gov" def get_cmr_url(): - return os.environ.get("CMR_URL", CMR_URL) + cmr_url = os.environ.get("CMR_URL", CMR_URL) + if not cmr_url.startswith("http"): + cmr_url = f"https://{cmr_url}" + return cmr_url From 143897d61997c31abc593037f23bc2d71bfa5681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 18 Jul 2022 10:36:53 -0500 Subject: [PATCH 246/261] Fix a small issue with secure url check --- pyQuARC/code/url_validator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index aa65c565..83881638 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -67,8 +67,8 @@ def health_and_status_check(text_with_urls): response_code = requests.get(url).status_code if response_code == 200: if url.startswith("http://"): - url = url.replace("http://", "https://") - if requests.get(url).status_code == 200: + secure_url = url.replace("http://", "https://") + if requests.get(secure_url).status_code == 200: result = {"url": url, "error": "The URL is secure. Please use 'https' instead of 'http'."} else: continue From f949eae74db40a5d97ea07377afb47496611997d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Mon, 18 Jul 2022 10:59:01 -0500 Subject: [PATCH 247/261] Add check for cmr url validity, move function --- pyQuARC/code/constants.py | 8 -------- pyQuARC/code/datetime_validator.py | 3 +-- pyQuARC/code/downloader.py | 2 +- pyQuARC/code/utils.py | 27 +++++++++++++++++++++++++++ pyQuARC/main.py | 13 +++++++++---- 5 files changed, 38 insertions(+), 15 deletions(-) diff --git a/pyQuARC/code/constants.py b/pyQuARC/code/constants.py index 95bfe590..a9dae664 100644 --- a/pyQuARC/code/constants.py +++ b/pyQuARC/code/constants.py @@ -1,5 +1,3 @@ -import os - from colorama import Fore, Style from pathlib import Path @@ -75,9 +73,3 @@ } CMR_URL = "https://cmr.earthdata.nasa.gov" - -def get_cmr_url(): - cmr_url = os.environ.get("CMR_URL", CMR_URL) - if not cmr_url.startswith("http"): - cmr_url = f"https://{cmr_url}" - return cmr_url diff --git a/pyQuARC/code/datetime_validator.py b/pyQuARC/code/datetime_validator.py index f9187cb4..2edcf29b 100644 --- a/pyQuARC/code/datetime_validator.py +++ b/pyQuARC/code/datetime_validator.py @@ -5,8 +5,7 @@ from datetime import datetime from .base_validator import BaseValidator -from .constants import get_cmr_url -from .utils import if_arg +from .utils import get_cmr_url, if_arg class DatetimeValidator(BaseValidator): diff --git a/pyQuARC/code/downloader.py b/pyQuARC/code/downloader.py index 6f69c3fc..1681ca84 100644 --- a/pyQuARC/code/downloader.py +++ b/pyQuARC/code/downloader.py @@ -3,7 +3,7 @@ from urllib.parse import urlparse -from .constants import get_cmr_url +from .utils import get_cmr_url class Downloader: diff --git a/pyQuARC/code/utils.py b/pyQuARC/code/utils.py index f32cab8a..701dfe13 100644 --- a/pyQuARC/code/utils.py +++ b/pyQuARC/code/utils.py @@ -1,5 +1,10 @@ +import os +import requests + from functools import wraps +from .constants import CMR_URL + def if_arg(func): @wraps(func) @@ -12,3 +17,25 @@ def run_function_only_if_arg(*args): "value": None } return run_function_only_if_arg + +def _add_protocol(url): + if not url.startswith("http"): + url = f"https://{url}" + return url + +def is_valid_cmr_url(url): + url = _add_protocol(url) + valid = False + try: # some invalid url throw an exception + response = requests.get(url, timeout=5) # some invalid urls freeze + if response.status_code == 200 and response.headers.get("CMR-Request-Id"): + valid = True + else: + valid = False + except: + valid = False + return valid + +def get_cmr_url(): + cmr_url = os.environ.get("CMR_URL", CMR_URL) + return _add_protocol(cmr_url) diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 716c1e59..3fb0aa34 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -8,12 +8,14 @@ if __name__ == '__main__': from code.checker import Checker - from code.constants import get_cmr_url, COLOR, ECHO10, SUPPORTED_FORMATS + from code.constants import COLOR, ECHO10, SUPPORTED_FORMATS from code.downloader import Downloader + from code.utils import get_cmr_url, is_valid_cmr_url else: from .code.checker import Checker - from .code.constants import get_cmr_url, COLOR, ECHO10, SUPPORTED_FORMATS + from .code.constants import COLOR, ECHO10, SUPPORTED_FORMATS from .code.downloader import Downloader + from .code.utils import get_cmr_url, is_valid_cmr_url ABS_PATH = os.path.abspath(os.path.dirname(__file__)) @@ -301,8 +303,11 @@ def display_results(self): f"The given format is not supported. Only {', '.join(SUPPORTED_FORMATS)} are supported." ) - if args.cmr_host: - os.environ["CMR_URL"] = args.cmr_host + if cmr_host := args.cmr_host: + if is_valid_cmr_url(cmr_host): + os.environ["CMR_URL"] = cmr_host + else: + raise Exception(f"The given CMR host is not valid: {cmr_host}") arc = ARC( query=args.query, From b4f72bbd4009efc5a413ed66b103a49f48a7e7eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 19 Jul 2022 14:54:29 -0500 Subject: [PATCH 248/261] Small refactor --- pyQuARC/code/utils.py | 5 +---- pyQuARC/main.py | 5 ++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/pyQuARC/code/utils.py b/pyQuARC/code/utils.py index 701dfe13..f838daeb 100644 --- a/pyQuARC/code/utils.py +++ b/pyQuARC/code/utils.py @@ -28,10 +28,7 @@ def is_valid_cmr_url(url): valid = False try: # some invalid url throw an exception response = requests.get(url, timeout=5) # some invalid urls freeze - if response.status_code == 200 and response.headers.get("CMR-Request-Id"): - valid = True - else: - valid = False + valid = response.status_code == 200 and response.headers.get("CMR-Request-Id") except: valid = False return valid diff --git a/pyQuARC/main.py b/pyQuARC/main.py index 3fb0aa34..df0a2f12 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -304,10 +304,9 @@ def display_results(self): ) if cmr_host := args.cmr_host: - if is_valid_cmr_url(cmr_host): - os.environ["CMR_URL"] = cmr_host - else: + if not is_valid_cmr_url(cmr_host): raise Exception(f"The given CMR host is not valid: {cmr_host}") + os.environ["CMR_URL"] = cmr_host arc = ARC( query=args.query, From 7a9239630c39b03b4924b6c8f26cb279d2413cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 19 Jul 2022 15:00:05 -0500 Subject: [PATCH 249/261] Add comments --- pyQuARC/code/string_validator.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index f555110f..e5ef3f0c 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -384,7 +384,8 @@ def _validate_against_collection(cmr_prms, prm, prm_value): @if_arg def granule_project_short_name_check(project_shortname, entry_title=None, short_name=None, version=None): def granule_project_validate_against_collection(cmr_prms, project_shortname): - if not(collection_in_cmr(cmr_prms)): + # If the collection can't be found, skip the check + if not (collection_in_cmr(cmr_prms)): validity = True else: validity = StringValidator._validate_against_collection(cmr_prms, 'project', project_shortname) @@ -407,6 +408,7 @@ def granule_project_validate_against_collection(cmr_prms, project_shortname): def granule_sensor_short_name_check(sensor_shortname, entry_title=None, short_name=None, version=None): def granule_sensor_validate_against_collection(cmr_prms, sensor_shortname): + # If the collection can't be found, skip the check if not(collection_in_cmr(cmr_prms)): validity = True else: From 289167fb61ad2cdead28e01aa466800a7f2302fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Tue, 19 Jul 2022 23:50:37 -0500 Subject: [PATCH 250/261] Update validation against collection methods --- pyQuARC/code/string_validator.py | 40 ++++++++++---------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/pyQuARC/code/string_validator.py b/pyQuARC/code/string_validator.py index e41cc2ce..a053e1cb 100644 --- a/pyQuARC/code/string_validator.py +++ b/pyQuARC/code/string_validator.py @@ -374,24 +374,24 @@ def idnnode_shortname_gcmd_check(resource_type): } @staticmethod - def _validate_against_collection(cmr_prms, prm, prm_value): + def _validate_against_collection(prm_value, entry_title, short_name, version, key): + cmr_prms = set_cmr_prms({ + "entry_title": entry_title, + "short_name": short_name, + "version": version + }, "umm_json") + if not (collection_in_cmr(cmr_prms)): return True - cmr_request_prms = f'{cmr_prms}&{prm}={prm_value}' + cmr_request_prms = f'{cmr_prms}&{key}={prm_value}' hits = cmr_request(cmr_request_prms).get('hits', 0) return hits > 0 @staticmethod @if_arg def granule_project_short_name_check(project_shortname, entry_title=None, short_name=None, version=None): - cmr_prms = set_cmr_prms({ - "entry_title": entry_title, - "short_name": short_name, - "version": version - }, "umm_json") - - validity = StringValidator._validate_against_collection(cmr_prms, 'project', project_shortname) + validity = StringValidator._validate_against_collection(project_shortname, entry_title, short_name, version, 'project') return { "valid": validity, "value": project_shortname @@ -400,13 +400,7 @@ def granule_project_short_name_check(project_shortname, entry_title=None, short_ @staticmethod @if_arg def granule_sensor_short_name_check(sensor_shortname, entry_title=None, short_name=None, version=None): - cmr_prms = set_cmr_prms({ - "entry_title": entry_title, - "short_name": short_name, - "version": version - }, "umm_json") - - validity = StringValidator._validate_against_collection(cmr_prms, 'instrument', sensor_shortname) + validity = StringValidator._validate_against_collection(sensor_shortname, entry_title, short_name, version, 'instrument') return { "valid": validity, "value": sensor_shortname @@ -428,12 +422,7 @@ def validate_granule_instrument_against_collection(instrument_shortname, collect Returns: (dict) An object with the validity of the check and the instance """ - cmr_prms = set_cmr_prms({ - "entry_title": dataset_id, - "shortName": collection_shortname, - "version": version - }, "umm_json") - validity = StringValidator._validate_against_collection(cmr_prms, "instrument", instrument_shortname) + validity = StringValidator._validate_against_collection(instrument_shortname, dataset_id, collection_shortname, version, "instrument") return { "valid": validity, "value": instrument_shortname @@ -455,12 +444,7 @@ def validate_granule_platform_against_collection(platform_shortname, collection_ Returns: (dict) An object with the validity of the check and the instance """ - cmr_prms = StringValidator.set_cmr_prms({ - "entry_title": dataset_id, - "shortName": collection_shortname, - "version": version - }, "umm_json") - validity = StringValidator._validate_against_collection(cmr_prms, "platform", platform_shortname) + validity = StringValidator._validate_against_collection(platform_shortname, dataset_id, collection_shortname, version, "platform") return { "valid": validity, "value": platform_shortname From b4b574c75378a10830f6d579536e1dfb4a652a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 20 Jul 2022 00:16:38 -0500 Subject: [PATCH 251/261] Update `granule_sensor_presence_check` --- pyQuARC/code/custom_validator.py | 57 +++++++++++++------------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/pyQuARC/code/custom_validator.py b/pyQuARC/code/custom_validator.py index 729ac297..3678d216 100644 --- a/pyQuARC/code/custom_validator.py +++ b/pyQuARC/code/custom_validator.py @@ -1,9 +1,5 @@ -import json -import requests - from .base_validator import BaseValidator -from .string_validator import StringValidator -from .constants import CMR_URL +from .string_validator import StringValidator, cmr_request, set_cmr_prms from .utils import if_arg @@ -105,18 +101,27 @@ def granule_sensor_presence_check(sensor_values, collection_shortname=None, vers Checks if sensor is provided at the granule level if provided at collection level """ - if dataset_id == None: - collection = requests.get(f'{CMR_URL}/search/collections.umm_json?short_name={collection_shortname}&version={version}').json() - else: - collection = requests.get(f'{CMR_URL}/search/collections.umm_json?DatasetId={dataset_id}').json() - - instruments = collection['items'][0]['umm']['Platforms'][0]['Instruments'][0] - - if 'ComposedOf' in instruments.keys(): - response = CustomValidator.presence_check(sensor_values) - return response + if dataset_id: + params = {"DatasetId": dataset_id} else: - return None + params = { + "collection_shortname": collection_shortname, + "version": version, + } + prms = set_cmr_prms(params, format="umm_json") + collections = cmr_request(prms) + if collections := collections.get('items'): + collection = collections[0] + for platform in collection['umm'].get('Platforms', []): + instruments = platform.get('Instruments', []) + for instrument in instruments: + if 'ComposedOf' in instrument.keys(): + return CustomValidator.presence_check(sensor_values) + + return { + "valid": True, + "value": sensor_values, + } @staticmethod @if_arg @@ -170,30 +175,14 @@ def collection_progress_consistency_check( @staticmethod @if_arg def uniqueness_check(list_of_objects, key): - seen, duplicates = set(), set() - for url_obj in list_of_objects: - if description := url_obj.get(key) in seen: - duplicates.add(description) - else: - seen.add(description) - - return { - "valid": not bool(duplicates), - "value": ', '.join(duplicates) - } - - @staticmethod - @if_arg - def uniqueness_check_echog(list_of_objects, key): seen, duplicates = set(), set() if isinstance(list_of_objects, list): for url_obj in list_of_objects: - description = url_obj[key] - if description in seen: + if description := url_obj.get(key) in seen: duplicates.add(description) else: seen.add(description) - + return { "valid": not bool(duplicates), "value": ', '.join(duplicates) From d5f1b6799a9a7c373beac153fc2492daf6cb0457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 20 Jul 2022 00:17:20 -0500 Subject: [PATCH 252/261] Remove `uniqueness_check_echog` --- pyQuARC/schemas/check_messages.json | 8 -------- pyQuARC/schemas/checks.json | 5 ----- pyQuARC/schemas/rule_mapping.json | 4 ++-- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/pyQuARC/schemas/check_messages.json b/pyQuARC/schemas/check_messages.json index 6fb9b6f7..e9a71133 100644 --- a/pyQuARC/schemas/check_messages.json +++ b/pyQuARC/schemas/check_messages.json @@ -719,14 +719,6 @@ }, "remediation": "Please provide a corresponding GCMD compliant Online Resource Type for each Online Resource URL." }, - "characteristic_name_uniqueness_check_echo10": { - "failure": "Duplicate characteristic name/s `{}`.", - "help": { - "message": "", - "url": "" - }, - "remediation": "Please provide a unique name for each characteristic." - }, "characteristic_name_uniqueness_check": { "failure": "Duplicate characteristic name/s `{}`.", "help": { diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 8dd0ac1e..7c9af1f1 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -234,11 +234,6 @@ "check_function": "uniqueness_check", "available": true }, - "uniqueness_check_echog":{ - "data_type": "custom", - "check_function": "uniqueness_check_echog", - "available": true - }, "validate_ending_datetime_against_granules": { "data_type": "datetime", "check_function": "validate_ending_datetime_against_granules", diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 00862577..095ba8db 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -5111,7 +5111,7 @@ }, "data": ["Description"], "severity": "info", - "check_id": "uniqueness_check_echog" + "check_id": "uniqueness_check" }, "online_access_description_uniqueness_check": { "rule_name": "Online Access Description Uniqueness Check", @@ -5126,7 +5126,7 @@ }, "data": ["URLDescription"], "severity": "info", - "check_id": "uniqueness_check_echog" + "check_id": "uniqueness_check" }, "metadata_update_time_logic_check": { "rule_name": "Metadata Update Time Logic Check", From f9e22fbd88c1259045b08bf0f581bf03ddabc52b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 20 Jul 2022 14:55:10 -0500 Subject: [PATCH 253/261] Fix error with naive/aware datetime comparison --- pyQuARC/code/datetime_validator.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyQuARC/code/datetime_validator.py b/pyQuARC/code/datetime_validator.py index 474f3129..2b4d6ced 100644 --- a/pyQuARC/code/datetime_validator.py +++ b/pyQuARC/code/datetime_validator.py @@ -101,10 +101,11 @@ def compare(first, second, relation): Returns: (dict) An object with the validity of the check and the instance """ - first = DatetimeValidator._iso_datetime(first) or DatetimeValidator._iso_date(first) + first = (DatetimeValidator._iso_datetime(first) or DatetimeValidator._iso_date(first)).replace(tzinfo=pytz.utc) second = DatetimeValidator._iso_datetime(second) or DatetimeValidator._iso_date(second) if not(second): - second = datetime.now().replace(tzinfo=pytz.UTC) # Making it UTC for comparison with other UTC times + second = datetime.now() + second = second.replace(tzinfo=pytz.UTC) # Making it UTC for comparison with other UTC times result = BaseValidator.compare(first, second, relation) return { "valid": result, From 1f4c1983116b5eac704b852367e972fe70e06efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Wed, 20 Jul 2022 14:57:01 -0500 Subject: [PATCH 254/261] Rename `presence_check` to `one_item_presence_check` --- pyQuARC/schemas/checks.json | 2 +- pyQuARC/schemas/rule_mapping.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyQuARC/schemas/checks.json b/pyQuARC/schemas/checks.json index 7c9af1f1..bf83e4bb 100644 --- a/pyQuARC/schemas/checks.json +++ b/pyQuARC/schemas/checks.json @@ -266,7 +266,7 @@ }, "granule_data_format_presence_check": { "data_type": "custom", - "check_function": "presence_check", + "check_function": "one_item_presence_check", "available": true }, "count_check": { diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 095ba8db..2cdd06c4 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -2556,7 +2556,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "validate_granule_instrument_against_collection": { "rule_name": "Granule Instrument Short Name Check", @@ -4956,7 +4956,7 @@ ] }, "severity": "info", - "check_id": "presence_check" + "check_id": "one_item_presence_check" }, "validate_granule_platform_against_collection": { "rule_name": "Granule Platform Short Name Check", From 234199e3630cb8dd6e3a22b97b10c06c57496c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 21 Jul 2022 11:36:07 -0500 Subject: [PATCH 255/261] Add 10 sec timeout for url checks --- pyQuARC/code/checker.py | 2 +- pyQuARC/code/scheduler.py | 88 +++++++++++++++++++------------ pyQuARC/code/url_validator.py | 8 ++- pyQuARC/schemas/rule_mapping.json | 48 ++++++++++------- 4 files changed, 89 insertions(+), 57 deletions(-) diff --git a/pyQuARC/code/checker.py b/pyQuARC/code/checker.py index aa6d8594..0139404d 100644 --- a/pyQuARC/code/checker.py +++ b/pyQuARC/code/checker.py @@ -171,7 +171,7 @@ def _run_func(self, func, check, rule_id, metadata_content, result_dict): rule_mapping.get("fields_to_apply").get(self.metadata_format, {}) for field_dict in list_of_fields_to_apply: - dependencies = self.scheduler.get_all_dependencies(rule_id, check, field_dict) + dependencies = self.scheduler.get_all_dependencies(rule_mapping, check, field_dict) main_field = field_dict["fields"][0] external_data = field_dict.get("data", external_data) result_dict.setdefault(main_field, {}) diff --git a/pyQuARC/code/scheduler.py b/pyQuARC/code/scheduler.py index 92a47c8d..ad69dacc 100644 --- a/pyQuARC/code/scheduler.py +++ b/pyQuARC/code/scheduler.py @@ -4,10 +4,8 @@ class Scheduler: """ def __init__(self, rule_mapping, rules_override, checks, checks_override, metadata_format): - self.check_list = checks - self.checks_override = checks_override - self.rule_mapping = rule_mapping - self.rules_override = rules_override + self.check_list = {**checks, **checks_override} + self.rule_mapping = {**rule_mapping, **rules_override} self.metadata_format = metadata_format @staticmethod @@ -19,17 +17,21 @@ def append_if_not_exist(value, list_of_values): if value not in list_of_values: list_of_values.append(value) - def get_all_dependencies(self, rule_id, check, field_dict=None): + def get_all_dependencies(self, rule, check, field_dict=None): """ - Gets combined dependencies from rule_mapping and checks + Gets all the dependencies for a rule + + If field_dict is provided, get the dependencies only for that field """ dependencies = [] dependencies_from_fields = [] if field_dict: - return field_dict.get("dependencies", []) + if dependencies_from_fields := field_dict.get("dependencies"): + return dependencies_from_fields + else: + return check.get("dependencies", []) - rule = self.rule_mapping.get(rule_id) if field_objects := rule.get("fields_to_apply").get(self.metadata_format): for field_object in field_objects: if field_dependencies := field_object.get("dependencies"): @@ -41,27 +43,33 @@ def get_all_dependencies(self, rule_id, check, field_dict=None): dependencies.extend(dependencies_from_checks) return dependencies - def _add_to_list(self, rule_id, rule, rules_list): + def dependencies_ordering(self, dependencies, list): """ - Adds `rule` to `rules_list` based on the dependency order + Creates a dependency ordering; basically independent checks are added first """ - check_id = rule.get("check_id") or rule_id - if check := self.checks_override.get( - check_id - ) or self.check_list.get(check_id): - dependencies = self.get_all_dependencies(rule_id, check) - for dependency in dependencies: - check = self.rules_override.get( - dependency[0] - ) or self.rule_mapping.get(dependency[0]) - self._add_to_list( - dependency[0], - check, - rules_list + for dependency in dependencies: + dependency_check = self.check_list.get(dependency[0]) + if dependency_check.get("dependencies"): + self.dependencies_ordering( + dependency_check.get("dependencies"), list ) - Scheduler.append_if_not_exist(rule_id, rules_list) - else: - print(f"Missing entry for {check_id} in `checks.json`") + Scheduler.append_if_not_exist(dependency[0], list) + + def _find_rule_ids_based_on_check_id(self, check_id): + """ + Returns all the rule_ids that are based on a check_id + + Args: + check_id (str): The check id to find the rules based on + + Returns: + list: list of all the rule_ids that are based on the check_id + """ + rules = [] + for rule_id, rule in self.rule_mapping.items(): + if (rule.get("check_id") == check_id) or (rule_id == check_id): + rules.append(rule_id) + return rules def order_rules(self): """ @@ -70,13 +78,23 @@ def order_rules(self): Returns: (list): ordered list of rules """ + ordered_rules = [] ordered_check_list = [] - keys = list(self.rule_mapping.keys()) - keys += list(self.rules_override.keys()) - for rule_id in set(keys): - rule = self.rules_override.get( - rule_id - ) or self.rule_mapping.get(rule_id) - self._add_to_list(rule_id, rule, ordered_check_list) - - return ordered_check_list + + for rule_id, rule in self.rule_mapping.items(): + check_id = rule.get("check_id") or rule_id + if check := self.check_list.get(check_id): + dependencies = self.get_all_dependencies(rule, check) + # First add dependencies and their dependencies and so on + self.dependencies_ordering(dependencies, ordered_check_list) + # Then add self + Scheduler.append_if_not_exist(check_id, ordered_check_list) + else: + print(f"Missing entry for {check_id} in `checks.json`") + + for dependency in ordered_check_list: + ordered_rules.extend( + self._find_rule_ids_based_on_check_id(dependency) + ) + + return ordered_rules diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index 83881638..5d5d3319 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -43,6 +43,10 @@ def health_and_status_check(text_with_urls): Returns: (dict) An object with the validity of the check and the instance/results """ + + def status_code_from_request(url): + return requests.get(url, timeout=10).status_code + results = [] validity = True @@ -64,11 +68,11 @@ def health_and_status_check(text_with_urls): if not url.startswith("http"): url = f"http://{url}" try: - response_code = requests.get(url).status_code + response_code = status_code_from_request(url) if response_code == 200: if url.startswith("http://"): secure_url = url.replace("http://", "https://") - if requests.get(secure_url).status_code == 200: + if status_code_from_request(secure_url) == 200: result = {"url": url, "error": "The URL is secure. Please use 'https' instead of 'http'."} else: continue diff --git a/pyQuARC/schemas/rule_mapping.json b/pyQuARC/schemas/rule_mapping.json index 2cdd06c4..6c190d13 100644 --- a/pyQuARC/schemas/rule_mapping.json +++ b/pyQuARC/schemas/rule_mapping.json @@ -502,16 +502,6 @@ "MetadataDates/Date?Type=CREATE" ] }, - { - "fields": [ - "MetadataDates/Date" - ] - }, - { - "fields": [ - "DataDates/Date" - ] - }, { "fields": [ "MetadataDates/Date?Type=UPDATE" @@ -4043,7 +4033,7 @@ ], "dependencies": [ [ - "datetime_format_check", + "date_or_datetime_format_check", "DIF/Temporal_Coverage/Range_DateTime/Ending_Date_Time" ] ] @@ -4057,16 +4047,11 @@ ], "dependencies": [ [ - "datetime_format_check", + "date_or_datetime_format_check", "TemporalExtents/RangeDateTimes/EndingDateTime" ] ] } - ], - "dependencies": [ - [ - "date_or_datetime_format_check" - ] ] }, "severity": "warning", @@ -4429,12 +4414,37 @@ "umm-c": [ { "fields": [ - "MetadataDates/Date" + "MetadataDates/Date?Type=CREATE" + ] + }, + { + "fields": [ + "MetadataDates/Date?Type=UPDATE" + ] + }, + { + "fields": [ + "MetadataDates/Date?Type=DELETE" + ] + }, + { + "fields": [ + "MetadataDates/Date?Type=REVIEW" ] }, { "fields": [ - "DataDates/Date" + "DataDates/Date?Type=CREATE" + ] + }, + { + "fields": [ + "DataDates/Date?Type=UPDATE" + ] + }, + { + "fields": [ + "DataDates/Date?Type=DELETE" ] } ], From 814074fa79acab127225675317390acfc3292670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 21 Jul 2022 12:10:08 -0500 Subject: [PATCH 256/261] Update `README.md` --- README.md | 225 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 126 insertions(+), 99 deletions(-) diff --git a/README.md b/README.md index 43487e0a..422fee35 100644 --- a/README.md +++ b/README.md @@ -28,15 +28,15 @@ The CMR is designed around its own metadata standard called the [Unified Metadat * UMM-T (Tool metadata) -**Currently, pyQuARC only supports ECHO10 and DIF10 collection-level metadata. Support for additional metadata standards will continue to be added in the coming months.** When completed, pyQuARC will support the DIF10 (collection only), ECHO10 (collection and granule), UMM-C, and UMM-G standards. At this time, there are no plans to add ISO 19115 or UMM-S/T specific checks. **Additionally, the output messages pyQuARC currently displays should be taken with a grain of salt. There is still testing and clean-up work to be done.** +pyQuARC supports DIF10 (collection only), ECHO10 (collection and granule), UMM-C, and UMM-G standards. At this time, there are no plans to add ISO 19115 or UMM-S/T specific checks. **Additionally, the output messages pyQuARC currently displays should be taken with a grain of salt. There is still testing and clean-up work to be done.** **For inquiries, please email: jeanne.leroux@nsstc.uah.edu** ## pyQuARC as a Service (QuARC) -QuARC is pyQuARC deployed as a service and can be found here: https://quarc.nasa-impact.net/docs/ +QuARC is pyQuARC deployed as a service and can be found here: https://quarc.nasa-impact.net/docs/. -QuARC is still in beta but is regularly synced with the latest version of pyQuARC on GitHub. +QuARC is still in beta but is regularly synced with the latest version of pyQuARC on GitHub. Fully cloud-native, the architecture diagram of QuARC is shown below: ![QuARC](https://user-images.githubusercontent.com/17416300/179866276-7c025699-01a1-4d3e-93cd-50e12c5a5ec2.png) @@ -79,120 +79,135 @@ While the pyQuARC base package is currently managed by the ARC team, the long te **Run `main.py`:** -``` +```plaintext ▶ python pyQuARC/main.py -h -usage: main.py [-h] [--query QUERY | --concept_ids CONCEPT_IDS [CONCEPT_IDS ...]] [--file FILE | --fake FAKE] [--format [FORMAT]] +usage: main.py [-h] [--query QUERY | --concept_ids CONCEPT_IDS [CONCEPT_IDS ...]] [--file FILE | --fake FAKE] [--format [FORMAT]] [--cmr_host [CMR_HOST]] + [--version [VERSION]] -arguments: - -h, --help show this help message and exit - --query QUERY CMR query URL. +optional arguments: + -h, --help Show this help message and exit + --query QUERY CMR query URL. --concept_ids CONCEPT_IDS [CONCEPT_IDS ...] - List of concept IDs. - --file FILE Path to the test file, either absolute or relative to the root dir. - --fake FAKE Use a fake content for testing. - --format [FORMAT] The metadata format (currently supported: 'echo10' and 'dif10') + List of concept IDs. + --file FILE Path to the test file, either absolute or relative to the root dir. + --fake FAKE Use a fake content for testing. + --format [FORMAT] The metadata format. Choices are: echo-c (echo10 collection), echo-g (echo10 granule), dif10 (dif10 collection), umm-c (umm-json collection), + umm-g (umm-json granules) + --cmr_host [CMR_HOST] The cmr host base url. Default is: https://cmr.earthdata.nasa.gov + --version [VERSION] The revision version of the collection. Default is the latest version. ``` To test a local file, use the `--file` argument. Give it either an absolute file path or a file path relative to the project root directory. Example: -`▶ python pyQuARC/main.py --file "tests/fixtures/test_cmr_metadata.echo10"` +``` +▶ python pyQuARC/main.py --file "tests/fixtures/test_cmr_metadata.echo10" +``` or -`▶ python pyQuARC/main.py --file "/Users/batman/projects/pyQuARC/tests/fixtures/test_cmr_metadata.echo10"` +``` +▶ python pyQuARC/main.py --file "/Users/batman/projects/pyQuARC/tests/fixtures/test_cmr_metadata.echo10" +``` ### Adding a custom rule To add a custom rule, follow the following steps: - - **Add an entry to the `schemas/rule_mapping.json` file in the form:** -``` -{ - "rule_id": "", - "rule_name": "", - "fields_to_apply": [ - { - "fields": [ - "", - "", - "", - "", - "", - ], - "relation": "relation_between_the_fields_if_any", - "dependencies": [ - [ - "", - "" - ] - ] - }, - - { - "fields": [ - "", - "", - "", - "", - "", - ], - "relation": "relation_between_the_fields_if_any" - } - ], - "data" : [ ], - "check_id": "< one of the available checks, see CHECKS.md, or custom check if you are a developer>" -} + +```json +"rule_id": "": { + "rule_name": "", + "fields_to_apply": { + "": { + "fields": [ + "", + "", + "", + "", + "", + ], + "relation": "relation_between_the_fields_if_any", + "dependencies": [ + [ + "", + "" + ] + ] + }, + "echo-g": { + "fields": [ + "", + "", + "", + "", + "", + ], + "relation": "relation_between_the_fields_if_any", + "data": [ "" ] + } + }, + "data" : [ "" ], + "check_id": "< one of the available checks, see CHECKS.md, or custom check if you are a developer>" +} ``` An example: -``` -{ - "rule_id": "date_compare", - "rule_name": "Data Update Time Logic Check", - "fields_to_apply": [ - { - "fields": [ - "Collection/InsertTime", - "Collection/LastUpdate" - ], - "relation": "lte", - "dependencies": [ - [ - "datetime_format_check", - "Collection/InsertTime" - ], - [ - "datetime_format_check", - "Collection/LastUpdate" - ] - ] - }, - { - "fields": [ - "Collection/Temporal/RangeDateTime/BeginningDateTime", - "Collection/Temporal/RangeDateTime/EndingDateTime" - ], - "relation": "lte" - } - ], - "data": [], - "check_id": "date_compare" +```json +"data_update_time_logic_check": { + "rule_name": "Data Update Time Logic Check", + "fields_to_apply": { + "echo-c": [ + { + "fields": [ + "Collection/LastUpdate", + "Collection/InsertTime" + ], + "relation": "gte" + } + ], + "echo-g": [ + { + "fields": [ + "Granule/LastUpdate", + "Granule/InsertTime" + ], + "relation": "gte" + } + ], + "dif10": [ + { + "fields": [ + "DIF/Metadata_Dates/Data_Last_Revision", + "DIF/Metadata_Dates/Data_Creation" + ], + "relation": "gte", + "dependencies": [ + [ + "date_or_datetime_format_check" + ] + ] + } + ] + }, + "severity": "info", + "check_id": "datetime_compare" }, ``` -`data` is any external data that you want to pass to the check. For example, for a `controlled_keywords_check`, it would be the controlled keywords list: -``` +`data` is any external data that you want to pass to the check. For example, for a `controlled_keywords_check`, it would be the controlled keywords list: +```json "data": [ ["keyword1", "keyword2"] ] ``` + `check_id` is the id of the corresponding check from `checks.json`. It'll usually be one of the available checks. An exhaustive list of all the available checks can be found in [CHECKS.md](./CHECKS.md). **If you're writing your own custom check to `schemas/checks.json`:** Add an entry in the format: -``` + +```json "": { "data_type": "", "check_function": "", @@ -211,7 +226,7 @@ The `check_function` should be either one of the available functions, or your ow An example: -``` +```json "date_compare": { "data_type": "datetime", "check_function": "compare", @@ -227,20 +242,22 @@ An example: Locate the validator file based on the `data_type` of the check in `code/` directory. It is in the form: `_validator.py`. Example: `string_validator.py`, `url_validator.py`, etc. -Write a `@staticmethod` member method in the class for that particular check. See examples in the file itself. The return value should be in the format: -``` +Write a `@staticmethod` member method in the class for that particular check. See examples in the file itself. The return value should be in the format: + +```json { "valid": , "value": } ``` + You can re-use any functions that are already there to reduce redundancy. **Adding output messages to checks**: Add an entry to the `schemas/check_messages_override.json` file like this: -``` +```json { "check_id": "", "message": { @@ -255,8 +272,10 @@ Add an entry to the `schemas/check_messages_override.json` file like this: "remediation": "" } ``` + An example: -``` + +```json { "check_id": "abstract_length_check", "message": { @@ -275,7 +294,8 @@ An example: An example: Suppose you have a check function: -``` + +```python @staticfunction def is_true(value1, value2): return { @@ -283,14 +303,17 @@ def is_true(value1, value2): "value": [value1, value2] } ``` + And a message: -``` + +```json ... "failure": "The values `{}` and `{}` do not amount to a true value", ... ``` Then, if the check function receives input `value1=0` and `value2=1`, the output message will be: -``` + +```plaintext The values 0 and 1 do not amount to a true value ``` @@ -304,7 +327,8 @@ The values 0 and 1 do not amount to a true value **Install package:** `python setup.py install` **To check if the package was installed correctly:** -``` + +```python ▶ python >>> from pyQuARC import ARC >>> validator = ARC(fake=True) @@ -313,7 +337,8 @@ The values 0 and 1 do not amount to a true value ``` **To provide locally installed file:** -``` + +```python ▶ python >>> from pyQuARC import ARC >>> validator = ARC(file_path="") @@ -322,7 +347,8 @@ The values 0 and 1 do not amount to a true value ``` **To provide rules for new fields or override:** -``` + +```python ▶ cat rule_override.json { "data_update_time_logic_check": { @@ -363,7 +389,8 @@ The values 0 and 1 do not amount to a true value **To provide custom messages for new or old fields:** -``` + +```python ▶ cat messages_override.json { "data_update_time_logic_check": { From eeec858032549b1daac942e8fbdec1909761c25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 21 Jul 2022 12:10:26 -0500 Subject: [PATCH 257/261] Update messages in arg parser --- pyQuARC/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyQuARC/main.py b/pyQuARC/main.py index bfde702c..810bc006 100644 --- a/pyQuARC/main.py +++ b/pyQuARC/main.py @@ -273,14 +273,14 @@ def display_results(self): action="store", nargs="?", type=str, - help=f"The metadata format (currently supported: {', '.join(SUPPORTED_FORMATS)})", + help=f"The metadata format. Choices are: echo-c (echo10 collection), echo-g (echo10 granule), dif10 (dif10 collection), umm-c (umm-json collection), umm-g (umm-json granules)", ) parser.add_argument( "--cmr_host", action="store", nargs="?", type=str, - help="The cmr host to use. Default is: https://cmr.earthdata.nasa.gov", + help="The cmr host base url. Default is: https://cmr.earthdata.nasa.gov", ) parser.add_argument( "--version", From c141606b9cfbca07b4da46bd9c59bb79c5c5fa4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 21 Jul 2022 13:12:16 -0500 Subject: [PATCH 258/261] Update the list of checks available --- CHECKS.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CHECKS.md b/CHECKS.md index 08d20558..dda3c48f 100644 --- a/CHECKS.md +++ b/CHECKS.md @@ -77,6 +77,14 @@ Checks if the doi provided resolves to a valid document. Checks if one of the given fields is populated. +#### `uniqueness_check` + +Checks if the field values are unique. + +#### `count_check` + +Checks if the field value that is a count of fields matches the actual count of the fields. + ### Miscellaneous Checks #### `bounding_coordinate_logic_check` @@ -144,7 +152,7 @@ Check to make sure that an OPeNDAP access URL is not provided in the `Online Acc Check to make sure the fields aren't populated like this: -``` +```plaintext Collection/Contacts/Contact/ContactPersons/ContactPerson/FirstName: "User" Collection/Contacts/Contact/ContactPersons/ContactPerson/MiddleName: "null" Collection/Contacts/Contact/ContactPersons/ContactPerson/LastName: "Services" From 6456fa990cf812849b6a6d598f2ca7a135e15346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 21 Jul 2022 13:12:36 -0500 Subject: [PATCH 259/261] Update `CHANGELOG.md` --- CHANGELOG.md | 128 +++++++++++++++++++++++++++++---------------------- 1 file changed, 73 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1114339..104e167e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,60 +2,69 @@ ## v1.2.0 -- Added support for [UMM-JSON](https://earthdata.nasa.gov/esdis/esco/standards-and-references/eso-umm-information) collection level metadata +- Added support for ECHO10 Granule, UMM-G (UMM-JSON Granule) and UMM-C (UMM-JSON Collection) metadata +- Added support for custom CMR host - Added support for some UMM fields that look like the following: -```json -"ContactMechanisms": [ - { - "Type": "Telephone", - "Value": "605-594-6116" - }, - { - "Type": "U.S. toll free", - "Value": "866-573-3222" - }, - { - "Type": "Email", - "Value": "lpdaac@usgs.gov" - } -] -``` - -To specify the "Email" field, in the `rule_mapping`, a user would put in `ContactMechanisms/Value?Type=Email` as the field. - + ```json + "ContactMechanisms": [ + { + "Type": "Telephone", + "Value": "605-594-6116" + }, + { + "Type": "U.S. toll free", + "Value": "866-573-3222" + }, + { + "Type": "Email", + "Value": "lpdaac@usgs.gov" + } + ] + ``` + + To specify the "Email" field, in the `rule_mapping`, a user would put in `ContactMechanisms/Value?Type=Email` as the field. - All the field specified in a datetime check that involves comparison should have a corresponding `datetime_format_check` entry, otherwise the check won't run - Added support for `data` specific to format type. This will take precedence over the generic `data`. Example: -```json -"get_data_url_check": { - "rule_name": "GET DATA URL check", - "fields_to_apply": { - "dif10": [ - { - "fields": [ - "DIF/Related_URL" - ], - "data": [ - ["URL_Content_Type", "Type"] - ] - } + ```json + "get_data_url_check": { + "rule_name": "GET DATA URL check", + "fields_to_apply": { + "dif10": [ + { + "fields": [ + "DIF/Related_URL" + ], + "data": [ + ["URL_Content_Type", "Type"] + ] + } + ], + "umm-json": [ + { + "fields": [ + "RelatedUrls" + ] + } + ] + }, + "data": [ + ["Type"] ], - "umm-json": [ - { - "fields": [ - "RelatedUrls" - ] - } - ] + "severity": "error", + "check_id": "get_data_url_check" }, - "data": [ - ["Type"] - ], - "severity": "error", - "check_id": "get_data_url_check" -}, -``` + ``` + +- Prioritized field dependencies to check dependencies (dependencies from fields take precedence over dependencies from data) +- Added collection `version` to collection datetime validation with granules for accuracy +- Allowed DIF10 datetime fields to support ISO Date (not just ISO Datetime) +- Generalized and renamed `datetime_compare` check to `date_compare` +- Updated auto GCMD keywords downloader to use the new GCMD url +- Addded `pyquarc_errors` to the response, which will contain any errors that were thrown as exceptions during validation +- Added checks that validate granule fields against the corresponding collection fields + ### List of added and updated checks @@ -112,15 +121,24 @@ To specify the "Email" field, in the `rule_mapping`, a user would put in `Contac - Chrono Unit GCMD Check - Platform Type Presence Check - Horizontal Data Resolution Unit Controlled Vocabulary Check +- Sensor number check +- Data Center Shortname GCMD Check +- Characteristics Data Type Presence Check +- Platform Type Presence Check +- Platform Longname Presence Check +- Granule Platform Short Name Check +- Horizontal Data Resolution Unit Controlled Vocabulary Check +- Periodic Duration Unit Check +- URL Description Uniqueness Check +- Online Resource Description Uniqueness Check +- Online Access Description Uniqueness Check +- Metadata Update Time Logic Check +- Granule Single Date Time Check +- Granule Project Short Name Check +- Granule Sensor Short Name Check +- Validate Granule Data Format Against Collection Check +- Granule Data Format Presence Check -## v1.1.6 - -- Prioritized field dependencies to check dependencies -- Added collection `version` to collection datetime validation with granules for accuracy -- Allowed DIF10 datetime fields to support ISO Date (not just ISO Datetime) -- Generalized and renamed `datetime_compare` check to `date_compare` -- Updated auto GCMD keywords downloader to use the new GCMD url -- Added sensor number check ## v1.1.5 From 65ca4e0fa6d795f9a205f8908a252d52c6ab4a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 21 Jul 2022 13:22:45 -0500 Subject: [PATCH 260/261] Refactor to use list comprehension --- pyQuARC/code/scheduler.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pyQuARC/code/scheduler.py b/pyQuARC/code/scheduler.py index ad69dacc..f66e7e11 100644 --- a/pyQuARC/code/scheduler.py +++ b/pyQuARC/code/scheduler.py @@ -65,11 +65,9 @@ def _find_rule_ids_based_on_check_id(self, check_id): Returns: list: list of all the rule_ids that are based on the check_id """ - rules = [] - for rule_id, rule in self.rule_mapping.items(): - if (rule.get("check_id") == check_id) or (rule_id == check_id): - rules.append(rule_id) - return rules + return [ + rule_id for rule_id, rule in self.rule_mapping.items() if (rule.get("check_id") == check_id) or (rule_id == check_id) + ] def order_rules(self): """ From 82d77a2580e6807ba8d1847469236b682a6936de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cslesaad=E2=80=9D?= Date: Thu, 21 Jul 2022 13:22:59 -0500 Subject: [PATCH 261/261] Add comment for timeout choice --- pyQuARC/code/url_validator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyQuARC/code/url_validator.py b/pyQuARC/code/url_validator.py index 5d5d3319..caccd732 100644 --- a/pyQuARC/code/url_validator.py +++ b/pyQuARC/code/url_validator.py @@ -45,6 +45,7 @@ def health_and_status_check(text_with_urls): """ def status_code_from_request(url): + # timeout = 10 seconds, to allow for slow but not invalid connections return requests.get(url, timeout=10).status_code results = []