relaton-bib 0.3.3 → 0.3.4
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 +5 -5
- data/Gemfile.lock +1 -1
- data/docs/hash.adoc +298 -34
- data/lib/relaton_bib/bib_item_locality.rb +11 -4
- data/lib/relaton_bib/biblio_note.rb +12 -5
- data/lib/relaton_bib/biblio_version.rb +10 -2
- data/lib/relaton_bib/bibliographic_date.rb +16 -7
- data/lib/relaton_bib/bibliographic_item.rb +44 -7
- data/lib/relaton_bib/classification.rb +7 -0
- data/lib/relaton_bib/contribution_info.rb +17 -0
- data/lib/relaton_bib/contributor.rb +38 -4
- data/lib/relaton_bib/copyright_association.rb +11 -4
- data/lib/relaton_bib/document_identifier.rb +7 -0
- data/lib/relaton_bib/document_relation.rb +7 -0
- data/lib/relaton_bib/document_status.rb +8 -0
- data/lib/relaton_bib/formatted_string.rb +7 -0
- data/lib/relaton_bib/hash_converter.rb +26 -8
- data/lib/relaton_bib/localized_string.rb +12 -6
- data/lib/relaton_bib/medium.rb +9 -0
- data/lib/relaton_bib/organization.rb +17 -3
- data/lib/relaton_bib/person.rb +35 -1
- data/lib/relaton_bib/series.rb +16 -0
- data/lib/relaton_bib/typed_title_string.rb +7 -0
- data/lib/relaton_bib/typed_uri.rb +6 -0
- data/lib/relaton_bib/validity.rb +14 -4
- data/lib/relaton_bib/version.rb +1 -1
- data/lib/relaton_bib/xml_parser.rb +5 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: ee06437cee7f0efbacf8d04554136258ad4544f4
|
|
4
|
+
data.tar.gz: 3608ad874a15aa0a7c1d2d03270dc02a2a308dfd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 45f05d3a1362dcb45a09c7a04696eb87a48094eaba7314271a519c13c85e83ddbeb85e2c6ccbad8e3f7a064a70c471dc6270684efabce3f2e09374c151fd38ad
|
|
7
|
+
data.tar.gz: 78315011778a04275ff534780f3138bb3f6e2c2476a6f7e7f1ea3287856664dffa80fe678ed0294494a5bed0d1d331c8c1f700d939ba4a7dad813fd435de3a53
|
data/Gemfile.lock
CHANGED
data/docs/hash.adoc
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
= Relaton YAML
|
|
2
2
|
|
|
3
|
+
== YAML
|
|
4
|
+
|
|
3
5
|
The following structure is in place for encoding bibitem as YAML objects, and is also used
|
|
4
6
|
to represent bibliographic entries in Metanorma Asciidoctor. The structure has not yet been
|
|
5
7
|
generalised to `bibdata/ext`, the flavour specific extensions of relaton.
|
|
@@ -252,11 +254,14 @@ validity:
|
|
|
252
254
|
revision: 2011-03-04 09:00
|
|
253
255
|
....
|
|
254
256
|
|
|
257
|
+
== Metanorma structure: nested definition list
|
|
258
|
+
|
|
255
259
|
The Metanorma Asciidoctor representation of this hash structure
|
|
256
260
|
in a bibliography
|
|
257
261
|
is as a definition list, with nested definition lists for nested structures.
|
|
258
262
|
Repeating elements in a hash can be realised as ordered or unordered lists.
|
|
259
|
-
However, given how awkward lists of definition lists are in Asciidoctor
|
|
263
|
+
However, given how awkward lists of definition lists are in Asciidoctor
|
|
264
|
+
(with a limitation of three nesting levels),
|
|
260
265
|
Metanorma Asciidoctor also supports representing repeating elements
|
|
261
266
|
by repeating the key for that entry.
|
|
262
267
|
|
|
@@ -355,20 +360,20 @@ docid::
|
|
|
355
360
|
docnumber:: 211
|
|
356
361
|
edition:: 1
|
|
357
362
|
language::
|
|
358
|
-
|
|
359
|
-
|
|
363
|
+
. en
|
|
364
|
+
. fr
|
|
360
365
|
script:: Latn
|
|
361
366
|
version::
|
|
362
367
|
revision_date::: 2019-04-01
|
|
363
368
|
draft::: draft
|
|
364
369
|
biblionote::
|
|
365
370
|
type::: bibnote
|
|
366
|
-
content:::
|
|
371
|
+
content:::
|
|
367
372
|
+
|
|
368
|
-
|
|
373
|
+
--
|
|
369
374
|
Mark set a major league
|
|
370
375
|
home run record in 1998.
|
|
371
|
-
|
|
376
|
+
--
|
|
372
377
|
docstatus::
|
|
373
378
|
stage::: stage
|
|
374
379
|
substage::: substage
|
|
@@ -384,11 +389,11 @@ date::
|
|
|
384
389
|
type::: accessed
|
|
385
390
|
value::: 2015-05-20
|
|
386
391
|
abstract::
|
|
387
|
-
content:::
|
|
392
|
+
content:::
|
|
388
393
|
+
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
394
|
+
--
|
|
395
|
+
ISO 19115-1:2014 defines the schema required for ...
|
|
396
|
+
--
|
|
392
397
|
abstract::
|
|
393
398
|
content::: L'ISO 19115-1:2014 définit le schéma requis pour ...
|
|
394
399
|
language::: fr
|
|
@@ -419,8 +424,8 @@ extent::
|
|
|
419
424
|
type::: section
|
|
420
425
|
reference_from::: 7
|
|
421
426
|
accesslocation::
|
|
422
|
-
|
|
423
|
-
|
|
427
|
+
. accesslocation1
|
|
428
|
+
. accesslocation2
|
|
424
429
|
classification::
|
|
425
430
|
type::: type
|
|
426
431
|
value::: value
|
|
@@ -430,12 +435,12 @@ validity::
|
|
|
430
435
|
|
|
431
436
|
|
|
432
437
|
==== Contributor
|
|
433
|
-
|
|
438
|
+
organization::
|
|
434
439
|
name::: International Organization for Standardization
|
|
435
440
|
url::: www.iso.org
|
|
436
441
|
abbreviation::: ISO
|
|
437
442
|
subdivision::: division
|
|
438
|
-
role::
|
|
443
|
+
role::
|
|
439
444
|
type::: publisher
|
|
440
445
|
description::: Publisher role
|
|
441
446
|
|
|
@@ -443,22 +448,25 @@ role::
|
|
|
443
448
|
person::
|
|
444
449
|
name:::
|
|
445
450
|
completename::::
|
|
446
|
-
|
|
447
|
-
|
|
451
|
+
+
|
|
452
|
+
--
|
|
453
|
+
content:: A. Bierman
|
|
454
|
+
language:: en
|
|
455
|
+
--
|
|
448
456
|
affiliation:::
|
|
449
457
|
organization::::
|
|
450
|
-
name::::: IETF
|
|
451
|
-
abbreviation::::: IETF
|
|
452
|
-
identifier:::::
|
|
453
458
|
+
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
459
|
+
--
|
|
460
|
+
name:: IETF
|
|
461
|
+
abbreviation:: IETF
|
|
462
|
+
identifier::
|
|
463
|
+
type::: uri
|
|
464
|
+
id::: www.ietf.org
|
|
465
|
+
--
|
|
458
466
|
description:::: Affiliation description
|
|
459
467
|
contact:::
|
|
460
468
|
street::::
|
|
461
|
-
|
|
469
|
+
. 8 Street St
|
|
462
470
|
city:::: City
|
|
463
471
|
postcode:::: 123456
|
|
464
472
|
country:::: Country
|
|
@@ -469,7 +477,7 @@ id:: www.ietf.org
|
|
|
469
477
|
role:: author
|
|
470
478
|
|
|
471
479
|
==== Contributor
|
|
472
|
-
|
|
480
|
+
organization::
|
|
473
481
|
name::: IETF
|
|
474
482
|
abbreviation::: IETF
|
|
475
483
|
identifier:::
|
|
@@ -484,13 +492,16 @@ person::
|
|
|
484
492
|
initial:::: A.
|
|
485
493
|
surname:::: Bierman
|
|
486
494
|
affiliation:::
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
495
|
+
+
|
|
496
|
+
--
|
|
497
|
+
organization::
|
|
498
|
+
name::: IETF
|
|
499
|
+
abbreviation::: IETF
|
|
500
|
+
description::
|
|
501
|
+
content::: Affiliation description
|
|
502
|
+
language::: en
|
|
503
|
+
script::: Latn
|
|
504
|
+
--
|
|
494
505
|
identifier:::
|
|
495
506
|
type:::: uri
|
|
496
507
|
id:::: www.person.com
|
|
@@ -506,8 +517,8 @@ bibitem::
|
|
|
506
517
|
reference_to:::: 10
|
|
507
518
|
|
|
508
519
|
==== Relation
|
|
509
|
-
type
|
|
510
|
-
bibitem
|
|
520
|
+
type:: updates
|
|
521
|
+
bibitem::
|
|
511
522
|
type::: standard
|
|
512
523
|
formattedref::: ISO 19115:2003/Cor 1:2006
|
|
513
524
|
|
|
@@ -538,7 +549,260 @@ formattedref::
|
|
|
538
549
|
script::: Latn
|
|
539
550
|
....
|
|
540
551
|
|
|
552
|
+
== JSON Path style definition lists
|
|
553
|
+
|
|
554
|
+
The foregoing structure requires frequent breakouts into open blocks, to deal
|
|
555
|
+
with the limitation on Asciidoctor nested definition lists. An alternative is to
|
|
556
|
+
represent the nested structure of Relaton records in a simple, one-level definition list, and to use the key for each key-value pair to represent the hierarchical nesting of entries, as a dot-delimited path of keys. For example,
|
|
557
|
+
|
|
558
|
+
[source,asciidoctor]
|
|
559
|
+
----
|
|
560
|
+
[%bibitem]
|
|
561
|
+
=== Rubber latex -- Sampling
|
|
562
|
+
id:: iso123
|
|
563
|
+
docid::
|
|
564
|
+
type::: ISO
|
|
565
|
+
id::: ISO 123
|
|
566
|
+
----
|
|
567
|
+
|
|
568
|
+
can instead be represented as:
|
|
569
|
+
|
|
570
|
+
[source,asciidoctor]
|
|
571
|
+
----
|
|
572
|
+
[%bibitem]
|
|
573
|
+
=== Rubber latex -- Sampling
|
|
574
|
+
id:: iso123
|
|
575
|
+
docid.type:: ISO
|
|
576
|
+
docid.id::: ISO 123
|
|
577
|
+
----
|
|
578
|
+
|
|
579
|
+
Whenever part of the key is repeated between entries, the entries are assumed to attach to the same parent. If an array of hashes is needed, a blank entry is required for the key of each repeating element: For example,
|
|
580
|
+
|
|
581
|
+
[source,asciidoctor]
|
|
582
|
+
----
|
|
583
|
+
[%bibitem]
|
|
584
|
+
=== Rubber latex -- Sampling
|
|
585
|
+
id:: iso123
|
|
586
|
+
docid::
|
|
587
|
+
type::: ISO
|
|
588
|
+
id::: ISO 123
|
|
589
|
+
docid::
|
|
590
|
+
type::: ABC
|
|
591
|
+
id::: 32784
|
|
592
|
+
type:: standard
|
|
593
|
+
----
|
|
594
|
+
|
|
595
|
+
can instead be represented as:
|
|
596
|
+
|
|
597
|
+
[source,asciidoctor]
|
|
598
|
+
----
|
|
599
|
+
[%bibitem]
|
|
600
|
+
=== Rubber latex -- Sampling
|
|
601
|
+
id:: iso123
|
|
602
|
+
docid::
|
|
603
|
+
docid.type:: ISO
|
|
604
|
+
docid.id::: ISO 123
|
|
605
|
+
docid::
|
|
606
|
+
docid.type:: ABC
|
|
607
|
+
docid.id:: 32784
|
|
608
|
+
----
|
|
609
|
+
|
|
610
|
+
Embedded elements can also repeat:
|
|
611
|
+
|
|
612
|
+
[source,asciidoctor]
|
|
613
|
+
----
|
|
614
|
+
[%bibitem]
|
|
615
|
+
...
|
|
616
|
+
==== Contributor
|
|
617
|
+
person::
|
|
618
|
+
contact:::
|
|
619
|
+
street::::
|
|
620
|
+
. 8 Street St
|
|
621
|
+
city:::: City
|
|
622
|
+
postcode:::: 123456
|
|
623
|
+
country:::: Country
|
|
624
|
+
state:::: State
|
|
625
|
+
contact:::
|
|
626
|
+
type:::: phone
|
|
627
|
+
value:::: 223322
|
|
628
|
+
----
|
|
541
629
|
|
|
630
|
+
can instead be represented as:
|
|
542
631
|
|
|
632
|
+
[source,asciidoctor]
|
|
633
|
+
----
|
|
634
|
+
[%bibitem]
|
|
635
|
+
...
|
|
636
|
+
contributor.person.contact::
|
|
637
|
+
contributor.person.contact.street:: 8 Street St
|
|
638
|
+
contributor.person.contact.city:: City
|
|
639
|
+
contributor.person.contact.postcode:: 123456
|
|
640
|
+
contributor.person.contact.country:: Country
|
|
641
|
+
contributor.person.contact.state:: State
|
|
642
|
+
contributor.person.contact::
|
|
643
|
+
contributor.person.contact.type:: phone
|
|
644
|
+
contributor.person.contact.value:: 223322
|
|
645
|
+
----
|
|
543
646
|
|
|
647
|
+
The following is Metanorma Asciidoctor markup corresponding to the YAML
|
|
648
|
+
given above, using JSON Path style definition lists instead of nested definition lists:
|
|
544
649
|
|
|
650
|
+
[source,asciidoc]
|
|
651
|
+
....
|
|
652
|
+
[[ISO/TC211]]
|
|
653
|
+
[%bibitem]
|
|
654
|
+
=== {blank}
|
|
655
|
+
fetched:: 2019-06-30
|
|
656
|
+
title::
|
|
657
|
+
title.type:: main
|
|
658
|
+
title.content:: Geographic information
|
|
659
|
+
title::
|
|
660
|
+
title.type:: subtitle
|
|
661
|
+
title.content:: Geographic information subtitle
|
|
662
|
+
title.language:: en
|
|
663
|
+
title.script:: Latn
|
|
664
|
+
title.format:: text/plain
|
|
665
|
+
type:: standard
|
|
666
|
+
docid::
|
|
667
|
+
docid.type:: ISO
|
|
668
|
+
docid.id:: TC211
|
|
669
|
+
docnumber:: 211
|
|
670
|
+
edition:: 1
|
|
671
|
+
language:: en
|
|
672
|
+
language:: fr
|
|
673
|
+
script:: Latn
|
|
674
|
+
version.revision_date:: 2019-04-01
|
|
675
|
+
version.draft:: draft
|
|
676
|
+
biblionote.type:: bibnote
|
|
677
|
+
biblionote.content::
|
|
678
|
+
+
|
|
679
|
+
--
|
|
680
|
+
Mark set a major league
|
|
681
|
+
home run record in 1998.
|
|
682
|
+
--
|
|
683
|
+
docstatus.stage:: stage
|
|
684
|
+
docstatus.substage:: substage
|
|
685
|
+
docstatus.iteration:: iteration
|
|
686
|
+
date::
|
|
687
|
+
date.type:: issued
|
|
688
|
+
date.value:: 2014
|
|
689
|
+
date::
|
|
690
|
+
date.type:: published
|
|
691
|
+
date.from:: 2014-04
|
|
692
|
+
date.to:: 2014-05
|
|
693
|
+
date::
|
|
694
|
+
date.type:: accessed
|
|
695
|
+
date.value:: 2015-05-20
|
|
696
|
+
abstract::
|
|
697
|
+
abstract.content::
|
|
698
|
+
+
|
|
699
|
+
--
|
|
700
|
+
ISO 19115-1:2014 defines the schema required for ...
|
|
701
|
+
--
|
|
702
|
+
abstract::
|
|
703
|
+
abstract.content:: L'ISO 19115-1:2014 définit le schéma requis pour ...
|
|
704
|
+
abstract.language:: fr
|
|
705
|
+
abstract.script:: Latn
|
|
706
|
+
abstract.format:: text/plain
|
|
707
|
+
copyright.owner.name:: International Organization for Standardization
|
|
708
|
+
copyright.owner.abbreviation:: ISO
|
|
709
|
+
copyright.owner.url:: www.iso.org
|
|
710
|
+
copyright.from:: 2014
|
|
711
|
+
copyright.to:: 2020
|
|
712
|
+
link::
|
|
713
|
+
link.type:: src
|
|
714
|
+
link.content:: https://www.iso.org/standard/53798.html
|
|
715
|
+
link::
|
|
716
|
+
link.type:: obp
|
|
717
|
+
link.content:: https://www.iso.org/obp/ui/#!iso:std:53798:en
|
|
718
|
+
link::
|
|
719
|
+
link.type:: rss
|
|
720
|
+
link.content:: https://www.iso.org/contents/data/standard/05/37/53798.detail.rss
|
|
721
|
+
medium::
|
|
722
|
+
medium.form:: medium form
|
|
723
|
+
medium.size:: medium size
|
|
724
|
+
medium.scale:: medium scale
|
|
725
|
+
place:: bib place
|
|
726
|
+
extent.type:: section
|
|
727
|
+
extent.reference_from:: 7
|
|
728
|
+
accesslocation:: accesslocation1
|
|
729
|
+
accesslocation:: accesslocation2
|
|
730
|
+
classification.type:: type
|
|
731
|
+
classification.value:: value
|
|
732
|
+
validity.begins:: 2010-10-10 12:21
|
|
733
|
+
validity.ends:: 2011-02-03 18:30
|
|
734
|
+
contributor::
|
|
735
|
+
contributor.organization.name:: International Organization for Standardization
|
|
736
|
+
contributor.organization.url:: www.iso.org
|
|
737
|
+
contributor.organization.abbreviation:: ISO
|
|
738
|
+
contributor.organization.subdivision:: division
|
|
739
|
+
contributor.role.type:: publisher
|
|
740
|
+
contributor.role.description:: Publisher role
|
|
741
|
+
contributor::
|
|
742
|
+
contributor.person.name.completename.content:: A. Bierman
|
|
743
|
+
contributor.person.name.completename.language:: en
|
|
744
|
+
contributor.person.affiliation.organization.name:: IETF
|
|
745
|
+
contributor.person.affiliation.organization.abbreviation:: IETF
|
|
746
|
+
contributor.person.affiliation.organization.identifier.type:: uri
|
|
747
|
+
contributor.person.affiliation.organization.identifier.id:: www.ietf.org
|
|
748
|
+
contributor.person.affiliation.description:: Affiliation description
|
|
749
|
+
contributor.person.contact::
|
|
750
|
+
contributor.person.contact.street:: 8 Street St
|
|
751
|
+
contributor.person.contact.city:: City
|
|
752
|
+
contributor.person.contact.postcode:: 123456
|
|
753
|
+
contributor.person.contact.country:: Country
|
|
754
|
+
contributor.person.contact.state:: State
|
|
755
|
+
contributor.person.contact::
|
|
756
|
+
contributor.person.contact.type:: phone
|
|
757
|
+
contributor.person.contact.value:: 223322
|
|
758
|
+
contributor.role:: author
|
|
759
|
+
contributor::
|
|
760
|
+
contributor.organization.name:: IETF
|
|
761
|
+
contributor.organization.abbreviation:: IETF
|
|
762
|
+
contributor.organization.identifier.type:: uri
|
|
763
|
+
contributor.organization.identifier.id:: www.ietf.org
|
|
764
|
+
contributor.role:: publisher
|
|
765
|
+
contributor::
|
|
766
|
+
contributor.person.name.language:: en
|
|
767
|
+
contributor.person.name.initial:: A.
|
|
768
|
+
contributor.person.name.surname:: Bierman
|
|
769
|
+
contributor.person.affiliation.organization.name:: IETF
|
|
770
|
+
contributor.person.affiliation.organization.abbreviation:: IETF
|
|
771
|
+
contributor.person.affiliation.description.content:: Affiliation description
|
|
772
|
+
contributor.person.affiliation.description.language:: en
|
|
773
|
+
contributor.person.affiliation.description.script:: Latn
|
|
774
|
+
contributor.person.identifier.type:: uri
|
|
775
|
+
contributor.person.identifier.id:: www.person.com
|
|
776
|
+
contributor.role:: author
|
|
777
|
+
relation::
|
|
778
|
+
relation.type:: updates
|
|
779
|
+
relation.bibitem.formattedref:: ISO 19115:2003
|
|
780
|
+
relation.bibitem.bib_locality.type:: page
|
|
781
|
+
relation.bibitem.bib_locality.reference_from:: 7
|
|
782
|
+
relation.bibitem.bib_locality.reference_to:: 10
|
|
783
|
+
relation::
|
|
784
|
+
relation.type:: updates
|
|
785
|
+
relation.bibitem.type:: standard
|
|
786
|
+
relation.bibitem.formattedref:: ISO 19115:2003/Cor 1:2006
|
|
787
|
+
series::
|
|
788
|
+
series.type:: main
|
|
789
|
+
series.title.type:: original
|
|
790
|
+
series.title.content:: ISO/IEC FDIS 10118-3
|
|
791
|
+
series.title.language:: en
|
|
792
|
+
series.title.script:: Latn
|
|
793
|
+
series.title.format:: text/plain
|
|
794
|
+
series.place:: Serie's place
|
|
795
|
+
series.organization:: Serie's organization
|
|
796
|
+
series.abbreviation.content:: ABVR
|
|
797
|
+
series.abbreviation.language:: en
|
|
798
|
+
series.abbreviation.script:: Latn
|
|
799
|
+
series.from:: 2009-02-01
|
|
800
|
+
series.to:: 2010-12-20
|
|
801
|
+
series.number:: serie1234
|
|
802
|
+
series.partnumber:: part5678
|
|
803
|
+
series::
|
|
804
|
+
series.type:: alt
|
|
805
|
+
series.formattedref.content:: serieref
|
|
806
|
+
series.formattedref.language:: en
|
|
807
|
+
series.formattedref.script:: Latn
|
|
808
|
+
----
|
|
@@ -17,18 +17,18 @@ module RelatonBib
|
|
|
17
17
|
|
|
18
18
|
# Bibliographic item locality.
|
|
19
19
|
class BibItemLocality
|
|
20
|
-
# @return [
|
|
20
|
+
# @return [String]
|
|
21
21
|
attr_reader :type
|
|
22
22
|
|
|
23
|
-
# @return [
|
|
23
|
+
# @return [String]
|
|
24
24
|
attr_reader :reference_from
|
|
25
25
|
|
|
26
|
-
# @return [
|
|
26
|
+
# @return [String, NilClass]
|
|
27
27
|
attr_reader :reference_to
|
|
28
28
|
|
|
29
29
|
# @param type [String]
|
|
30
30
|
# @param referenceFrom [String]
|
|
31
|
-
# @param referenceTo [String]
|
|
31
|
+
# @param referenceTo [String, NilClass]
|
|
32
32
|
def initialize(type, reference_from, reference_to = nil)
|
|
33
33
|
@type = type
|
|
34
34
|
@reference_from = reference_from
|
|
@@ -42,5 +42,12 @@ module RelatonBib
|
|
|
42
42
|
builder.referenceTo reference_to if reference_to
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
|
+
|
|
46
|
+
# @return [Hash]
|
|
47
|
+
def to_hash
|
|
48
|
+
hash = { type: type, reference_from: reference_from }
|
|
49
|
+
hash[:reference_to] = reference_to if reference_to
|
|
50
|
+
hash
|
|
51
|
+
end
|
|
45
52
|
end
|
|
46
53
|
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
module RelatonBib
|
|
2
2
|
class BiblioNote < FormattedString
|
|
3
|
-
# @return [String]
|
|
3
|
+
# @return [String, NilClass]
|
|
4
4
|
attr_reader :type
|
|
5
5
|
|
|
6
6
|
# @param content [String]
|
|
7
|
-
# @param type [String]
|
|
8
|
-
# @param language [String] language code Iso639
|
|
9
|
-
# @param script [String] script code Iso15924
|
|
10
|
-
# @param format [String] the content
|
|
7
|
+
# @param type [String, NilClass]
|
|
8
|
+
# @param language [String, NilClass] language code Iso639
|
|
9
|
+
# @param script [String, NilClass] script code Iso15924
|
|
10
|
+
# @param format [String, NilClass] the content format
|
|
11
11
|
def initialize(content:, type: nil, language: nil, script: nil, format: nil)
|
|
12
12
|
@type = type
|
|
13
13
|
super content: content, language: language, script: script, format: format
|
|
@@ -19,5 +19,12 @@ module RelatonBib
|
|
|
19
19
|
xml[:type] = type if type
|
|
20
20
|
xml
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
# @return [Hash]
|
|
24
|
+
def to_hash
|
|
25
|
+
hash = super
|
|
26
|
+
hash[:type] = type if type
|
|
27
|
+
hash
|
|
28
|
+
end
|
|
22
29
|
end
|
|
23
30
|
end
|
|
@@ -2,13 +2,13 @@ module RelatonBib
|
|
|
2
2
|
# Version
|
|
3
3
|
class BibliographicItem
|
|
4
4
|
class Version
|
|
5
|
-
# @return [String]
|
|
5
|
+
# @return [String, NilClass]
|
|
6
6
|
attr_reader :revision_date
|
|
7
7
|
|
|
8
8
|
# @return [Array<String>]
|
|
9
9
|
attr_reader :draft
|
|
10
10
|
|
|
11
|
-
# @param revision_date [String]
|
|
11
|
+
# @param revision_date [String, NilClass]
|
|
12
12
|
# @param draft [Array<String>]
|
|
13
13
|
def initialize(revision_date = nil, draft = [])
|
|
14
14
|
@revision_date = revision_date
|
|
@@ -22,6 +22,14 @@ module RelatonBib
|
|
|
22
22
|
draft.each { |d| builder.draft d }
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
|
+
|
|
26
|
+
# @return [Hash]
|
|
27
|
+
def to_hash
|
|
28
|
+
hash = {}
|
|
29
|
+
hash[:revision_date] = revision_date if revision_date
|
|
30
|
+
hash[:draft] = draft if draft&.any?
|
|
31
|
+
hash
|
|
32
|
+
end
|
|
25
33
|
end
|
|
26
34
|
end
|
|
27
35
|
end
|
|
@@ -12,13 +12,13 @@ module RelatonBib
|
|
|
12
12
|
# @return [String]
|
|
13
13
|
attr_reader :type
|
|
14
14
|
|
|
15
|
-
# @return [
|
|
15
|
+
# @return [Date]
|
|
16
16
|
attr_reader :from
|
|
17
17
|
|
|
18
|
-
# @return [
|
|
18
|
+
# @return [Date]
|
|
19
19
|
attr_reader :to
|
|
20
20
|
|
|
21
|
-
# @return [
|
|
21
|
+
# @return [Date]
|
|
22
22
|
attr_reader :on
|
|
23
23
|
|
|
24
24
|
# @param type [String] "published", "accessed", "created", "activated"
|
|
@@ -52,6 +52,15 @@ module RelatonBib
|
|
|
52
52
|
end
|
|
53
53
|
# rubocop:enable Metrics/AbcSize
|
|
54
54
|
|
|
55
|
+
# @return [Hash]
|
|
56
|
+
def to_hash
|
|
57
|
+
hash = { type: type }
|
|
58
|
+
hash[:value] = on.to_s if on
|
|
59
|
+
hash[:from] = from.to_s if from
|
|
60
|
+
hash[:to] = to.to_s if to
|
|
61
|
+
hash
|
|
62
|
+
end
|
|
63
|
+
|
|
55
64
|
private
|
|
56
65
|
|
|
57
66
|
# Formats date
|
|
@@ -67,16 +76,16 @@ module RelatonBib
|
|
|
67
76
|
end
|
|
68
77
|
|
|
69
78
|
# @params date [String] 'yyyy', 'yyyy-mm', 'yyyy-mm-dd
|
|
70
|
-
# @return [
|
|
79
|
+
# @return [Date]
|
|
71
80
|
def parse_date(date)
|
|
72
81
|
return unless date
|
|
73
82
|
|
|
74
83
|
if date =~ /^\d{4}$/
|
|
75
|
-
|
|
84
|
+
Date.strptime date, "%Y"
|
|
76
85
|
elsif date =~ /^\d{4}-\d{2}$/
|
|
77
|
-
|
|
86
|
+
Date.strptime date, "%Y-%m"
|
|
78
87
|
elsif date =~ /\d{4}-\d{2}-\d{2}$/
|
|
79
|
-
|
|
88
|
+
Date.strptime date, "%Y-%m-%d"
|
|
80
89
|
end
|
|
81
90
|
end
|
|
82
91
|
end
|
|
@@ -32,7 +32,7 @@ module RelatonBib
|
|
|
32
32
|
inbook incollection inproceedings journal
|
|
33
33
|
].freeze
|
|
34
34
|
|
|
35
|
-
# @return [String]
|
|
35
|
+
# @return [String, NilClass]
|
|
36
36
|
attr_reader :id
|
|
37
37
|
|
|
38
38
|
# @return [Array<RelatonBib::TypedTitleString>]
|
|
@@ -41,13 +41,13 @@ module RelatonBib
|
|
|
41
41
|
# @return [Array<RelatonBib::TypedUri>]
|
|
42
42
|
attr_reader :link
|
|
43
43
|
|
|
44
|
-
# @return [String]
|
|
44
|
+
# @return [String, NilClass]
|
|
45
45
|
attr_reader :type
|
|
46
46
|
|
|
47
47
|
# @return [Array<RelatonBib::DocumentIdentifier>]
|
|
48
48
|
attr_reader :docidentifier
|
|
49
49
|
|
|
50
|
-
# @return [String] docnumber
|
|
50
|
+
# @return [String, NilClass] docnumber
|
|
51
51
|
attr_reader :docnumber
|
|
52
52
|
|
|
53
53
|
# @return [Array<RelatonBib::BibliographicDate>]
|
|
@@ -59,10 +59,10 @@ module RelatonBib
|
|
|
59
59
|
# @return [String, NillClass]
|
|
60
60
|
attr_reader :edition
|
|
61
61
|
|
|
62
|
-
# @return [RelatonBib::BibliongraphicItem::Version]
|
|
62
|
+
# @return [RelatonBib::BibliongraphicItem::Version, NilClass]
|
|
63
63
|
attr_reader :version
|
|
64
64
|
|
|
65
|
-
# @return [Array<RelatonBib::BiblioNote
|
|
65
|
+
# @return [Array<RelatonBib::BiblioNote>]
|
|
66
66
|
attr_reader :biblionote
|
|
67
67
|
|
|
68
68
|
# @return [Array<String>] language Iso639 code
|
|
@@ -71,7 +71,7 @@ module RelatonBib
|
|
|
71
71
|
# @return [Array<String>] script Iso15924 code
|
|
72
72
|
attr_reader :script
|
|
73
73
|
|
|
74
|
-
# @return [RelatonBib::FormattedRef]
|
|
74
|
+
# @return [RelatonBib::FormattedRef, NilClass]
|
|
75
75
|
attr_reader :formattedref
|
|
76
76
|
|
|
77
77
|
# @!attribute [r] abstract
|
|
@@ -80,7 +80,7 @@ module RelatonBib
|
|
|
80
80
|
# @return [RelatonBib::DocumentStatus, NilClass]
|
|
81
81
|
attr_reader :status
|
|
82
82
|
|
|
83
|
-
# @return [RelatonBib::CopyrightAssociation]
|
|
83
|
+
# @return [RelatonBib::CopyrightAssociation, NilClass]
|
|
84
84
|
attr_reader :copyright
|
|
85
85
|
|
|
86
86
|
# @return [RelatonBib::DocRelationCollection]
|
|
@@ -134,6 +134,11 @@ module RelatonBib
|
|
|
134
134
|
# @param validity [RelatonBib:Validity, NilClass]
|
|
135
135
|
# @param fetched [Date, NilClass] default nil
|
|
136
136
|
#
|
|
137
|
+
# @param copyright [Hash, RelatonBib::CopyrightAssociation, NilClass]
|
|
138
|
+
# @option copyright [Hash, RelatonBib::ContributionInfo] :owner
|
|
139
|
+
# @option copyright [String] :form
|
|
140
|
+
# @option copyright [String, NilClass] :to
|
|
141
|
+
#
|
|
137
142
|
# @param date [Array<Hash>]
|
|
138
143
|
# @option date [String] :type
|
|
139
144
|
# @option date [String] :from
|
|
@@ -265,6 +270,38 @@ module RelatonBib
|
|
|
265
270
|
end
|
|
266
271
|
end
|
|
267
272
|
|
|
273
|
+
# @return [Hash]
|
|
274
|
+
def to_hash
|
|
275
|
+
hash = {}
|
|
276
|
+
hash[:id] = id if id
|
|
277
|
+
hash[:title] = title.map(&:to_hash) if title&.any?
|
|
278
|
+
hash[:link] = link.map(&:to_hash) if link&.any?
|
|
279
|
+
hash[:type] = type if type
|
|
280
|
+
hash[:docid] = docidentifier.map(&:to_hash) if docidentifier&.any?
|
|
281
|
+
hash[:docnumber] = docnumber if docnumber
|
|
282
|
+
hash[:date] = date.map(&:to_hash) if date&.any?
|
|
283
|
+
hash[:contributor] = contributor.map(&:to_hash) if contributor&.any?
|
|
284
|
+
hash[:edition] = edition if edition
|
|
285
|
+
hash[:version] = version.to_hash if version
|
|
286
|
+
hash[:biblionote] = biblionote.map(&:to_hash) if biblionote&.any?
|
|
287
|
+
hash[:language] = language if language&.any?
|
|
288
|
+
hash[:script] = script if script&.any?
|
|
289
|
+
hash[:formattedref] = formattedref.to_hash if formattedref
|
|
290
|
+
hash[:abstract] = abstract.map(&:to_hash) if abstract&.any?
|
|
291
|
+
hash[:docstatus] = status.to_hash if status
|
|
292
|
+
hash[:copyright] = copyright.to_hash if copyright
|
|
293
|
+
hash[:relation] = relation.map(&:to_hash) if relation&.any?
|
|
294
|
+
hash[:series] = series.map(&:to_hash) if series&.any?
|
|
295
|
+
hash[:medium] = medium.to_hash if medium
|
|
296
|
+
hash[:place] = place if place&.any?
|
|
297
|
+
hash[:extent] = extent.map(&:to_hash) if extent&.any?
|
|
298
|
+
hash[:accesslocation] = accesslocation if accesslocation&.any?
|
|
299
|
+
hash[:classification] = classification.to_hash if classification
|
|
300
|
+
hash[:validity] = validity.to_hash if validity
|
|
301
|
+
hash[:fetched] = fetched.to_s if fetched
|
|
302
|
+
hash
|
|
303
|
+
end
|
|
304
|
+
|
|
268
305
|
private
|
|
269
306
|
|
|
270
307
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
@@ -36,6 +36,15 @@ module RelatonBib
|
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
|
+
|
|
40
|
+
# @return [Array]
|
|
41
|
+
def to_hash
|
|
42
|
+
if description&.any?
|
|
43
|
+
[type, description.map(&:content)] if type
|
|
44
|
+
else
|
|
45
|
+
type if type
|
|
46
|
+
end
|
|
47
|
+
end
|
|
39
48
|
end
|
|
40
49
|
|
|
41
50
|
# Contribution info.
|
|
@@ -54,8 +63,16 @@ module RelatonBib
|
|
|
54
63
|
@role = role.map { |r| ContributorRole.new(**r) }
|
|
55
64
|
end
|
|
56
65
|
|
|
66
|
+
# @param builder [Nokogiri::XML::Builder]
|
|
57
67
|
def to_xml(builder)
|
|
58
68
|
entity.to_xml builder
|
|
59
69
|
end
|
|
70
|
+
|
|
71
|
+
# @return [Hash]
|
|
72
|
+
def to_hash
|
|
73
|
+
hash = entity.to_hash
|
|
74
|
+
hash[:role] = role.map(&:to_hash) if role&.any?
|
|
75
|
+
hash
|
|
76
|
+
end
|
|
60
77
|
end
|
|
61
78
|
end
|
|
@@ -43,6 +43,17 @@ module RelatonBib
|
|
|
43
43
|
doc.postcode postcode if postcode
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
|
+
|
|
47
|
+
# @return [Hash]
|
|
48
|
+
def to_hash
|
|
49
|
+
hash = {}
|
|
50
|
+
hash[:street] = street if street&.any?
|
|
51
|
+
hash[:city] = city
|
|
52
|
+
hash[:state] = state if state
|
|
53
|
+
hash[:country] = country
|
|
54
|
+
hash[:postcode] = postcode if postcode
|
|
55
|
+
hash
|
|
56
|
+
end
|
|
46
57
|
end
|
|
47
58
|
|
|
48
59
|
# Contact class.
|
|
@@ -63,11 +74,16 @@ module RelatonBib
|
|
|
63
74
|
def to_xml(doc)
|
|
64
75
|
doc.send type, value
|
|
65
76
|
end
|
|
77
|
+
|
|
78
|
+
# @return [Hash]
|
|
79
|
+
def to_hash
|
|
80
|
+
{ type: type, value: value }
|
|
81
|
+
end
|
|
66
82
|
end
|
|
67
83
|
|
|
68
84
|
# Affilation.
|
|
69
85
|
class Affilation
|
|
70
|
-
# @return [RelatonBib::LocalizedString]
|
|
86
|
+
# @return [RelatonBib::LocalizedString, NilClass]
|
|
71
87
|
attr_reader :name
|
|
72
88
|
|
|
73
89
|
# @return [Array<RelatonBib::FormattedString>]
|
|
@@ -77,8 +93,10 @@ module RelatonBib
|
|
|
77
93
|
attr_reader :organization
|
|
78
94
|
|
|
79
95
|
# @param organization [RelatonBib::Organization]
|
|
96
|
+
# @param name [RelatonBib::LocalizedString, NilClass]
|
|
80
97
|
# @param description [Array<RelatonBib::FormattedString>]
|
|
81
|
-
def initialize(organization, description
|
|
98
|
+
def initialize(organization:, name: nil, description: [])
|
|
99
|
+
@name = name
|
|
82
100
|
@organization = organization
|
|
83
101
|
@description = description
|
|
84
102
|
end
|
|
@@ -91,6 +109,14 @@ module RelatonBib
|
|
|
91
109
|
organization.to_xml builder
|
|
92
110
|
end
|
|
93
111
|
end
|
|
112
|
+
|
|
113
|
+
# @return [Hash]
|
|
114
|
+
def to_hash
|
|
115
|
+
hash = organization.to_hash
|
|
116
|
+
hash[:name] = name.to_hash if name
|
|
117
|
+
hash[:description] = description.map(&:to_hash) if description&.any?
|
|
118
|
+
hash
|
|
119
|
+
end
|
|
94
120
|
end
|
|
95
121
|
|
|
96
122
|
# Contributor.
|
|
@@ -98,11 +124,11 @@ module RelatonBib
|
|
|
98
124
|
# @return [URI]
|
|
99
125
|
attr_reader :uri
|
|
100
126
|
|
|
101
|
-
# @return [Array<RelatonBib::Address, RelatonBib::
|
|
127
|
+
# @return [Array<RelatonBib::Address, RelatonBib::Contact>]
|
|
102
128
|
attr_reader :contact
|
|
103
129
|
|
|
104
130
|
# @param url [String]
|
|
105
|
-
# @param contact [Array<RelatonBib::Address, RelatonBib::
|
|
131
|
+
# @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
|
|
106
132
|
def initialize(url: nil, contact: [])
|
|
107
133
|
@uri = URI url if url
|
|
108
134
|
@contact = contact
|
|
@@ -118,5 +144,13 @@ module RelatonBib
|
|
|
118
144
|
def to_xml(builder)
|
|
119
145
|
contact.each { |contact| contact.to_xml builder }
|
|
120
146
|
end
|
|
147
|
+
|
|
148
|
+
# @return [Hash]
|
|
149
|
+
def to_hash
|
|
150
|
+
hash = {}
|
|
151
|
+
hash[:url] = uri.to_s if uri
|
|
152
|
+
hash[:contact] = contact.map(&:to_hash) if contact&.any?
|
|
153
|
+
hash
|
|
154
|
+
end
|
|
121
155
|
end
|
|
122
156
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module RelatonBib
|
|
2
2
|
# Copyright association.
|
|
3
3
|
class CopyrightAssociation
|
|
4
|
-
# @return [
|
|
4
|
+
# @return [Date]
|
|
5
5
|
attr_reader :from
|
|
6
6
|
|
|
7
|
-
# @return [
|
|
7
|
+
# @return [Date, NilClass]
|
|
8
8
|
attr_reader :to
|
|
9
9
|
|
|
10
10
|
# @return [RelatonBib::ContributionInfo]
|
|
@@ -22,8 +22,8 @@ module RelatonBib
|
|
|
22
22
|
else owner
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
@from =
|
|
26
|
-
@to =
|
|
25
|
+
@from = Date.strptime(from, "%Y") unless from.empty?
|
|
26
|
+
@to = Date.strptime(to, "%Y") unless to.to_s.empty?
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# @param builder [Nokogiri::XML::Builder]
|
|
@@ -34,5 +34,12 @@ module RelatonBib
|
|
|
34
34
|
builder.owner { owner.to_xml builder }
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
|
+
|
|
38
|
+
# @return [Hash]
|
|
39
|
+
def to_hash
|
|
40
|
+
hash = { owner: owner.to_hash[:organization], from: from.to_s }
|
|
41
|
+
hash[:to] = to.to_s if to
|
|
42
|
+
hash
|
|
43
|
+
end
|
|
37
44
|
end
|
|
38
45
|
end
|
|
@@ -32,5 +32,13 @@ module RelatonBib
|
|
|
32
32
|
builder.iteration iteration unless iteration.to_s.empty?
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
|
+
|
|
36
|
+
# @return [Hash]
|
|
37
|
+
def to_hash
|
|
38
|
+
hash = { stage: stage }
|
|
39
|
+
hash[:substage] = substage if substage
|
|
40
|
+
hash[:iteration] = iteration if iteration
|
|
41
|
+
hash
|
|
42
|
+
end
|
|
35
43
|
end
|
|
36
44
|
end
|
|
@@ -198,7 +198,9 @@ module RelatonBib
|
|
|
198
198
|
{ content: d })
|
|
199
199
|
end
|
|
200
200
|
Affilation.new(
|
|
201
|
-
Organization.new(org_hash_to_bib(a[:organization])),
|
|
201
|
+
organization: Organization.new(org_hash_to_bib(a[:organization])),
|
|
202
|
+
description: a[:description]
|
|
203
|
+
)
|
|
202
204
|
end
|
|
203
205
|
end
|
|
204
206
|
|
|
@@ -215,6 +217,7 @@ module RelatonBib
|
|
|
215
217
|
|
|
216
218
|
def relations_hash_to_bib(ret)
|
|
217
219
|
return unless ret[:relation]
|
|
220
|
+
|
|
218
221
|
ret[:relation] = array(ret[:relation])
|
|
219
222
|
ret[:relation]&.each_with_index do |r, i|
|
|
220
223
|
relation_bibitem_hash_to_bib(ret, r, i)
|
|
@@ -222,15 +225,24 @@ module RelatonBib
|
|
|
222
225
|
end
|
|
223
226
|
end
|
|
224
227
|
|
|
228
|
+
# @param ret [Hash]
|
|
229
|
+
# @param r [Hash] relation
|
|
230
|
+
# @param i [Integr] index of relation
|
|
225
231
|
def relation_bibitem_hash_to_bib(ret, r, i)
|
|
226
|
-
if r[:bibitem]
|
|
227
|
-
|
|
232
|
+
if r[:bibitem]
|
|
233
|
+
ret[:relation][i][:bibitem] = bib_item(hash_to_bib(r[:bibitem], true))
|
|
228
234
|
else
|
|
229
235
|
warn "bibitem missing: #{r}"
|
|
230
236
|
ret[:relation][i][:bibitem] = nil
|
|
231
237
|
end
|
|
232
238
|
end
|
|
233
239
|
|
|
240
|
+
# @param item [Hash]
|
|
241
|
+
# @retirn [RelatonBib::BibliographicItem]
|
|
242
|
+
def bib_item(item)
|
|
243
|
+
BibliographicItem.new(item)
|
|
244
|
+
end
|
|
245
|
+
|
|
234
246
|
def relation_biblocality_hash_to_bib(ret, r, i)
|
|
235
247
|
ret[:relation][i][:bib_locality] =
|
|
236
248
|
array(r[:bib_locality])&.map do |bl|
|
|
@@ -244,7 +256,7 @@ module RelatonBib
|
|
|
244
256
|
s[:formattedref] and s[:formattedref] = formattedref(s[:formattedref])
|
|
245
257
|
if s[:title]
|
|
246
258
|
s[:title] = { content: s[:title] } unless s.is_a?(Hash)
|
|
247
|
-
s[:title] =
|
|
259
|
+
s[:title] = typed_title_strig(s[:title])
|
|
248
260
|
end
|
|
249
261
|
s[:abbreviation] and
|
|
250
262
|
s[:abbreviation] = localizedstring(s[:abbreviation])
|
|
@@ -252,15 +264,21 @@ module RelatonBib
|
|
|
252
264
|
end
|
|
253
265
|
end
|
|
254
266
|
|
|
267
|
+
# @param title [Hash]
|
|
268
|
+
# @return [RelatonBib::TypedTitleString]
|
|
269
|
+
def typed_title_strig(title)
|
|
270
|
+
TypedTitleString.new title
|
|
271
|
+
end
|
|
272
|
+
|
|
255
273
|
def medium_hash_to_bib(ret)
|
|
256
274
|
ret[:medium] and ret[:medium] = Medium.new(ret[:medium])
|
|
257
275
|
end
|
|
258
276
|
|
|
259
277
|
def classification_hash_to_bib(ret)
|
|
260
|
-
#ret[:classification] = [ret[:classification]] unless ret[:classification].is_a?(Array)
|
|
261
|
-
#ret[:classification]&.each_with_index do |c, i|
|
|
262
|
-
#ret[:classification][i] = RelatonBib::Classification.new(c)
|
|
263
|
-
#end
|
|
278
|
+
# ret[:classification] = [ret[:classification]] unless ret[:classification].is_a?(Array)
|
|
279
|
+
# ret[:classification]&.each_with_index do |c, i|
|
|
280
|
+
# ret[:classification][i] = RelatonBib::Classification.new(c)
|
|
281
|
+
# end
|
|
264
282
|
ret[:classification] and
|
|
265
283
|
ret[:classification] = Classification.new(ret[:classification])
|
|
266
284
|
end
|
|
@@ -16,10 +16,8 @@ module RelatonBib
|
|
|
16
16
|
# @param language [String] language code Iso639
|
|
17
17
|
# @param script [String] script code Iso15924
|
|
18
18
|
def initialize(content, language = nil, script = nil)
|
|
19
|
-
@language = []
|
|
20
|
-
@
|
|
21
|
-
@script = []
|
|
22
|
-
@script << script if script
|
|
19
|
+
@language = language.is_a?(String) ? [language] : language
|
|
20
|
+
@script = script.is_a?(String) ? [script] : script
|
|
23
21
|
@content = content
|
|
24
22
|
end
|
|
25
23
|
|
|
@@ -37,9 +35,17 @@ module RelatonBib
|
|
|
37
35
|
def to_xml(builder)
|
|
38
36
|
return unless content
|
|
39
37
|
|
|
40
|
-
builder.parent["language"] = language.join(",") if language
|
|
41
|
-
builder.parent["script"] = script.join(",") if script
|
|
38
|
+
builder.parent["language"] = language.join(",") if language&.any?
|
|
39
|
+
builder.parent["script"] = script.join(",") if script&.any?
|
|
42
40
|
builder.text content
|
|
43
41
|
end
|
|
42
|
+
|
|
43
|
+
# @return [Hash]
|
|
44
|
+
def to_hash
|
|
45
|
+
hash = { content: content }
|
|
46
|
+
hash[:language] = language if language&.any?
|
|
47
|
+
hash[:script] = script if script&.any?
|
|
48
|
+
hash
|
|
49
|
+
end
|
|
44
50
|
end
|
|
45
51
|
end
|
data/lib/relaton_bib/medium.rb
CHANGED
|
@@ -34,6 +34,11 @@ module RelatonBib
|
|
|
34
34
|
def to_xml(builder)
|
|
35
35
|
builder.identifier(value, type: type)
|
|
36
36
|
end
|
|
37
|
+
|
|
38
|
+
# @return [Hash]
|
|
39
|
+
def to_hash
|
|
40
|
+
{ type: type, id: value }
|
|
41
|
+
end
|
|
37
42
|
end
|
|
38
43
|
|
|
39
44
|
# Organization.
|
|
@@ -41,10 +46,10 @@ module RelatonBib
|
|
|
41
46
|
# @return [Array<RelatonBib::LocalizedString>]
|
|
42
47
|
attr_reader :name
|
|
43
48
|
|
|
44
|
-
# @return [RelatonBib::LocalizedString]
|
|
49
|
+
# @return [RelatonBib::LocalizedString, NilClass]
|
|
45
50
|
attr_reader :abbreviation
|
|
46
51
|
|
|
47
|
-
# @return [RelatonBib::LocalizedString]
|
|
52
|
+
# @return [RelatonBib::LocalizedString, NilClass]
|
|
48
53
|
attr_reader :subdivision
|
|
49
54
|
|
|
50
55
|
# @return [Array<RelatonBib::OrgIdentifier>]
|
|
@@ -61,7 +66,7 @@ module RelatonBib
|
|
|
61
66
|
# @param subdivision [RelatoBib::LocalizedStrig, String]
|
|
62
67
|
# @param url [String]
|
|
63
68
|
# @param identifier [Array<RelatonBib::OrgIdentifier>]
|
|
64
|
-
# @param contact [Array<RelatonBib::Address, RelatonBib::
|
|
69
|
+
# @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
|
|
65
70
|
def initialize(**args)
|
|
66
71
|
raise ArgumentError, "missing keyword: name" unless args[:name]
|
|
67
72
|
|
|
@@ -101,5 +106,14 @@ module RelatonBib
|
|
|
101
106
|
super
|
|
102
107
|
end
|
|
103
108
|
end
|
|
109
|
+
|
|
110
|
+
# @return [Hash]
|
|
111
|
+
def to_hash
|
|
112
|
+
hash = { name: name.map(&:to_hash) }
|
|
113
|
+
hash[:abbreviation] = abbreviation.to_hash if abbreviation
|
|
114
|
+
hash[:identifier] = identifier.map(&:to_hash) if identifier&.any?
|
|
115
|
+
hash[:subdivision] = subdivision.to_hash if subdivision
|
|
116
|
+
{ organization: hash.merge(super) }
|
|
117
|
+
end
|
|
104
118
|
end
|
|
105
119
|
end
|
data/lib/relaton_bib/person.rb
CHANGED
|
@@ -56,6 +56,27 @@ module RelatonBib
|
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
|
+
|
|
60
|
+
# @return [Hash]
|
|
61
|
+
def to_hash
|
|
62
|
+
hash = {}
|
|
63
|
+
hash[:forename] = forename.map(&:to_hash) if forename&.any?
|
|
64
|
+
hash[:initial] = initial.map(&:to_hash) if initial&.any?
|
|
65
|
+
hash[:surname] = surname.to_hash if surname
|
|
66
|
+
hash[:addition] = addition.map(&:to_hash) if addition&.any?
|
|
67
|
+
hash[:prefix] = prefix.map(&:to_hash) if prefix&.any?
|
|
68
|
+
hash[:completename] = completename.to_hash if completename
|
|
69
|
+
hash
|
|
70
|
+
# instance_variables.reduce({}) do |hash, var|
|
|
71
|
+
# val = instance_variable_get var
|
|
72
|
+
# if val || val.is_a?(Array) && val.any?
|
|
73
|
+
# key = var.to_s.sub("@", "").to_sym
|
|
74
|
+
# hash.merge key => val
|
|
75
|
+
# else
|
|
76
|
+
# hash
|
|
77
|
+
# end
|
|
78
|
+
# end
|
|
79
|
+
end
|
|
59
80
|
end
|
|
60
81
|
|
|
61
82
|
# Person identifier type.
|
|
@@ -94,6 +115,11 @@ module RelatonBib
|
|
|
94
115
|
def to_xml(builder)
|
|
95
116
|
builder.identifier value, type: type
|
|
96
117
|
end
|
|
118
|
+
|
|
119
|
+
# @return [Hash]
|
|
120
|
+
def to_hash
|
|
121
|
+
{ type: type, id: value }
|
|
122
|
+
end
|
|
97
123
|
end
|
|
98
124
|
|
|
99
125
|
# Person class.
|
|
@@ -109,7 +135,7 @@ module RelatonBib
|
|
|
109
135
|
|
|
110
136
|
# @param name [RelatonBib::FullName]
|
|
111
137
|
# @param affiliation [Array<RelatonBib::Affiliation>]
|
|
112
|
-
# @param contact [Array<RelatonBib::Address, RelatonBib::
|
|
138
|
+
# @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
|
|
113
139
|
# @param identifier [Array<RelatonBib::PersonIdentifier>]
|
|
114
140
|
def initialize(name:, affiliation: [], contact: [], identifier: [])
|
|
115
141
|
super(contact: contact)
|
|
@@ -127,5 +153,13 @@ module RelatonBib
|
|
|
127
153
|
contact.each { |contact| contact.to_xml builder }
|
|
128
154
|
end
|
|
129
155
|
end
|
|
156
|
+
|
|
157
|
+
# @return [Hash]
|
|
158
|
+
def to_hash
|
|
159
|
+
hash = { name: name.to_hash }
|
|
160
|
+
hash[:affiliation] = affiliation.map(&:to_hash) if affiliation&.any?
|
|
161
|
+
hash[:identifier] = identifier.map(&:to_hash) if identifier&.any?
|
|
162
|
+
{ person: hash.merge(super) }
|
|
163
|
+
end
|
|
130
164
|
end
|
|
131
165
|
end
|
data/lib/relaton_bib/series.rb
CHANGED
|
@@ -93,5 +93,21 @@ module RelatonBib
|
|
|
93
93
|
end
|
|
94
94
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
95
95
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
96
|
+
|
|
97
|
+
# @return [Hash]
|
|
98
|
+
def to_hash
|
|
99
|
+
hash = {}
|
|
100
|
+
hash[:type] = type if type
|
|
101
|
+
hash[:formattedref] = formattedref.to_hash if formattedref
|
|
102
|
+
hash[:title] = title.to_hash if title
|
|
103
|
+
hash[:place] = place if place
|
|
104
|
+
hash[:organization] = organization if organization
|
|
105
|
+
hash[:abbreviation] = abbreviation.to_hash if abbreviation
|
|
106
|
+
hash[:from] = from if from
|
|
107
|
+
hash[:to] = to if to
|
|
108
|
+
hash[:number] = number if number
|
|
109
|
+
hash[:partnumber] = partnumber if partnumber
|
|
110
|
+
hash
|
|
111
|
+
end
|
|
96
112
|
end
|
|
97
113
|
end
|
|
@@ -15,8 +15,14 @@ module RelatonBib
|
|
|
15
15
|
@content = Addressable::URI.parse content if content
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
# @param builder [Nokogiri::XML::Builder]
|
|
18
19
|
def to_xml(builder)
|
|
19
20
|
builder.uri(content.to_s, type: type)
|
|
20
21
|
end
|
|
22
|
+
|
|
23
|
+
# @return [Hash]
|
|
24
|
+
def to_hash
|
|
25
|
+
{ type: type, content: content.to_s }
|
|
26
|
+
end
|
|
21
27
|
end
|
|
22
28
|
end
|
data/lib/relaton_bib/validity.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module RelatonBib
|
|
2
2
|
class Validity
|
|
3
|
+
FORMAT = "%Y-%m-%d %H:%M"
|
|
4
|
+
|
|
3
5
|
# @return [Time, NilClass]
|
|
4
6
|
attr_reader :begins
|
|
5
7
|
|
|
@@ -20,12 +22,20 @@ module RelatonBib
|
|
|
20
22
|
|
|
21
23
|
# @param [Nokogiri::XML::Builder]
|
|
22
24
|
def to_xml(builder)
|
|
23
|
-
format = "%Y-%m-%d %H:%M"
|
|
24
25
|
builder.validity do
|
|
25
|
-
builder.validityBegins begins.strftime(
|
|
26
|
-
builder.validityEnds ends.strftime(
|
|
27
|
-
builder.validityRevision revision.strftime(
|
|
26
|
+
builder.validityBegins begins.strftime(FORMAT) if begins
|
|
27
|
+
builder.validityEnds ends.strftime(FORMAT) if ends
|
|
28
|
+
builder.validityRevision revision.strftime(FORMAT) if revision
|
|
28
29
|
end
|
|
29
30
|
end
|
|
31
|
+
|
|
32
|
+
# @return [Hash]
|
|
33
|
+
def to_hash
|
|
34
|
+
hash = {}
|
|
35
|
+
hash[:begins] = begins.strftime(FORMAT) if begins
|
|
36
|
+
hash[:ends] = ends.strftime(FORMAT) if ends
|
|
37
|
+
hash[:revision] = revision.strftime(FORMAT) if revision
|
|
38
|
+
hash
|
|
39
|
+
end
|
|
30
40
|
end
|
|
31
41
|
end
|
data/lib/relaton_bib/version.rb
CHANGED
|
@@ -178,7 +178,11 @@ module RelatonBib
|
|
|
178
178
|
def get_person(person)
|
|
179
179
|
affilations = person.xpath("./affiliation").map do |a|
|
|
180
180
|
org = a.at "./organization"
|
|
181
|
-
|
|
181
|
+
desc = a.xpath("./description").map do |e|
|
|
182
|
+
FormattedString.new(content: e.text, language: e[:language],
|
|
183
|
+
script: e[:script], format: e[:format])
|
|
184
|
+
end
|
|
185
|
+
Affilation.new organization: get_org(org), description: desc
|
|
182
186
|
end
|
|
183
187
|
|
|
184
188
|
contact = person.xpath("./address | ./phone | ./email | ./uri").map do |c|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: relaton-bib
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-08-
|
|
11
|
+
date: 2019-08-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -220,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
220
220
|
version: '0'
|
|
221
221
|
requirements: []
|
|
222
222
|
rubyforge_project:
|
|
223
|
-
rubygems_version: 2.
|
|
223
|
+
rubygems_version: 2.6.12
|
|
224
224
|
signing_key:
|
|
225
225
|
specification_version: 4
|
|
226
226
|
summary: 'RelatonBib: Ruby XMLDOC impementation.'
|