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,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "relaton/core/processor"
|
|
4
|
+
|
|
5
|
+
module Relaton
|
|
6
|
+
module Oasis
|
|
7
|
+
class Processor < Core::Processor
|
|
8
|
+
def initialize # rubocop:disable Lint/MissingSuper
|
|
9
|
+
@short = :relaton_oasis
|
|
10
|
+
@prefix = "OASIS"
|
|
11
|
+
@defaultprefix = %r{^OASIS\s}
|
|
12
|
+
@idtype = "OASIS"
|
|
13
|
+
@datasets = %w[oasis-open]
|
|
14
|
+
@pubid_flavor = :Oasis
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# @param code [String]
|
|
18
|
+
# @param date [String, nil] year
|
|
19
|
+
# @param opts [Hash]
|
|
20
|
+
# @return [Relaton::Oasis::Item]
|
|
21
|
+
def get(code, date, opts)
|
|
22
|
+
require_relative "../oasis"
|
|
23
|
+
Bibliography.get(code, date, opts)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# Fetch all the documents from https://www.oasis-open.org/standards/
|
|
28
|
+
#
|
|
29
|
+
# @param [String] _source source name
|
|
30
|
+
# @param [Hash] opts
|
|
31
|
+
# @option opts [String] :output directory to output documents
|
|
32
|
+
# @option opts [String] :format
|
|
33
|
+
#
|
|
34
|
+
def fetch_data(_source, opts)
|
|
35
|
+
require_relative "data_fetcher"
|
|
36
|
+
DataFetcher.fetch(**opts)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @param xml [String]
|
|
40
|
+
# @return [Relaton::Oasis::Item]
|
|
41
|
+
def from_xml(xml)
|
|
42
|
+
require_relative "../oasis"
|
|
43
|
+
Item.from_xml(xml)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @param yaml [String]
|
|
47
|
+
# @return [Relaton::Oasis::Item]
|
|
48
|
+
def from_yaml(yaml)
|
|
49
|
+
require_relative "../oasis"
|
|
50
|
+
Item.from_yaml(yaml)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Returns hash of XML grammar
|
|
54
|
+
# @return [String]
|
|
55
|
+
def grammar_hash
|
|
56
|
+
require_relative "../oasis"
|
|
57
|
+
@grammar_hash ||= Relaton::Oasis.grammar_hash
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
# Remove index file
|
|
62
|
+
#
|
|
63
|
+
# `url: true` names the cached file. No `pubid_class:`: `Type#remove_file`
|
|
64
|
+
# deletes the file and never reads the index.
|
|
65
|
+
#
|
|
66
|
+
def remove_index_file
|
|
67
|
+
require_relative "../oasis"
|
|
68
|
+
Relaton::Index.find_or_create(
|
|
69
|
+
:oasis, url: true, file: "#{INDEXFILE}.yaml"
|
|
70
|
+
).remove_file
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Not lazy: DataFetcher names ::Pubid::Oasis::Identifier as the index
|
|
4
|
+
# `pubid_class:`, and Docidentifier parses every docid through it.
|
|
5
|
+
# (The IANA/IHO/IALA/OGC/ECMA form; spec/relaton/lazy_loading_spec.rb guards
|
|
6
|
+
# that this file is not itself loaded when a Db is built.)
|
|
7
|
+
require "pubid"
|
|
8
|
+
require "relaton/index"
|
|
9
|
+
require "relaton/bib"
|
|
10
|
+
require_relative "version"
|
|
11
|
+
require_relative "oasis/util"
|
|
12
|
+
require_relative "oasis/item_data"
|
|
13
|
+
require_relative "oasis/item"
|
|
14
|
+
require_relative "oasis/bibitem"
|
|
15
|
+
require_relative "oasis/bibdata"
|
|
16
|
+
require_relative "oasis/bibliography"
|
|
17
|
+
|
|
18
|
+
module Relaton
|
|
19
|
+
module Oasis
|
|
20
|
+
# The pubid index, both written and read: rows are
|
|
21
|
+
# `Pubid::Oasis::Identifier` hashes (`_type: pubid:oasis:standard`), built
|
|
22
|
+
# and read with `pubid_class: ::Pubid::Oasis::Identifier`.
|
|
23
|
+
#
|
|
24
|
+
# This gem does not produce `index-v1` any more; `relaton-data-oasis`'s
|
|
25
|
+
# crawler derives it from the v2 rows for relaton v2 consumers (the
|
|
26
|
+
# IANA/BIPM/W3C/ECMA shape).
|
|
27
|
+
INDEXFILE = "index-v2".freeze
|
|
28
|
+
|
|
29
|
+
class Error < StandardError; end
|
|
30
|
+
# Your code goes here...
|
|
31
|
+
|
|
32
|
+
# Returns hash of XML reammar
|
|
33
|
+
# @return [String]
|
|
34
|
+
def self.grammar_hash
|
|
35
|
+
# gem_path = File.expand_path "..", __dir__
|
|
36
|
+
# grammars_path = File.join gem_path, "grammars", "*"
|
|
37
|
+
# grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
|
|
38
|
+
Digest::MD5.hexdigest Relaton::VERSION # grammars
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Ogc
|
|
3
|
+
module Bibliography
|
|
4
|
+
extend self
|
|
5
|
+
|
|
6
|
+
# @param text [String]
|
|
7
|
+
# @param year [String, nil]
|
|
8
|
+
# @return [Relaton::Ogc::HitCollection]
|
|
9
|
+
def search(text, year = nil, _opts = {})
|
|
10
|
+
code = text.sub(/^OGC\s/, "")
|
|
11
|
+
HitCollection.new(code, year).find
|
|
12
|
+
rescue Faraday::ConnectionFailed, Faraday::SSLError
|
|
13
|
+
raise Relaton::RequestError, HitCollection::ENDPOINT
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @param code [String]
|
|
17
|
+
# @param year [String, nil]
|
|
18
|
+
# @param opts [Hash]
|
|
19
|
+
# @return [Relaton::Ogc::ItemData, nil]
|
|
20
|
+
def get(code, year = nil, opts = {})
|
|
21
|
+
result = bib_search_filter(code, year, opts) || (return nil)
|
|
22
|
+
ret = bib_results_filter(result, year)
|
|
23
|
+
if ret[:ret]
|
|
24
|
+
Util.info "Found: `#{ret[:ret].docidentifier.first.content}`", key: code
|
|
25
|
+
ret[:ret]
|
|
26
|
+
else
|
|
27
|
+
fetch_ref_err(code, year, ret[:years])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def bib_search_filter(code, year, opts)
|
|
34
|
+
Util.info "Fetching from Relaton repository ...", key: code
|
|
35
|
+
search(code, year, opts)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def bib_results_filter(result, year)
|
|
39
|
+
missed_years = []
|
|
40
|
+
result.each do |r|
|
|
41
|
+
item = r.item
|
|
42
|
+
return { ret: item } unless year
|
|
43
|
+
|
|
44
|
+
item.date.select { |d| d.type == "published" }.each do |d|
|
|
45
|
+
date_year = ::Date.parse(d.at.to_s).year
|
|
46
|
+
return { ret: item } if year.to_i == date_year
|
|
47
|
+
|
|
48
|
+
missed_years << date_year
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
{ years: missed_years }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def fetch_ref_err(code, year, missed_years)
|
|
55
|
+
Util.info "Not found.", key: code
|
|
56
|
+
unless missed_years.empty?
|
|
57
|
+
Util.info "There was no match for `#{year}`, though there " \
|
|
58
|
+
"were matches found for `#{missed_years.join('`, `')}`.", key: code
|
|
59
|
+
end
|
|
60
|
+
nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "fileutils"
|
|
4
|
+
require "faraday"
|
|
5
|
+
require "json"
|
|
6
|
+
require_relative "../ogc"
|
|
7
|
+
require_relative "scraper"
|
|
8
|
+
|
|
9
|
+
module Relaton
|
|
10
|
+
module Ogc
|
|
11
|
+
class DataFetcher < Core::DataFetcher
|
|
12
|
+
ENDPOINT = "https://raw.githubusercontent.com/opengeospatial/NamingAuthority/master/definitions/docs/docs.json"
|
|
13
|
+
|
|
14
|
+
def initialize(output, format)
|
|
15
|
+
super
|
|
16
|
+
@etagfile = File.join output, "etag.txt"
|
|
17
|
+
@docids = []
|
|
18
|
+
@dupids = Set.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def log_error(msg)
|
|
22
|
+
Util.error msg
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def index
|
|
26
|
+
# `pubid_class:` on the producer too: FileIO#save only calls `to_hash`
|
|
27
|
+
# when the value is an instance of it, so without it the crawl writes
|
|
28
|
+
# v1-shaped rows under a v2 name, silently.
|
|
29
|
+
@index ||= Relaton::Index.find_or_create(
|
|
30
|
+
:ogc, file: "#{INDEXFILE}.yaml", pubid_class: ::Pubid::Ogc::Identifier
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def fetch(_source = nil) # rubocop:disable Metrics/AbcSize
|
|
35
|
+
get_data do |etag, json|
|
|
36
|
+
no_errors = true
|
|
37
|
+
json.each_value { |hit| fetch_doc(hit) || no_errors = false }
|
|
38
|
+
if @dupids.any?
|
|
39
|
+
Util.warn "Duplicated documents: #{@dupids.to_a.join(', ')}"
|
|
40
|
+
end
|
|
41
|
+
self.etag = etag if no_errors
|
|
42
|
+
index.save
|
|
43
|
+
report_errors
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def fetch_doc(hit)
|
|
48
|
+
return if hit["type"] == "CC"
|
|
49
|
+
|
|
50
|
+
bib = Scraper.parse_page hit, @errors
|
|
51
|
+
write_document bib
|
|
52
|
+
true
|
|
53
|
+
rescue StandardError => e
|
|
54
|
+
Util.error "Fetching document: #{hit['identifier']}\n" \
|
|
55
|
+
"#{e.class} #{e.message}\n#{e.backtrace}"
|
|
56
|
+
false
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def write_document(bib) # rubocop:disable Metrics/AbcSize
|
|
60
|
+
docid = bib.docidentifier[0].content
|
|
61
|
+
if @docids.include?(docid)
|
|
62
|
+
@dupids << docid
|
|
63
|
+
return
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
@docids << docid
|
|
67
|
+
file = file_name bib
|
|
68
|
+
index.add_or_update index_id(docid), file
|
|
69
|
+
File.write file, serialize(bib), encoding: "UTF-8"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# The index key. Stored as a `Pubid::Ogc::Identifier` so the published
|
|
74
|
+
# index-v2 rows are pubid hashes the consumer can narrow on. A docid
|
|
75
|
+
# pubid rejects is logged and indexed as the plain string, so one bad
|
|
76
|
+
# record never aborts a crawl.
|
|
77
|
+
#
|
|
78
|
+
# @param docid [String]
|
|
79
|
+
# @return [Pubid::Ogc::Identifier, String]
|
|
80
|
+
#
|
|
81
|
+
def index_id(docid)
|
|
82
|
+
::Pubid::Ogc::Identifier.parse docid
|
|
83
|
+
rescue StandardError => e
|
|
84
|
+
Util.warn "Failed to parse pubid `#{docid}`: #{e.message}"
|
|
85
|
+
docid
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def file_name(bib)
|
|
89
|
+
name = bib.docidentifier[0].content.upcase.gsub(/[\s:.]/, "_")
|
|
90
|
+
"#{@output}/#{name}.#{@ext}"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def to_yaml(bib)
|
|
94
|
+
Item.to_yaml bib
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def to_xml(bib)
|
|
98
|
+
Bibdata.to_xml bib
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def to_bibxml(_bib)
|
|
102
|
+
raise NotImplementedError, "OGC does not support bibxml format"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# @return [String, nil]
|
|
106
|
+
def etag
|
|
107
|
+
@etag ||= if File.exist? @etagfile
|
|
108
|
+
File.read @etagfile, encoding: "UTF-8"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# @param e_tag [String]
|
|
113
|
+
def etag=(e_tag)
|
|
114
|
+
File.write @etagfile, e_tag, encoding: "UTF-8"
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def get_data # rubocop:disable Metrics/AbcSize
|
|
118
|
+
h = {}
|
|
119
|
+
h["If-None-Match"] = etag if etag
|
|
120
|
+
resp = Faraday.new(ENDPOINT, headers: h).get
|
|
121
|
+
case resp.status
|
|
122
|
+
when 200
|
|
123
|
+
json = JSON.parse(resp.body)
|
|
124
|
+
block_given? ? yield(resp[:etag], json) : json
|
|
125
|
+
when 304 then []
|
|
126
|
+
else raise Relaton::RequestError, "Could not access #{ENDPOINT}"
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Ogc
|
|
3
|
+
# Structured OGC document identifier. The docid string is the canonical
|
|
4
|
+
# printed form, which carries no publisher token (e.g. "19-025r1"), and it
|
|
5
|
+
# is parsed into a `Pubid::Ogc::Identifier` kept in `@pubid` while the
|
|
6
|
+
# lutaml `content` attribute stays a plain string for serialization.
|
|
7
|
+
#
|
|
8
|
+
# Parsing is **soft**: `content=` lazily requires pubid and rescues
|
|
9
|
+
# `LoadError`/`StandardError`, so a missing pubid gem or non-OGC content
|
|
10
|
+
# leaves `@pubid` nil rather than raising.
|
|
11
|
+
#
|
|
12
|
+
# Before this class had a body it inherited `Bib::Docidentifier`, whose
|
|
13
|
+
# `remove_part!` / `remove_date!` / `to_all_parts!` each raise
|
|
14
|
+
# `NotImplementedError` — and `Bib::ItemData` broadcasts all three to every
|
|
15
|
+
# docidentifier, so `#to_all_parts` and `#to_most_recent_reference` raised
|
|
16
|
+
# on **every** OGC item. `NotImplementedError` descends from `ScriptError`,
|
|
17
|
+
# so a caller's `rescue => e` did not even catch it.
|
|
18
|
+
class Docidentifier < Bib::Docidentifier
|
|
19
|
+
attr_reader :pubid
|
|
20
|
+
|
|
21
|
+
# Capture the inherited (LocalizedMarkedUpString) content setter before
|
|
22
|
+
# overriding #content=, so #refresh_content! can write the re-rendered
|
|
23
|
+
# string back WITHOUT re-parsing (a re-parse would rebuild @pubid from the
|
|
24
|
+
# string and discard in-place mutations such as `all_parts = true`).
|
|
25
|
+
alias_method :store_content, :content=
|
|
26
|
+
|
|
27
|
+
def initialize(attrs = {}, options = {})
|
|
28
|
+
pubid = attrs.is_a?(Hash) ? attrs.delete(:pubid) : nil
|
|
29
|
+
attrs[:content] ||= pubid.to_s if pubid
|
|
30
|
+
super
|
|
31
|
+
@pubid = pubid if pubid
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def content=(value)
|
|
35
|
+
super
|
|
36
|
+
return unless value
|
|
37
|
+
|
|
38
|
+
@pubid = begin
|
|
39
|
+
require "pubid"
|
|
40
|
+
::Pubid::Ogc::Identifier.parse(value)
|
|
41
|
+
rescue LoadError, StandardError
|
|
42
|
+
nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# `Pubid::Ogc::Identifier` models only `year`/`number`/`revision`, so the
|
|
47
|
+
# mapping is OGC-specific:
|
|
48
|
+
#
|
|
49
|
+
# - **`remove_date!` → clears `revision`.** OGC carries no date component;
|
|
50
|
+
# `revision` is its version discriminator — the same component a
|
|
51
|
+
# reference may omit, which `HitCollection#best_match` then treats as a
|
|
52
|
+
# wildcard — so clearing it yields
|
|
53
|
+
# the version-agnostic ("most recent") reference: `12-128r19` →
|
|
54
|
+
# `12-128`.
|
|
55
|
+
# - **`year` is never cleared.** It looks date-like but is half the
|
|
56
|
+
# document number (`12-128`), not a publication qualifier; dropping it
|
|
57
|
+
# would leave `-128`, which identifies nothing.
|
|
58
|
+
# - **`remove_part!` → clears the (unused) `part`/`subpart` attributes.**
|
|
59
|
+
# A no-op for the rendered string today: OGC has no part component.
|
|
60
|
+
# Implemented anyway so it never raises, and it starts working
|
|
61
|
+
# automatically if pubid-ogc ever models one. (The IALA precedent.)
|
|
62
|
+
# - **`to_all_parts!` → both, then wraps `@pubid` in pubid's `AllParts`.**
|
|
63
|
+
# `content` stays the plain stripped id — OGC's own renderer has no
|
|
64
|
+
# "(all parts)" marker, and `content` is cached from the pre-wrap
|
|
65
|
+
# pubid on purpose. `#pubid` itself, read directly, now answers
|
|
66
|
+
# `all_parts? == true` and renders WITH pubid's generic marker
|
|
67
|
+
# (`#to_s`), since it's the wrapper.
|
|
68
|
+
#
|
|
69
|
+
# All three no-op safely when `@pubid` is nil, so `Bib::ItemData`'s
|
|
70
|
+
# `#to_all_parts` / `#to_most_recent_reference` never raise on OGC items.
|
|
71
|
+
#
|
|
72
|
+
# `refresh_content!` renders a bare `to_s`: the OGC printed form has no
|
|
73
|
+
# publisher token and the stored `content` does not carry one either, so
|
|
74
|
+
# unlike 3GPP this must NOT pass `with_publisher: true`.
|
|
75
|
+
|
|
76
|
+
def remove_part!
|
|
77
|
+
clear_attr!(:part)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def remove_date!
|
|
81
|
+
clear_attr!(:revision)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def to_all_parts!
|
|
85
|
+
return if !@pubid || @pubid.all_parts?
|
|
86
|
+
|
|
87
|
+
# `#exclude` (no args) rebuilds a full independent copy — `remove_part!`
|
|
88
|
+
# / `remove_date!` mutate `@pubid` in place, so a bare reference here
|
|
89
|
+
# would lose the original revision to that mutation too.
|
|
90
|
+
original = @pubid.exclude
|
|
91
|
+
remove_part!
|
|
92
|
+
remove_date!
|
|
93
|
+
@pubid = original.to_all_parts
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
private
|
|
97
|
+
|
|
98
|
+
def clear_attr!(attr)
|
|
99
|
+
return unless @pubid && @pubid.respond_to?("#{attr}=")
|
|
100
|
+
|
|
101
|
+
@pubid.public_send("#{attr}=", nil)
|
|
102
|
+
@pubid.subpart = nil if attr == :part && @pubid.respond_to?(:subpart=)
|
|
103
|
+
refresh_content!
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def refresh_content!
|
|
107
|
+
store_content(@pubid.to_s) if @pubid
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Ogc
|
|
3
|
+
class Doctype < Bib::Doctype
|
|
4
|
+
attribute :content, :string, values: %w[
|
|
5
|
+
abstract-specification-topic best-practice change-request-supporting-document
|
|
6
|
+
community-practice community-standard discussion-paper engineering-report
|
|
7
|
+
other policy reference-model release-notes standard user-guide white-paper
|
|
8
|
+
test-suite draft-standard
|
|
9
|
+
]
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require_relative "doctype"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Ogc
|
|
5
|
+
class Ext < Bib::Ext
|
|
6
|
+
attribute :doctype, Doctype
|
|
7
|
+
attribute :subdoctype, :string, values: %w[
|
|
8
|
+
conceptual-model conceptual-model-and-encoding conceptual-model-and-implementation
|
|
9
|
+
encoding extension implementation profile profile-with-extension general
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
def get_schema_version = Relaton.schema_versions["relaton-model-ogc"]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Relaton
|
|
2
|
+
module Ogc
|
|
3
|
+
class Hit < Core::Hit
|
|
4
|
+
# @return [Relaton::Ogc::ItemData]
|
|
5
|
+
def item
|
|
6
|
+
@item ||= begin
|
|
7
|
+
url = "#{HitCollection::ENDPOINT}#{hit[:file]}"
|
|
8
|
+
resp = Faraday.get(url) { |req| req.options.timeout = 10 }
|
|
9
|
+
return unless resp.status == 200
|
|
10
|
+
|
|
11
|
+
item = Item.from_yaml resp.body
|
|
12
|
+
item.fetched = Date.today.to_s
|
|
13
|
+
item
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
require "faraday"
|
|
2
|
+
require_relative "hit"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Ogc
|
|
6
|
+
class HitCollection < Core::HitCollection
|
|
7
|
+
ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-ogc/v2/".freeze
|
|
8
|
+
|
|
9
|
+
# @return [self]
|
|
10
|
+
def find
|
|
11
|
+
return self if ref.nil? || ref.empty?
|
|
12
|
+
|
|
13
|
+
row = best_match ref
|
|
14
|
+
return self unless row
|
|
15
|
+
|
|
16
|
+
url = "#{ENDPOINT}#{row[:file]}"
|
|
17
|
+
resp = Faraday.get(url) { |req| req.options.timeout = 10 }
|
|
18
|
+
return self unless resp.status == 200
|
|
19
|
+
|
|
20
|
+
item = Item.from_yaml resp.body
|
|
21
|
+
item.fetched = Date.today.to_s
|
|
22
|
+
hit = Hit.new({ code: item.docidentifier[0]&.content, file: row[:file] }, self)
|
|
23
|
+
hit.instance_variable_set(:@item, item)
|
|
24
|
+
@array = [hit]
|
|
25
|
+
self
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @return [Relaton::Index::Type]
|
|
29
|
+
def index
|
|
30
|
+
@index ||= Relaton::Index.find_or_create(
|
|
31
|
+
:ogc, url: "#{ENDPOINT}#{INDEXFILE}.zip", file: "#{INDEXFILE}.yaml",
|
|
32
|
+
pubid_class: ::Pubid::Ogc::Identifier
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
#
|
|
39
|
+
# Find the index row for a reference, latest revision first.
|
|
40
|
+
#
|
|
41
|
+
# Passing the pubid to `Index::Type#search` is what enables the binary
|
|
42
|
+
# search on `id.root.number` — with the plain string this used to pass,
|
|
43
|
+
# the whole index is scanned however the index was built. Selection is
|
|
44
|
+
# `Type#search`'s default with no block — pubid's asymmetric subset match
|
|
45
|
+
# (`Pubid::SubsetMatch`): the reference on the left, the row on the right,
|
|
46
|
+
# and a component it omits matches any
|
|
47
|
+
# value. `revision` is OGC's only optional component, so a
|
|
48
|
+
# bare `OGC 12-128` still finds the `r19` row, while `OGC 12-128r19`
|
|
49
|
+
# reaches only its own. `year` is always stated — the bsearch key is the
|
|
50
|
+
# `<nnn>` field alone, so one bucket holds every year that reused the
|
|
51
|
+
# number (`05-007` and `17-007` share bucket `007`).
|
|
52
|
+
#
|
|
53
|
+
# @param text [String]
|
|
54
|
+
# @return [Hash, nil]
|
|
55
|
+
#
|
|
56
|
+
# The substring-scan fallback this used to take when parsing failed is
|
|
57
|
+
# gone with the rescue. It was the same conflation the convention
|
|
58
|
+
# rejects: an unparseable string matched a SUBSTRING of the rendered
|
|
59
|
+
# ids, so an ambiguous reference silently resolved to whichever row
|
|
60
|
+
# sorted first, instead of telling the caller the reference is not an
|
|
61
|
+
# identifier. ecma, w3c and xsf never had one.
|
|
62
|
+
def best_match(text)
|
|
63
|
+
pubid = parse_ref text
|
|
64
|
+
rows = index.search(pubid)
|
|
65
|
+
rows.max_by { |r| [revision_key(r[:id].revision), r[:file]] }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Order key for an OGC revision suffix.
|
|
70
|
+
#
|
|
71
|
+
# Revisions are `r<n>` with optional letter suffixes (`r3a`, `r12a`) plus
|
|
72
|
+
# the odd `a` and `c1`, so the number must be compared as an integer:
|
|
73
|
+
# `r2` beats `r14` as text but is the older document. The token itself
|
|
74
|
+
# breaks the tie, so `r3a` sorts above `r3` and a repeated lookup returns
|
|
75
|
+
# the same row (the index sort is not stable). An absent revision sorts
|
|
76
|
+
# below every present one.
|
|
77
|
+
#
|
|
78
|
+
# Highest revision is the newest published document in 105 of the 106
|
|
79
|
+
# multi-revision documents in the index, scored against each document's
|
|
80
|
+
# own `date[0].at`; the previous `min_by` on the rendered id matched 1.
|
|
81
|
+
#
|
|
82
|
+
# @param revision [String, nil]
|
|
83
|
+
# @return [Array]
|
|
84
|
+
#
|
|
85
|
+
def revision_key(revision)
|
|
86
|
+
[revision.to_s[/\d+/].to_i, revision.to_s]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# Parse a user reference into a `Pubid::Ogc::Identifier`, or nil.
|
|
91
|
+
#
|
|
92
|
+
# `Pubid::Ogc` takes the `OGC ` publisher token as optional and
|
|
93
|
+
# lowercases the revision, so `OGC 19-025r1`, `19-025r1`, `11-038R2` and
|
|
94
|
+
# the revision-less `16-079` all parse without normalization here.
|
|
95
|
+
#
|
|
96
|
+
# @param text [String]
|
|
97
|
+
# @return [Pubid::Ogc::Identifier, nil]
|
|
98
|
+
#
|
|
99
|
+
# An unrecognized reference **raises**; like ISO, ETSI and 3GPP we let it
|
|
100
|
+
# propagate. relaton-cli rescues `Pubid::Errors::Error` and renders
|
|
101
|
+
# `"..." is not a recognized standards identifier`
|
|
102
|
+
# (`gems/relaton-cli/lib/relaton/cli/command.rb:324`), and `Db#fetch`
|
|
103
|
+
# logs it through the `StandardError` arm at `lib/relaton/db.rb:122`.
|
|
104
|
+
# Rescuing here would collapse "this identifier is malformed" into "no
|
|
105
|
+
# such document", leaving a caller unable to tell them apart.
|
|
106
|
+
def parse_ref(text)
|
|
107
|
+
::Pubid::Ogc::Identifier.parse text.to_s.strip
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require_relative "docidentifier"
|
|
2
|
+
require_relative "ext"
|
|
3
|
+
|
|
4
|
+
module Relaton
|
|
5
|
+
module Ogc
|
|
6
|
+
class Item < Iso::Item
|
|
7
|
+
model ItemData
|
|
8
|
+
|
|
9
|
+
attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
|
|
10
|
+
attribute :ext, Ext
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require "relaton/core/processor"
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Ogc
|
|
5
|
+
class Processor < Core::Processor
|
|
6
|
+
def initialize # rubocop:disable Lint/MissingSuper
|
|
7
|
+
@short = :relaton_ogc
|
|
8
|
+
@prefix = "OGC"
|
|
9
|
+
@defaultprefix = %r{^OGC\s}
|
|
10
|
+
@idtype = "OGC"
|
|
11
|
+
@datasets = %w[ogc-naming-authority]
|
|
12
|
+
@pubid_flavor = :Ogc
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @param code [String]
|
|
16
|
+
# @param date [String, nil]
|
|
17
|
+
# @param opts [Hash]
|
|
18
|
+
# @return [Relaton::Ogc::ItemData]
|
|
19
|
+
def get(code, date, opts)
|
|
20
|
+
require_relative "../ogc"
|
|
21
|
+
Bibliography.get(code, date, opts)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @param source [String]
|
|
25
|
+
# @param opts [Hash]
|
|
26
|
+
def fetch_data(_source, opts)
|
|
27
|
+
require_relative "data_fetcher"
|
|
28
|
+
DataFetcher.fetch(**opts)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @param xml [String]
|
|
32
|
+
# @return [Relaton::Ogc::ItemData]
|
|
33
|
+
def from_xml(xml)
|
|
34
|
+
require_relative "../ogc"
|
|
35
|
+
Item.from_xml xml
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @param yaml [String]
|
|
39
|
+
# @return [Relaton::Ogc::ItemData]
|
|
40
|
+
def from_yaml(yaml)
|
|
41
|
+
require_relative "../ogc"
|
|
42
|
+
Item.from_yaml yaml
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @return [String]
|
|
46
|
+
def grammar_hash
|
|
47
|
+
require_relative "../ogc"
|
|
48
|
+
@grammar_hash ||= Relaton::Ogc.grammar_hash
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def remove_index_file
|
|
52
|
+
require_relative "../ogc"
|
|
53
|
+
Relaton::Index.find_or_create(
|
|
54
|
+
:ogc, url: true, file: "#{INDEXFILE}.yaml"
|
|
55
|
+
).remove_file
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|