relaton 2.2.0.pre.alpha.1 → 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/registry.rb +4 -4
- data/lib/relaton/db.rb +0 -1
- 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 +43 -0
- metadata +673 -170
- 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/CLAUDE.md +0 -78
- data/Gemfile +0 -29
- 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/db/version.rb +0 -5
- data/relaton.gemspec +0 -72
- data/spec/relaton/config_spec.rb +0 -10
- data/spec/relaton/db_cache_spec.rb +0 -51
- data/spec/relaton/db_spec.rb +0 -567
- data/spec/relaton/registry_spec.rb +0 -178
- data/spec/relaton/util_spec.rb +0 -3
- data/spec/relaton_meta_spec.rb +0 -25
- data/spec/relaton_spec.rb +0 -800
- 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/api_relaton_org.yml +0 -121
- data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -140
- data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -202
- data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1505
- data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -729
- data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
- data/spec/vcr_cassetes/iso_19115_1.yml +0 -17334
- data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -322
- data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -17334
- data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -185
- data/spec/vcr_cassetes/iso_19133_2005.yml +0 -144
- data/spec/vcr_cassetes/iso_combined_applied.yml +0 -318
- data/spec/vcr_cassetes/iso_combined_included.yml +0 -318
- data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -374
- data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
- data/spec/vcr_cassetes/rfc_8341.yml +0 -1278
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "hit"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Iso
|
|
7
|
+
# Page of hit collection.
|
|
8
|
+
class HitCollection < Relaton::Core::HitCollection
|
|
9
|
+
ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-iso/v2/"
|
|
10
|
+
|
|
11
|
+
def opts
|
|
12
|
+
@opts ||= {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Maps the legacy 1.x exclude symbols to their pubid 2.x attribute
|
|
16
|
+
# names. The public excludings API still uses :year/:iteration for
|
|
17
|
+
# backwards compatibility with existing call sites and specs.
|
|
18
|
+
LEGACY_EXCLUDE_MAP = { year: :date, iteration: :stage_iteration }.freeze
|
|
19
|
+
private_constant :LEGACY_EXCLUDE_MAP
|
|
20
|
+
|
|
21
|
+
def translate_excludings(attrs)
|
|
22
|
+
out = attrs.map { |a| LEGACY_EXCLUDE_MAP[a] || a }
|
|
23
|
+
# Excluding :stage implies excluding :typed_stage too — the two
|
|
24
|
+
# carry overlapping data and their default-published values can
|
|
25
|
+
# differ in trivia (e.g. original_abbr "" vs nil), so leaving
|
|
26
|
+
# typed_stage in the comparison breaks otherwise-equal matches.
|
|
27
|
+
out << :typed_stage if out.include?(:stage) && !out.include?(:typed_stage)
|
|
28
|
+
out
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ref_pubid_no_year
|
|
32
|
+
@ref_pubid_no_year ||=
|
|
33
|
+
if ref.base_identifier
|
|
34
|
+
ref.dup.tap { |r| r.base_identifier = r.base_identifier.exclude(:date) }
|
|
35
|
+
else
|
|
36
|
+
ref.exclude(:date)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def ref_pubid_excluded
|
|
41
|
+
return @ref_pubid_excluded if defined? @ref_pubid_excluded
|
|
42
|
+
|
|
43
|
+
ref_excludings = translate_excludings(excludings) + [:all_parts]
|
|
44
|
+
@ref_pubid_excluded ||= ref_pubid_no_year.exclude(*ref_excludings)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Find all the entries that match the given reference.
|
|
49
|
+
#
|
|
50
|
+
# @return [Array<Relaton::Iso::Hit>] hits
|
|
51
|
+
#
|
|
52
|
+
def find # rubocop:disable Metrics/AbcSize
|
|
53
|
+
# Pass `ref` (a Pubid::Identifier, not a String) so the index can
|
|
54
|
+
# narrow candidates by number via binary search before applying the
|
|
55
|
+
# block, instead of a full O(n) scan of every row. Every row's `:id`
|
|
56
|
+
# is already a Pubid::Identifier — Relaton::Index deserialized it via
|
|
57
|
+
# the `pubid_class` passed in `#index` — so `pubid_match?` compares
|
|
58
|
+
# Pubid to Pubid directly.
|
|
59
|
+
@array = index.search(ref) do |row|
|
|
60
|
+
pubid_match?(row[:id])
|
|
61
|
+
end.map { |row| Hit.new row, self }
|
|
62
|
+
# An all-parts query drops :part from the match, so multiple rows can
|
|
63
|
+
# resolve to the same pubid; collapse them so each part appears once.
|
|
64
|
+
@array.uniq! { |h| h.pubid.to_s } if ref.root.all_parts
|
|
65
|
+
# Most-recent first (pubid string desc ~ year desc), then float
|
|
66
|
+
# published-stage ids above drafts. An undated query excludes :stage
|
|
67
|
+
# when matching, so a future draft (e.g. ISO/AWI) matches alongside the
|
|
68
|
+
# published edition; without this the draft would sort first lexically
|
|
69
|
+
# ("ISO/AWI …" > "ISO …") and be returned by fetch_doc's `first`. The
|
|
70
|
+
# index id carries no lifecycle status, so the parsed stage is the only
|
|
71
|
+
# signal available here. partition is stable, preserving the year order
|
|
72
|
+
# within each group.
|
|
73
|
+
@array.sort_by! { |h| h.pubid.to_s }.reverse!
|
|
74
|
+
published, drafts = @array.partition do |h|
|
|
75
|
+
h.pubid && default_published_stage?(h.pubid)
|
|
76
|
+
end
|
|
77
|
+
@array = published + drafts
|
|
78
|
+
self
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def pubid_match?(pubid)
|
|
82
|
+
match_excludings = translate_excludings(excludings) + [:all_parts]
|
|
83
|
+
match_excludings << :edition unless pubid.typed_stage&.abbr&.include?("DIR")
|
|
84
|
+
# Only the candidate is built via .create (from the index) and so may
|
|
85
|
+
# carry a compound part; `ref_pubid_no_year` is always a parsed pubid,
|
|
86
|
+
# already split, so it needs no normalization.
|
|
87
|
+
cand = normalize_compound_part(exclude_id_attrs(pubid, *match_excludings))
|
|
88
|
+
cand == exclude_id_attrs(ref_pubid_no_year, *match_excludings)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# @TODO TEMP WORKAROUND (pubid 2.x migration): the v1-generated index
|
|
92
|
+
# stores a compound part such as "5-1-3" in :part with no :subpart, and
|
|
93
|
+
# Relaton::Index builds each row via Pubid::Iso::Identifier.from_hash(id),
|
|
94
|
+
# which keeps it as part="5-1-3" subpart=nil. A parsed query splits it
|
|
95
|
+
# (part="5", subpart="1-3"), so the two never compare equal. Re-split the
|
|
96
|
+
# compound part on the first dash to mirror parse before comparing.
|
|
97
|
+
# `exclude` returns a fresh instance, so mutating this copy is safe.
|
|
98
|
+
# Remove once pubid create() splits compound parts itself.
|
|
99
|
+
def normalize_compound_part(pubid)
|
|
100
|
+
num = pubid.part&.value.to_s
|
|
101
|
+
return pubid unless pubid.subpart.nil? && num.include?("-")
|
|
102
|
+
|
|
103
|
+
head, tail = num.split("-", 2)
|
|
104
|
+
pubid.part = ::Pubid::Iso::Components::Code.new(value: head)
|
|
105
|
+
pubid.subpart = ::Pubid::Iso::Components::Code.new(value: tail)
|
|
106
|
+
pubid
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def exclude_id_attrs(pubid, *attrs)
|
|
110
|
+
xid = pubid.exclude(*attrs)
|
|
111
|
+
curr = xid
|
|
112
|
+
while curr.base_identifier
|
|
113
|
+
curr.base_identifier = curr.base_identifier.exclude(*attrs)
|
|
114
|
+
curr = curr.base_identifier
|
|
115
|
+
end
|
|
116
|
+
xid
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def excludings # rubocop:disable Metrics/AbcSize
|
|
120
|
+
return @excludings if defined? @excludings
|
|
121
|
+
|
|
122
|
+
excl_attrs = %i[year]
|
|
123
|
+
excl_attrs << :part if ref.root.part.nil? || ref.root.all_parts
|
|
124
|
+
if default_published_stage?(ref) || ref.root.all_parts
|
|
125
|
+
excl_attrs << :stage
|
|
126
|
+
excl_attrs << :iteration
|
|
127
|
+
end
|
|
128
|
+
@excludings = excl_attrs
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Pubid 2.x auto-populates a published-stage default on parse/.create,
|
|
132
|
+
# so ref.stage is never nil. Treat that default as "no stage specified".
|
|
133
|
+
def default_published_stage?(pubid)
|
|
134
|
+
return true if pubid.typed_stage.nil?
|
|
135
|
+
|
|
136
|
+
pubid.typed_stage.stage_code.to_s == "published"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def index
|
|
140
|
+
@index ||= Relaton::Index.find_or_create(
|
|
141
|
+
:iso,
|
|
142
|
+
url: "#{ENDPOINT}#{INDEXFILE}.zip",
|
|
143
|
+
file: "#{INDEXFILE}.yaml",
|
|
144
|
+
pubid_class: ::Pubid::Iso::Identifier,
|
|
145
|
+
)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def fetch_doc(options = {})
|
|
149
|
+
@excludings = nil if options != opts
|
|
150
|
+
@opts = options
|
|
151
|
+
|
|
152
|
+
if !ref.root.all_parts || size == 1
|
|
153
|
+
any? && first.item # (opts[:lang])
|
|
154
|
+
else
|
|
155
|
+
to_all_parts
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# @return [RelatonIsoBib::IsoBibliographicItem, nil]
|
|
160
|
+
def to_all_parts # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
|
|
161
|
+
parts = @array.select { |h| h.pubid.part }
|
|
162
|
+
if opts[:publication_date_before] || opts[:publication_date_after]
|
|
163
|
+
parts = parts.select { |h| Bibliography.send(:year_in_range?, (h.pubid.date&.year || h.hit[:year]).to_i, opts) }
|
|
164
|
+
end
|
|
165
|
+
hit = parts.min_by { |h| h.pubid.part.value.to_i }
|
|
166
|
+
return @array.first&.item unless hit
|
|
167
|
+
|
|
168
|
+
bibitem = hit.item
|
|
169
|
+
all_parts_item = bibitem.to_all_parts
|
|
170
|
+
@array.reject { |h| h.pubid.part == hit.pubid.part }.each do |hi|
|
|
171
|
+
all_parts_item.relation << create_relation(hi)
|
|
172
|
+
end
|
|
173
|
+
all_parts_item
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def create_relation(hit)
|
|
177
|
+
# pubid = Pubid.new hit.pubid
|
|
178
|
+
docid = Docidentifier.new(content: hit.pubid, type: "ISO", primary: true)
|
|
179
|
+
isobib = ItemData.new(formattedref: Bib::Formattedref.new(content: hit.pubid.to_s), docidentifier: [docid])
|
|
180
|
+
Relation.new(type: "instanceOf", bibitem: isobib)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class ItemData < Bib::ItemData
|
|
4
|
+
def create_id(without_date: false)
|
|
5
|
+
docid = docidentifier.find(&:primary) || docidentifier.first
|
|
6
|
+
return unless docid
|
|
7
|
+
|
|
8
|
+
if docid.content.is_a?(String)
|
|
9
|
+
create_id_from_string(docid.content, without_date)
|
|
10
|
+
else
|
|
11
|
+
create_id_from_pubid(docid.content, without_date)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def create_id_from_string(content, without_date)
|
|
18
|
+
pubid = without_date ? content.sub(/:\d{4}$/, "") : content
|
|
19
|
+
self.id = pubid.gsub(/\W+/, "")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create_id_from_pubid(content, without_date)
|
|
23
|
+
pubid = without_date ? content.exclude(:year) : content
|
|
24
|
+
self.id = pubid.to_s.gsub(/\W+/, "")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
require_relative "../type/pubid"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Iso
|
|
5
|
+
class Docidentifier < Bib::Docidentifier
|
|
6
|
+
attribute :content, Type::Pubid
|
|
7
|
+
|
|
8
|
+
attr_reader :pubid
|
|
9
|
+
|
|
10
|
+
def initialize(arg = nil, **kwargs)
|
|
11
|
+
arg.is_a?(Hash) ? super(arg) : super(**kwargs)
|
|
12
|
+
# Content may have been set before type during lutaml init. Re-run
|
|
13
|
+
# the setter so type-dependent parsing (e.g. iso-tc bypass) applies.
|
|
14
|
+
raw = arg.is_a?(Hash) ? (arg["content"] || arg[:content]) : kwargs[:content]
|
|
15
|
+
self.content = raw if raw
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
alias_method :original_content=, :content=
|
|
19
|
+
alias_method :original_content, :content
|
|
20
|
+
|
|
21
|
+
def content=(value)
|
|
22
|
+
@pubid = nil
|
|
23
|
+
@raw_content = nil
|
|
24
|
+
|
|
25
|
+
if type == "iso-tc" && value.is_a?(String)
|
|
26
|
+
@raw_content = value
|
|
27
|
+
else
|
|
28
|
+
parsed =
|
|
29
|
+
case value
|
|
30
|
+
when ::Pubid::Iso::Identifier then value
|
|
31
|
+
when String
|
|
32
|
+
begin
|
|
33
|
+
::Pubid::Iso::Identifier.parse(value)
|
|
34
|
+
rescue StandardError
|
|
35
|
+
# Suppress when type is not yet set (lutaml runs the setter
|
|
36
|
+
# once during init before `type` is assigned, then `initialize`
|
|
37
|
+
# re-runs it; only the second pass is authoritative).
|
|
38
|
+
Util.warn "Failed to parse Pubid: #{value}" if type
|
|
39
|
+
nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if parsed
|
|
44
|
+
@pubid = parsed
|
|
45
|
+
# TC committee documents have a canonical spelling ("… N1110")
|
|
46
|
+
# that pubid renders with a space ("… N 1110"). Preserve the
|
|
47
|
+
# source string (same intent as the iso-tc bypass) while keeping
|
|
48
|
+
# the parsed pubid for any structural operations.
|
|
49
|
+
if value.is_a?(String) && parsed.is_a?(::Pubid::Iso::Identifiers::TcDocument)
|
|
50
|
+
@raw_content = value
|
|
51
|
+
end
|
|
52
|
+
elsif value.is_a?(String)
|
|
53
|
+
@raw_content = value
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
send(:original_content=, to_s)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def content
|
|
61
|
+
return @raw_content if @raw_content
|
|
62
|
+
return render_pubid(@pubid) if @pubid
|
|
63
|
+
|
|
64
|
+
original_content
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def to_s
|
|
68
|
+
content.to_s
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def to_all_parts!
|
|
72
|
+
return unless @pubid
|
|
73
|
+
|
|
74
|
+
remove_part!
|
|
75
|
+
remove_date!
|
|
76
|
+
remove_stage!
|
|
77
|
+
@pubid.all_parts = true
|
|
78
|
+
refresh_content!
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def remove_stage!
|
|
82
|
+
remove_attr!(:stage)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def remove_part!
|
|
86
|
+
remove_attr!(:part)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def remove_date!
|
|
90
|
+
remove_attr!(:date)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def exclude_year
|
|
94
|
+
return @raw_content if @raw_content
|
|
95
|
+
return nil unless @pubid
|
|
96
|
+
|
|
97
|
+
pubid = @pubid.exclude(:date)
|
|
98
|
+
current = pubid
|
|
99
|
+
while current.base_identifier
|
|
100
|
+
current.base_identifier = current.base_identifier.exclude(:date)
|
|
101
|
+
current = current.base_identifier
|
|
102
|
+
end
|
|
103
|
+
pubid
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
private
|
|
107
|
+
|
|
108
|
+
def render_pubid(pubid)
|
|
109
|
+
case type
|
|
110
|
+
when "URN" then pubid.to_urn
|
|
111
|
+
when "ISO" then pubid.exclude(:languages).to_s
|
|
112
|
+
else
|
|
113
|
+
pubid.to_s
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def remove_attr!(attr)
|
|
118
|
+
return unless @pubid
|
|
119
|
+
|
|
120
|
+
@pubid.send("#{attr}=", nil)
|
|
121
|
+
base = @pubid.base_identifier
|
|
122
|
+
while base
|
|
123
|
+
base.send("#{attr}=", nil)
|
|
124
|
+
base = base.base_identifier
|
|
125
|
+
end
|
|
126
|
+
refresh_content!
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def refresh_content!
|
|
130
|
+
send(:original_content=, to_s)
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class Doctype < Bib::Doctype
|
|
4
|
+
TYPES = %w[
|
|
5
|
+
international-standard technical-specification technical-report publicly-available-specification
|
|
6
|
+
international-workshop-agreement guide recommendation amendment technical-corrigendum directive
|
|
7
|
+
committee-document addendum supplement extract
|
|
8
|
+
].freeze
|
|
9
|
+
|
|
10
|
+
attribute :content, :string, values: TYPES
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
require_relative "stagename"
|
|
3
|
+
require_relative "structured_identifier"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Iso
|
|
7
|
+
class Ext < Bib::Ext
|
|
8
|
+
attribute :doctype, Doctype
|
|
9
|
+
attribute :structuredidentifier, StructuredIdentifier
|
|
10
|
+
attribute :horizontal, :boolean
|
|
11
|
+
attribute :stagename, Stagename
|
|
12
|
+
attribute :updates_document_type, :string, values: Doctype::TYPES
|
|
13
|
+
attribute :fast_track, :boolean
|
|
14
|
+
attribute :price_code, :string
|
|
15
|
+
|
|
16
|
+
def get_schema_version = Relaton.schema_versions["relaton-model-iso"]
|
|
17
|
+
|
|
18
|
+
xml do
|
|
19
|
+
map_element "horizontal", to: :horizontal
|
|
20
|
+
map_element "stagename", to: :stagename
|
|
21
|
+
map_element "updates-document-type", to: :updates_document_type
|
|
22
|
+
map_element "fast-track", to: :fast_track
|
|
23
|
+
map_element "price-code", to: :price_code
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
key_value do
|
|
27
|
+
map_element "horizontal", to: :horizontal
|
|
28
|
+
map_element "stagename", to: :stagename
|
|
29
|
+
map_element "updates_document_type", to: :updates_document_type
|
|
30
|
+
map_element "fast_track", to: :fast_track
|
|
31
|
+
map_element "price_code", to: :price_code
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require_relative "docidentifier"
|
|
2
|
+
require_relative "ext"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Iso
|
|
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 Iso
|
|
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,22 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class ProjectNumber < Lutaml::Model::Serializable
|
|
4
|
+
attribute :part, :integer
|
|
5
|
+
attribute :subpart, :integer
|
|
6
|
+
attribute :amendment, :integer
|
|
7
|
+
attribute :corrigendum, :integer
|
|
8
|
+
attribute :origyr, :string
|
|
9
|
+
attribute :content, :string
|
|
10
|
+
|
|
11
|
+
xml do
|
|
12
|
+
root "project-number"
|
|
13
|
+
map_attribute "part", to: :part
|
|
14
|
+
map_attribute "subpart", to: :subpart
|
|
15
|
+
map_attribute "amendment", to: :amendment
|
|
16
|
+
map_attribute "corrigendum", to: :corrigendum
|
|
17
|
+
map_attribute "origyr", to: :origyr
|
|
18
|
+
map_content to: :content
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class Stagename < Lutaml::Model::Serializable
|
|
4
|
+
attribute :abbreviation, :string
|
|
5
|
+
attribute :content, :string
|
|
6
|
+
|
|
7
|
+
xml do
|
|
8
|
+
root "stagename"
|
|
9
|
+
map_attribute "abbreviation", to: :abbreviation
|
|
10
|
+
map_content to: :content
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative "project_number"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Iso
|
|
5
|
+
class StructuredIdentifier < Lutaml::Model::Serializable
|
|
6
|
+
attribute :type, :string
|
|
7
|
+
attribute :project_number, ProjectNumber
|
|
8
|
+
attribute :tc_document_number, :integer
|
|
9
|
+
|
|
10
|
+
xml do
|
|
11
|
+
root "structuredidentifier"
|
|
12
|
+
map_attribute "type", to: :type
|
|
13
|
+
map_element "project-number", to: :project_number
|
|
14
|
+
map_element "tc-document-number", to: :tc_document_number
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def remove_date!
|
|
18
|
+
project_number&.origyr = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def remove_part!
|
|
22
|
+
project_number&.part = nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def to_all_parts!
|
|
26
|
+
remove_date!
|
|
27
|
+
remove_part!
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require "relaton/core/processor"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Iso
|
|
5
|
+
class Processor < Core::Processor
|
|
6
|
+
attr_reader :idtype
|
|
7
|
+
|
|
8
|
+
def initialize # rubocop:disable Lint/MissingSuper
|
|
9
|
+
@short = :relaton_iso
|
|
10
|
+
@prefix = "ISO"
|
|
11
|
+
@defaultprefix = %r{^ISO(/IEC)?\s}
|
|
12
|
+
@idtype = "ISO"
|
|
13
|
+
@datasets = %w[iso-open-data iso-open-data-all]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @param code [String]
|
|
17
|
+
# @param date [String, nil] year
|
|
18
|
+
# @param opts [Hash]
|
|
19
|
+
# @return [RelatonIsoBib::IsoBibliographicItem]
|
|
20
|
+
def get(code, date, opts)
|
|
21
|
+
require_relative "../iso"
|
|
22
|
+
Bibliography.get(code, date, opts)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Fetch all the documents from the ISO Open Data programme
|
|
27
|
+
# (https://www.iso.org/open-data.html).
|
|
28
|
+
#
|
|
29
|
+
# @param [String] source source name
|
|
30
|
+
# * `iso-open-data` - skip if upstream `Last-Modified` is unchanged
|
|
31
|
+
# * `iso-open-data-all` - wipe `output` and re-emit every record
|
|
32
|
+
# @param [Hash] opts
|
|
33
|
+
# @option opts [String] :output directory to output documents
|
|
34
|
+
# @option opts [String] :format output format (xml, yaml, bibxml)
|
|
35
|
+
#
|
|
36
|
+
def fetch_data(source, opts)
|
|
37
|
+
require_relative "data_fetcher"
|
|
38
|
+
DataFetcher.fetch(source, **opts)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @param xml [String]
|
|
42
|
+
# @return [RelatonIsoBib::IsoBibliographicItem]
|
|
43
|
+
def from_xml(xml)
|
|
44
|
+
require_relative "../iso"
|
|
45
|
+
Item.from_xml xml
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def from_yaml(yaml)
|
|
49
|
+
require_relative "../iso"
|
|
50
|
+
Item.from_yaml yaml
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @param hash [Hash]
|
|
54
|
+
# @return [RelatonIsoBib::IsoBibliographicItem]
|
|
55
|
+
# def hash_to_bib(hash)
|
|
56
|
+
# item_hash = HashConverter.hash_to_bib(hash)
|
|
57
|
+
# ::RelatonIsoBib::IsoBibliographicItem.new(**item_hash)
|
|
58
|
+
# end
|
|
59
|
+
|
|
60
|
+
# Returns hash of XML grammar
|
|
61
|
+
# @return [String]
|
|
62
|
+
def grammar_hash
|
|
63
|
+
require_relative "../iso"
|
|
64
|
+
Iso.grammar_hash
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Returns number of workers
|
|
68
|
+
# @return [Integer]
|
|
69
|
+
def threads = 3
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Remove index file
|
|
73
|
+
#
|
|
74
|
+
def remove_index_file
|
|
75
|
+
# ../iso defines INDEXFILE and loads Index, both otherwise missing
|
|
76
|
+
# when remove_index_file runs without iso.rb already loaded.
|
|
77
|
+
require_relative "../iso"
|
|
78
|
+
require_relative "hit_collection"
|
|
79
|
+
Index.find_or_create(:iso, url: true, file: "#{INDEXFILE}.yaml")
|
|
80
|
+
.remove_file
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|