relaton 2.2.0.pre.alpha.1 → 3.0.0.pre.alpha.2
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} +165 -38
- data/bin/console +0 -1
- data/lib/relaton/3gpp/bibdata.rb +9 -0
- data/lib/relaton/3gpp/bibitem.rb +9 -0
- data/lib/relaton/3gpp/bibliography.rb +123 -0
- data/lib/relaton/3gpp/data_fetcher.rb +303 -0
- data/lib/relaton/3gpp/docidentifier.rb +114 -0
- data/lib/relaton/3gpp/doctype.rb +9 -0
- data/lib/relaton/3gpp/ext.rb +31 -0
- data/lib/relaton/3gpp/item.rb +18 -0
- data/lib/relaton/3gpp/item_data.rb +15 -0
- data/lib/relaton/3gpp/parser.rb +400 -0
- data/lib/relaton/3gpp/processor.rb +71 -0
- data/lib/relaton/3gpp/release.rb +34 -0
- data/lib/relaton/3gpp/util.rb +8 -0
- data/lib/relaton/3gpp.rb +29 -0
- data/lib/relaton/adobe/bibdata.rb +8 -0
- data/lib/relaton/adobe/bibitem.rb +8 -0
- data/lib/relaton/adobe/bibliography.rb +92 -0
- data/lib/relaton/adobe/docidentifier.rb +49 -0
- data/lib/relaton/adobe/doctype.rb +14 -0
- data/lib/relaton/adobe/ext.rb +32 -0
- data/lib/relaton/adobe/item.rb +15 -0
- data/lib/relaton/adobe/item_base.rb +18 -0
- data/lib/relaton/adobe/item_data.rb +6 -0
- data/lib/relaton/adobe/processor.rb +45 -0
- data/lib/relaton/adobe/util.rb +8 -0
- data/lib/relaton/adobe.rb +37 -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 +49 -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 +49 -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 +264 -0
- data/lib/relaton/bib/util.rb +18 -0
- data/lib/relaton/bib/versions.json +35 -0
- data/lib/relaton/bib.rb +46 -0
- data/lib/relaton/bipm/bibliography.rb +231 -0
- data/lib/relaton/bipm/converter/asciibib.rb +64 -0
- data/lib/relaton/bipm/data_fetcher.rb +81 -0
- data/lib/relaton/bipm/data_outcomes_parser.rb +656 -0
- data/lib/relaton/bipm/id_parser.rb +278 -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 +36 -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 +172 -0
- data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
- data/lib/relaton/bipm/si_brochure_parser.rb +188 -0
- data/lib/relaton/bipm/util.rb +8 -0
- data/lib/relaton/bipm.rb +38 -0
- data/lib/relaton/bsi/bibliography.rb +196 -0
- data/lib/relaton/bsi/hit.rb +28 -0
- data/lib/relaton/bsi/hit_collection.rb +113 -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 +107 -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 +43 -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 +93 -0
- data/lib/relaton/calconnect/data_fetcher.rb +174 -0
- data/lib/relaton/calconnect/docidentifier.rb +80 -0
- data/lib/relaton/calconnect/hit.rb +14 -0
- data/lib/relaton/calconnect/hit_collection.rb +92 -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 +20 -0
- data/lib/relaton/calconnect/processor.rb +72 -0
- data/lib/relaton/calconnect/scraper.rb +87 -0
- data/lib/relaton/calconnect/util.rb +8 -0
- data/lib/relaton/calconnect.rb +36 -0
- data/lib/relaton/ccsds/bibliography.rb +63 -0
- data/lib/relaton/ccsds/data/fetcher.rb +252 -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 +47 -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/docidentifier.rb +121 -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 +15 -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 +149 -0
- data/lib/relaton/cen/committees.yaml +66 -0
- data/lib/relaton/cen/hit.rb +31 -0
- data/lib/relaton/cen/hit_collection.rb +116 -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 +100 -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 +45 -0
- data/lib/relaton/cen/scraper.rb +218 -0
- data/lib/relaton/cen/util.rb +8 -0
- data/lib/relaton/cen.rb +30 -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 +540 -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 +68 -0
- data/lib/relaton/cie/scrapper.rb +52 -0
- data/lib/relaton/cie/util.rb +8 -0
- data/lib/relaton/cie.rb +29 -0
- data/lib/relaton/core/array_wrapper.rb +20 -0
- data/lib/relaton/core/data_fetcher.rb +244 -0
- data/lib/relaton/core/date_parser.rb +42 -0
- data/lib/relaton/core/governor.rb +320 -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/pacer.rb +134 -0
- data/lib/relaton/core/processor.rb +67 -0
- data/lib/relaton/core/request_error.rb +14 -0
- data/lib/relaton/core/workers_pool.rb +45 -0
- data/lib/relaton/core.rb +12 -0
- data/lib/relaton/db/registry.rb +44 -4
- data/lib/relaton/db.rb +0 -1
- data/lib/relaton/doi/crossref.rb +89 -0
- data/lib/relaton/doi/parser.rb +921 -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/easc/bibdata.rb +8 -0
- data/lib/relaton/easc/bibitem.rb +8 -0
- data/lib/relaton/easc/bibliography.rb +95 -0
- data/lib/relaton/easc/docidentifier.rb +100 -0
- data/lib/relaton/easc/doctype.rb +14 -0
- data/lib/relaton/easc/ext.rb +44 -0
- data/lib/relaton/easc/item.rb +13 -0
- data/lib/relaton/easc/item_base.rb +18 -0
- data/lib/relaton/easc/item_data.rb +6 -0
- data/lib/relaton/easc/processor.rb +46 -0
- data/lib/relaton/easc/util.rb +8 -0
- data/lib/relaton/easc.rb +35 -0
- data/lib/relaton/ecma/bibdata.rb +8 -0
- data/lib/relaton/ecma/bibitem.rb +8 -0
- data/lib/relaton/ecma/bibliography.rb +149 -0
- data/lib/relaton/ecma/data_fetcher.rb +162 -0
- data/lib/relaton/ecma/data_parser.rb +49 -0
- data/lib/relaton/ecma/docidentifier.rb +124 -0
- data/lib/relaton/ecma/edition_parser.rb +80 -0
- data/lib/relaton/ecma/ext.rb +7 -0
- data/lib/relaton/ecma/item.rb +13 -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 +39 -0
- data/lib/relaton/ecma/parser_common.rb +33 -0
- data/lib/relaton/ecma/processor.rb +69 -0
- data/lib/relaton/ecma/standard_parser.rb +134 -0
- data/lib/relaton/ecma/util.rb +8 -0
- data/lib/relaton/ecma.rb +33 -0
- data/lib/relaton/etsi/bibdata.rb +10 -0
- data/lib/relaton/etsi/bibitem.rb +10 -0
- data/lib/relaton/etsi/bibliography.rb +111 -0
- data/lib/relaton/etsi/data_fetcher.rb +167 -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 +71 -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 +26 -0
- data/lib/relaton/gb/bibdata.rb +8 -0
- data/lib/relaton/gb/bibitem.rb +8 -0
- data/lib/relaton/gb/bibliography.rb +171 -0
- data/lib/relaton/gb/ccs.rb +14 -0
- data/lib/relaton/gb/committee.rb +13 -0
- data/lib/relaton/gb/docidentifier.rb +72 -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 +49 -0
- data/lib/relaton/gb/project_number.rb +38 -0
- data/lib/relaton/gb/scraper.rb +221 -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/gost/bibdata.rb +8 -0
- data/lib/relaton/gost/bibitem.rb +8 -0
- data/lib/relaton/gost/bibliography.rb +107 -0
- data/lib/relaton/gost/docidentifier.rb +80 -0
- data/lib/relaton/gost/doctype.rb +16 -0
- data/lib/relaton/gost/ext.rb +46 -0
- data/lib/relaton/gost/item.rb +15 -0
- data/lib/relaton/gost/item_base.rb +18 -0
- data/lib/relaton/gost/item_data.rb +6 -0
- data/lib/relaton/gost/processor.rb +49 -0
- data/lib/relaton/gost/util.rb +8 -0
- data/lib/relaton/gost.rb +36 -0
- data/lib/relaton/iala/bibdata.rb +8 -0
- data/lib/relaton/iala/bibitem.rb +8 -0
- data/lib/relaton/iala/bibliography.rb +146 -0
- data/lib/relaton/iala/docidentifier.rb +89 -0
- data/lib/relaton/iala/doctype.rb +18 -0
- data/lib/relaton/iala/ext.rb +32 -0
- data/lib/relaton/iala/item.rb +21 -0
- data/lib/relaton/iala/item_base.rb +18 -0
- data/lib/relaton/iala/item_data.rb +6 -0
- data/lib/relaton/iala/processor.rb +43 -0
- data/lib/relaton/iala/relation.rb +7 -0
- data/lib/relaton/iala/util.rb +8 -0
- data/lib/relaton/iala.rb +35 -0
- data/lib/relaton/iana/bibdata.rb +8 -0
- data/lib/relaton/iana/bibitem.rb +8 -0
- data/lib/relaton/iana/bibliography.rb +100 -0
- data/lib/relaton/iana/data_fetcher.rb +101 -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 +70 -0
- data/lib/relaton/iana/util.rb +8 -0
- data/lib/relaton/iana.rb +40 -0
- data/lib/relaton/iec/bibliography.rb +283 -0
- data/lib/relaton/iec/data_fetcher.rb +222 -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 +135 -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 +74 -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 +73 -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 +771 -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 +330 -0
- data/lib/relaton/ieee/item.rb +11 -0
- data/lib/relaton/ieee/item_data.rb +7 -0
- data/lib/relaton/ieee/processor.rb +71 -0
- data/lib/relaton/ieee/rawbib_id_parser.rb +753 -0
- data/lib/relaton/ieee/util.rb +8 -0
- data/lib/relaton/ieee.rb +30 -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 +561 -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 +72 -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 +446 -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 +101 -0
- data/lib/relaton/ietf/util.rb +8 -0
- data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
- data/lib/relaton/ietf.rb +30 -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 +66 -0
- data/lib/relaton/index/pool.rb +46 -0
- data/lib/relaton/index/shard_source.rb +201 -0
- data/lib/relaton/index/type.rb +210 -0
- data/lib/relaton/index/util.rb +18 -0
- data/lib/relaton/index.rb +61 -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 +412 -0
- data/lib/relaton/iso/data_fetcher.rb +338 -0
- data/lib/relaton/iso/data_parser.rb +458 -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 +196 -0
- data/lib/relaton/iso/item_data.rb +50 -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 +146 -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 +85 -0
- data/lib/relaton/iso/scraper.rb +635 -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 +95 -0
- data/lib/relaton/itu/data_crawler_r.rb +664 -0
- data/lib/relaton/itu/data_fetcher.rb +550 -0
- data/lib/relaton/itu/data_merge_r.rb +149 -0
- data/lib/relaton/itu/data_parser_r.rb +214 -0
- data/lib/relaton/itu/data_parser_t.rb +228 -0
- data/lib/relaton/itu/family_cache.rb +177 -0
- data/lib/relaton/itu/governor.rb +56 -0
- data/lib/relaton/itu/hit.rb +28 -0
- data/lib/relaton/itu/hit_collection.rb +299 -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 +75 -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 +38 -0
- data/lib/relaton/itu/processor.rb +72 -0
- data/lib/relaton/itu/pubid.rb +199 -0
- data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
- data/lib/relaton/itu/recommendation_fields.rb +334 -0
- data/lib/relaton/itu/recommendation_parser.rb +30 -0
- data/lib/relaton/itu/scraper.rb +203 -0
- data/lib/relaton/itu/util.rb +8 -0
- data/lib/relaton/itu.rb +34 -0
- data/lib/relaton/jcgm/bibdata.rb +8 -0
- data/lib/relaton/jcgm/bibitem.rb +8 -0
- data/lib/relaton/jcgm/bibliography.rb +97 -0
- data/lib/relaton/jcgm/data_fetcher.rb +81 -0
- data/lib/relaton/jcgm/docidentifier.rb +102 -0
- data/lib/relaton/jcgm/doctype.rb +12 -0
- data/lib/relaton/jcgm/ext.rb +23 -0
- data/lib/relaton/jcgm/item.rb +20 -0
- data/lib/relaton/jcgm/item_base.rb +18 -0
- data/lib/relaton/jcgm/item_data.rb +6 -0
- data/lib/relaton/jcgm/meetings_parser.rb +175 -0
- data/lib/relaton/jcgm/processor.rb +71 -0
- data/lib/relaton/jcgm/relation.rb +9 -0
- data/lib/relaton/jcgm/structured_identifier.rb +40 -0
- data/lib/relaton/jcgm/util.rb +8 -0
- data/lib/relaton/jcgm.rb +24 -0
- data/lib/relaton/jis/bibdata.rb +8 -0
- data/lib/relaton/jis/bibitem.rb +8 -0
- data/lib/relaton/jis/bibliography.rb +73 -0
- data/lib/relaton/jis/data_fetcher.rb +183 -0
- data/lib/relaton/jis/docidentifier.rb +120 -0
- data/lib/relaton/jis/doctype.rb +9 -0
- data/lib/relaton/jis/ext.rb +13 -0
- data/lib/relaton/jis/hit.rb +88 -0
- data/lib/relaton/jis/hit_collection.rb +128 -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 +32 -0
- data/lib/relaton/logger/channels/gh_issue.rb +143 -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 +134 -0
- data/lib/relaton/nist/date.rb +7 -0
- data/lib/relaton/nist/docidentifier.rb +165 -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 +19 -0
- data/lib/relaton/nist/item_base.rb +16 -0
- data/lib/relaton/nist/item_data.rb +6 -0
- data/lib/relaton/nist/mods_parser.rb +302 -0
- data/lib/relaton/nist/processor.rb +69 -0
- data/lib/relaton/nist/pubs_export.rb +69 -0
- data/lib/relaton/nist/relation.rb +10 -0
- data/lib/relaton/nist/scraper.rb +293 -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 +201 -0
- data/lib/relaton/oasis/browser_agent.rb +71 -0
- data/lib/relaton/oasis/data_fetcher.rb +130 -0
- data/lib/relaton/oasis/data_parser.rb +305 -0
- data/lib/relaton/oasis/data_parser_utils.rb +330 -0
- data/lib/relaton/oasis/data_part_parser.rb +239 -0
- data/lib/relaton/oasis/docidentifier.rb +54 -0
- data/lib/relaton/oasis/doctype.rb +7 -0
- data/lib/relaton/oasis/ext.rb +19 -0
- data/lib/relaton/oasis/item.rb +14 -0
- data/lib/relaton/oasis/item_data.rb +6 -0
- data/lib/relaton/oasis/processor.rb +74 -0
- data/lib/relaton/oasis/util.rb +8 -0
- data/lib/relaton/oasis.rb +41 -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 +131 -0
- data/lib/relaton/ogc/docidentifier.rb +111 -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 +111 -0
- data/lib/relaton/ogc/item.rb +13 -0
- data/lib/relaton/ogc/item_data.rb +6 -0
- data/lib/relaton/ogc/processor.rb +59 -0
- data/lib/relaton/ogc/scraper.rb +225 -0
- data/lib/relaton/ogc/util.rb +8 -0
- data/lib/relaton/ogc.rb +30 -0
- data/lib/relaton/oiml/bibdata.rb +8 -0
- data/lib/relaton/oiml/bibitem.rb +8 -0
- data/lib/relaton/oiml/bibliography.rb +169 -0
- data/lib/relaton/oiml/docidentifier.rb +48 -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/docidentifier.rb +67 -0
- data/lib/relaton/omg/ext.rb +7 -0
- data/lib/relaton/omg/item.rb +9 -0
- data/lib/relaton/omg/item_data.rb +6 -0
- data/lib/relaton/omg/processor.rb +35 -0
- data/lib/relaton/omg/scraper.rb +186 -0
- data/lib/relaton/omg/util.rb +8 -0
- data/lib/relaton/omg.rb +25 -0
- data/lib/relaton/plateau/bibdata.rb +8 -0
- data/lib/relaton/plateau/bibitem.rb +8 -0
- data/lib/relaton/plateau/bibliography.rb +31 -0
- data/lib/relaton/plateau/data_fetcher.rb +176 -0
- data/lib/relaton/plateau/doctype.rb +7 -0
- data/lib/relaton/plateau/ext.rb +23 -0
- data/lib/relaton/plateau/handbook_parser.rb +102 -0
- data/lib/relaton/plateau/hit.rb +21 -0
- data/lib/relaton/plateau/hit_collection.rb +79 -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 +51 -0
- data/lib/relaton/plateau/technical_report_parser.rb +98 -0
- data/lib/relaton/plateau/util.rb +8 -0
- data/lib/relaton/plateau.rb +29 -0
- data/lib/relaton/sdo/config.rb +34 -0
- data/lib/relaton/sdo/fetcher.rb +52 -0
- data/lib/relaton/sdo/logo.rb +95 -0
- data/lib/relaton/sdo/name.rb +26 -0
- data/lib/relaton/sdo/organization.rb +71 -0
- data/lib/relaton/sdo/store.rb +49 -0
- data/lib/relaton/sdo.rb +29 -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 +174 -0
- data/lib/relaton/w3c/data_fetcher.rb +487 -0
- data/lib/relaton/w3c/data_parser.rb +379 -0
- data/lib/relaton/w3c/docidentifier.rb +48 -0
- data/lib/relaton/w3c/doctype.rb +7 -0
- data/lib/relaton/w3c/ext.rb +11 -0
- data/lib/relaton/w3c/governor.rb +32 -0
- data/lib/relaton/w3c/item.rb +15 -0
- data/lib/relaton/w3c/item_data.rb +6 -0
- data/lib/relaton/w3c/processor.rb +49 -0
- data/lib/relaton/w3c/pubid.rb +85 -0
- data/lib/relaton/w3c/safe_realize.rb +148 -0
- data/lib/relaton/w3c/util.rb +8 -0
- data/lib/relaton/w3c.rb +36 -0
- data/lib/relaton/xsf/bibdata.rb +8 -0
- data/lib/relaton/xsf/bibitem.rb +8 -0
- data/lib/relaton/xsf/bibliography.rb +84 -0
- data/lib/relaton/xsf/data_fetcher.rb +106 -0
- data/lib/relaton/xsf/docidentifier.rb +46 -0
- data/lib/relaton/xsf/hit.rb +17 -0
- data/lib/relaton/xsf/hit_collection.rb +52 -0
- data/lib/relaton/xsf/item.rb +13 -0
- data/lib/relaton/xsf/item_data.rb +6 -0
- data/lib/relaton/xsf/processor.rb +51 -0
- data/lib/relaton/xsf/util.rb +9 -0
- data/lib/relaton/xsf.rb +34 -0
- data/lib/relaton-core.rb +1 -0
- data/lib/relaton.rb +85 -0
- metadata +775 -161
- 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,188 @@
|
|
|
1
|
+
require "nokogiri"
|
|
2
|
+
|
|
3
|
+
module Relaton::Bipm
|
|
4
|
+
class SiBrochureParser
|
|
5
|
+
#
|
|
6
|
+
# Create new parser
|
|
7
|
+
#
|
|
8
|
+
# @param [Relaton::Bipm::DataFetcher] data_fetcher data fetcher
|
|
9
|
+
#
|
|
10
|
+
def initialize(data_fetcher)
|
|
11
|
+
@data_fetcher = WeakRef.new data_fetcher
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Parse documents from SI brochure dataset and write thems to YAML files
|
|
16
|
+
#
|
|
17
|
+
# @param [Relaton::Bipm::DataFetcher] data_fetcher data fetcher
|
|
18
|
+
#
|
|
19
|
+
def self.parse(data_fetcher)
|
|
20
|
+
new(data_fetcher).parse
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Parse SI brochure and write them to YAML files
|
|
25
|
+
#
|
|
26
|
+
def parse # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
27
|
+
# metanorma site generate writes per-document outputs into a subdirectory
|
|
28
|
+
# named after the source path (e.g. _site/documents/si-brochure/3.01/
|
|
29
|
+
# si-brochure-en.rxl). The legacy top-level *.rxl glob is kept for
|
|
30
|
+
# backwards compatibility with any older flow that flattened outputs.
|
|
31
|
+
si_brochure_rxls.each do |f|
|
|
32
|
+
puts "Parsing #{f}"
|
|
33
|
+
xml = File.read(f, encoding: "UTF-8")
|
|
34
|
+
xml = xml.force_encoding("UTF-8") if xml.encoding != Encoding::UTF_8
|
|
35
|
+
item1 = Bibdata.from_xml(xml)
|
|
36
|
+
# Workaround for relaton-bib Version#content bug: whitespace between
|
|
37
|
+
# legacy <revision-date>/<draft> children gets captured as @content,
|
|
38
|
+
# blocking the legacy-fold path. Clear it so the getter recomputes.
|
|
39
|
+
item1.version.each do |v|
|
|
40
|
+
c = v.instance_variable_get(:@content)
|
|
41
|
+
next unless c.is_a?(Array) || (c.is_a?(String) && c.strip.empty?)
|
|
42
|
+
v.instance_variable_set(:@content, nil)
|
|
43
|
+
end
|
|
44
|
+
@data_fetcher.errors[:si_brochure_title] &&= item1.title.empty?
|
|
45
|
+
@data_fetcher.errors[:si_brochure_docidentifier] &&= item1.docidentifier.empty?
|
|
46
|
+
unless has_committee_contributor?(item1)
|
|
47
|
+
contribs = extract_editorialgroup(xml)
|
|
48
|
+
contribs.each { |c| item1.contributor << c }
|
|
49
|
+
end
|
|
50
|
+
fix_si_brochure_id item1
|
|
51
|
+
basename = File.join @data_fetcher.output, File.basename(f).sub(/(?:-(?:en|fr))?\.rxl$/, "")
|
|
52
|
+
outfile = "#{basename}.#{@data_fetcher.ext}"
|
|
53
|
+
# Index by the primary docidentifier content ("BIPM SI Brochure 9e
|
|
54
|
+
# v3.01 (2019/2024, E)"), which `Pubid::Bipm` parses — unlike the bare
|
|
55
|
+
# `docnumber` ("SI Brochure 9e …", no "BIPM" prefix), which it rejects.
|
|
56
|
+
key = primary_id(item1) || item1.docnumber || basename
|
|
57
|
+
@data_fetcher.add_to_index key, outfile
|
|
58
|
+
item =
|
|
59
|
+
if File.exist? outfile
|
|
60
|
+
warn_duplicate = false
|
|
61
|
+
item2 = Item.from_yaml File.read(outfile, encoding: "UTF-8")
|
|
62
|
+
fix_si_brochure_id item2
|
|
63
|
+
hash1 = YAML.safe_load item1.to_yaml
|
|
64
|
+
hash2 = YAML.safe_load item2.to_yaml
|
|
65
|
+
Item.from_yaml deep_merge(hash1, hash2).to_yaml
|
|
66
|
+
else
|
|
67
|
+
warn_duplicate = true
|
|
68
|
+
item1
|
|
69
|
+
end
|
|
70
|
+
@data_fetcher.write_file outfile, item, warn_duplicate: warn_duplicate
|
|
71
|
+
puts "Saved to #{outfile}"
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# @return [Array<String>] paths to SI Brochure RXL files. Looks at the
|
|
77
|
+
# legacy flat layout first, then the metanorma-cli subdirectory layout
|
|
78
|
+
# (`<source_path_without_'sources'>/<doc>.rxl`) used by current
|
|
79
|
+
# `metanorma site generate` output.
|
|
80
|
+
#
|
|
81
|
+
def si_brochure_rxls
|
|
82
|
+
flat = Dir["bipm-si-brochure/_site/documents/*.rxl"]
|
|
83
|
+
return flat if flat.any?
|
|
84
|
+
|
|
85
|
+
Dir["bipm-si-brochure/_site/documents/**/si-brochure-{en,fr}.rxl"]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
#
|
|
89
|
+
# Update ID of SI brochure
|
|
90
|
+
#
|
|
91
|
+
# @param [ItemData] item bibliographic item
|
|
92
|
+
#
|
|
93
|
+
# @return [void]
|
|
94
|
+
#
|
|
95
|
+
def fix_si_brochure_id(item)
|
|
96
|
+
# isbn = hash["docid"].detect { |id| id["type"] == "ISBN" }
|
|
97
|
+
# num = isbn && isbn["id"] == "978-92-822-2272-0" ? "SI Brochure" : "SI Brochure, Appendix 4"
|
|
98
|
+
|
|
99
|
+
update_id item
|
|
100
|
+
|
|
101
|
+
prid = primary_id item
|
|
102
|
+
if item.docnumber
|
|
103
|
+
item.docnumber.sub!(/^Brochure(?:\sConcise|\sFAQ)?$/i, prid.sub(/^BIPM\s/, ""))
|
|
104
|
+
else
|
|
105
|
+
item.docnumber = prid.sub(/^BIPM\s/, "")
|
|
106
|
+
end
|
|
107
|
+
item.id = prid.gsub(/[,\s-]/, "")
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def update_id(item)
|
|
111
|
+
item.docidentifier.each do |id|
|
|
112
|
+
next unless id.type == "BIPM" && id.content&.match?(/BIPM Brochure/i)
|
|
113
|
+
|
|
114
|
+
id.primary = true
|
|
115
|
+
id.content.sub!(/(?<=^BIPM\s)(Brochure)/i, "SI \\1")
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def primary_id(item)
|
|
120
|
+
item.docidentifier.detect do |id|
|
|
121
|
+
id.primary && (id.language == "en" || id.language.nil?)
|
|
122
|
+
end.content
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def has_committee_contributor?(item)
|
|
126
|
+
item.contributor.any? do |c|
|
|
127
|
+
c.role.any? { |r| r.description.any? { |d| d.content == "committee" } }
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def extract_editorialgroup(xml)
|
|
132
|
+
doc = Nokogiri::XML(xml)
|
|
133
|
+
doc.xpath("//editorialgroup/committee").map do |committee|
|
|
134
|
+
acronym = committee["acronym"]
|
|
135
|
+
names = committee.xpath("variant").map do |v|
|
|
136
|
+
Relaton::Bib::TypedLocalizedString.new(
|
|
137
|
+
content: v.text, language: v["language"], script: v["script"],
|
|
138
|
+
)
|
|
139
|
+
end
|
|
140
|
+
subdiv = Relaton::Bib::Subdivision.new(
|
|
141
|
+
type: "committee", name: names,
|
|
142
|
+
abbreviation: Relaton::Bib::LocalizedString.new(content: acronym),
|
|
143
|
+
)
|
|
144
|
+
bipm_name = [Relaton::Bib::TypedLocalizedString.new(content: acronym)]
|
|
145
|
+
org = Relaton::Bib::Organization.new(name: bipm_name, subdivision: [subdiv])
|
|
146
|
+
desc = Relaton::Bib::LocalizedMarkedUpString.new(content: "committee")
|
|
147
|
+
role = Relaton::Bib::Contributor::Role.new(type: "author", description: [desc])
|
|
148
|
+
Relaton::Bib::Contributor.new(organization: org, role: [role])
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
#
|
|
153
|
+
# Deep merge two hashes
|
|
154
|
+
#
|
|
155
|
+
# @param [Hash] hash1
|
|
156
|
+
# @param [Hash] hash2
|
|
157
|
+
#
|
|
158
|
+
# @return [Hash] Merged hash
|
|
159
|
+
#
|
|
160
|
+
def deep_merge(hash1, hash2) # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
|
161
|
+
hash1.merge(hash2) do |_, oldval, newval|
|
|
162
|
+
if oldval.is_a?(Hash) && newval.is_a?(Hash)
|
|
163
|
+
deep_merge(oldval, newval)
|
|
164
|
+
elsif oldval.is_a?(Array) && newval.is_a?(Array)
|
|
165
|
+
(oldval + newval).uniq { |i| downcase_all i }
|
|
166
|
+
else
|
|
167
|
+
newval || oldval
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
#
|
|
173
|
+
# Downcase all values in hash or array
|
|
174
|
+
#
|
|
175
|
+
# @param [Array, Hash, String] content hash, array or string
|
|
176
|
+
#
|
|
177
|
+
# @return [Array, Hash, String] hash, array or string with downcased values
|
|
178
|
+
#
|
|
179
|
+
def downcase_all(content)
|
|
180
|
+
case content
|
|
181
|
+
when Hash then content.transform_values { |v| downcase_all v }
|
|
182
|
+
when Array then content.map { |v| downcase_all v }
|
|
183
|
+
when String then content.downcase
|
|
184
|
+
else content
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
data/lib/relaton/bipm.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require "zip"
|
|
2
|
+
require "fileutils"
|
|
3
|
+
require "parslet"
|
|
4
|
+
require "relaton/bib"
|
|
5
|
+
require "relaton/index"
|
|
6
|
+
require "relaton/core"
|
|
7
|
+
require "pubid"
|
|
8
|
+
require_relative "version"
|
|
9
|
+
require_relative "bipm/util"
|
|
10
|
+
require_relative "bipm/id_parser"
|
|
11
|
+
require_relative "bipm/item_data"
|
|
12
|
+
require_relative "bipm/model/item"
|
|
13
|
+
require_relative "bipm/model/bibitem"
|
|
14
|
+
require_relative "bipm/model/bibdata"
|
|
15
|
+
require_relative "bipm/bibliography"
|
|
16
|
+
|
|
17
|
+
module Relaton
|
|
18
|
+
module Bipm
|
|
19
|
+
class Error < StandardError; end
|
|
20
|
+
|
|
21
|
+
# The runtime index is the pubid-backed `index-v2` (`_type: pubid:bipm:*`).
|
|
22
|
+
# The legacy bespoke `{group,type,number,year}` `index-v1` is still published
|
|
23
|
+
# by `relaton-data-bipm`'s crawler (using the retained `Relaton::Bipm::Id`),
|
|
24
|
+
# but this flavor no longer reads or writes it.
|
|
25
|
+
INDEXFILE = "index-v2".freeze
|
|
26
|
+
|
|
27
|
+
# Returns hash of gems versions used to generate the data model.
|
|
28
|
+
# @return [String]
|
|
29
|
+
def grammar_hash
|
|
30
|
+
# gem_path = File.expand_path "..", __dir__
|
|
31
|
+
# grammars_path = File.join gem_path, "grammars", "*"
|
|
32
|
+
# grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
|
|
33
|
+
Digest::MD5.hexdigest Relaton::VERSION # grammars
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
extend self
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton::Bsi
|
|
4
|
+
# Class methods for search ISO standards.
|
|
5
|
+
class Bibliography
|
|
6
|
+
# pubid identifier types referenced when navigating the parsed object graph.
|
|
7
|
+
Ids = ::Pubid::Bsi::Identifiers
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
# @param text [String]
|
|
11
|
+
# @return [Relaton::Bsi::HitCollection]
|
|
12
|
+
def search(text, year = nil)
|
|
13
|
+
code = text.sub(/^BSI\s/, "").sub(/ExComm|Expert commentary/, "Ex")
|
|
14
|
+
HitCollection.search(code, year)
|
|
15
|
+
rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET,
|
|
16
|
+
EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
|
|
17
|
+
Net::ProtocolError, Algolia::AlgoliaUnreachableHostError => e
|
|
18
|
+
raise Relaton::RequestError, e.message
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#
|
|
22
|
+
# @param code [String] the BSI standard Code to look up
|
|
23
|
+
# @param year [String] the year the standard was published (optional)
|
|
24
|
+
# @param opts [Hash] options
|
|
25
|
+
# @option opts [Boolean] :all_parts if all-parts reference is required
|
|
26
|
+
# @option opts [Boolean] :no_year if last published document is required
|
|
27
|
+
#
|
|
28
|
+
# @return [String] Relaton XML serialisation of reference
|
|
29
|
+
def get(code, year = nil, opts = {})
|
|
30
|
+
year ||= publication_year(code)
|
|
31
|
+
ret = bib_get(code, year, opts)
|
|
32
|
+
return nil if ret.nil?
|
|
33
|
+
|
|
34
|
+
ret = ret.to_most_recent_reference unless year || opts[:keep_year]
|
|
35
|
+
ret
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Parse a BSI reference with pubid. An unrecognized reference raises;
|
|
39
|
+
# like ISO and 3GPP we let it propagate -- relaton-cli rescues
|
|
40
|
+
# Pubid::Errors::Error and renders "... is not a recognized standards
|
|
41
|
+
# identifier". A catalogue hit code is a different case: `Hit#pubid`
|
|
42
|
+
# rescues, because one odd Algolia row must not abort the search.
|
|
43
|
+
# @param [String] code document identifier
|
|
44
|
+
# @return [Pubid::Bsi::Identifier]
|
|
45
|
+
# @raise [Pubid::Errors::ParseError]
|
|
46
|
+
def parse(code)
|
|
47
|
+
::Pubid::Bsi::Identifier.parse(code)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Publication year of a reference's base document.
|
|
51
|
+
# @param [String] code document identifier
|
|
52
|
+
# @return [String, nil]
|
|
53
|
+
def publication_year(code)
|
|
54
|
+
year_of parse(code)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Whether a query and a candidate hit denote the same BSI document, at the
|
|
58
|
+
# fuzziness the hit filter asks for. Built entirely on pubid: `base_document`
|
|
59
|
+
# peels supplements/wrappers, `matches?` compares ignoring the publication
|
|
60
|
+
# date, and the `Amendment`/`Corrigendum` `#supplement_type`, `#number` and
|
|
61
|
+
# `#year` supply the amendment type, number and year.
|
|
62
|
+
#
|
|
63
|
+
# @param query [Pubid::Bsi::Identifier]
|
|
64
|
+
# @param hit [Pubid::Bsi::Identifier]
|
|
65
|
+
# @param skip_rest [Boolean] ignore the free-text suffix (ExComm / Flex version)
|
|
66
|
+
# @param drop_amd [Boolean] reduce the hit to its base document before
|
|
67
|
+
# matching, so a query for the base document matches a catalogue entry
|
|
68
|
+
# that only exists in amended form (the returned id is de-amended too)
|
|
69
|
+
# @return [Boolean]
|
|
70
|
+
def same_reference?(query, hit, skip_rest: false, drop_amd: false)
|
|
71
|
+
hit = hit.base_document if drop_amd
|
|
72
|
+
|
|
73
|
+
base_match?(query, hit) &&
|
|
74
|
+
same_supplement?(supplement_of(query), supplement_of(hit)) &&
|
|
75
|
+
(skip_rest || rest_marker(query) == rest_marker(hit))
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
# The year of the dated document at the root of a reference. pubid holds
|
|
81
|
+
# an adopted standard (`BS EN ISO 8848:2021`) in `base`, so its
|
|
82
|
+
# `base_document.year` is nil; `#root` reaches the dated document for
|
|
83
|
+
# every form, on the pubid before that change and after it.
|
|
84
|
+
# @param id [Pubid::Bsi::Identifier, nil]
|
|
85
|
+
# @return [String, nil]
|
|
86
|
+
def year_of(id)
|
|
87
|
+
id&.root&.year&.to_s
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Same base document, ignoring the publication date. `:month` is excluded
|
|
91
|
+
# alongside `:date` because Flex identifiers store the month separately, so
|
|
92
|
+
# `exclude(:date)` alone leaves them unequal.
|
|
93
|
+
def base_match?(query, hit)
|
|
94
|
+
query.base_document.matches?(hit.base_document, ignore: %i[date month])
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# The `Amendment`/`Corrigendum` supplement of a reference, if any — peeling
|
|
98
|
+
# an Expert-commentary wrapper first. Both supplements expose
|
|
99
|
+
# `#supplement_type`, `#number` and `#year`.
|
|
100
|
+
def supplement_of(id)
|
|
101
|
+
while id.is_a?(Ids::ExpertCommentary)
|
|
102
|
+
inner = id.base
|
|
103
|
+
break if inner.nil? || inner.equal?(id)
|
|
104
|
+
|
|
105
|
+
id = inner
|
|
106
|
+
end
|
|
107
|
+
return nil unless id.respond_to?(:identifiers) && id.identifiers
|
|
108
|
+
|
|
109
|
+
id.identifiers.find { |i| i.respond_to?(:supplement_type) }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Same supplement, with the amendment year treated as optional when the
|
|
113
|
+
# query omits it (a query for "…+A2" matches a hit for "…+A2:2020").
|
|
114
|
+
def same_supplement?(query_supp, hit_supp)
|
|
115
|
+
return hit_supp.nil? if query_supp.nil?
|
|
116
|
+
return false if hit_supp.nil?
|
|
117
|
+
|
|
118
|
+
query_supp.supplement_type == hit_supp.supplement_type &&
|
|
119
|
+
supplement_number(query_supp) == supplement_number(hit_supp) &&
|
|
120
|
+
(supplement_year(query_supp).nil? ||
|
|
121
|
+
supplement_year(query_supp) == supplement_year(hit_supp))
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# The number and the year of a supplement. pubid removes the
|
|
125
|
+
# `#supplement_number` / `#supplement_year` aliases and stores the values
|
|
126
|
+
# in `#number` / `#year`. An older pubid still answers the aliases and
|
|
127
|
+
# leaves `#number` / `#year` nil, so the alias wins while it exists.
|
|
128
|
+
# TODO: read `#number` / `#year` directly once pubid `main` has no alias.
|
|
129
|
+
def supplement_number(supp)
|
|
130
|
+
supp.respond_to?(:supplement_number) ? supp.supplement_number : supp.number
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def supplement_year(supp)
|
|
134
|
+
supp.respond_to?(:supplement_year) ? supp.supplement_year : supp.year
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Canonical marker for the free-text suffix pubid parses into a typed
|
|
138
|
+
# wrapper (so an `ExComm` query matches an `Expert Commentary` hit).
|
|
139
|
+
def rest_marker(id)
|
|
140
|
+
return :expert_commentary if id.is_a?(Ids::ExpertCommentary)
|
|
141
|
+
return :"flex_#{id.edition}" if id.is_a?(Ids::Flex) && id.edition
|
|
142
|
+
|
|
143
|
+
nil
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def fetch_ref_err(_code, year, missed_years)
|
|
147
|
+
unless missed_years.empty?
|
|
148
|
+
Util.info "There was no match for `#{year}`, though there " \
|
|
149
|
+
"were matches found for `#{missed_years.join('`, `')}`."
|
|
150
|
+
end
|
|
151
|
+
nil
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
#
|
|
155
|
+
# Search for a BSI standard.
|
|
156
|
+
#
|
|
157
|
+
# @param [String] code the BSI standard Code to look up
|
|
158
|
+
#
|
|
159
|
+
# @return [Relaton::Bsi::HitCollection] a collection of hits
|
|
160
|
+
#
|
|
161
|
+
def search_filter(code)
|
|
162
|
+
query = parse(code)
|
|
163
|
+
Util.info "Fetching from shop.bsigroup.com ...", key: code
|
|
164
|
+
search(code).filter_hits!(query)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Sort through the results, and return the first result that matches the
|
|
168
|
+
# code and matches the year (if provided), and which has a title.
|
|
169
|
+
# If no match, returns any years which caused mismatch, for error reporting.
|
|
170
|
+
def results_filter(result, year)
|
|
171
|
+
missed_years = []
|
|
172
|
+
result.each do |r|
|
|
173
|
+
# The hit's own parse: a kept hit always parsed, and its base
|
|
174
|
+
# document's year is the same after a `drop_amd` rewrite.
|
|
175
|
+
pyear = year_of r.pubid
|
|
176
|
+
return { ret: r.item } if (!year || year == pyear) && r.item
|
|
177
|
+
|
|
178
|
+
missed_years << pyear
|
|
179
|
+
end
|
|
180
|
+
{ years: missed_years }
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def bib_get(code, year, _opts)
|
|
184
|
+
result = search_filter(code) || return
|
|
185
|
+
ret = results_filter(result, year)
|
|
186
|
+
if ret[:ret]
|
|
187
|
+
Util.info "Found: `#{ret[:ret].docidentifier.first&.content}`", key: code
|
|
188
|
+
ret[:ret]
|
|
189
|
+
else
|
|
190
|
+
Util.info "Not found", key: code
|
|
191
|
+
fetch_ref_err(code, year, ret[:years])
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton::Bsi
|
|
4
|
+
# Hit.
|
|
5
|
+
class Hit < Relaton::Core::Hit
|
|
6
|
+
attr_writer :fetch
|
|
7
|
+
|
|
8
|
+
# Parse page.
|
|
9
|
+
# @return [Relaton::Bsi::ItemData]
|
|
10
|
+
def item
|
|
11
|
+
@item ||= Scraper.parse_page self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# The hit's reference parsed with pubid, memoized so the (up to three) hit
|
|
15
|
+
# filter passes don't re-parse it. `nil` when pubid can't parse the code:
|
|
16
|
+
# the Algolia catalogue carries codes like `BS 381C SET:1996 (R2002)`, and
|
|
17
|
+
# one such row must not abort the search. (A malformed *query* raises; see
|
|
18
|
+
# `Bibliography.parse`.)
|
|
19
|
+
# @return [Pubid::Bsi::Identifier, nil]
|
|
20
|
+
def pubid
|
|
21
|
+
return @pubid if defined?(@pubid)
|
|
22
|
+
|
|
23
|
+
@pubid = Bibliography.parse(hit[:code])
|
|
24
|
+
rescue StandardError
|
|
25
|
+
@pubid = nil
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "algolia"
|
|
4
|
+
require_relative "hit"
|
|
5
|
+
|
|
6
|
+
module Relaton::Bsi
|
|
7
|
+
# Page of hit collection.
|
|
8
|
+
class HitCollection < Relaton::Core::HitCollection
|
|
9
|
+
DOMAIN = "https://shop.bsigroup.com"
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
# Initialize a new HitCollection object and perform search.
|
|
13
|
+
#
|
|
14
|
+
# @param ref [String] reference
|
|
15
|
+
# @param year [String] year
|
|
16
|
+
#
|
|
17
|
+
# @return [Relaton::Bsi::HitCollection] hit collection
|
|
18
|
+
#
|
|
19
|
+
def self.search(ref, year = nil)
|
|
20
|
+
new(ref, year).search
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Perform search.
|
|
25
|
+
# @return [self] hit collection
|
|
26
|
+
def search
|
|
27
|
+
resp = algolia_index.search ref # , facetFilters: "product_type:standard"
|
|
28
|
+
@array = create_hits resp[:hits]
|
|
29
|
+
self
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
# Algolia index.
|
|
34
|
+
#
|
|
35
|
+
# @return [Algolia::Search::Index] Algolia index
|
|
36
|
+
#
|
|
37
|
+
|
|
38
|
+
def algolia_index
|
|
39
|
+
@algolia_index ||= begin
|
|
40
|
+
config = Algolia::Search::Config.new(
|
|
41
|
+
application_id: "575YE157G9",
|
|
42
|
+
api_key: "a057b4e74099445df2eddb7940828a10",
|
|
43
|
+
)
|
|
44
|
+
client = Algolia::Search::Client.new config, logger: ::Logger.new($stderr)
|
|
45
|
+
client.init_index "shopify_products"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Filter the search results for a BSI standard.
|
|
51
|
+
#
|
|
52
|
+
# @param [Pubid::Bsi::Identifier] query the parsed query reference
|
|
53
|
+
#
|
|
54
|
+
# @return [self] filtered search results
|
|
55
|
+
#
|
|
56
|
+
def filter_hits!(query)
|
|
57
|
+
hits = filter query
|
|
58
|
+
hits = filter query, skip_rest: true if hits.empty?
|
|
59
|
+
hits = filter query, drop_amd: true if hits.empty?
|
|
60
|
+
@array = hits
|
|
61
|
+
self
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Create hits from search results.
|
|
68
|
+
#
|
|
69
|
+
# @param hits [Array<Hash>] search results
|
|
70
|
+
#
|
|
71
|
+
# @return [Array<Relaton::Bsi::Hit>] hits
|
|
72
|
+
#
|
|
73
|
+
def create_hits(hits) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
74
|
+
hits.each_with_object([]) do |h, obj|
|
|
75
|
+
next unless h[:meta][:global][:publishedDate]
|
|
76
|
+
|
|
77
|
+
code = h[:meta][:global][:primaryDesignator]
|
|
78
|
+
code = code.is_a?(Array) ? code.first : code
|
|
79
|
+
code.sub!(/\s?(?:LOOSELEAF|\(A5 LAMINATED\)|-\s?TC$)/, "")
|
|
80
|
+
obj << Hit.new(
|
|
81
|
+
{
|
|
82
|
+
code: code,
|
|
83
|
+
title: h[:title],
|
|
84
|
+
url: h[:handle],
|
|
85
|
+
date: h[:meta][:global][:publishedDate],
|
|
86
|
+
publisher: h[:meta][:global][:publisher],
|
|
87
|
+
status: h[:meta][:global][:status],
|
|
88
|
+
ics: h[:meta][:global][:icsCodesAlgoliaStringArray],
|
|
89
|
+
doctype: h[:product_type],
|
|
90
|
+
}, self
|
|
91
|
+
)
|
|
92
|
+
end.sort_by { |h| h.hit[:date] }.reverse
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
#
|
|
96
|
+
# Select hits that match the query reference.
|
|
97
|
+
#
|
|
98
|
+
# @param [Pubid::Bsi::Identifier] query the parsed query reference
|
|
99
|
+
# @param [Boolean] drop_amd match base documents only (ignore supplements)
|
|
100
|
+
# @param [Boolean] skip_rest ignore the free-text suffix (ExComm / Flex version)
|
|
101
|
+
#
|
|
102
|
+
def filter(query, drop_amd: false, skip_rest: false)
|
|
103
|
+
@array.select do |i|
|
|
104
|
+
hit = i.pubid or next false
|
|
105
|
+
match = Bibliography.same_reference?(query, hit, skip_rest: skip_rest, drop_amd: drop_amd)
|
|
106
|
+
# When matching base documents only, drop the amendment from the hit's
|
|
107
|
+
# rendered id too, so the returned reference is the base document.
|
|
108
|
+
i.hit[:code] = hit.base_document.to_s if drop_amd && match
|
|
109
|
+
match
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Bsi
|
|
3
|
+
class ItemData < Iso::ItemData
|
|
4
|
+
def create_id(without_date: false)
|
|
5
|
+
docid = docidentifier.find(&:primary) || docidentifier.first
|
|
6
|
+
return unless docid
|
|
7
|
+
|
|
8
|
+
id_content = without_date ? docid.content.sub(/:\d{4}$/, "") : docid.content
|
|
9
|
+
self.id = id_content.gsub(/\W+/, "")
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|