From 1759b4d4aa27a7d31648c89ecd71bbeff571c9f6 Mon Sep 17 00:00:00 2001 From: LUBAC Date: Thu, 23 Apr 2026 10:39:02 +0200 Subject: [PATCH 1/4] deactivate battery parameters checks --- file_checker_exec/pom.xml | 2 +- .../validators/ArgoMetadataFileValidator.java | 5 +- ...alidateBatteryParamsCheckInMetaFileIT.java | 66 ++++++++++--------- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/file_checker_exec/pom.xml b/file_checker_exec/pom.xml index eee2532..c6d3623 100644 --- a/file_checker_exec/pom.xml +++ b/file_checker_exec/pom.xml @@ -4,7 +4,7 @@ 4.0.0 fr.ifremer file_checker_exec - 3.0.1 + 3.0.2 Argo NetCDF file format checker diff --git a/file_checker_exec/src/main/java/fr/coriolis/checker/validators/ArgoMetadataFileValidator.java b/file_checker_exec/src/main/java/fr/coriolis/checker/validators/ArgoMetadataFileValidator.java index cfd3e64..5db67f1 100644 --- a/file_checker_exec/src/main/java/fr/coriolis/checker/validators/ArgoMetadataFileValidator.java +++ b/file_checker_exec/src/main/java/fr/coriolis/checker/validators/ArgoMetadataFileValidator.java @@ -151,7 +151,10 @@ public boolean validateData(boolean ckNulls) throws IOException { validateOptionalParams(); validateConfigMission(); validateConfigParams(); - validateBattery(); + // 04/2026 V3.0.2 : Battery parameters's checks are deactivated for the moment + // as majority of files was not compliants. More time is given to DACs. But + // should be reactivated in the coming months. +// validateBattery(); } diff --git a/file_checker_exec/src/test/java/fr/coriolis/checker/e2etests/validateBatteryParamsCheckInMetaFileIT.java b/file_checker_exec/src/test/java/fr/coriolis/checker/e2etests/validateBatteryParamsCheckInMetaFileIT.java index 040f2aa..8bf72a0 100644 --- a/file_checker_exec/src/test/java/fr/coriolis/checker/e2etests/validateBatteryParamsCheckInMetaFileIT.java +++ b/file_checker_exec/src/test/java/fr/coriolis/checker/e2etests/validateBatteryParamsCheckInMetaFileIT.java @@ -44,35 +44,41 @@ void fileChecker_shouldAcceptMetaFile_WhenBatteryPacksBadOrEmpty(String fileName } - @Tag(TEST_DIR_NAME) - @ParameterizedTest(name = "{0} from dac {1} should have warning {2}") - @CsvSource(delimiter = '|', value = { - "5907141_meta_bad-type.nc|coriolis|BATTERY_TYPE[1]: Invalid type: '{BAD}' *** WILL BECOME AN ERROR ***", - "5907141_meta_bad-Manufacturer.nc|coriolis|BATTERY_TYPE[1]: Invalid manufacturer: '{BAD}' *** WILL BECOME AN ERROR ***", - "5907141_meta_incoherent_type.nc|coriolis|Inconsistent battery's type in BATTERY_TYPE[1] and BATTERY_PACKS[1]. BATTERY_TYPE's type ={Lithium}, BATTERY_PACKS's type = {Hyb}", - "5907141_meta_incoherent_type_second_pack.nc|coriolis|Inconsistent battery's type in BATTERY_TYPE[2] and BATTERY_PACKS[2]. BATTERY_TYPE's type ={Lithium}, BATTERY_PACKS's type = {Alk}" }) - void fileChecker_ShouldRaiseWarning_WhenBadBatteryType(String fileName, String dac, String warningMessage) - throws IOException, InterruptedException { - TestsUtils.e2eTestWarningPresence(fileName, dac, warningMessage, TEST_DIR_NAME); - } - - @Tag(TEST_DIR_NAME) - @ParameterizedTest(name = "{0} from dac {1} should not have warning") - @CsvSource(delimiter = '|', value = { "5907141_meta_good_batteryType.nc|coriolis", }) - void fileChecker_ShouldNotRaiseWarning_WhenBatteryParamGood(String fileName, String dac) - throws IOException, InterruptedException { - TestsUtils.e2eTestWarningAbsence(fileName, dac, TEST_DIR_NAME); - } - - @Tag(TEST_DIR_NAME) - @ParameterizedTest(name = "{0} from dac {1} should have warning {2}") - @CsvSource(delimiter = '|', value = { - "5907141_meta_BATTERY_PACKS_bad-size.nc|coriolis|BATTERY_PACKS[1]: Invalid style of battery: '{X}' *** WILL BECOME AN ERROR ***", - "5907141_meta_BATTERY_PACKS_bad-type.nc|coriolis|BATTERY_PACKS[1]: Invalid type: '{BAD}' *** WILL BECOME AN ERROR ***", - "5907141_meta_Wrong-number-Battery-Packs.nc|coriolis|Number of BATTERY_TYPES {1} != number of BATTERY_PACKS {2} *** WILL BECOME AN ERROR ***" }) - void fileChecker_ShouldRaiseWarning_WhenBadBatteryPacks(String fileName, String dac, String warningMessage) - throws IOException, InterruptedException { - TestsUtils.e2eTestWarningPresence(fileName, dac, warningMessage, TEST_DIR_NAME); - } + /* + * 04/26 , v3.0.2 : this e2e tests are deactivated as the Battery checks are + * temporary deactivated. TO DO : The following should be decommented when the + * battery checks are enabled agin in the coming months. + */ + +// @Tag(TEST_DIR_NAME) +// @ParameterizedTest(name = "{0} from dac {1} should have warning {2}") +// @CsvSource(delimiter = '|', value = { +// "5907141_meta_bad-type.nc|coriolis|BATTERY_TYPE[1]: Invalid type: '{BAD}' *** WILL BECOME AN ERROR ***", +// "5907141_meta_bad-Manufacturer.nc|coriolis|BATTERY_TYPE[1]: Invalid manufacturer: '{BAD}' *** WILL BECOME AN ERROR ***", +// "5907141_meta_incoherent_type.nc|coriolis|Inconsistent battery's type in BATTERY_TYPE[1] and BATTERY_PACKS[1]. BATTERY_TYPE's type ={Lithium}, BATTERY_PACKS's type = {Hyb}", +// "5907141_meta_incoherent_type_second_pack.nc|coriolis|Inconsistent battery's type in BATTERY_TYPE[2] and BATTERY_PACKS[2]. BATTERY_TYPE's type ={Lithium}, BATTERY_PACKS's type = {Alk}" }) +// void fileChecker_ShouldRaiseWarning_WhenBadBatteryType(String fileName, String dac, String warningMessage) +// throws IOException, InterruptedException { +// TestsUtils.e2eTestWarningPresence(fileName, dac, warningMessage, TEST_DIR_NAME); +// } +// +// @Tag(TEST_DIR_NAME) +// @ParameterizedTest(name = "{0} from dac {1} should not have warning") +// @CsvSource(delimiter = '|', value = { "5907141_meta_good_batteryType.nc|coriolis", }) +// void fileChecker_ShouldNotRaiseWarning_WhenBatteryParamGood(String fileName, String dac) +// throws IOException, InterruptedException { +// TestsUtils.e2eTestWarningAbsence(fileName, dac, TEST_DIR_NAME); +// } +// +// @Tag(TEST_DIR_NAME) +// @ParameterizedTest(name = "{0} from dac {1} should have warning {2}") +// @CsvSource(delimiter = '|', value = { +// "5907141_meta_BATTERY_PACKS_bad-size.nc|coriolis|BATTERY_PACKS[1]: Invalid style of battery: '{X}' *** WILL BECOME AN ERROR ***", +// "5907141_meta_BATTERY_PACKS_bad-type.nc|coriolis|BATTERY_PACKS[1]: Invalid type: '{BAD}' *** WILL BECOME AN ERROR ***", +// "5907141_meta_Wrong-number-Battery-Packs.nc|coriolis|Number of BATTERY_TYPES {1} != number of BATTERY_PACKS {2} *** WILL BECOME AN ERROR ***" }) +// void fileChecker_ShouldRaiseWarning_WhenBadBatteryPacks(String fileName, String dac, String warningMessage) +// throws IOException, InterruptedException { +// TestsUtils.e2eTestWarningPresence(fileName, dac, warningMessage, TEST_DIR_NAME); +// } } From 16224f81ce6f6e9783a575b079828c24d09ea11e Mon Sep 17 00:00:00 2001 From: LUBAC Date: Thu, 23 Apr 2026 11:32:53 +0200 Subject: [PATCH 2/4] fix deprecated entry before valid regex entry in R18 & R14 --- .../checker/specs/ArgoConfigTechParam.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/file_checker_exec/src/main/java/fr/coriolis/checker/specs/ArgoConfigTechParam.java b/file_checker_exec/src/main/java/fr/coriolis/checker/specs/ArgoConfigTechParam.java index e203546..4870c4a 100644 --- a/file_checker_exec/src/main/java/fr/coriolis/checker/specs/ArgoConfigTechParam.java +++ b/file_checker_exec/src/main/java/fr/coriolis/checker/specs/ArgoConfigTechParam.java @@ -350,15 +350,6 @@ private ArgoConfigTechParamMatch findParam(String name, HashSet activeLi } } - if (deprecatedList != null) { - if (deprecatedList.contains(name)) { - match = new ArgoConfigTechParamMatch(name, true); - - log.debug("findParam: '{}': deprecated literal match", name); - return match; - } - } - // ..did NOT match one of the literal strings // ..check for a regex match @@ -374,6 +365,15 @@ private ArgoConfigTechParamMatch findParam(String name, HashSet activeLi } } + if (deprecatedList != null) { + if (deprecatedList.contains(name)) { + match = new ArgoConfigTechParamMatch(name, true); + + log.debug("findParam: '{}': deprecated literal match", name); + return match; + } + } + if (deprecatedRegex != null) { // log.debug("findParam: checking active regex"); From 358b7825318f6cb914925af0164b858ba83e19ed Mon Sep 17 00:00:00 2001 From: LUBAC Date: Thu, 23 Apr 2026 13:20:19 +0200 Subject: [PATCH 3/4] manual update of NVS tables --- file_checker_spec/NVS/R01.jsonld | 2 +- file_checker_spec/NVS/R08.jsonld | 22 ++++++++++++++++------ file_checker_spec/NVS/R23.jsonld | 11 ++++++++++- file_checker_spec/NVS/R25.jsonld | 6 +++++- file_checker_spec/NVS/R26.jsonld | 12 ++++++++++++ file_checker_spec/NVS/R27.jsonld | 17 ++++++++++++++++- file_checker_spec/NVS/dateOfUpdate.txt | 3 ++- 7 files changed, 62 insertions(+), 11 deletions(-) diff --git a/file_checker_spec/NVS/R01.jsonld b/file_checker_spec/NVS/R01.jsonld index d30227b..914d336 100644 --- a/file_checker_spec/NVS/R01.jsonld +++ b/file_checker_spec/NVS/R01.jsonld @@ -269,7 +269,7 @@ "dce:identifier": "SDN:R01::METAAUX", "pav:version": "1", "skos:notation": "SDN:R01::METAAUX", - "skos:altLabel": "", + "skos:altLabel": "METAAUX", "dc:date": "2024-09-11 11:40:41.0", "owl:versionInfo": "1", "skos:prefLabel": { diff --git a/file_checker_spec/NVS/R08.jsonld b/file_checker_spec/NVS/R08.jsonld index 6bebf73..44578e6 100644 --- a/file_checker_spec/NVS/R08.jsonld +++ b/file_checker_spec/NVS/R08.jsonld @@ -684,9 +684,14 @@ "dc:date": "2023-10-05 14:39:49.0", "skos:altLabel": "836", "skos:notation": "SDN:R08::836", - "skos:broader": { - "@id": "http://vocab.nerc.ac.uk/collection/R23/current/PROVOR_III/" - }, + "skos:broader": [ + { + "@id": "http://vocab.nerc.ac.uk/collection/R23/current/PROVOR_III/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R23/current/PROVOR_III_JUMBO/" + } + ], "pav:version": "2", "dce:identifier": "SDN:R08::836", "pav:hasCurrentVersion": { @@ -702,9 +707,14 @@ }, "dce:identifier": "SDN:R08::843", "pav:version": "1", - "skos:broader": { - "@id": "http://vocab.nerc.ac.uk/collection/R23/current/POPS_PROVOR/" - }, + "skos:broader": [ + { + "@id": "http://vocab.nerc.ac.uk/collection/R23/current/POPS_PROVOR/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R23/current/POPS_NEMO/" + } + ], "skos:notation": "SDN:R08::843", "skos:altLabel": "843", "dc:date": "2020-05-03 20:28:54.0", diff --git a/file_checker_spec/NVS/R23.jsonld b/file_checker_spec/NVS/R23.jsonld index 9ae248b..7d47ce4 100644 --- a/file_checker_spec/NVS/R23.jsonld +++ b/file_checker_spec/NVS/R23.jsonld @@ -99,6 +99,9 @@ }, "skos:related": { "@id": "http://vocab.nerc.ac.uk/collection/R24/current/OPTIMARE/" + }, + "skos:narrower": { + "@id": "http://vocab.nerc.ac.uk/collection/R08/current/843/" }, "@type": "skos:Concept" }, @@ -111,7 +114,7 @@ "dce:identifier": "SDN:R23::PROVOR_III_JUMBO", "pav:version": "1", "skos:notation": "SDN:R23::PROVOR_III_JUMBO", - "skos:altLabel": "", + "skos:altLabel": "PROVOR_III_JUMBO", "dc:date": "2024-09-11 11:40:41.0", "owl:versionInfo": "1", "skos:prefLabel": { @@ -130,6 +133,12 @@ "skos:definition": { "@language": "en", "@value": "PROVOR float with additional battery pack. PLATFORM_ TYPE_ KEY = 108." + }, + "skos:related": { + "@id": "http://vocab.nerc.ac.uk/collection/R24/current/NKE/" + }, + "skos:narrower": { + "@id": "http://vocab.nerc.ac.uk/collection/R08/current/836/" }, "@type": "skos:Concept" }, diff --git a/file_checker_spec/NVS/R25.jsonld b/file_checker_spec/NVS/R25.jsonld index 1ee94ff..53d7be8 100644 --- a/file_checker_spec/NVS/R25.jsonld +++ b/file_checker_spec/NVS/R25.jsonld @@ -83,7 +83,7 @@ }, "owl:versionInfo": "1", "dc:date": "2023-11-24 09:35:13.0", - "skos:altLabel": "" + "skos:altLabel": "CTD_TEMP_CNDC" }, { "@id": "http://vocab.nerc.ac.uk/collection/R25/current/FLUOROMETER_CHLA/", @@ -1059,7 +1059,11 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/RAMSES_ACC/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/OCR504_ICSW/" } + ], "skos:definition": { "@language": "en", diff --git a/file_checker_spec/NVS/R26.jsonld b/file_checker_spec/NVS/R26.jsonld index 0f5d539..35866f6 100644 --- a/file_checker_spec/NVS/R26.jsonld +++ b/file_checker_spec/NVS/R26.jsonld @@ -863,6 +863,9 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/RBR_PRES/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/RBR_CTD/" }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/RBR_ARGO/" @@ -1164,6 +1167,9 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE63_OPTODE/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE83_OPTODE/" }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41CP_V1/" @@ -1272,6 +1278,9 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SATLANTIC_OCR504_ICSW/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/OCR504_ICSW/" }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41CP_V1.9/" @@ -1299,6 +1308,9 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SATLANTIC_OCR504_R10W/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/OCR504_R10W/" }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/C_ROVER/" diff --git a/file_checker_spec/NVS/R27.jsonld b/file_checker_spec/NVS/R27.jsonld index ee675fb..cb60896 100644 --- a/file_checker_spec/NVS/R27.jsonld +++ b/file_checker_spec/NVS/R27.jsonld @@ -95,6 +95,9 @@ "dc:date": "2025-11-18 12:09:41.0", "skos:altLabel": "SBE83_OPTODE", "skos:notation": "SDN:R27::SBE83_OPTODE", + "skos:broader": { + "@id": "http://vocab.nerc.ac.uk/collection/R26/current/SBE/" + }, "pav:version": "2", "dce:identifier": "SDN:R27::SBE83_OPTODE", "pav:hasCurrentVersion": { @@ -124,6 +127,9 @@ "@id": "http://vocab.nerc.ac.uk/collection/R25/current/CTD_TEMP_CNDC/" } ], + "skos:broader": { + "@id": "http://vocab.nerc.ac.uk/collection/R26/current/RBR/" + }, "skos:definition": { "@language": "en", "@value": "A system comprising temperature, conductivity and pressure sensors, manufactured by RBR for moored applications. This cell was not optimized for use on profiling floats, and this was used in only one test deployment. The system supports both spot and continuous sampling modes, with sampling speeds configurable to up to 12 Hz. The depth rating for a standard profile is 2000 dbar, with energy consumption of approximately 700 J." @@ -169,6 +175,9 @@ "@id": "http://vocab.nerc.ac.uk/collection/R25/current/RADIOMETER_UP_RAD412/" } ], + "skos:broader": { + "@id": "http://vocab.nerc.ac.uk/collection/R26/current/SBE/" + }, "skos:definition": { "@language": "en", "@value": "Replaces deprecated term 'http://vocab.nerc.ac.uk/collection/R27/current/SATLANTIC_OCR504_R10W'. A cosine-response, multispectral radiometer configured to measure upwelling radiance in water. Number of channels: 4; field of view: 10 deg (half angle, half maximum); bandwidth range: 400 nm to 865 nm (standard), or 305 nm, 325 nm, 340 nm, 380 nm (UV); sampling rate: 7 Hz - 24 Hz; spectral bandwidth: 10 nm or 20 nm. The instrument was originally developed and manufactured at Satlantic, and was rebranded as a Sea-Bird Scientific product following the company's acquisition by Danaher in 2011." @@ -216,8 +225,14 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R25/current/RADIOMETER_DOWN_IRR490/" - } + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R25/current/RADIOMETER_PAR/" + } ], + "skos:broader": { + "@id": "http://vocab.nerc.ac.uk/collection/R26/current/SBE/" + }, "skos:definition": { "@language": "en", "@value": "Replaces deprecated term 'http://vocab.nerc.ac.uk/collection/R27/current/SATLANTIC_OCR504_ICSW'. A cosine-response, multispectral radiometer configured to measure downwelling irradiance in water. Number of channels: 4; bandwidth range: 400 nm to 865 nm (standard), or 305 nm, 325 nm, 340 nm, 380 nm (UV); sampling rate: 7 Hz - 24 Hz; spectral bandwidth: 10 nm or 20 nm. The instrument was originally developed and manufactured at Satlantic, and was rebranded as a Sea-Bird Scientific product following the company's acquisition by Danaher in 2011." diff --git a/file_checker_spec/NVS/dateOfUpdate.txt b/file_checker_spec/NVS/dateOfUpdate.txt index 4225209..a842c6d 100644 --- a/file_checker_spec/NVS/dateOfUpdate.txt +++ b/file_checker_spec/NVS/dateOfUpdate.txt @@ -1 +1,2 @@ -2026-04-21T09:24:48.256314 \ No newline at end of file +2026-04-21T09:24:48.256314 +manual fixes done on R01, R08, R23, R25, R27 \ No newline at end of file From 0655728160f01ab70b13edb138767f71b6262535 Mon Sep 17 00:00:00 2001 From: LUBAC Date: Thu, 23 Apr 2026 15:07:43 +0200 Subject: [PATCH 4/4] manual update NVS table with missing entries --- file_checker_spec/NVS/R26.jsonld | 3 ++ file_checker_spec/NVS/R27.jsonld | 54 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/file_checker_spec/NVS/R26.jsonld b/file_checker_spec/NVS/R26.jsonld index 35866f6..70efa48 100644 --- a/file_checker_spec/NVS/R26.jsonld +++ b/file_checker_spec/NVS/R26.jsonld @@ -1101,6 +1101,9 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N_V5.3.4/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N_V5.3.5/" }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41CP_V1.2/" diff --git a/file_checker_spec/NVS/R27.jsonld b/file_checker_spec/NVS/R27.jsonld index cb60896..006c2b8 100644 --- a/file_checker_spec/NVS/R27.jsonld +++ b/file_checker_spec/NVS/R27.jsonld @@ -2684,6 +2684,57 @@ "skos:broader": { "@id": "http://vocab.nerc.ac.uk/collection/R26/current/SBE/" } + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N_V5.3.5/", + "pav:hasVersion": { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N_V5.3.5/1/" + }, + "pav:authoredOn": "2025-04-03 11:54:30.0", + "pav:hasCurrentVersion": { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N_V5.3.5/2/" + }, + "dce:identifier": "SDN:R27::SBE41N_V5.3.5", + "pav:version": "2", + "@type": "skos:Concept", + "skos:related": [ + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R25/current/CTD_PRES/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R25/current/CTD_TEMP/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R25/current/CTD_CNDC/" + } + ], + "skos:definition": { + "@language": "en", + "@value": "A system comprising temperature, conductivity and pressure sensors with pump-controlled, T-C ducted flow, manufactured by Sea-Bir Scientific. The unit is designed for deployment on profiling floats hosting multiple biogeochemical (BGC) sensors. This CTD operates in continuous profiling (CP) mode, thus sampling at 1 Hz during float ascent. Data from all the float's sensors, including the optional bolt-on ones, are integrated in the data stream and transmitted to the float controller when the float reaches the surface. This SBE41N model has firmware version 5.3.5." + }, + "void:inDataset": { + "@id": "http://vocab.nerc.ac.uk/.well-known/void" + }, + "owl:deprecated": "true", + "skos:note": { + "@language": "en", + "@value": "deprecated" + }, + "dc:identifier": "SDN:R27::SBE41N_V5.3.5", + "skos:prefLabel": { + "@language": "en", + "@value": "Sea-Bird Scientific SBE 41N CTD V5.3.5" + }, + "owl:versionInfo": "2", + "dc:date": "2025-04-03 11:54:30.0", + "skos:altLabel": "SBE41N_V5.3.5", + "skos:notation": "SDN:R27::SBE41N_V5.3.5", + "skos:broader": { + "@id": "http://vocab.nerc.ac.uk/collection/R26/current/SBE/" + } }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N/", @@ -6699,6 +6750,9 @@ }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N_V5.3.4/" + }, + { + "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41N_V5.3.5/" }, { "@id": "http://vocab.nerc.ac.uk/collection/R27/current/SBE41CP_V1.2/"