relaton 2.1.0 → 3.0.0.pre.alpha.1
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/{docs/README.adoc → README.adoc} +109 -38
- data/lib/relaton/3gpp/bibdata.rb +9 -0
- data/lib/relaton/3gpp/bibitem.rb +9 -0
- data/lib/relaton/3gpp/bibliography.rb +48 -0
- data/lib/relaton/3gpp/data_fetcher.rb +255 -0
- data/lib/relaton/3gpp/doctype.rb +9 -0
- data/lib/relaton/3gpp/ext.rb +31 -0
- data/lib/relaton/3gpp/item.rb +12 -0
- data/lib/relaton/3gpp/item_data.rb +15 -0
- data/lib/relaton/3gpp/parser.rb +400 -0
- data/lib/relaton/3gpp/processor.rb +68 -0
- data/lib/relaton/3gpp/release.rb +34 -0
- data/lib/relaton/3gpp/util.rb +8 -0
- data/lib/relaton/3gpp.rb +25 -0
- data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
- data/lib/relaton/bib/converter/asciibib.rb +13 -0
- data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
- data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
- data/lib/relaton/bib/converter/bibtex.rb +23 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
- data/lib/relaton/bib/converter/bibxml.rb +51 -0
- data/lib/relaton/bib/hash_parser_v1.rb +767 -0
- data/lib/relaton/bib/item_data.rb +229 -0
- data/lib/relaton/bib/model/abstract.rb +16 -0
- data/lib/relaton/bib/model/address.rb +22 -0
- data/lib/relaton/bib/model/affiliation.rb +16 -0
- data/lib/relaton/bib/model/bibdata.rb +11 -0
- data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
- data/lib/relaton/bib/model/bibitem.rb +11 -0
- data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
- data/lib/relaton/bib/model/contact.rb +18 -0
- data/lib/relaton/bib/model/contribution_info.rb +15 -0
- data/lib/relaton/bib/model/contributor.rb +29 -0
- data/lib/relaton/bib/model/copyright.rb +27 -0
- data/lib/relaton/bib/model/date.rb +31 -0
- data/lib/relaton/bib/model/depiction.rb +16 -0
- data/lib/relaton/bib/model/docidentifier.rb +34 -0
- data/lib/relaton/bib/model/doctype.rb +14 -0
- data/lib/relaton/bib/model/edition.rb +14 -0
- data/lib/relaton/bib/model/ext.rb +39 -0
- data/lib/relaton/bib/model/extent.rb +16 -0
- data/lib/relaton/bib/model/formattedref.rb +43 -0
- data/lib/relaton/bib/model/full_name_type.rb +64 -0
- data/lib/relaton/bib/model/fullname.rb +11 -0
- data/lib/relaton/bib/model/ics.rb +49 -0
- data/lib/relaton/bib/model/image.rb +28 -0
- data/lib/relaton/bib/model/item.rb +96 -0
- data/lib/relaton/bib/model/item_base.rb +20 -0
- data/lib/relaton/bib/model/item_shared.rb +88 -0
- data/lib/relaton/bib/model/keyword.rb +30 -0
- data/lib/relaton/bib/model/locality.rb +18 -0
- data/lib/relaton/bib/model/locality_stack.rb +14 -0
- data/lib/relaton/bib/model/localized_string.rb +48 -0
- data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
- data/lib/relaton/bib/model/logo.rb +14 -0
- data/lib/relaton/bib/model/medium.rb +22 -0
- data/lib/relaton/bib/model/note.rb +16 -0
- data/lib/relaton/bib/model/organization.rb +13 -0
- data/lib/relaton/bib/model/organization_type.rb +42 -0
- data/lib/relaton/bib/model/person.rb +36 -0
- data/lib/relaton/bib/model/phone.rb +14 -0
- data/lib/relaton/bib/model/place.rb +33 -0
- data/lib/relaton/bib/model/price.rb +14 -0
- data/lib/relaton/bib/model/relation.rb +43 -0
- data/lib/relaton/bib/model/series.rb +34 -0
- data/lib/relaton/bib/model/size.rb +23 -0
- data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
- data/lib/relaton/bib/model/status.rb +27 -0
- data/lib/relaton/bib/model/structured_identifier.rb +48 -0
- data/lib/relaton/bib/model/subdivision.rb +16 -0
- data/lib/relaton/bib/model/title.rb +56 -0
- data/lib/relaton/bib/model/type/plain_date.rb +16 -0
- data/lib/relaton/bib/model/type/string_date.rb +48 -0
- data/lib/relaton/bib/model/uri.rb +18 -0
- data/lib/relaton/bib/model/validity.rb +16 -0
- data/lib/relaton/bib/model/version.rb +43 -0
- data/lib/relaton/bib/namespace_helper.rb +21 -0
- data/lib/relaton/bib/sanitizer.rb +68 -0
- data/lib/relaton/bib/util.rb +18 -0
- data/lib/relaton/bib/versions.json +35 -0
- data/lib/relaton/bib.rb +48 -0
- data/lib/relaton/bipm/bibliography.rb +82 -0
- data/lib/relaton/bipm/converter/asciibib.rb +64 -0
- data/lib/relaton/bipm/data_fetcher.rb +57 -0
- data/lib/relaton/bipm/data_outcomes_parser.rb +657 -0
- data/lib/relaton/bipm/id_parser.rb +277 -0
- data/lib/relaton/bipm/item_data.rb +47 -0
- data/lib/relaton/bipm/model/bibdata.rb +9 -0
- data/lib/relaton/bipm/model/bibitem.rb +9 -0
- data/lib/relaton/bipm/model/comment_period.rb +13 -0
- data/lib/relaton/bipm/model/doctype.rb +12 -0
- data/lib/relaton/bipm/model/ext.rb +38 -0
- data/lib/relaton/bipm/model/item.rb +11 -0
- data/lib/relaton/bipm/model/structured_identifier.rb +15 -0
- data/lib/relaton/bipm/processor.rb +69 -0
- data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
- data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +174 -0
- data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
- data/lib/relaton/bipm/si_brochure_parser.rb +186 -0
- data/lib/relaton/bipm/util.rb +8 -0
- data/lib/relaton/bipm.rb +32 -0
- data/lib/relaton/bsi/bibliography.rb +124 -0
- data/lib/relaton/bsi/hit.rb +14 -0
- data/lib/relaton/bsi/hit_collection.rb +114 -0
- data/lib/relaton/bsi/item_data.rb +13 -0
- data/lib/relaton/bsi/model/bibdata.rb +8 -0
- data/lib/relaton/bsi/model/bibitem.rb +8 -0
- data/lib/relaton/bsi/model/docidentifier.rb +9 -0
- data/lib/relaton/bsi/model/doctype.rb +14 -0
- data/lib/relaton/bsi/model/ext.rb +17 -0
- data/lib/relaton/bsi/model/item.rb +17 -0
- data/lib/relaton/bsi/model/item_base.rb +22 -0
- data/lib/relaton/bsi/model/relation.rb +9 -0
- data/lib/relaton/bsi/processor.rb +42 -0
- data/lib/relaton/bsi/schema.json +24882 -0
- data/lib/relaton/bsi/scraper.rb +288 -0
- data/lib/relaton/bsi/util.rb +8 -0
- data/lib/relaton/bsi.rb +25 -0
- data/lib/relaton/calconnect/bibliography.rb +95 -0
- data/lib/relaton/calconnect/data_fetcher.rb +106 -0
- data/lib/relaton/calconnect/hit.rb +14 -0
- data/lib/relaton/calconnect/hit_collection.rb +84 -0
- data/lib/relaton/calconnect/item_data.rb +12 -0
- data/lib/relaton/calconnect/model/bibdata.rb +8 -0
- data/lib/relaton/calconnect/model/bibitem.rb +8 -0
- data/lib/relaton/calconnect/model/doctype.rb +11 -0
- data/lib/relaton/calconnect/model/ext.rb +11 -0
- data/lib/relaton/calconnect/model/item.rb +13 -0
- data/lib/relaton/calconnect/processor.rb +66 -0
- data/lib/relaton/calconnect/scraper.rb +87 -0
- data/lib/relaton/calconnect/util.rb +8 -0
- data/lib/relaton/calconnect.rb +26 -0
- data/lib/relaton/ccsds/bibliography.rb +63 -0
- data/lib/relaton/ccsds/data/fetcher.rb +247 -0
- data/lib/relaton/ccsds/data/iso_references.rb +30 -0
- data/lib/relaton/ccsds/data/parser.rb +194 -0
- data/lib/relaton/ccsds/hit.rb +24 -0
- data/lib/relaton/ccsds/hit_collection.rb +42 -0
- data/lib/relaton/ccsds/item_data.rb +9 -0
- data/lib/relaton/ccsds/model/bibdata.rb +8 -0
- data/lib/relaton/ccsds/model/bibitem.rb +8 -0
- data/lib/relaton/ccsds/model/doctype.rb +9 -0
- data/lib/relaton/ccsds/model/ext.rb +19 -0
- data/lib/relaton/ccsds/model/item.rb +13 -0
- data/lib/relaton/ccsds/processor.rb +68 -0
- data/lib/relaton/ccsds/util.rb +10 -0
- data/lib/relaton/ccsds.rb +33 -0
- data/lib/relaton/cen/bibliography.rb +121 -0
- data/lib/relaton/cen/committees.yaml +66 -0
- data/lib/relaton/cen/hit.rb +16 -0
- data/lib/relaton/cen/hit_collection.rb +68 -0
- data/lib/relaton/cen/item_data.rb +7 -0
- data/lib/relaton/cen/model/bibdata.rb +8 -0
- data/lib/relaton/cen/model/bibitem.rb +8 -0
- data/lib/relaton/cen/model/docidentifier.rb +9 -0
- data/lib/relaton/cen/model/ext.rb +11 -0
- data/lib/relaton/cen/model/item.rb +14 -0
- data/lib/relaton/cen/model/structured_identifier.rb +9 -0
- data/lib/relaton/cen/processor.rb +40 -0
- data/lib/relaton/cen/scraper.rb +210 -0
- data/lib/relaton/cen/util.rb +8 -0
- data/lib/relaton/cen.rb +29 -0
- data/lib/relaton/cie/bibdata.rb +8 -0
- data/lib/relaton/cie/bibitem.rb +8 -0
- data/lib/relaton/cie/bibliography.rb +31 -0
- data/lib/relaton/cie/data_fetcher.rb +355 -0
- data/lib/relaton/cie/ext.rb +7 -0
- data/lib/relaton/cie/item.rb +11 -0
- data/lib/relaton/cie/item_data.rb +6 -0
- data/lib/relaton/cie/processor.rb +66 -0
- data/lib/relaton/cie/scrapper.rb +39 -0
- data/lib/relaton/cie/util.rb +8 -0
- data/lib/relaton/cie.rb +28 -0
- data/lib/relaton/core/array_wrapper.rb +20 -0
- data/lib/relaton/core/data_fetcher.rb +97 -0
- data/lib/relaton/core/date_parser.rb +42 -0
- data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
- data/lib/relaton/core/hit.rb +49 -0
- data/lib/relaton/core/hit_collection.rb +118 -0
- data/lib/relaton/core/processor.rb +48 -0
- data/lib/relaton/core/workers_pool.rb +45 -0
- data/lib/relaton/core.rb +9 -0
- data/lib/relaton/db/cache.rb +232 -0
- data/lib/relaton/db/config.rb +24 -0
- data/lib/relaton/db/registry.rb +119 -0
- data/lib/relaton/db/util.rb +9 -0
- data/lib/relaton/db/workers_pool.rb +22 -0
- data/lib/relaton/db.rb +20 -206
- data/lib/relaton/doi/crossref.rb +72 -0
- data/lib/relaton/doi/parser.rb +827 -0
- data/lib/relaton/doi/processor.rb +65 -0
- data/lib/relaton/doi/util.rb +8 -0
- data/lib/relaton/doi.rb +20 -0
- data/lib/relaton/ecma/bibdata.rb +8 -0
- data/lib/relaton/ecma/bibitem.rb +8 -0
- data/lib/relaton/ecma/bibliography.rb +81 -0
- data/lib/relaton/ecma/data_fetcher.rb +103 -0
- data/lib/relaton/ecma/data_parser.rb +49 -0
- data/lib/relaton/ecma/edition_parser.rb +80 -0
- data/lib/relaton/ecma/ext.rb +7 -0
- data/lib/relaton/ecma/item.rb +11 -0
- data/lib/relaton/ecma/item_data.rb +6 -0
- data/lib/relaton/ecma/memento_parser.rb +60 -0
- data/lib/relaton/ecma/page_fetcher.rb +27 -0
- data/lib/relaton/ecma/parser_common.rb +33 -0
- data/lib/relaton/ecma/processor.rb +66 -0
- data/lib/relaton/ecma/standard_parser.rb +134 -0
- data/lib/relaton/ecma/util.rb +8 -0
- data/lib/relaton/ecma.rb +24 -0
- data/lib/relaton/etsi/bibdata.rb +10 -0
- data/lib/relaton/etsi/bibitem.rb +10 -0
- data/lib/relaton/etsi/bibliography.rb +46 -0
- data/lib/relaton/etsi/data_fetcher.rb +128 -0
- data/lib/relaton/etsi/data_parser.rb +208 -0
- data/lib/relaton/etsi/doctype.rb +30 -0
- data/lib/relaton/etsi/ext.rb +31 -0
- data/lib/relaton/etsi/item.rb +15 -0
- data/lib/relaton/etsi/item_data.rb +6 -0
- data/lib/relaton/etsi/processor.rb +69 -0
- data/lib/relaton/etsi/pubid.rb +37 -0
- data/lib/relaton/etsi/status.rb +13 -0
- data/lib/relaton/etsi/util.rb +8 -0
- data/lib/relaton/etsi.rb +25 -0
- data/lib/relaton/gb/bibdata.rb +8 -0
- data/lib/relaton/gb/bibitem.rb +8 -0
- data/lib/relaton/gb/bibliography.rb +145 -0
- data/lib/relaton/gb/ccs.rb +14 -0
- data/lib/relaton/gb/committee.rb +13 -0
- data/lib/relaton/gb/docidentifier.rb +23 -0
- data/lib/relaton/gb/doctype.rb +9 -0
- data/lib/relaton/gb/ext.rb +36 -0
- data/lib/relaton/gb/gb_scraper.rb +61 -0
- data/lib/relaton/gb/gb_type.rb +20 -0
- data/lib/relaton/gb/hit.rb +48 -0
- data/lib/relaton/gb/hit_collection.rb +19 -0
- data/lib/relaton/gb/item.rb +13 -0
- data/lib/relaton/gb/item_data.rb +6 -0
- data/lib/relaton/gb/processor.rb +46 -0
- data/lib/relaton/gb/project_number.rb +38 -0
- data/lib/relaton/gb/scraper.rb +204 -0
- data/lib/relaton/gb/sec_scraper.rb +92 -0
- data/lib/relaton/gb/stage_name.rb +13 -0
- data/lib/relaton/gb/structured_identifier.rb +26 -0
- data/lib/relaton/gb/t_scraper.rb +126 -0
- data/lib/relaton/gb/util.rb +8 -0
- data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
- data/lib/relaton/gb.rb +33 -0
- data/lib/relaton/iana/bibdata.rb +8 -0
- data/lib/relaton/iana/bibitem.rb +8 -0
- data/lib/relaton/iana/bibliography.rb +47 -0
- data/lib/relaton/iana/data_fetcher.rb +71 -0
- data/lib/relaton/iana/item.rb +7 -0
- data/lib/relaton/iana/item_data.rb +6 -0
- data/lib/relaton/iana/parser.rb +146 -0
- data/lib/relaton/iana/processor.rb +68 -0
- data/lib/relaton/iana/util.rb +8 -0
- data/lib/relaton/iana.rb +29 -0
- data/lib/relaton/iec/bibliography.rb +283 -0
- data/lib/relaton/iec/data_fetcher.rb +216 -0
- data/lib/relaton/iec/data_parser.rb +391 -0
- data/lib/relaton/iec/hit.rb +26 -0
- data/lib/relaton/iec/hit_collection.rb +138 -0
- data/lib/relaton/iec/item_data.rb +7 -0
- data/lib/relaton/iec/model/bibdata.rb +8 -0
- data/lib/relaton/iec/model/bibitem.rb +8 -0
- data/lib/relaton/iec/model/docidentifier.rb +131 -0
- data/lib/relaton/iec/model/doctype.rb +12 -0
- data/lib/relaton/iec/model/ext.rb +53 -0
- data/lib/relaton/iec/model/item.rb +20 -0
- data/lib/relaton/iec/model/item_base.rb +12 -0
- data/lib/relaton/iec/model/relation.rb +7 -0
- data/lib/relaton/iec/model/stage_name.rb +13 -0
- data/lib/relaton/iec/processor.rb +73 -0
- data/lib/relaton/iec/statuses.yml +199 -0
- data/lib/relaton/iec/util.rb +8 -0
- data/lib/relaton/iec.rb +98 -0
- data/lib/relaton/ieee/balloting_group.rb +13 -0
- data/lib/relaton/ieee/bibdata.rb +8 -0
- data/lib/relaton/ieee/bibitem.rb +8 -0
- data/lib/relaton/ieee/bibliography.rb +51 -0
- data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
- data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
- data/lib/relaton/ieee/converter/bibxml.rb +20 -0
- data/lib/relaton/ieee/data_fetcher.rb +630 -0
- data/lib/relaton/ieee/doctype.rb +9 -0
- data/lib/relaton/ieee/editorial_group.rb +19 -0
- data/lib/relaton/ieee/ext.rb +36 -0
- data/lib/relaton/ieee/idams_parser.rb +323 -0
- data/lib/relaton/ieee/item.rb +11 -0
- data/lib/relaton/ieee/item_data.rb +7 -0
- data/lib/relaton/ieee/processor.rb +68 -0
- data/lib/relaton/ieee/pub_id.rb +161 -0
- data/lib/relaton/ieee/rawbib_id_parser.rb +548 -0
- data/lib/relaton/ieee/util.rb +8 -0
- data/lib/relaton/ieee.rb +29 -0
- data/lib/relaton/ietf/bibdata.rb +8 -0
- data/lib/relaton/ietf/bibitem.rb +8 -0
- data/lib/relaton/ietf/bibliography.rb +35 -0
- data/lib/relaton/ietf/bibxml_parser.rb +232 -0
- data/lib/relaton/ietf/data_fetcher.rb +278 -0
- data/lib/relaton/ietf/doctype.rb +9 -0
- data/lib/relaton/ietf/ext.rb +63 -0
- data/lib/relaton/ietf/item.rb +16 -0
- data/lib/relaton/ietf/item_base.rb +18 -0
- data/lib/relaton/ietf/item_data.rb +6 -0
- data/lib/relaton/ietf/processing_instructions.rb +79 -0
- data/lib/relaton/ietf/processor.rb +68 -0
- data/lib/relaton/ietf/relation.rb +9 -0
- data/lib/relaton/ietf/rfc/abstract.rb +19 -0
- data/lib/relaton/ietf/rfc/author.rb +21 -0
- data/lib/relaton/ietf/rfc/entry.rb +410 -0
- data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
- data/lib/relaton/ietf/rfc/format.rb +19 -0
- data/lib/relaton/ietf/rfc/index.rb +46 -0
- data/lib/relaton/ietf/rfc/is_also.rb +21 -0
- data/lib/relaton/ietf/rfc/keywords.rb +19 -0
- data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
- data/lib/relaton/ietf/scraper.rb +68 -0
- data/lib/relaton/ietf/util.rb +8 -0
- data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
- data/lib/relaton/ietf.rb +27 -0
- data/lib/relaton/iho/bibdata.rb +8 -0
- data/lib/relaton/iho/bibitem.rb +8 -0
- data/lib/relaton/iho/bibliography.rb +114 -0
- data/lib/relaton/iho/comment_period.rb +13 -0
- data/lib/relaton/iho/docidentifier.rb +31 -0
- data/lib/relaton/iho/doctype.rb +10 -0
- data/lib/relaton/iho/ext.rb +20 -0
- data/lib/relaton/iho/hash_parser_v1.rb +144 -0
- data/lib/relaton/iho/item.rb +20 -0
- data/lib/relaton/iho/item_base.rb +18 -0
- data/lib/relaton/iho/item_data.rb +6 -0
- data/lib/relaton/iho/processor.rb +54 -0
- data/lib/relaton/iho/relation.rb +9 -0
- data/lib/relaton/iho/structured_identifier.rb +20 -0
- data/lib/relaton/iho/util.rb +8 -0
- data/lib/relaton/iho.rb +27 -0
- data/lib/relaton/index/config.rb +52 -0
- data/lib/relaton/index/file_io.rb +305 -0
- data/lib/relaton/index/file_storage.rb +61 -0
- data/lib/relaton/index/id_number.rb +30 -0
- data/lib/relaton/index/pool.rb +41 -0
- data/lib/relaton/index/type.rb +159 -0
- data/lib/relaton/index/util.rb +18 -0
- data/lib/relaton/index.rb +60 -0
- data/lib/relaton/isbn/isbn.rb +61 -0
- data/lib/relaton/isbn/open_library.rb +43 -0
- data/lib/relaton/isbn/parser.rb +88 -0
- data/lib/relaton/isbn/processor.rb +48 -0
- data/lib/relaton/isbn/util.rb +8 -0
- data/lib/relaton/isbn.rb +19 -0
- data/lib/relaton/iso/bibliography.rb +407 -0
- data/lib/relaton/iso/data_fetcher.rb +338 -0
- data/lib/relaton/iso/data_parser.rb +444 -0
- data/lib/relaton/iso/hash_parser_v1.rb +177 -0
- data/lib/relaton/iso/hit.rb +57 -0
- data/lib/relaton/iso/hit_collection.rb +184 -0
- data/lib/relaton/iso/item_data.rb +28 -0
- data/lib/relaton/iso/model/bibdata.rb +10 -0
- data/lib/relaton/iso/model/bibitem.rb +8 -0
- data/lib/relaton/iso/model/contributor.rb +6 -0
- data/lib/relaton/iso/model/contributor_info.rb +9 -0
- data/lib/relaton/iso/model/docidentifier.rb +134 -0
- data/lib/relaton/iso/model/doctype.rb +13 -0
- data/lib/relaton/iso/model/ext.rb +35 -0
- data/lib/relaton/iso/model/item.rb +17 -0
- data/lib/relaton/iso/model/item_base.rb +22 -0
- data/lib/relaton/iso/model/organization.rb +9 -0
- data/lib/relaton/iso/model/project_number.rb +22 -0
- data/lib/relaton/iso/model/relation.rb +9 -0
- data/lib/relaton/iso/model/stagename.rb +14 -0
- data/lib/relaton/iso/model/structured_identifier.rb +31 -0
- data/lib/relaton/iso/processor.rb +84 -0
- data/lib/relaton/iso/scraper.rb +619 -0
- data/lib/relaton/iso/type/pubid.rb +50 -0
- data/lib/relaton/iso/util.rb +8 -0
- data/lib/relaton/iso.rb +30 -0
- data/lib/relaton/itu/bibliography.rb +90 -0
- data/lib/relaton/itu/data_fetcher.rb +104 -0
- data/lib/relaton/itu/data_parser_r.rb +140 -0
- data/lib/relaton/itu/hit.rb +22 -0
- data/lib/relaton/itu/hit_collection.rb +127 -0
- data/lib/relaton/itu/item_data.rb +6 -0
- data/lib/relaton/itu/model/approval_stage.rb +13 -0
- data/lib/relaton/itu/model/bibdata.rb +8 -0
- data/lib/relaton/itu/model/bibitem.rb +8 -0
- data/lib/relaton/itu/model/docidentifier.rb +9 -0
- data/lib/relaton/itu/model/doctype.rb +13 -0
- data/lib/relaton/itu/model/ext.rb +47 -0
- data/lib/relaton/itu/model/item.rb +13 -0
- data/lib/relaton/itu/model/meeting.rb +13 -0
- data/lib/relaton/itu/model/meeting_date.rb +15 -0
- data/lib/relaton/itu/model/question.rb +13 -0
- data/lib/relaton/itu/model/recommendation_status.rb +11 -0
- data/lib/relaton/itu/model/structured_identifier.rb +19 -0
- data/lib/relaton/itu/processor.rb +66 -0
- data/lib/relaton/itu/pubid.rb +177 -0
- data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
- data/lib/relaton/itu/recommendation_parser.rb +161 -0
- data/lib/relaton/itu/scraper.rb +193 -0
- data/lib/relaton/itu/util.rb +8 -0
- data/lib/relaton/itu.rb +33 -0
- data/lib/relaton/jis/bibdata.rb +8 -0
- data/lib/relaton/jis/bibitem.rb +8 -0
- data/lib/relaton/jis/bibliography.rb +75 -0
- data/lib/relaton/jis/data_fetcher.rb +181 -0
- data/lib/relaton/jis/docidentifier.rb +21 -0
- data/lib/relaton/jis/doctype.rb +9 -0
- data/lib/relaton/jis/ext.rb +13 -0
- data/lib/relaton/jis/hit.rb +93 -0
- data/lib/relaton/jis/hit_collection.rb +127 -0
- data/lib/relaton/jis/item.rb +22 -0
- data/lib/relaton/jis/item_base.rb +26 -0
- data/lib/relaton/jis/item_data.rb +8 -0
- data/lib/relaton/jis/processor.rb +55 -0
- data/lib/relaton/jis/relation.rb +11 -0
- data/lib/relaton/jis/scraper.rb +232 -0
- data/lib/relaton/jis/structured_identifier.rb +13 -0
- data/lib/relaton/jis/util.rb +8 -0
- data/lib/relaton/jis.rb +33 -0
- data/lib/relaton/logger/channels/gh_issue.rb +78 -0
- data/lib/relaton/logger/config.rb +34 -0
- data/lib/relaton/logger/formatter_json.rb +8 -0
- data/lib/relaton/logger/formatter_string.rb +12 -0
- data/lib/relaton/logger/log.rb +64 -0
- data/lib/relaton/logger/log_device.rb +27 -0
- data/lib/relaton/logger/pool.rb +24 -0
- data/lib/relaton/logger.rb +18 -0
- data/lib/relaton/nist/bibdata.rb +8 -0
- data/lib/relaton/nist/bibitem.rb +8 -0
- data/lib/relaton/nist/bibliography.rb +191 -0
- data/lib/relaton/nist/comment_period.rb +15 -0
- data/lib/relaton/nist/data_fetcher.rb +84 -0
- data/lib/relaton/nist/date.rb +7 -0
- data/lib/relaton/nist/doctype.rb +7 -0
- data/lib/relaton/nist/ext.rb +16 -0
- data/lib/relaton/nist/hit.rb +18 -0
- data/lib/relaton/nist/hit_collection.rb +362 -0
- data/lib/relaton/nist/item.rb +17 -0
- data/lib/relaton/nist/item_data.rb +6 -0
- data/lib/relaton/nist/mods_parser.rb +276 -0
- data/lib/relaton/nist/processor.rb +68 -0
- data/lib/relaton/nist/pubs_export.rb +69 -0
- data/lib/relaton/nist/relation.rb +7 -0
- data/lib/relaton/nist/scraper.rb +290 -0
- data/lib/relaton/nist/series.yaml +49 -0
- data/lib/relaton/nist/util.rb +8 -0
- data/lib/relaton/nist.rb +34 -0
- data/lib/relaton/oasis/bibdata.rb +8 -0
- data/lib/relaton/oasis/bibitem.rb +8 -0
- data/lib/relaton/oasis/bibliography.rb +60 -0
- data/lib/relaton/oasis/browser_agent.rb +71 -0
- data/lib/relaton/oasis/data_fetcher.rb +94 -0
- data/lib/relaton/oasis/data_parser.rb +305 -0
- data/lib/relaton/oasis/data_parser_utils.rb +296 -0
- data/lib/relaton/oasis/data_part_parser.rb +239 -0
- data/lib/relaton/oasis/doctype.rb +7 -0
- data/lib/relaton/oasis/ext.rb +19 -0
- data/lib/relaton/oasis/item.rb +11 -0
- data/lib/relaton/oasis/item_data.rb +6 -0
- data/lib/relaton/oasis/processor.rb +68 -0
- data/lib/relaton/oasis/util.rb +8 -0
- data/lib/relaton/oasis.rb +28 -0
- data/lib/relaton/ogc/bibdata.rb +8 -0
- data/lib/relaton/ogc/bibitem.rb +8 -0
- data/lib/relaton/ogc/bibliography.rb +64 -0
- data/lib/relaton/ogc/data_fetcher.rb +110 -0
- data/lib/relaton/ogc/docidentifier.rb +6 -0
- data/lib/relaton/ogc/doctype.rb +12 -0
- data/lib/relaton/ogc/ext.rb +15 -0
- data/lib/relaton/ogc/hit.rb +18 -0
- data/lib/relaton/ogc/hit_collection.rb +36 -0
- data/lib/relaton/ogc/item.rb +13 -0
- data/lib/relaton/ogc/item_data.rb +6 -0
- data/lib/relaton/ogc/processor.rb +58 -0
- data/lib/relaton/ogc/scraper.rb +225 -0
- data/lib/relaton/ogc/util.rb +8 -0
- data/lib/relaton/ogc.rb +26 -0
- data/lib/relaton/oiml/bibdata.rb +8 -0
- data/lib/relaton/oiml/bibitem.rb +8 -0
- data/lib/relaton/oiml/bibliography.rb +94 -0
- data/lib/relaton/oiml/docidentifier.rb +33 -0
- data/lib/relaton/oiml/doctype.rb +13 -0
- data/lib/relaton/oiml/ext.rb +42 -0
- data/lib/relaton/oiml/item.rb +20 -0
- data/lib/relaton/oiml/item_base.rb +18 -0
- data/lib/relaton/oiml/item_data.rb +6 -0
- data/lib/relaton/oiml/processor.rb +54 -0
- data/lib/relaton/oiml/relation.rb +9 -0
- data/lib/relaton/oiml/util.rb +8 -0
- data/lib/relaton/oiml.rb +24 -0
- data/lib/relaton/omg/bibdata.rb +8 -0
- data/lib/relaton/omg/bibitem.rb +8 -0
- data/lib/relaton/omg/bibliography.rb +31 -0
- data/lib/relaton/omg/ext.rb +7 -0
- data/lib/relaton/omg/item.rb +8 -0
- data/lib/relaton/omg/item_data.rb +6 -0
- data/lib/relaton/omg/processor.rb +34 -0
- data/lib/relaton/omg/scraper.rb +141 -0
- data/lib/relaton/omg/util.rb +8 -0
- data/lib/relaton/omg.rb +24 -0
- data/lib/relaton/plateau/bibdata.rb +8 -0
- data/lib/relaton/plateau/bibitem.rb +8 -0
- data/lib/relaton/plateau/bibliography.rb +24 -0
- data/lib/relaton/plateau/data_fetcher.rb +153 -0
- data/lib/relaton/plateau/doctype.rb +7 -0
- data/lib/relaton/plateau/ext.rb +23 -0
- data/lib/relaton/plateau/handbook_parser.rb +95 -0
- data/lib/relaton/plateau/hit.rb +13 -0
- data/lib/relaton/plateau/hit_collection.rb +59 -0
- data/lib/relaton/plateau/item.rb +12 -0
- data/lib/relaton/plateau/item_data.rb +6 -0
- data/lib/relaton/plateau/parser.rb +101 -0
- data/lib/relaton/plateau/processor.rb +49 -0
- data/lib/relaton/plateau/technical_report_parser.rb +91 -0
- data/lib/relaton/plateau/util.rb +8 -0
- data/lib/relaton/plateau.rb +28 -0
- data/lib/relaton/un/bibdata.rb +8 -0
- data/lib/relaton/un/bibitem.rb +8 -0
- data/lib/relaton/un/bibliography.rb +48 -0
- data/lib/relaton/un/doctype.rb +10 -0
- data/lib/relaton/un/ext.rb +30 -0
- data/lib/relaton/un/hit.rb +56 -0
- data/lib/relaton/un/hit_collection.rb +61 -0
- data/lib/relaton/un/item.rb +11 -0
- data/lib/relaton/un/item_data.rb +6 -0
- data/lib/relaton/un/parser.rb +108 -0
- data/lib/relaton/un/processor.rb +38 -0
- data/lib/relaton/un/session.rb +25 -0
- data/lib/relaton/un/token_generator.rb +105 -0
- data/lib/relaton/un/util.rb +8 -0
- data/lib/relaton/un/wasm/decoder.rb +434 -0
- data/lib/relaton/un/wasm/instance.rb +101 -0
- data/lib/relaton/un/wasm/interpreter.rb +613 -0
- data/lib/relaton/un/wasm/memory.rb +112 -0
- data/lib/relaton/un/wasm/module.rb +47 -0
- data/lib/relaton/un/wasm.rb +17 -0
- data/lib/relaton/un/wasm_v_bg.wasm +0 -0
- data/lib/relaton/un.rb +28 -0
- data/lib/relaton/version.rb +1 -1
- data/lib/relaton/w3c/bibdata.rb +8 -0
- data/lib/relaton/w3c/bibitem.rb +8 -0
- data/lib/relaton/w3c/bibliography.rb +54 -0
- data/lib/relaton/w3c/data_fetcher.rb +309 -0
- data/lib/relaton/w3c/data_parser.rb +379 -0
- data/lib/relaton/w3c/doctype.rb +7 -0
- data/lib/relaton/w3c/ext.rb +11 -0
- data/lib/relaton/w3c/item.rb +12 -0
- data/lib/relaton/w3c/item_data.rb +6 -0
- data/lib/relaton/w3c/processor.rb +49 -0
- data/lib/relaton/w3c/pubid.rb +73 -0
- data/lib/relaton/w3c/safe_realize.rb +59 -0
- data/lib/relaton/w3c/util.rb +8 -0
- data/lib/relaton/w3c.rb +25 -0
- data/lib/relaton/xsf/bibdata.rb +8 -0
- data/lib/relaton/xsf/bibitem.rb +8 -0
- data/lib/relaton/xsf/bibliography.rb +24 -0
- data/lib/relaton/xsf/data_fetcher.rb +56 -0
- data/lib/relaton/xsf/hit.rb +17 -0
- data/lib/relaton/xsf/hit_collection.rb +24 -0
- data/lib/relaton/xsf/item.rb +7 -0
- data/lib/relaton/xsf/item_data.rb +6 -0
- data/lib/relaton/xsf/processor.rb +50 -0
- data/lib/relaton/xsf/util.rb +9 -0
- data/lib/relaton/xsf.rb +30 -0
- data/lib/relaton-core.rb +1 -0
- data/lib/relaton.rb +44 -9
- metadata +708 -150
- data/.github/workflows/rake.yml +0 -14
- data/.github/workflows/release.yml +0 -24
- data/.github/workflows/rubocop.yml +0 -48
- data/.gitignore +0 -12
- data/.rspec +0 -3
- data/.rubocop.yml +0 -12
- data/CLAUDE.md +0 -70
- data/Gemfile +0 -21
- data/Rakefile +0 -6
- data/docs/CHANGELOG.adoc +0 -16
- data/docs/VERSIONING_POLICY.adoc +0 -38
- data/docs/navigation.adoc +0 -6
- data/lib/relaton/config.rb +0 -24
- data/lib/relaton/db_cache.rb +0 -230
- data/lib/relaton/registry.rb +0 -118
- data/lib/relaton/util.rb +0 -7
- data/lib/relaton/workers_pool.rb +0 -21
- data/relaton.gemspec +0 -61
- data/spec/relaton/config_spec.rb +0 -10
- data/spec/relaton/db_cache_spec.rb +0 -51
- data/spec/relaton/db_spec.rb +0 -556
- data/spec/relaton/registry_spec.rb +0 -178
- data/spec/relaton/util_spec.rb +0 -3
- data/spec/relaton_spec.rb +0 -725
- data/spec/spec_helper.rb +0 -45
- data/spec/support/gb_t_20223_2006.xml +0 -33
- data/spec/support/iso_111111119115_1.xml +0 -0
- data/spec/support/iso_19115_1.xml +0 -115
- data/spec/support/iso_19115_2.xml +0 -95
- data/spec/support/rfc_8341.xml +0 -46
- data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +0 -12720
- data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
- data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -143
- data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -199
- data/spec/vcr_cassetes/cie_001_1980.yml +0 -401
- data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1513
- data/spec/vcr_cassetes/doi_10_6028_nist_ir_8245.yml +0 -86
- data/spec/vcr_cassetes/ecma_6.yml +0 -112
- data/spec/vcr_cassetes/en_10160_1999.yml +0 -13624
- data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -733
- data/spec/vcr_cassetes/ieee_528_2019.yml +0 -2786
- data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
- data/spec/vcr_cassetes/iso_19115_1.yml +0 -13177
- data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -369
- data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -13177
- data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -229
- data/spec/vcr_cassetes/iso_19133_2005.yml +0 -148
- data/spec/vcr_cassetes/iso_combined_applied.yml +0 -364
- data/spec/vcr_cassetes/iso_combined_included.yml +0 -364
- data/spec/vcr_cassetes/iso_dis.yml +0 -157
- data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -371
- data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
- data/spec/vcr_cassetes/rfc_8341.yml +0 -1272
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
require "nokogiri"
|
|
2
|
+
require_relative "id_parser"
|
|
3
|
+
|
|
4
|
+
module Relaton::Bipm
|
|
5
|
+
class SiBrochureParser
|
|
6
|
+
#
|
|
7
|
+
# Create new parser
|
|
8
|
+
#
|
|
9
|
+
# @param [Relaton::Bipm::DataFetcher] data_fetcher data fetcher
|
|
10
|
+
#
|
|
11
|
+
def initialize(data_fetcher)
|
|
12
|
+
@data_fetcher = WeakRef.new data_fetcher
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
# Parse documents from SI brochure dataset and write thems to YAML files
|
|
17
|
+
#
|
|
18
|
+
# @param [Relaton::Bipm::DataFetcher] data_fetcher data fetcher
|
|
19
|
+
#
|
|
20
|
+
def self.parse(data_fetcher)
|
|
21
|
+
new(data_fetcher).parse
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# Parse SI brochure and write them to YAML files
|
|
26
|
+
#
|
|
27
|
+
def parse # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
28
|
+
# metanorma site generate writes per-document outputs into a subdirectory
|
|
29
|
+
# named after the source path (e.g. _site/documents/si-brochure/3.01/
|
|
30
|
+
# si-brochure-en.rxl). The legacy top-level *.rxl glob is kept for
|
|
31
|
+
# backwards compatibility with any older flow that flattened outputs.
|
|
32
|
+
si_brochure_rxls.each do |f|
|
|
33
|
+
puts "Parsing #{f}"
|
|
34
|
+
xml = File.read(f, encoding: "UTF-8")
|
|
35
|
+
xml = xml.force_encoding("UTF-8") if xml.encoding != Encoding::UTF_8
|
|
36
|
+
item1 = Bibdata.from_xml(xml)
|
|
37
|
+
# Workaround for relaton-bib Version#content bug: whitespace between
|
|
38
|
+
# legacy <revision-date>/<draft> children gets captured as @content,
|
|
39
|
+
# blocking the legacy-fold path. Clear it so the getter recomputes.
|
|
40
|
+
item1.version.each do |v|
|
|
41
|
+
c = v.instance_variable_get(:@content)
|
|
42
|
+
next unless c.is_a?(Array) || (c.is_a?(String) && c.strip.empty?)
|
|
43
|
+
v.instance_variable_set(:@content, nil)
|
|
44
|
+
end
|
|
45
|
+
@data_fetcher.errors[:si_brochure_title] &&= item1.title.empty?
|
|
46
|
+
@data_fetcher.errors[:si_brochure_docidentifier] &&= item1.docidentifier.empty?
|
|
47
|
+
unless has_committee_contributor?(item1)
|
|
48
|
+
contribs = extract_editorialgroup(xml)
|
|
49
|
+
contribs.each { |c| item1.contributor << c }
|
|
50
|
+
end
|
|
51
|
+
fix_si_brochure_id item1
|
|
52
|
+
basename = File.join @data_fetcher.output, File.basename(f).sub(/(?:-(?:en|fr))?\.rxl$/, "")
|
|
53
|
+
outfile = "#{basename}.#{@data_fetcher.ext}"
|
|
54
|
+
key = item1.docnumber || basename
|
|
55
|
+
@data_fetcher.index.add_or_update Id.new.parse(key).to_hash, outfile
|
|
56
|
+
item =
|
|
57
|
+
if File.exist? outfile
|
|
58
|
+
warn_duplicate = false
|
|
59
|
+
item2 = Item.from_yaml File.read(outfile, encoding: "UTF-8")
|
|
60
|
+
fix_si_brochure_id item2
|
|
61
|
+
hash1 = YAML.safe_load item1.to_yaml
|
|
62
|
+
hash2 = YAML.safe_load item2.to_yaml
|
|
63
|
+
Item.from_yaml deep_merge(hash1, hash2).to_yaml
|
|
64
|
+
else
|
|
65
|
+
warn_duplicate = true
|
|
66
|
+
item1
|
|
67
|
+
end
|
|
68
|
+
@data_fetcher.write_file outfile, item, warn_duplicate: warn_duplicate
|
|
69
|
+
puts "Saved to #{outfile}"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
#
|
|
74
|
+
# @return [Array<String>] paths to SI Brochure RXL files. Looks at the
|
|
75
|
+
# legacy flat layout first, then the metanorma-cli subdirectory layout
|
|
76
|
+
# (`<source_path_without_'sources'>/<doc>.rxl`) used by current
|
|
77
|
+
# `metanorma site generate` output.
|
|
78
|
+
#
|
|
79
|
+
def si_brochure_rxls
|
|
80
|
+
flat = Dir["bipm-si-brochure/_site/documents/*.rxl"]
|
|
81
|
+
return flat if flat.any?
|
|
82
|
+
|
|
83
|
+
Dir["bipm-si-brochure/_site/documents/**/si-brochure-{en,fr}.rxl"]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# Update ID of SI brochure
|
|
88
|
+
#
|
|
89
|
+
# @param [ItemData] item bibliographic item
|
|
90
|
+
#
|
|
91
|
+
# @return [void]
|
|
92
|
+
#
|
|
93
|
+
def fix_si_brochure_id(item)
|
|
94
|
+
# isbn = hash["docid"].detect { |id| id["type"] == "ISBN" }
|
|
95
|
+
# num = isbn && isbn["id"] == "978-92-822-2272-0" ? "SI Brochure" : "SI Brochure, Appendix 4"
|
|
96
|
+
|
|
97
|
+
update_id item
|
|
98
|
+
|
|
99
|
+
prid = primary_id item
|
|
100
|
+
if item.docnumber
|
|
101
|
+
item.docnumber.sub!(/^Brochure(?:\sConcise|\sFAQ)?$/i, prid.sub(/^BIPM\s/, ""))
|
|
102
|
+
else
|
|
103
|
+
item.docnumber = prid.sub(/^BIPM\s/, "")
|
|
104
|
+
end
|
|
105
|
+
item.id = prid.gsub(/[,\s-]/, "")
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def update_id(item)
|
|
109
|
+
item.docidentifier.each do |id|
|
|
110
|
+
next unless id.type == "BIPM" && id.content&.match?(/BIPM Brochure/i)
|
|
111
|
+
|
|
112
|
+
id.primary = true
|
|
113
|
+
id.content.sub!(/(?<=^BIPM\s)(Brochure)/i, "SI \\1")
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def primary_id(item)
|
|
118
|
+
item.docidentifier.detect do |id|
|
|
119
|
+
id.primary && (id.language == "en" || id.language.nil?)
|
|
120
|
+
end.content
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def has_committee_contributor?(item)
|
|
124
|
+
item.contributor.any? do |c|
|
|
125
|
+
c.role.any? { |r| r.description.any? { |d| d.content == "committee" } }
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def extract_editorialgroup(xml)
|
|
130
|
+
doc = Nokogiri::XML(xml)
|
|
131
|
+
doc.xpath("//editorialgroup/committee").map do |committee|
|
|
132
|
+
acronym = committee["acronym"]
|
|
133
|
+
names = committee.xpath("variant").map do |v|
|
|
134
|
+
Relaton::Bib::TypedLocalizedString.new(
|
|
135
|
+
content: v.text, language: v["language"], script: v["script"],
|
|
136
|
+
)
|
|
137
|
+
end
|
|
138
|
+
subdiv = Relaton::Bib::Subdivision.new(
|
|
139
|
+
type: "committee", name: names,
|
|
140
|
+
abbreviation: Relaton::Bib::LocalizedString.new(content: acronym),
|
|
141
|
+
)
|
|
142
|
+
bipm_name = [Relaton::Bib::TypedLocalizedString.new(content: acronym)]
|
|
143
|
+
org = Relaton::Bib::Organization.new(name: bipm_name, subdivision: [subdiv])
|
|
144
|
+
desc = Relaton::Bib::LocalizedMarkedUpString.new(content: "committee")
|
|
145
|
+
role = Relaton::Bib::Contributor::Role.new(type: "author", description: [desc])
|
|
146
|
+
Relaton::Bib::Contributor.new(organization: org, role: [role])
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
#
|
|
151
|
+
# Deep merge two hashes
|
|
152
|
+
#
|
|
153
|
+
# @param [Hash] hash1
|
|
154
|
+
# @param [Hash] hash2
|
|
155
|
+
#
|
|
156
|
+
# @return [Hash] Merged hash
|
|
157
|
+
#
|
|
158
|
+
def deep_merge(hash1, hash2) # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
|
159
|
+
hash1.merge(hash2) do |_, oldval, newval|
|
|
160
|
+
if oldval.is_a?(Hash) && newval.is_a?(Hash)
|
|
161
|
+
deep_merge(oldval, newval)
|
|
162
|
+
elsif oldval.is_a?(Array) && newval.is_a?(Array)
|
|
163
|
+
(oldval + newval).uniq { |i| downcase_all i }
|
|
164
|
+
else
|
|
165
|
+
newval || oldval
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
#
|
|
171
|
+
# Downcase all values in hash or array
|
|
172
|
+
#
|
|
173
|
+
# @param [Array, Hash, String] content hash, array or string
|
|
174
|
+
#
|
|
175
|
+
# @return [Array, Hash, String] hash, array or string with downcased values
|
|
176
|
+
#
|
|
177
|
+
def downcase_all(content)
|
|
178
|
+
case content
|
|
179
|
+
when Hash then content.transform_values { |v| downcase_all v }
|
|
180
|
+
when Array then content.map { |v| downcase_all v }
|
|
181
|
+
when String then content.downcase
|
|
182
|
+
else content
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
data/lib/relaton/bipm.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require "zip"
|
|
2
|
+
require "fileutils"
|
|
3
|
+
require "parslet"
|
|
4
|
+
require "relaton/bib"
|
|
5
|
+
require "relaton/index"
|
|
6
|
+
require "relaton/core"
|
|
7
|
+
require_relative "version"
|
|
8
|
+
require_relative "bipm/util"
|
|
9
|
+
require_relative "bipm/item_data"
|
|
10
|
+
require_relative "bipm/model/item"
|
|
11
|
+
require_relative "bipm/model/bibitem"
|
|
12
|
+
require_relative "bipm/model/bibdata"
|
|
13
|
+
require_relative "bipm/bibliography"
|
|
14
|
+
|
|
15
|
+
module Relaton
|
|
16
|
+
module Bipm
|
|
17
|
+
class Error < StandardError; end
|
|
18
|
+
|
|
19
|
+
INDEXFILE = "index-v1.yaml".freeze
|
|
20
|
+
|
|
21
|
+
# Returns hash of gems versions used to generate the data model.
|
|
22
|
+
# @return [String]
|
|
23
|
+
def grammar_hash
|
|
24
|
+
# gem_path = File.expand_path "..", __dir__
|
|
25
|
+
# grammars_path = File.join gem_path, "grammars", "*"
|
|
26
|
+
# grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
|
|
27
|
+
Digest::MD5.hexdigest Relaton::VERSION # grammars
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
extend self
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton::Bsi
|
|
4
|
+
# Class methods for search ISO standards.
|
|
5
|
+
class Bibliography
|
|
6
|
+
class << self
|
|
7
|
+
# @param text [String]
|
|
8
|
+
# @return [Relaton::Bsi::HitCollection]
|
|
9
|
+
def search(text, year = nil)
|
|
10
|
+
code = text.sub(/^BSI\s/, "").sub(/ExComm|Expert commentary/, "Ex")
|
|
11
|
+
HitCollection.search(code, year)
|
|
12
|
+
rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET,
|
|
13
|
+
EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
|
|
14
|
+
Net::ProtocolError, Algolia::AlgoliaUnreachableHostError => e
|
|
15
|
+
raise Relaton::RequestError, e.message
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# @param code [String] the BSI standard Code to look up
|
|
20
|
+
# @param year [String] the year the standard was published (optional)
|
|
21
|
+
# @param opts [Hash] options
|
|
22
|
+
# @option opts [Boolean] :all_parts if all-parts reference is required
|
|
23
|
+
# @option opts [Boolean] :no_year if last published document is required
|
|
24
|
+
#
|
|
25
|
+
# @return [String] Relaton XML serialisation of reference
|
|
26
|
+
def get(code, year = nil, opts = {})
|
|
27
|
+
# y = code.split(":")[1]
|
|
28
|
+
year ||= code_parts(code)[:year]
|
|
29
|
+
ret = bib_get(code, year, opts)
|
|
30
|
+
return nil if ret.nil?
|
|
31
|
+
|
|
32
|
+
ret = ret.to_most_recent_reference unless year || opts[:keep_year]
|
|
33
|
+
# ret = ret.to_all_parts if opts[:all_parts]
|
|
34
|
+
ret
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Destruct code to its parts.
|
|
39
|
+
#
|
|
40
|
+
# @param [String] code document identifier
|
|
41
|
+
#
|
|
42
|
+
# @return [MatchData] parts of the code
|
|
43
|
+
#
|
|
44
|
+
def code_parts(code)
|
|
45
|
+
%r{
|
|
46
|
+
^(?:BSI\s)?(?<code>(?:[A-Z]+\s)*[^:\s+]+(?:\s\d+)?)
|
|
47
|
+
(?::(?<year>\d{4})(?:-\d{2})?)?
|
|
48
|
+
(?:\+(?<a>[^:\s]+)(?::(?<y>\d{4}))?)?
|
|
49
|
+
(?:\s(?<rest>.+))?
|
|
50
|
+
}x.match code
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def fetch_ref_err(code, year, missed_years) # rubocop:disable Metrics/MethodLength
|
|
56
|
+
# y = code_parts(code)[:year]
|
|
57
|
+
# id = year && !y ? "#{code}:#{year}" : code
|
|
58
|
+
# Util.warn "WARNING: no match found online for `#{id}`. " \
|
|
59
|
+
# "The code must be exactly like it is on the standards website."
|
|
60
|
+
unless missed_years.empty?
|
|
61
|
+
Util.info "There was no match for `#{year}`, though there " \
|
|
62
|
+
"were matches found for `#{missed_years.join('`, `')}`."
|
|
63
|
+
end
|
|
64
|
+
# if /\d-\d/.match? code
|
|
65
|
+
# warn "[relaton-bsi] The provided document part may not exist, or "\
|
|
66
|
+
# "the document may no longer be published in parts."
|
|
67
|
+
# else
|
|
68
|
+
# warn "[relaton-bsi] If you wanted to cite all document parts for "\
|
|
69
|
+
# "the reference, use \"#{code} (all parts)\".\nIf the document "\
|
|
70
|
+
# "is not a standard, use its document type abbreviation (TS, TR, "\
|
|
71
|
+
# "PAS, Guide)."
|
|
72
|
+
# end
|
|
73
|
+
nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
#
|
|
77
|
+
# Search for a BSI standard.
|
|
78
|
+
#
|
|
79
|
+
# @param [String] code the BSI standard Code to look up
|
|
80
|
+
#
|
|
81
|
+
# @return [Relaton::Bsi::HitCollection] a collection of hits
|
|
82
|
+
#
|
|
83
|
+
def search_filter(code)
|
|
84
|
+
cp = code_parts code
|
|
85
|
+
Util.info "Fetching from shop.bsigroup.com ...", key: code
|
|
86
|
+
unless cp
|
|
87
|
+
Util.info "Could not parse the reference", key: code
|
|
88
|
+
return []
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
search(code).filter_hits!(cp)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Sort through the results from Isobib, fetching them three at a time,
|
|
95
|
+
# and return the first result that matches the code,
|
|
96
|
+
# matches the year (if provided), and which # has a title (amendments do not).
|
|
97
|
+
# Only expects the first page of results to be populated.
|
|
98
|
+
# Does not match corrigenda etc (e.g. ISO 3166-1:2006/Cor 1:2007)
|
|
99
|
+
# If no match, returns any years which caused mismatch, for error reporting
|
|
100
|
+
def results_filter(result, year)
|
|
101
|
+
missed_years = []
|
|
102
|
+
result.each do |r|
|
|
103
|
+
pyear = code_parts(r.hit[:code])[:year]
|
|
104
|
+
return { ret: r.item } if (!year || year == pyear) && r.item
|
|
105
|
+
|
|
106
|
+
missed_years << pyear
|
|
107
|
+
end
|
|
108
|
+
{ years: missed_years }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def bib_get(code, year, _opts)
|
|
112
|
+
result = search_filter(code) || return
|
|
113
|
+
ret = results_filter(result, year)
|
|
114
|
+
if ret[:ret]
|
|
115
|
+
Util.info "Found: `#{ret[:ret].docidentifier.first&.content}`", key: code
|
|
116
|
+
ret[:ret]
|
|
117
|
+
else
|
|
118
|
+
Util.info "Not found", key: code
|
|
119
|
+
fetch_ref_err(code, year, ret[:years])
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "algolia"
|
|
4
|
+
require_relative "hit"
|
|
5
|
+
|
|
6
|
+
module Relaton::Bsi
|
|
7
|
+
# Page of hit collection.
|
|
8
|
+
class HitCollection < Relaton::Core::HitCollection
|
|
9
|
+
DOMAIN = "https://shop.bsigroup.com"
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
# Initialize a new HitCollection object and perform search.
|
|
13
|
+
#
|
|
14
|
+
# @param ref [String] reference
|
|
15
|
+
# @param year [String] year
|
|
16
|
+
#
|
|
17
|
+
# @return [Relaton::Bsi::HitCollection] hit collection
|
|
18
|
+
#
|
|
19
|
+
def self.search(ref, year = nil)
|
|
20
|
+
new(ref, year).search
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Perform search.
|
|
25
|
+
# @return [self] hit collection
|
|
26
|
+
def search
|
|
27
|
+
resp = algolia_index.search ref # , facetFilters: "product_type:standard"
|
|
28
|
+
@array = create_hits resp[:hits]
|
|
29
|
+
self
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# Algolia index.
|
|
34
|
+
#
|
|
35
|
+
# @return [Algolia::Search::Index] Algolia index
|
|
36
|
+
#
|
|
37
|
+
|
|
38
|
+
def algolia_index
|
|
39
|
+
@algolia_index ||= begin
|
|
40
|
+
config = Algolia::Search::Config.new(
|
|
41
|
+
application_id: "575YE157G9",
|
|
42
|
+
api_key: "a057b4e74099445df2eddb7940828a10",
|
|
43
|
+
)
|
|
44
|
+
client = Algolia::Search::Client.new config, logger: ::Logger.new($stderr)
|
|
45
|
+
client.init_index "shopify_products"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Filter the search results for a BSI standard.
|
|
51
|
+
#
|
|
52
|
+
# @param [MatchData] code_parts parts of document identifier
|
|
53
|
+
#
|
|
54
|
+
# @return [self] filtered search results
|
|
55
|
+
#
|
|
56
|
+
def filter_hits!(code_parts)
|
|
57
|
+
hits = filter code_parts
|
|
58
|
+
hits = filter code_parts, skip_rest: true if hits.empty?
|
|
59
|
+
hits = filter code_parts, drop_amd: true if hits.empty?
|
|
60
|
+
@array = hits
|
|
61
|
+
self
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Create hits from search results.
|
|
68
|
+
#
|
|
69
|
+
# @param hits [Array<Hash>] search results
|
|
70
|
+
#
|
|
71
|
+
# @return [Array<Relaton::Bsi::Hit>] hits
|
|
72
|
+
#
|
|
73
|
+
def create_hits(hits) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
74
|
+
hits.each_with_object([]) do |h, obj|
|
|
75
|
+
next unless h[:meta][:global][:publishedDate]
|
|
76
|
+
|
|
77
|
+
code = h[:meta][:global][:primaryDesignator]
|
|
78
|
+
code = code.is_a?(Array) ? code.first : code
|
|
79
|
+
code.sub!(/\s?(?:LOOSELEAF|\(A5 LAMINATED\)|-\s?TC$)/, "")
|
|
80
|
+
obj << Hit.new(
|
|
81
|
+
{
|
|
82
|
+
code: code,
|
|
83
|
+
title: h[:title],
|
|
84
|
+
url: h[:handle],
|
|
85
|
+
date: h[:meta][:global][:publishedDate],
|
|
86
|
+
publisher: h[:meta][:global][:publisher],
|
|
87
|
+
status: h[:meta][:global][:status],
|
|
88
|
+
ics: h[:meta][:global][:icsCodesAlgoliaStringArray],
|
|
89
|
+
doctype: h[:product_type],
|
|
90
|
+
}, self
|
|
91
|
+
)
|
|
92
|
+
end.sort_by { |h| h.hit[:date] }.reverse
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
#
|
|
96
|
+
# Select hits that match the document identifier.
|
|
97
|
+
#
|
|
98
|
+
# @param [MatchData] code_parts parts of document identifier
|
|
99
|
+
# @param [Boolean] drop_amd drop amendments and corrigendums
|
|
100
|
+
# @param [Boolean] skip_rest skip rest suffix of document identifier
|
|
101
|
+
#
|
|
102
|
+
def filter(code_parts, drop_amd: false, skip_rest: false) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
103
|
+
@array.select do |i|
|
|
104
|
+
code = drop_amd ? i.hit[:code].sub(/\+[AC]\d+.*$/, "") : i.hit[:code]
|
|
105
|
+
cp = Bibliography.code_parts code
|
|
106
|
+
match = cp[:code] == code_parts[:code] && cp[:a] == code_parts[:a] &&
|
|
107
|
+
(!code_parts[:y] || cp[:y] == code_parts[:y]) &&
|
|
108
|
+
(skip_rest || cp[:rest] == code_parts[:rest])
|
|
109
|
+
i.hit[:code] = code if drop_amd && match
|
|
110
|
+
match
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Bsi
|
|
3
|
+
class ItemData < Iso::ItemData
|
|
4
|
+
def create_id(without_date: false)
|
|
5
|
+
docid = docidentifier.find(&:primary) || docidentifier.first
|
|
6
|
+
return unless docid
|
|
7
|
+
|
|
8
|
+
id_content = without_date ? docid.content.sub(/:\d{4}$/, "") : docid.content
|
|
9
|
+
self.id = id_content.gsub(/\W+/, "")
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Bsi
|
|
3
|
+
class Doctype < Bib::Doctype
|
|
4
|
+
TYPES = %w[
|
|
5
|
+
british-standard draft-for-development published-document privately-subscribed-standard
|
|
6
|
+
publicly-available-specification flex-standard international-standard technical-specification
|
|
7
|
+
technical-report guide international-workshop-agreement industry-technical-agreement
|
|
8
|
+
standard european-workshop-agreement fast-track-standard expert-commentary
|
|
9
|
+
].freeze
|
|
10
|
+
|
|
11
|
+
attribute :content, :string, values: TYPES
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Bsi
|
|
5
|
+
class Ext < Bib::Ext
|
|
6
|
+
attribute :doctype, Doctype
|
|
7
|
+
attribute :ics, Bib::ICS, collection: true
|
|
8
|
+
attribute :structuredidentifier, Iso::StructuredIdentifier, collection: true, initialize_empty: true
|
|
9
|
+
attribute :stagename, Iso::Stagename
|
|
10
|
+
|
|
11
|
+
xml { map_element "stagename", to: :stagename }
|
|
12
|
+
key_value { map_element "stagename", to: :stagename }
|
|
13
|
+
|
|
14
|
+
def get_schema_version = Relaton.schema_versions["relaton-model-bsi"]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require_relative "docidentifier"
|
|
2
|
+
require_relative "ext"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Bsi
|
|
6
|
+
class Relation < Bib::Relation
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class Item < Bib::Item
|
|
10
|
+
model ItemData
|
|
11
|
+
|
|
12
|
+
attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
|
|
13
|
+
attribute :relation, Relation, collection: true, initialize_empty: true
|
|
14
|
+
attribute :ext, Ext
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative "docidentifier"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Bsi
|
|
5
|
+
class ItemBase < Lutaml::Model::Serializable
|
|
6
|
+
include Bib::NamespaceHelper
|
|
7
|
+
|
|
8
|
+
attr_accessor :type
|
|
9
|
+
|
|
10
|
+
model ItemData
|
|
11
|
+
|
|
12
|
+
instance_exec(&Bib::ItemShared::ATTRIBUTES)
|
|
13
|
+
attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
|
|
14
|
+
attribute :relation, Relation, collection: true, initialize_empty: true
|
|
15
|
+
|
|
16
|
+
xml do
|
|
17
|
+
map_attribute "type", to: :type
|
|
18
|
+
instance_exec(&Bib::ItemShared::XML_BODY)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require "relaton/core/processor"
|
|
2
|
+
|
|
3
|
+
module Relaton::Bsi
|
|
4
|
+
class Processor < Relaton::Core::Processor
|
|
5
|
+
def initialize
|
|
6
|
+
@short = :relaton_bsi
|
|
7
|
+
@prefix = "BSI"
|
|
8
|
+
@defaultprefix = %r{^(BSI|BS|PD)\s}
|
|
9
|
+
@idtype = "BSI"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# @param code [String]
|
|
13
|
+
# @param date [String, nil] year
|
|
14
|
+
# @param opts [Hash]
|
|
15
|
+
# @return [Relaton::Bsi::ItemData]
|
|
16
|
+
def get(code, date, opts)
|
|
17
|
+
require_relative "../bsi"
|
|
18
|
+
::Relaton::Bsi::Bibliography.get(code, date, opts)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @param xml [String]
|
|
22
|
+
# @return [Relaton::Bsi::ItemData]
|
|
23
|
+
def from_xml(xml)
|
|
24
|
+
require_relative "../bsi"
|
|
25
|
+
::Relaton::Bsi::Item.from_xml xml
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @param hash [Hash]
|
|
29
|
+
# @return [Relaton::Bsi::ItemData]
|
|
30
|
+
def from_yaml(yaml)
|
|
31
|
+
require_relative "../bsi"
|
|
32
|
+
::Relaton::Bsi::Item.from_yaml yaml
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Returns hash of XML grammar
|
|
36
|
+
# @return [String]
|
|
37
|
+
def grammar_hash
|
|
38
|
+
require_relative "../bsi"
|
|
39
|
+
@grammar_hash ||= ::Relaton::Bsi.grammar_hash
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|