relaton-iso-bib 1.1.1 → 1.2.0
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.
- checksums.yaml +4 -4
- data/grammars/biblio.rng +1 -1
- data/grammars/isodoc.rng +427 -0
- data/grammars/isostandard.rng +3 -0
- data/lib/relaton_iso_bib/hash_converter.rb +2 -69
- data/lib/relaton_iso_bib/iso_bibliographic_item.rb +12 -151
- data/lib/relaton_iso_bib/structured_identifier.rb +7 -4
- data/lib/relaton_iso_bib/version.rb +1 -1
- data/lib/relaton_iso_bib/xml_parser.rb +4 -11
- data/relaton_iso_bib.gemspec +1 -1
- metadata +4 -5
- data/lib/relaton_iso_bib/typed_title_string.rb +0 -32
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b02914af398916111849f7377145375f05ce647e3ff02c6c2ca83013464b4d0
|
|
4
|
+
data.tar.gz: b32bddded529b02ae662959a692cf03e6a4df256751da54648fe9aca899845d3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c5521cd8a693d3ba710aa6a3c1675033682ef390d882603398cdb15f2826182dd7b3bf8e5e00fcdd44f9e13d7b7676ea5aab357e9d76a94e639a4ae4c4179133
|
|
7
|
+
data.tar.gz: e92e7afbdead56a076456aba13be52f1484b191736787d3b4c3928daa6e77259ccaba67d6e2af1ebb59b4acf73277b984875c8caf96d3a4fa1a8021a4cade423
|
data/grammars/biblio.rng
CHANGED
|
@@ -532,7 +532,7 @@
|
|
|
532
532
|
</define>
|
|
533
533
|
<define name="LocalityType">
|
|
534
534
|
<data type="string">
|
|
535
|
-
<param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|locality:[a-zA-Z0-9_]+</param>
|
|
535
|
+
<param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
|
|
536
536
|
</data>
|
|
537
537
|
</define>
|
|
538
538
|
<define name="referenceFrom">
|
data/grammars/isodoc.rng
CHANGED
|
@@ -64,6 +64,85 @@
|
|
|
64
64
|
<text/>
|
|
65
65
|
</element>
|
|
66
66
|
</define>
|
|
67
|
+
<define name="ul">
|
|
68
|
+
<element name="ul">
|
|
69
|
+
<attribute name="id">
|
|
70
|
+
<data type="ID"/>
|
|
71
|
+
</attribute>
|
|
72
|
+
<optional>
|
|
73
|
+
<attribute name="keep-with-next">
|
|
74
|
+
<data type="boolean"/>
|
|
75
|
+
</attribute>
|
|
76
|
+
</optional>
|
|
77
|
+
<optional>
|
|
78
|
+
<attribute name="keep-lines-together">
|
|
79
|
+
<data type="boolean"/>
|
|
80
|
+
</attribute>
|
|
81
|
+
</optional>
|
|
82
|
+
<oneOrMore>
|
|
83
|
+
<ref name="li"/>
|
|
84
|
+
</oneOrMore>
|
|
85
|
+
<zeroOrMore>
|
|
86
|
+
<ref name="note"/>
|
|
87
|
+
</zeroOrMore>
|
|
88
|
+
</element>
|
|
89
|
+
</define>
|
|
90
|
+
<define name="ol">
|
|
91
|
+
<element name="ol">
|
|
92
|
+
<attribute name="id">
|
|
93
|
+
<data type="ID"/>
|
|
94
|
+
</attribute>
|
|
95
|
+
<optional>
|
|
96
|
+
<attribute name="keep-with-next">
|
|
97
|
+
<data type="boolean"/>
|
|
98
|
+
</attribute>
|
|
99
|
+
</optional>
|
|
100
|
+
<optional>
|
|
101
|
+
<attribute name="keep-lines-together">
|
|
102
|
+
<data type="boolean"/>
|
|
103
|
+
</attribute>
|
|
104
|
+
</optional>
|
|
105
|
+
<attribute name="type">
|
|
106
|
+
<choice>
|
|
107
|
+
<value>roman</value>
|
|
108
|
+
<value>alphabet</value>
|
|
109
|
+
<value>arabic</value>
|
|
110
|
+
<value>roman_upper</value>
|
|
111
|
+
<value>alphabet_upper</value>
|
|
112
|
+
</choice>
|
|
113
|
+
</attribute>
|
|
114
|
+
<oneOrMore>
|
|
115
|
+
<ref name="li"/>
|
|
116
|
+
</oneOrMore>
|
|
117
|
+
<zeroOrMore>
|
|
118
|
+
<ref name="note"/>
|
|
119
|
+
</zeroOrMore>
|
|
120
|
+
</element>
|
|
121
|
+
</define>
|
|
122
|
+
<define name="dl">
|
|
123
|
+
<element name="dl">
|
|
124
|
+
<attribute name="id">
|
|
125
|
+
<data type="ID"/>
|
|
126
|
+
</attribute>
|
|
127
|
+
<optional>
|
|
128
|
+
<attribute name="keep-with-next">
|
|
129
|
+
<data type="boolean"/>
|
|
130
|
+
</attribute>
|
|
131
|
+
</optional>
|
|
132
|
+
<optional>
|
|
133
|
+
<attribute name="keep-lines-together">
|
|
134
|
+
<data type="boolean"/>
|
|
135
|
+
</attribute>
|
|
136
|
+
</optional>
|
|
137
|
+
<oneOrMore>
|
|
138
|
+
<ref name="dt"/>
|
|
139
|
+
<ref name="dd"/>
|
|
140
|
+
</oneOrMore>
|
|
141
|
+
<zeroOrMore>
|
|
142
|
+
<ref name="note"/>
|
|
143
|
+
</zeroOrMore>
|
|
144
|
+
</element>
|
|
145
|
+
</define>
|
|
67
146
|
<define name="example">
|
|
68
147
|
<element name="example">
|
|
69
148
|
<attribute name="id">
|
|
@@ -77,6 +156,19 @@
|
|
|
77
156
|
<optional>
|
|
78
157
|
<attribute name="subsequence"/>
|
|
79
158
|
</optional>
|
|
159
|
+
<optional>
|
|
160
|
+
<attribute name="number"/>
|
|
161
|
+
</optional>
|
|
162
|
+
<optional>
|
|
163
|
+
<attribute name="keep-with-next">
|
|
164
|
+
<data type="boolean"/>
|
|
165
|
+
</attribute>
|
|
166
|
+
</optional>
|
|
167
|
+
<optional>
|
|
168
|
+
<attribute name="keep-lines-together">
|
|
169
|
+
<data type="boolean"/>
|
|
170
|
+
</attribute>
|
|
171
|
+
</optional>
|
|
80
172
|
<optional>
|
|
81
173
|
<ref name="tname"/>
|
|
82
174
|
</optional>
|
|
@@ -97,6 +189,296 @@
|
|
|
97
189
|
</zeroOrMore>
|
|
98
190
|
</element>
|
|
99
191
|
</define>
|
|
192
|
+
<define name="table">
|
|
193
|
+
<element name="table">
|
|
194
|
+
<attribute name="id">
|
|
195
|
+
<data type="ID"/>
|
|
196
|
+
</attribute>
|
|
197
|
+
<optional>
|
|
198
|
+
<attribute name="unnumbered">
|
|
199
|
+
<data type="boolean"/>
|
|
200
|
+
</attribute>
|
|
201
|
+
</optional>
|
|
202
|
+
<optional>
|
|
203
|
+
<attribute name="number"/>
|
|
204
|
+
</optional>
|
|
205
|
+
<optional>
|
|
206
|
+
<attribute name="subsequence"/>
|
|
207
|
+
</optional>
|
|
208
|
+
<optional>
|
|
209
|
+
<attribute name="alt"/>
|
|
210
|
+
</optional>
|
|
211
|
+
<optional>
|
|
212
|
+
<attribute name="summary"/>
|
|
213
|
+
</optional>
|
|
214
|
+
<optional>
|
|
215
|
+
<attribute name="uri">
|
|
216
|
+
<data type="anyURI"/>
|
|
217
|
+
</attribute>
|
|
218
|
+
</optional>
|
|
219
|
+
<optional>
|
|
220
|
+
<attribute name="keep-with-next">
|
|
221
|
+
<data type="boolean"/>
|
|
222
|
+
</attribute>
|
|
223
|
+
</optional>
|
|
224
|
+
<optional>
|
|
225
|
+
<attribute name="keep-lines-together">
|
|
226
|
+
<data type="boolean"/>
|
|
227
|
+
</attribute>
|
|
228
|
+
</optional>
|
|
229
|
+
<optional>
|
|
230
|
+
<ref name="tname"/>
|
|
231
|
+
</optional>
|
|
232
|
+
<optional>
|
|
233
|
+
<ref name="thead"/>
|
|
234
|
+
</optional>
|
|
235
|
+
<ref name="tbody"/>
|
|
236
|
+
<optional>
|
|
237
|
+
<ref name="tfoot"/>
|
|
238
|
+
</optional>
|
|
239
|
+
<zeroOrMore>
|
|
240
|
+
<ref name="table-note"/>
|
|
241
|
+
</zeroOrMore>
|
|
242
|
+
<optional>
|
|
243
|
+
<ref name="dl"/>
|
|
244
|
+
</optional>
|
|
245
|
+
</element>
|
|
246
|
+
</define>
|
|
247
|
+
<define name="figure">
|
|
248
|
+
<element name="figure">
|
|
249
|
+
<attribute name="id">
|
|
250
|
+
<data type="ID"/>
|
|
251
|
+
</attribute>
|
|
252
|
+
<optional>
|
|
253
|
+
<attribute name="unnumbered">
|
|
254
|
+
<data type="boolean"/>
|
|
255
|
+
</attribute>
|
|
256
|
+
</optional>
|
|
257
|
+
<optional>
|
|
258
|
+
<attribute name="number"/>
|
|
259
|
+
</optional>
|
|
260
|
+
<optional>
|
|
261
|
+
<attribute name="subsequence"/>
|
|
262
|
+
</optional>
|
|
263
|
+
<optional>
|
|
264
|
+
<attribute name="keep-with-next">
|
|
265
|
+
<data type="boolean"/>
|
|
266
|
+
</attribute>
|
|
267
|
+
</optional>
|
|
268
|
+
<optional>
|
|
269
|
+
<attribute name="keep-lines-together">
|
|
270
|
+
<data type="boolean"/>
|
|
271
|
+
</attribute>
|
|
272
|
+
</optional>
|
|
273
|
+
<optional>
|
|
274
|
+
<attribute name="class"/>
|
|
275
|
+
</optional>
|
|
276
|
+
<optional>
|
|
277
|
+
<ref name="source"/>
|
|
278
|
+
</optional>
|
|
279
|
+
<optional>
|
|
280
|
+
<ref name="tname"/>
|
|
281
|
+
</optional>
|
|
282
|
+
<choice>
|
|
283
|
+
<ref name="image"/>
|
|
284
|
+
<ref name="video"/>
|
|
285
|
+
<ref name="audio"/>
|
|
286
|
+
<ref name="pre"/>
|
|
287
|
+
<oneOrMore>
|
|
288
|
+
<ref name="paragraph-with-footnote"/>
|
|
289
|
+
</oneOrMore>
|
|
290
|
+
<zeroOrMore>
|
|
291
|
+
<ref name="figure"/>
|
|
292
|
+
</zeroOrMore>
|
|
293
|
+
</choice>
|
|
294
|
+
<zeroOrMore>
|
|
295
|
+
<ref name="fn"/>
|
|
296
|
+
</zeroOrMore>
|
|
297
|
+
<optional>
|
|
298
|
+
<ref name="dl"/>
|
|
299
|
+
</optional>
|
|
300
|
+
<zeroOrMore>
|
|
301
|
+
<ref name="note"/>
|
|
302
|
+
</zeroOrMore>
|
|
303
|
+
</element>
|
|
304
|
+
</define>
|
|
305
|
+
<define name="sourcecode">
|
|
306
|
+
<element name="sourcecode">
|
|
307
|
+
<attribute name="id">
|
|
308
|
+
<data type="ID"/>
|
|
309
|
+
</attribute>
|
|
310
|
+
<optional>
|
|
311
|
+
<attribute name="unnumbered">
|
|
312
|
+
<data type="boolean"/>
|
|
313
|
+
</attribute>
|
|
314
|
+
</optional>
|
|
315
|
+
<optional>
|
|
316
|
+
<attribute name="number"/>
|
|
317
|
+
</optional>
|
|
318
|
+
<optional>
|
|
319
|
+
<attribute name="subsequence"/>
|
|
320
|
+
</optional>
|
|
321
|
+
<optional>
|
|
322
|
+
<attribute name="keep-with-next">
|
|
323
|
+
<data type="boolean"/>
|
|
324
|
+
</attribute>
|
|
325
|
+
</optional>
|
|
326
|
+
<optional>
|
|
327
|
+
<attribute name="keep-lines-together">
|
|
328
|
+
<data type="boolean"/>
|
|
329
|
+
</attribute>
|
|
330
|
+
</optional>
|
|
331
|
+
<optional>
|
|
332
|
+
<attribute name="lang"/>
|
|
333
|
+
</optional>
|
|
334
|
+
<optional>
|
|
335
|
+
<ref name="tname"/>
|
|
336
|
+
</optional>
|
|
337
|
+
<oneOrMore>
|
|
338
|
+
<choice>
|
|
339
|
+
<text/>
|
|
340
|
+
<ref name="callout"/>
|
|
341
|
+
</choice>
|
|
342
|
+
</oneOrMore>
|
|
343
|
+
<zeroOrMore>
|
|
344
|
+
<ref name="annotation"/>
|
|
345
|
+
</zeroOrMore>
|
|
346
|
+
<zeroOrMore>
|
|
347
|
+
<ref name="note"/>
|
|
348
|
+
</zeroOrMore>
|
|
349
|
+
</element>
|
|
350
|
+
</define>
|
|
351
|
+
<define name="formula">
|
|
352
|
+
<element name="formula">
|
|
353
|
+
<attribute name="id">
|
|
354
|
+
<data type="ID"/>
|
|
355
|
+
</attribute>
|
|
356
|
+
<optional>
|
|
357
|
+
<attribute name="unnumbered">
|
|
358
|
+
<data type="boolean"/>
|
|
359
|
+
</attribute>
|
|
360
|
+
</optional>
|
|
361
|
+
<optional>
|
|
362
|
+
<attribute name="number"/>
|
|
363
|
+
</optional>
|
|
364
|
+
<optional>
|
|
365
|
+
<attribute name="subsequence"/>
|
|
366
|
+
</optional>
|
|
367
|
+
<optional>
|
|
368
|
+
<attribute name="keep-with-next">
|
|
369
|
+
<data type="boolean"/>
|
|
370
|
+
</attribute>
|
|
371
|
+
</optional>
|
|
372
|
+
<optional>
|
|
373
|
+
<attribute name="keep-lines-together">
|
|
374
|
+
<data type="boolean"/>
|
|
375
|
+
</attribute>
|
|
376
|
+
</optional>
|
|
377
|
+
<optional>
|
|
378
|
+
<attribute name="inequality">
|
|
379
|
+
<data type="boolean"/>
|
|
380
|
+
</attribute>
|
|
381
|
+
</optional>
|
|
382
|
+
<ref name="stem"/>
|
|
383
|
+
<optional>
|
|
384
|
+
<ref name="dl"/>
|
|
385
|
+
</optional>
|
|
386
|
+
<zeroOrMore>
|
|
387
|
+
<ref name="note"/>
|
|
388
|
+
</zeroOrMore>
|
|
389
|
+
</element>
|
|
390
|
+
</define>
|
|
391
|
+
<define name="ParagraphType">
|
|
392
|
+
<attribute name="id">
|
|
393
|
+
<data type="ID"/>
|
|
394
|
+
</attribute>
|
|
395
|
+
<optional>
|
|
396
|
+
<attribute name="align">
|
|
397
|
+
<ref name="Alignments"/>
|
|
398
|
+
</attribute>
|
|
399
|
+
</optional>
|
|
400
|
+
<optional>
|
|
401
|
+
<attribute name="keep-with-next">
|
|
402
|
+
<data type="boolean"/>
|
|
403
|
+
</attribute>
|
|
404
|
+
</optional>
|
|
405
|
+
<optional>
|
|
406
|
+
<attribute name="keep-lines-together">
|
|
407
|
+
<data type="boolean"/>
|
|
408
|
+
</attribute>
|
|
409
|
+
</optional>
|
|
410
|
+
<zeroOrMore>
|
|
411
|
+
<ref name="TextElement"/>
|
|
412
|
+
</zeroOrMore>
|
|
413
|
+
<zeroOrMore>
|
|
414
|
+
<ref name="note"/>
|
|
415
|
+
</zeroOrMore>
|
|
416
|
+
</define>
|
|
417
|
+
<define name="paragraph-with-footnote">
|
|
418
|
+
<element name="p">
|
|
419
|
+
<attribute name="id">
|
|
420
|
+
<data type="ID"/>
|
|
421
|
+
</attribute>
|
|
422
|
+
<optional>
|
|
423
|
+
<attribute name="align">
|
|
424
|
+
<ref name="Alignments"/>
|
|
425
|
+
</attribute>
|
|
426
|
+
</optional>
|
|
427
|
+
<optional>
|
|
428
|
+
<attribute name="keep-with-next">
|
|
429
|
+
<data type="boolean"/>
|
|
430
|
+
</attribute>
|
|
431
|
+
</optional>
|
|
432
|
+
<optional>
|
|
433
|
+
<attribute name="keep-lines-together">
|
|
434
|
+
<data type="boolean"/>
|
|
435
|
+
</attribute>
|
|
436
|
+
</optional>
|
|
437
|
+
<zeroOrMore>
|
|
438
|
+
<choice>
|
|
439
|
+
<ref name="TextElement"/>
|
|
440
|
+
<ref name="fn"/>
|
|
441
|
+
</choice>
|
|
442
|
+
</zeroOrMore>
|
|
443
|
+
<zeroOrMore>
|
|
444
|
+
<ref name="note"/>
|
|
445
|
+
</zeroOrMore>
|
|
446
|
+
</element>
|
|
447
|
+
</define>
|
|
448
|
+
<define name="quote">
|
|
449
|
+
<element name="quote">
|
|
450
|
+
<attribute name="id">
|
|
451
|
+
<data type="ID"/>
|
|
452
|
+
</attribute>
|
|
453
|
+
<optional>
|
|
454
|
+
<attribute name="alignment">
|
|
455
|
+
<ref name="Alignments"/>
|
|
456
|
+
</attribute>
|
|
457
|
+
</optional>
|
|
458
|
+
<optional>
|
|
459
|
+
<attribute name="keep-with-next">
|
|
460
|
+
<data type="boolean"/>
|
|
461
|
+
</attribute>
|
|
462
|
+
</optional>
|
|
463
|
+
<optional>
|
|
464
|
+
<attribute name="keep-lines-together">
|
|
465
|
+
<data type="boolean"/>
|
|
466
|
+
</attribute>
|
|
467
|
+
</optional>
|
|
468
|
+
<optional>
|
|
469
|
+
<ref name="quote-source"/>
|
|
470
|
+
</optional>
|
|
471
|
+
<optional>
|
|
472
|
+
<ref name="quote-author"/>
|
|
473
|
+
</optional>
|
|
474
|
+
<oneOrMore>
|
|
475
|
+
<ref name="paragraph-with-footnote"/>
|
|
476
|
+
</oneOrMore>
|
|
477
|
+
<zeroOrMore>
|
|
478
|
+
<ref name="note"/>
|
|
479
|
+
</zeroOrMore>
|
|
480
|
+
</element>
|
|
481
|
+
</define>
|
|
100
482
|
<define name="BibDataExtensionType">
|
|
101
483
|
<ref name="doctype"/>
|
|
102
484
|
<optional>
|
|
@@ -165,6 +547,30 @@
|
|
|
165
547
|
<attribute name="id">
|
|
166
548
|
<data type="ID"/>
|
|
167
549
|
</attribute>
|
|
550
|
+
<optional>
|
|
551
|
+
<attribute name="unnumbered">
|
|
552
|
+
<data type="boolean"/>
|
|
553
|
+
</attribute>
|
|
554
|
+
</optional>
|
|
555
|
+
<optional>
|
|
556
|
+
<attribute name="number"/>
|
|
557
|
+
</optional>
|
|
558
|
+
<optional>
|
|
559
|
+
<attribute name="subsequence"/>
|
|
560
|
+
</optional>
|
|
561
|
+
<optional>
|
|
562
|
+
<attribute name="keep-with-next">
|
|
563
|
+
<data type="boolean"/>
|
|
564
|
+
</attribute>
|
|
565
|
+
</optional>
|
|
566
|
+
<optional>
|
|
567
|
+
<attribute name="keep-lines-together">
|
|
568
|
+
<data type="boolean"/>
|
|
569
|
+
</attribute>
|
|
570
|
+
</optional>
|
|
571
|
+
<optional>
|
|
572
|
+
<attribute name="type"/>
|
|
573
|
+
</optional>
|
|
168
574
|
<oneOrMore>
|
|
169
575
|
<choice>
|
|
170
576
|
<ref name="paragraph"/>
|
|
@@ -910,6 +1316,27 @@
|
|
|
910
1316
|
<attribute name="id">
|
|
911
1317
|
<data type="ID"/>
|
|
912
1318
|
</attribute>
|
|
1319
|
+
<optional>
|
|
1320
|
+
<attribute name="unnumbered">
|
|
1321
|
+
<data type="boolean"/>
|
|
1322
|
+
</attribute>
|
|
1323
|
+
</optional>
|
|
1324
|
+
<optional>
|
|
1325
|
+
<attribute name="number"/>
|
|
1326
|
+
</optional>
|
|
1327
|
+
<optional>
|
|
1328
|
+
<attribute name="subsequence"/>
|
|
1329
|
+
</optional>
|
|
1330
|
+
<optional>
|
|
1331
|
+
<attribute name="keep-with-next">
|
|
1332
|
+
<data type="boolean"/>
|
|
1333
|
+
</attribute>
|
|
1334
|
+
</optional>
|
|
1335
|
+
<optional>
|
|
1336
|
+
<attribute name="keep-lines-together">
|
|
1337
|
+
<data type="boolean"/>
|
|
1338
|
+
</attribute>
|
|
1339
|
+
</optional>
|
|
913
1340
|
<oneOrMore>
|
|
914
1341
|
<choice>
|
|
915
1342
|
<ref name="paragraph"/>
|
data/grammars/isostandard.rng
CHANGED
|
@@ -1,75 +1,8 @@
|
|
|
1
1
|
module RelatonIsoBib
|
|
2
2
|
class HashConverter < RelatonBib::HashConverter
|
|
3
3
|
class << self
|
|
4
|
-
# @override RelatonBib::HashConverter.hash_to_bib
|
|
5
|
-
# @param args [Hash]
|
|
6
|
-
# @param nested [TrueClass, FalseClass]
|
|
7
|
-
# @return [Hash]
|
|
8
|
-
def hash_to_bib(args, nested = false)
|
|
9
|
-
ret = super
|
|
10
|
-
return if ret.nil?
|
|
11
|
-
|
|
12
|
-
editorialgroup_hash_to_bib(ret)
|
|
13
|
-
ics_hash_to_bib(ret)
|
|
14
|
-
structuredidentifier_hash_to_bib(ret)
|
|
15
|
-
ret
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def split_title(content, lang = "en", script = "Latn")
|
|
19
|
-
titles = content&.split(/ (?:--|—|–) /)
|
|
20
|
-
case titles&.size
|
|
21
|
-
when nil, 0
|
|
22
|
-
intro, main, part = nil, "", nil
|
|
23
|
-
when 1
|
|
24
|
-
intro, main, part = nil, titles[0], nil
|
|
25
|
-
when 2
|
|
26
|
-
if /^(Part|Partie) \d+:/ =~ titles[1]
|
|
27
|
-
intro, main, part = nil, titles[0], titles[1]
|
|
28
|
-
else
|
|
29
|
-
intro, main, part = titles[0], titles[1], nil
|
|
30
|
-
end
|
|
31
|
-
when 3
|
|
32
|
-
intro, main, part = titles[0], titles[1], titles[2]
|
|
33
|
-
else
|
|
34
|
-
intro, main, part = titles[0], titles[1], titles[2..-1]&.join(" -- ")
|
|
35
|
-
end
|
|
36
|
-
{
|
|
37
|
-
title_intro: intro,
|
|
38
|
-
title_main: main,
|
|
39
|
-
title_part: part,
|
|
40
|
-
language: lang,
|
|
41
|
-
script: script,
|
|
42
|
-
}
|
|
43
|
-
end
|
|
44
|
-
|
|
45
4
|
private
|
|
46
5
|
|
|
47
|
-
#
|
|
48
|
-
# Ovverides superclass's method
|
|
49
|
-
#
|
|
50
|
-
# @param ret [Hash]
|
|
51
|
-
def title_hash_to_bib(ret)
|
|
52
|
-
return unless ret[:title]
|
|
53
|
-
|
|
54
|
-
ret[:title] = array(ret[:title])
|
|
55
|
-
ret[:title] = ret[:title].reduce([]) do |a, t|
|
|
56
|
-
if t.is_a?(String)
|
|
57
|
-
a << split_title(t)
|
|
58
|
-
elsif t.is_a?(Hash) && t[:type]
|
|
59
|
-
idx = a.index { |i| i[:language] == t[:language] }
|
|
60
|
-
title_key = t[:type].sub("-", "_").to_sym
|
|
61
|
-
if idx
|
|
62
|
-
a[idx][title_key] = t[:content]
|
|
63
|
-
a
|
|
64
|
-
else
|
|
65
|
-
a << { title_key => t[:content], language: t[:language], script: t[:script] }
|
|
66
|
-
end
|
|
67
|
-
elsif t.is_a?(Hash) && t[:content]
|
|
68
|
-
a << split_title(t[:content], t[:language], t[:script])
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
6
|
#
|
|
74
7
|
# Ovverides superclass's method
|
|
75
8
|
#
|
|
@@ -83,9 +16,9 @@ module RelatonIsoBib
|
|
|
83
16
|
# Ovverides superclass's method
|
|
84
17
|
#
|
|
85
18
|
# @param title [Hash]
|
|
86
|
-
# @return [
|
|
19
|
+
# @return [RelatonBib::TypedTitleString]
|
|
87
20
|
def typed_title_strig(title)
|
|
88
|
-
TypedTitleString.new title
|
|
21
|
+
RelatonBib::TypedTitleString.new title
|
|
89
22
|
end
|
|
90
23
|
|
|
91
24
|
# @param ret [Hash]
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require "nokogiri"
|
|
4
4
|
require "isoics"
|
|
5
5
|
require "relaton_bib"
|
|
6
|
-
require "relaton_iso_bib/typed_title_string"
|
|
6
|
+
# require "relaton_iso_bib/typed_title_string"
|
|
7
7
|
require "relaton_iso_bib/editorial_group"
|
|
8
8
|
require "relaton_iso_bib/xml_parser"
|
|
9
9
|
require "relaton_iso_bib/structured_identifier"
|
|
@@ -32,7 +32,7 @@ module RelatonIsoBib
|
|
|
32
32
|
attr_reader :structuredidentifier
|
|
33
33
|
|
|
34
34
|
# @!attribute [r] title
|
|
35
|
-
# @return [Array<
|
|
35
|
+
# @return [Array<RelatonBib::TypedTitleString>]
|
|
36
36
|
|
|
37
37
|
# @return [String, NilClass]
|
|
38
38
|
attr_reader :doctype, :stagename
|
|
@@ -43,9 +43,6 @@ module RelatonIsoBib
|
|
|
43
43
|
# @return [Array<RelatonIsoBib::Ics>]
|
|
44
44
|
attr_reader :ics
|
|
45
45
|
|
|
46
|
-
# @return [TrueClass, FalseClass, NilClass]
|
|
47
|
-
attr_accessor :all_parts
|
|
48
|
-
|
|
49
46
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
50
47
|
# rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
51
48
|
|
|
@@ -76,7 +73,7 @@ module RelatonIsoBib
|
|
|
76
73
|
# @option title [String] :language
|
|
77
74
|
# @option title [String] :script
|
|
78
75
|
#
|
|
79
|
-
# @param editorialgroup [Hash, RelatonIsoBib::EditorialGroup
|
|
76
|
+
# @param editorialgroup [Hash, RelatonIsoBib::EditorialGroup]
|
|
80
77
|
# @option workgrpup [String] :name
|
|
81
78
|
# @option workgrpup [String] :abbreviation
|
|
82
79
|
# @option workgrpup [String] :url
|
|
@@ -128,24 +125,23 @@ module RelatonIsoBib
|
|
|
128
125
|
# @raise [ArgumentError]
|
|
129
126
|
def initialize(**args)
|
|
130
127
|
check_doctype args[:doctype]
|
|
131
|
-
# check_language args.fetch(:language, [])
|
|
132
|
-
# check_script args.fetch(:script, [])
|
|
133
128
|
|
|
134
129
|
super_args = args.select do |k|
|
|
135
130
|
%i[id docnumber language script docstatus date abstract contributor
|
|
136
131
|
edition version relation biblionote series medium place copyright
|
|
137
132
|
link fetched docid formattedref extent accesslocation classification
|
|
138
|
-
validity keyword].include? k
|
|
133
|
+
validity doctype keyword].include? k
|
|
139
134
|
end
|
|
140
135
|
super super_args
|
|
141
136
|
|
|
142
137
|
@type = args[:type] || "standard"
|
|
143
138
|
|
|
144
|
-
@title = args.fetch(:title, []).
|
|
139
|
+
@title = args.fetch(:title, []).map do |t|
|
|
145
140
|
if t.is_a? Hash
|
|
146
|
-
a + typed_titles(t)
|
|
141
|
+
# a + typed_titles(t)
|
|
142
|
+
RelatonBib::TypedTitleString.new t
|
|
147
143
|
else
|
|
148
|
-
|
|
144
|
+
t
|
|
149
145
|
end
|
|
150
146
|
end
|
|
151
147
|
|
|
@@ -157,82 +153,11 @@ module RelatonIsoBib
|
|
|
157
153
|
end
|
|
158
154
|
|
|
159
155
|
@structuredidentifier = args[:structuredidentifier]
|
|
160
|
-
@doctype
|
|
156
|
+
# @doctype = args[:doctype] || "international-standard"
|
|
161
157
|
@ics = args.fetch(:ics, []).map { |i| i.is_a?(Hash) ? Ics.new(i) : i }
|
|
162
158
|
@stagename = args[:stagename]
|
|
163
159
|
@id_attribute = true
|
|
164
160
|
end
|
|
165
|
-
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
166
|
-
# rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
167
|
-
|
|
168
|
-
def disable_id_attribute
|
|
169
|
-
@id_attribute = false
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
# remove title part components and abstract
|
|
173
|
-
def to_all_parts
|
|
174
|
-
me = deep_clone
|
|
175
|
-
me.disable_id_attribute
|
|
176
|
-
me.relation << RelatonBib::DocumentRelation.new(
|
|
177
|
-
type: "instance", bibitem: self,
|
|
178
|
-
)
|
|
179
|
-
me.language.each do |l|
|
|
180
|
-
me.title.delete_if { |t| t.type == "title-part" }
|
|
181
|
-
ttl = me.title.select { |t| t.type != "main" && t.title.language.include?(l) }
|
|
182
|
-
tm_en = ttl.map { |t| t.title.content }.join " – "
|
|
183
|
-
me.title.detect { |t| t.type == "main" && t.title.language.include?(l) }&.title&.content = tm_en
|
|
184
|
-
end
|
|
185
|
-
me.abstract = []
|
|
186
|
-
me.docidentifier.each(&:remove_part)
|
|
187
|
-
me.docidentifier.each(&:all_parts)
|
|
188
|
-
me.structuredidentifier.remove_part
|
|
189
|
-
me.structuredidentifier.all_parts
|
|
190
|
-
me.docidentifier.each &:remove_date
|
|
191
|
-
me.structuredidentifier&.remove_date
|
|
192
|
-
me.all_parts = true
|
|
193
|
-
me
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
def abstract=(value)
|
|
197
|
-
@abstract = value
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
def deep_clone
|
|
201
|
-
dump = Marshal.dump self
|
|
202
|
-
Marshal.load dump
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
# convert ISO:yyyy reference to reference to most recent
|
|
206
|
-
# instance of reference, removing date-specific infomration:
|
|
207
|
-
# date of publication, abstracts. Make dated reference Instance relation
|
|
208
|
-
# of the redacated document
|
|
209
|
-
def to_most_recent_reference
|
|
210
|
-
me = deep_clone
|
|
211
|
-
self.disable_id_attribute
|
|
212
|
-
me.relation << RelatonBib::DocumentRelation.new(type: "instance", bibitem: self)
|
|
213
|
-
me.abstract = []
|
|
214
|
-
me.date = []
|
|
215
|
-
me.docidentifier.each &:remove_date
|
|
216
|
-
me.structuredidentifier&.remove_date
|
|
217
|
-
me.id&.sub! /-[12]\d\d\d/, ""
|
|
218
|
-
me
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
# @param lang [String] language code Iso639
|
|
222
|
-
# @return [Array<RelatonIsoBib::TypedTitleString>]
|
|
223
|
-
def title(lang: nil)
|
|
224
|
-
if lang
|
|
225
|
-
@title.select { |t| t.title.language.include? lang }
|
|
226
|
-
else
|
|
227
|
-
@title
|
|
228
|
-
end
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
# @param type [Symbol] type of url, can be :src/:obp/:rss
|
|
232
|
-
# @return [String]
|
|
233
|
-
def url(type = :src)
|
|
234
|
-
@link.detect { |s| s.type == type.to_s }.content.to_s
|
|
235
|
-
end
|
|
236
161
|
|
|
237
162
|
# @return [String]
|
|
238
163
|
def to_xml(builder = nil, **opts, &block)
|
|
@@ -265,37 +190,20 @@ module RelatonIsoBib
|
|
|
265
190
|
end
|
|
266
191
|
end
|
|
267
192
|
|
|
193
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
194
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
195
|
+
|
|
268
196
|
# @return [Hash]
|
|
269
197
|
def to_hash
|
|
270
198
|
hash = super
|
|
271
199
|
hash["editorialgroup"] = editorialgroup.to_hash if editorialgroup
|
|
272
200
|
hash["ics"] = single_element_array(ics) if ics&.any?
|
|
273
|
-
hash["structuredidentifier"] = structuredidentifier.to_hash if structuredidentifier
|
|
274
|
-
hash["doctype"] = doctype if doctype
|
|
275
201
|
hash["stagename"] = stagename if stagename
|
|
276
202
|
hash
|
|
277
203
|
end
|
|
278
204
|
|
|
279
205
|
private
|
|
280
206
|
|
|
281
|
-
# @param language [Array<String>]
|
|
282
|
-
# @raise ArgumentError
|
|
283
|
-
# def check_language(language)
|
|
284
|
-
# language.each do |lang|
|
|
285
|
-
# unless %w[en fr].include? lang
|
|
286
|
-
# raise ArgumentError, "invalid language: #{lang}"
|
|
287
|
-
# end
|
|
288
|
-
# end
|
|
289
|
-
# end
|
|
290
|
-
|
|
291
|
-
# @param script [Array<String>]
|
|
292
|
-
# @raise ArgumentError
|
|
293
|
-
# def check_script(script)
|
|
294
|
-
# script.each do |scr|
|
|
295
|
-
# raise ArgumentError, "invalid script: #{scr}" unless scr == "Latn"
|
|
296
|
-
# end
|
|
297
|
-
# end
|
|
298
|
-
|
|
299
207
|
# @param doctype [String]
|
|
300
208
|
# @raise ArgumentError
|
|
301
209
|
def check_doctype(doctype)
|
|
@@ -304,64 +212,17 @@ module RelatonIsoBib
|
|
|
304
212
|
end
|
|
305
213
|
end
|
|
306
214
|
|
|
307
|
-
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
308
|
-
|
|
309
|
-
# @param title [Hash]
|
|
310
|
-
# @option title [String] :title_intro
|
|
311
|
-
# @option title [String] :title_main
|
|
312
|
-
# @option title [String] :title_part
|
|
313
|
-
# @option title [String] :language
|
|
314
|
-
# @option title [String] :script
|
|
315
|
-
# @return [Array<RelatonIsoBib::TypedTitleStrig>]
|
|
316
|
-
def typed_titles(title)
|
|
317
|
-
titles = []
|
|
318
|
-
if title[:title_intro]
|
|
319
|
-
titles << TypedTitleString.new(
|
|
320
|
-
type: "title-intro", content: title[:title_intro],
|
|
321
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
|
322
|
-
)
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
if title[:title_main]
|
|
326
|
-
titles << TypedTitleString.new(
|
|
327
|
-
type: "title-main", content: title[:title_main],
|
|
328
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
|
329
|
-
)
|
|
330
|
-
end
|
|
331
|
-
|
|
332
|
-
if title[:title_part]
|
|
333
|
-
titles << TypedTitleString.new(
|
|
334
|
-
type: "title-part", content: title[:title_part],
|
|
335
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
|
336
|
-
)
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
unless titles.empty?
|
|
340
|
-
titles << TypedTitleString.new(
|
|
341
|
-
type: "main", content: titles.map { |t| t.title.content }.join(" – "),
|
|
342
|
-
language: title[:language], script: title[:script], format: "text/plain",
|
|
343
|
-
)
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
titles
|
|
347
|
-
end
|
|
348
|
-
|
|
349
215
|
def makeid(id, attribute, _delim = "")
|
|
350
216
|
return nil if attribute && !@id_attribute
|
|
351
217
|
|
|
352
218
|
id ||= @docidentifier.reject { |i| i&.type == "DOI" }[0]
|
|
353
|
-
# contribs = publishers.map { |p| p&.entity&.abbreviation }.join '/'
|
|
354
|
-
# idstr = "#{contribs}#{delim}#{id.project_number}"
|
|
355
|
-
# idstr = id.project_number.to_s
|
|
356
219
|
if id
|
|
357
220
|
idstr = id.id
|
|
358
221
|
idstr = "IEV" if structuredidentifier&.project_number == "IEV"
|
|
359
222
|
else
|
|
360
223
|
idstr = formattedref&.content
|
|
361
224
|
end
|
|
362
|
-
# if id.part_number&.size&.positive? then idstr += "-#{id.part_number}"
|
|
363
225
|
idstr&.gsub(/:/, "-")&.gsub(/\s/, "")&.strip
|
|
364
226
|
end
|
|
365
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
366
227
|
end
|
|
367
228
|
end
|
|
@@ -26,7 +26,6 @@ module RelatonIsoBib
|
|
|
26
26
|
@project_number = args[:project_number]
|
|
27
27
|
@part = args[:part]
|
|
28
28
|
@subpart = args[:subpart]
|
|
29
|
-
# @prefix = args[:prefix]
|
|
30
29
|
@type = args[:type]
|
|
31
30
|
end
|
|
32
31
|
|
|
@@ -42,10 +41,10 @@ module RelatonIsoBib
|
|
|
42
41
|
end
|
|
43
42
|
|
|
44
43
|
def remove_date
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
if @type == "Chinese Standard"
|
|
45
|
+
@project_number.sub!(/-[12]\d\d\d/, "")
|
|
47
46
|
else
|
|
48
|
-
@project_number
|
|
47
|
+
@project_number.sub!(/:[12]\d\d\d/, "")
|
|
49
48
|
end
|
|
50
49
|
end
|
|
51
50
|
|
|
@@ -78,5 +77,9 @@ module RelatonIsoBib
|
|
|
78
77
|
hash["type"] = type if type
|
|
79
78
|
hash
|
|
80
79
|
end
|
|
80
|
+
|
|
81
|
+
def presence?
|
|
82
|
+
true
|
|
83
|
+
end
|
|
81
84
|
end
|
|
82
85
|
end
|
|
@@ -15,7 +15,6 @@ module RelatonIsoBib
|
|
|
15
15
|
|
|
16
16
|
data[:doctype] = ext.at("./doctype")&.text
|
|
17
17
|
data[:editorialgroup] = fetch_editorialgroup ext
|
|
18
|
-
data[:ics] = fetch_ics ext
|
|
19
18
|
data[:structuredidentifier] = fetch_structuredidentifier ext
|
|
20
19
|
data[:stagename] = ext.at("./stagename")&.text
|
|
21
20
|
data
|
|
@@ -31,7 +30,7 @@ module RelatonIsoBib
|
|
|
31
30
|
# @param ext [Nokogiri::XML::Element]
|
|
32
31
|
# @return [RelatonIsoBib::StructuredIdentifier]
|
|
33
32
|
def fetch_structuredidentifier(ext)
|
|
34
|
-
sid = ext
|
|
33
|
+
sid = ext&.at "./structuredidentifier"
|
|
35
34
|
return unless sid
|
|
36
35
|
|
|
37
36
|
pn = sid.at "project-number"
|
|
@@ -44,27 +43,21 @@ module RelatonIsoBib
|
|
|
44
43
|
|
|
45
44
|
# Override RelatonBib::XMLParser.ttitle method.
|
|
46
45
|
# @param title [Nokogiri::XML::Element]
|
|
47
|
-
# @return [
|
|
46
|
+
# @return [RelatonBib::TypedTitleString]
|
|
48
47
|
def ttitle(title)
|
|
49
48
|
return unless title
|
|
50
49
|
|
|
51
|
-
TypedTitleString.new(
|
|
50
|
+
RelatonBib::TypedTitleString.new(
|
|
52
51
|
type: title[:type], content: title.text, language: title[:language],
|
|
53
52
|
script: title[:script], format: title[:format]
|
|
54
53
|
)
|
|
55
54
|
end
|
|
56
55
|
|
|
57
|
-
# @param item [Nokogiri::XML::Element]
|
|
58
|
-
# @return [Array<RelatonIsoBib::Ics>]
|
|
59
|
-
def fetch_ics(ext)
|
|
60
|
-
ext.xpath("./ics/code").map { |ics| Ics.new ics.text }
|
|
61
|
-
end
|
|
62
|
-
|
|
63
56
|
# @TODO Organization doesn't recreated
|
|
64
57
|
# @param ext [Nokogiri::XML::Element]
|
|
65
58
|
# @return [RelatonIsoBib::EditorialGroup]
|
|
66
59
|
def fetch_editorialgroup(ext)
|
|
67
|
-
eg = ext
|
|
60
|
+
eg = ext&.at("./editorialgroup")
|
|
68
61
|
return unless eg
|
|
69
62
|
|
|
70
63
|
tc = eg&.xpath("technical-committee")&.map { |t| iso_subgroup(t) }
|
data/relaton_iso_bib.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: relaton-iso-bib
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-06-
|
|
11
|
+
date: 2020-06-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: debase
|
|
@@ -142,14 +142,14 @@ dependencies:
|
|
|
142
142
|
requirements:
|
|
143
143
|
- - "~>"
|
|
144
144
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: 1.
|
|
145
|
+
version: 1.2.0
|
|
146
146
|
type: :runtime
|
|
147
147
|
prerelease: false
|
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
|
150
150
|
- - "~>"
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: 1.
|
|
152
|
+
version: 1.2.0
|
|
153
153
|
description: 'RelatonIsoBib: Ruby ISOXMLDOC impementation.'
|
|
154
154
|
email:
|
|
155
155
|
- open.source@ribose.com
|
|
@@ -181,7 +181,6 @@ files:
|
|
|
181
181
|
- lib/relaton_iso_bib/iso_bibliographic_item.rb
|
|
182
182
|
- lib/relaton_iso_bib/iso_document_relation.rb
|
|
183
183
|
- lib/relaton_iso_bib/structured_identifier.rb
|
|
184
|
-
- lib/relaton_iso_bib/typed_title_string.rb
|
|
185
184
|
- lib/relaton_iso_bib/version.rb
|
|
186
185
|
- lib/relaton_iso_bib/xml_parser.rb
|
|
187
186
|
- relaton_iso_bib.gemspec
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module RelatonIsoBib
|
|
2
|
-
class TypedTitleString < RelatonBib::TypedTitleString
|
|
3
|
-
# TITLE_TYPES = %w[title-main title-intro title-part main].freeze
|
|
4
|
-
|
|
5
|
-
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
6
|
-
|
|
7
|
-
# @param type [String]
|
|
8
|
-
# @param title [RelatonBib::FormattedString, Hash]
|
|
9
|
-
# @param content [String]
|
|
10
|
-
# @param language [String]
|
|
11
|
-
# @param script [String]
|
|
12
|
-
def initialize(**args)
|
|
13
|
-
# if args[:type] && !TITLE_TYPES.include?(args[:type])
|
|
14
|
-
# raise ArgumentError, %{The type #{args[:type]} is invalid.}
|
|
15
|
-
# end
|
|
16
|
-
|
|
17
|
-
unless args[:title] || args[:content]
|
|
18
|
-
raise ArgumentError, %{Keyword "title" or "content" should be passed.}
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
@type = args[:type]
|
|
22
|
-
|
|
23
|
-
if args[:title]
|
|
24
|
-
@title = args[:title]
|
|
25
|
-
else
|
|
26
|
-
fsargs = args.select { |k, _v| %i[content language script format].include? k }
|
|
27
|
-
@title = RelatonBib::FormattedString.new(fsargs)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
31
|
-
end
|
|
32
|
-
end
|