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
data/lib/relaton/itu.rb
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require "mechanize"
|
|
2
|
+
require "parslet"
|
|
3
|
+
require "digest/md5"
|
|
4
|
+
require "relaton/index"
|
|
5
|
+
require "relaton/bib"
|
|
6
|
+
require "relaton/core"
|
|
7
|
+
require_relative "version"
|
|
8
|
+
require_relative "itu/util"
|
|
9
|
+
require_relative "itu/item_data"
|
|
10
|
+
require_relative "itu/model/item"
|
|
11
|
+
require_relative "itu/model/bibitem"
|
|
12
|
+
require_relative "itu/model/bibdata"
|
|
13
|
+
require_relative "itu/pubid"
|
|
14
|
+
require_relative "itu/scraper"
|
|
15
|
+
require_relative "itu/hit_collection"
|
|
16
|
+
require_relative "itu/bibliography"
|
|
17
|
+
|
|
18
|
+
module Relaton
|
|
19
|
+
module Itu
|
|
20
|
+
INDEXFILE = "index-v1"
|
|
21
|
+
|
|
22
|
+
class Error < StandardError; end
|
|
23
|
+
|
|
24
|
+
# Returns hash of XML reammar
|
|
25
|
+
# @return [String]
|
|
26
|
+
def self.grammar_hash
|
|
27
|
+
# gem_path = File.expand_path "..", __dir__
|
|
28
|
+
# grammars_path = File.join gem_path, "grammars", "*"
|
|
29
|
+
# grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
|
|
30
|
+
Digest::MD5.hexdigest Relaton::VERSION # grammars
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Jis
|
|
5
|
+
module Bibliography
|
|
6
|
+
extend self
|
|
7
|
+
|
|
8
|
+
#
|
|
9
|
+
# Search JIS by reference, returning the full candidate collection.
|
|
10
|
+
#
|
|
11
|
+
# The reference is parsed into a {Pubid::Jis::Identifier} and matched
|
|
12
|
+
# against the pubid-based `index-v2` via {HitCollection}. Candidates share
|
|
13
|
+
# the reference's series and number (a supplement is filed under its base
|
|
14
|
+
# number), so an edition and its amendments are returned together.
|
|
15
|
+
#
|
|
16
|
+
# @param [String] code JIS document code
|
|
17
|
+
# @param [String, nil] year JIS document year
|
|
18
|
+
#
|
|
19
|
+
# @return [Relaton::Jis::HitCollection, nil] search result, or nil when
|
|
20
|
+
# the reference cannot be parsed
|
|
21
|
+
#
|
|
22
|
+
def search(code, year = nil)
|
|
23
|
+
pubid = ::Pubid::Jis::Identifier.parse code
|
|
24
|
+
pubid.year ||= year.to_i if year
|
|
25
|
+
HitCollection.new pubid
|
|
26
|
+
rescue StandardError => e
|
|
27
|
+
Util.warn "Unable to parse `#{code}` with pubid: #{e.message}"
|
|
28
|
+
nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# Get JIS document by reference
|
|
33
|
+
#
|
|
34
|
+
# @param [String] ref JIS document reference
|
|
35
|
+
# @param [String, nil] year JIS document year
|
|
36
|
+
# @param [Hash] opts options
|
|
37
|
+
# @option opts [Boolean] :all_parts return all parts of document
|
|
38
|
+
#
|
|
39
|
+
# @return [Relaton::Jis::Item, nil] JIS document
|
|
40
|
+
#
|
|
41
|
+
def get(ref, year = nil, opts = {}) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
42
|
+
code = ref.sub(/\s\((all parts|規格群)\)/, "")
|
|
43
|
+
opts[:all_parts] ||= !$1.nil?
|
|
44
|
+
Util.info "Fetching from webdesk.jsa.or.jp ...", key: ref
|
|
45
|
+
hits = search(code, year)
|
|
46
|
+
unless hits
|
|
47
|
+
hint [], ref, year
|
|
48
|
+
return
|
|
49
|
+
end
|
|
50
|
+
result = opts[:all_parts] ? hits.find_all_parts : hits.find
|
|
51
|
+
if result.is_a? Bib::ItemData
|
|
52
|
+
Util.info "Found: `#{result.docidentifier[0].content}`", key: ref
|
|
53
|
+
return result
|
|
54
|
+
end
|
|
55
|
+
hint result, ref, year
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# Log hint message
|
|
60
|
+
#
|
|
61
|
+
# @param [Array] result search result (missed edition years)
|
|
62
|
+
# @param [String] ref reference to search
|
|
63
|
+
# @param [String, nil] year year to search
|
|
64
|
+
#
|
|
65
|
+
def hint(result, ref, year)
|
|
66
|
+
Util.info "Not found.", key: ref
|
|
67
|
+
if result&.any?
|
|
68
|
+
Util.info "TIP: No match for edition year `#{year}`, but " \
|
|
69
|
+
"matches exist for `#{result.uniq.join('`, `')}`.", key: ref
|
|
70
|
+
end
|
|
71
|
+
nil
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../jis"
|
|
4
|
+
require_relative "scraper"
|
|
5
|
+
|
|
6
|
+
module Relaton
|
|
7
|
+
module Jis
|
|
8
|
+
class DataFetcher < Core::DataFetcher
|
|
9
|
+
URL = "https://webdesk.jsa.or.jp/books/"
|
|
10
|
+
|
|
11
|
+
def initialize(output, format)
|
|
12
|
+
super
|
|
13
|
+
@queue = SizedQueue.new 10
|
|
14
|
+
@threads = create_thread_pool 5
|
|
15
|
+
@mutex = Mutex.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def log_error(msg)
|
|
19
|
+
Util.error msg
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def index
|
|
23
|
+
@index ||= Relaton::Index.find_or_create :jis, file: "#{INDEXFILE}.yaml"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Pubid-based index built in parallel with the legacy string index. The
|
|
27
|
+
# pool keys by type, so requesting a second :jis index with a different
|
|
28
|
+
# file evicts the v1 Type from the pool, but we keep our own reference in
|
|
29
|
+
# @index, so both stay live for the duration of the crawl.
|
|
30
|
+
def index_v2
|
|
31
|
+
@index_v2 ||= Relaton::Index.find_or_create(
|
|
32
|
+
:jis, file: "#{INDEXFILE_V2}.yaml", pubid_class: ::Pubid::Jis::Identifier
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Parse a primary docidentifier string into a pubid identifier; nil (with
|
|
37
|
+
# a warning) if pubid can't parse it, so a single bad id never aborts the
|
|
38
|
+
# crawl or corrupts index-v2.
|
|
39
|
+
def pubid(id)
|
|
40
|
+
::Pubid::Jis::Identifier.parse id
|
|
41
|
+
rescue StandardError => e
|
|
42
|
+
Util.warn "Failed to parse `#{id}` with pubid: #{e.message}"
|
|
43
|
+
nil
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def to_yaml(bib)
|
|
47
|
+
Item.to_yaml bib
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def to_xml(bib)
|
|
51
|
+
Bibdata.to_xml bib
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def to_bibxml(bib)
|
|
55
|
+
bib.to_rfcxml
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def create_thread_pool(size)
|
|
59
|
+
Array.new(size) do
|
|
60
|
+
Thread.new do
|
|
61
|
+
until (url = @queue.shift) == :END
|
|
62
|
+
fetch_doc url
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def fetch_doc(url) # rubocop:disable Metrics/MethodLength
|
|
69
|
+
attempts = 0
|
|
70
|
+
begin
|
|
71
|
+
bib = Scraper.new(url, @errors).fetch
|
|
72
|
+
rescue StandardError => e
|
|
73
|
+
attempts += 1
|
|
74
|
+
if attempts < 5
|
|
75
|
+
sleep 2
|
|
76
|
+
retry
|
|
77
|
+
else
|
|
78
|
+
Util.warn "URL: #{url}"
|
|
79
|
+
Util.warn "#{e.message}\n#{e.backtrace[0..6].join("\n")}"
|
|
80
|
+
end
|
|
81
|
+
else
|
|
82
|
+
save_doc bib, url
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def fetch(_source = nil)
|
|
87
|
+
return unless initial_post
|
|
88
|
+
|
|
89
|
+
resp = agent.get "#{URL}W11M0070/index"
|
|
90
|
+
parse_page resp
|
|
91
|
+
index.save
|
|
92
|
+
index_v2.save
|
|
93
|
+
report_errors
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def initial_post
|
|
97
|
+
return true if @initial_time && Time.now - @initial_time < 600
|
|
98
|
+
|
|
99
|
+
body = { record: 0, dantai: "JIS", searchtype2: 1,
|
|
100
|
+
status_1: 1, status_2: 2 } # rubocop:disable Naming/VariableNumber
|
|
101
|
+
resp = agent.post "#{URL}W11M0270/index", body
|
|
102
|
+
disp = JSON.parse resp.body
|
|
103
|
+
@initial_time = Time.now
|
|
104
|
+
disp["status"] || Util.warn("No results found for JIS")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def agent
|
|
108
|
+
@agent ||= Mechanize.new
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def parse_page(resp)
|
|
112
|
+
while resp
|
|
113
|
+
xpath = '//div[@class="blockGenaral"]/a'
|
|
114
|
+
resp.xpath(xpath).each { |a| @queue << a[:href] }
|
|
115
|
+
offset = parse_offset resp
|
|
116
|
+
break if offset >= count
|
|
117
|
+
|
|
118
|
+
resp = get_next_page(offset)
|
|
119
|
+
end
|
|
120
|
+
end_threads_and_wait
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def parse_offset(resp) # rubocop:disable Metrics/AbcSize
|
|
124
|
+
if resp.at('//*[@id="btnPaging"]') # first page
|
|
125
|
+
xpath = '//script[contains(.,"var count =")]'
|
|
126
|
+
@count = resp.at(xpath).text.match(/var count = (\d+);/)[1]
|
|
127
|
+
resp.at("//*[@id='offset']")[:value].to_i
|
|
128
|
+
else
|
|
129
|
+
script = resp.at("//script").text
|
|
130
|
+
script.match(/\("offset"\)\.value = '(\d+)'/)[1].to_i
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def end_threads_and_wait
|
|
135
|
+
@threads.size.times { @queue << :END }
|
|
136
|
+
@queue.close
|
|
137
|
+
@threads.each(&:join)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def count
|
|
141
|
+
@count.to_i
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def get_next_page(offset) # rubocop:disable Metrics/MethodLength
|
|
145
|
+
attempts = 0
|
|
146
|
+
begin
|
|
147
|
+
if initial_post
|
|
148
|
+
url = "#{URL}W11M0070/getAddList"
|
|
149
|
+
agent.post url, search_type: "JIS", offset: offset
|
|
150
|
+
end
|
|
151
|
+
rescue StandardError => e
|
|
152
|
+
attempts += 1
|
|
153
|
+
if attempts < 5
|
|
154
|
+
sleep 2
|
|
155
|
+
retry
|
|
156
|
+
else
|
|
157
|
+
Util.warn "#{e.message}\n#{e.backtrace[0..6].join("\n")}"
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def save_doc(bib, url) # rubocop:disable Metrics/MethodLength
|
|
163
|
+
return unless bib
|
|
164
|
+
|
|
165
|
+
id = bib.docidentifier.find(&:primary).content
|
|
166
|
+
file = output_file id
|
|
167
|
+
@mutex.synchronize do
|
|
168
|
+
if @files.include?(file)
|
|
169
|
+
Util.warn "File #{file} already exists. Duplication URL: #{url}"
|
|
170
|
+
else
|
|
171
|
+
@files << file
|
|
172
|
+
File.write file, serialize(bib), encoding: "UTF-8"
|
|
173
|
+
index.add_or_update id, file
|
|
174
|
+
pid = pubid id
|
|
175
|
+
index_v2.add_or_update pid, file if pid
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Jis
|
|
5
|
+
class Docidentifier < Bib::Docidentifier
|
|
6
|
+
def remove_part!
|
|
7
|
+
content&.sub!(/-\d+/, "")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def remove_date!
|
|
11
|
+
content&.sub!(/:\d{4}/, "")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_all_parts!
|
|
15
|
+
remove_part!
|
|
16
|
+
remove_date!
|
|
17
|
+
self.content = "#{content} (all parts)" if content
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
require_relative "structured_identifier"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Jis
|
|
6
|
+
class Ext < Iso::Ext
|
|
7
|
+
attribute :doctype, Doctype
|
|
8
|
+
attribute :structuredidentifier, StructuredIdentifier
|
|
9
|
+
|
|
10
|
+
def get_schema_version = Relaton.schema_versions["relaton-model-jis"]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Jis
|
|
5
|
+
class Hit < Core::Hit
|
|
6
|
+
#
|
|
7
|
+
# Create new hit
|
|
8
|
+
#
|
|
9
|
+
# @param [Hash] hit found hit
|
|
10
|
+
# @param [Relaton::Jis::HitCollection] collection hit collection
|
|
11
|
+
#
|
|
12
|
+
# @return [Relaton::Jis::Hit] new hit
|
|
13
|
+
#
|
|
14
|
+
def self.create(hit, collection)
|
|
15
|
+
new hit, collection
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# Check if the hit matches the collection's reference.
|
|
20
|
+
#
|
|
21
|
+
# The candidate must be the same document type (so a plain standard query
|
|
22
|
+
# never matches its amendments) and share series and number. Part is
|
|
23
|
+
# compared only when the reference names a specific part and `all_parts`
|
|
24
|
+
# is off. Year is filtered separately by {HitCollection}.
|
|
25
|
+
#
|
|
26
|
+
# @param [Boolean] all_parts match any part of the document
|
|
27
|
+
#
|
|
28
|
+
# @return [Boolean] true if the hit matches
|
|
29
|
+
#
|
|
30
|
+
def matches?(all_parts: false)
|
|
31
|
+
cand = pubid
|
|
32
|
+
return false unless cand && same_document?(cand)
|
|
33
|
+
return true if all_parts || reference_partless?
|
|
34
|
+
|
|
35
|
+
Array(cand.parts).map(&:to_s) == reference_parts
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# The hit's pubid identifier. `index-v2` rows are already deserialized to
|
|
40
|
+
# {Pubid::Jis::Identifier} via `pubid_class`; a Hash or String id is
|
|
41
|
+
# converted for robustness.
|
|
42
|
+
#
|
|
43
|
+
# @return [Pubid::Jis::Identifier, nil] identifier, or nil when it cannot
|
|
44
|
+
# be built
|
|
45
|
+
#
|
|
46
|
+
def pubid
|
|
47
|
+
return @pubid if defined? @pubid
|
|
48
|
+
|
|
49
|
+
id = hit[:id]
|
|
50
|
+
@pubid = case id
|
|
51
|
+
when Hash then ::Pubid::Jis::Identifier.from_hash id
|
|
52
|
+
when String then ::Pubid::Jis::Identifier.parse id
|
|
53
|
+
else id
|
|
54
|
+
end
|
|
55
|
+
rescue StandardError
|
|
56
|
+
Util.warn "Unable to create an identifier from `#{hit[:id]}`"
|
|
57
|
+
@pubid = nil
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @return [Relaton::Jis::Item]
|
|
61
|
+
def item
|
|
62
|
+
@item ||= begin
|
|
63
|
+
url = "#{HitCollection::GH_URL}#{hit[:file]}"
|
|
64
|
+
resp = Net::HTTP.get_response URI(url)
|
|
65
|
+
item = Item.from_yaml resp.body
|
|
66
|
+
item.fetched = Date.today.to_s
|
|
67
|
+
item
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
def reference
|
|
74
|
+
hit_collection.pubid
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Same document type, series and number as the reference.
|
|
78
|
+
def same_document?(cand)
|
|
79
|
+
cand.instance_of?(reference.class) &&
|
|
80
|
+
cand.series == reference.series &&
|
|
81
|
+
cand.number.to_s == reference.number.to_s
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def reference_partless?
|
|
85
|
+
reference.parts.nil? || reference.parts.empty?
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def reference_parts
|
|
89
|
+
Array(reference.parts).map(&:to_s)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "hit"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Jis
|
|
7
|
+
class HitCollection < Core::HitCollection
|
|
8
|
+
GH_URL = "https://raw.githubusercontent.com/relaton/relaton-data-jis/v2/"
|
|
9
|
+
|
|
10
|
+
#
|
|
11
|
+
# Initialize hit collection.
|
|
12
|
+
#
|
|
13
|
+
# Searches the pubid-based `index-v2` for every entry sharing the
|
|
14
|
+
# reference's series and number (a supplement is filed under its base
|
|
15
|
+
# number, so editions and amendments come back together). Narrowing to a
|
|
16
|
+
# specific type/year/part happens later in {#find}.
|
|
17
|
+
#
|
|
18
|
+
# @param [Pubid::Jis::Identifier] pubid parsed reference
|
|
19
|
+
#
|
|
20
|
+
def initialize(pubid)
|
|
21
|
+
super(pubid, pubid.year&.to_s)
|
|
22
|
+
@array = index.search(pubid) { |row| same_base? row[:id] }
|
|
23
|
+
.map { |row| Hit.new row, self }
|
|
24
|
+
.sort_by { |hit| hit.pubid.to_s }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @return [Pubid::Jis::Identifier] parsed reference
|
|
28
|
+
def pubid
|
|
29
|
+
ref
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# Find the best hit for the reference.
|
|
34
|
+
#
|
|
35
|
+
# @return [Relaton::Bib::ItemData, Array<Integer>] the matching item, or
|
|
36
|
+
# the list of available edition years when none match the requested year
|
|
37
|
+
#
|
|
38
|
+
def find
|
|
39
|
+
if pubid.year
|
|
40
|
+
find_by_year pubid.year
|
|
41
|
+
else
|
|
42
|
+
find_all_years
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def find_by_year(ref_year)
|
|
47
|
+
missed_years = []
|
|
48
|
+
@array.each do |hit|
|
|
49
|
+
next unless hit.matches?
|
|
50
|
+
|
|
51
|
+
return hit.item if hit.pubid.year.to_s == ref_year.to_s
|
|
52
|
+
|
|
53
|
+
missed_years << hit.pubid.year
|
|
54
|
+
end
|
|
55
|
+
missed_years
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# The main item is the latest edition of the requested type; every other
|
|
59
|
+
# candidate sharing the series and number (older editions, amendments,
|
|
60
|
+
# explanations) is attached as an `instanceOf` relation.
|
|
61
|
+
def find_all_years
|
|
62
|
+
editions = @array.select(&:matches?)
|
|
63
|
+
return [] if editions.empty?
|
|
64
|
+
|
|
65
|
+
item = editions.max_by { |hit| hit.pubid.year.to_i }.item
|
|
66
|
+
attach_relations item.to_most_recent_reference,
|
|
67
|
+
item.docidentifier.first.content
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# The lowest-numbered part becomes the all-parts umbrella; every candidate
|
|
71
|
+
# sharing the series and number is attached as an `instanceOf` relation.
|
|
72
|
+
def find_all_parts
|
|
73
|
+
parts = @array.select { |hit| hit.matches? all_parts: true }
|
|
74
|
+
lowest = parts.min_by { |hit| hit.pubid.parts.first.to_i }
|
|
75
|
+
item = lowest.item.to_all_parts
|
|
76
|
+
attach_relations item, item.docidentifier.first.content
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Attach every candidate except `skip_id` to `umbrella` as an `instanceOf`
|
|
80
|
+
# relation and return the umbrella.
|
|
81
|
+
def attach_relations(umbrella, skip_id)
|
|
82
|
+
@array.each do |hit|
|
|
83
|
+
next if hit.pubid.to_s == skip_id
|
|
84
|
+
|
|
85
|
+
umbrella.relation << create_relation(hit)
|
|
86
|
+
end
|
|
87
|
+
umbrella
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def create_relation(hit)
|
|
91
|
+
id = hit.pubid.to_s
|
|
92
|
+
docid = Docidentifier.new content: id, type: "JIS", primary: true
|
|
93
|
+
bibitem = ItemData.new(
|
|
94
|
+
formattedref: Bib::Formattedref.new(content: id),
|
|
95
|
+
docidentifier: [docid],
|
|
96
|
+
)
|
|
97
|
+
Relation.new type: "instanceOf", bibitem: bibitem
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Index of pubid identifiers (`index-v2`), deserialized via `pubid_class`.
|
|
101
|
+
def index
|
|
102
|
+
@index ||= Relaton::Index.find_or_create(
|
|
103
|
+
:jis,
|
|
104
|
+
url: "#{GH_URL}#{INDEXFILE_V2}.zip",
|
|
105
|
+
file: "#{INDEXFILE_V2}.yaml",
|
|
106
|
+
pubid_class: ::Pubid::Jis::Identifier,
|
|
107
|
+
)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
private
|
|
111
|
+
|
|
112
|
+
# Broad candidate filter: same series and number as the reference. For a
|
|
113
|
+
# supplement (amendment/corrigendum/explanation) the document series and
|
|
114
|
+
# number live on `base`, so compare against that.
|
|
115
|
+
def same_base?(candidate)
|
|
116
|
+
cand = base_of candidate
|
|
117
|
+
ours = base_of pubid
|
|
118
|
+
cand.series == ours.series && cand.number.to_s == ours.number.to_s
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def base_of(identifier)
|
|
122
|
+
supplement = identifier.respond_to?(:base) && identifier.base
|
|
123
|
+
supplement || identifier
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative "docidentifier"
|
|
2
|
+
require_relative "ext"
|
|
3
|
+
require_relative "item_data"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Jis
|
|
7
|
+
class Relation < Bib::Relation
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class Item < Iso::Item
|
|
11
|
+
model ItemData
|
|
12
|
+
|
|
13
|
+
attribute :docidentifier, Docidentifier,
|
|
14
|
+
collection: true, initialize_empty: true
|
|
15
|
+
attribute :relation, Relation,
|
|
16
|
+
collection: true, initialize_empty: true
|
|
17
|
+
attribute :ext, Ext
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
require_relative "relation"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "docidentifier"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Jis
|
|
7
|
+
class ItemBase < Lutaml::Model::Serializable
|
|
8
|
+
include Bib::NamespaceHelper
|
|
9
|
+
|
|
10
|
+
attr_accessor :type
|
|
11
|
+
|
|
12
|
+
model ItemData
|
|
13
|
+
|
|
14
|
+
instance_exec(&Bib::ItemShared::ATTRIBUTES)
|
|
15
|
+
attribute :docidentifier, Docidentifier,
|
|
16
|
+
collection: true, initialize_empty: true
|
|
17
|
+
attribute :relation, Relation,
|
|
18
|
+
collection: true, initialize_empty: true
|
|
19
|
+
|
|
20
|
+
xml do
|
|
21
|
+
map_attribute "type", to: :type
|
|
22
|
+
instance_exec(&Bib::ItemShared::XML_BODY)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "relaton/core/processor"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Jis
|
|
7
|
+
class Processor < Relaton::Core::Processor
|
|
8
|
+
attr_reader :idtype
|
|
9
|
+
|
|
10
|
+
def initialize # rubocop:disable Lint/MissingSuper
|
|
11
|
+
@short = :relaton_jis
|
|
12
|
+
@prefix = "JIS"
|
|
13
|
+
@defaultprefix = %r{^(JIS|TR)\s}
|
|
14
|
+
@idtype = "JIS"
|
|
15
|
+
@datasets = %w[jis-webdesk]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get(code, date, opts)
|
|
19
|
+
require_relative "../jis"
|
|
20
|
+
Bibliography.get(code, date, opts)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def fetch_data(_source, opts)
|
|
24
|
+
require_relative "data_fetcher"
|
|
25
|
+
DataFetcher.fetch(**opts)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def from_xml(xml)
|
|
29
|
+
require_relative "../jis"
|
|
30
|
+
Item.from_xml xml
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def from_yaml(yaml)
|
|
34
|
+
require_relative "../jis"
|
|
35
|
+
Item.from_yaml yaml
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def grammar_hash
|
|
39
|
+
require_relative "../jis"
|
|
40
|
+
Digest::MD5.hexdigest Relaton::VERSION
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def threads
|
|
44
|
+
3
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def remove_index_file
|
|
48
|
+
require_relative "../jis"
|
|
49
|
+
Relaton::Index.find_or_create(
|
|
50
|
+
:jis, url: true, file: "#{INDEXFILE_V2}.yaml"
|
|
51
|
+
).remove_file
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|