@natlibfi/marc-record-validators-melinda 10.15.1 → 10.15.2-alpha.3
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/ending-punctuation.js +0 -5
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-punctuation.spec.js +0 -8
- package/dist/ending-punctuation.spec.js.map +1 -1
- package/dist/field-505-separators.js +0 -2
- package/dist/field-505-separators.js.map +1 -1
- package/dist/field-521-fix.js +0 -1
- package/dist/field-521-fix.js.map +1 -1
- package/dist/field-exclusion.js +0 -3
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +0 -2
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/fixRelatorTerms.js +1 -2
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/identical-fields.js +0 -1
- package/dist/identical-fields.js.map +1 -1
- package/dist/indicator-fixes.js +0 -7
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/isbn-issn.js +0 -3
- package/dist/isbn-issn.js.map +1 -1
- package/dist/item-language.js +0 -1
- package/dist/item-language.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js +0 -3
- package/dist/mergeField500Lisapainokset.js.map +1 -1
- package/dist/mergeRelatorTermFields.js +1 -2
- package/dist/mergeRelatorTermFields.js.map +1 -1
- package/dist/normalize-identifiers.js +2 -0
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-qualifying-information.js +0 -1
- package/dist/normalize-qualifying-information.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js +3 -0
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalizeFieldForComparison.js +0 -6
- package/dist/normalizeFieldForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js +0 -1
- package/dist/prepublicationUtils.js.map +1 -1
- package/dist/punctuation/index.js +0 -9
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation2.js +7 -14
- package/dist/punctuation2.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js +0 -1
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
- package/dist/removeDuplicateDataFields.js +0 -6
- package/dist/removeDuplicateDataFields.js.map +1 -1
- package/dist/removeInferiorDataFields.js +29 -14
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +0 -3
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js +0 -2
- package/dist/resolveOrphanedSubfield6s.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js +1 -0
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/sort-tags.js +0 -1
- package/dist/sort-tags.js.map +1 -1
- package/dist/sortFields.js +1 -1
- package/dist/sortFields.js.map +1 -1
- package/dist/sortRelatorTerms.js +1 -1
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortSubfields.js +0 -3
- package/dist/sortSubfields.js.map +1 -1
- package/dist/subfield-exclusion.js +0 -4
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield-exclusion.spec.js +1 -0
- package/dist/subfield-exclusion.spec.js.map +1 -1
- package/dist/subfield6Utils.js +0 -6
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/subfield8Utils.js +0 -2
- package/dist/subfield8Utils.js.map +1 -1
- package/dist/subfieldValueNormalizations.js +0 -1
- package/dist/subfieldValueNormalizations.js.map +1 -1
- package/dist/sync-007-and-300.js +1 -2
- package/dist/sync-007-and-300.js.map +1 -1
- package/dist/unicode-decomposition.js +0 -1
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/update-field-540.js +1 -1
- package/dist/update-field-540.js.map +1 -1
- package/dist/urn.js +0 -1
- package/dist/urn.js.map +1 -1
- package/dist/utils.js +0 -1
- package/dist/utils.js.map +1 -1
- package/package.json +10 -10
- package/src/normalize-utf8-diacritics.js +2 -2
- package/src/punctuation2.js +4 -3
- package/src/removeInferiorDataFields.js +33 -13
- package/test-fixtures/punctuation2/96/expectedResult.json +26 -0
- package/test-fixtures/punctuation2/96/metadata.json +6 -0
- package/test-fixtures/punctuation2/96/record.json +25 -0
- package/test-fixtures/remove-inferior-datafields/f12/expectedResult.json +15 -0
- package/test-fixtures/remove-inferior-datafields/f12/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/f12/record.json +22 -0
- package/test-fixtures/remove-inferior-datafields/f13/expectedResult.json +11 -0
- package/test-fixtures/remove-inferior-datafields/f13/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/f13/record.json +15 -0
- package/test-fixtures/strip-punctuation/96/expectedResult.json +26 -0
- package/test-fixtures/strip-punctuation/96/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/96/record.json +25 -0
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"url": "git@github.com:natlibfi/marc-record-validators-melinda.git"
|
|
15
15
|
},
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"version": "10.15.
|
|
17
|
+
"version": "10.15.2-alpha.3",
|
|
18
18
|
"main": "./dist/index.js",
|
|
19
19
|
"publishConfig": {
|
|
20
20
|
"access": "public"
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@babel/register": "^7.22.15",
|
|
39
39
|
"@natlibfi/issn-verify": "^1.0.3",
|
|
40
|
-
"@natlibfi/marc-record": "^8.0.
|
|
41
|
-
"@natlibfi/marc-record-validate": "^8.0.
|
|
40
|
+
"@natlibfi/marc-record": "^8.0.2",
|
|
41
|
+
"@natlibfi/marc-record-validate": "^8.0.4",
|
|
42
42
|
"cld3-asm": "^3.1.1",
|
|
43
43
|
"clone": "^2.1.2",
|
|
44
44
|
"debug": "^4.3.4",
|
|
@@ -48,22 +48,22 @@
|
|
|
48
48
|
"xml2js": "^0.6.2"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"@natlibfi/marc-record-validate": "^8.0.
|
|
51
|
+
"@natlibfi/marc-record-validate": "^8.0.4"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@babel/cli": "^7.23.
|
|
55
|
-
"@babel/core": "^7.23.
|
|
54
|
+
"@babel/cli": "^7.23.4",
|
|
55
|
+
"@babel/core": "^7.23.6",
|
|
56
56
|
"@babel/eslint-parser": "^7.23.3",
|
|
57
|
-
"@babel/preset-env": "^7.23.
|
|
57
|
+
"@babel/preset-env": "^7.23.6",
|
|
58
58
|
"@natlibfi/eslint-config-melinda-backend": "^3.0.3",
|
|
59
|
-
"@natlibfi/fixugen": "^2.0.
|
|
60
|
-
"@natlibfi/fixura": "^3.0.
|
|
59
|
+
"@natlibfi/fixugen": "^2.0.3",
|
|
60
|
+
"@natlibfi/fixura": "^3.0.3",
|
|
61
61
|
"babel-plugin-istanbul": "^6.1.1",
|
|
62
62
|
"babel-plugin-rewire": "^1.2.0",
|
|
63
63
|
"chai": "^4.3.10",
|
|
64
64
|
"chai-as-promised": "^7.1.1",
|
|
65
65
|
"cross-env": "^7.0.3",
|
|
66
|
-
"eslint": "^8.
|
|
66
|
+
"eslint": "^8.55.0",
|
|
67
67
|
"fetch-mock": "^9.11.0",
|
|
68
68
|
"mocha": "^10.2.0",
|
|
69
69
|
"nyc": "^15.1.0"
|
|
@@ -77,7 +77,7 @@ export default function () {
|
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
// Traditionally these six are precomposed and all the rest decomposed
|
|
80
|
-
function precomposeFinnishLetters(value = '') {
|
|
80
|
+
export function precomposeFinnishLetters(value = '') {
|
|
81
81
|
return value.
|
|
82
82
|
replace(/å/gu, 'å').
|
|
83
83
|
replace(/ä/gu, 'ä').
|
|
@@ -87,7 +87,7 @@ function precomposeFinnishLetters(value = '') {
|
|
|
87
87
|
replace(/Ö/gu, 'Ö');
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
function fixComposition(value = '') {
|
|
90
|
+
export function fixComposition(value = '') {
|
|
91
91
|
// Target: Diacritics use Melinda internal notation.
|
|
92
92
|
// General solution: Decompose everything and then compose 'å', 'ä', 'ö', 'Å', 'Ä' and 'Ö'.
|
|
93
93
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
|
package/src/punctuation2.js
CHANGED
|
@@ -111,11 +111,12 @@ const cleanPuncBeforeLanguage = {'code': 'atvxyz', 'followedBy': 'l', 'context':
|
|
|
111
111
|
|
|
112
112
|
const addX00aComma = {'add': ',', 'code': 'abcqdej', 'followedBy': 'cdeg', 'context': commaNeedsPuncAfter, 'contextRHS': allowsPuncRHS};
|
|
113
113
|
const addX00aComma2 = {'add': ',', 'code': 'abcdej', 'followedBy': 'cdeg', 'context': /(?:[A-Z]|Å|Ä|Ö)\.$/u, 'contextRHS': allowsPuncRHS};
|
|
114
|
-
const addX00aDot = {'add': '.', 'code': '
|
|
114
|
+
const addX00aDot = {'add': '.', 'code': 'abcdet', 'followedBy': '#tu', 'context': defaultNeedsPuncAfter};
|
|
115
115
|
|
|
116
|
+
//const addX10iaComma = {'name': 'Punctuate relationship information', 'code': 'i', 'followedBy': 'a', 'context': defaultNeedsPuncAfter2};
|
|
116
117
|
const addX10bDot = {'name': 'Add X10 pre-$b dot', 'add': '.', 'code': 'ab', 'followedBy': 'b', 'context': defaultNeedsPuncAfter};
|
|
117
118
|
const addX10eComma = {'add': ',', 'code': 'abe', 'followedBy': 'e', 'context': defaultNeedsPuncAfter};
|
|
118
|
-
const addX10Dot = {'name': 'Add X10 final dot', 'add': '.', 'code': '
|
|
119
|
+
const addX10Dot = {'name': 'Add X10 final dot', 'add': '.', 'code': 'abet', 'followedBy': 'tu#', 'context': defaultNeedsPuncAfter};
|
|
119
120
|
const addLanguageComma = {'name': 'Add comma before 810$l', 'add': ',', 'code': 'tv', 'followedBy': 'l', 'context': defaultNeedsPuncAfter2};
|
|
120
121
|
const addColonToRelationshipInformation = {'name': 'Add \':\' to 7X0 $i relationship info', 'add': ':', 'code': 'i', 'context': defaultNeedsPuncAfter2};
|
|
121
122
|
|
|
@@ -194,7 +195,7 @@ const cleanLanguageComma = {'name': 'language comma', 'code': 'tv', 'followedBy'
|
|
|
194
195
|
const legalX00punc = [cleanLegalX00Comma, cleanLegalX00iColon, cleanLegalX00bDot, cleanLegalX00Dot, cleanLanguageComma];
|
|
195
196
|
|
|
196
197
|
const cleanLegalX10Comma = {'name': 'X10comma', 'code': 'abe', 'followedBy': 'e', 'context': /.,$/u, 'remove': /,$/u};
|
|
197
|
-
const cleanLegalX10Dot = {'name': 'X10dot', 'code': '
|
|
198
|
+
const cleanLegalX10Dot = {'name': 'X10dot', 'code': 'abt', 'followedBy': 'bst#', 'context': /.\.$/u, 'remove': /\.$/u};
|
|
198
199
|
|
|
199
200
|
const legalX10punc = [cleanLegalX10Comma, cleanLegalX10Dot, cleanX00eDot, cleanLanguageComma];
|
|
200
201
|
|
|
@@ -5,6 +5,7 @@ import {fieldHasSubfield, fieldsToString, fieldToString, nvdebug, uniqArray} fro
|
|
|
5
5
|
import {fieldHasValidSubfield8} from './subfield8Utils';
|
|
6
6
|
import {encodingLevelIsBetterThanPrepublication, fieldRefersToKoneellisestiTuotettuTietue, getEncodingLevel} from './prepublicationUtils';
|
|
7
7
|
import {cloneAndNormalizeFieldForComparison} from './normalizeFieldForComparison';
|
|
8
|
+
import {fixComposition, precomposeFinnishLetters} from './normalize-utf8-diacritics';
|
|
8
9
|
|
|
9
10
|
// Relocated from melinda-marc-record-merge-reducers (and renamed)
|
|
10
11
|
|
|
@@ -241,14 +242,21 @@ function deriveIndividualDeletables(record) {
|
|
|
241
242
|
return deletables;
|
|
242
243
|
}
|
|
243
244
|
|
|
245
|
+
const accentless = getAccentlessVersion(currString);
|
|
246
|
+
const d490 = deriveIndividualDeletables490([currString]);
|
|
247
|
+
const subsets = getIdentifierlessAndKeeplessSubsets(currString); // eslint-disable-line no-param-reassign
|
|
248
|
+
const moreToDo = [...accentless, ...d490, ...subsets];
|
|
249
|
+
|
|
250
|
+
|
|
244
251
|
if (currString.match(/^[1678]00/u)) {
|
|
245
|
-
// Proof-of-
|
|
252
|
+
// Proof-of-concept rule. Should be improved eventually...
|
|
246
253
|
if (currString.match(/, ‡e [^‡]+\.$/u)) {
|
|
247
254
|
const tmp = currString.replace(/, ‡e [^‡]+\.$/u, '.');
|
|
248
|
-
return processTodoList([tmp, ...stillToDo], [...deletables, tmp]);
|
|
255
|
+
return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
249
256
|
}
|
|
250
257
|
}
|
|
251
258
|
|
|
259
|
+
|
|
252
260
|
if (currString.match(/^505 .0.*-- ‡t/u)) { // MRA-413-ish
|
|
253
261
|
const tmp = currString.replace(/ -- ‡t /gu, ' -- '). // remove non-initial $t subfields
|
|
254
262
|
replace(/ ‡[rg] /gu, ' '). // remove $r and $g subfields
|
|
@@ -256,7 +264,7 @@ function deriveIndividualDeletables(record) {
|
|
|
256
264
|
// ind2: '1' => '#':
|
|
257
265
|
replace(/^505 (.)0/u, '505 $1#'); // eslint-disable-line prefer-named-capture-group
|
|
258
266
|
if (tmp !== currString) {
|
|
259
|
-
return processTodoList([tmp, ...stillToDo], [...deletables, tmp]);
|
|
267
|
+
return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
260
268
|
}
|
|
261
269
|
//nvdebug(`505 ORIGINAL: '${fieldAsString}'`)
|
|
262
270
|
//nvdebug(`505 DERIVATE: '${tmp}'`)
|
|
@@ -270,23 +278,35 @@ function deriveIndividualDeletables(record) {
|
|
|
270
278
|
if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\/[^ ]+ /u)) {
|
|
271
279
|
const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group
|
|
272
280
|
//nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);
|
|
273
|
-
return processTodoList(stillToDo, [...deletables, tmp, tmp2]);
|
|
281
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp, tmp2]);
|
|
274
282
|
}
|
|
275
|
-
return processTodoList(stillToDo, [...deletables, tmp]);
|
|
283
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
276
284
|
}
|
|
277
285
|
|
|
278
|
-
const d490 = deriveIndividualDeletables490([currString]);
|
|
279
|
-
if (d490.length) {
|
|
280
|
-
return processTodoList([...stillToDo, ...d490], [...deletables, ...d490]);
|
|
281
|
-
}
|
|
282
|
-
// d490.forEach(str => deletables.push(str)); // eslint-disable-line functional/immutable-data
|
|
283
286
|
|
|
284
|
-
const
|
|
287
|
+
const ennakkotieto653 = currString.match(/^653./u) ? [`${currString} ‡g ENNAKKOTIETO`] : []; // MET-528
|
|
288
|
+
|
|
289
|
+
const newDeletables = [...deletables, ...subsets, ...accentless, ...d490, ...ennakkotieto653];
|
|
290
|
+
|
|
285
291
|
if (subsets.length) {
|
|
286
|
-
return processTodoList([...stillToDo, ...
|
|
292
|
+
return processTodoList([...stillToDo, ...moreToDo], newDeletables);
|
|
287
293
|
}
|
|
288
294
|
|
|
289
|
-
return processTodoList(stillToDo,
|
|
295
|
+
return processTodoList([...stillToDo, ...moreToDo], newDeletables);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function getAccentlessVersion(string) { // MET-527
|
|
299
|
+
//nvdebug(`START: '${string}`);
|
|
300
|
+
// This is a sanity check: if precomposition does something, there's something wrong, and we don't want to proceed..
|
|
301
|
+
if (string !== precomposeFinnishLetters(string)) {
|
|
302
|
+
return [];
|
|
303
|
+
}
|
|
304
|
+
const accentless = String(fixComposition(string)).replace(/\p{Diacritic}/gu, '');
|
|
305
|
+
//nvdebug(`FROM '${string}'\n TO '${accentless}'`);
|
|
306
|
+
if (accentless === string) { // Don't self-destruct
|
|
307
|
+
return [];
|
|
308
|
+
}
|
|
309
|
+
return [accentless];
|
|
290
310
|
}
|
|
291
311
|
|
|
292
312
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"leader": "01331cam a22003494i 4500",
|
|
3
|
+
"_validationOptions": {},
|
|
4
|
+
"fields": [
|
|
5
|
+
{ "tag": "001", "value": "000000001" },
|
|
6
|
+
|
|
7
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
8
|
+
{ "code": "a", "value": "Pulun Yliopisto." },
|
|
9
|
+
{ "code": "b", "value": "Yksikkö." },
|
|
10
|
+
{ "code": "b", "value": "Alayksikkö." }
|
|
11
|
+
]},
|
|
12
|
+
|
|
13
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
14
|
+
{ "code": "a", "value": "Pulun Yliopisto." },
|
|
15
|
+
{ "code": "b", "value": "Yksikkö," },
|
|
16
|
+
{ "code": "e", "value": "julkaisija." }
|
|
17
|
+
]},
|
|
18
|
+
|
|
19
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
20
|
+
{ "code": "i", "value": "Sisältää (teos):" },
|
|
21
|
+
{ "code": "a", "value": "Whatever." },
|
|
22
|
+
{ "code": "t", "value": "Bulebule." }
|
|
23
|
+
]}
|
|
24
|
+
|
|
25
|
+
]
|
|
26
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"leader": "01331cam a22003494i 4500",
|
|
3
|
+
"fields": [
|
|
4
|
+
{ "tag": "001", "value": "000000001" },
|
|
5
|
+
|
|
6
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
7
|
+
{ "code": "a", "value": "Pulun Yliopisto" },
|
|
8
|
+
{ "code": "b", "value": "Yksikkö" },
|
|
9
|
+
{ "code": "b", "value": "Alayksikkö" }
|
|
10
|
+
]},
|
|
11
|
+
|
|
12
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
13
|
+
{ "code": "a", "value": "Pulun Yliopisto" },
|
|
14
|
+
{ "code": "b", "value": "Yksikkö" },
|
|
15
|
+
{ "code": "e", "value": "julkaisija" }
|
|
16
|
+
]},
|
|
17
|
+
|
|
18
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
19
|
+
{ "code": "i", "value": "Sisältää (teos)" },
|
|
20
|
+
{ "code": "a", "value": "Whatever" },
|
|
21
|
+
{ "code": "t", "value": "Bulebule" }
|
|
22
|
+
]}
|
|
23
|
+
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_validationOptions": {},
|
|
3
|
+
"fields": [
|
|
4
|
+
{ "tag": "001", "value": "f13" },
|
|
5
|
+
{ "tag": "490", "ind1": "0", "ind2": " ", "subfields": [
|
|
6
|
+
{ "code": "a", "value": "Mortuí non silent ;"},
|
|
7
|
+
{ "code": "v", "value": "v2"}
|
|
8
|
+
]},
|
|
9
|
+
{ "tag": "600", "ind1": "1", "ind2": "4", "subfields": [
|
|
10
|
+
{ "code": "a", "value": "Sirén, Matti"}
|
|
11
|
+
]}
|
|
12
|
+
],
|
|
13
|
+
"leader": "01331cam a22003498i 4500"
|
|
14
|
+
|
|
15
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_validationOptions": {},
|
|
3
|
+
"fields": [
|
|
4
|
+
{ "tag": "001", "value": "f13" },
|
|
5
|
+
{ "tag": "490", "ind1": "0", "ind2": " ", "subfields": [
|
|
6
|
+
{ "code": "a", "value": "Mortuí non silent ;"},
|
|
7
|
+
{ "code": "v", "value": "v2"}
|
|
8
|
+
]},
|
|
9
|
+
{ "tag": "490", "ind1": "0", "ind2": " ", "subfields": [
|
|
10
|
+
{ "code": "a", "value": "Mortui non silent ;"},
|
|
11
|
+
{ "code": "v", "value": "v2"}
|
|
12
|
+
]},
|
|
13
|
+
{ "tag": "600", "ind1": "1", "ind2": "4", "subfields": [
|
|
14
|
+
{ "code": "a", "value": "Sirén, Matti"}
|
|
15
|
+
]},
|
|
16
|
+
{ "tag": "600", "ind1": "1", "ind2": "4", "subfields": [
|
|
17
|
+
{ "code": "a", "value": "Siren, Matti"}
|
|
18
|
+
]}
|
|
19
|
+
],
|
|
20
|
+
"leader": "01331cam a22003498i 4500"
|
|
21
|
+
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_validationOptions": {},
|
|
3
|
+
"fields": [
|
|
4
|
+
{ "tag": "001", "value": "f13" },
|
|
5
|
+
{ "tag": "653", "ind1": " ", "ind2": " ", "subfields": [
|
|
6
|
+
{ "code": "a", "value": "taikasana"}
|
|
7
|
+
]},
|
|
8
|
+
{ "tag": "653", "ind1": " ", "ind2": " ", "subfields": [
|
|
9
|
+
{ "code": "a", "value": "taikasana"},
|
|
10
|
+
{ "code": "g", "value": "ENNAKKOTIETO"}
|
|
11
|
+
]}
|
|
12
|
+
],
|
|
13
|
+
"leader": "01331cam a22003498i 4500"
|
|
14
|
+
|
|
15
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_validationOptions": {},
|
|
3
|
+
"leader": "01331cam a22003494i 4500",
|
|
4
|
+
"fields": [
|
|
5
|
+
{ "tag": "001", "value": "000000001" },
|
|
6
|
+
|
|
7
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
8
|
+
{ "code": "a", "value": "Pulun Yliopisto" },
|
|
9
|
+
{ "code": "b", "value": "Yksikkö" },
|
|
10
|
+
{ "code": "b", "value": "Alayksikkö" }
|
|
11
|
+
]},
|
|
12
|
+
|
|
13
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
14
|
+
{ "code": "a", "value": "Pulun Yliopisto" },
|
|
15
|
+
{ "code": "b", "value": "Yksikkö" },
|
|
16
|
+
{ "code": "e", "value": "julkaisija" }
|
|
17
|
+
]},
|
|
18
|
+
|
|
19
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
20
|
+
{ "code": "i", "value": "Sisältää (teos)" },
|
|
21
|
+
{ "code": "a", "value": "Whatever" },
|
|
22
|
+
{ "code": "t", "value": "Bulebule" }
|
|
23
|
+
]}
|
|
24
|
+
|
|
25
|
+
]
|
|
26
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"leader": "01331cam a22003494i 4500",
|
|
3
|
+
"fields": [
|
|
4
|
+
{ "tag": "001", "value": "000000001" },
|
|
5
|
+
|
|
6
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
7
|
+
{ "code": "a", "value": "Pulun Yliopisto." },
|
|
8
|
+
{ "code": "b", "value": "Yksikkö." },
|
|
9
|
+
{ "code": "b", "value": "Alayksikkö." }
|
|
10
|
+
]},
|
|
11
|
+
|
|
12
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
13
|
+
{ "code": "a", "value": "Pulun Yliopisto." },
|
|
14
|
+
{ "code": "b", "value": "Yksikkö," },
|
|
15
|
+
{ "code": "e", "value": "julkaisija." }
|
|
16
|
+
]},
|
|
17
|
+
|
|
18
|
+
{ "tag": "710", "ind1": "2", "ind2": " ", "subfields": [
|
|
19
|
+
{ "code": "i", "value": "Sisältää (teos):" },
|
|
20
|
+
{ "code": "a", "value": "Whatever." },
|
|
21
|
+
{ "code": "t", "value": "Bulebule." }
|
|
22
|
+
]}
|
|
23
|
+
|
|
24
|
+
]
|
|
25
|
+
}
|