diff --git a/src/main/resources/xslt/manuscript2oai_pica_h_xml.xsl b/src/main/resources/xslt/manuscript2oai_pica_h_xml.xsl index 33dc7b9efca9ba1dd9e43e91581e0294c55d074f..63d8266d83a3510450186d2bb18078998d293b5a 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 7f01fcc1a4018a4ec0aaaa0646b1d0901455095b..c5d95aae331664308c14608ac1ba8f522f7d7720 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",