From ae7dc487b3abd0a309b0a3e3340883aae493c22c Mon Sep 17 00:00:00 2001 From: Jesper Zedlitz <jesper@zedlitz.de> Date: Mon, 20 Jan 2025 12:08:21 +0100 Subject: [PATCH] 'ignoreSeriesWithoutDistribution' was too lenient. It must only ignore empty series not empty datasets. --- .../opendata/csw2dcat/MDMetadata2Dataset.java | 14 ++++++++++++-- .../d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java b/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java index de58981..dc61715 100644 --- a/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java +++ b/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java @@ -846,6 +846,16 @@ public class MDMetadata2Dataset { } + private boolean isDatasetSeries(Element metadata) { + final Element scopeCode = (Element) metadata.selectSingleNode("gmd:hierarchyLevel/gmd:MD_ScopeCode"); + return scopeCode != null && "series".equals(scopeCode.attributeValue("codeListValue")); + } + + private boolean isDataService(Element metadata) { + final Element scopeCode = (Element) metadata.selectSingleNode("gmd:hierarchyLevel/gmd:MD_ScopeCode"); + return scopeCode != null && "service".equals(scopeCode.attributeValue("codeListValue")); + } + /** * Convert a gmd:MD_Metadata {@link Element} into a DCAT-AP.de compliant dcat:Dataset {@link Resource}. */ @@ -864,7 +874,7 @@ public class MDMetadata2Dataset { final Element scopeCode = (Element) metadata.selectSingleNode("gmd:hierarchyLevel/gmd:MD_ScopeCode"); if (scopeCode == null) { log.warn("MD_Metadata without MD_ScopeCode."); - } else if ("service".equals(scopeCode.attributeValue("codeListValue"))) { + } else if ( isDataService(metadata) ){ return null; } @@ -967,7 +977,7 @@ public class MDMetadata2Dataset { } } - if (settings.ignoreSeriesWithoutDistribution && !dataset.hasProperty(DCAT.distribution)) { + if (settings.ignoreSeriesWithoutDistribution && isDatasetSeries(metadata) && !dataset.hasProperty(DCAT.distribution)) { // Geo series might not have a download option or a couple service (which is totally valid). If configured, // this kind of series will be ignored. dataset.removeProperties(); diff --git a/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml b/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml index 8eeef8a..14c1b76 100644 --- a/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml +++ b/src/test/resources/d3c6c074-4d69-4b1f-9efb-dbd9644f82c0.xml @@ -19,7 +19,7 @@ </gmd:characterSet> <gmd:hierarchyLevel> <gmd:MD_ScopeCode codeList="http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ScopeCode" - codeListValue="dataset">dataset</gmd:MD_ScopeCode> + codeListValue="series">series</gmd:MD_ScopeCode> </gmd:hierarchyLevel> <gmd:contact> <gmd:CI_ResponsibleParty uuid="75C5BEAC-2CB6-49D1-8AFC-CFC6390CECE9"> -- GitLab