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,196 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "hit"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Iso
|
|
7
|
+
# Page of hit collection.
|
|
8
|
+
class HitCollection < Relaton::Core::HitCollection
|
|
9
|
+
ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-iso/v2/"
|
|
10
|
+
|
|
11
|
+
def opts
|
|
12
|
+
@opts ||= {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Maps the legacy 1.x exclude symbols to their pubid 2.x attribute
|
|
16
|
+
# names. The public excludings API still uses :year/:iteration for
|
|
17
|
+
# backwards compatibility with existing call sites and specs.
|
|
18
|
+
LEGACY_EXCLUDE_MAP = { year: :date, iteration: :stage_iteration }.freeze
|
|
19
|
+
private_constant :LEGACY_EXCLUDE_MAP
|
|
20
|
+
|
|
21
|
+
def translate_excludings(attrs)
|
|
22
|
+
out = attrs.map { |a| LEGACY_EXCLUDE_MAP[a] || a }
|
|
23
|
+
# Excluding :stage implies excluding :typed_stage too — the two
|
|
24
|
+
# carry overlapping data and their default-published values can
|
|
25
|
+
# differ in trivia (e.g. original_abbr "" vs nil), so leaving
|
|
26
|
+
# typed_stage in the comparison breaks otherwise-equal matches.
|
|
27
|
+
out << :typed_stage if out.include?(:stage) && !out.include?(:typed_stage)
|
|
28
|
+
out
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# `ref` itself when it is a plain identifier; the wrapped member when an
|
|
32
|
+
# all-parts request wrapped it. pubid's `==` is class-strict, so
|
|
33
|
+
# comparing against index rows (always plain identifiers) needs this
|
|
34
|
+
# unwrapped form — `ref.root` would over-unwrap a supplement's own
|
|
35
|
+
# `.base` chain, which this must leave intact.
|
|
36
|
+
def ref_document
|
|
37
|
+
ref.all_parts? ? ref.identifiers.first : ref
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def ref_pubid_no_year
|
|
41
|
+
@ref_pubid_no_year ||=
|
|
42
|
+
if ref_document.base
|
|
43
|
+
ref_document.dup.tap { |r| r.base = r.base.exclude(:date) }
|
|
44
|
+
else
|
|
45
|
+
ref_document.exclude(:date)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def ref_pubid_excluded
|
|
50
|
+
return @ref_pubid_excluded if defined? @ref_pubid_excluded
|
|
51
|
+
|
|
52
|
+
ref_excludings = translate_excludings(excludings) + [:all_parts]
|
|
53
|
+
@ref_pubid_excluded ||= ref_pubid_no_year.exclude(*ref_excludings)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
# Find all the entries that match the given reference.
|
|
58
|
+
#
|
|
59
|
+
# @return [Array<Relaton::Iso::Hit>] hits
|
|
60
|
+
#
|
|
61
|
+
def find # rubocop:disable Metrics/AbcSize
|
|
62
|
+
# Pass `ref` (a Pubid::Identifier, not a String) so the index can
|
|
63
|
+
# narrow candidates by number via binary search before applying the
|
|
64
|
+
# block, instead of a full O(n) scan of every row. Every row's `:id`
|
|
65
|
+
# is already a Pubid::Identifier — Relaton::Index deserialized it via
|
|
66
|
+
# the `pubid_class` passed in `#index` — so `pubid_match?` compares
|
|
67
|
+
# Pubid to Pubid directly.
|
|
68
|
+
@array = index.search(ref) do |row|
|
|
69
|
+
pubid_match?(row[:id])
|
|
70
|
+
end.map { |row| Hit.new row, self }
|
|
71
|
+
# An all-parts query drops :part from the match, so multiple rows can
|
|
72
|
+
# resolve to the same pubid; collapse them so each part appears once.
|
|
73
|
+
@array.uniq! { |h| h.pubid.to_s } if ref.all_parts
|
|
74
|
+
# Most-recent first (pubid string desc ~ year desc), then float
|
|
75
|
+
# published-stage ids above drafts. An undated query excludes :stage
|
|
76
|
+
# when matching, so a future draft (e.g. ISO/AWI) matches alongside the
|
|
77
|
+
# published edition; without this the draft would sort first lexically
|
|
78
|
+
# ("ISO/AWI …" > "ISO …") and be returned by fetch_doc's `first`. The
|
|
79
|
+
# index id carries no lifecycle status, so the parsed stage is the only
|
|
80
|
+
# signal available here. partition is stable, preserving the year order
|
|
81
|
+
# within each group.
|
|
82
|
+
@array.sort_by! { |h| h.pubid.to_s }.reverse!
|
|
83
|
+
published, drafts = @array.partition do |h|
|
|
84
|
+
h.pubid && default_published_stage?(h.pubid)
|
|
85
|
+
end
|
|
86
|
+
@array = published + drafts
|
|
87
|
+
self
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def pubid_match?(pubid)
|
|
91
|
+
match_excludings = translate_excludings(excludings) + [:all_parts]
|
|
92
|
+
match_excludings << :edition unless pubid.typed_stage&.abbr&.include?("DIR")
|
|
93
|
+
# Only the candidate is built via .create (from the index) and so may
|
|
94
|
+
# carry a compound part; `ref_pubid_no_year` is always a parsed pubid,
|
|
95
|
+
# already split, so it needs no normalization.
|
|
96
|
+
cand = normalize_compound_part(exclude_id_attrs(pubid, *match_excludings))
|
|
97
|
+
cand == exclude_id_attrs(ref_pubid_no_year, *match_excludings)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @TODO TEMP WORKAROUND (pubid 2.x migration): the v1-generated index
|
|
101
|
+
# stores a compound part such as "5-1-3" in :part with no :subpart, and
|
|
102
|
+
# Relaton::Index builds each row via Pubid::Iso::Identifier.from_hash(id),
|
|
103
|
+
# which keeps it as part="5-1-3" subpart=nil. A parsed query splits it
|
|
104
|
+
# (part="5", subpart="1-3"), so the two never compare equal. Re-split the
|
|
105
|
+
# compound part on the first dash to mirror parse before comparing.
|
|
106
|
+
# `exclude` returns a fresh instance, so mutating this copy is safe.
|
|
107
|
+
# Remove once pubid create() splits compound parts itself.
|
|
108
|
+
def normalize_compound_part(pubid)
|
|
109
|
+
num = pubid.part.to_s
|
|
110
|
+
return pubid unless pubid.subpart.nil? && num.include?("-")
|
|
111
|
+
|
|
112
|
+
pubid.part, pubid.subpart = num.split("-", 2)
|
|
113
|
+
pubid
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def exclude_id_attrs(pubid, *attrs)
|
|
117
|
+
xid = pubid.exclude(*attrs)
|
|
118
|
+
curr = xid
|
|
119
|
+
while curr.base
|
|
120
|
+
curr.base = curr.base.exclude(*attrs)
|
|
121
|
+
curr = curr.base
|
|
122
|
+
end
|
|
123
|
+
xid
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def excludings # rubocop:disable Metrics/AbcSize
|
|
127
|
+
return @excludings if defined? @excludings
|
|
128
|
+
|
|
129
|
+
excl_attrs = %i[year]
|
|
130
|
+
excl_attrs << :part if ref.root.part.nil? || ref.all_parts
|
|
131
|
+
# `ref_document` (not `ref`), since an all-parts-wrapped `ref`'s own
|
|
132
|
+
# `typed_stage` is never set (always nil) — reading it directly would
|
|
133
|
+
# answer "no stage specified" for the wrapper regardless of the real
|
|
134
|
+
# underlying document's stage. Correct today only because this is
|
|
135
|
+
# OR'd with `ref.all_parts` (already true whenever wrapped).
|
|
136
|
+
if default_published_stage?(ref_document) || ref.all_parts
|
|
137
|
+
excl_attrs << :stage
|
|
138
|
+
excl_attrs << :iteration
|
|
139
|
+
end
|
|
140
|
+
@excludings = excl_attrs
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Pubid 2.x auto-populates a published-stage default on parse/.create,
|
|
144
|
+
# so ref.stage is never nil. Treat that default as "no stage specified".
|
|
145
|
+
def default_published_stage?(pubid)
|
|
146
|
+
return true if pubid.typed_stage.nil?
|
|
147
|
+
|
|
148
|
+
pubid.typed_stage.stage_code.to_s == "published"
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def index
|
|
152
|
+
@index ||= Relaton::Index.find_or_create(
|
|
153
|
+
:iso,
|
|
154
|
+
url: "#{ENDPOINT}#{INDEXFILE}.zip",
|
|
155
|
+
file: "#{INDEXFILE}.yaml",
|
|
156
|
+
pubid_class: ::Pubid::Iso::Identifier,
|
|
157
|
+
)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def fetch_doc(options = {})
|
|
161
|
+
@excludings = nil if options != opts
|
|
162
|
+
@opts = options
|
|
163
|
+
|
|
164
|
+
if !ref.all_parts || size == 1
|
|
165
|
+
any? && first.item # (opts[:lang])
|
|
166
|
+
else
|
|
167
|
+
to_all_parts
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# @return [RelatonIsoBib::IsoBibliographicItem, nil]
|
|
172
|
+
def to_all_parts # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
|
|
173
|
+
parts = @array.select { |h| h.pubid.part }
|
|
174
|
+
if opts[:publication_date_before] || opts[:publication_date_after]
|
|
175
|
+
parts = parts.select { |h| Bibliography.send(:year_in_range?, (h.pubid.date&.year || h.hit[:year]).to_i, opts) }
|
|
176
|
+
end
|
|
177
|
+
hit = parts.min_by { |h| h.pubid.part.to_i }
|
|
178
|
+
return @array.first&.item unless hit
|
|
179
|
+
|
|
180
|
+
bibitem = hit.item
|
|
181
|
+
all_parts_item = bibitem.to_all_parts
|
|
182
|
+
@array.reject { |h| h.pubid.part == hit.pubid.part }.each do |hi|
|
|
183
|
+
all_parts_item.relation << create_relation(hi)
|
|
184
|
+
end
|
|
185
|
+
all_parts_item
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def create_relation(hit)
|
|
189
|
+
# pubid = Pubid.new hit.pubid
|
|
190
|
+
docid = Docidentifier.new(content: hit.pubid, type: "ISO", primary: true)
|
|
191
|
+
isobib = ItemData.new(formattedref: Bib::Formattedref.new(content: hit.pubid.to_s), docidentifier: [docid])
|
|
192
|
+
Relation.new(type: "instanceOf", bibitem: isobib)
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class ItemData < Bib::ItemData
|
|
4
|
+
def create_id(without_date: false)
|
|
5
|
+
docid = docidentifier.find(&:primary) || docidentifier.first
|
|
6
|
+
return unless docid
|
|
7
|
+
|
|
8
|
+
if docid.content.is_a?(String)
|
|
9
|
+
create_id_from_string(docid.content, without_date)
|
|
10
|
+
else
|
|
11
|
+
create_id_from_pubid(docid.content, without_date)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# These item-level transforms rewrite every docidentifier in place
|
|
16
|
+
# (all-parts / date removal). That can collapse the `iso-undated`
|
|
17
|
+
# entry onto the primary, so re-run the same de-dup the builders apply
|
|
18
|
+
# at construction time (see DataParser#undated_docid).
|
|
19
|
+
def to_all_parts
|
|
20
|
+
drop_redundant_undated_docid(super)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def to_most_recent_reference
|
|
24
|
+
drop_redundant_undated_docid(super)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def drop_redundant_undated_docid(item)
|
|
30
|
+
primary = item.docidentifier.find(&:primary)
|
|
31
|
+
return item unless primary
|
|
32
|
+
|
|
33
|
+
item.docidentifier = item.docidentifier.reject do |d|
|
|
34
|
+
!d.primary && d.type == "iso-undated" && d.to_s == primary.to_s
|
|
35
|
+
end
|
|
36
|
+
item
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def create_id_from_string(content, without_date)
|
|
40
|
+
pubid = without_date ? content.sub(/:\d{4}$/, "") : content
|
|
41
|
+
self.id = pubid.gsub(/\W+/, "")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def create_id_from_pubid(content, without_date)
|
|
45
|
+
pubid = without_date ? content.exclude(:year) : content
|
|
46
|
+
self.id = pubid.to_s.gsub(/\W+/, "")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
require_relative "../type/pubid"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Iso
|
|
5
|
+
class Docidentifier < Bib::Docidentifier
|
|
6
|
+
attribute :content, Type::Pubid
|
|
7
|
+
|
|
8
|
+
attr_reader :pubid
|
|
9
|
+
|
|
10
|
+
def initialize(arg = nil, **kwargs)
|
|
11
|
+
arg.is_a?(Hash) ? super(arg) : super(**kwargs)
|
|
12
|
+
# Content may have been set before type during lutaml init. Re-run
|
|
13
|
+
# the setter so type-dependent parsing (e.g. iso-tc bypass) applies.
|
|
14
|
+
raw = arg.is_a?(Hash) ? (arg["content"] || arg[:content]) : kwargs[:content]
|
|
15
|
+
self.content = raw if raw
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
alias_method :original_content=, :content=
|
|
19
|
+
alias_method :original_content, :content
|
|
20
|
+
|
|
21
|
+
def content=(value)
|
|
22
|
+
@pubid = nil
|
|
23
|
+
@raw_content = nil
|
|
24
|
+
|
|
25
|
+
if type == "iso-tc" && value.is_a?(String)
|
|
26
|
+
@raw_content = value
|
|
27
|
+
else
|
|
28
|
+
parsed =
|
|
29
|
+
case value
|
|
30
|
+
when ::Pubid::Iso::Identifier then value
|
|
31
|
+
when String
|
|
32
|
+
begin
|
|
33
|
+
::Pubid::Iso::Identifier.parse(value)
|
|
34
|
+
rescue StandardError
|
|
35
|
+
# Suppress when type is not yet set (lutaml runs the setter
|
|
36
|
+
# once during init before `type` is assigned, then `initialize`
|
|
37
|
+
# re-runs it; only the second pass is authoritative).
|
|
38
|
+
Util.warn "Failed to parse Pubid: #{value}" if type
|
|
39
|
+
nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if parsed
|
|
44
|
+
@pubid = parsed
|
|
45
|
+
# TC committee documents have a canonical spelling ("… N1110")
|
|
46
|
+
# that pubid renders with a space ("… N 1110"). Preserve the
|
|
47
|
+
# source string (same intent as the iso-tc bypass) while keeping
|
|
48
|
+
# the parsed pubid for any structural operations.
|
|
49
|
+
if value.is_a?(String) && parsed.is_a?(::Pubid::Iso::Identifiers::TcDocument)
|
|
50
|
+
@raw_content = value
|
|
51
|
+
end
|
|
52
|
+
elsif value.is_a?(String)
|
|
53
|
+
@raw_content = value
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
send(:original_content=, to_s)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def content
|
|
61
|
+
return @raw_content if @raw_content
|
|
62
|
+
return render_pubid(@pubid) if @pubid
|
|
63
|
+
|
|
64
|
+
original_content
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def to_s
|
|
68
|
+
content.to_s
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# `remove_part!`/`remove_date!` are unnecessary here: `to_all_parts`'s
|
|
72
|
+
# own identity computation already excludes part/date (down the whole
|
|
73
|
+
# base chain, so a supplement's own year is dropped too — a disclosed
|
|
74
|
+
# pubid behavior change, not a bug; see spec/iso/…/docidentifier_spec.rb
|
|
75
|
+
# "#to_all_parts!"). `remove_stage!` stays: stage isn't one of the
|
|
76
|
+
# attributes pubid's `all_parts_edition_keys` strips.
|
|
77
|
+
def to_all_parts!
|
|
78
|
+
return unless @pubid
|
|
79
|
+
|
|
80
|
+
remove_stage!
|
|
81
|
+
@pubid = @pubid.to_all_parts
|
|
82
|
+
refresh_content!
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def remove_stage!
|
|
86
|
+
remove_attr!(:stage)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def remove_part!
|
|
90
|
+
remove_attr!(:part)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def remove_date!
|
|
94
|
+
remove_attr!(:date)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def exclude_year
|
|
98
|
+
return @raw_content if @raw_content
|
|
99
|
+
return nil unless @pubid
|
|
100
|
+
|
|
101
|
+
exclude_date(@pubid)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
def render_pubid(pubid)
|
|
107
|
+
case type
|
|
108
|
+
when "URN" then pubid.to_urn
|
|
109
|
+
when "ISO" then pubid.exclude(:languages).to_s
|
|
110
|
+
when "iso-undated" then exclude_date(pubid).exclude(:languages).to_s
|
|
111
|
+
else
|
|
112
|
+
pubid.to_s
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Return a copy of +pubid+ with the year removed from it and every
|
|
117
|
+
# identifier in its `base` chain (e.g. the base of an
|
|
118
|
+
# amendment/corrigendum). The original is left untouched.
|
|
119
|
+
def exclude_date(pubid)
|
|
120
|
+
result = pubid.exclude(:date)
|
|
121
|
+
current = result
|
|
122
|
+
while current.base
|
|
123
|
+
current.base = current.base.exclude(:date)
|
|
124
|
+
current = current.base
|
|
125
|
+
end
|
|
126
|
+
result
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def remove_attr!(attr)
|
|
130
|
+
return unless @pubid
|
|
131
|
+
|
|
132
|
+
@pubid.send("#{attr}=", nil)
|
|
133
|
+
base = @pubid.base
|
|
134
|
+
while base
|
|
135
|
+
base.send("#{attr}=", nil)
|
|
136
|
+
base = base.base
|
|
137
|
+
end
|
|
138
|
+
refresh_content!
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def refresh_content!
|
|
142
|
+
send(:original_content=, to_s)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class Doctype < Bib::Doctype
|
|
4
|
+
TYPES = %w[
|
|
5
|
+
international-standard technical-specification technical-report publicly-available-specification
|
|
6
|
+
international-workshop-agreement guide recommendation amendment technical-corrigendum directive
|
|
7
|
+
committee-document addendum supplement extract
|
|
8
|
+
].freeze
|
|
9
|
+
|
|
10
|
+
attribute :content, :string, values: TYPES
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
require_relative "stagename"
|
|
3
|
+
require_relative "structured_identifier"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Iso
|
|
7
|
+
class Ext < Bib::Ext
|
|
8
|
+
attribute :doctype, Doctype
|
|
9
|
+
attribute :structuredidentifier, StructuredIdentifier
|
|
10
|
+
attribute :horizontal, :boolean
|
|
11
|
+
attribute :stagename, Stagename
|
|
12
|
+
attribute :updates_document_type, :string, values: Doctype::TYPES
|
|
13
|
+
attribute :fast_track, :boolean
|
|
14
|
+
attribute :price_code, :string
|
|
15
|
+
|
|
16
|
+
def get_schema_version = Relaton.schema_versions["relaton-model-iso"]
|
|
17
|
+
|
|
18
|
+
xml do
|
|
19
|
+
map_element "horizontal", to: :horizontal
|
|
20
|
+
map_element "stagename", to: :stagename
|
|
21
|
+
map_element "updates-document-type", to: :updates_document_type
|
|
22
|
+
map_element "fast-track", to: :fast_track
|
|
23
|
+
map_element "price-code", to: :price_code
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
key_value do
|
|
27
|
+
map_element "horizontal", to: :horizontal
|
|
28
|
+
map_element "stagename", to: :stagename
|
|
29
|
+
map_element "updates_document_type", to: :updates_document_type
|
|
30
|
+
map_element "fast_track", to: :fast_track
|
|
31
|
+
map_element "price_code", to: :price_code
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require_relative "docidentifier"
|
|
2
|
+
require_relative "ext"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Iso
|
|
6
|
+
class Relation < Bib::Relation
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class Item < Bib::Item
|
|
10
|
+
model ItemData
|
|
11
|
+
|
|
12
|
+
attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
|
|
13
|
+
attribute :relation, Relation, collection: true, initialize_empty: true
|
|
14
|
+
attribute :ext, Ext
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative "docidentifier"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Iso
|
|
5
|
+
class ItemBase < Lutaml::Model::Serializable
|
|
6
|
+
include Bib::NamespaceHelper
|
|
7
|
+
|
|
8
|
+
attr_accessor :type
|
|
9
|
+
|
|
10
|
+
model ItemData
|
|
11
|
+
|
|
12
|
+
instance_exec(&Bib::ItemShared::ATTRIBUTES)
|
|
13
|
+
attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
|
|
14
|
+
attribute :relation, Relation, collection: true, initialize_empty: true
|
|
15
|
+
|
|
16
|
+
xml do
|
|
17
|
+
map_attribute "type", to: :type
|
|
18
|
+
instance_exec(&Bib::ItemShared::XML_BODY)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class ProjectNumber < Lutaml::Model::Serializable
|
|
4
|
+
attribute :part, :integer
|
|
5
|
+
attribute :subpart, :integer
|
|
6
|
+
attribute :amendment, :integer
|
|
7
|
+
attribute :corrigendum, :integer
|
|
8
|
+
attribute :origyr, :string
|
|
9
|
+
attribute :content, :string
|
|
10
|
+
|
|
11
|
+
xml do
|
|
12
|
+
root "project-number"
|
|
13
|
+
map_attribute "part", to: :part
|
|
14
|
+
map_attribute "subpart", to: :subpart
|
|
15
|
+
map_attribute "amendment", to: :amendment
|
|
16
|
+
map_attribute "corrigendum", to: :corrigendum
|
|
17
|
+
map_attribute "origyr", to: :origyr
|
|
18
|
+
map_content to: :content
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Iso
|
|
3
|
+
class Stagename < Lutaml::Model::Serializable
|
|
4
|
+
attribute :abbreviation, :string
|
|
5
|
+
attribute :content, :string
|
|
6
|
+
|
|
7
|
+
xml do
|
|
8
|
+
root "stagename"
|
|
9
|
+
map_attribute "abbreviation", to: :abbreviation
|
|
10
|
+
map_content to: :content
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative "project_number"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Iso
|
|
5
|
+
class StructuredIdentifier < Lutaml::Model::Serializable
|
|
6
|
+
attribute :type, :string
|
|
7
|
+
attribute :project_number, ProjectNumber
|
|
8
|
+
attribute :tc_document_number, :integer
|
|
9
|
+
|
|
10
|
+
xml do
|
|
11
|
+
root "structuredidentifier"
|
|
12
|
+
map_attribute "type", to: :type
|
|
13
|
+
map_element "project-number", to: :project_number
|
|
14
|
+
map_element "tc-document-number", to: :tc_document_number
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def remove_date!
|
|
18
|
+
project_number&.origyr = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def remove_part!
|
|
22
|
+
project_number&.part = nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def to_all_parts!
|
|
26
|
+
remove_date!
|
|
27
|
+
remove_part!
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|