fix for subfield ID length in MAB, fix for UNIMARC

This commit is contained in:
Jörg Prante 2017-10-17 15:59:03 +02:00
parent ae5b85f923
commit 3fb01e1b2c
21 changed files with 722524 additions and 164 deletions

View file

@ -1,6 +1,6 @@
group = org.xbib group = org.xbib
name = marc name = marc
version = 1.0.14 version = 1.0.15
xbib-content.version = 1.0.7 xbib-content.version = 1.0.7
xbib-bibliographic-character-sets.version = 1.0.0 xbib-bibliographic-character-sets.version = 1.0.0

View file

@ -270,8 +270,16 @@ public final class Marc {
wrapIntoCollection(new BufferedSeparatorInputStream(builder.getInputStream())); wrapIntoCollection(new BufferedSeparatorInputStream(builder.getInputStream()));
} }
public void writeCollection(String type) throws IOException {
wrapIntoCollection(type, new BufferedSeparatorInputStream(builder.getInputStream()));
}
public int wrapIntoCollection(ChunkStream<byte[], BytesReference> stream) throws IOException { public int wrapIntoCollection(ChunkStream<byte[], BytesReference> stream) throws IOException {
return wrapFields(stream, true); return wrapFields(BIBLIOGRAPHIC_TYPE, stream, true);
}
public int wrapIntoCollection(String type, ChunkStream<byte[], BytesReference> stream) throws IOException {
return wrapFields(type, stream, true);
} }
/** /**
@ -282,10 +290,10 @@ public final class Marc {
* @return the number of chunks in the stream * @return the number of chunks in the stream
* @throws IOException if chunk reading fails * @throws IOException if chunk reading fails
*/ */
public int wrapFields(ChunkStream<byte[], BytesReference> stream, public int wrapFields(String type, ChunkStream<byte[], BytesReference> stream,
boolean withCollection) throws IOException { boolean withCollection) throws IOException {
int count = 0; int count = 0;
MarcListener marcListener = builder.getMarcListener(); MarcListener marcListener = builder.getMarcListener(type);
if (marcListener == null) { if (marcListener == null) {
return count; return count;
} }
@ -705,6 +713,10 @@ public final class Marc {
return listeners.get(BIBLIOGRAPHIC_TYPE); return listeners.get(BIBLIOGRAPHIC_TYPE);
} }
public MarcListener getMarcListener(String type) {
return listeners.get(type);
}
public Map<String, MarcListener> getMarcListeners() { public Map<String, MarcListener> getMarcListeners() {
return listeners; return listeners;
} }

View file

@ -16,6 +16,7 @@
*/ */
package org.xbib.marc; package org.xbib.marc;
import org.xbib.marc.dialects.mab.MabSubfieldControl;
import org.xbib.marc.label.RecordLabel; import org.xbib.marc.label.RecordLabel;
import java.util.LinkedList; import java.util.LinkedList;
@ -33,6 +34,8 @@ public class MarcField implements Comparable<MarcField> {
private static final String EMPTY_STRING = ""; private static final String EMPTY_STRING = "";
private static final String BLANK_STRING = " ";
private final String tag; private final String tag;
private final String indicator; private final String indicator;
@ -318,6 +321,8 @@ public class MarcField implements Comparable<MarcField> {
private LinkedList<String> subfieldIds; private LinkedList<String> subfieldIds;
private Boolean isControl;
Builder() { Builder() {
this.subfields = new LinkedList<>(); this.subfields = new LinkedList<>();
this.subfieldIds = new SubfieldIds(); this.subfieldIds = new SubfieldIds();
@ -349,8 +354,10 @@ public class MarcField implements Comparable<MarcField> {
* @return this builder * @return this builder
*/ */
public Builder indicator(String indicator) { public Builder indicator(String indicator) {
// check if indicators are "-" (like Aleph does). Replace with blank. if (indicator != null) {
this.indicator = indicator != null ? indicator.replace('-', ' ') : null; // check if indicators are visible replacements like "-" or "#" . Replace with blank.
this.indicator = indicator.replace('-', ' ').replace('#', ' ');
}
return this; return this;
} }
@ -399,7 +406,7 @@ public class MarcField implements Comparable<MarcField> {
} }
/** /**
* Set (non-subfield) value. * Set value for control/data field.
* @param value the value * @param value the value
* @return this builder * @return this builder
*/ */
@ -409,13 +416,13 @@ public class MarcField implements Comparable<MarcField> {
} }
/** /**
* Set subfield with ID and value. * Set subfield with subfield ID and value.
* @param subfieldId the subfield ID * @param subfieldId the subfield ID
* @param value the subfield value * @param value the subfield value
* @return this builder * @return this builder
*/ */
public Builder subfield(String subfieldId, String value) { public Builder subfield(String subfieldId, String value) {
this.subfields.add(new Subfield(subfieldId, value)); subfields.add(new Subfield(subfieldId, value));
subfieldIds.add(subfieldId); subfieldIds.add(subfieldId);
return this; return this;
} }
@ -426,8 +433,7 @@ public class MarcField implements Comparable<MarcField> {
* @return this builder * @return this builder
*/ */
public Builder subfield(String subfieldId) { public Builder subfield(String subfieldId) {
this.subfields.add(new Subfield(subfieldId, null)); subfield(subfieldId, null);
subfieldIds.add(subfieldId);
return this; return this;
} }
@ -454,75 +460,77 @@ public class MarcField implements Comparable<MarcField> {
} }
/** /**
* Set subfield value to the last subfield which was denoted by a subfield ID. * Set subfield value in the last subfield which was added.
* @param value the subfield value * @param value the subfield value
* @return this builder * @return this builder
*/ */
public Builder subfieldValue(String value) { public Builder subfieldValue(String value) {
Subfield subfield = this.subfields.removeLast(); subfields.add(new Subfield(subfields.removeLast().getId(), value));
this.subfields.add(new Subfield(subfield.getId(), value));
return this; return this;
} }
/** public Builder value(RecordLabel recordLabel, String value) {
* Set subfield with help of record label information from raw data. if (value.length() > 0) {
* @param label the record label int len = recordLabel.getSubfieldIdentifierLength() - 1; /* minus length of US separator char */
* @param raw the subfield, including ID and separator boolean createSubfields = len > 0 && value.length() > len;
* @return this builder if (createSubfields) {
*/
public Builder subfield(RecordLabel label, String raw) {
// subtract 1 because subfield identifier length includes US separator character
int subfieldidlen = label.getSubfieldIdentifierLength() - 1;
if (subfieldidlen > 0 && raw.length() >= subfieldidlen) {
String subfieldId = raw.substring(0, subfieldidlen);
subfields.add(new Subfield(subfieldId, raw.substring(subfieldidlen)));
subfieldIds.add(subfieldId);
}
return this;
}
/**
* Set synthetic subfield with help of record label information from raw data.
* If the len of the subfield ID is zero or undefined, the dummy subfield ID is used.
* @param label the record label
* @param dummySubfieldId the dummy subfield ID
* @param value the subfield value
* @return this builder
*/
public Builder subfield(RecordLabel label, String dummySubfieldId, String value) {
int len = label.getSubfieldIdentifierLength() - 1;
if (len <= 0) {
subfields.add(new Subfield(dummySubfieldId, value));
subfieldIds.add(dummySubfieldId);
} else if (value.length() >= len) {
String id = value.substring(0, len); String id = value.substring(0, len);
subfields.add(new Subfield(id, value.substring(len))); String content = value.substring(len);
subfieldIds.add(id); subfield(id, content);
} else {
value(value);
}
}
return this;
}
public Builder value(String format, String type, RecordLabel recordLabel, String value) {
if (value.length() > 0) {
int len = recordLabel.getSubfieldIdentifierLength() - 1; /* minus length of US separator char */
// override in case of MAB, which contains a wild mixture of subfield ID lengths
if ("MAB".equals(format) && "Titel".equals(type)) {
len = MabSubfieldControl.getSubfieldIdLen(tag());
}
boolean canDeriveSubfieldId = len > 0 && value.length() > len;
if (canDeriveSubfieldId) {
String id = value.substring(0, len);
String content = value.substring(len);
subfield(id, content);
} else {
subfield(BLANK_STRING, value);
}
} }
return this; return this;
} }
/** /**
* Set a new data field with help of a record label from raw data. * Set a new field with help of a record label from raw data.
* @param label the record label * @param format the record format
* @param raw raw data * @param type the record type
* @param recordLabel the record label
* @param raw raw data (tag plus indicator plus value)
* @return this builder * @return this builder
*/ */
public Builder field(RecordLabel label, String raw) { public Builder field(String format, String type, RecordLabel recordLabel, String raw) {
this.tag = raw.length() > 2 ? raw.substring(0, 3) : null; if (raw.length() >= 3) {
tag(raw.substring(0, 3));
}
if (isControl()) { if (isControl()) {
if (raw.length() > 3) { if (raw.length() > 3) {
value(raw.substring(3)); value(raw.substring(3));
} }
} else { } else {
int pos = 3 + label.getIndicatorLength(); int pos = 3 + recordLabel.getIndicatorLength();
this.indicator = raw.length() >= pos ? raw.substring(3, pos) : null; if (raw.length() >= pos) {
int subfieldidlen = label.getSubfieldIdentifierLength(); indicator(raw.substring(3, pos));
value(format, type, recordLabel, raw.substring(pos));
}
/*int subfieldidlen = label.getSubfieldIdentifierLength();
if (raw.length() >= pos + subfieldidlen) { if (raw.length() >= pos + subfieldidlen) {
String subfieldId = raw.substring(pos, pos + subfieldidlen); String subfieldId = raw.substring(pos, pos + subfieldidlen);
this.subfields.add(new Subfield(subfieldId, raw.substring(pos + subfieldidlen))); this.subfields.add(new Subfield(subfieldId, raw.substring(pos + subfieldidlen)));
subfieldIds.add(subfieldId); subfieldIds.add(subfieldId);
} }*/
} }
return this; return this;
} }
@ -545,12 +553,20 @@ public class MarcField implements Comparable<MarcField> {
return this; return this;
} }
public Builder setControl(boolean isControl) {
this.isControl = isControl;
return this;
}
/** /**
* Is the MARC field a control field? * Is the MARC field a control field?
* @return true if control field, false if not * @return true if control field, false if not
*/ */
public boolean isControl() { public boolean isControl() {
return tag != null && tag.charAt(0) == '0' && tag.charAt(1) == '0'; if (isControl == null) {
this.isControl = tag != null && tag.charAt(0) == '0' && tag.charAt(1) == '0';
}
return isControl;
} }
/** /**
@ -574,8 +590,11 @@ public class MarcField implements Comparable<MarcField> {
* @return the built MARC field. * @return the built MARC field.
*/ */
public MarcField build() { public MarcField build() {
if (isControl == null) {
this.isControl = tag != null && tag.charAt(0) == '0' && tag.charAt(1) == '0';
}
return new MarcField(tag, indicator, position, length, return new MarcField(tag, indicator, position, length,
value, subfields, subfieldIds.toString(), isControl()); value, subfields, subfieldIds.toString(), isControl);
} }
@Override @Override

View file

@ -40,8 +40,6 @@ import java.util.List;
*/ */
public class MarcGenerator implements ChunkListener<byte[], BytesReference>, Closeable { public class MarcGenerator implements ChunkListener<byte[], BytesReference>, Closeable {
private static final String EMPTY = " ";
private String format; private String format;
private String type; private String type;
@ -153,22 +151,19 @@ public class MarcGenerator implements ChunkListener<byte[], BytesReference>, Clo
emitMarcField(); emitMarcField();
if (directory == null || directory.isEmpty()) { if (directory == null || directory.isEmpty()) {
if (marcTransformer != null) { if (marcTransformer != null) {
marcTransformer.transform(builder, recordLabel, this.data); marcTransformer.transform(builder, recordLabel, data);
} else { } else {
builder.field(recordLabel, this.data); builder.field(format, type, recordLabel, data);
} }
} else if (directory.containsKey(position)) { } else if (directory.containsKey(position)) {
builder = directory.get(position); builder = directory.get(position);
if (builder.isControl()) { if (builder.isControl()) {
builder.value(this.data); builder.value(data);
} else { } else {
// we may have fields which are broken when data is longer
// than indicator length. Then, a subfield delimiter/ID
// is missing, and we insert a blank subfield ID plus the data here.
int pos = recordLabel.getIndicatorLength(); int pos = recordLabel.getIndicatorLength();
builder.indicator(this.data.substring(0, pos)); builder.indicator(data.substring(0, pos));
if (pos < this.data.length()) { if (pos < data.length()) {
builder.subfield(recordLabel, EMPTY, this.data.substring(pos)); builder.value(data.substring(pos));
} }
} }
} else { } else {
@ -179,19 +174,26 @@ public class MarcGenerator implements ChunkListener<byte[], BytesReference>, Clo
position = position + offset; position = position + offset;
builder = directory.get(position); builder = directory.get(position);
if (builder.isControl()) { if (builder.isControl()) {
builder.value(this.data); builder.value(data);
} else { } else {
builder.indicator(this.data); int pos = recordLabel.getIndicatorLength();
} builder.indicator(data.substring(0, pos));
if (pos < data.length()) {
builder.value(this.data.substring(pos));
} }
found = true; found = true;
break; break;
} else if (directory.containsKey(position - offset)) { } else if (directory.containsKey(position - offset)) {
position = position - offset; position = position - offset;
builder = directory.get(position); builder = directory.get(position);
if (builder.isControl()) { if (builder.isControl()) {
builder.value(this.data); builder.value(data);
} else { } else {
builder.indicator(this.data); int pos = recordLabel.getIndicatorLength();
builder.indicator(data.substring(0, pos));
if (pos < data.length()) {
builder.value(data.substring(pos));
}
} }
found = true; found = true;
break; break;
@ -205,7 +207,7 @@ public class MarcGenerator implements ChunkListener<byte[], BytesReference>, Clo
break; break;
} }
case US: /* 1f */ { case US: /* 1f */ {
builder.subfield(recordLabel, EMPTY, this.data); builder.value(recordLabel, data);
break; break;
} }
default: { default: {
@ -258,10 +260,10 @@ public class MarcGenerator implements ChunkListener<byte[], BytesReference>, Clo
private void newRecord() throws IOException { private void newRecord() throws IOException {
// skip line-feed (OCLC PICA quirk) // skip line-feed (OCLC PICA quirk)
if (this.data.charAt(0) == '\n') { if (data.charAt(0) == '\n') {
this.data = data.substring(1); data = data.substring(1);
} }
if (this.data.length() > RecordLabel.LENGTH) { if (data.length() > RecordLabel.LENGTH) {
// record label + record content = old directory-based format // record label + record content = old directory-based format
this.recordLabel = RecordLabel.builder().from(this.data.substring(0, RecordLabel.LENGTH).toCharArray()).build(); this.recordLabel = RecordLabel.builder().from(this.data.substring(0, RecordLabel.LENGTH).toCharArray()).build();
if (recordLabelFixer != null) { if (recordLabelFixer != null) {
@ -274,7 +276,7 @@ public class MarcGenerator implements ChunkListener<byte[], BytesReference>, Clo
// create directory // create directory
this.directory = new MarcFieldDirectory(recordLabel, this.data); this.directory = new MarcFieldDirectory(recordLabel, this.data);
if (directory.isEmpty()) { if (directory.isEmpty()) {
builder.field(recordLabel, this.data.substring(RecordLabel.LENGTH)); builder.field(format, type, recordLabel, data.substring(RecordLabel.LENGTH));
} }
} else if (this.data.length() == RecordLabel.LENGTH) { } else if (this.data.length() == RecordLabel.LENGTH) {
this.recordLabel = RecordLabel.builder().from(this.data.substring(0, RecordLabel.LENGTH).toCharArray()).build(); this.recordLabel = RecordLabel.builder().from(this.data.substring(0, RecordLabel.LENGTH).toCharArray()).build();

View file

@ -0,0 +1,22 @@
package org.xbib.marc.dialects.mab;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public class MabSubfieldControl {
private static final Map<String, Integer> FIELDS = new HashMap<>();
static {
// MARC-like fields with subfield structure
FIELDS.put("088", 2);
FIELDS.put("655", 2);
FIELDS.put("856", 2);
}
public static Integer getSubfieldIdLen(String tag) {
return FIELDS.getOrDefault(tag, 0);
}
}

View file

@ -83,7 +83,7 @@ public class SisisInputStream extends PatternInputStream {
this.marcGenerator = marcGenerator; this.marcGenerator = marcGenerator;
this.bytesStreamOutput = new BytesStreamOutput(); this.bytesStreamOutput = new BytesStreamOutput();
// this format comes without a record label, create a default one // this format comes without a record label, create a default one
this.label = RecordLabel.builder().setIndicatorLength(2).setSubfieldIdentifierLength(1).build(); this.label = RecordLabel.builder().setIndicatorLength(2).setSubfieldIdentifierLength(2).build();
this.labelEmitted = false; this.labelEmitted = false;
} }

View file

@ -16,6 +16,11 @@
*/ */
package org.xbib.marc; package org.xbib.marc;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.Test; import org.junit.Test;
import org.xbib.marc.io.ReplaceStringInputStream; import org.xbib.marc.io.ReplaceStringInputStream;
import org.xbib.marc.transformer.value.MarcValueTransformers; import org.xbib.marc.transformer.value.MarcValueTransformers;
@ -32,11 +37,6 @@ import java.text.Normalizer;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/** /**
* *
*/ */

View file

@ -1,14 +1,14 @@
package org.xbib.marc; package org.xbib.marc;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test; import org.junit.Test;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/** /**
* *
*/ */

View file

@ -0,0 +1,63 @@
package org.xbib.marc.dialects.mab;
import org.junit.Test;
import org.xbib.marc.Marc;
import org.xbib.marc.MarcRecord;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
*
*/
public class HBZTest {
private static final Logger logger = Logger.getLogger(HBZTest.class.getName());
@Test
public void testMarcStream() throws Exception {
String[] files = {
"HBZ.mab"
};
for (String file : files) {
AtomicInteger count = new AtomicInteger();
try (InputStream in = getClass().getResource(file).openStream()) {
Marc marc = Marc.builder()
.setInputStream(in)
.setCharset(Charset.forName("UTF-8"))
.build();
marc.iso2709Stream().chunks().forEach(chunk -> {
count.incrementAndGet();
});
}
assertTrue(count.get() > 0);
}
}
@Test
public void testMarcRecordIterable() throws Exception {
String[] files = {
"HBZ.mab"
};
for (String file : files) {
int count = 0;
try (InputStream in = getClass().getResource(file).openStream()) {
Marc.Builder builder = Marc.builder()
.setFormat("MAB")
.setType("Titel")
.setInputStream(in)
.setCharset(Charset.forName("x-MAB"));
for (MarcRecord marcRecord : builder.iterable()) {
count++;
logger.info("record = " + marcRecord);
}
}
assertEquals(1, count);
}
}
}

View file

@ -63,19 +63,18 @@ public class MabTest {
File file = File.createTempFile(s + ".", ".xml"); File file = File.createTempFile(s + ".", ".xml");
file.deleteOnExit(); file.deleteOnExit();
FileOutputStream out = new FileOutputStream(file); FileOutputStream out = new FileOutputStream(file);
try (MarcXchangeWriter writer = new MarcXchangeWriter(out) try (MarcXchangeWriter writer = new MarcXchangeWriter(out, true)
.setFormat("MAB") .setFormat("MAB")
.setType("Bibliographic")) { .setType("Titel")
) {
Marc.builder() Marc.builder()
.setFormat("MAB")
.setType("Titel")
.setInputStream(in) .setInputStream(in)
.setCharset(Charset.forName("x-MAB")) .setCharset(Charset.forName("x-MAB"))
.setFormat("MAB") .setMarcListener("Titel", writer)
.setType("Bibliographic")
.setRecordLabelFixer(recordLabel ->
RecordLabel.builder().from(recordLabel).setSubfieldIdentifierLength(0).build())
.setMarcListener(writer)
.build() .build()
.writeCollection(); .writeCollection("Titel");
} }
assertThat(file, CompareMatcher.isIdenticalTo(getClass().getResource(s + ".xml").openStream())); assertThat(file, CompareMatcher.isIdenticalTo(getClass().getResource(s + ".xml").openStream()));
} }

View file

@ -1,5 +1,8 @@
package org.xbib.marc.dialects.mab; package org.xbib.marc.dialects.mab;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test; import org.junit.Test;
import org.xbib.marc.Marc; import org.xbib.marc.Marc;
import org.xbib.marc.MarcRecord; import org.xbib.marc.MarcRecord;
@ -9,9 +12,6 @@ import java.io.InputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/** /**
* *
*/ */

View file

@ -29,6 +29,7 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.StringWriter; import java.io.StringWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
/** /**
@ -45,8 +46,8 @@ public class SisisTest extends Assert {
public void testSisis() throws Exception { public void testSisis() throws Exception {
String s = "unloaddipl"; String s = "unloaddipl";
InputStream in = getClass().getResource(s).openStream(); InputStream in = getClass().getResource(s).openStream();
StringWriter sw = new StringWriter(); Writer out = new StringWriter();
try (MarcXchangeWriter writer = new MarcXchangeWriter(sw) try (MarcXchangeWriter writer = new MarcXchangeWriter(out)
.setFormat(MarcXchangeConstants.MARCXCHANGE_FORMAT)) { .setFormat(MarcXchangeConstants.MARCXCHANGE_FORMAT)) {
Marc marc = Marc.builder() Marc marc = Marc.builder()
.setInputStream(in) .setInputStream(in)
@ -56,7 +57,7 @@ public class SisisTest extends Assert {
long l = marc.wrapIntoCollection(marc.sisis()); long l = marc.wrapIntoCollection(marc.sisis());
assertEquals(36353, l); assertEquals(36353, l);
} }
assertThat(sw.toString(), CompareMatcher.isIdenticalTo(getClass().getResource(s + ".xml").openStream())); assertThat(out.toString(), CompareMatcher.isIdenticalTo(getClass().getResource(s + ".xml").openStream()));
} }
/** /**

View file

@ -46,7 +46,7 @@ public class UnimarcTest extends Assert {
File file = File.createTempFile("periouni.", ".xml"); File file = File.createTempFile("periouni.", ".xml");
file.deleteOnExit(); file.deleteOnExit();
FileOutputStream out = new FileOutputStream(file); FileOutputStream out = new FileOutputStream(file);
try (MarcXchangeWriter writer = new MarcXchangeWriter(out) try (MarcXchangeWriter writer = new MarcXchangeWriter(out, true)
.setFormat("UNIMARC") .setFormat("UNIMARC")
.setType("Bibliographic")) { .setType("Bibliographic")) {
Marc.builder() Marc.builder()

View file

@ -2,6 +2,7 @@ package org.xbib.marc.filter;
import org.junit.Test; import org.junit.Test;
import org.xbib.content.XContentBuilder; import org.xbib.content.XContentBuilder;
import org.xbib.content.json.JsonXContent;
import org.xbib.marc.Marc; import org.xbib.marc.Marc;
import org.xbib.marc.MarcField; import org.xbib.marc.MarcField;
import org.xbib.marc.MarcFieldAdapter; import org.xbib.marc.MarcFieldAdapter;
@ -18,8 +19,6 @@ import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.xbib.content.json.JsonXContent.contentBuilder;
/** /**
* Demo of collecting ISSNs by record identifier from a MARC file. * Demo of collecting ISSNs by record identifier from a MARC file.
* *
@ -79,7 +78,7 @@ public class MarcFieldFilterByRecordIdentifierTest {
.collect(Collectors.toList()); .collect(Collectors.toList());
// JSON output // JSON output
XContentBuilder builder = contentBuilder().prettyPrint() XContentBuilder builder = JsonXContent.contentBuilder().prettyPrint()
.startObject(); .startObject();
for (Map.Entry<String, Map<String, List<Map<String, String>>>> entry : result.entrySet()) { for (Map.Entry<String, Map<String, List<Map<String, String>>>> entry : result.entrySet()) {
builder.field(entry.getKey(), entry.getValue()); builder.field(entry.getKey(), entry.getValue());

View file

@ -4,13 +4,13 @@
<leader>01794 0000445 000 </leader> <leader>01794 0000445 000 </leader>
<controlfield tag="001">000800000020003000008020004200038035001200080005001700092008008100109010001700190016002200207029002200229035001200251035001600263040001800279042000800297043003000305049000900335050002200344072001200366110004800378245024900426246002200675260008500697300004100782504005100823650004300874650004300917650004300960650004301003650004101046610005901087700002001146700002501166938005301191994001201244910002601256991006601282</controlfield> <controlfield tag="001">000800000020003000008020004200038035001200080005001700092008008100109010001700190016002200207029002200229035001200251035001600263040001800279042000800297043003000305049000900335050002200344072001200366110004800378245024900426246002200675260008500697300004100782504005100823650004300874650004300917650004300960650004301003650004101046610005901087700002001146700002501166938005301191994001201244910002601256991006601282</controlfield>
<datafield ind2=" " ind1=" " tag="260"> <datafield ind2=" " ind1=" " tag="260">
<subfield code="a">0772</subfield> <subfield code=" ">0772</subfield>
</datafield> </datafield>
<datafield ind2=" " ind1=" " tag="200"> <datafield ind2=" " ind1=" " tag="200">
<subfield code="a">90311033800.0</subfield> <subfield code=" ">90311033800.0</subfield>
</datafield> </datafield>
<datafield ind2=" " ind1=" " tag="051"> <datafield ind2=" " ind1=" " tag="051">
<subfield code="a">028s 01609cam 22004094a 4500 </subfield> <subfield code=" ">028s 01609cam 22004094a 4500 </subfield>
</datafield> </datafield>
</record> </record>
</collection> </collection>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
01268nM2.01200024 h001 HT018546928002a20150219003 20150427004 20171017025a1059839261026 DNB1059839261030 a|1uc||||||17036aCN037beng050 a|||||||||||||051 m|||||||070 468070b832080 60088 a1044b00000001c11 = TWD1002eILL Ausleihe088 a832b00002000cTWD2900eILL Ausleihe088 a461/1b205cTWX/GOReKeine Angabe088 a361b00000010cHK365=E370 G671eILL Kopie+Ausl.088 a294b00000031cWWB53734eILL Ausleihe088 a708b00cTYP/GOReNormalausleihe088 a465bE31cTWY9750+1eAusleihbestand088 a465bE31cTWY9750eAusleihbestand088 a468b69cTWX1228eausleihbar100 Gormley, Clinton102a(DE-588)1067675272104aTong, Zachary106a(DE-588)1067675701331 Elasticsearch335 the definitive guide ; [a distributed real-time search and analytics engine]359 Clinton Gormley and Zachary Tong403 1. ed.410 Beijing [u.a.]412 O'Reilly425a2015433 XXX, 690 S. : Ill., graph. Darst.540aISBN 978-1-4493-5854-9 Pb. : EUR 41.00 (DE) (freier Pr.), EUR 42.20 (AT) (freier Pr.)540aISBN 1-4493-5854-3655emX:MVBqtext/htmluhttp://deposit.d-nb.de/cgi-bin/dokserv?id=4806461&prov=M&dok_var=1&dok_ext=htm3InhaltstextA2655euhttp://digitool.hbz-nrw.de:1801/webclient/DeliveryManager?pid=7240745&custom_att_2=simple_vieweryElasticsearchxInhaltsverzeichnis

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="info:lc/xmlns/marcxchange-v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="info:lc/xmlns/marcxchange-v2 http://www.loc.gov/standards/iso25577/marcxchange-2-0.xsd"> <collection xmlns="info:lc/xmlns/marcxchange-v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="info:lc/xmlns/marcxchange-v2 http://www.loc.gov/standards/iso25577/marcxchange-2-0.xsd">
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">02.09.2014</subfield> <subfield code="a">02.09.2014</subfield>
</datafield> </datafield>
@ -97,7 +97,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">02.09.2014</subfield> <subfield code="a">02.09.2014</subfield>
</datafield> </datafield>
@ -154,7 +154,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">02.09.2014</subfield> <subfield code="a">02.09.2014</subfield>
</datafield> </datafield>
@ -223,7 +223,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">02.09.2014</subfield> <subfield code="a">02.09.2014</subfield>
</datafield> </datafield>
@ -280,7 +280,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">02.09.2014</subfield> <subfield code="a">02.09.2014</subfield>
</datafield> </datafield>
@ -358,7 +358,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -469,7 +469,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -580,7 +580,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -637,7 +637,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -718,7 +718,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -784,7 +784,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -838,7 +838,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -904,7 +904,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -970,7 +970,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1039,7 +1039,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1111,7 +1111,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1189,7 +1189,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1258,7 +1258,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1351,7 +1351,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1420,7 +1420,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1492,7 +1492,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1552,7 +1552,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1630,7 +1630,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1714,7 +1714,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1780,7 +1780,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">05.09.2014</subfield> <subfield code="a">05.09.2014</subfield>
</datafield> </datafield>
@ -1852,7 +1852,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">31.08.2014</subfield> <subfield code="a">31.08.2014</subfield>
</datafield> </datafield>
@ -1909,7 +1909,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">31.08.2014</subfield> <subfield code="a">31.08.2014</subfield>
</datafield> </datafield>
@ -1969,7 +1969,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">31.08.2014</subfield> <subfield code="a">31.08.2014</subfield>
</datafield> </datafield>
@ -2041,7 +2041,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">31.08.2014</subfield> <subfield code="a">31.08.2014</subfield>
</datafield> </datafield>
@ -2128,7 +2128,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">31.08.2014</subfield> <subfield code="a">31.08.2014</subfield>
</datafield> </datafield>
@ -2209,7 +2209,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">31.08.2014</subfield> <subfield code="a">31.08.2014</subfield>
</datafield> </datafield>
@ -2290,7 +2290,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">31.08.2014</subfield> <subfield code="a">31.08.2014</subfield>
</datafield> </datafield>
@ -2344,7 +2344,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2416,7 +2416,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2500,7 +2500,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2566,7 +2566,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2635,7 +2635,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2713,7 +2713,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2791,7 +2791,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2872,7 +2872,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -2938,7 +2938,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3028,7 +3028,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3106,7 +3106,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3169,7 +3169,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3262,7 +3262,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3337,7 +3337,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3412,7 +3412,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3478,7 +3478,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3547,7 +3547,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>
@ -3655,7 +3655,7 @@
</datafield> </datafield>
</record> </record>
<record format="MarcXchange" type="Bibliographic"> <record format="MarcXchange" type="Bibliographic">
<leader>00000 2100000 000 </leader> <leader>00000 2200000 000 </leader>
<datafield tag="903" ind1="9" ind2="1"> <datafield tag="903" ind1="9" ind2="1">
<subfield code="a">01.09.2014</subfield> <subfield code="a">01.09.2014</subfield>
</datafield> </datafield>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -24,8 +24,8 @@
<subfield code="c">Michael Chabon.</subfield> <subfield code="c">Michael Chabon.</subfield>
</datafield> </datafield>
<datafield ind2=" " ind1=" " tag="250"> <datafield ind2=" " ind1=" " tag="250">
<subfield code=" "></subfield>
<subfield code="a">1st ed.</subfield> <subfield code="a">1st ed.</subfield>
<subfield code="a"> </subfield>
</datafield> </datafield>
<datafield ind2=" " ind1=" " tag="260"> <datafield ind2=" " ind1=" " tag="260">
<subfield code="a">New York :</subfield> <subfield code="a">New York :</subfield>