@natlibfi/marc-record-validators-melinda 11.3.5 → 11.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cyrillux.js
CHANGED
|
@@ -252,7 +252,7 @@ function _default(config = {}) {
|
|
|
252
252
|
}
|
|
253
253
|
function sfs4900PairCanBeTransliterated(field, record) {
|
|
254
254
|
// MELINDA-10330: we already have public library data: (unmarked) SFS-4900 in FIELD and (unmarked) Cyrillic in 880
|
|
255
|
-
if (!tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration) {
|
|
255
|
+
if (!field.subfields || !tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration) {
|
|
256
256
|
return false;
|
|
257
257
|
}
|
|
258
258
|
|
package/dist/cyrillux.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cyrillux.js","names":["_clone","_interopRequireDefault","require","_utils","iso9","_interopRequireWildcard","_subfield6Utils","_xregexp","sfs4900","_sortFields","_reindexSubfield6OccurenceNumbers","_punctuation","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","iso9Trans","cyrillicTrans","sfs4900Trans","_default","config","description","validate","fix","preprocessConfig","doISO9Transliteration","doSFS4900Transliteration","record","res","message","valid","nBefore","fields","length","processFields","reindexSubfield6OccurenceNumbers","sortFields","input","output","currField","remainingInput","fakeRecord","createdMax","recordGetMaxSubfield6OccurrenceNumberAsInteger","result","processField","forEach","field","validateField","orig","fieldToString","normalizedFields","clone","mod","fieldsToString","replace","push","isCyrillicCharacter","char","XRegExp","test","containsCyrillicCharacters","str","split","some","fieldContainsCyrillicCharacters","subfields","sf","subfieldShouldTransliterateToIso9","subfield","isControlSubfieldCode","code","value","tagCanBeTransliterated","tag","includes","fieldCanBeTransliterated","mapSubfieldToIso9","convertToLatin","mapSubfieldToSfs4900","mapFieldToIso9","occurrenceNumber","map","ind1","ind2","subfield6","deriveSubfield6","subfield9","fieldHasSubfield","filter","initialSubfield","resetSubfield6Tag","mapFieldToCyrillicField880","nvdebug","newSubfield6","newSubfield9","newField","mapFieldToSfs4900Field880","getNewOccurrenceNumber","originalField","maxCreatedOccurrenceNumber","fieldGetMaxSubfield6OccurrenceNumberAsInteger","needsIso9Transliteration","existingPairedFields","f","needsSfs4900Transliteration","sfs4900PairCanBeTransliterated","fieldGetOccurrenceNumberPairs","pairedField","occurrenceNumberAsString","fieldGetUnambiguousOccurrenceNumber","field2","createFieldForSfs4900Comparison","field1","clonedField","fieldStripPunctuation","transliterateSfs4900Pair","tmpField","newMainField","newCyrillicField","newSFS4900Field","cyrilluxSkip","newOccurrenceNumberAsInt","newOccurrenceNumberAsString","intToOccurrenceNumberString","undefined"],"sources":["../src/cyrillux.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldHasSubfield, fieldToString, fieldsToString, isControlSubfieldCode, nvdebug} from './utils';\nimport * as iso9 from 'iso9_1995';\nimport {fieldGetMaxSubfield6OccurrenceNumberAsInteger, fieldGetOccurrenceNumberPairs, fieldGetUnambiguousOccurrenceNumber, intToOccurrenceNumberString, recordGetMaxSubfield6OccurrenceNumberAsInteger, resetSubfield6Tag} from './subfield6Utils';\n\nimport XRegExp from 'xregexp';\nimport * as sfs4900 from 'sfs4900';\nimport {default as sortFields} from './sortFields';\nimport {default as reindexSubfield6OccurenceNumbers} from './reindexSubfield6OccurenceNumbers';\nimport {fieldStripPunctuation} from './punctuation2';\n\nconst iso9Trans = 'ISO9 <TRANS>';\nconst cyrillicTrans = 'CYRILLIC <TRANS>';\nconst sfs4900Trans = 'SFS4900 <TRANS>';\n\nexport default function (config = {}) {\n\n return {\n description: 'Cyrillux functionality: convert original field to latinitsa (ISO-9) and add 880s for original cyrillic and latinitsa (SFS-4900)',\n validate, fix\n };\n\n function preprocessConfig() {\n config.doISO9Transliteration = typeof config.doISO9Transliteration === 'undefined' ? true : config.doISO9Transliteration; // eslint-disable-line functional/immutable-data\n config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration === 'undefined' ? true : config.doSFS4900Transliteration; // eslint-disable-line functional/immutable-data\n }\n\n function fix(record) {\n // Fix always succeeds\n const res = {message: [], fix: [], valid: true};\n\n preprocessConfig(config);\n\n const nBefore = record.fields.length;\n\n record.fields = processFields(record.fields); // eslint-disable-line functional/immutable-data\n\n if (nBefore < record.fields.length) { // eslint-disable-line functional/no-conditional-statements\n reindexSubfield6OccurenceNumbers().fix(record);\n sortFields().fix(record);\n }\n\n function processFields(input, output = []) {\n const [currField, ...remainingInput] = input;\n if (!currField) {\n return output;\n }\n\n const fakeRecord = {fields: output};\n const createdMax = recordGetMaxSubfield6OccurrenceNumberAsInteger(fakeRecord);\n const result = processField(currField, record, createdMax);\n\n return processFields(remainingInput, [...output, ...result]);\n }\n\n return res;\n }\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n preprocessConfig(config);\n\n record.fields?.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res, record) {\n const orig = fieldToString(field);\n\n const normalizedFields = processField(clone(field), record);\n const mod = fieldsToString(normalizedFields).replace(/\\t__SEPARATOR__\\t/ug, ', ').replace(/ (‡6 [0-9][0-9][0-9])-[0-9][0-9]+/gu, ' $1-NN'); // eslint-disable-line prefer-named-capture-group\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`CHANGE: ${orig} => ${mod}`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n\n function isCyrillicCharacter(char) {\n return XRegExp('[\\\\p{Cyrillic}]').test(char); // eslint-disable-line new-cap\n }\n\n function containsCyrillicCharacters(str) { // from melinda-ui-cyrillux\n if (!str) {\n return false;\n }\n return str.split('').some(isCyrillicCharacter);\n }\n\n function fieldContainsCyrillicCharacters(field) { // based on melinda-ui-cyrillux\n return field.subfields && field.subfields.some(sf => subfieldShouldTransliterateToIso9(sf));\n }\n\n function subfieldShouldTransliterateToIso9(subfield) {\n if (isControlSubfieldCode(subfield.code)) {\n return false;\n }\n return containsCyrillicCharacters(subfield.value);\n }\n\n function tagCanBeTransliterated(tag) {\n return !['336', '337', '338', '880'].includes(tag);\n }\n\n function fieldCanBeTransliterated(field) {\n // Skip certain tags ('880' is the actual skip-me beef here, but we have seen other no-nos as well).\n // Discussion: We should probably also skip others like 05X-08X, 648, 650, 651, and 655, but this needs thinking...\n // Also I'd like to convert do CYRILLIC->ISO-9 in field 300 (and others?) without 880 mappings... (<- not implemented)\n\n // nvdebug(`fieldCanBeTransliterated('${fieldToString(field)}') in...`);\n if (!tagCanBeTransliterated(field.tag)) {\n return false;\n }\n\n // Skip control fields:\n if (!field.subfields) {\n return false;\n }\n // When doing MELINDA-10330-ish, we noticed that $6 should not prevent translittaration per se, so this restriction is no longer applied!\n\n if (field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>'))) {\n return false;\n }\n\n return fieldContainsCyrillicCharacters(field); // We have something to translitterate:\n }\n\n\n function mapSubfieldToIso9(subfield) {\n if (!subfieldShouldTransliterateToIso9(subfield)) {\n return {code: subfield.code, value: subfield.value}; // just clone\n }\n const value = iso9.convertToLatin(subfield.value);\n\n return {code: subfield.code, value};\n }\n\n function mapSubfieldToSfs4900(subfield) {\n const value = subfieldShouldTransliterateToIso9(subfield) ? sfs4900.convertToLatin(subfield.value).result : subfield.value;\n return {code: subfield.code, value};\n }\n\n\n function mapFieldToIso9(field, occurrenceNumber) {\n // This is the original non-880 field, that will be converted from Cyrillic to ISO\n\n // Just converts the field to ISO-9 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either\n if (!config.doISO9Transliteration && !config.doSFS4900Transliteration) {\n const subfields = field.subfields.map(sf => mapSubfieldToIso9(sf));\n return {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields};\n }\n\n const subfield6 = deriveSubfield6('880', field.subfields, occurrenceNumber);\n const subfield9 = fieldHasSubfield(field, '9', iso9Trans) ? [] : [{code: '9', value: iso9Trans}];\n\n const subfields = field.subfields.filter(sf => sf.code !== '6').map(sf => mapSubfieldToIso9(sf));\n\n return {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [subfield6, ...subfields, ...subfield9]};\n }\n\n function deriveSubfield6(tag, subfields, occurrenceNumber) {\n const initialSubfield = {code: '6', value: `${tag}-${occurrenceNumber}`};\n if (tag === '880') { // If *tag in subfield $6* is 880, field is not 880 :D\n return initialSubfield;\n }\n // Try to use existing subfield\n const [subfield6] = subfields.filter(sf => sf.code === '6').map(sf => clone(sf));\n if (subfield6) {\n resetSubfield6Tag(subfield6, tag); // Should we update occurrence number?\n return subfield6;\n }\n\n return initialSubfield;\n }\n\n function mapFieldToCyrillicField880(field, occurrenceNumber) {\n nvdebug(`Derive CYR 880 from ${fieldToString(field)}`);\n const newSubfield6 = deriveSubfield6(field.tag, field.subfields, occurrenceNumber);\n const newSubfield9 = fieldHasSubfield(field, '9', cyrillicTrans) ? [] : [{code: '9', value: cyrillicTrans}];\n const subfields = [\n newSubfield6,\n ...field.subfields.filter(sf => sf.code !== '6').map(sf => clone(sf)),\n ...newSubfield9\n ];\n\n const newField = {tag: '880', ind1: field.ind1, ind2: field.ind2, subfields};\n nvdebug(` New CYR 880 ${fieldToString(newField)}`);\n return newField;\n }\n\n function mapFieldToSfs4900Field880(field, occurrenceNumber) {\n nvdebug(`Derive SFS 880 from ${fieldToString(field)}`);\n const newSubfield6 = deriveSubfield6(field.tag, field.subfields, occurrenceNumber);\n const newSubfield9 = fieldHasSubfield(field, '9', sfs4900Trans) ? [] : [{code: '9', value: sfs4900Trans}];\n const subfields = [\n newSubfield6,\n ...field.subfields.filter(sf => sf.code !== '6').map(sf => mapSubfieldToSfs4900(sf)),\n ...newSubfield9\n ];\n\n const newField = {tag: '880', ind1: field.ind1, ind2: field.ind2, subfields};\n nvdebug(` SFS 880 ${fieldToString(newField)}`);\n return newField;\n }\n\n function getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber = 0) {\n const occurrenceNumber = fieldGetMaxSubfield6OccurrenceNumberAsInteger(originalField);\n // Return existing occurrence number:\n if (occurrenceNumber > 0) {\n return occurrenceNumber;\n }\n if (maxCreatedOccurrenceNumber) {\n return maxCreatedOccurrenceNumber + 1;\n }\n return recordGetMaxSubfield6OccurrenceNumberAsInteger(record) + 1;\n }\n\n function needsIso9Transliteration(existingPairedFields) {\n if (!config.doISO9Transliteration) {\n return false;\n }\n // Actually normal field is always converted to ISO-9, and this function checks where we move original cyrillic field to 880.\n // Thus we look for field 880$9 \"CYRILLIC <TRANS>\" here, and not \"ISO9 <TRANS>\"!\n return !existingPairedFields.some(f => fieldHasSubfield(f, '9', cyrillicTrans));\n }\n\n function needsSfs4900Transliteration(existingPairedFields) {\n if (!config.doSFS4900Transliteration) {\n return false;\n }\n return !existingPairedFields.some(f => fieldHasSubfield(f, '9', sfs4900Trans));\n }\n\n function sfs4900PairCanBeTransliterated(field, record) {\n // MELINDA-10330: we already have public library data: (unmarked) SFS-4900 in FIELD and (unmarked) Cyrillic in 880\n if (!tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration) {\n return false;\n }\n\n // Original field: $9 ISO9 <TRANS> is the only legal <TRANS>\n if (fieldContainsCyrillicCharacters(field) || field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>') && sf.value !== iso9Trans)) {\n return false;\n }\n\n const existingPairedFields = fieldGetOccurrenceNumberPairs(field, record.get('880'));\n if (existingPairedFields.length !== 1) {\n return false;\n }\n\n // Paired field: $9 CYRILLIC <TRANS> is the only legal <TRANS>\n const [pairedField] = existingPairedFields;\n if (!fieldContainsCyrillicCharacters(pairedField) || pairedField.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>') && sf.value !== cyrillicTrans)) {\n return false;\n }\n\n // Actually check that original field and and sfs-4900-fied cyrillic field are equal (after punctuation clean-up),\n // and thus it's a real case of MELINDA-10330 ISO9 adding:\n const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);\n const field2 = fieldToString(createFieldForSfs4900Comparison(mapFieldToSfs4900Field880(pairedField, occurrenceNumberAsString), field.tag));\n const field1 = fieldToString(createFieldForSfs4900Comparison(field, field.tag));\n nvdebug(`COMPARE CONTENTS:\\n '${field1}' vs\\n '${field2}': ${field1 === field2 ? 'OK' : 'FAIL'}`);\n return field1 === field2;\n }\n\n function createFieldForSfs4900Comparison(field, tag) {\n const clonedField = clone(field);\n clonedField.tag = tag; // eslint-disable-line functional/immutable-data\n clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== '9' || sf.value !== sfs4900Trans); // eslint-disable-line functional/immutable-data\n return fieldStripPunctuation(clonedField);\n }\n\n function transliterateSfs4900Pair(field, record) {\n // Handle MELINDA-10330: Field is already in SFS-4900 and the only paired field is in Cyrillic!\n const [pairedField] = fieldGetOccurrenceNumberPairs(field, record.get('880'));\n\n const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);\n\n const tmpField = {'tag': field.tag, 'ind1': field.ind1, 'ind2': field.ind2, 'subfields': pairedField.subfields};\n\n const newMainField = mapFieldToIso9(tmpField, occurrenceNumberAsString); // Cyrillic => ISO-9\n const newCyrillicField = mapFieldToCyrillicField880(tmpField, occurrenceNumberAsString); // CYRILLIC\n const newSFS4900Field = mapFieldToSfs4900Field880(field, occurrenceNumberAsString); // SFS-4900\n\n // Trigger the drop of original counterpart $6 :\n pairedField.cyrilluxSkip = 1; // eslint-disable-line functional/immutable-data\n\n return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);\n }\n\n\n function processField(originalField, record, maxCreatedOccurrenceNumber = 0) {\n if (!fieldCanBeTransliterated(originalField)) {\n if (sfs4900PairCanBeTransliterated(originalField, record)) { // MELINDA-10330\n return transliterateSfs4900Pair(originalField, record);\n }\n if (originalField.cyrilluxSkip) { // MELINDA-10330 hack to remove 880 fields that were replaced/sort-of processed with their counterpair.\n return [];\n }\n return [originalField];\n }\n\n // nvdebug(`PROCESSING: ${fieldToString(originalField)}`);\n\n const newOccurrenceNumberAsInt = getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber);\n const newOccurrenceNumberAsString = intToOccurrenceNumberString(newOccurrenceNumberAsInt);\n\n // nvdebug(`NEW OCCURRENCE NUMBER: '${newOccurrenceNumberAsString}'`);\n\n const existingPairedFields = fieldGetOccurrenceNumberPairs(originalField, record.get('880'));\n\n // nvdebug(`NUMBER OF PAIRED 880 FIELDS: ${existingPairedFields.length}`);\n\n const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString); // ISO-9\n const newCyrillicField = needsIso9Transliteration(existingPairedFields) ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : undefined; // CYRILLIC\n const newSFS4900Field = needsSfs4900Transliteration(existingPairedFields) ? mapFieldToSfs4900Field880(originalField, newOccurrenceNumberAsString) : undefined; /// SFS-4900\n\n return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"cyrillux.js","names":["_clone","_interopRequireDefault","require","_utils","iso9","_interopRequireWildcard","_subfield6Utils","_xregexp","sfs4900","_sortFields","_reindexSubfield6OccurenceNumbers","_punctuation","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","iso9Trans","cyrillicTrans","sfs4900Trans","_default","config","description","validate","fix","preprocessConfig","doISO9Transliteration","doSFS4900Transliteration","record","res","message","valid","nBefore","fields","length","processFields","reindexSubfield6OccurenceNumbers","sortFields","input","output","currField","remainingInput","fakeRecord","createdMax","recordGetMaxSubfield6OccurrenceNumberAsInteger","result","processField","forEach","field","validateField","orig","fieldToString","normalizedFields","clone","mod","fieldsToString","replace","push","isCyrillicCharacter","char","XRegExp","test","containsCyrillicCharacters","str","split","some","fieldContainsCyrillicCharacters","subfields","sf","subfieldShouldTransliterateToIso9","subfield","isControlSubfieldCode","code","value","tagCanBeTransliterated","tag","includes","fieldCanBeTransliterated","mapSubfieldToIso9","convertToLatin","mapSubfieldToSfs4900","mapFieldToIso9","occurrenceNumber","map","ind1","ind2","subfield6","deriveSubfield6","subfield9","fieldHasSubfield","filter","initialSubfield","resetSubfield6Tag","mapFieldToCyrillicField880","nvdebug","newSubfield6","newSubfield9","newField","mapFieldToSfs4900Field880","getNewOccurrenceNumber","originalField","maxCreatedOccurrenceNumber","fieldGetMaxSubfield6OccurrenceNumberAsInteger","needsIso9Transliteration","existingPairedFields","f","needsSfs4900Transliteration","sfs4900PairCanBeTransliterated","fieldGetOccurrenceNumberPairs","pairedField","occurrenceNumberAsString","fieldGetUnambiguousOccurrenceNumber","field2","createFieldForSfs4900Comparison","field1","clonedField","fieldStripPunctuation","transliterateSfs4900Pair","tmpField","newMainField","newCyrillicField","newSFS4900Field","cyrilluxSkip","newOccurrenceNumberAsInt","newOccurrenceNumberAsString","intToOccurrenceNumberString","undefined"],"sources":["../src/cyrillux.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldHasSubfield, fieldToString, fieldsToString, isControlSubfieldCode, nvdebug} from './utils';\nimport * as iso9 from 'iso9_1995';\nimport {fieldGetMaxSubfield6OccurrenceNumberAsInteger, fieldGetOccurrenceNumberPairs, fieldGetUnambiguousOccurrenceNumber, intToOccurrenceNumberString, recordGetMaxSubfield6OccurrenceNumberAsInteger, resetSubfield6Tag} from './subfield6Utils';\n\nimport XRegExp from 'xregexp';\nimport * as sfs4900 from 'sfs4900';\nimport {default as sortFields} from './sortFields';\nimport {default as reindexSubfield6OccurenceNumbers} from './reindexSubfield6OccurenceNumbers';\nimport {fieldStripPunctuation} from './punctuation2';\n\nconst iso9Trans = 'ISO9 <TRANS>';\nconst cyrillicTrans = 'CYRILLIC <TRANS>';\nconst sfs4900Trans = 'SFS4900 <TRANS>';\n\nexport default function (config = {}) {\n\n return {\n description: 'Cyrillux functionality: convert original field to latinitsa (ISO-9) and add 880s for original cyrillic and latinitsa (SFS-4900)',\n validate, fix\n };\n\n function preprocessConfig() {\n config.doISO9Transliteration = typeof config.doISO9Transliteration === 'undefined' ? true : config.doISO9Transliteration; // eslint-disable-line functional/immutable-data\n config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration === 'undefined' ? true : config.doSFS4900Transliteration; // eslint-disable-line functional/immutable-data\n }\n\n function fix(record) {\n // Fix always succeeds\n const res = {message: [], fix: [], valid: true};\n\n preprocessConfig(config);\n\n const nBefore = record.fields.length;\n\n record.fields = processFields(record.fields); // eslint-disable-line functional/immutable-data\n\n if (nBefore < record.fields.length) { // eslint-disable-line functional/no-conditional-statements\n reindexSubfield6OccurenceNumbers().fix(record);\n sortFields().fix(record);\n }\n\n function processFields(input, output = []) {\n const [currField, ...remainingInput] = input;\n if (!currField) {\n return output;\n }\n\n const fakeRecord = {fields: output};\n const createdMax = recordGetMaxSubfield6OccurrenceNumberAsInteger(fakeRecord);\n const result = processField(currField, record, createdMax);\n\n return processFields(remainingInput, [...output, ...result]);\n }\n\n return res;\n }\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n preprocessConfig(config);\n\n record.fields?.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res, record) {\n const orig = fieldToString(field);\n\n const normalizedFields = processField(clone(field), record);\n const mod = fieldsToString(normalizedFields).replace(/\\t__SEPARATOR__\\t/ug, ', ').replace(/ (‡6 [0-9][0-9][0-9])-[0-9][0-9]+/gu, ' $1-NN'); // eslint-disable-line prefer-named-capture-group\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`CHANGE: ${orig} => ${mod}`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n\n function isCyrillicCharacter(char) {\n return XRegExp('[\\\\p{Cyrillic}]').test(char); // eslint-disable-line new-cap\n }\n\n function containsCyrillicCharacters(str) { // from melinda-ui-cyrillux\n if (!str) {\n return false;\n }\n return str.split('').some(isCyrillicCharacter);\n }\n\n function fieldContainsCyrillicCharacters(field) { // based on melinda-ui-cyrillux\n return field.subfields && field.subfields.some(sf => subfieldShouldTransliterateToIso9(sf));\n }\n\n function subfieldShouldTransliterateToIso9(subfield) {\n if (isControlSubfieldCode(subfield.code)) {\n return false;\n }\n return containsCyrillicCharacters(subfield.value);\n }\n\n function tagCanBeTransliterated(tag) {\n return !['336', '337', '338', '880'].includes(tag);\n }\n\n function fieldCanBeTransliterated(field) {\n // Skip certain tags ('880' is the actual skip-me beef here, but we have seen other no-nos as well).\n // Discussion: We should probably also skip others like 05X-08X, 648, 650, 651, and 655, but this needs thinking...\n // Also I'd like to convert do CYRILLIC->ISO-9 in field 300 (and others?) without 880 mappings... (<- not implemented)\n\n // nvdebug(`fieldCanBeTransliterated('${fieldToString(field)}') in...`);\n if (!tagCanBeTransliterated(field.tag)) {\n return false;\n }\n\n // Skip control fields:\n if (!field.subfields) {\n return false;\n }\n // When doing MELINDA-10330-ish, we noticed that $6 should not prevent translittaration per se, so this restriction is no longer applied!\n\n if (field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>'))) {\n return false;\n }\n\n return fieldContainsCyrillicCharacters(field); // We have something to translitterate:\n }\n\n\n function mapSubfieldToIso9(subfield) {\n if (!subfieldShouldTransliterateToIso9(subfield)) {\n return {code: subfield.code, value: subfield.value}; // just clone\n }\n const value = iso9.convertToLatin(subfield.value);\n\n return {code: subfield.code, value};\n }\n\n function mapSubfieldToSfs4900(subfield) {\n const value = subfieldShouldTransliterateToIso9(subfield) ? sfs4900.convertToLatin(subfield.value).result : subfield.value;\n return {code: subfield.code, value};\n }\n\n\n function mapFieldToIso9(field, occurrenceNumber) {\n // This is the original non-880 field, that will be converted from Cyrillic to ISO\n\n // Just converts the field to ISO-9 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either\n if (!config.doISO9Transliteration && !config.doSFS4900Transliteration) {\n const subfields = field.subfields.map(sf => mapSubfieldToIso9(sf));\n return {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields};\n }\n\n const subfield6 = deriveSubfield6('880', field.subfields, occurrenceNumber);\n const subfield9 = fieldHasSubfield(field, '9', iso9Trans) ? [] : [{code: '9', value: iso9Trans}];\n\n const subfields = field.subfields.filter(sf => sf.code !== '6').map(sf => mapSubfieldToIso9(sf));\n\n return {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [subfield6, ...subfields, ...subfield9]};\n }\n\n function deriveSubfield6(tag, subfields, occurrenceNumber) {\n const initialSubfield = {code: '6', value: `${tag}-${occurrenceNumber}`};\n if (tag === '880') { // If *tag in subfield $6* is 880, field is not 880 :D\n return initialSubfield;\n }\n // Try to use existing subfield\n const [subfield6] = subfields.filter(sf => sf.code === '6').map(sf => clone(sf));\n if (subfield6) {\n resetSubfield6Tag(subfield6, tag); // Should we update occurrence number?\n return subfield6;\n }\n\n return initialSubfield;\n }\n\n function mapFieldToCyrillicField880(field, occurrenceNumber) {\n nvdebug(`Derive CYR 880 from ${fieldToString(field)}`);\n const newSubfield6 = deriveSubfield6(field.tag, field.subfields, occurrenceNumber);\n const newSubfield9 = fieldHasSubfield(field, '9', cyrillicTrans) ? [] : [{code: '9', value: cyrillicTrans}];\n const subfields = [\n newSubfield6,\n ...field.subfields.filter(sf => sf.code !== '6').map(sf => clone(sf)),\n ...newSubfield9\n ];\n\n const newField = {tag: '880', ind1: field.ind1, ind2: field.ind2, subfields};\n nvdebug(` New CYR 880 ${fieldToString(newField)}`);\n return newField;\n }\n\n function mapFieldToSfs4900Field880(field, occurrenceNumber) {\n nvdebug(`Derive SFS 880 from ${fieldToString(field)}`);\n const newSubfield6 = deriveSubfield6(field.tag, field.subfields, occurrenceNumber);\n const newSubfield9 = fieldHasSubfield(field, '9', sfs4900Trans) ? [] : [{code: '9', value: sfs4900Trans}];\n const subfields = [\n newSubfield6,\n ...field.subfields.filter(sf => sf.code !== '6').map(sf => mapSubfieldToSfs4900(sf)),\n ...newSubfield9\n ];\n\n const newField = {tag: '880', ind1: field.ind1, ind2: field.ind2, subfields};\n nvdebug(` SFS 880 ${fieldToString(newField)}`);\n return newField;\n }\n\n function getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber = 0) {\n const occurrenceNumber = fieldGetMaxSubfield6OccurrenceNumberAsInteger(originalField);\n // Return existing occurrence number:\n if (occurrenceNumber > 0) {\n return occurrenceNumber;\n }\n if (maxCreatedOccurrenceNumber) {\n return maxCreatedOccurrenceNumber + 1;\n }\n return recordGetMaxSubfield6OccurrenceNumberAsInteger(record) + 1;\n }\n\n function needsIso9Transliteration(existingPairedFields) {\n if (!config.doISO9Transliteration) {\n return false;\n }\n // Actually normal field is always converted to ISO-9, and this function checks where we move original cyrillic field to 880.\n // Thus we look for field 880$9 \"CYRILLIC <TRANS>\" here, and not \"ISO9 <TRANS>\"!\n return !existingPairedFields.some(f => fieldHasSubfield(f, '9', cyrillicTrans));\n }\n\n function needsSfs4900Transliteration(existingPairedFields) {\n if (!config.doSFS4900Transliteration) {\n return false;\n }\n return !existingPairedFields.some(f => fieldHasSubfield(f, '9', sfs4900Trans));\n }\n\n function sfs4900PairCanBeTransliterated(field, record) {\n // MELINDA-10330: we already have public library data: (unmarked) SFS-4900 in FIELD and (unmarked) Cyrillic in 880\n if (!field.subfields || !tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration) {\n return false;\n }\n\n // Original field: $9 ISO9 <TRANS> is the only legal <TRANS>\n if (fieldContainsCyrillicCharacters(field) || field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>') && sf.value !== iso9Trans)) {\n return false;\n }\n\n const existingPairedFields = fieldGetOccurrenceNumberPairs(field, record.get('880'));\n if (existingPairedFields.length !== 1) {\n return false;\n }\n\n // Paired field: $9 CYRILLIC <TRANS> is the only legal <TRANS>\n const [pairedField] = existingPairedFields;\n if (!fieldContainsCyrillicCharacters(pairedField) || pairedField.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>') && sf.value !== cyrillicTrans)) {\n return false;\n }\n\n // Actually check that original field and and sfs-4900-fied cyrillic field are equal (after punctuation clean-up),\n // and thus it's a real case of MELINDA-10330 ISO9 adding:\n const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);\n const field2 = fieldToString(createFieldForSfs4900Comparison(mapFieldToSfs4900Field880(pairedField, occurrenceNumberAsString), field.tag));\n const field1 = fieldToString(createFieldForSfs4900Comparison(field, field.tag));\n nvdebug(`COMPARE CONTENTS:\\n '${field1}' vs\\n '${field2}': ${field1 === field2 ? 'OK' : 'FAIL'}`);\n return field1 === field2;\n }\n\n function createFieldForSfs4900Comparison(field, tag) {\n const clonedField = clone(field);\n clonedField.tag = tag; // eslint-disable-line functional/immutable-data\n clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== '9' || sf.value !== sfs4900Trans); // eslint-disable-line functional/immutable-data\n return fieldStripPunctuation(clonedField);\n }\n\n function transliterateSfs4900Pair(field, record) {\n // Handle MELINDA-10330: Field is already in SFS-4900 and the only paired field is in Cyrillic!\n const [pairedField] = fieldGetOccurrenceNumberPairs(field, record.get('880'));\n\n const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);\n\n const tmpField = {'tag': field.tag, 'ind1': field.ind1, 'ind2': field.ind2, 'subfields': pairedField.subfields};\n\n const newMainField = mapFieldToIso9(tmpField, occurrenceNumberAsString); // Cyrillic => ISO-9\n const newCyrillicField = mapFieldToCyrillicField880(tmpField, occurrenceNumberAsString); // CYRILLIC\n const newSFS4900Field = mapFieldToSfs4900Field880(field, occurrenceNumberAsString); // SFS-4900\n\n // Trigger the drop of original counterpart $6 :\n pairedField.cyrilluxSkip = 1; // eslint-disable-line functional/immutable-data\n\n return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);\n }\n\n\n function processField(originalField, record, maxCreatedOccurrenceNumber = 0) {\n if (!fieldCanBeTransliterated(originalField)) {\n if (sfs4900PairCanBeTransliterated(originalField, record)) { // MELINDA-10330\n return transliterateSfs4900Pair(originalField, record);\n }\n if (originalField.cyrilluxSkip) { // MELINDA-10330 hack to remove 880 fields that were replaced/sort-of processed with their counterpair.\n return [];\n }\n return [originalField];\n }\n\n // nvdebug(`PROCESSING: ${fieldToString(originalField)}`);\n\n const newOccurrenceNumberAsInt = getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber);\n const newOccurrenceNumberAsString = intToOccurrenceNumberString(newOccurrenceNumberAsInt);\n\n // nvdebug(`NEW OCCURRENCE NUMBER: '${newOccurrenceNumberAsString}'`);\n\n const existingPairedFields = fieldGetOccurrenceNumberPairs(originalField, record.get('880'));\n\n // nvdebug(`NUMBER OF PAIRED 880 FIELDS: ${existingPairedFields.length}`);\n\n const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString); // ISO-9\n const newCyrillicField = needsIso9Transliteration(existingPairedFields) ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : undefined; // CYRILLIC\n const newSFS4900Field = needsSfs4900Transliteration(existingPairedFields) ? mapFieldToSfs4900Field880(originalField, newOccurrenceNumberAsString) : undefined; /// SFS-4900\n\n return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
package/src/cyrillux.js
CHANGED
|
@@ -239,7 +239,7 @@ export default function (config = {}) {
|
|
|
239
239
|
|
|
240
240
|
function sfs4900PairCanBeTransliterated(field, record) {
|
|
241
241
|
// MELINDA-10330: we already have public library data: (unmarked) SFS-4900 in FIELD and (unmarked) Cyrillic in 880
|
|
242
|
-
if (!tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration) {
|
|
242
|
+
if (!field.subfields || !tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration) {
|
|
243
243
|
return false;
|
|
244
244
|
}
|
|
245
245
|
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_validationOptions": {},
|
|
3
|
+
"leader": "00000cam a22008174i 4500",
|
|
4
|
+
"fields": [
|
|
5
|
+
{ "tag": "001", "value": "019168678" },
|
|
6
|
+
{ "tag": "003", "value": "FI-MELINDA" },
|
|
7
|
+
{ "tag": "005", "value": "20240909171519.0" },
|
|
8
|
+
{ "tag": "008", "value": "240903s2024 ru a 000|0|rus|c" },
|
|
9
|
+
{ "tag": "040", "ind1": " ", "ind2": " ", "subfields": [
|
|
10
|
+
{ "code": "a", "value": "FI-He" },
|
|
11
|
+
{ "code": "b", "value": "fin" },
|
|
12
|
+
{ "code": "e", "value": "rda" },
|
|
13
|
+
{ "code": "d", "value": "FI-Piki" }
|
|
14
|
+
]},
|
|
15
|
+
{ "tag": "041", "ind1": "0", "ind2": " ", "subfields": [
|
|
16
|
+
{ "code": "a", "value": "rus" }
|
|
17
|
+
]},
|
|
18
|
+
{ "tag": "100", "ind1": "1", "ind2": " ", "subfields": [
|
|
19
|
+
{ "code": "6", "value": "880-01" },
|
|
20
|
+
{ "code": "a", "value": "Moskalenko, N. V." },
|
|
21
|
+
{ "code": "e", "value": "kirjoittaja." },
|
|
22
|
+
{ "code": "9", "value": "ISO9 <TRANS>" }
|
|
23
|
+
]},
|
|
24
|
+
{ "tag": "245", "ind1": "1", "ind2": "0", "subfields": [
|
|
25
|
+
{ "code": "6", "value": "880-02" },
|
|
26
|
+
{ "code": "a", "value": "Sekrety peterburgskih dvorcov :" },
|
|
27
|
+
{ "code": "b", "value": "ih tajny, simvoly i sozdateli /" },
|
|
28
|
+
{ "code": "c", "value": "Moskalenko N.V." },
|
|
29
|
+
{ "code": "9", "value": "ISO9 <TRANS>" }
|
|
30
|
+
]},
|
|
31
|
+
{ "tag": "246", "ind1": "3", "ind2": "0", "subfields": [
|
|
32
|
+
{ "code": "6", "value": "880-03" },
|
|
33
|
+
{ "code": "a", "value": "Ih tajny, simvoly i sozdateli" },
|
|
34
|
+
{ "code": "9", "value": "ISO9 <TRANS>" }
|
|
35
|
+
]},
|
|
36
|
+
{ "tag": "246", "ind1": "3", "ind2": " ", "subfields": [
|
|
37
|
+
{ "code": "a", "value": "Sekrety peterburgskih dvorcov" }
|
|
38
|
+
]},
|
|
39
|
+
{ "tag": "264", "ind1": " ", "ind2": "1", "subfields": [
|
|
40
|
+
{ "code": "6", "value": "880-04" },
|
|
41
|
+
{ "code": "a", "value": "Moskva :" },
|
|
42
|
+
{ "code": "b", "value": "BOMBORA," },
|
|
43
|
+
{ "code": "c", "value": "2024." }
|
|
44
|
+
]},
|
|
45
|
+
{ "tag": "300", "ind1": " ", "ind2": " ", "subfields": [
|
|
46
|
+
{ "code": "a", "value": "204 sivua" }
|
|
47
|
+
]},
|
|
48
|
+
{ "tag": "336", "ind1": " ", "ind2": " ", "subfields": [
|
|
49
|
+
{ "code": "a", "value": "teksti" },
|
|
50
|
+
{ "code": "b", "value": "txt" },
|
|
51
|
+
{ "code": "2", "value": "rdacontent" }
|
|
52
|
+
]},
|
|
53
|
+
{ "tag": "490", "ind1": "0", "ind2": " ", "subfields": [
|
|
54
|
+
{ "code": "6", "value": "880-05" },
|
|
55
|
+
{ "code": "a", "value": "Dva serdtsa Rossii. Podarochnye izdanija" }
|
|
56
|
+
]},
|
|
57
|
+
{ "tag": "880", "ind1": "1", "ind2": " ", "subfields": [
|
|
58
|
+
{ "code": "6", "value": "100-01" },
|
|
59
|
+
{ "code": "a", "value": "Москаленко, Н. В." },
|
|
60
|
+
{ "code": "e", "value": "kirjoittaja." },
|
|
61
|
+
{ "code": "9", "value": "CYRILLIC <TRANS>" }
|
|
62
|
+
]},
|
|
63
|
+
{ "tag": "880", "ind1": "1", "ind2": " ", "subfields": [
|
|
64
|
+
{ "code": "6", "value": "100-01" },
|
|
65
|
+
{ "code": "a", "value": "Moskalenko, N. V.," },
|
|
66
|
+
{ "code": "e", "value": "kirjoittaja." },
|
|
67
|
+
{ "code": "9", "value": "SFS4900 <TRANS>" }
|
|
68
|
+
]},
|
|
69
|
+
{ "tag": "880", "ind1": "1", "ind2": "0", "subfields": [
|
|
70
|
+
{ "code": "6", "value": "245-02" },
|
|
71
|
+
{ "code": "a", "value": "Секреты петербургских дворцов :" },
|
|
72
|
+
{ "code": "b", "value": "их тайны, символы и создатели /" },
|
|
73
|
+
{ "code": "c", "value": "Москаленко Н.В." },
|
|
74
|
+
{ "code": "9", "value": "CYRILLIC <TRANS>" }
|
|
75
|
+
]},
|
|
76
|
+
{ "tag": "880", "ind1": "1", "ind2": "0", "subfields": [
|
|
77
|
+
{ "code": "6", "value": "245-02" },
|
|
78
|
+
{ "code": "a", "value": "Sekrety peterburgskih dvortsov :" },
|
|
79
|
+
{ "code": "b", "value": "ih tainy, simvoly i sozdateli /" },
|
|
80
|
+
{ "code": "c", "value": "Moskalenko N.V." },
|
|
81
|
+
{ "code": "9", "value": "SFS4900 <TRANS>" }
|
|
82
|
+
]},
|
|
83
|
+
{ "tag": "880", "ind1": "3", "ind2": "0", "subfields": [
|
|
84
|
+
{ "code": "6", "value": "246-03" },
|
|
85
|
+
{ "code": "a", "value": "Их тайны, символы и создатели" },
|
|
86
|
+
{ "code": "9", "value": "CYRILLIC <TRANS>" }
|
|
87
|
+
]},
|
|
88
|
+
{ "tag": "880", "ind1": "3", "ind2": "0", "subfields": [
|
|
89
|
+
{ "code": "6", "value": "246-03" },
|
|
90
|
+
{ "code": "a", "value": "Ih tainy, simvoly i sozdateli" },
|
|
91
|
+
{ "code": "9", "value": "SFS4900 <TRANS>" }
|
|
92
|
+
]},
|
|
93
|
+
{ "tag": "880", "ind1": " ", "ind2": "1", "subfields": [
|
|
94
|
+
{ "code": "6", "value": "264-04" },
|
|
95
|
+
{ "code": "a", "value": "Москва :" },
|
|
96
|
+
{ "code": "b", "value": "БОМБОРА Издательство," },
|
|
97
|
+
{ "code": "c", "value": "2024." }
|
|
98
|
+
]},
|
|
99
|
+
{ "tag": "880", "ind1": "0", "ind2": " ", "subfields": [
|
|
100
|
+
{ "code": "6", "value": "490-05" },
|
|
101
|
+
{ "code": "a", "value": "Два сердца России. Подарочные издания" }
|
|
102
|
+
]},
|
|
103
|
+
{ "tag": "884", "ind1": " ", "ind2": " ", "subfields": [
|
|
104
|
+
{ "code": "a", "value": "Helmet to Melinda MARC transformation" },
|
|
105
|
+
{ "code": "g", "value": "20240903" },
|
|
106
|
+
{ "code": "k", "value": "HELMET:6ab959d4b216289318aebf01167b80d38fa7a2d6844c5d55588823cb63dd1fe3" },
|
|
107
|
+
{ "code": "q", "value": "FI-NL" },
|
|
108
|
+
{ "code": "5", "value": "MELINDA" }
|
|
109
|
+
]},
|
|
110
|
+
{ "tag": "SID", "ind1": " ", "ind2": " ", "subfields": [
|
|
111
|
+
{ "code": "c", "value": "(ANDL100008)5557598" },
|
|
112
|
+
{ "code": "b", "value": "piki" }
|
|
113
|
+
]},
|
|
114
|
+
{ "tag": "SID", "ind1": " ", "ind2": " ", "subfields": [
|
|
115
|
+
{ "code": "c", "value": "2587473" },
|
|
116
|
+
{ "code": "b", "value": "helme" }
|
|
117
|
+
]},
|
|
118
|
+
{ "tag": "LOW", "ind1": " ", "ind2": " ", "subfields": [
|
|
119
|
+
{ "code": "a", "value": "PIKI" }
|
|
120
|
+
]},
|
|
121
|
+
{ "tag": "CAT", "ind1": " ", "ind2": " ", "subfields": [
|
|
122
|
+
{ "code": "a", "value": "IMP_HELMET" },
|
|
123
|
+
{ "code": "b", "value": "30" },
|
|
124
|
+
{ "code": "c", "value": "20240903" },
|
|
125
|
+
{ "code": "l", "value": "FIN01" },
|
|
126
|
+
{ "code": "h", "value": "1858" }
|
|
127
|
+
]}
|
|
128
|
+
|
|
129
|
+
]
|
|
130
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Fix MELINDA-10330, round 3: big file that had issues",
|
|
3
|
+
"comment": "Some sorting issues: SIDs are sorted by $c (bug) and LOW precedes SID...",
|
|
4
|
+
"only": false,
|
|
5
|
+
"fix": true,
|
|
6
|
+
"config": {
|
|
7
|
+
"doISO9Transliteration": true,
|
|
8
|
+
"doSFS4900Transliteration": true
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"leader": "00000cam a22008174i 4500",
|
|
3
|
+
"fields": [
|
|
4
|
+
{ "tag": "001", "value": "019168678" },
|
|
5
|
+
{ "tag": "003", "value": "FI-MELINDA" },
|
|
6
|
+
{ "tag": "005", "value": "20240909171519.0" },
|
|
7
|
+
{ "tag": "008", "value": "240903s2024 ru a 000|0|rus|c" },
|
|
8
|
+
{ "tag": "040", "ind1": " ", "ind2": " ", "subfields": [
|
|
9
|
+
{ "code": "a", "value": "FI-He" },
|
|
10
|
+
{ "code": "b", "value": "fin" },
|
|
11
|
+
{ "code": "e", "value": "rda" },
|
|
12
|
+
{ "code": "d", "value": "FI-Piki" }
|
|
13
|
+
]},
|
|
14
|
+
{ "tag": "041", "ind1": "0", "ind2": " ", "subfields": [
|
|
15
|
+
{ "code": "a", "value": "rus" }
|
|
16
|
+
]},
|
|
17
|
+
{ "tag": "100", "ind1": "1", "ind2": " ", "subfields": [
|
|
18
|
+
{ "code": "6", "value": "880-01" },
|
|
19
|
+
{ "code": "a", "value": "Moskalenko, N. V.," },
|
|
20
|
+
{ "code": "e", "value": "kirjoittaja." }
|
|
21
|
+
]},
|
|
22
|
+
{ "tag": "245", "ind1": "1", "ind2": "0", "subfields": [
|
|
23
|
+
{ "code": "6", "value": "880-02" },
|
|
24
|
+
{ "code": "a", "value": "Sekrety peterburgskih dvortsov :" },
|
|
25
|
+
{ "code": "b", "value": "ih tainy, simvoly i sozdateli /" },
|
|
26
|
+
{ "code": "c", "value": "Moskalenko N.V." }
|
|
27
|
+
]},
|
|
28
|
+
{ "tag": "246", "ind1": "3", "ind2": "0", "subfields": [
|
|
29
|
+
{ "code": "6", "value": "880-03" },
|
|
30
|
+
{ "code": "a", "value": "Ih tainy, simvoly i sozdateli" }
|
|
31
|
+
]},
|
|
32
|
+
{ "tag": "246", "ind1": "3", "ind2": " ", "subfields": [
|
|
33
|
+
{ "code": "a", "value": "Sekrety peterburgskih dvorcov" }
|
|
34
|
+
]},
|
|
35
|
+
{ "tag": "264", "ind1": " ", "ind2": "1", "subfields": [
|
|
36
|
+
{ "code": "6", "value": "880-04" },
|
|
37
|
+
{ "code": "a", "value": "Moskva :" },
|
|
38
|
+
{ "code": "b", "value": "BOMBORA," },
|
|
39
|
+
{ "code": "c", "value": "2024." }
|
|
40
|
+
]},
|
|
41
|
+
{ "tag": "300", "ind1": " ", "ind2": " ", "subfields": [
|
|
42
|
+
{ "code": "a", "value": "204 sivua" }
|
|
43
|
+
]},
|
|
44
|
+
{ "tag": "336", "ind1": " ", "ind2": " ", "subfields": [
|
|
45
|
+
{ "code": "a", "value": "teksti" },
|
|
46
|
+
{ "code": "b", "value": "txt" },
|
|
47
|
+
{ "code": "2", "value": "rdacontent" }
|
|
48
|
+
]},
|
|
49
|
+
{ "tag": "490", "ind1": "0", "ind2": " ", "subfields": [
|
|
50
|
+
{ "code": "6", "value": "880-05" },
|
|
51
|
+
{ "code": "a", "value": "Dva serdtsa Rossii. Podarochnye izdanija" }
|
|
52
|
+
]},
|
|
53
|
+
{ "tag": "880", "ind1": "1", "ind2": " ", "subfields": [
|
|
54
|
+
{ "code": "6", "value": "100-01" },
|
|
55
|
+
{ "code": "a", "value": "Москаленко, Н. В." },
|
|
56
|
+
{ "code": "e", "value": "kirjoittaja." }
|
|
57
|
+
]},
|
|
58
|
+
{ "tag": "880", "ind1": "1", "ind2": "0", "subfields": [
|
|
59
|
+
{ "code": "6", "value": "245-02" },
|
|
60
|
+
{ "code": "a", "value": "Секреты петербургских дворцов :" },
|
|
61
|
+
{ "code": "b", "value": "их тайны, символы и создатели /" },
|
|
62
|
+
{ "code": "c", "value": "Москаленко Н.В." }
|
|
63
|
+
]},
|
|
64
|
+
{ "tag": "880", "ind1": "3", "ind2": "0", "subfields": [
|
|
65
|
+
{ "code": "6", "value": "246-03" },
|
|
66
|
+
{ "code": "a", "value": "Их тайны, символы и создатели" }
|
|
67
|
+
]},
|
|
68
|
+
{ "tag": "880", "ind1": " ", "ind2": "1", "subfields": [
|
|
69
|
+
{ "code": "6", "value": "264-04" },
|
|
70
|
+
{ "code": "a", "value": "Москва :" },
|
|
71
|
+
{ "code": "b", "value": "БОМБОРА Издательство," },
|
|
72
|
+
{ "code": "c", "value": "2024." }
|
|
73
|
+
]},
|
|
74
|
+
{ "tag": "880", "ind1": "0", "ind2": " ", "subfields": [
|
|
75
|
+
{ "code": "6", "value": "490-05" },
|
|
76
|
+
{ "code": "a", "value": "Два сердца России. Подарочные издания" }
|
|
77
|
+
]},
|
|
78
|
+
{ "tag": "884", "ind1": " ", "ind2": " ", "subfields": [
|
|
79
|
+
{ "code": "a", "value": "Helmet to Melinda MARC transformation" },
|
|
80
|
+
{ "code": "g", "value": "20240903" },
|
|
81
|
+
{ "code": "k", "value": "HELMET:6ab959d4b216289318aebf01167b80d38fa7a2d6844c5d55588823cb63dd1fe3" },
|
|
82
|
+
{ "code": "q", "value": "FI-NL" },
|
|
83
|
+
{ "code": "5", "value": "MELINDA" }
|
|
84
|
+
]},
|
|
85
|
+
{ "tag": "SID", "ind1": " ", "ind2": " ", "subfields": [
|
|
86
|
+
{ "code": "c", "value": "2587473" },
|
|
87
|
+
{ "code": "b", "value": "helme" }
|
|
88
|
+
]},
|
|
89
|
+
{ "tag": "SID", "ind1": " ", "ind2": " ", "subfields": [
|
|
90
|
+
{ "code": "c", "value": "(ANDL100008)5557598" },
|
|
91
|
+
{ "code": "b", "value": "piki" }
|
|
92
|
+
]},
|
|
93
|
+
{ "tag": "CAT", "ind1": " ", "ind2": " ", "subfields": [
|
|
94
|
+
{ "code": "a", "value": "IMP_HELMET" },
|
|
95
|
+
{ "code": "b", "value": "30" },
|
|
96
|
+
{ "code": "c", "value": "20240903" },
|
|
97
|
+
{ "code": "l", "value": "FIN01" },
|
|
98
|
+
{ "code": "h", "value": "1858" }
|
|
99
|
+
]},
|
|
100
|
+
{ "tag": "LOW", "ind1": " ", "ind2": " ", "subfields": [
|
|
101
|
+
{ "code": "a", "value": "PIKI" }
|
|
102
|
+
]}
|
|
103
|
+
]
|
|
104
|
+
}
|