relaton 2.1.0 → 3.0.0.pre.alpha.1

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.
Files changed (625) hide show
  1. checksums.yaml +4 -4
  2. data/{docs/README.adoc → README.adoc} +109 -38
  3. data/lib/relaton/3gpp/bibdata.rb +9 -0
  4. data/lib/relaton/3gpp/bibitem.rb +9 -0
  5. data/lib/relaton/3gpp/bibliography.rb +48 -0
  6. data/lib/relaton/3gpp/data_fetcher.rb +255 -0
  7. data/lib/relaton/3gpp/doctype.rb +9 -0
  8. data/lib/relaton/3gpp/ext.rb +31 -0
  9. data/lib/relaton/3gpp/item.rb +12 -0
  10. data/lib/relaton/3gpp/item_data.rb +15 -0
  11. data/lib/relaton/3gpp/parser.rb +400 -0
  12. data/lib/relaton/3gpp/processor.rb +68 -0
  13. data/lib/relaton/3gpp/release.rb +34 -0
  14. data/lib/relaton/3gpp/util.rb +8 -0
  15. data/lib/relaton/3gpp.rb +25 -0
  16. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  17. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  18. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  19. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  20. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  21. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
  22. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  23. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
  24. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  25. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  26. data/lib/relaton/bib/hash_parser_v1.rb +767 -0
  27. data/lib/relaton/bib/item_data.rb +229 -0
  28. data/lib/relaton/bib/model/abstract.rb +16 -0
  29. data/lib/relaton/bib/model/address.rb +22 -0
  30. data/lib/relaton/bib/model/affiliation.rb +16 -0
  31. data/lib/relaton/bib/model/bibdata.rb +11 -0
  32. data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
  33. data/lib/relaton/bib/model/bibitem.rb +11 -0
  34. data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
  35. data/lib/relaton/bib/model/contact.rb +18 -0
  36. data/lib/relaton/bib/model/contribution_info.rb +15 -0
  37. data/lib/relaton/bib/model/contributor.rb +29 -0
  38. data/lib/relaton/bib/model/copyright.rb +27 -0
  39. data/lib/relaton/bib/model/date.rb +31 -0
  40. data/lib/relaton/bib/model/depiction.rb +16 -0
  41. data/lib/relaton/bib/model/docidentifier.rb +34 -0
  42. data/lib/relaton/bib/model/doctype.rb +14 -0
  43. data/lib/relaton/bib/model/edition.rb +14 -0
  44. data/lib/relaton/bib/model/ext.rb +39 -0
  45. data/lib/relaton/bib/model/extent.rb +16 -0
  46. data/lib/relaton/bib/model/formattedref.rb +43 -0
  47. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  48. data/lib/relaton/bib/model/fullname.rb +11 -0
  49. data/lib/relaton/bib/model/ics.rb +49 -0
  50. data/lib/relaton/bib/model/image.rb +28 -0
  51. data/lib/relaton/bib/model/item.rb +96 -0
  52. data/lib/relaton/bib/model/item_base.rb +20 -0
  53. data/lib/relaton/bib/model/item_shared.rb +88 -0
  54. data/lib/relaton/bib/model/keyword.rb +30 -0
  55. data/lib/relaton/bib/model/locality.rb +18 -0
  56. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  57. data/lib/relaton/bib/model/localized_string.rb +48 -0
  58. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  59. data/lib/relaton/bib/model/logo.rb +14 -0
  60. data/lib/relaton/bib/model/medium.rb +22 -0
  61. data/lib/relaton/bib/model/note.rb +16 -0
  62. data/lib/relaton/bib/model/organization.rb +13 -0
  63. data/lib/relaton/bib/model/organization_type.rb +42 -0
  64. data/lib/relaton/bib/model/person.rb +36 -0
  65. data/lib/relaton/bib/model/phone.rb +14 -0
  66. data/lib/relaton/bib/model/place.rb +33 -0
  67. data/lib/relaton/bib/model/price.rb +14 -0
  68. data/lib/relaton/bib/model/relation.rb +43 -0
  69. data/lib/relaton/bib/model/series.rb +34 -0
  70. data/lib/relaton/bib/model/size.rb +23 -0
  71. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  72. data/lib/relaton/bib/model/status.rb +27 -0
  73. data/lib/relaton/bib/model/structured_identifier.rb +48 -0
  74. data/lib/relaton/bib/model/subdivision.rb +16 -0
  75. data/lib/relaton/bib/model/title.rb +56 -0
  76. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  77. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  78. data/lib/relaton/bib/model/uri.rb +18 -0
  79. data/lib/relaton/bib/model/validity.rb +16 -0
  80. data/lib/relaton/bib/model/version.rb +43 -0
  81. data/lib/relaton/bib/namespace_helper.rb +21 -0
  82. data/lib/relaton/bib/sanitizer.rb +68 -0
  83. data/lib/relaton/bib/util.rb +18 -0
  84. data/lib/relaton/bib/versions.json +35 -0
  85. data/lib/relaton/bib.rb +48 -0
  86. data/lib/relaton/bipm/bibliography.rb +82 -0
  87. data/lib/relaton/bipm/converter/asciibib.rb +64 -0
  88. data/lib/relaton/bipm/data_fetcher.rb +57 -0
  89. data/lib/relaton/bipm/data_outcomes_parser.rb +657 -0
  90. data/lib/relaton/bipm/id_parser.rb +277 -0
  91. data/lib/relaton/bipm/item_data.rb +47 -0
  92. data/lib/relaton/bipm/model/bibdata.rb +9 -0
  93. data/lib/relaton/bipm/model/bibitem.rb +9 -0
  94. data/lib/relaton/bipm/model/comment_period.rb +13 -0
  95. data/lib/relaton/bipm/model/doctype.rb +12 -0
  96. data/lib/relaton/bipm/model/ext.rb +38 -0
  97. data/lib/relaton/bipm/model/item.rb +11 -0
  98. data/lib/relaton/bipm/model/structured_identifier.rb +15 -0
  99. data/lib/relaton/bipm/processor.rb +69 -0
  100. data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
  101. data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +174 -0
  102. data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
  103. data/lib/relaton/bipm/si_brochure_parser.rb +186 -0
  104. data/lib/relaton/bipm/util.rb +8 -0
  105. data/lib/relaton/bipm.rb +32 -0
  106. data/lib/relaton/bsi/bibliography.rb +124 -0
  107. data/lib/relaton/bsi/hit.rb +14 -0
  108. data/lib/relaton/bsi/hit_collection.rb +114 -0
  109. data/lib/relaton/bsi/item_data.rb +13 -0
  110. data/lib/relaton/bsi/model/bibdata.rb +8 -0
  111. data/lib/relaton/bsi/model/bibitem.rb +8 -0
  112. data/lib/relaton/bsi/model/docidentifier.rb +9 -0
  113. data/lib/relaton/bsi/model/doctype.rb +14 -0
  114. data/lib/relaton/bsi/model/ext.rb +17 -0
  115. data/lib/relaton/bsi/model/item.rb +17 -0
  116. data/lib/relaton/bsi/model/item_base.rb +22 -0
  117. data/lib/relaton/bsi/model/relation.rb +9 -0
  118. data/lib/relaton/bsi/processor.rb +42 -0
  119. data/lib/relaton/bsi/schema.json +24882 -0
  120. data/lib/relaton/bsi/scraper.rb +288 -0
  121. data/lib/relaton/bsi/util.rb +8 -0
  122. data/lib/relaton/bsi.rb +25 -0
  123. data/lib/relaton/calconnect/bibliography.rb +95 -0
  124. data/lib/relaton/calconnect/data_fetcher.rb +106 -0
  125. data/lib/relaton/calconnect/hit.rb +14 -0
  126. data/lib/relaton/calconnect/hit_collection.rb +84 -0
  127. data/lib/relaton/calconnect/item_data.rb +12 -0
  128. data/lib/relaton/calconnect/model/bibdata.rb +8 -0
  129. data/lib/relaton/calconnect/model/bibitem.rb +8 -0
  130. data/lib/relaton/calconnect/model/doctype.rb +11 -0
  131. data/lib/relaton/calconnect/model/ext.rb +11 -0
  132. data/lib/relaton/calconnect/model/item.rb +13 -0
  133. data/lib/relaton/calconnect/processor.rb +66 -0
  134. data/lib/relaton/calconnect/scraper.rb +87 -0
  135. data/lib/relaton/calconnect/util.rb +8 -0
  136. data/lib/relaton/calconnect.rb +26 -0
  137. data/lib/relaton/ccsds/bibliography.rb +63 -0
  138. data/lib/relaton/ccsds/data/fetcher.rb +247 -0
  139. data/lib/relaton/ccsds/data/iso_references.rb +30 -0
  140. data/lib/relaton/ccsds/data/parser.rb +194 -0
  141. data/lib/relaton/ccsds/hit.rb +24 -0
  142. data/lib/relaton/ccsds/hit_collection.rb +42 -0
  143. data/lib/relaton/ccsds/item_data.rb +9 -0
  144. data/lib/relaton/ccsds/model/bibdata.rb +8 -0
  145. data/lib/relaton/ccsds/model/bibitem.rb +8 -0
  146. data/lib/relaton/ccsds/model/doctype.rb +9 -0
  147. data/lib/relaton/ccsds/model/ext.rb +19 -0
  148. data/lib/relaton/ccsds/model/item.rb +13 -0
  149. data/lib/relaton/ccsds/processor.rb +68 -0
  150. data/lib/relaton/ccsds/util.rb +10 -0
  151. data/lib/relaton/ccsds.rb +33 -0
  152. data/lib/relaton/cen/bibliography.rb +121 -0
  153. data/lib/relaton/cen/committees.yaml +66 -0
  154. data/lib/relaton/cen/hit.rb +16 -0
  155. data/lib/relaton/cen/hit_collection.rb +68 -0
  156. data/lib/relaton/cen/item_data.rb +7 -0
  157. data/lib/relaton/cen/model/bibdata.rb +8 -0
  158. data/lib/relaton/cen/model/bibitem.rb +8 -0
  159. data/lib/relaton/cen/model/docidentifier.rb +9 -0
  160. data/lib/relaton/cen/model/ext.rb +11 -0
  161. data/lib/relaton/cen/model/item.rb +14 -0
  162. data/lib/relaton/cen/model/structured_identifier.rb +9 -0
  163. data/lib/relaton/cen/processor.rb +40 -0
  164. data/lib/relaton/cen/scraper.rb +210 -0
  165. data/lib/relaton/cen/util.rb +8 -0
  166. data/lib/relaton/cen.rb +29 -0
  167. data/lib/relaton/cie/bibdata.rb +8 -0
  168. data/lib/relaton/cie/bibitem.rb +8 -0
  169. data/lib/relaton/cie/bibliography.rb +31 -0
  170. data/lib/relaton/cie/data_fetcher.rb +355 -0
  171. data/lib/relaton/cie/ext.rb +7 -0
  172. data/lib/relaton/cie/item.rb +11 -0
  173. data/lib/relaton/cie/item_data.rb +6 -0
  174. data/lib/relaton/cie/processor.rb +66 -0
  175. data/lib/relaton/cie/scrapper.rb +39 -0
  176. data/lib/relaton/cie/util.rb +8 -0
  177. data/lib/relaton/cie.rb +28 -0
  178. data/lib/relaton/core/array_wrapper.rb +20 -0
  179. data/lib/relaton/core/data_fetcher.rb +97 -0
  180. data/lib/relaton/core/date_parser.rb +42 -0
  181. data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
  182. data/lib/relaton/core/hit.rb +49 -0
  183. data/lib/relaton/core/hit_collection.rb +118 -0
  184. data/lib/relaton/core/processor.rb +48 -0
  185. data/lib/relaton/core/workers_pool.rb +45 -0
  186. data/lib/relaton/core.rb +9 -0
  187. data/lib/relaton/db/cache.rb +232 -0
  188. data/lib/relaton/db/config.rb +24 -0
  189. data/lib/relaton/db/registry.rb +119 -0
  190. data/lib/relaton/db/util.rb +9 -0
  191. data/lib/relaton/db/workers_pool.rb +22 -0
  192. data/lib/relaton/db.rb +20 -206
  193. data/lib/relaton/doi/crossref.rb +72 -0
  194. data/lib/relaton/doi/parser.rb +827 -0
  195. data/lib/relaton/doi/processor.rb +65 -0
  196. data/lib/relaton/doi/util.rb +8 -0
  197. data/lib/relaton/doi.rb +20 -0
  198. data/lib/relaton/ecma/bibdata.rb +8 -0
  199. data/lib/relaton/ecma/bibitem.rb +8 -0
  200. data/lib/relaton/ecma/bibliography.rb +81 -0
  201. data/lib/relaton/ecma/data_fetcher.rb +103 -0
  202. data/lib/relaton/ecma/data_parser.rb +49 -0
  203. data/lib/relaton/ecma/edition_parser.rb +80 -0
  204. data/lib/relaton/ecma/ext.rb +7 -0
  205. data/lib/relaton/ecma/item.rb +11 -0
  206. data/lib/relaton/ecma/item_data.rb +6 -0
  207. data/lib/relaton/ecma/memento_parser.rb +60 -0
  208. data/lib/relaton/ecma/page_fetcher.rb +27 -0
  209. data/lib/relaton/ecma/parser_common.rb +33 -0
  210. data/lib/relaton/ecma/processor.rb +66 -0
  211. data/lib/relaton/ecma/standard_parser.rb +134 -0
  212. data/lib/relaton/ecma/util.rb +8 -0
  213. data/lib/relaton/ecma.rb +24 -0
  214. data/lib/relaton/etsi/bibdata.rb +10 -0
  215. data/lib/relaton/etsi/bibitem.rb +10 -0
  216. data/lib/relaton/etsi/bibliography.rb +46 -0
  217. data/lib/relaton/etsi/data_fetcher.rb +128 -0
  218. data/lib/relaton/etsi/data_parser.rb +208 -0
  219. data/lib/relaton/etsi/doctype.rb +30 -0
  220. data/lib/relaton/etsi/ext.rb +31 -0
  221. data/lib/relaton/etsi/item.rb +15 -0
  222. data/lib/relaton/etsi/item_data.rb +6 -0
  223. data/lib/relaton/etsi/processor.rb +69 -0
  224. data/lib/relaton/etsi/pubid.rb +37 -0
  225. data/lib/relaton/etsi/status.rb +13 -0
  226. data/lib/relaton/etsi/util.rb +8 -0
  227. data/lib/relaton/etsi.rb +25 -0
  228. data/lib/relaton/gb/bibdata.rb +8 -0
  229. data/lib/relaton/gb/bibitem.rb +8 -0
  230. data/lib/relaton/gb/bibliography.rb +145 -0
  231. data/lib/relaton/gb/ccs.rb +14 -0
  232. data/lib/relaton/gb/committee.rb +13 -0
  233. data/lib/relaton/gb/docidentifier.rb +23 -0
  234. data/lib/relaton/gb/doctype.rb +9 -0
  235. data/lib/relaton/gb/ext.rb +36 -0
  236. data/lib/relaton/gb/gb_scraper.rb +61 -0
  237. data/lib/relaton/gb/gb_type.rb +20 -0
  238. data/lib/relaton/gb/hit.rb +48 -0
  239. data/lib/relaton/gb/hit_collection.rb +19 -0
  240. data/lib/relaton/gb/item.rb +13 -0
  241. data/lib/relaton/gb/item_data.rb +6 -0
  242. data/lib/relaton/gb/processor.rb +46 -0
  243. data/lib/relaton/gb/project_number.rb +38 -0
  244. data/lib/relaton/gb/scraper.rb +204 -0
  245. data/lib/relaton/gb/sec_scraper.rb +92 -0
  246. data/lib/relaton/gb/stage_name.rb +13 -0
  247. data/lib/relaton/gb/structured_identifier.rb +26 -0
  248. data/lib/relaton/gb/t_scraper.rb +126 -0
  249. data/lib/relaton/gb/util.rb +8 -0
  250. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  251. data/lib/relaton/gb.rb +33 -0
  252. data/lib/relaton/iana/bibdata.rb +8 -0
  253. data/lib/relaton/iana/bibitem.rb +8 -0
  254. data/lib/relaton/iana/bibliography.rb +47 -0
  255. data/lib/relaton/iana/data_fetcher.rb +71 -0
  256. data/lib/relaton/iana/item.rb +7 -0
  257. data/lib/relaton/iana/item_data.rb +6 -0
  258. data/lib/relaton/iana/parser.rb +146 -0
  259. data/lib/relaton/iana/processor.rb +68 -0
  260. data/lib/relaton/iana/util.rb +8 -0
  261. data/lib/relaton/iana.rb +29 -0
  262. data/lib/relaton/iec/bibliography.rb +283 -0
  263. data/lib/relaton/iec/data_fetcher.rb +216 -0
  264. data/lib/relaton/iec/data_parser.rb +391 -0
  265. data/lib/relaton/iec/hit.rb +26 -0
  266. data/lib/relaton/iec/hit_collection.rb +138 -0
  267. data/lib/relaton/iec/item_data.rb +7 -0
  268. data/lib/relaton/iec/model/bibdata.rb +8 -0
  269. data/lib/relaton/iec/model/bibitem.rb +8 -0
  270. data/lib/relaton/iec/model/docidentifier.rb +131 -0
  271. data/lib/relaton/iec/model/doctype.rb +12 -0
  272. data/lib/relaton/iec/model/ext.rb +53 -0
  273. data/lib/relaton/iec/model/item.rb +20 -0
  274. data/lib/relaton/iec/model/item_base.rb +12 -0
  275. data/lib/relaton/iec/model/relation.rb +7 -0
  276. data/lib/relaton/iec/model/stage_name.rb +13 -0
  277. data/lib/relaton/iec/processor.rb +73 -0
  278. data/lib/relaton/iec/statuses.yml +199 -0
  279. data/lib/relaton/iec/util.rb +8 -0
  280. data/lib/relaton/iec.rb +98 -0
  281. data/lib/relaton/ieee/balloting_group.rb +13 -0
  282. data/lib/relaton/ieee/bibdata.rb +8 -0
  283. data/lib/relaton/ieee/bibitem.rb +8 -0
  284. data/lib/relaton/ieee/bibliography.rb +51 -0
  285. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  286. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  287. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  288. data/lib/relaton/ieee/data_fetcher.rb +630 -0
  289. data/lib/relaton/ieee/doctype.rb +9 -0
  290. data/lib/relaton/ieee/editorial_group.rb +19 -0
  291. data/lib/relaton/ieee/ext.rb +36 -0
  292. data/lib/relaton/ieee/idams_parser.rb +323 -0
  293. data/lib/relaton/ieee/item.rb +11 -0
  294. data/lib/relaton/ieee/item_data.rb +7 -0
  295. data/lib/relaton/ieee/processor.rb +68 -0
  296. data/lib/relaton/ieee/pub_id.rb +161 -0
  297. data/lib/relaton/ieee/rawbib_id_parser.rb +548 -0
  298. data/lib/relaton/ieee/util.rb +8 -0
  299. data/lib/relaton/ieee.rb +29 -0
  300. data/lib/relaton/ietf/bibdata.rb +8 -0
  301. data/lib/relaton/ietf/bibitem.rb +8 -0
  302. data/lib/relaton/ietf/bibliography.rb +35 -0
  303. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  304. data/lib/relaton/ietf/data_fetcher.rb +278 -0
  305. data/lib/relaton/ietf/doctype.rb +9 -0
  306. data/lib/relaton/ietf/ext.rb +63 -0
  307. data/lib/relaton/ietf/item.rb +16 -0
  308. data/lib/relaton/ietf/item_base.rb +18 -0
  309. data/lib/relaton/ietf/item_data.rb +6 -0
  310. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  311. data/lib/relaton/ietf/processor.rb +68 -0
  312. data/lib/relaton/ietf/relation.rb +9 -0
  313. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  314. data/lib/relaton/ietf/rfc/author.rb +21 -0
  315. data/lib/relaton/ietf/rfc/entry.rb +410 -0
  316. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  317. data/lib/relaton/ietf/rfc/format.rb +19 -0
  318. data/lib/relaton/ietf/rfc/index.rb +46 -0
  319. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  320. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  321. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  322. data/lib/relaton/ietf/scraper.rb +68 -0
  323. data/lib/relaton/ietf/util.rb +8 -0
  324. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  325. data/lib/relaton/ietf.rb +27 -0
  326. data/lib/relaton/iho/bibdata.rb +8 -0
  327. data/lib/relaton/iho/bibitem.rb +8 -0
  328. data/lib/relaton/iho/bibliography.rb +114 -0
  329. data/lib/relaton/iho/comment_period.rb +13 -0
  330. data/lib/relaton/iho/docidentifier.rb +31 -0
  331. data/lib/relaton/iho/doctype.rb +10 -0
  332. data/lib/relaton/iho/ext.rb +20 -0
  333. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  334. data/lib/relaton/iho/item.rb +20 -0
  335. data/lib/relaton/iho/item_base.rb +18 -0
  336. data/lib/relaton/iho/item_data.rb +6 -0
  337. data/lib/relaton/iho/processor.rb +54 -0
  338. data/lib/relaton/iho/relation.rb +9 -0
  339. data/lib/relaton/iho/structured_identifier.rb +20 -0
  340. data/lib/relaton/iho/util.rb +8 -0
  341. data/lib/relaton/iho.rb +27 -0
  342. data/lib/relaton/index/config.rb +52 -0
  343. data/lib/relaton/index/file_io.rb +305 -0
  344. data/lib/relaton/index/file_storage.rb +61 -0
  345. data/lib/relaton/index/id_number.rb +30 -0
  346. data/lib/relaton/index/pool.rb +41 -0
  347. data/lib/relaton/index/type.rb +159 -0
  348. data/lib/relaton/index/util.rb +18 -0
  349. data/lib/relaton/index.rb +60 -0
  350. data/lib/relaton/isbn/isbn.rb +61 -0
  351. data/lib/relaton/isbn/open_library.rb +43 -0
  352. data/lib/relaton/isbn/parser.rb +88 -0
  353. data/lib/relaton/isbn/processor.rb +48 -0
  354. data/lib/relaton/isbn/util.rb +8 -0
  355. data/lib/relaton/isbn.rb +19 -0
  356. data/lib/relaton/iso/bibliography.rb +407 -0
  357. data/lib/relaton/iso/data_fetcher.rb +338 -0
  358. data/lib/relaton/iso/data_parser.rb +444 -0
  359. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  360. data/lib/relaton/iso/hit.rb +57 -0
  361. data/lib/relaton/iso/hit_collection.rb +184 -0
  362. data/lib/relaton/iso/item_data.rb +28 -0
  363. data/lib/relaton/iso/model/bibdata.rb +10 -0
  364. data/lib/relaton/iso/model/bibitem.rb +8 -0
  365. data/lib/relaton/iso/model/contributor.rb +6 -0
  366. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  367. data/lib/relaton/iso/model/docidentifier.rb +134 -0
  368. data/lib/relaton/iso/model/doctype.rb +13 -0
  369. data/lib/relaton/iso/model/ext.rb +35 -0
  370. data/lib/relaton/iso/model/item.rb +17 -0
  371. data/lib/relaton/iso/model/item_base.rb +22 -0
  372. data/lib/relaton/iso/model/organization.rb +9 -0
  373. data/lib/relaton/iso/model/project_number.rb +22 -0
  374. data/lib/relaton/iso/model/relation.rb +9 -0
  375. data/lib/relaton/iso/model/stagename.rb +14 -0
  376. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  377. data/lib/relaton/iso/processor.rb +84 -0
  378. data/lib/relaton/iso/scraper.rb +619 -0
  379. data/lib/relaton/iso/type/pubid.rb +50 -0
  380. data/lib/relaton/iso/util.rb +8 -0
  381. data/lib/relaton/iso.rb +30 -0
  382. data/lib/relaton/itu/bibliography.rb +90 -0
  383. data/lib/relaton/itu/data_fetcher.rb +104 -0
  384. data/lib/relaton/itu/data_parser_r.rb +140 -0
  385. data/lib/relaton/itu/hit.rb +22 -0
  386. data/lib/relaton/itu/hit_collection.rb +127 -0
  387. data/lib/relaton/itu/item_data.rb +6 -0
  388. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  389. data/lib/relaton/itu/model/bibdata.rb +8 -0
  390. data/lib/relaton/itu/model/bibitem.rb +8 -0
  391. data/lib/relaton/itu/model/docidentifier.rb +9 -0
  392. data/lib/relaton/itu/model/doctype.rb +13 -0
  393. data/lib/relaton/itu/model/ext.rb +47 -0
  394. data/lib/relaton/itu/model/item.rb +13 -0
  395. data/lib/relaton/itu/model/meeting.rb +13 -0
  396. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  397. data/lib/relaton/itu/model/question.rb +13 -0
  398. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  399. data/lib/relaton/itu/model/structured_identifier.rb +19 -0
  400. data/lib/relaton/itu/processor.rb +66 -0
  401. data/lib/relaton/itu/pubid.rb +177 -0
  402. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  403. data/lib/relaton/itu/recommendation_parser.rb +161 -0
  404. data/lib/relaton/itu/scraper.rb +193 -0
  405. data/lib/relaton/itu/util.rb +8 -0
  406. data/lib/relaton/itu.rb +33 -0
  407. data/lib/relaton/jis/bibdata.rb +8 -0
  408. data/lib/relaton/jis/bibitem.rb +8 -0
  409. data/lib/relaton/jis/bibliography.rb +75 -0
  410. data/lib/relaton/jis/data_fetcher.rb +181 -0
  411. data/lib/relaton/jis/docidentifier.rb +21 -0
  412. data/lib/relaton/jis/doctype.rb +9 -0
  413. data/lib/relaton/jis/ext.rb +13 -0
  414. data/lib/relaton/jis/hit.rb +93 -0
  415. data/lib/relaton/jis/hit_collection.rb +127 -0
  416. data/lib/relaton/jis/item.rb +22 -0
  417. data/lib/relaton/jis/item_base.rb +26 -0
  418. data/lib/relaton/jis/item_data.rb +8 -0
  419. data/lib/relaton/jis/processor.rb +55 -0
  420. data/lib/relaton/jis/relation.rb +11 -0
  421. data/lib/relaton/jis/scraper.rb +232 -0
  422. data/lib/relaton/jis/structured_identifier.rb +13 -0
  423. data/lib/relaton/jis/util.rb +8 -0
  424. data/lib/relaton/jis.rb +33 -0
  425. data/lib/relaton/logger/channels/gh_issue.rb +78 -0
  426. data/lib/relaton/logger/config.rb +34 -0
  427. data/lib/relaton/logger/formatter_json.rb +8 -0
  428. data/lib/relaton/logger/formatter_string.rb +12 -0
  429. data/lib/relaton/logger/log.rb +64 -0
  430. data/lib/relaton/logger/log_device.rb +27 -0
  431. data/lib/relaton/logger/pool.rb +24 -0
  432. data/lib/relaton/logger.rb +18 -0
  433. data/lib/relaton/nist/bibdata.rb +8 -0
  434. data/lib/relaton/nist/bibitem.rb +8 -0
  435. data/lib/relaton/nist/bibliography.rb +191 -0
  436. data/lib/relaton/nist/comment_period.rb +15 -0
  437. data/lib/relaton/nist/data_fetcher.rb +84 -0
  438. data/lib/relaton/nist/date.rb +7 -0
  439. data/lib/relaton/nist/doctype.rb +7 -0
  440. data/lib/relaton/nist/ext.rb +16 -0
  441. data/lib/relaton/nist/hit.rb +18 -0
  442. data/lib/relaton/nist/hit_collection.rb +362 -0
  443. data/lib/relaton/nist/item.rb +17 -0
  444. data/lib/relaton/nist/item_data.rb +6 -0
  445. data/lib/relaton/nist/mods_parser.rb +276 -0
  446. data/lib/relaton/nist/processor.rb +68 -0
  447. data/lib/relaton/nist/pubs_export.rb +69 -0
  448. data/lib/relaton/nist/relation.rb +7 -0
  449. data/lib/relaton/nist/scraper.rb +290 -0
  450. data/lib/relaton/nist/series.yaml +49 -0
  451. data/lib/relaton/nist/util.rb +8 -0
  452. data/lib/relaton/nist.rb +34 -0
  453. data/lib/relaton/oasis/bibdata.rb +8 -0
  454. data/lib/relaton/oasis/bibitem.rb +8 -0
  455. data/lib/relaton/oasis/bibliography.rb +60 -0
  456. data/lib/relaton/oasis/browser_agent.rb +71 -0
  457. data/lib/relaton/oasis/data_fetcher.rb +94 -0
  458. data/lib/relaton/oasis/data_parser.rb +305 -0
  459. data/lib/relaton/oasis/data_parser_utils.rb +296 -0
  460. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  461. data/lib/relaton/oasis/doctype.rb +7 -0
  462. data/lib/relaton/oasis/ext.rb +19 -0
  463. data/lib/relaton/oasis/item.rb +11 -0
  464. data/lib/relaton/oasis/item_data.rb +6 -0
  465. data/lib/relaton/oasis/processor.rb +68 -0
  466. data/lib/relaton/oasis/util.rb +8 -0
  467. data/lib/relaton/oasis.rb +28 -0
  468. data/lib/relaton/ogc/bibdata.rb +8 -0
  469. data/lib/relaton/ogc/bibitem.rb +8 -0
  470. data/lib/relaton/ogc/bibliography.rb +64 -0
  471. data/lib/relaton/ogc/data_fetcher.rb +110 -0
  472. data/lib/relaton/ogc/docidentifier.rb +6 -0
  473. data/lib/relaton/ogc/doctype.rb +12 -0
  474. data/lib/relaton/ogc/ext.rb +15 -0
  475. data/lib/relaton/ogc/hit.rb +18 -0
  476. data/lib/relaton/ogc/hit_collection.rb +36 -0
  477. data/lib/relaton/ogc/item.rb +13 -0
  478. data/lib/relaton/ogc/item_data.rb +6 -0
  479. data/lib/relaton/ogc/processor.rb +58 -0
  480. data/lib/relaton/ogc/scraper.rb +225 -0
  481. data/lib/relaton/ogc/util.rb +8 -0
  482. data/lib/relaton/ogc.rb +26 -0
  483. data/lib/relaton/oiml/bibdata.rb +8 -0
  484. data/lib/relaton/oiml/bibitem.rb +8 -0
  485. data/lib/relaton/oiml/bibliography.rb +94 -0
  486. data/lib/relaton/oiml/docidentifier.rb +33 -0
  487. data/lib/relaton/oiml/doctype.rb +13 -0
  488. data/lib/relaton/oiml/ext.rb +42 -0
  489. data/lib/relaton/oiml/item.rb +20 -0
  490. data/lib/relaton/oiml/item_base.rb +18 -0
  491. data/lib/relaton/oiml/item_data.rb +6 -0
  492. data/lib/relaton/oiml/processor.rb +54 -0
  493. data/lib/relaton/oiml/relation.rb +9 -0
  494. data/lib/relaton/oiml/util.rb +8 -0
  495. data/lib/relaton/oiml.rb +24 -0
  496. data/lib/relaton/omg/bibdata.rb +8 -0
  497. data/lib/relaton/omg/bibitem.rb +8 -0
  498. data/lib/relaton/omg/bibliography.rb +31 -0
  499. data/lib/relaton/omg/ext.rb +7 -0
  500. data/lib/relaton/omg/item.rb +8 -0
  501. data/lib/relaton/omg/item_data.rb +6 -0
  502. data/lib/relaton/omg/processor.rb +34 -0
  503. data/lib/relaton/omg/scraper.rb +141 -0
  504. data/lib/relaton/omg/util.rb +8 -0
  505. data/lib/relaton/omg.rb +24 -0
  506. data/lib/relaton/plateau/bibdata.rb +8 -0
  507. data/lib/relaton/plateau/bibitem.rb +8 -0
  508. data/lib/relaton/plateau/bibliography.rb +24 -0
  509. data/lib/relaton/plateau/data_fetcher.rb +153 -0
  510. data/lib/relaton/plateau/doctype.rb +7 -0
  511. data/lib/relaton/plateau/ext.rb +23 -0
  512. data/lib/relaton/plateau/handbook_parser.rb +95 -0
  513. data/lib/relaton/plateau/hit.rb +13 -0
  514. data/lib/relaton/plateau/hit_collection.rb +59 -0
  515. data/lib/relaton/plateau/item.rb +12 -0
  516. data/lib/relaton/plateau/item_data.rb +6 -0
  517. data/lib/relaton/plateau/parser.rb +101 -0
  518. data/lib/relaton/plateau/processor.rb +49 -0
  519. data/lib/relaton/plateau/technical_report_parser.rb +91 -0
  520. data/lib/relaton/plateau/util.rb +8 -0
  521. data/lib/relaton/plateau.rb +28 -0
  522. data/lib/relaton/un/bibdata.rb +8 -0
  523. data/lib/relaton/un/bibitem.rb +8 -0
  524. data/lib/relaton/un/bibliography.rb +48 -0
  525. data/lib/relaton/un/doctype.rb +10 -0
  526. data/lib/relaton/un/ext.rb +30 -0
  527. data/lib/relaton/un/hit.rb +56 -0
  528. data/lib/relaton/un/hit_collection.rb +61 -0
  529. data/lib/relaton/un/item.rb +11 -0
  530. data/lib/relaton/un/item_data.rb +6 -0
  531. data/lib/relaton/un/parser.rb +108 -0
  532. data/lib/relaton/un/processor.rb +38 -0
  533. data/lib/relaton/un/session.rb +25 -0
  534. data/lib/relaton/un/token_generator.rb +105 -0
  535. data/lib/relaton/un/util.rb +8 -0
  536. data/lib/relaton/un/wasm/decoder.rb +434 -0
  537. data/lib/relaton/un/wasm/instance.rb +101 -0
  538. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  539. data/lib/relaton/un/wasm/memory.rb +112 -0
  540. data/lib/relaton/un/wasm/module.rb +47 -0
  541. data/lib/relaton/un/wasm.rb +17 -0
  542. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  543. data/lib/relaton/un.rb +28 -0
  544. data/lib/relaton/version.rb +1 -1
  545. data/lib/relaton/w3c/bibdata.rb +8 -0
  546. data/lib/relaton/w3c/bibitem.rb +8 -0
  547. data/lib/relaton/w3c/bibliography.rb +54 -0
  548. data/lib/relaton/w3c/data_fetcher.rb +309 -0
  549. data/lib/relaton/w3c/data_parser.rb +379 -0
  550. data/lib/relaton/w3c/doctype.rb +7 -0
  551. data/lib/relaton/w3c/ext.rb +11 -0
  552. data/lib/relaton/w3c/item.rb +12 -0
  553. data/lib/relaton/w3c/item_data.rb +6 -0
  554. data/lib/relaton/w3c/processor.rb +49 -0
  555. data/lib/relaton/w3c/pubid.rb +73 -0
  556. data/lib/relaton/w3c/safe_realize.rb +59 -0
  557. data/lib/relaton/w3c/util.rb +8 -0
  558. data/lib/relaton/w3c.rb +25 -0
  559. data/lib/relaton/xsf/bibdata.rb +8 -0
  560. data/lib/relaton/xsf/bibitem.rb +8 -0
  561. data/lib/relaton/xsf/bibliography.rb +24 -0
  562. data/lib/relaton/xsf/data_fetcher.rb +56 -0
  563. data/lib/relaton/xsf/hit.rb +17 -0
  564. data/lib/relaton/xsf/hit_collection.rb +24 -0
  565. data/lib/relaton/xsf/item.rb +7 -0
  566. data/lib/relaton/xsf/item_data.rb +6 -0
  567. data/lib/relaton/xsf/processor.rb +50 -0
  568. data/lib/relaton/xsf/util.rb +9 -0
  569. data/lib/relaton/xsf.rb +30 -0
  570. data/lib/relaton-core.rb +1 -0
  571. data/lib/relaton.rb +44 -9
  572. metadata +708 -150
  573. data/.github/workflows/rake.yml +0 -14
  574. data/.github/workflows/release.yml +0 -24
  575. data/.github/workflows/rubocop.yml +0 -48
  576. data/.gitignore +0 -12
  577. data/.rspec +0 -3
  578. data/.rubocop.yml +0 -12
  579. data/CLAUDE.md +0 -70
  580. data/Gemfile +0 -21
  581. data/Rakefile +0 -6
  582. data/docs/CHANGELOG.adoc +0 -16
  583. data/docs/VERSIONING_POLICY.adoc +0 -38
  584. data/docs/navigation.adoc +0 -6
  585. data/lib/relaton/config.rb +0 -24
  586. data/lib/relaton/db_cache.rb +0 -230
  587. data/lib/relaton/registry.rb +0 -118
  588. data/lib/relaton/util.rb +0 -7
  589. data/lib/relaton/workers_pool.rb +0 -21
  590. data/relaton.gemspec +0 -61
  591. data/spec/relaton/config_spec.rb +0 -10
  592. data/spec/relaton/db_cache_spec.rb +0 -51
  593. data/spec/relaton/db_spec.rb +0 -556
  594. data/spec/relaton/registry_spec.rb +0 -178
  595. data/spec/relaton/util_spec.rb +0 -3
  596. data/spec/relaton_spec.rb +0 -725
  597. data/spec/spec_helper.rb +0 -45
  598. data/spec/support/gb_t_20223_2006.xml +0 -33
  599. data/spec/support/iso_111111119115_1.xml +0 -0
  600. data/spec/support/iso_19115_1.xml +0 -115
  601. data/spec/support/iso_19115_2.xml +0 -95
  602. data/spec/support/rfc_8341.xml +0 -46
  603. data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +0 -12720
  604. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  605. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -143
  606. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -199
  607. data/spec/vcr_cassetes/cie_001_1980.yml +0 -401
  608. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1513
  609. data/spec/vcr_cassetes/doi_10_6028_nist_ir_8245.yml +0 -86
  610. data/spec/vcr_cassetes/ecma_6.yml +0 -112
  611. data/spec/vcr_cassetes/en_10160_1999.yml +0 -13624
  612. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -733
  613. data/spec/vcr_cassetes/ieee_528_2019.yml +0 -2786
  614. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  615. data/spec/vcr_cassetes/iso_19115_1.yml +0 -13177
  616. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -369
  617. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -13177
  618. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -229
  619. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -148
  620. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -364
  621. data/spec/vcr_cassetes/iso_combined_included.yml +0 -364
  622. data/spec/vcr_cassetes/iso_dis.yml +0 -157
  623. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -371
  624. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  625. data/spec/vcr_cassetes/rfc_8341.yml +0 -1272
@@ -0,0 +1,277 @@
1
+ module Relaton
2
+ module Bipm
3
+ class Id
4
+ # class Parser < Parslet::Parser
5
+ # rule(:space) { match("\s").repeat(1) }
6
+ # rule(:space?) { space.maybe }
7
+ # rule(:comma) { str(",") >> space? }
8
+ # rule(:lparen) { str("(") }
9
+ # rule(:rparen) { str(")") }
10
+ # rule(:slash) { str("/") }
11
+ # rule(:num) { match["0-9"].repeat(1) }
12
+
13
+ # rule(:delimeter) { str("--") >> space }
14
+ # rule(:delimeter?) { delimeter.maybe }
15
+
16
+ # rule(:lang) { comma >> space? >> match["A-Z"].repeat(1, 2).as(:lang) }
17
+ # rule(:lang?) { lang.maybe }
18
+
19
+ # rule(:numdash) { match["A-Z0-9-"].repeat(1).as(:number) }
20
+ # rule(:number) { numdash >> space? }
21
+ # rule(:number?) { number.maybe }
22
+ # rule(:num_suff) { numdash >> match["a-z"].repeat(1, 2) >> space }
23
+
24
+ # rule(:year) { match["0-9"].repeat(4, 4).as(:year) }
25
+ # rule(:year_paren) { lparen >> year >> lang? >> rparen }
26
+ # rule(:num_year) { number? >> year_paren }
27
+ # rule(:year_num) { year >> str("-") >> number }
28
+ # rule(:num_and_year) { num_year | year_num | number }
29
+
30
+ # rule(:sect) { lparen >> match["IVX"].repeat >> rparen }
31
+ # rule(:suff) { match["a-zA-Z-"].repeat(1) }
32
+ # rule(:cgmp) { str("CGPM") }
33
+ # rule(:cipm) { str("CIPM") >> (str(" MRA") | match["A-Z-"]).maybe }
34
+ # rule(:cc) { str("CC") >> suff >> sect.maybe }
35
+ # rule(:jc) { str("JC") >> suff }
36
+ # rule(:cec) { str("CEC") }
37
+ # rule(:wgms) { str("WG-MS") }
38
+ # rule(:group) { (cgmp | cipm | cc | jc | cec | wgms).as(:group) }
39
+
40
+ # rule(:type) { match["[:alpha:]"].repeat(1).as(:type) >> space }
41
+
42
+ # rule(:type_group) { type >> group >> slash >> num_and_year }
43
+ # rule(:group_type) { group >> space >> delimeter? >> type >> num_and_year }
44
+ # rule(:group_num) { group >> space >> num_suff >> type >> year_paren }
45
+ # rule(:outcome) { group_num | group_type | type_group }
46
+
47
+ # rule(:part_partie) { str("Part") | str("Partie") }
48
+ # rule(:part) { comma >> part_partie >> space >> num.as(:part) }
49
+ # rule(:append) { (comma | space) >> (str("Appendix") | str("Annexe")) >> space >> num.as(:append) }
50
+ # rule(:brochure) { str("SI").as(:group) >> space >> str("Brochure").as(:type) >> (part | append).maybe }
51
+
52
+ # rule(:metrologia) { str("Metrologia").as(:group) >> (space >> match["a-zA-Z0-9\s"].repeat(1).as(:number)).maybe }
53
+
54
+ # rule(:corr) { space >> str("Corrigendum").as(:corr) }
55
+ # rule(:corr?) { corr.maybe }
56
+ # rule(:jcgm) { group >> space >> numdash >> (str(":") >> year).maybe >> corr? }
57
+
58
+ # rule(:result) { outcome | brochure | metrologia | jcgm }
59
+
60
+ # root :result
61
+ # end
62
+
63
+ TYPES = {
64
+ "Resolution" => "RES",
65
+ "Résolution" => "RES",
66
+ "Recommendation" => "REC",
67
+ "Recommandation" => "REC",
68
+ "Decision" => "DECN",
69
+ "Décision" => "DECN",
70
+ "Declaration" => "DECL",
71
+ "Déclaration" => "DECL",
72
+ "Réunion" => "Meeting",
73
+ "Action" => "ACT",
74
+ }.freeze
75
+
76
+ # @return [Hash] the parsed id components
77
+ attr_accessor :id
78
+
79
+ #
80
+ # Create a new Id object
81
+ #
82
+ def initialize
83
+ # @id = Parser.new.parse(id)
84
+ # @id = parse(id)
85
+ # rescue Parslet::ParseFailed => e
86
+ # Util.warn "WARNING: Incorrect reference: `#{id}`"
87
+ # warn e.parse_failure_cause.ascii_tree
88
+ # raise RelatonBib::RequestError, e
89
+ end
90
+
91
+ # @param [String] id id string
92
+ #
93
+ def parse(id)
94
+ # str = StringScanner.new id
95
+ match = parse_outcome(id) || parse_brochure(id) || parse_metrologia(id) || parse_jcgm(id)
96
+ @id = match.named_captures.compact.transform_keys(&:to_sym)
97
+ self
98
+ rescue StandardError => e
99
+ Util.warn "Incorrect reference: `#{id}`"
100
+ raise Relaton::RequestError, e
101
+ end
102
+
103
+ def parse_outcome(id)
104
+ parse_group_num(id) || parse_group_type(id) || parse_type_group(id)
105
+ end
106
+
107
+ def parse_group_num(id)
108
+ %r{^#{group}\s#{number}[a-z]{1,2}\s#{type}\s#{year_lang}$}.match(id)
109
+ end
110
+
111
+ def parse_group_type(id)
112
+ %r{^#{group}\s(?:--\s)?#{type}\s#{num_and_year}$}.match(id)
113
+ end
114
+
115
+ def parse_type_group(id)
116
+ %r{^#{type}\s#{group}\/#{num_and_year}$}.match(id)
117
+ end
118
+
119
+ def group
120
+ "(?<group>CGPM|CIPM(?:\\sMRA|[A-Z-])?|CC[a-zA-Z-]+[IVX]*|JC[a-zA-Z-]+|CEC|WG-MS)"
121
+ end
122
+
123
+ def type; "(?<type>[[:alpha:]]+)"; end
124
+ def number; "(?<number>[A-Z0-9-]+)"; end
125
+ def year; "(?<year>\\d{4})"; end
126
+ def lang; ",\\s?(?<lang>[A-Z]{1,2})"; end
127
+ def year_lang; "\\(#{year}(?:#{lang})?\\)"; end
128
+ def num_and_year; "(?:(?:#{number}\\s)?#{year_lang}|#{year}-#{number}|#{number})"; end
129
+
130
+ def parse_brochure(id)
131
+ parse_si_brochure(id) || parse_brochure_other(id)
132
+ end
133
+
134
+ def parse_si_brochure(id)
135
+ parse_si_brochure_en(id) || parse_si_brochure_fr(id)
136
+ end
137
+
138
+ # English form. Accepts the bare/sectioned forms ("SI Brochure",
139
+ # "SI Brochure, Part 1", "SI Brochure Concise" …) and the edition-tagged
140
+ # docnumber emitted by SI Brochure 9e v3.01:
141
+ # "SI Brochure 9e v3.01 (2019/2024, E)"
142
+ # Edition/version/year/lang are matched but not captured so the index
143
+ # key collapses to {group, type} as the prior collection-render flow.
144
+ def parse_si_brochure_en(id)
145
+ %r{^
146
+ (?<group>SI)\s(?<type>Brochure)
147
+ (?:,?\s(?:(?:Part|Partie)\s(?<part>\d+)|(?:Appendix|Annexe)\s(?<append>\d+)|(?<number>Concise|FAQ)))?
148
+ (?:\s\d+e\sv[\d.]+\s\([\d/]+(?:,\s*[A-Z])?\))?
149
+ $}x.match(id)
150
+ end
151
+
152
+ # French form. The SI Brochure 9e v3.01 French bibdata emits its
153
+ # docnumber as "Brochure sur le SI 9e v3.01 (2019/2024, F)". Same
154
+ # document as the English form — collapse to the same {group, type}.
155
+ def parse_si_brochure_fr(id)
156
+ %r{^
157
+ (?<type>Brochure)\ssur\sle\s(?<group>SI)
158
+ (?:\s\d+e\sv[\d.]+\s\([\d/]+(?:,\s*[A-Z])?\))?
159
+ $}x.match(id)
160
+ end
161
+
162
+ def parse_brochure_other(id)
163
+ %r{^(?<group>CCEM|CCL|CCM|SI|Rapport)[-\s](?<type>GD-RSI|GD-MeP|MEP|BIPM)[-\s](?<number>\w+|\d{4}\/\d{2})$}.match(id)
164
+ end
165
+
166
+ def parse_metrologia(id)
167
+ %r{^(?<group>Metrologia)(?:\s(?<number>[a-zA-Z0-9\s]+))?$}.match(id)
168
+ end
169
+
170
+ def parse_jcgm(id)
171
+ %r{^#{group}\s#{number}(?::#{year})?(?:\s(?<corr>Corrigendum))?$}.match(id)
172
+ end
173
+
174
+ # def parse_gorup_num(str)
175
+ # return unless group = parse_group(str)
176
+
177
+ # return unless str.scan(" ") && num_suff = parse_num_suff(str)
178
+
179
+ # return unless type = parse_type(str)
180
+
181
+ # return unless year = parse_year_parent(str)
182
+
183
+ # { group: group, number: num_suff, type: type, year: year }
184
+ # end
185
+
186
+ # def parse_group(str)
187
+ # str.scan %r{CGPM|CIPM(?:\sMRA|[A-Z-])?|CC[a-zA-Z-]+[IVX]*|JC[a-zA-Z-]|CEC|WG-MS}
188
+ # end
189
+
190
+ # def parse_num_suff(str)
191
+ # num = parse_numdash(str)
192
+ # num if num && str.scan(/[a-z]{1,2}\s/)
193
+ # end
194
+
195
+ # def parse_number(str)
196
+ # parse_numdash(str)
197
+ # end
198
+
199
+ # def parse_numdash(str)
200
+ # str.scan(/[A-Z0-9-]+/)
201
+ # end
202
+
203
+ #
204
+ # Compare two Id objects
205
+ #
206
+ # @param [RelatonBipm::Id, Hash] other the other Id object
207
+ #
208
+ # @return [Boolean] true if the two Id objects are equal
209
+ #
210
+ def ==(other) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize
211
+ other_hash = other.is_a?(Id) ? other.to_hash : normalize_hash(other)
212
+ hash = to_hash.dup
213
+ hash.delete(:number) if other_hash[:number].nil? && hash[:number] == "1" && hash[:year]
214
+ other_hash.delete(:number) if hash[:number].nil? && other_hash[:number] == "1" && other_hash[:year]
215
+ # hash.delete(:year) unless other_hash[:year]
216
+ other_hash.delete(:year) unless hash[:year]
217
+ hash.delete(:lang) unless other_hash[:lang]
218
+ other_hash.delete(:lang) unless hash[:lang]
219
+ hash.delete(:part) unless other_hash[:part]
220
+ hash.delete(:append) unless other_hash[:append]
221
+ hash == other_hash
222
+ end
223
+
224
+ #
225
+ # Transform ID parts.
226
+ # Traslate type into abbreviation, remove leading zeros from number
227
+ #
228
+ # @return [Hash] the normalized ID parts
229
+ #
230
+ def to_hash
231
+ @to_hash ||= normalize_hash id
232
+ end
233
+
234
+ #
235
+ # Normalize ID parts
236
+ # Traslate type into abbreviation, remove leading zeros from number
237
+ #
238
+ # @param [RelatonBipm::Id, Hash] src the ID parts
239
+ #
240
+ # @return [Hash] the normalized ID parts
241
+ #
242
+ def normalize_hash(src) # rubocop:disable Metrics/AbcSize
243
+ hash = { group: src[:group].to_s.sub("CCDS", "CCTF") }
244
+ hash[:type] = normalized_type(src) if src[:type]
245
+ norm_num = normalized_number(src)
246
+ hash[:number] = norm_num unless norm_num.nil? || norm_num.empty?
247
+ hash[:year] = src[:year].to_s if src[:year]
248
+ hash[:corr] = true if src[:corr]
249
+ hash[:part] = src[:part].to_s if src[:part]
250
+ hash[:append] = src[:append].to_s if src[:append]
251
+ hash[:lang] = src[:lang].to_s if src[:lang]
252
+ hash
253
+ end
254
+
255
+ #
256
+ # Translate type into abbreviation
257
+ #
258
+ # @return [String] the normalized type
259
+ #
260
+ def normalized_type(src)
261
+ type = TYPES[src[:type].to_s.capitalize] || src[:type].to_s
262
+ type == type.upcase ? type : type.capitalize
263
+ end
264
+
265
+ #
266
+ # Remove leading zeros from number
267
+ #
268
+ # @return [String, nil] the normalized number
269
+ #
270
+ def normalized_number(src)
271
+ return unless src[:number]
272
+
273
+ src[:number].to_s.sub(/^0+/, "")
274
+ end
275
+ end
276
+ end
277
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "converter/asciibib"
2
+
3
+ module Relaton
4
+ module Bipm
5
+ class ItemData < Bib::ItemData
6
+ def deep_clone
7
+ Item.from_yaml Item.to_yaml(self)
8
+ end
9
+
10
+ # def create_relation(**args)
11
+ # Relation.new(**args)
12
+ # end
13
+
14
+ def to_xml(bibdata: false, **opts)
15
+ add_notes opts[:note] do
16
+ bibdata ? Bibdata.to_xml(self) : Bibitem.to_xml(self)
17
+ end
18
+ end
19
+
20
+ def to_yaml(**opts)
21
+ add_notes opts[:note] do
22
+ Item.to_yaml(self)
23
+ end
24
+ end
25
+
26
+ def to_json(**opts)
27
+ add_notes opts[:note] do
28
+ Item.to_json(self)
29
+ end
30
+ end
31
+
32
+ def to_asciibib
33
+ Converter::Asciibib.from_item(self)
34
+ end
35
+
36
+ # private
37
+
38
+ # def add_notes(notes)
39
+ # self.note ||= []
40
+ # Relaton.array(notes).each { |nt| note << Bib::Note.new(**nt) }
41
+ # result = yield
42
+ # Relaton.array(notes).each { note.pop }
43
+ # result
44
+ # end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ module Relaton
2
+ module Bipm
3
+ class Bibdata < Item
4
+ include Bib::BibdataShared
5
+
6
+ model ItemData
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Relaton
2
+ module Bipm
3
+ class Bibitem < Item
4
+ include Bib::BibitemShared
5
+
6
+ model ItemData
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Relaton
2
+ module Bipm
3
+ class CommentPeriod < Lutaml::Model::Serializable
4
+ attribute :from, :date
5
+ attribute :to, :date
6
+
7
+ xml do
8
+ map_element "from", to: :from
9
+ map_element "to", to: :to
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module Relaton
2
+ module Bipm
3
+ class Doctype < Bib::Doctype
4
+ TYPES = %w[
5
+ brochure mise-en-pratique rapport monographie guide meeting-report
6
+ technical-report working-party-note strategy cipm-mra resolution policy
7
+ ].freeze
8
+
9
+ attribute :content, :string, values: TYPES
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,38 @@
1
+ require_relative "doctype"
2
+ require_relative "comment_period"
3
+ require_relative "structured_identifier"
4
+
5
+ module Relaton
6
+ module Bipm
7
+ class Ext < Bib::Ext
8
+ SI_ASPECTS = %w[
9
+ A_e_deltanu A_e cd_Kcd_h_deltanu cd_Kcd full K_k_deltanu K_k
10
+ kg_h_c_deltanu kg_h m_c_deltanu m_c mol_NA s_deltanu
11
+ ]
12
+
13
+ attribute :doctype, Doctype
14
+ attribute :comment_period, CommentPeriod
15
+ attribute :si_aspect, :string, values: SI_ASPECTS
16
+ attribute :meeting_note, :string
17
+ attribute :structuredidentifier, StructuredIdentifier
18
+
19
+ xml do
20
+ map_element "comment-period", to: :comment_period
21
+ map_element "si-aspect", to: :si_aspect
22
+ map_element "meeting-note", to: :meeting_note
23
+ map_element "structuredidentifier", to: :structuredidentifier
24
+ end
25
+
26
+ key_value do
27
+ map_element "comment_period", to: :comment_period
28
+ map_element "si_aspect", to: :si_aspect
29
+ map_element "structuredidentifier", to: :structuredidentifier
30
+ map_element "meeting_note", to: :meeting_note
31
+ end
32
+
33
+ def get_schema_version
34
+ Relaton.schema_versions["relaton-model-bipm"]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,11 @@
1
+ require_relative "ext"
2
+
3
+ module Relaton
4
+ module Bipm
5
+ class Item < Bib::Item
6
+ model ItemData
7
+
8
+ attribute :ext, Ext
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Relaton
2
+ module Bipm
3
+ class StructuredIdentifier < Lutaml::Model::Serializable
4
+ attribute :docnumber, :string
5
+ attribute :part, :string
6
+ attribute :appendix, :string
7
+
8
+ xml do
9
+ map_element "docnumber", to: :docnumber
10
+ map_element "part", to: :part
11
+ map_element "appendix", to: :appendix
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,69 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Bipm
5
+ class Processor < Relaton::Core::Processor
6
+ attr_reader :idtype
7
+
8
+ def initialize
9
+ @short = :relaton_bipm
10
+ @prefix = "BIPM"
11
+ @defaultprefix = %r{^(?:BIPM|CCTF|CCDS|CGPM|CIPM|JCRB|JCGM)(?!\w)}
12
+ @idtype = "BIPM"
13
+ @datasets = %w[bipm-data-outcomes bipm-si-brochure rawdata-bipm-metrologia]
14
+ end
15
+
16
+ # @param code [String]
17
+ # @param date [String, NilClass] year
18
+ # @param opts [Hash]
19
+ # @return [RelatonBipm::BipmBibliographicItem]
20
+ def get(code, date, opts)
21
+ require_relative "../bipm"
22
+ Bibliography.get(code, date, opts)
23
+ end
24
+
25
+ #
26
+ # Fetch all the documents from https://github.com/metanorma/bipm-data-outcomes,
27
+ # https://github.com/metanorma/bipm-si-brochure, https://github.com/relaton/rawdata-bipm-metrologia
28
+ #
29
+ # @param [String] source source name (bipm-data-outcomes, bipm-si-brochure,
30
+ # rawdata-bipm-metrologia)
31
+ # @param [Hash] opts
32
+ # @option opts [String] :output directory to output documents
33
+ # @option opts [String] :format
34
+ #
35
+ def fetch_data(source, opts)
36
+ require_relative "data_fetcher"
37
+ DataFetcher.fetch(source, **opts)
38
+ end
39
+
40
+ # @param xml [String]
41
+ # @return [RelatonBipm::BipmBibliographicItem]
42
+ def from_xml(xml)
43
+ require_relative "../bipm"
44
+ Item.from_xml xml
45
+ end
46
+
47
+ def from_yaml(yaml)
48
+ require_relative "../bipm"
49
+ Item.from_yaml yaml
50
+ end
51
+
52
+
53
+ # Returns hash of XML grammar
54
+ # @return [String]
55
+ def grammar_hash
56
+ require_relative "../bipm"
57
+ @grammar_hash ||= Relaton::Bipm.grammar_hash
58
+ end
59
+
60
+ #
61
+ # Remove index file
62
+ #
63
+ def remove_index_file
64
+ require_relative "../bipm"
65
+ Relaton::Index.find_or_create(:bipm, url: true, file: INDEXFILE).remove_file
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,111 @@
1
+ module Relaton::Bipm
2
+ module RawdataBipmMetrologia
3
+ class Affiliations
4
+ attr_reader :affiliations
5
+
6
+ #
7
+ # Initialize parser
8
+ #
9
+ # @param [Array<Relaton::Bib::Affiliation>] affiliations directory with affiliations
10
+ #
11
+ def initialize(affiliations)
12
+ @affiliations = affiliations
13
+ end
14
+
15
+ #
16
+ # Parse affiliations
17
+ #
18
+ # @return [Relaton::Bipm::RawdataBipmMetrologia::Affiliations] affiliations
19
+ #
20
+ def self.parse(dir)
21
+ affiliations = Dir["#{dir}/*.xml"].each_with_object([]) do |path, m|
22
+ doc = Nokogiri::XML(File.read(path, encoding: "UTF-8"))
23
+ doc.xpath("//aff").each do |aff|
24
+ m << parse_affiliation(aff) if aff.at("institution")
25
+ end
26
+ end.uniq { |a| a.organization.name.first.content }
27
+ new affiliations
28
+ end
29
+
30
+ #
31
+ # Parse affiliation organization
32
+ # https://github.com/relaton/relaton-data-bipm/issues/17#issuecomment-1367035444
33
+ #
34
+ # @param [Nokogiri::XML::Element] aff
35
+ #
36
+ # @return [Relaton::Bib::Affiliation] Organization name, country, division, street address
37
+ #
38
+ def self.parse_affiliation(aff)
39
+ text = aff.at("text()").text
40
+ return if text.include? "Permanent address:" || text.include?("1005 Southover Lane") ||
41
+ text == "Germany" || text.starts_with?("Guest") || text.starts_with?("Deceased") ||
42
+ text.include?("Author to whom any correspondence should be addressed")
43
+
44
+ args = {}
45
+ institution = aff.at('institution')
46
+ if institution
47
+ name = institution.text
48
+ return if name == "1005 Southover Lane"
49
+
50
+ args[:subdivision] = parse_division(aff)
51
+ args[:contact] = parse_address(aff)
52
+ else
53
+ # div, name, city, country = aff.xpath("text()").text.strip.split(", ")
54
+ # div, name = name, div if name.nil?
55
+ # args[:subdivision] = [Relaton::Bib::LocalizedString.new(div)] if div
56
+ # args[:contact] = [Relaton::Bib::Address.new(city: city, country: country)] if city && country
57
+ name = aff.text
58
+ end
59
+ args[:name] = [Relaton::Bib::LocalizedString.new(name)]
60
+ org = Relaton::Bib::Organization.new(**args)
61
+ Relaton::Bib::Affiliation.new(organization: org)
62
+ end
63
+
64
+ def self.parse_division(aff)
65
+ div = aff.xpath("text()[following-sibling::institution]").text.gsub(/^\W*|\W*$/, "")
66
+ return [] if div.empty?
67
+
68
+ [Relaton::Bib::LocalizedString.new(div)]
69
+ end
70
+
71
+ def self.parse_address(aff)
72
+ address = []
73
+ addr = aff.xpath("text()[preceding-sibling::institution]").text.gsub(/^\W*|\W*$/, "")
74
+ address << addr unless addr.empty?
75
+ country = aff.at('country')
76
+ address << country.text if country && !country.text.empty?
77
+ address = address.join(", ")
78
+ return [] if address.empty?
79
+
80
+ [Relaton::Bib::Address.new(formatted_address: address)]
81
+ end
82
+
83
+ def self.parse_elements(aff)
84
+ elements = aff.xpath("text()").text.strip.split(", ")
85
+ case elements.size
86
+ when 1 then { name: Relaton::Bib::LocalizedString.new(elements[0]) }
87
+ when 2
88
+ # name, country
89
+ { name: Relaton::Bib::LocalizedString.new(elements[0]),
90
+ contact: [Relaton::Bib::Address.new(formatted_address: elements[1])] }
91
+ when 3
92
+ # it can be name, country, city or name, city, country
93
+ # so use formatted_address instead of city and country
94
+ { name: Relaton::Bib::LocalizedString.new(elements[0]),
95
+ contact: Relaton::Bib::Address.new(formatted_address: elements[1, 2].join(", ")) }
96
+ end
97
+ end
98
+
99
+ #
100
+ # Find affiliation by organization name
101
+ #
102
+ # @param [Strign] text string with organization name in it
103
+ #
104
+ # @return [Relaton::Bib::Affiliation]
105
+ #
106
+ def find(text)
107
+ @affiliations.select { |a| text.include?(a.organization.name[0].content) }.sort.last
108
+ end
109
+ end
110
+ end
111
+ end