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,225 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Ogc
|
|
5
|
+
class Scraper
|
|
6
|
+
TYPES = {
|
|
7
|
+
"AS" => { type: "abstract-specification-topic" },
|
|
8
|
+
"BP" => { type: "best-practice", subtype: "general" },
|
|
9
|
+
"CAN" => { type: "standard", subtype: "general", stage: "draft" },
|
|
10
|
+
"CR" => { type: "change-request-supporting-document" },
|
|
11
|
+
"CP" => { type: "community-practice" },
|
|
12
|
+
"CS" => { type: "community-standard" },
|
|
13
|
+
"DP" => { type: "discussion-paper" },
|
|
14
|
+
"DP-Draft" => { type: "discussion-paper", stage: "draft" },
|
|
15
|
+
"IPR" => { type: "engineering-report" },
|
|
16
|
+
"IS" => { type: "standard", subtype: "implementation" },
|
|
17
|
+
"ISC" => { type: "standard", subtype: "implementation" },
|
|
18
|
+
"ISx" => { type: "standard", subtype: "extension" },
|
|
19
|
+
"Notes" => { type: "other" },
|
|
20
|
+
"ORM" => { type: "reference-model" },
|
|
21
|
+
"PC" => { type: "standard", subtype: "profile" },
|
|
22
|
+
"PER" => { type: "engineering-report" },
|
|
23
|
+
"POL" => { type: "standard" },
|
|
24
|
+
"Primer" => { type: "other" },
|
|
25
|
+
"Profile" => { type: "standard", subtype: "profile" },
|
|
26
|
+
"RFC" => { type: "standard", stage: "draft" },
|
|
27
|
+
"SAP" => { type: "standard", subtype: "profile" },
|
|
28
|
+
"WhitePaper" => { type: "white-paper" },
|
|
29
|
+
"ATB" => { type: "other" },
|
|
30
|
+
"RP" => { type: "discussion-paper" },
|
|
31
|
+
}.freeze
|
|
32
|
+
|
|
33
|
+
def self.parse_page(hit, errors = Hash.new(true))
|
|
34
|
+
new(hit, errors).parse
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @param hit [Hash]
|
|
38
|
+
# @param errors [Hash]
|
|
39
|
+
def initialize(hit, errors = Hash.new(true))
|
|
40
|
+
@hit = hit
|
|
41
|
+
@errors = errors
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @return [Relaton::Ogc::ItemData]
|
|
45
|
+
def parse # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
46
|
+
type = fetch_type(@hit["type"])
|
|
47
|
+
contribs = fetch_contributor(@hit)
|
|
48
|
+
contribs << fetch_editorialgroup_contributor
|
|
49
|
+
ItemData.new(
|
|
50
|
+
type: "standard",
|
|
51
|
+
title: fetch_title(@hit["title"]),
|
|
52
|
+
docidentifier: fetch_docid(@hit["identifier"]),
|
|
53
|
+
source: fetch_link(@hit),
|
|
54
|
+
status: fetch_status(type[:stage]),
|
|
55
|
+
edition: fetch_edition(@hit["identifier"]),
|
|
56
|
+
abstract: fetch_abstract(@hit["description"]),
|
|
57
|
+
contributor: contribs,
|
|
58
|
+
language: ["en"],
|
|
59
|
+
script: ["Latn"],
|
|
60
|
+
date: fetch_date(@hit["date"]),
|
|
61
|
+
ext: Ext.new(
|
|
62
|
+
doctype: fetch_doctype(type[:type]),
|
|
63
|
+
subdoctype: type[:subtype],
|
|
64
|
+
flavor: "ogc",
|
|
65
|
+
),
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
def fetch_editorialgroup_contributor # rubocop:disable Metrics/MethodLength
|
|
72
|
+
desc = Bib::LocalizedMarkedUpString.new(content: "committee")
|
|
73
|
+
role = Bib::Contributor::Role.new(
|
|
74
|
+
type: "author", description: [desc],
|
|
75
|
+
)
|
|
76
|
+
ogc = "Open Geospatial Consortium"
|
|
77
|
+
org = Bib::Organization.new(
|
|
78
|
+
name: [Bib::TypedLocalizedString.new(content: ogc)],
|
|
79
|
+
abbreviation: Bib::LocalizedString.new(content: "OGC"),
|
|
80
|
+
subdivision: [Bib::Subdivision.new(
|
|
81
|
+
type: "technical-committee",
|
|
82
|
+
name: [Bib::TypedLocalizedString.new(content: "technical")],
|
|
83
|
+
)],
|
|
84
|
+
)
|
|
85
|
+
Bib::Contributor.new(role: [role], organization: org)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# @param title [String]
|
|
89
|
+
# @return [Array<Bib::Title>]
|
|
90
|
+
def fetch_title(title)
|
|
91
|
+
result = Bib::Title.from_string title, "en", "Latn"
|
|
92
|
+
@errors[:title] &&= result.empty?
|
|
93
|
+
result
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# @param identifier [String]
|
|
97
|
+
# @return [Array<Bib::Docidentifier>]
|
|
98
|
+
def fetch_docid(identifier)
|
|
99
|
+
@errors[:docid] &&= identifier.to_s.strip.empty?
|
|
100
|
+
id = Docidentifier.new(
|
|
101
|
+
content: identifier, type: "OGC", primary: true,
|
|
102
|
+
)
|
|
103
|
+
[id]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @param hit [Hash]
|
|
107
|
+
# @return [Array<Bib::Uri>]
|
|
108
|
+
def fetch_link(hit) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
|
|
109
|
+
link = []
|
|
110
|
+
uri = hit["URI"].to_s.strip
|
|
111
|
+
unless uri.empty?
|
|
112
|
+
link << Bib::Uri.new(type: "src", content: uri)
|
|
113
|
+
end
|
|
114
|
+
return link unless hit["URL"] && !hit["URL"].strip.empty?
|
|
115
|
+
|
|
116
|
+
type = link_type(hit["URL"])
|
|
117
|
+
link << Bib::Uri.new(type: type, content: hit["URL"].strip)
|
|
118
|
+
ensure
|
|
119
|
+
@errors[:link] &&= link.empty?
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def link_type(url)
|
|
123
|
+
ext = url.match(/(?<=\.)(?<ext>pdf|html|doc)$/)
|
|
124
|
+
return ext[:ext] if ext
|
|
125
|
+
|
|
126
|
+
case url
|
|
127
|
+
when /portal\.(ogc|opengeospatial)\.org/,
|
|
128
|
+
/usgif\.org/
|
|
129
|
+
"pdf"
|
|
130
|
+
else "html"
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @param type [String]
|
|
135
|
+
# @return [Doctype]
|
|
136
|
+
def fetch_doctype(type)
|
|
137
|
+
Doctype.new(content: type)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# @param type [String]
|
|
141
|
+
# @return [Hash]
|
|
142
|
+
def fetch_type(type)
|
|
143
|
+
TYPES[type.sub(/^D-/, "")] || { type: "other" }
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# @param stage [String, nil]
|
|
147
|
+
# @return [Bib::Status, nil]
|
|
148
|
+
def fetch_status(stage)
|
|
149
|
+
@errors[:status] &&= stage.nil?
|
|
150
|
+
return unless stage
|
|
151
|
+
|
|
152
|
+
stg = Bib::Status::Stage.new(content: stage)
|
|
153
|
+
Bib::Status.new(stage: stg)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# @param identifier [String]
|
|
157
|
+
# @return [String, nil]
|
|
158
|
+
def fetch_edition(identifier)
|
|
159
|
+
%r{(?<=r)(?<edition>\d+)$} =~ identifier
|
|
160
|
+
@errors[:edition] &&= edition.nil?
|
|
161
|
+
edition && Bib::Edition.new(content: edition)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# @param description [String]
|
|
165
|
+
# @return [Array<Bib::LocalizedMarkedUpString>]
|
|
166
|
+
def fetch_abstract(description)
|
|
167
|
+
@errors[:abstract] &&= description.to_s.strip.empty?
|
|
168
|
+
abs = Bib::Abstract.new(
|
|
169
|
+
content: description, language: "en", script: "Latn",
|
|
170
|
+
)
|
|
171
|
+
[abs]
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# @param doc [Hash]
|
|
175
|
+
# @return [Array<Bib::Contributor>]
|
|
176
|
+
def fetch_contributor(doc)
|
|
177
|
+
contribs = doc["creator"].to_s.split(", ").map do |name|
|
|
178
|
+
person_contrib name
|
|
179
|
+
end
|
|
180
|
+
contribs << org_contrib(doc["publisher"]) if doc["publisher"]
|
|
181
|
+
@errors[:contributor] &&= contribs.empty?
|
|
182
|
+
contribs
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# @param name [String]
|
|
186
|
+
# @return [Bib::Contributor]
|
|
187
|
+
def person_contrib(name)
|
|
188
|
+
Bib::Contributor.new(
|
|
189
|
+
person: Bib::Person.new(
|
|
190
|
+
name: Bib::FullName.new(
|
|
191
|
+
completename: Bib::LocalizedString.new(content: name),
|
|
192
|
+
),
|
|
193
|
+
),
|
|
194
|
+
role: [Bib::Contributor::Role.new(type: "author")],
|
|
195
|
+
)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# @param name [String]
|
|
199
|
+
# @return [Bib::Contributor]
|
|
200
|
+
def org_contrib(name)
|
|
201
|
+
Bib::Contributor.new(
|
|
202
|
+
organization: Bib::Organization.new(
|
|
203
|
+
name: [Bib::TypedLocalizedString.new(content: name)],
|
|
204
|
+
),
|
|
205
|
+
role: [Bib::Contributor::Role.new(type: "publisher")],
|
|
206
|
+
)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# @param date [String, nil]
|
|
210
|
+
# @return [Array<Bib::Date>]
|
|
211
|
+
def fetch_date(date)
|
|
212
|
+
result = if date
|
|
213
|
+
[Bib::Date.new(type: "published", at: date)]
|
|
214
|
+
else
|
|
215
|
+
[]
|
|
216
|
+
end
|
|
217
|
+
@errors[:date] &&= result.empty?
|
|
218
|
+
result
|
|
219
|
+
rescue Date::Error
|
|
220
|
+
@errors[:date] &&= true
|
|
221
|
+
[]
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
data/lib/relaton/ogc.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# pubid loads with the flavor, for the ::Pubid::Ogc::Identifier that the
|
|
2
|
+
# index code names. Processor#remove_index_file names no pubid class: the
|
|
3
|
+
# delete never reads the index (see lib/relaton/index/CLAUDE.md).
|
|
4
|
+
require "pubid"
|
|
5
|
+
require "relaton/index"
|
|
6
|
+
require "relaton/iso"
|
|
7
|
+
require_relative "version"
|
|
8
|
+
require_relative "ogc/util"
|
|
9
|
+
require_relative "ogc/item_data"
|
|
10
|
+
require_relative "ogc/item"
|
|
11
|
+
require_relative "ogc/bibitem"
|
|
12
|
+
require_relative "ogc/bibdata"
|
|
13
|
+
require_relative "ogc/hit_collection"
|
|
14
|
+
require_relative "ogc/bibliography"
|
|
15
|
+
|
|
16
|
+
module Relaton
|
|
17
|
+
module Ogc
|
|
18
|
+
INDEXFILE = "index-v2".freeze
|
|
19
|
+
class Error < StandardError; end
|
|
20
|
+
|
|
21
|
+
# Returns hash of XML reammar
|
|
22
|
+
# @return [String]
|
|
23
|
+
def self.grammar_hash
|
|
24
|
+
# gem_path = File.expand_path "..", __dir__
|
|
25
|
+
# grammars_path = File.join gem_path, "grammars", "*"
|
|
26
|
+
# grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
|
|
27
|
+
Digest::MD5.hexdigest Relaton::VERSION # grammars
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
require "net/http"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Oiml
|
|
5
|
+
module Bibliography
|
|
6
|
+
ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-oiml/main/".freeze
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
#
|
|
10
|
+
# Search for an OIML publication by its identifier.
|
|
11
|
+
#
|
|
12
|
+
# @param text [String, Pubid::Oiml::Identifier] the OIML reference to
|
|
13
|
+
# look up (e.g. "OIML R 138" or "OIML R 138:2007 (E)")
|
|
14
|
+
# @param year [String, nil] the edition year (optional; may also be
|
|
15
|
+
# embedded in the reference)
|
|
16
|
+
# @param _opts [Hash] options (unused)
|
|
17
|
+
#
|
|
18
|
+
# @return [Relaton::Oiml::Item, nil] the publication or nil if not found
|
|
19
|
+
#
|
|
20
|
+
def search(text, year = nil, _opts = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
21
|
+
pubid = text.is_a?(String) ? ::Pubid::Oiml.parse(text) : text
|
|
22
|
+
Util.info "Fetching from Relaton repository ...", key: pubid.to_s
|
|
23
|
+
row = best_row(pubid, year)
|
|
24
|
+
unless row
|
|
25
|
+
Util.info "Not found.", key: pubid.to_s
|
|
26
|
+
return
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
uri = URI("#{ENDPOINT}#{row[:file]}")
|
|
30
|
+
resp = Net::HTTP.get_response uri
|
|
31
|
+
unless resp.code == "200"
|
|
32
|
+
raise Relaton::RequestError, "Could not access #{uri}: HTTP #{resp.code}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
item = Relaton::Oiml::Item.from_yaml resp.body
|
|
36
|
+
Util.info "Found: `#{item.docidentifier.first&.content}`", key: pubid.to_s
|
|
37
|
+
item.tap { |i| i.fetched = Date.today.to_s }
|
|
38
|
+
rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
|
|
39
|
+
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
|
|
40
|
+
Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
|
|
41
|
+
Errno::ETIMEDOUT => e
|
|
42
|
+
raise Relaton::RequestError, "Could not access #{uri}: #{e.message}"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Fetch an OIML publication, suppressing the edition year for an undated
|
|
46
|
+
# citation so the designation renders undated (`OIML B 18`), the way the
|
|
47
|
+
# ISO fetcher does. A dated citation (`OIML B 18:2022`, or an explicit
|
|
48
|
+
# `year`) still pins that edition. Mirrors `Relaton::Iso::Bibliography#get`.
|
|
49
|
+
#
|
|
50
|
+
# @param opts [Hash] options
|
|
51
|
+
# @option opts [Boolean] :keep_year retain the edition year even for an
|
|
52
|
+
# undated citation (or, when false, strip it even for a dated one)
|
|
53
|
+
#
|
|
54
|
+
# @see #search
|
|
55
|
+
def get(ref, year = nil, opts = {})
|
|
56
|
+
item = search(ref, year, opts)
|
|
57
|
+
return item unless item
|
|
58
|
+
|
|
59
|
+
pubid = ref.is_a?(String) ? ::Pubid::Oiml.parse(ref) : ref
|
|
60
|
+
dated = oiml_side(pubid).year || year
|
|
61
|
+
# Keep the year only when the citation genuinely asks for it: a resolved
|
|
62
|
+
# year (unless keep_year is explicitly false), or keep_year truthy. (ISO
|
|
63
|
+
# also keeps for :all_parts; OIML has no all-parts retrieval, so search
|
|
64
|
+
# ignores opts and there is nothing to mirror here.)
|
|
65
|
+
return item if (dated && opts[:keep_year].nil?) || opts[:keep_year]
|
|
66
|
+
|
|
67
|
+
item.to_most_recent_reference
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
def index
|
|
73
|
+
Relaton::Index.find_or_create(
|
|
74
|
+
:oiml,
|
|
75
|
+
url: "#{ENDPOINT}#{INDEXFILE}.zip",
|
|
76
|
+
file: "#{INDEXFILE}.yaml",
|
|
77
|
+
pubid_class: ::Pubid::Oiml::Identifier,
|
|
78
|
+
)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# The index row for a reference: the latest edition among the rows it
|
|
82
|
+
# matches.
|
|
83
|
+
#
|
|
84
|
+
# The pubid is passed to `Index::Type#search`, so the index narrows
|
|
85
|
+
# candidates by number via binary search, and each row's `:id` is a
|
|
86
|
+
# Pubid::Oiml::Identifier (deserialized via the `pubid_class` in
|
|
87
|
+
# `#index`).
|
|
88
|
+
#
|
|
89
|
+
# A Bulletin matches exactly (`exact: true`). Its year is part of its
|
|
90
|
+
# locator, not an edition: the issue and the sequence render after the
|
|
91
|
+
# year, so the stem below reduces every article of one year to
|
|
92
|
+
# `OIML Bulletin`, and a lookup used to return any one of them.
|
|
93
|
+
#
|
|
94
|
+
# This flavor does not use pubid's subset match `===` yet. Measured
|
|
95
|
+
# over the full `relaton-data-oiml` index, `===` lets a language-less
|
|
96
|
+
# Amendment, Annex or Errata reference reach its translations
|
|
97
|
+
# (`language` is not strict), lets `OIML R 137-1 (F)` reach
|
|
98
|
+
# `OIML R 137-1-2:2012 (F)` (`subpart` is not strict), and rejects
|
|
99
|
+
# `OIML R 102:1995 Annex B-C` for `OIML R 102 Annex B-C` (the
|
|
100
|
+
# `year_on_base` render flag is compared).
|
|
101
|
+
#
|
|
102
|
+
# @param query [Pubid::Oiml::Identifier]
|
|
103
|
+
# @param year [String, nil]
|
|
104
|
+
# @return [Hash, nil] the index row (`{ id:, file: }`)
|
|
105
|
+
def best_row(query, year)
|
|
106
|
+
return index.search(query, exact: true).first if bulletin?(query)
|
|
107
|
+
|
|
108
|
+
index.search(query) { |r| pubid_match?(r[:id], query, year) }
|
|
109
|
+
.max_by { |r| oiml_side(r[:id]).year.to_i }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# @return [Boolean] true for an identifier of an OIML Bulletin
|
|
113
|
+
def bulletin?(pubid)
|
|
114
|
+
pubid.is_a?(::Pubid::Oiml::Identifiers::Bulletin)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# A document OIML co-publishes with another SDO (ISO confirmed so far)
|
|
118
|
+
# is a Pubid::Oiml::Identifiers::DualPublished — a "|"-joined pair
|
|
119
|
+
# (pubid#437), e.g. `ISO 4064-1:2024|OIML R 49-1:2024`. It delegates
|
|
120
|
+
# #root/#code/#type/#stage/#iteration/#publisher to whichever side is
|
|
121
|
+
# OIML, but NOT #year or #language — those read nil on the wrapper
|
|
122
|
+
# itself regardless of what either side holds. This unwraps to the
|
|
123
|
+
# OIML side for those reads (a plain, non-dual pubid is returned
|
|
124
|
+
# unchanged), so a query and a row agree on year/language/stem
|
|
125
|
+
# whether either one is dual-published or not, and regardless of
|
|
126
|
+
# which side print order named first.
|
|
127
|
+
#
|
|
128
|
+
# @param pubid [Pubid::Oiml::Identifier] a plain or dual-published pubid
|
|
129
|
+
# @return [Pubid::Oiml::Identifier] the OIML-flavored side (itself, for
|
|
130
|
+
# a plain pubid)
|
|
131
|
+
def oiml_side(pubid)
|
|
132
|
+
pubid.is_a?(::Pubid::Oiml::Identifiers::DualPublished) ? pubid.oiml_identifier : pubid
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Both `row_id` and `query` are Pubid::Oiml::Identifier instances.
|
|
136
|
+
# Matching is on the year/language-stripped "stem" (e.g. `OIML R 138`),
|
|
137
|
+
# which keeps the type letter and any amendment suffix — so an amendment
|
|
138
|
+
# (`OIML R 138-Amend`) never matches the base record, even though pubid
|
|
139
|
+
# does not expose the suffix as its own attribute. Language must match
|
|
140
|
+
# exactly (a language-less query targets the language-less abstract
|
|
141
|
+
# record); year is nil-tolerant so an unqualified query finds the latest
|
|
142
|
+
# edition (selected by `max_by` in #best_row). The `year` argument lets
|
|
143
|
+
# a caller pin an edition the reference string omitted.
|
|
144
|
+
def pubid_match?(row_id, query, year)
|
|
145
|
+
row = oiml_side(row_id)
|
|
146
|
+
q = oiml_side(query)
|
|
147
|
+
wanted_year = (q.year || year)&.to_s
|
|
148
|
+
stem(row) == stem(q) &&
|
|
149
|
+
row.language.to_s == q.language.to_s &&
|
|
150
|
+
(wanted_year.nil? || row.year.to_s == wanted_year)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# The identifier without its edition year or language, e.g.
|
|
154
|
+
# `OIML R 138:2007 (E)` -> `OIML R 138`. Built from pubid's own model
|
|
155
|
+
# via #exclude (returns a copy, so the cached index id is untouched)
|
|
156
|
+
# rather than string surgery on #to_s. The amendment suffix is kept, so
|
|
157
|
+
# an amendment (`OIML R 138-Amend`) never reduces to the base record.
|
|
158
|
+
#
|
|
159
|
+
# Reduced through #oiml_side first: `#exclude` recurses correctly into
|
|
160
|
+
# both sides of a DualPublished (unlike a direct #year/#language read),
|
|
161
|
+
# but a plain query has no external side to reduce to, so comparing
|
|
162
|
+
# full dual-published stems against a plain one would never match.
|
|
163
|
+
def stem(pubid)
|
|
164
|
+
oiml_side(pubid).exclude(:year, :language).to_s
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Oiml
|
|
3
|
+
class Docidentifier < Bib::Docidentifier
|
|
4
|
+
attr_reader :pubid
|
|
5
|
+
|
|
6
|
+
def initialize(attrs = {}, options = {})
|
|
7
|
+
pubid = attrs.is_a?(Hash) ? attrs.delete(:pubid) : nil
|
|
8
|
+
attrs[:content] ||= pubid.to_s if pubid
|
|
9
|
+
super
|
|
10
|
+
@pubid = pubid if pubid
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def content=(value)
|
|
14
|
+
super
|
|
15
|
+
@pubid = ::Pubid::Oiml.parse(value) if value
|
|
16
|
+
rescue StandardError
|
|
17
|
+
@pubid = nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Both mutators go through #exclude (an immutable copy) rather than
|
|
21
|
+
# mutating `@pubid` in place: for a plain identifier the two are
|
|
22
|
+
# equivalent, but for a Pubid::Oiml::Identifiers::DualPublished
|
|
23
|
+
# (pubid#437, e.g. `ISO 4064-1:2024|OIML R 49-1:2024`) a direct
|
|
24
|
+
# `@pubid.part = nil`/`@pubid.date = nil` is a silent no-op — neither
|
|
25
|
+
# attribute is delegated to either side — while `#exclude` correctly
|
|
26
|
+
# recurses into both sides. `content=` re-parses the rendered string,
|
|
27
|
+
# which resyncs `@pubid` too, so there is nothing left to reassign here.
|
|
28
|
+
def remove_part!
|
|
29
|
+
return unless @pubid
|
|
30
|
+
|
|
31
|
+
self.content = @pubid.exclude(:part).to_s
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def remove_date!
|
|
35
|
+
return unless @pubid
|
|
36
|
+
|
|
37
|
+
# Re-sync `content` from the now-dateless pubid: it is the string that
|
|
38
|
+
# actually renders (e.g. `OIML R 138`, or `OIML R 138 (E)` keeping the
|
|
39
|
+
# language). Mutating `@pubid` alone leaves the dated `content` in place.
|
|
40
|
+
self.content = @pubid.exclude(:date).to_s
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def to_all_parts!
|
|
44
|
+
@pubid &&= @pubid.to_all_parts
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Oiml
|
|
3
|
+
# OIML document types, per relaton/relaton-oiml#1. The value is carried in
|
|
4
|
+
# the inherited `content` attribute (e.g. `recommendation`). `bulletin`
|
|
5
|
+
# (the online OIML Bulletin) is listed for forward-compatibility; the
|
|
6
|
+
# dataset does not yet contain such records. The list is intentionally not
|
|
7
|
+
# enforced as an enum so unforeseen dataset values still round-trip.
|
|
8
|
+
class Doctype < Bib::Doctype
|
|
9
|
+
TYPES = %w[recommendation document guide vocabulary basic-publication
|
|
10
|
+
expert-report seminar-report translation bulletin].freeze
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Oiml
|
|
5
|
+
# OIML bibliographic item extension. Adds the OIML-specific structured
|
|
6
|
+
# metadata (relaton/relaton-oiml#2) on top of the shared Relaton::Bib::Ext.
|
|
7
|
+
# These fields are populated on the enhanced OIML Recommendations and are
|
|
8
|
+
# absent on most records; they round-trip through both XML and YAML.
|
|
9
|
+
class Ext < Bib::Ext
|
|
10
|
+
attribute :doctype, Doctype
|
|
11
|
+
attribute :scope, :string
|
|
12
|
+
attribute :quantity, :string
|
|
13
|
+
attribute :measuring_instrument, :string
|
|
14
|
+
attribute :focus_area, :string
|
|
15
|
+
attribute :sustainability_framework, :string
|
|
16
|
+
attribute :doi, :string
|
|
17
|
+
|
|
18
|
+
xml do
|
|
19
|
+
map_element "scope", to: :scope
|
|
20
|
+
map_element "quantity", to: :quantity
|
|
21
|
+
map_element "measuring_instrument", to: :measuring_instrument
|
|
22
|
+
map_element "focus_area", to: :focus_area
|
|
23
|
+
map_element "sustainability_framework", to: :sustainability_framework
|
|
24
|
+
map_element "doi", to: :doi
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
key_value do
|
|
28
|
+
map_element "scope", to: :scope
|
|
29
|
+
map_element "quantity", to: :quantity
|
|
30
|
+
map_element "measuring_instrument", to: :measuring_instrument
|
|
31
|
+
map_element "focus_area", to: :focus_area
|
|
32
|
+
map_element "sustainability_framework", to: :sustainability_framework
|
|
33
|
+
map_element "doi", to: :doi
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# No dedicated OIML (flavor) model exists yet, so the extension reuses the
|
|
37
|
+
# base Relaton::Bib behaviour and does not advertise a flavor-specific
|
|
38
|
+
# schema version. Add a `relaton-model-oiml` entry to relaton-bib's
|
|
39
|
+
# versions.json and override #schema_version here once that model lands.
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require_relative "item_data"
|
|
2
|
+
require_relative "ext"
|
|
3
|
+
require_relative "docidentifier"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Oiml
|
|
7
|
+
class Item < Bib::Item
|
|
8
|
+
model ItemData
|
|
9
|
+
|
|
10
|
+
attribute :ext, Ext
|
|
11
|
+
attribute :docidentifier, Docidentifier, collection: true,
|
|
12
|
+
initialize_empty: true
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
require_relative "relation"
|
|
18
|
+
|
|
19
|
+
Relaton::Oiml::Item.attribute :relation, Relaton::Oiml::Relation,
|
|
20
|
+
collection: true, initialize_empty: true
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Oiml
|
|
3
|
+
class ItemBase < Lutaml::Model::Serializable
|
|
4
|
+
include Bib::NamespaceHelper
|
|
5
|
+
|
|
6
|
+
attr_accessor :type
|
|
7
|
+
|
|
8
|
+
model ItemData
|
|
9
|
+
|
|
10
|
+
instance_exec(&Bib::ItemShared::ATTRIBUTES)
|
|
11
|
+
|
|
12
|
+
xml do
|
|
13
|
+
map_attribute "type", to: :type
|
|
14
|
+
instance_exec(&Bib::ItemShared::XML_BODY)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require "relaton/core/processor"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Oiml
|
|
5
|
+
class Processor < Core::Processor
|
|
6
|
+
attr_reader :idtype
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@short = :relaton_oiml
|
|
10
|
+
@prefix = "OIML"
|
|
11
|
+
@defaultprefix = %r{^OIML\s}
|
|
12
|
+
@idtype = "OIML"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @param code [String]
|
|
16
|
+
# @param date [String, nil] year
|
|
17
|
+
# @param opts [Hash]
|
|
18
|
+
# @return [Relaton::Oiml::ItemData, nil]
|
|
19
|
+
def get(code, date, opts)
|
|
20
|
+
require_relative "../oiml"
|
|
21
|
+
Bibliography.get(code, date, opts)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @param xml [String]
|
|
25
|
+
# @return [Relaton::Oiml::ItemData]
|
|
26
|
+
def from_xml(xml)
|
|
27
|
+
require_relative "../oiml"
|
|
28
|
+
Item.from_xml xml
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @param yaml [String]
|
|
32
|
+
# @return [Relaton::Oiml::ItemData]
|
|
33
|
+
def from_yaml(yaml)
|
|
34
|
+
require_relative "../oiml"
|
|
35
|
+
Item.from_yaml(yaml)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Returns hash of XML grammar
|
|
39
|
+
# @return [String]
|
|
40
|
+
def grammar_hash
|
|
41
|
+
require_relative "../oiml"
|
|
42
|
+
@grammar_hash ||= ::Relaton::Oiml.grammar_hash
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Remove index file
|
|
47
|
+
#
|
|
48
|
+
def remove_index_file
|
|
49
|
+
require_relative "../oiml"
|
|
50
|
+
Relaton::Index.find_or_create(:oiml, url: true, file: "#{INDEXFILE}.yaml").remove_file
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|