From dceb103fcb210fec64fbb37b4ede320c29474669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Fri, 10 Feb 2023 17:23:37 +0100 Subject: [PATCH] re-add fix for Pica XML handler --- gradle.properties | 2 +- src/main/java/org/xbib/marc/MarcField.java | 6 ++- .../dialects/pica/PicaXMLContentHandler.java | 1 + .../org/xbib/marc/dialects/pica/PicaTest.java | 16 +++++-- .../org/xbib/marc/dialects/pica/DE-1a.pp.xml | 1 - .../xbib/marc/dialects/pica/DE-1a.pp.xml.xml | 47 ++++--------------- 6 files changed, 27 insertions(+), 46 deletions(-) diff --git a/gradle.properties b/gradle.properties index e473f71..a3c90aa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = marc -version = 2.9.19 +version = 2.9.20 org.gradle.warning.mode = ALL diff --git a/src/main/java/org/xbib/marc/MarcField.java b/src/main/java/org/xbib/marc/MarcField.java index 1eba036..2ae95b5 100644 --- a/src/main/java/org/xbib/marc/MarcField.java +++ b/src/main/java/org/xbib/marc/MarcField.java @@ -201,7 +201,11 @@ public class MarcField implements Comparable { if (value == null || value.isEmpty()) { value = getFirstSubfieldValue(" "); } - // still no value? Then it is some exotic like MAB with subfield "a"? + // if no value, maybe "0" for Pica 003@ $0? + if (value == null || value.isEmpty()) { + value = getFirstSubfieldValue("0"); + } + // still no value? Then it is some exotic like MAB 001 with subfield "a"? if (value == null || value.isEmpty()) { value = getFirstSubfieldValue("a"); } diff --git a/src/main/java/org/xbib/marc/dialects/pica/PicaXMLContentHandler.java b/src/main/java/org/xbib/marc/dialects/pica/PicaXMLContentHandler.java index 89c23cd..56b96bb 100644 --- a/src/main/java/org/xbib/marc/dialects/pica/PicaXMLContentHandler.java +++ b/src/main/java/org/xbib/marc/dialects/pica/PicaXMLContentHandler.java @@ -183,6 +183,7 @@ public class PicaXMLContentHandler extends MarcContentHandler implements PicaCon default: throw new IllegalArgumentException("unknown end element: " + uri + " " + localName + " " + qName); } + content.setLength(0); } @Override diff --git a/src/test/java/org/xbib/marc/dialects/pica/PicaTest.java b/src/test/java/org/xbib/marc/dialects/pica/PicaTest.java index cd19ec6..c8e254a 100644 --- a/src/test/java/org/xbib/marc/dialects/pica/PicaTest.java +++ b/src/test/java/org/xbib/marc/dialects/pica/PicaTest.java @@ -22,6 +22,7 @@ import org.xbib.marc.MarcListener; import org.xbib.marc.MarcXchangeConstants; import org.xbib.marc.StreamMatcher; import org.xbib.marc.label.RecordLabel; +import org.xbib.marc.transformer.value.MarcValueTransformers; import org.xbib.marc.xml.MarcXchangeWriter; import java.io.BufferedWriter; @@ -30,6 +31,7 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.text.Normalizer; public class PicaTest { @@ -117,21 +119,27 @@ public class PicaTest { @Test public void testDE1a() throws IOException { - StreamMatcher.fileMatch(getClass(), "DE-1a.pp.xml", ".xml", (inputStream, outputStream) -> { + StreamMatcher.xmlMatch(getClass(), "DE-1a.pp.xml", ".xml", (inputStream, outputStream) -> { // we can not simply write MarcXchange out of Pica. We will fix it later. try (MarcXchangeWriter writer = new MarcXchangeWriter(outputStream, true) .setFormat(MarcXchangeConstants.MARCXCHANGE_FORMAT) .setType(MarcXchangeConstants.BIBLIOGRAPHIC_TYPE) ) { PicaXMLContentHandler contentHandler = new PicaXMLContentHandler(); + MarcValueTransformers marcValueTransformers = new MarcValueTransformers(); + marcValueTransformers.setMarcValueTransformer(value -> + Normalizer.normalize(value, Normalizer.Form.NFKC)); contentHandler.setFormat("Pica"); contentHandler.setType("XML"); contentHandler.setMarcListener(writer); - Marc marc = Marc.builder() + Marc.builder() + .disableControlFields() .setInputStream(inputStream) .setContentHandler(contentHandler) - .build(); - marc.xmlReader().parse(); + .setMarcValueTransformers(marcValueTransformers) + .build() + .xmlReader() + .parse(); } }); } diff --git a/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml b/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml index 54aa795..51f27ec 100644 --- a/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml +++ b/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml @@ -1,7 +1,6 @@ - 9006:18-11-99 diff --git a/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml.xml b/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml.xml index 017ace8..7f02361 100644 --- a/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml.xml +++ b/src/test/resources/org/xbib/marc/dialects/pica/DE-1a.pp.xml.xml @@ -1,34 +1,26 @@ 00000 1000000 000 - 9006:18-11-99 - 9006:18-11-99 9006:11-02-20 16:54:10.000 - 16:54:10.000 9999:27-05-05 - 9999:27-05-05 utf8 - utf8 0 - 0 Tw - Tw 009000046 - 009000046 101005-0 @@ -36,43 +28,35 @@ 1a DE-1a SBBPK - SBBPK http://www.staatsbibliothek-berlin.de A - A http://stabikat.de B - B http://staatsbibliothek-berlin.de/service/auskunft/ Online-Auskunft W - W https://staatsbibliothek-berlin.de/vor-ort/opening-hours/ - Öffnungszeiten besonderer Bereiche + Öffnungszeiten besonderer Bereiche W - W SBB-PK, Potsdamer Straße a - a Berlin SBB Haus Potsdamer Str c - c Staatsbibliothek zu Berlin - Preußischer Kulturbesitz, Haus Potsdamer Straße - Staatsbibliothek zu Berlin - Preußischer Kulturbesitz, Haus Potsdamer Straße Potsdamer Str. 33 @@ -81,13 +65,12 @@ 10785 Berlin Mo-Sa 8.00-22.00 - Servicezeiten und Öffnungszeiten besonderer Bereiche s. Link "Öffnungszeiten besonderer Bereiche" + Servicezeiten und Öffnungszeiten besonderer Bereiche s. Link "Öffnungszeiten besonderer Bereiche" 13.37063 52.50771 11000000 j S - S Berlin @@ -96,7 +79,6 @@ Berlin j P - P S @@ -109,23 +91,19 @@ 2 66-333501 info@sbb.spk-berlin.de Auskunft - Auskunft W Benutzung j benutzung.h2@sbb.spk-berlin.de - benutzung.h2@sbb.spk-berlin.de B 3 - B 3 He 201 DE-He201 - DE-He201 H @@ -136,7 +114,6 @@ 07 10 CC0 - CC0 Recht @@ -148,50 +125,42 @@ Handschriften Karten Geistes- und Sozialwissenschaften - Geistes- und Sozialwissenschaften - FID-INTRECHT-DE-1a / FID internationale und interdisziplinäre Rechtsforschung (ab 2014) + FID-INTRECHT-DE-1a / FID internationale und interdisziplinäre Rechtsforschung (ab 2014) FID-ASIEN-DE-1a / FID Asien – CrossAsia (ab 2016) FID-KARTEN-DE-1a / FID Kartographie und Geobasisdaten (ab 2016) FID-SLAW-DE-1a / FID Slawistik (ab 2016) SSG 2 / Rechtswissenschaft (bis einschließlich 2015) - SSG 6,25 / Ost- und Südostasien (bis einschließlich 2015) + SSG 6,25 / Ost- und Südostasien (bis einschließlich 2015) SSG 7,39 / Slawistik (bis einschließlich 2015) - SSG 14,1 / Veröffentlichungen zur Kartographie (bis einschließlich 2015) + SSG 14,1 / Veröffentlichungen zur Kartographie (bis einschließlich 2015) SSG 27 / Parlamentsschriften (bis einschließlich 2015) SSG 28,1 / Topographische Karten (bis einschließlich 2015) - SSG 28,1 / Topographische Karten (bis einschließlich 2015) BER - ÜLV + ÜLV GBV Kalliope l V - V S A - A FZL DE-622 - FZL DE-622 - UNO- und UNESCO-Depositärbibliothek. Übernommene Bibliothek: B 3 (Bibliothek der ehemaligen Preußischen Geologischen Landesanstalt) - UNO- und UNESCO-Depositärbibliothek. Übernommene Bibliothek: B 3 (Bibliothek der ehemaligen Preußischen Geologischen Landesanstalt) + UNO- und UNESCO-Depositärbibliothek. Übernommene Bibliothek: B 3 (Bibliothek der ehemaligen Preußischen Geologischen Landesanstalt) ABZ eingetragen 15062015 DE-601 - DE-601 - ANF2020; DE-1a 30-05-07 L SSG 6,20 K Tel.; ZRB 25-07-13 SSG geprüft, 7.40 gestrichen, sonst ok; ZRB 17-10-13 N EZB-ID (Rol); ZRB 02-11-16 SSG(s) mit 2015 abgeschlossen; ZRB 18-01-17 DE-He201 übernommen; Auftragsbestätigung: 11.02.2020 um 16.03 - ANF2020; DE-1a 30-05-07 L SSG 6,20 K Tel.; ZRB 25-07-13 SSG geprüft, 7.40 gestrichen, sonst ok; ZRB 17-10-13 N EZB-ID (Rol); ZRB 02-11-16 SSG(s) mit 2015 abgeschlossen; ZRB 18-01-17 DE-He201 übernommen; Auftragsbestätigung: 11.02.2020 um 16.03 + ANF2020; DE-1a 30-05-07 L SSG 6,20 K Tel.; ZRB 25-07-13 SSG geprüft, 7.40 gestrichen, sonst ok; ZRB 17-10-13 N EZB-ID (Rol); ZRB 02-11-16 SSG(s) mit 2015 abgeschlossen; ZRB 18-01-17 DE-He201 übernommen; Auftragsbestätigung: 11.02.2020 um 16.03 \ No newline at end of file