diff --git a/gradle.properties b/gradle.properties index c813568..2da2504 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = org.xbib name = marc -version = 2.9.8 +version = 2.9.9 org.gradle.warning.mode = ALL diff --git a/src/main/java/org/xbib/marc/LightweightMarcRecordAdapter.java b/src/main/java/org/xbib/marc/LightweightMarcRecordAdapter.java index e060d0f..e3a4d26 100644 --- a/src/main/java/org/xbib/marc/LightweightMarcRecordAdapter.java +++ b/src/main/java/org/xbib/marc/LightweightMarcRecordAdapter.java @@ -18,7 +18,7 @@ package org.xbib.marc; public class LightweightMarcRecordAdapter extends MarcRecordAdapter { public LightweightMarcRecordAdapter(MarcRecordListener marcRecordListener) { - super(marcRecordListener, false); + super(marcRecordListener, null); this.builder = Marc.builder().lightweightRecord(); } diff --git a/src/main/java/org/xbib/marc/Marc.java b/src/main/java/org/xbib/marc/Marc.java index a97a426..d76378d 100644 --- a/src/main/java/org/xbib/marc/Marc.java +++ b/src/main/java/org/xbib/marc/Marc.java @@ -52,6 +52,7 @@ import java.io.UncheckedIOException; import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; @@ -664,7 +665,7 @@ public final class Marc { private boolean isLightweightRecord; - private boolean isStableFieldOrder; + private Comparator comparator; private Pattern keyPattern; @@ -1131,8 +1132,8 @@ public final class Marc { return this; } - public Marc.Builder stableFieldOrder() { - this.isStableFieldOrder = true; + public Marc.Builder comparator(Comparator comparator) { + this.comparator = comparator; return this; } @@ -1141,7 +1142,7 @@ public final class Marc { * @return MARC record */ public MarcRecord buildRecord() { - return new MarcRecord(format, type, recordLabel, marcFieldList, isLightweightRecord, isStableFieldOrder); + return new MarcRecord(format, type, recordLabel, marcFieldList, isLightweightRecord, comparator); } /** diff --git a/src/main/java/org/xbib/marc/MarcRecord.java b/src/main/java/org/xbib/marc/MarcRecord.java index 100b37e..753dfba 100644 --- a/src/main/java/org/xbib/marc/MarcRecord.java +++ b/src/main/java/org/xbib/marc/MarcRecord.java @@ -23,6 +23,7 @@ import org.xbib.marc.label.RecordLabel; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedList; @@ -63,13 +64,14 @@ public class MarcRecord implements Map { * @param recordLabel the record label * @param marcFields the MARC field * @param lightweight true if MARC record fields should not be entered into the underlying hash map. + * @param comparator a tag comparator for the underlying map */ public MarcRecord(String format, String type, RecordLabel recordLabel, List marcFields, boolean lightweight, - boolean stable) { + Comparator comparator) { this.format = format; this.type = type; this.recordLabel = recordLabel; @@ -77,7 +79,7 @@ public class MarcRecord implements Map { throw new NullPointerException("record label must not be null"); } this.marcFields = marcFields; - this.delegate = lightweight ? Map.of() : createMapFromMarcFields(stable); + this.delegate = lightweight ? Map.of() : createMapFromMarcFields(comparator); } /** @@ -371,7 +373,11 @@ public class MarcRecord implements Map { } public void rebuildMap() { - this.delegate = createMapFromMarcFields(true); + this.delegate = createMapFromMarcFields(Comparator.naturalOrder()); + } + + public void rebuildFields(Comparator comparator) { + this.marcFields.sort(comparator); } @Override @@ -451,8 +457,8 @@ public class MarcRecord implements Map { } @SuppressWarnings("unchecked") - private Map createMapFromMarcFields(boolean stable) { - Map map = stable ? new TreeMap<>() : new LinkedHashMap<>(); + private Map createMapFromMarcFields(Comparator comparator) { + Map map = comparator!= null ? new TreeMap<>(comparator) : new LinkedHashMap<>(); if (marcFields == null) { return map; } diff --git a/src/main/java/org/xbib/marc/MarcRecordAdapter.java b/src/main/java/org/xbib/marc/MarcRecordAdapter.java index 9320cec..7476271 100644 --- a/src/main/java/org/xbib/marc/MarcRecordAdapter.java +++ b/src/main/java/org/xbib/marc/MarcRecordAdapter.java @@ -17,6 +17,8 @@ package org.xbib.marc; import org.xbib.marc.label.RecordLabel; +import java.util.Comparator; + /** * The Marc record adapter collects Marc field events, collects them in a Marc builder, * and sends collected records to a Marc record listener. This is very handy for @@ -28,15 +30,13 @@ public class MarcRecordAdapter implements MarcListener { protected Marc.Builder builder; - private boolean isStableFieldOrder; + private Comparator comparator; - public MarcRecordAdapter(MarcRecordListener marcRecordListener, boolean isStableFieldOrder) { + public MarcRecordAdapter(MarcRecordListener marcRecordListener, Comparator comparator) { this.marcRecordListener = marcRecordListener; this.builder = Marc.builder(); - this.isStableFieldOrder = isStableFieldOrder; - if (isStableFieldOrder) { - this.builder.stableFieldOrder(); - } + this.comparator = comparator; + this.builder.comparator(comparator); } @Override @@ -64,9 +64,7 @@ public class MarcRecordAdapter implements MarcListener { public void endRecord() { marcRecordListener.record(builder.buildRecord()); builder = Marc.builder(); - if (isStableFieldOrder) { - builder.stableFieldOrder(); - } + builder.comparator(comparator); } @Override diff --git a/src/main/java/org/xbib/marc/xml/MarcContentHandler.java b/src/main/java/org/xbib/marc/xml/MarcContentHandler.java index d699077..24f7813 100644 --- a/src/main/java/org/xbib/marc/xml/MarcContentHandler.java +++ b/src/main/java/org/xbib/marc/xml/MarcContentHandler.java @@ -15,6 +15,7 @@ */ package org.xbib.marc.xml; +import java.util.Comparator; import java.util.HashSet; import org.xbib.marc.MarcField; import org.xbib.marc.MarcListener; @@ -85,7 +86,7 @@ public class MarcContentHandler private final Set validNamespaces; - private boolean isStableFieldOrder; + private Comparator comparator; public MarcContentHandler() { this.recordCounter = new AtomicInteger(); @@ -166,8 +167,8 @@ public class MarcContentHandler return this; } - public MarcContentHandler setStableFieldOrder(boolean stableFieldOrder) { - this.isStableFieldOrder = stableFieldOrder; + public MarcContentHandler setComparator(Comparator comparator) { + this.comparator = comparator; return this; } @@ -254,7 +255,7 @@ public class MarcContentHandler } else { MarcRecord marcRecord = new MarcRecord(getFormat(), getType(), RecordLabel.builder().from(label).build(), - marcFieldList, false, isStableFieldOrder); + marcFieldList, false, comparator); marcRecordListener.record(marcRecord); } } diff --git a/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java b/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java index 0932603..5b9a7e5 100644 --- a/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java +++ b/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java @@ -343,7 +343,7 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, if (exception != null) { return; } - if (field.isControl() && field.getValue() != null) { + if (field.isControl()) { Iterator attrs = Collections.singletonList(eventFactory.createAttribute(TAG_ATTRIBUTE, transform(field.getTag()))).iterator(); @@ -351,6 +351,12 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, String value = field.getValue(); if (value != null && !value.isEmpty()) { xmlEventConsumer.add(eventFactory.createCharacters(transform(value))); + } else { + // the control field is disguised as a data field, try lookup value in first subfield of " " + value = field.getFirstSubfieldValue(" "); + if (value != null && !value.isEmpty()) { + xmlEventConsumer.add(eventFactory.createCharacters(transform(value))); + } } xmlEventConsumer.add(eventFactory.createEndElement(CONTROLFIELD_ELEMENT, namespaces)); } else if (!field.isEmpty()) { @@ -369,9 +375,9 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, // "There is one restriction. A special mode (identifier length = 0) of ISO 2709 operates with // data fields without subfields. In the MarcXchange schema subfields are required, // i.e. identifier length = 0 is not supported." - // We support it! A subfield ID of length 0 will be substituted by "a" + // But we support it! A subfield ID of length 0 will be substituted by blank (" "). if (code.isEmpty()) { - code = "a"; + code = " "; } List subfieldattrs = new LinkedList<>(); subfieldattrs.add(eventFactory.createAttribute(CODE_ATTRIBUTE, transform(code))); @@ -382,9 +388,9 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, } String value = field.getValue(); if (value != null && !value.isEmpty()) { - // if we have data in a datafield, create subfield "a" with data + // if we have data in a datafield, create subfield blank (" ") with data attrs = new LinkedList<>(); - attrs.add(eventFactory.createAttribute(CODE_ATTRIBUTE, "a")); + attrs.add(eventFactory.createAttribute(CODE_ATTRIBUTE, " ")); xmlEventConsumer.add(eventFactory.createStartElement(SUBFIELD_ELEMENT, attrs.iterator(), namespaces)); xmlEventConsumer.add(eventFactory.createCharacters(transform(value))); xmlEventConsumer.add(eventFactory.createEndElement(SUBFIELD_ELEMENT, namespaces)); @@ -444,7 +450,6 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, if (xmlEventConsumer instanceof XMLEventWriter) { ((XMLEventWriter) xmlEventConsumer).flush(); } - afterRecord(); } catch (XMLStreamException e) { handleException(new IOException(e)); } finally { diff --git a/src/test/java/org/xbib/marc/MarcToModsTest.java b/src/test/java/org/xbib/marc/MarcToModsTest.java index d089091..c3ff4a0 100644 --- a/src/test/java/org/xbib/marc/MarcToModsTest.java +++ b/src/test/java/org/xbib/marc/MarcToModsTest.java @@ -131,7 +131,6 @@ public class MarcToModsTest { } }); transformer.transform(source, streamResult); - marcInputStream.close(); xslInputStream.close(); assertThat(out.toByteArray(), CompareMatcher.isIdenticalTo(getClass().getResource("summerland-sax-mods.xml").openStream())); @@ -178,7 +177,6 @@ public class MarcToModsTest { } }); transformer.transform(source, streamResult); - marcInputStream.close(); xslInputStream.close(); assertThat(out.toByteArray(), CompareMatcher.isIdenticalTo(getClass().getResource("summerland-dom-mods.xml").openStream())); diff --git a/src/test/java/org/xbib/marc/MarcXchangeWriterTest.java b/src/test/java/org/xbib/marc/MarcXchangeWriterTest.java index b6b18c8..087c664 100644 --- a/src/test/java/org/xbib/marc/MarcXchangeWriterTest.java +++ b/src/test/java/org/xbib/marc/MarcXchangeWriterTest.java @@ -16,6 +16,7 @@ package org.xbib.marc; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import org.junit.jupiter.api.Test; import org.xbib.marc.transformer.value.MarcValueTransformers; @@ -24,16 +25,33 @@ import org.xmlunit.matchers.CompareMatcher; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; +import java.io.StringWriter; import java.nio.charset.Charset; import java.text.Normalizer; +import java.util.Map; +import java.util.TreeMap; import java.util.zip.GZIPInputStream; public class MarcXchangeWriterTest { + @Test + public void simpleMarcRecordWrite() throws Exception { + Map map = new TreeMap<>(Map.of("001", "123", + "100", Map.of("_", Map.of("a", "Hello World")))); + MarcRecord marcRecord = MarcRecord.from(map); + StringWriter stringWriter = new StringWriter(); + try (MarcXchangeWriter writer = new MarcXchangeWriter(stringWriter)) { + writer.startDocument(); + writer.record(marcRecord); + writer.endDocument(); + } + assertEquals("00000 0000000 000 Hello World123", stringWriter.toString()); + } + @Test public void splitMarcXchange() throws Exception { String s = "IRMARC8.bin"; - InputStream inputStream = getClass().getResource("/org/xbib/marc//" + s).openStream(); + InputStream inputStream = getClass().getResource("/org/xbib/marc/" + s).openStream(); MarcValueTransformers marcValueTransformers = new MarcValueTransformers(); marcValueTransformers.setMarcValueTransformer(value -> Normalizer.normalize(value, Normalizer.Form.NFC)); // fileNamePattern, splitSize, bufferSize, compress, indent @@ -61,7 +79,7 @@ public class MarcXchangeWriterTest { @Test public void splitMarcXchangeCompressed() throws Exception { String s = "IRMARC8.bin"; - InputStream inputStream = getClass().getResource("/org/xbib/marc//" + s).openStream(); + InputStream inputStream = getClass().getResource("/org/xbib/marc/" + s).openStream(); MarcValueTransformers marcValueTransformers = new MarcValueTransformers(); marcValueTransformers.setMarcValueTransformer(value -> Normalizer.normalize(value, Normalizer.Form.NFC)); // fileNamePattern, splitSize, bufferSize, compress, indent diff --git a/src/test/java/org/xbib/marc/dialects/mab/MabTest.java b/src/test/java/org/xbib/marc/dialects/mab/MabTest.java index af3fd76..e97f22f 100644 --- a/src/test/java/org/xbib/marc/dialects/mab/MabTest.java +++ b/src/test/java/org/xbib/marc/dialects/mab/MabTest.java @@ -43,8 +43,11 @@ import org.xml.sax.InputSource; import org.xmlunit.matchers.CompareMatcher; import java.io.InputStream; import java.io.StringWriter; +import java.io.Writer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.regex.Pattern; public class MabTest { @@ -158,6 +161,9 @@ public class MabTest { assertNull(writer.getException()); } sw.close(); + //try (Writer writer = Files.newBufferedWriter(Paths.get("HT016424175-combined.xml"))) { + // writer.write(sw.toString()); + //} assertStream(s, new ByteArrayInputStream(outputStream.toByteArray()), getClass().getResource("HT016424175.xml.combined.txt").openStream()); assertThat(sw.toString(), diff --git a/src/test/java/org/xbib/marc/json/MarcJsonWriterTest.java b/src/test/java/org/xbib/marc/json/MarcJsonWriterTest.java index 898d514..8993cd7 100644 --- a/src/test/java/org/xbib/marc/json/MarcJsonWriterTest.java +++ b/src/test/java/org/xbib/marc/json/MarcJsonWriterTest.java @@ -39,6 +39,7 @@ import org.xbib.marc.xml.MarcContentHandler; import java.io.InputStream; import java.nio.charset.Charset; import java.text.Normalizer; +import java.util.Comparator; import java.util.EnumSet; import java.util.List; import java.util.Map; @@ -65,7 +66,7 @@ public class MarcJsonWriterTest { .setType(MarcXchangeConstants.BIBLIOGRAPHIC_TYPE) ) { Marc.builder() - .stableFieldOrder() + .comparator(Comparator.naturalOrder()) .setInputStream(inputStream) .setCharset(Charset.forName("ANSEL")) .setMarcListener(writer) @@ -92,7 +93,7 @@ public class MarcJsonWriterTest { try (MarcJsonWriter writer = new MarcJsonWriter(outputStream) ) { Marc.builder() - .stableFieldOrder() + .comparator(Comparator.naturalOrder()) .setFormat(MarcXchangeConstants.MARCXCHANGE_FORMAT) .setType(MarcXchangeConstants.BIBLIOGRAPHIC_TYPE) .setInputStream(inputStream) @@ -125,7 +126,7 @@ public class MarcJsonWriterTest { .setType(MarcXchangeConstants.BIBLIOGRAPHIC_TYPE) .setInputStream(inputStream) .setCharset(Charset.forName("ANSEL")) - .setMarcListener(new MarcRecordAdapter(writer, true)) + .setMarcListener(new MarcRecordAdapter(writer, Comparator.naturalOrder())) .build() .writeCollection(); } @@ -146,7 +147,7 @@ public class MarcJsonWriterTest { contentHandler.addNamespace("http://www.ddb.de/professionell/mabxml/mabxml-1.xsd"); contentHandler.setFormat("MARC21"); contentHandler.setType("Bibliographic"); - contentHandler.setMarcListener(new MarcRecordAdapter(writer, true)); + contentHandler.setMarcListener(new MarcRecordAdapter(writer, Comparator.naturalOrder())); Marc.builder() .setInputStream(inputStream) .setContentHandler(contentHandler) diff --git a/src/test/resources/org/xbib/marc/dialects/mab/DE-605-aleph-publish.xml.mapped.xml b/src/test/resources/org/xbib/marc/dialects/mab/DE-605-aleph-publish.xml.mapped.xml index 87f4cfb..0102f44 100644 --- a/src/test/resources/org/xbib/marc/dialects/mab/DE-605-aleph-publish.xml.mapped.xml +++ b/src/test/resources/org/xbib/marc/dialects/mab/DE-605-aleph-publish.xml.mapped.xml @@ -1,232 +1,228 @@ - + 00860vM2.01200024 000h - - 00860vM2.01200024------h + + 00860vM2.01200024------h - - MH + + MH - - HT004330420 + + + + a|1uc||||||17 - - 19921110 + + a||||||||||||| - - a|1uc||||||17 + + s||||||| - - a||||||||||||| - - - s||||||| - - + 292 - + 60 - + Aselmeier, Ulrich (DE-588)108129330 - + Vogel, Günter (DE-588)104707070 - + Vogel, W. - + Vogel, Gunther - + Handlungshilfen zur Unterrichtsplanung - + Grundlagen und Beispiele aus sach- und schülerorientierter Sicht - + Ulrich Aselmeier ; Günter Vogel - + Rheinfelden [u.a.] - + Schäuble - + 1992 - + 135 S. : graph. Darst. - + Gesellschaft, Erziehung und Bildung : Beiträge zu einer neuen Lernkultur ; 6 HT003704070 6 = 23 [d. Gesamtw.] 6 - + Gesellschaft, Erziehung und Bildung ; 23 HT003575299 23 : Beiträge zu einer neuen Lernkultur ; 6 23 - + 3-87718-583-5 kart. : ca. DM 48.00 (freier Pr.) - + 120 - + Unterrichtsplanung (DE-588)4117301-6 - + Sekundarstufe (DE-588)4077347-4 - - 006488301 + + 006488301 - + DE-Bi10 - + U0001 - + R0001 - + B0001 - + L0001 - + M1054 - + M0001 - + Lehrplanung - + Unterricht Planung - + Secondary School - + Sekundarbereich - + Sekundarschule - + Schuljahr 5-13 - + Schuljahr 5-12 - + Bi 10 00078080 IGX Asel ILL Ausleihe - + 290 00000001 Bg 14187 ILL Ausleihe - + 290 00012012 PCA 430/67 keine ILL - + 294 00000014 MVA7096 ILL Ausleihe - + 51 00000000 IGX 112 ILL Ausleihe - + 6 00000040 3D 90391 ILL Ausleihe - + 6/123 00004040 ERZ XG2 9A ILL Ausleihe - + 929 00000000 94/3507 ILL Ausleihe - + 708 00 IGX/ASE Normalausleihe - + 467 63 63TML2274 Ausleihbar - + 467 63 63TML2274+1 Ausleihbar - + Kob 7 FRHKO 93/3202 ausleihbar 4 Wo - + Lan 1 FRHLD gru 92-58 ausleihbar 4 Wo - + 465 E11 IGX2455 Ausleihbestand - + 464 D01 IGX2112_d Ausleihbestand - + 1116 X0001 Ndk ASE diff --git a/src/test/resources/org/xbib/marc/dialects/mab/HT016424175-combined.xml b/src/test/resources/org/xbib/marc/dialects/mab/HT016424175-combined.xml index 8573aad..c8b5983 100644 --- a/src/test/resources/org/xbib/marc/dialects/mab/HT016424175-combined.xml +++ b/src/test/resources/org/xbib/marc/dialects/mab/HT016424175-combined.xml @@ -1 +1 @@ -00000 M2.01200024 000h------M2.01200024------hMHHT01642417520100705HBZHT016424175a|1uc||||||1|DElata|||||||||||||am||||||57560HildegardisBingensis1098-1179(DE-588)118550993Hildegard1098-1179HildegardHeilige, 1098-11791098-1179HildegardSankt1098-1179HildegardisSancta1098-1179HildegardisAbbatissa1098-1179HildegardeSainte1098-1179Ildegardade Bingen1098-1179Hildegardisde Monte Sancti Ruperti1098-1179Hildegarddie Heilige1098-1179Hildegardisde Bingen1098-1179Hildegardt1098-1179Hildegardis1098-1179Bingen, Hildegard <<von>>1098-1179Hildegardof Bingen1098-1179HildegardisSancta Abatissa1098-1179IldegardaSanta1098-1179IldegardaSant'1098-1179HildegardisAbbess1098-1179HildegardHeilige1098-1179Hildegardede Bingen1098-1179Ildegardadi Bingen1098-1179HildegardisAbatissa1098-1179Hildegardadi Bingen1098-1179Hildegardade Bingen1098-1179HildegardBingeniläinen1098-1179Childegardot Bingen1098-1179Bingen, Childegard <<ot>>1098-1179Bingen, Hildegarde <<de>>1098-1179Hildegardvon Bingen1098-1179Hildegardis von Bingen1098-1179HildegardSainte1098-1179Hildegardisde Alemannia1098-1179Escot, Pozzi1933-[Bearb.](DE-588)128917687Pozzi Escot, Olga1933-Unde quocumqueUnde quocumqueMusikdruckHildegard von Bingenc 19941994Transkription der mittelalterlichen Neumen in moderne NotationMelodien mit unterlegtem Text<<The>> Ursula Antiphons ... [Musikdruck]Hildegard von Bingen[Kassel]1994HT01642414501811785200000 M2.01200024 000h------M2.01200024------hMHHT01642417520100705HBZHT016424175a|1uc||||||1|DElata|||||||||||||am||||||57560HildegardisBingensis1098-1179(DE-588)118550993Hildegard1098-1179HildegardHeilige, 1098-11791098-1179HildegardSankt1098-1179HildegardisSancta1098-1179HildegardisAbbatissa1098-1179HildegardeSainte1098-1179Ildegardade Bingen1098-1179Hildegardisde Monte Sancti Ruperti1098-1179Hildegarddie Heilige1098-1179Hildegardisde Bingen1098-1179Hildegardt1098-1179Hildegardis1098-1179Bingen, Hildegard <<von>>1098-1179Hildegardof Bingen1098-1179HildegardisSancta Abatissa1098-1179IldegardaSanta1098-1179IldegardaSant'1098-1179HildegardisAbbess1098-1179HildegardHeilige1098-1179Hildegardede Bingen1098-1179Ildegardadi Bingen1098-1179HildegardisAbatissa1098-1179Hildegardadi Bingen1098-1179Hildegardade Bingen1098-1179HildegardBingeniläinen1098-1179Childegardot Bingen1098-1179Bingen, Childegard <<ot>>1098-1179Bingen, Hildegarde <<de>>1098-1179Hildegardvon Bingen1098-1179Hildegardis von Bingen1098-1179HildegardSainte1098-1179Hildegardisde Alemannia1098-1179Escot, Pozzi1933-[Bearb.](DE-588)128917687Pozzi Escot, Olga1933-Unde quocumqueUnde quocumqueMusikdruckHildegard von Bingenc 19941994Transkription der mittelalterlichen Neumen in moderne NotationMelodien mit unterlegtem Text<<The>> Ursula Antiphons ... [Musikdruck]Hildegard von Bingen[Kassel]1994HT016424145018117852 \ No newline at end of file +00000 M2.01200024 000h------M2.01200024------hMHHBZHT016424175a|1uc||||||1|DElata|||||||||||||am||||||57560HildegardisBingensis1098-1179(DE-588)118550993Hildegard1098-1179HildegardHeilige, 1098-11791098-1179HildegardSankt1098-1179HildegardisSancta1098-1179HildegardisAbbatissa1098-1179HildegardeSainte1098-1179Ildegardade Bingen1098-1179Hildegardisde Monte Sancti Ruperti1098-1179Hildegarddie Heilige1098-1179Hildegardisde Bingen1098-1179Hildegardt1098-1179Hildegardis1098-1179Bingen, Hildegard <<von>>1098-1179Hildegardof Bingen1098-1179HildegardisSancta Abatissa1098-1179IldegardaSanta1098-1179IldegardaSant'1098-1179HildegardisAbbess1098-1179HildegardHeilige1098-1179Hildegardede Bingen1098-1179Ildegardadi Bingen1098-1179HildegardisAbatissa1098-1179Hildegardadi Bingen1098-1179Hildegardade Bingen1098-1179HildegardBingeniläinen1098-1179Childegardot Bingen1098-1179Bingen, Childegard <<ot>>1098-1179Bingen, Hildegarde <<de>>1098-1179Hildegardvon Bingen1098-1179Hildegardis von Bingen1098-1179HildegardSainte1098-1179Hildegardisde Alemannia1098-1179Escot, Pozzi1933-[Bearb.](DE-588)128917687Pozzi Escot, Olga1933-Unde quocumqueUnde quocumqueMusikdruckHildegard von Bingenc 19941994Transkription der mittelalterlichen Neumen in moderne NotationMelodien mit unterlegtem Text<<The>> Ursula Antiphons ... [Musikdruck]Hildegard von Bingen[Kassel]1994HT01642414501811785200000 M2.01200024 000h------M2.01200024------hMHHBZHT016424175a|1uc||||||1|DElata|||||||||||||am||||||57560HildegardisBingensis1098-1179(DE-588)118550993Hildegard1098-1179HildegardHeilige, 1098-11791098-1179HildegardSankt1098-1179HildegardisSancta1098-1179HildegardisAbbatissa1098-1179HildegardeSainte1098-1179Ildegardade Bingen1098-1179Hildegardisde Monte Sancti Ruperti1098-1179Hildegarddie Heilige1098-1179Hildegardisde Bingen1098-1179Hildegardt1098-1179Hildegardis1098-1179Bingen, Hildegard <<von>>1098-1179Hildegardof Bingen1098-1179HildegardisSancta Abatissa1098-1179IldegardaSanta1098-1179IldegardaSant'1098-1179HildegardisAbbess1098-1179HildegardHeilige1098-1179Hildegardede Bingen1098-1179Ildegardadi Bingen1098-1179HildegardisAbatissa1098-1179Hildegardadi Bingen1098-1179Hildegardade Bingen1098-1179HildegardBingeniläinen1098-1179Childegardot Bingen1098-1179Bingen, Childegard <<ot>>1098-1179Bingen, Hildegarde <<de>>1098-1179Hildegardvon Bingen1098-1179Hildegardis von Bingen1098-1179HildegardSainte1098-1179Hildegardisde Alemannia1098-1179Escot, Pozzi1933-[Bearb.](DE-588)128917687Pozzi Escot, Olga1933-Unde quocumqueUnde quocumqueMusikdruckHildegard von Bingenc 19941994Transkription der mittelalterlichen Neumen in moderne NotationMelodien mit unterlegtem Text<<The>> Ursula Antiphons ... [Musikdruck]Hildegard von Bingen[Kassel]1994HT016424145018117852 \ No newline at end of file diff --git a/src/test/resources/org/xbib/marc/dialects/mab/mabxml-example.xml.xml b/src/test/resources/org/xbib/marc/dialects/mab/mabxml-example.xml.xml index 9e0c331..6f559bf 100644 --- a/src/test/resources/org/xbib/marc/dialects/mab/mabxml-example.xml.xml +++ b/src/test/resources/org/xbib/marc/dialects/mab/mabxml-example.xml.xml @@ -6,60 +6,60 @@ 20171208 20171208 - (FR-PaOEC)6bee255b-ar�OECD + (FR-PaOEC)6bee255b-ar�OECD - 6bee255b-ar + 6bee255b-ar - a|zuc||||||37 + a|zuc||||||37 - ara + ara - ||||||||g||||| + ||||||||g||||| - m||||||| + m||||||| - OECD + OECD - HBZ + HBZ ZDB-164-UNL ZDB-164-UNL-ebook - OHCHR + OHCHR - Elektronische Ressource + Elektronische Ressource - OHCHR + OHCHR - New York + New York - United Nations + United Nations - 2017 + 2017 - 75 p. + 75 p. - ISBN 9789210579391 + ISBN 9789210579391 - 10.18356/6bee255b-ar + 10.18356/6bee255b-ar Online-Ressource @@ -80,68 +80,68 @@ 20171208 20171208 - (FR-PaOEC)6f8029f6-es�OECD + (FR-PaOEC)6f8029f6-es�OECD - 6f8029f6-es + 6f8029f6-es - a|zuc||||||37 + a|zuc||||||37 - spa + spa - ||||||||g||||| + ||||||||g||||| - s||||||| + s||||||| - OECD + OECD - HBZ + HBZ ZDB-164-UNL ZDB-164-UNL-ebook - ECLAC + ECLAC - Pol�itica Industrial Rural y Fortalecimiento de Cadenas de Valor + Pol�itica Industrial Rural y Fortalecimiento de Cadenas de Valor - Elektronische Ressource + Elektronische Ressource - ECLAC + ECLAC - New York + New York - United Nations + United Nations - 2017 + 2017 - 240 p. + 240 p. - ECLAC Books ; no.145 + ECLAC Books ; no.145 - 2411-9385 + 2411-9385 - ISBN 9789210585897 + ISBN 9789210585897 - 10.18356/6f8029f6-es + 10.18356/6f8029f6-es Online-Ressource @@ -157,62 +157,62 @@ 20171208 20171208 - (FR-PaOEC)c78e1213-ar�OECD + (FR-PaOEC)c78e1213-ar�OECD - c78e1213-ar + c78e1213-ar - a|zuc||||||37 + a|zuc||||||37 - ara + ara - ||||||||g||||| + ||||||||g||||| - m||||||| + m||||||| - OECD + OECD - HBZ + HBZ ZDB-164-UNL ZDB-164-UNL-ebook - DESA + DESA - 2017 + 2017 - Elektronische Ressource + Elektronische Ressource - DESA + DESA - New York + New York - United Nations + United Nations - 2017 + 2017 - 62 p. + 62 p. - ISBN 9789213617182 + ISBN 9789213617182 - 10.18356/c78e1213-ar + 10.18356/c78e1213-ar Online-Ressource diff --git a/src/test/resources/org/xbib/marc/error.mrc.xml b/src/test/resources/org/xbib/marc/error.mrc.xml index 4b9f0b3..8f807fc 100644 --- a/src/test/resources/org/xbib/marc/error.mrc.xml +++ b/src/test/resources/org/xbib/marc/error.mrc.xml @@ -25,7 +25,7 @@ 1st ed. - + New York :