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,24 @@
|
|
|
1
|
+
module Relaton::Logger
|
|
2
|
+
class Pool
|
|
3
|
+
extend Forwardable
|
|
4
|
+
def_delegators :@loggers, :[], :[]=, :size, :each
|
|
5
|
+
|
|
6
|
+
attr_accessor :loggers
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@loggers = {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def unknown(message = nil, progname = nil, **args, &block)
|
|
13
|
+
@loggers.each { |_, logger| logger.send(__callee__, message, progname, **args, &block) }
|
|
14
|
+
nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
%i[fatal error warn info debug].each { |m| alias_method m, :unknown }
|
|
18
|
+
|
|
19
|
+
def truncate
|
|
20
|
+
@loggers.each { |_, logger| logger.truncate }
|
|
21
|
+
nil
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "forwardable"
|
|
4
|
+
require "logger"
|
|
5
|
+
require_relative "version"
|
|
6
|
+
require_relative "logger/log"
|
|
7
|
+
require_relative "logger/log_device"
|
|
8
|
+
require_relative "logger/pool"
|
|
9
|
+
require_relative "logger/formatter_string"
|
|
10
|
+
require_relative "logger/formatter_json"
|
|
11
|
+
require_relative "logger/config"
|
|
12
|
+
require_relative "logger/channels/gh_issue"
|
|
13
|
+
|
|
14
|
+
module Relaton
|
|
15
|
+
def self.logger_pool
|
|
16
|
+
Logger.configuration.logger_pool
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Nist
|
|
3
|
+
class Bibliography
|
|
4
|
+
extend Core::DateParser
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
#
|
|
8
|
+
# Search NIST documents by reference
|
|
9
|
+
#
|
|
10
|
+
# @param text [String] reference
|
|
11
|
+
#
|
|
12
|
+
# @return [Relaton::Nist::HitCollection] search result
|
|
13
|
+
#
|
|
14
|
+
def search(text, year = nil, opts = {})
|
|
15
|
+
ref = text.sub(/^NISTIR/, "NIST IR").sub(/\/Add/, " Add")
|
|
16
|
+
# pubid 2.x only recognizes the addendum marker with a trailing
|
|
17
|
+
# period, and only splits an uppercase part letter — canonicalize
|
|
18
|
+
# both ("800-38a Add" -> "800-38A Add.") so @reference parses to the
|
|
19
|
+
# same pubid the index/CSRC carry.
|
|
20
|
+
ref = ref.sub(/\bAdd\b\.?/i, "Add.").sub(/([0-9])([a-z])(?=\s+Add\.)/) { "#{$1}#{$2.upcase}" }
|
|
21
|
+
HitCollection.search ref, year, opts
|
|
22
|
+
rescue OpenURI::HTTPError, SocketError, OpenSSL::SSL::SSLError => e
|
|
23
|
+
raise Relaton::RequestError, e.message
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# Get NIST document by reference
|
|
28
|
+
#
|
|
29
|
+
# @param code [String] the NIST standard Code to look up
|
|
30
|
+
# @param year [String] the year the standard was published (optional)
|
|
31
|
+
# @param opts [Hash] options
|
|
32
|
+
# @option opts [Boolean] :all_parts restricted to all parts
|
|
33
|
+
#
|
|
34
|
+
# @return [Relaton::Nist::ItemData, nil] bibliographic item
|
|
35
|
+
#
|
|
36
|
+
def get(code, year = nil, opts = {}) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
37
|
+
return fetch_ref_err(code, year, []) if code.match?(/\sEP$/)
|
|
38
|
+
|
|
39
|
+
/^(?<code2>[^(]+)(?:\((?<date2>\w+\s(?:\d{2},\s)?\d{4})\))?\s?\(?(?:(?<=\()(?<stage>(?:I|F|\d)PD))?/ =~ code
|
|
40
|
+
stage ||= /(?<=\.)PD-\w+(?=\.)/.match(code)&.to_s
|
|
41
|
+
if code2
|
|
42
|
+
code = code2.strip
|
|
43
|
+
opts[:date] = parse_date(date2, str: false) if date2
|
|
44
|
+
opts[:stage] = stage if stage
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
if year.nil?
|
|
48
|
+
/^(?<code1>[^:]+):(?<year1>[^:]+)$/ =~ code
|
|
49
|
+
unless code1.nil?
|
|
50
|
+
code = code1
|
|
51
|
+
year = year1
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
code += "-1" if opts[:all_parts]
|
|
56
|
+
nistbib_get(code, year, opts)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# Get NIST document by reference
|
|
63
|
+
#
|
|
64
|
+
# @param [String] code reference
|
|
65
|
+
# @param [String] year year
|
|
66
|
+
# @param [Hash] opts options
|
|
67
|
+
#
|
|
68
|
+
# @return [Relaton::Nist::ItemData, nil] bibliographic item
|
|
69
|
+
#
|
|
70
|
+
def nistbib_get(code, year, opts)
|
|
71
|
+
result = nistbib_search_filter(code, year, opts) || (return nil)
|
|
72
|
+
ret = nistbib_results_filter(result, year, opts)
|
|
73
|
+
if ret[:ret]
|
|
74
|
+
Util.info "Found: `#{ret[:ret].docidentifier.first.content}`", key: result.reference
|
|
75
|
+
ret[:ret]
|
|
76
|
+
else
|
|
77
|
+
fetch_ref_err(result.reference, year, ret[:years])
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#
|
|
82
|
+
# Sort through results, return first match by code, year, and title
|
|
83
|
+
#
|
|
84
|
+
# @param opts [Hash] options
|
|
85
|
+
# @option opts [Date] :date date filter
|
|
86
|
+
# @option opts [String] :stage stage filter
|
|
87
|
+
#
|
|
88
|
+
# @return [Hash] result
|
|
89
|
+
#
|
|
90
|
+
def nistbib_results_filter(result, year, opts)
|
|
91
|
+
missed_years = []
|
|
92
|
+
iteration = parse_iteration(opts[:stage])
|
|
93
|
+
|
|
94
|
+
# A stageless query means "the published document". Multiple
|
|
95
|
+
# editions can match once stage is excluded (e.g. a final "r2"
|
|
96
|
+
# and its draft "Rev. 2 ipd"), so try published hits before
|
|
97
|
+
# drafts. An explicit stage keeps the original order. Stable
|
|
98
|
+
# partition preserves existing tie-order among finals.
|
|
99
|
+
ordered = if iteration
|
|
100
|
+
result.array
|
|
101
|
+
else
|
|
102
|
+
result.array.sort_by.with_index { |h, i| [draft_hit?(h) ? 1 : 0, i] }
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
ordered.each do |h|
|
|
106
|
+
r = h.item
|
|
107
|
+
next if opts[:date] && !match_date?(r, opts[:date])
|
|
108
|
+
next if iteration && r.status&.iteration != iteration
|
|
109
|
+
return { ret: r } unless year
|
|
110
|
+
next unless match_year?(r, year) { |y| missed_years << y }
|
|
111
|
+
|
|
112
|
+
return { ret: r }
|
|
113
|
+
end
|
|
114
|
+
{ years: missed_years }
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# A hit is a draft when its CSRC status says so (e.g. "draft-public")
|
|
118
|
+
# or its rendered code carries a PD stage marker (ipd/fpd/NpD).
|
|
119
|
+
def draft_hit?(hit)
|
|
120
|
+
hit.hit[:status].to_s.include?("draft") ||
|
|
121
|
+
hit.hit[:code].to_s.match?(/(?:\bi|\bf|\b\d)pd\b|\(Draft\)/i)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def parse_iteration(stage)
|
|
125
|
+
iter = /\w+(?=PD)|(?<=PD-)\w+/.match(stage)&.to_s
|
|
126
|
+
case iter
|
|
127
|
+
when "I" then "1"
|
|
128
|
+
when "F" then "final"
|
|
129
|
+
else iter
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def match_date?(item, date)
|
|
134
|
+
item.date.any? do |d|
|
|
135
|
+
date_val = d.at || d.from
|
|
136
|
+
date_val && parse_date(date_val.to_s, str: false) == date
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def match_year?(item, year)
|
|
141
|
+
item.date.select { |d| d.type == "published" || d.type == "issued" }.each do |d|
|
|
142
|
+
date_val = d.at || d.from
|
|
143
|
+
next unless date_val
|
|
144
|
+
|
|
145
|
+
parsed_year = parse_date(date_val.to_s, str: false)&.year
|
|
146
|
+
return parsed_year if year.to_i == parsed_year
|
|
147
|
+
|
|
148
|
+
yield parsed_year if block_given?
|
|
149
|
+
end
|
|
150
|
+
nil
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
#
|
|
154
|
+
# Get search results and filter them by code and year
|
|
155
|
+
#
|
|
156
|
+
# @param code [String] reference
|
|
157
|
+
# @param year [String, nil] year
|
|
158
|
+
# @param opts [Hash] options
|
|
159
|
+
#
|
|
160
|
+
# @return [Relaton::Nist::HitCollection] hits collection
|
|
161
|
+
#
|
|
162
|
+
def nistbib_search_filter(code, year, opts)
|
|
163
|
+
result = search(code, year, opts)
|
|
164
|
+
result.search_filter
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
#
|
|
168
|
+
# Outputs warning message if no match found
|
|
169
|
+
#
|
|
170
|
+
# @param [String] ref reference
|
|
171
|
+
# @param [String, nil] year year
|
|
172
|
+
# @param [Array<String>] missed_years missed years
|
|
173
|
+
#
|
|
174
|
+
# @return [nil] nil
|
|
175
|
+
#
|
|
176
|
+
def fetch_ref_err(ref, year, missed_years)
|
|
177
|
+
Util.info "Not found.", key: ref
|
|
178
|
+
unless missed_years.empty?
|
|
179
|
+
Util.info "(There was no match for #{year}, though there " \
|
|
180
|
+
"were matches found for `#{missed_years.join('`, `')}`.)", key: ref
|
|
181
|
+
end
|
|
182
|
+
if /\d-\d/.match? ref
|
|
183
|
+
Util.info "The provided document part may not exist, " \
|
|
184
|
+
"or the document may no longer be published in parts.", key: ref
|
|
185
|
+
end
|
|
186
|
+
nil
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Nist
|
|
3
|
+
class CommentPeriod < Lutaml::Model::Serializable
|
|
4
|
+
attribute :from, :date
|
|
5
|
+
attribute :to, :date
|
|
6
|
+
attribute :extended, :date
|
|
7
|
+
|
|
8
|
+
xml do
|
|
9
|
+
map_element "from", to: :from
|
|
10
|
+
map_element "to", to: :to
|
|
11
|
+
map_element "extended", to: :extended
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "yaml"
|
|
4
|
+
require "mechanize"
|
|
5
|
+
require "loc_mods"
|
|
6
|
+
require_relative "../nist"
|
|
7
|
+
require_relative "mods_parser"
|
|
8
|
+
|
|
9
|
+
module Relaton
|
|
10
|
+
module Nist
|
|
11
|
+
class DataFetcher < Core::DataFetcher
|
|
12
|
+
RELEASES_URL = "https://github.com/usnistgov/NIST-Tech-Pubs/releases"
|
|
13
|
+
MODS_ASSET = "allrecords-MODS.xml"
|
|
14
|
+
|
|
15
|
+
def fetch(source = nil)
|
|
16
|
+
FileUtils.rm Dir[File.join(@output, "*.#{@ext}")]
|
|
17
|
+
fetch_tech_pubs source
|
|
18
|
+
# add_static_files
|
|
19
|
+
index.save
|
|
20
|
+
report_errors
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def fetch_tech_pubs(source = nil)
|
|
24
|
+
xml_data = Mechanize.new.get(source_url(source)).body
|
|
25
|
+
docs = LocMods::Collection.from_xml xml_data
|
|
26
|
+
docs.mods.each { |doc| write_file ModsParser.new(doc, series, @errors).parse }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Build the MODS download URL for a NIST-Tech-Pubs release. With no tag
|
|
30
|
+
# (nil, blank, or "latest") use GitHub's `latest/download` redirect so new
|
|
31
|
+
# releases are picked up automatically by the crawler; a concrete tag
|
|
32
|
+
# (e.g. "June2026") pins that specific release.
|
|
33
|
+
def source_url(source = nil)
|
|
34
|
+
tag = source.to_s.strip
|
|
35
|
+
path = tag.empty? || tag.casecmp?("latest") ? "latest/download" : "download/#{tag}"
|
|
36
|
+
"#{RELEASES_URL}/#{path}/#{MODS_ASSET}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def write_file(bib)
|
|
40
|
+
id = bib.docidentifier.find(&:primary) || bib.docidentifier.first
|
|
41
|
+
unless id
|
|
42
|
+
failures << "Document skipped: no identifier (#{document_label(bib)})"
|
|
43
|
+
return
|
|
44
|
+
end
|
|
45
|
+
# Distinct docids can sanitize to one filename; take a path of our own
|
|
46
|
+
# rather than overwriting the other document (Core#unique_output_file).
|
|
47
|
+
docid = id.content.sub(/^NIST IR/, "NISTIR")
|
|
48
|
+
file = unique_output_file docid
|
|
49
|
+
if @files.include? file
|
|
50
|
+
# Same reserved path == same docid: a genuine duplicate. Checked FIRST,
|
|
51
|
+
# because a disambiguated path stays != output_file forever.
|
|
52
|
+
Util.warn "File #{file} exists. Docid: #{id.content}"
|
|
53
|
+
elsif file != output_file(docid)
|
|
54
|
+
Util.warn "File #{output_file docid} exists. Docid: #{id.content}. Writing #{file} instead."
|
|
55
|
+
end
|
|
56
|
+
@files << file
|
|
57
|
+
pid = pubid id.content
|
|
58
|
+
if pid
|
|
59
|
+
index.add_or_update pid, file
|
|
60
|
+
else
|
|
61
|
+
failures << "Unparseable id `#{id.content}` was not indexed (#{file})"
|
|
62
|
+
end
|
|
63
|
+
File.write file, serialize(bib), encoding: "UTF-8"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# A human-readable label for a bib with no usable docidentifier, so the
|
|
67
|
+
# skipped record is identifiable in the reported error.
|
|
68
|
+
def document_label(bib)
|
|
69
|
+
Array(bib.title).map(&:content).compact.reject(&:empty?).first || "unknown title"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Parse a docidentifier string into a Pubid::Nist::Identifier, or nil if
|
|
73
|
+
# pubid can't parse it — so a single bad id never aborts the crawl or
|
|
74
|
+
# corrupts index-v2. The caller records the failure (see #write_file) so
|
|
75
|
+
# #report_errors can surface it as a tracked GitHub issue.
|
|
76
|
+
def pubid(id)
|
|
77
|
+
::Pubid::Nist::Identifier.parse id
|
|
78
|
+
rescue StandardError
|
|
79
|
+
nil
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Per-document failures (unparseable ids, identifier-less records)
|
|
83
|
+
# collected during the crawl and surfaced by #report_errors.
|
|
84
|
+
def failures
|
|
85
|
+
@failures ||= []
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Surface accumulated per-document failures through the shared error
|
|
89
|
+
# machinery (the "Error fetching documents" GitHub issue in CI) so they
|
|
90
|
+
# are visible and tracked, not a hard crash or a silent stderr warning.
|
|
91
|
+
# The gh_issue channel is registered inside #report_errors, so emit these
|
|
92
|
+
# at :error (via #log_error) after it is set up and before super creates
|
|
93
|
+
# the issue.
|
|
94
|
+
def report_errors
|
|
95
|
+
gh_issue
|
|
96
|
+
failures.each { |msg| log_error msg }
|
|
97
|
+
super
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# def add_static_files
|
|
101
|
+
# Dir["./static/*.yaml"].each do |file|
|
|
102
|
+
# bib = Item.from_yaml(File.read(file, encoding: "UTF-8"))
|
|
103
|
+
# index.add_or_update bib.docidentifier[0].content, file
|
|
104
|
+
# end
|
|
105
|
+
# end
|
|
106
|
+
|
|
107
|
+
def to_yaml(bib)
|
|
108
|
+
Item.to_yaml(bib)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def to_xml(bib)
|
|
112
|
+
Bibdata.to_xml(bib)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def to_bibxml(bib)
|
|
116
|
+
bib.to_rfcxml
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def log_error(msg)
|
|
120
|
+
Util.error msg
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def index
|
|
124
|
+
@index ||= Relaton::Index.find_or_create(
|
|
125
|
+
:nist, file: "#{INDEXFILE}.yaml", pubid_class: ::Pubid::Nist::Identifier
|
|
126
|
+
)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def series
|
|
130
|
+
@series ||= YAML.load_file File.expand_path("series.yaml", __dir__)
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Nist
|
|
3
|
+
# NIST document identifier backed by a parsed Pubid::Nist::Identifier.
|
|
4
|
+
#
|
|
5
|
+
# Mirrors the CCSDS/IEC flavors (lib/relaton/ccsds/model/docidentifier.rb,
|
|
6
|
+
# lib/relaton/iec/model/docidentifier.rb): the lutaml `content` stays a plain
|
|
7
|
+
# string for serialization, while the parsed pubid is kept in `@pubid` so the
|
|
8
|
+
# base class's abstract structural mutators (`remove_part!`, `remove_date!`,
|
|
9
|
+
# `to_all_parts!`) can edit the identifier graph and re-render.
|
|
10
|
+
#
|
|
11
|
+
# NIST-specific caveats:
|
|
12
|
+
# - **A pubid is only adopted when it round-trips.** A NIST DOI such as
|
|
13
|
+
# `NIST.SP.800-162` is itself a valid NIST pubid in dotted MR form, but it
|
|
14
|
+
# must serialize verbatim (its `:human` render is `NIST SP 800-162`). So
|
|
15
|
+
# `content=` keeps the parsed pubid only when `pubid.to_s(:human)` equals
|
|
16
|
+
# the input; otherwise the raw string is preserved. This test is
|
|
17
|
+
# type-independent, so it holds no matter what order lutaml assigns
|
|
18
|
+
# `content`/`type` on `from_xml`/`from_yaml` (unlike a `type == "NIST"`
|
|
19
|
+
# gate, which sees a nil `type` on the YAML setter-ordering path).
|
|
20
|
+
# - **The date lives in the `edition` component, not a `:date` attribute.**
|
|
21
|
+
# NIST has no single date field (`year`/`month` scalars are nil on the
|
|
22
|
+
# common parse paths); a publication year is carried as the edition id
|
|
23
|
+
# (`FIPS 46e1977`) or its trailing `additional_text` (`NBS CIRC 11e2.1915`).
|
|
24
|
+
# So `remove_date!` clears the scalar date fields *and* the edition's
|
|
25
|
+
# year component, while preserving non-year editions/revisions (`r5`, `e2`).
|
|
26
|
+
# Dates carried in the `update` component (some NBS supplements) are left
|
|
27
|
+
# intact — `update` also encodes non-date update codes (`/Upd2`).
|
|
28
|
+
# - **No `(all parts)` marker in `content`.** `content` is live-derived
|
|
29
|
+
# from `@pubid` (see below), so `to_all_parts!` freezes the already
|
|
30
|
+
# part+date+stage-stripped rendering into `@raw_content` before
|
|
31
|
+
# wrapping `@pubid` — matching IEC/CCSDS. `#pubid` itself, read
|
|
32
|
+
# directly, now answers `all_parts? == true` and renders WITH pubid's
|
|
33
|
+
# generic "(all parts)" marker, since it's the wrapper.
|
|
34
|
+
class Docidentifier < Bib::Docidentifier
|
|
35
|
+
attribute :content, :string
|
|
36
|
+
|
|
37
|
+
attr_reader :pubid
|
|
38
|
+
|
|
39
|
+
YEAR = /\A\d{4}\z/
|
|
40
|
+
|
|
41
|
+
def initialize(arg = nil, **kwargs)
|
|
42
|
+
arg.is_a?(Hash) ? super(arg) : super(**kwargs)
|
|
43
|
+
# `super` normally runs `content=` via lutaml's attribute application; the
|
|
44
|
+
# re-run is a fallback for construction paths that skip it (so the value
|
|
45
|
+
# is parsed exactly once in the common case).
|
|
46
|
+
raw = arg.is_a?(Hash) ? (arg["content"] || arg[:content]) : kwargs[:content]
|
|
47
|
+
self.content = raw if raw && @pubid.nil? && @raw_content.nil?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
alias_method :original_content=, :content=
|
|
51
|
+
alias_method :original_content, :content
|
|
52
|
+
|
|
53
|
+
def content=(value)
|
|
54
|
+
@pubid = nil
|
|
55
|
+
@raw_content = nil
|
|
56
|
+
|
|
57
|
+
parsed = value.is_a?(::Pubid::Nist::Identifier) ? value : parse_pubid(value)
|
|
58
|
+
|
|
59
|
+
# Adopt the pubid only when it renders back to the exact input, so
|
|
60
|
+
# non-canonical forms (DOIs) are preserved as the raw string.
|
|
61
|
+
if parsed && (!value.is_a?(::String) || parsed.to_s(format: :human) == value)
|
|
62
|
+
@pubid = parsed
|
|
63
|
+
elsif value.is_a?(::String)
|
|
64
|
+
@raw_content = value
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
send(:original_content=, to_s)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def content
|
|
71
|
+
return @raw_content if @raw_content
|
|
72
|
+
return @pubid.to_s(format: :human) if @pubid
|
|
73
|
+
|
|
74
|
+
original_content
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def to_s
|
|
78
|
+
content.to_s
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# `#exclude` (no args) clones the whole graph (incl. a supplement's
|
|
82
|
+
# base), since `walk_chain` mutates it in place. `@raw_content` freezes
|
|
83
|
+
# the stripped rendering — `content` is live from `@pubid`, and the
|
|
84
|
+
# wrapper would otherwise add pubid's generic "(all parts)" marker,
|
|
85
|
+
# which pubid-nist itself never has. `identifiers` then keeps the
|
|
86
|
+
# ORIGINAL part/date/stage, not the stripped working copy.
|
|
87
|
+
def to_all_parts!
|
|
88
|
+
return if !@pubid || @pubid.all_parts?
|
|
89
|
+
|
|
90
|
+
original = @pubid.exclude
|
|
91
|
+
remove_part!
|
|
92
|
+
remove_date!
|
|
93
|
+
remove_stage!
|
|
94
|
+
@raw_content = to_s
|
|
95
|
+
@pubid = original.to_all_parts
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def remove_part!
|
|
99
|
+
walk_chain { |node| clear_part_on(node) }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def remove_stage!
|
|
103
|
+
walk_chain { |node| node.stage = nil if node.respond_to?(:stage=) }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def remove_date!
|
|
107
|
+
walk_chain { |node| clear_date_on(node) }
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
private
|
|
111
|
+
|
|
112
|
+
def parse_pubid(value)
|
|
113
|
+
return nil unless value.is_a?(::String) && !value.empty?
|
|
114
|
+
|
|
115
|
+
::Pubid::Nist::Identifier.parse(value)
|
|
116
|
+
rescue StandardError
|
|
117
|
+
Util.warn "Failed to parse Pubid: #{value}"
|
|
118
|
+
nil
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Apply a mutation to the top pubid and every identifier down the
|
|
122
|
+
# `base` chain (only SupplementIdentifier exposes the chain; a
|
|
123
|
+
# plain identifier returns nil and the walk terminates after one pass).
|
|
124
|
+
def walk_chain
|
|
125
|
+
return unless @pubid
|
|
126
|
+
|
|
127
|
+
node = @pubid
|
|
128
|
+
while node
|
|
129
|
+
yield node
|
|
130
|
+
node = node.respond_to?(:base) ? node.base : nil
|
|
131
|
+
end
|
|
132
|
+
refresh_content!
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def clear_part_on(pubid)
|
|
136
|
+
pubid.part = nil if pubid.respond_to?(:part=)
|
|
137
|
+
pubid.parts = nil if pubid.respond_to?(:parts=)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# NIST spreads the date across scalar fields (mostly nil in practice) and
|
|
141
|
+
# the edition component. Clear the scalars, then strip a year that rides on
|
|
142
|
+
# the edition: a trailing year suffix (`e2.1915` -> `e2`) or a whole
|
|
143
|
+
# bare-year edition (`e1977`/`r2001` -> gone), while leaving numbered
|
|
144
|
+
# editions and revisions (`e2`, `r5`) intact.
|
|
145
|
+
def clear_date_on(pubid)
|
|
146
|
+
%i[year month revision_year revision_month edition_year update_year]
|
|
147
|
+
.each { |f| pubid.send("#{f}=", nil) if pubid.respond_to?("#{f}=") }
|
|
148
|
+
|
|
149
|
+
return unless pubid.respond_to?(:edition) && (ed = pubid.edition)
|
|
150
|
+
|
|
151
|
+
if ed.respond_to?(:additional_text) && ed.additional_text.to_s.match?(YEAR)
|
|
152
|
+
ed.additional_text = nil
|
|
153
|
+
end
|
|
154
|
+
return unless ed.respond_to?(:id) && ed.id.to_s.match?(YEAR) &&
|
|
155
|
+
(!ed.respond_to?(:additional_text) || ed.additional_text.nil?)
|
|
156
|
+
|
|
157
|
+
pubid.edition = nil if pubid.respond_to?(:edition=)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def refresh_content!
|
|
161
|
+
send(:original_content=, to_s)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
require_relative "comment_period"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Nist
|
|
6
|
+
class Ext < Bib::Ext
|
|
7
|
+
attribute :doctype, Doctype
|
|
8
|
+
attribute :commentperiod, CommentPeriod
|
|
9
|
+
|
|
10
|
+
xml { map_element "commentperiod", to: :commentperiod }
|
|
11
|
+
key_value { map_element "commentperiod", to: :commentperiod }
|
|
12
|
+
|
|
13
|
+
def get_schema_version = Relaton.schema_versions["relaton-model-nist"]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Nist
|
|
5
|
+
class Hit < Core::Hit
|
|
6
|
+
attr_writer :item
|
|
7
|
+
|
|
8
|
+
#
|
|
9
|
+
# Parse page.
|
|
10
|
+
#
|
|
11
|
+
# @return [Relaton::Nist::ItemData] bibliographic item
|
|
12
|
+
#
|
|
13
|
+
def item
|
|
14
|
+
@item ||= Scraper.parse_page @hit
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|