From d45e43712e7191a46f31a19483e4405c01bd8545 Mon Sep 17 00:00:00 2001 From: Michael Becker <michael.becker@uni-leipzig.de> Date: Wed, 5 Feb 2025 21:46:49 +0100 Subject: [PATCH] prevent duplicate language codes in 010@ (https://git.sc.uni-leipzig.de/mycore_applications/orient/orient-digital-issues/-/issues/1087) --- .../resources/xslt/manuscript2oai_pica_h_xml.xsl | 12 +++++++++--- .../test/interfaces/kxplus/Manuscript2PICAHTest.java | 11 ++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/resources/xslt/manuscript2oai_pica_h_xml.xsl b/src/main/resources/xslt/manuscript2oai_pica_h_xml.xsl index 33dc7b9..63d8266 100644 --- a/src/main/resources/xslt/manuscript2oai_pica_h_xml.xsl +++ b/src/main/resources/xslt/manuscript2oai_pica_h_xml.xsl @@ -165,11 +165,17 @@ <xsl:template name="pica_010at"> <xsl:param name="metadata_native"/> - <xsl:if test="$metadata_native/def.mss08/mss08[@xml:lang='x-iso639-2']"> + <!-- + https://git.sc.uni-leipzig.de/mycore_applications/orient/orient-digital-issues/-/issues/1087 + some entries in MyMssLanguage have identical ISO codes. Thus, we have to use distinct values + --> + <xsl:variable name="iso_codes" select="distinct-values($metadata_native/def.mss08/mss08[@xml:lang='x-iso639-2'])"/> + + <xsl:if test="count($iso_codes) > 0"> <pica:datafield tag="010@"> - <xsl:for-each select="$metadata_native/def.mss08/mss08[@xml:lang='x-iso639-2']"> + <xsl:for-each select="$iso_codes"> <pica:subfield code="a"> - <xsl:value-of select="text()"/> + <xsl:value-of select="."/> </pica:subfield> </xsl:for-each> </pica:datafield> diff --git a/src/test/java/de/unileipzig/urz/mymss/test/interfaces/kxplus/Manuscript2PICAHTest.java b/src/test/java/de/unileipzig/urz/mymss/test/interfaces/kxplus/Manuscript2PICAHTest.java index 7f01fcc..c5d95aa 100644 --- a/src/test/java/de/unileipzig/urz/mymss/test/interfaces/kxplus/Manuscript2PICAHTest.java +++ b/src/test/java/de/unileipzig/urz/mymss/test/interfaces/kxplus/Manuscript2PICAHTest.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Map; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.is; public class Manuscript2PICAHTest extends MyMssCommonTest { @@ -91,7 +92,8 @@ public class Manuscript2PICAHTest extends MyMssCommonTest { final List<Element> elements = reader.getDatafield(picaRecord, "010@"); assertThat(elements.size(), is(1)); - assertThat(reader.getFirstSubfieldContent(elements.get(0), "a").orElseThrow(), is("ara")); + assertThat(reader.getSubfieldContent(elements.get(0), "a"), + contains("ara", "ira")); } @Test @@ -201,9 +203,12 @@ public class Manuscript2PICAHTest extends MyMssCommonTest { final MCRObject manuscript = new MCRObject(this.manuscript); // set language to LANG0001 which has a x-iso639-2 entry - final MCRMetaClassification lang = new MCRMetaClassification("mss08", 0, null, "MyMssLanguage", "LANG0001"); + final MCRMetaClassification lang1 = new MCRMetaClassification("mss08", 0, null, "MyMssLanguage", "LANG0001"); + final MCRMetaClassification lang2 = new MCRMetaClassification("mss08", 0, null, "MyMssLanguage", "LANG0164"); + final MCRMetaClassification lang3 = new MCRMetaClassification("mss08", 0, null, "MyMssLanguage", "LANG0171"); + manuscript.getMetadata().setMetadataElement( - new MCRMetaElement(MCRMetaClassification.class, "def.mss08", false, true, List.of(lang))); + new MCRMetaElement(MCRMetaClassification.class, "def.mss08", false, true, List.of(lang1, lang2, lang3))); // add a subject with two GND mappings to test for correct export final MCRMetaClassification clazz = new MCRMetaClassification("mss45", 0, null, "MyMssSubjectMatter", -- GitLab