relaton 2.2.0.pre.alpha.1 → 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 (610) 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/registry.rb +4 -4
  188. data/lib/relaton/db.rb +0 -1
  189. data/lib/relaton/doi/crossref.rb +72 -0
  190. data/lib/relaton/doi/parser.rb +827 -0
  191. data/lib/relaton/doi/processor.rb +65 -0
  192. data/lib/relaton/doi/util.rb +8 -0
  193. data/lib/relaton/doi.rb +20 -0
  194. data/lib/relaton/ecma/bibdata.rb +8 -0
  195. data/lib/relaton/ecma/bibitem.rb +8 -0
  196. data/lib/relaton/ecma/bibliography.rb +81 -0
  197. data/lib/relaton/ecma/data_fetcher.rb +103 -0
  198. data/lib/relaton/ecma/data_parser.rb +49 -0
  199. data/lib/relaton/ecma/edition_parser.rb +80 -0
  200. data/lib/relaton/ecma/ext.rb +7 -0
  201. data/lib/relaton/ecma/item.rb +11 -0
  202. data/lib/relaton/ecma/item_data.rb +6 -0
  203. data/lib/relaton/ecma/memento_parser.rb +60 -0
  204. data/lib/relaton/ecma/page_fetcher.rb +27 -0
  205. data/lib/relaton/ecma/parser_common.rb +33 -0
  206. data/lib/relaton/ecma/processor.rb +66 -0
  207. data/lib/relaton/ecma/standard_parser.rb +134 -0
  208. data/lib/relaton/ecma/util.rb +8 -0
  209. data/lib/relaton/ecma.rb +24 -0
  210. data/lib/relaton/etsi/bibdata.rb +10 -0
  211. data/lib/relaton/etsi/bibitem.rb +10 -0
  212. data/lib/relaton/etsi/bibliography.rb +46 -0
  213. data/lib/relaton/etsi/data_fetcher.rb +128 -0
  214. data/lib/relaton/etsi/data_parser.rb +208 -0
  215. data/lib/relaton/etsi/doctype.rb +30 -0
  216. data/lib/relaton/etsi/ext.rb +31 -0
  217. data/lib/relaton/etsi/item.rb +15 -0
  218. data/lib/relaton/etsi/item_data.rb +6 -0
  219. data/lib/relaton/etsi/processor.rb +69 -0
  220. data/lib/relaton/etsi/pubid.rb +37 -0
  221. data/lib/relaton/etsi/status.rb +13 -0
  222. data/lib/relaton/etsi/util.rb +8 -0
  223. data/lib/relaton/etsi.rb +25 -0
  224. data/lib/relaton/gb/bibdata.rb +8 -0
  225. data/lib/relaton/gb/bibitem.rb +8 -0
  226. data/lib/relaton/gb/bibliography.rb +145 -0
  227. data/lib/relaton/gb/ccs.rb +14 -0
  228. data/lib/relaton/gb/committee.rb +13 -0
  229. data/lib/relaton/gb/docidentifier.rb +23 -0
  230. data/lib/relaton/gb/doctype.rb +9 -0
  231. data/lib/relaton/gb/ext.rb +36 -0
  232. data/lib/relaton/gb/gb_scraper.rb +61 -0
  233. data/lib/relaton/gb/gb_type.rb +20 -0
  234. data/lib/relaton/gb/hit.rb +48 -0
  235. data/lib/relaton/gb/hit_collection.rb +19 -0
  236. data/lib/relaton/gb/item.rb +13 -0
  237. data/lib/relaton/gb/item_data.rb +6 -0
  238. data/lib/relaton/gb/processor.rb +46 -0
  239. data/lib/relaton/gb/project_number.rb +38 -0
  240. data/lib/relaton/gb/scraper.rb +204 -0
  241. data/lib/relaton/gb/sec_scraper.rb +92 -0
  242. data/lib/relaton/gb/stage_name.rb +13 -0
  243. data/lib/relaton/gb/structured_identifier.rb +26 -0
  244. data/lib/relaton/gb/t_scraper.rb +126 -0
  245. data/lib/relaton/gb/util.rb +8 -0
  246. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  247. data/lib/relaton/gb.rb +33 -0
  248. data/lib/relaton/iana/bibdata.rb +8 -0
  249. data/lib/relaton/iana/bibitem.rb +8 -0
  250. data/lib/relaton/iana/bibliography.rb +47 -0
  251. data/lib/relaton/iana/data_fetcher.rb +71 -0
  252. data/lib/relaton/iana/item.rb +7 -0
  253. data/lib/relaton/iana/item_data.rb +6 -0
  254. data/lib/relaton/iana/parser.rb +146 -0
  255. data/lib/relaton/iana/processor.rb +68 -0
  256. data/lib/relaton/iana/util.rb +8 -0
  257. data/lib/relaton/iana.rb +29 -0
  258. data/lib/relaton/iec/bibliography.rb +283 -0
  259. data/lib/relaton/iec/data_fetcher.rb +216 -0
  260. data/lib/relaton/iec/data_parser.rb +391 -0
  261. data/lib/relaton/iec/hit.rb +26 -0
  262. data/lib/relaton/iec/hit_collection.rb +138 -0
  263. data/lib/relaton/iec/item_data.rb +7 -0
  264. data/lib/relaton/iec/model/bibdata.rb +8 -0
  265. data/lib/relaton/iec/model/bibitem.rb +8 -0
  266. data/lib/relaton/iec/model/docidentifier.rb +131 -0
  267. data/lib/relaton/iec/model/doctype.rb +12 -0
  268. data/lib/relaton/iec/model/ext.rb +53 -0
  269. data/lib/relaton/iec/model/item.rb +20 -0
  270. data/lib/relaton/iec/model/item_base.rb +12 -0
  271. data/lib/relaton/iec/model/relation.rb +7 -0
  272. data/lib/relaton/iec/model/stage_name.rb +13 -0
  273. data/lib/relaton/iec/processor.rb +73 -0
  274. data/lib/relaton/iec/statuses.yml +199 -0
  275. data/lib/relaton/iec/util.rb +8 -0
  276. data/lib/relaton/iec.rb +98 -0
  277. data/lib/relaton/ieee/balloting_group.rb +13 -0
  278. data/lib/relaton/ieee/bibdata.rb +8 -0
  279. data/lib/relaton/ieee/bibitem.rb +8 -0
  280. data/lib/relaton/ieee/bibliography.rb +51 -0
  281. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  282. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  283. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  284. data/lib/relaton/ieee/data_fetcher.rb +630 -0
  285. data/lib/relaton/ieee/doctype.rb +9 -0
  286. data/lib/relaton/ieee/editorial_group.rb +19 -0
  287. data/lib/relaton/ieee/ext.rb +36 -0
  288. data/lib/relaton/ieee/idams_parser.rb +323 -0
  289. data/lib/relaton/ieee/item.rb +11 -0
  290. data/lib/relaton/ieee/item_data.rb +7 -0
  291. data/lib/relaton/ieee/processor.rb +68 -0
  292. data/lib/relaton/ieee/pub_id.rb +161 -0
  293. data/lib/relaton/ieee/rawbib_id_parser.rb +548 -0
  294. data/lib/relaton/ieee/util.rb +8 -0
  295. data/lib/relaton/ieee.rb +29 -0
  296. data/lib/relaton/ietf/bibdata.rb +8 -0
  297. data/lib/relaton/ietf/bibitem.rb +8 -0
  298. data/lib/relaton/ietf/bibliography.rb +35 -0
  299. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  300. data/lib/relaton/ietf/data_fetcher.rb +278 -0
  301. data/lib/relaton/ietf/doctype.rb +9 -0
  302. data/lib/relaton/ietf/ext.rb +63 -0
  303. data/lib/relaton/ietf/item.rb +16 -0
  304. data/lib/relaton/ietf/item_base.rb +18 -0
  305. data/lib/relaton/ietf/item_data.rb +6 -0
  306. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  307. data/lib/relaton/ietf/processor.rb +68 -0
  308. data/lib/relaton/ietf/relation.rb +9 -0
  309. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  310. data/lib/relaton/ietf/rfc/author.rb +21 -0
  311. data/lib/relaton/ietf/rfc/entry.rb +410 -0
  312. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  313. data/lib/relaton/ietf/rfc/format.rb +19 -0
  314. data/lib/relaton/ietf/rfc/index.rb +46 -0
  315. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  316. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  317. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  318. data/lib/relaton/ietf/scraper.rb +68 -0
  319. data/lib/relaton/ietf/util.rb +8 -0
  320. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  321. data/lib/relaton/ietf.rb +27 -0
  322. data/lib/relaton/iho/bibdata.rb +8 -0
  323. data/lib/relaton/iho/bibitem.rb +8 -0
  324. data/lib/relaton/iho/bibliography.rb +114 -0
  325. data/lib/relaton/iho/comment_period.rb +13 -0
  326. data/lib/relaton/iho/docidentifier.rb +31 -0
  327. data/lib/relaton/iho/doctype.rb +10 -0
  328. data/lib/relaton/iho/ext.rb +20 -0
  329. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  330. data/lib/relaton/iho/item.rb +20 -0
  331. data/lib/relaton/iho/item_base.rb +18 -0
  332. data/lib/relaton/iho/item_data.rb +6 -0
  333. data/lib/relaton/iho/processor.rb +54 -0
  334. data/lib/relaton/iho/relation.rb +9 -0
  335. data/lib/relaton/iho/structured_identifier.rb +20 -0
  336. data/lib/relaton/iho/util.rb +8 -0
  337. data/lib/relaton/iho.rb +27 -0
  338. data/lib/relaton/index/config.rb +52 -0
  339. data/lib/relaton/index/file_io.rb +305 -0
  340. data/lib/relaton/index/file_storage.rb +61 -0
  341. data/lib/relaton/index/id_number.rb +30 -0
  342. data/lib/relaton/index/pool.rb +41 -0
  343. data/lib/relaton/index/type.rb +159 -0
  344. data/lib/relaton/index/util.rb +18 -0
  345. data/lib/relaton/index.rb +60 -0
  346. data/lib/relaton/isbn/isbn.rb +61 -0
  347. data/lib/relaton/isbn/open_library.rb +43 -0
  348. data/lib/relaton/isbn/parser.rb +88 -0
  349. data/lib/relaton/isbn/processor.rb +48 -0
  350. data/lib/relaton/isbn/util.rb +8 -0
  351. data/lib/relaton/isbn.rb +19 -0
  352. data/lib/relaton/iso/bibliography.rb +407 -0
  353. data/lib/relaton/iso/data_fetcher.rb +338 -0
  354. data/lib/relaton/iso/data_parser.rb +444 -0
  355. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  356. data/lib/relaton/iso/hit.rb +57 -0
  357. data/lib/relaton/iso/hit_collection.rb +184 -0
  358. data/lib/relaton/iso/item_data.rb +28 -0
  359. data/lib/relaton/iso/model/bibdata.rb +10 -0
  360. data/lib/relaton/iso/model/bibitem.rb +8 -0
  361. data/lib/relaton/iso/model/contributor.rb +6 -0
  362. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  363. data/lib/relaton/iso/model/docidentifier.rb +134 -0
  364. data/lib/relaton/iso/model/doctype.rb +13 -0
  365. data/lib/relaton/iso/model/ext.rb +35 -0
  366. data/lib/relaton/iso/model/item.rb +17 -0
  367. data/lib/relaton/iso/model/item_base.rb +22 -0
  368. data/lib/relaton/iso/model/organization.rb +9 -0
  369. data/lib/relaton/iso/model/project_number.rb +22 -0
  370. data/lib/relaton/iso/model/relation.rb +9 -0
  371. data/lib/relaton/iso/model/stagename.rb +14 -0
  372. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  373. data/lib/relaton/iso/processor.rb +84 -0
  374. data/lib/relaton/iso/scraper.rb +619 -0
  375. data/lib/relaton/iso/type/pubid.rb +50 -0
  376. data/lib/relaton/iso/util.rb +8 -0
  377. data/lib/relaton/iso.rb +30 -0
  378. data/lib/relaton/itu/bibliography.rb +90 -0
  379. data/lib/relaton/itu/data_fetcher.rb +104 -0
  380. data/lib/relaton/itu/data_parser_r.rb +140 -0
  381. data/lib/relaton/itu/hit.rb +22 -0
  382. data/lib/relaton/itu/hit_collection.rb +127 -0
  383. data/lib/relaton/itu/item_data.rb +6 -0
  384. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  385. data/lib/relaton/itu/model/bibdata.rb +8 -0
  386. data/lib/relaton/itu/model/bibitem.rb +8 -0
  387. data/lib/relaton/itu/model/docidentifier.rb +9 -0
  388. data/lib/relaton/itu/model/doctype.rb +13 -0
  389. data/lib/relaton/itu/model/ext.rb +47 -0
  390. data/lib/relaton/itu/model/item.rb +13 -0
  391. data/lib/relaton/itu/model/meeting.rb +13 -0
  392. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  393. data/lib/relaton/itu/model/question.rb +13 -0
  394. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  395. data/lib/relaton/itu/model/structured_identifier.rb +19 -0
  396. data/lib/relaton/itu/processor.rb +66 -0
  397. data/lib/relaton/itu/pubid.rb +177 -0
  398. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  399. data/lib/relaton/itu/recommendation_parser.rb +161 -0
  400. data/lib/relaton/itu/scraper.rb +193 -0
  401. data/lib/relaton/itu/util.rb +8 -0
  402. data/lib/relaton/itu.rb +33 -0
  403. data/lib/relaton/jis/bibdata.rb +8 -0
  404. data/lib/relaton/jis/bibitem.rb +8 -0
  405. data/lib/relaton/jis/bibliography.rb +75 -0
  406. data/lib/relaton/jis/data_fetcher.rb +181 -0
  407. data/lib/relaton/jis/docidentifier.rb +21 -0
  408. data/lib/relaton/jis/doctype.rb +9 -0
  409. data/lib/relaton/jis/ext.rb +13 -0
  410. data/lib/relaton/jis/hit.rb +93 -0
  411. data/lib/relaton/jis/hit_collection.rb +127 -0
  412. data/lib/relaton/jis/item.rb +22 -0
  413. data/lib/relaton/jis/item_base.rb +26 -0
  414. data/lib/relaton/jis/item_data.rb +8 -0
  415. data/lib/relaton/jis/processor.rb +55 -0
  416. data/lib/relaton/jis/relation.rb +11 -0
  417. data/lib/relaton/jis/scraper.rb +232 -0
  418. data/lib/relaton/jis/structured_identifier.rb +13 -0
  419. data/lib/relaton/jis/util.rb +8 -0
  420. data/lib/relaton/jis.rb +33 -0
  421. data/lib/relaton/logger/channels/gh_issue.rb +78 -0
  422. data/lib/relaton/logger/config.rb +34 -0
  423. data/lib/relaton/logger/formatter_json.rb +8 -0
  424. data/lib/relaton/logger/formatter_string.rb +12 -0
  425. data/lib/relaton/logger/log.rb +64 -0
  426. data/lib/relaton/logger/log_device.rb +27 -0
  427. data/lib/relaton/logger/pool.rb +24 -0
  428. data/lib/relaton/logger.rb +18 -0
  429. data/lib/relaton/nist/bibdata.rb +8 -0
  430. data/lib/relaton/nist/bibitem.rb +8 -0
  431. data/lib/relaton/nist/bibliography.rb +191 -0
  432. data/lib/relaton/nist/comment_period.rb +15 -0
  433. data/lib/relaton/nist/data_fetcher.rb +84 -0
  434. data/lib/relaton/nist/date.rb +7 -0
  435. data/lib/relaton/nist/doctype.rb +7 -0
  436. data/lib/relaton/nist/ext.rb +16 -0
  437. data/lib/relaton/nist/hit.rb +18 -0
  438. data/lib/relaton/nist/hit_collection.rb +362 -0
  439. data/lib/relaton/nist/item.rb +17 -0
  440. data/lib/relaton/nist/item_data.rb +6 -0
  441. data/lib/relaton/nist/mods_parser.rb +276 -0
  442. data/lib/relaton/nist/processor.rb +68 -0
  443. data/lib/relaton/nist/pubs_export.rb +69 -0
  444. data/lib/relaton/nist/relation.rb +7 -0
  445. data/lib/relaton/nist/scraper.rb +290 -0
  446. data/lib/relaton/nist/series.yaml +49 -0
  447. data/lib/relaton/nist/util.rb +8 -0
  448. data/lib/relaton/nist.rb +34 -0
  449. data/lib/relaton/oasis/bibdata.rb +8 -0
  450. data/lib/relaton/oasis/bibitem.rb +8 -0
  451. data/lib/relaton/oasis/bibliography.rb +60 -0
  452. data/lib/relaton/oasis/browser_agent.rb +71 -0
  453. data/lib/relaton/oasis/data_fetcher.rb +94 -0
  454. data/lib/relaton/oasis/data_parser.rb +305 -0
  455. data/lib/relaton/oasis/data_parser_utils.rb +296 -0
  456. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  457. data/lib/relaton/oasis/doctype.rb +7 -0
  458. data/lib/relaton/oasis/ext.rb +19 -0
  459. data/lib/relaton/oasis/item.rb +11 -0
  460. data/lib/relaton/oasis/item_data.rb +6 -0
  461. data/lib/relaton/oasis/processor.rb +68 -0
  462. data/lib/relaton/oasis/util.rb +8 -0
  463. data/lib/relaton/oasis.rb +28 -0
  464. data/lib/relaton/ogc/bibdata.rb +8 -0
  465. data/lib/relaton/ogc/bibitem.rb +8 -0
  466. data/lib/relaton/ogc/bibliography.rb +64 -0
  467. data/lib/relaton/ogc/data_fetcher.rb +110 -0
  468. data/lib/relaton/ogc/docidentifier.rb +6 -0
  469. data/lib/relaton/ogc/doctype.rb +12 -0
  470. data/lib/relaton/ogc/ext.rb +15 -0
  471. data/lib/relaton/ogc/hit.rb +18 -0
  472. data/lib/relaton/ogc/hit_collection.rb +36 -0
  473. data/lib/relaton/ogc/item.rb +13 -0
  474. data/lib/relaton/ogc/item_data.rb +6 -0
  475. data/lib/relaton/ogc/processor.rb +58 -0
  476. data/lib/relaton/ogc/scraper.rb +225 -0
  477. data/lib/relaton/ogc/util.rb +8 -0
  478. data/lib/relaton/ogc.rb +26 -0
  479. data/lib/relaton/oiml/bibdata.rb +8 -0
  480. data/lib/relaton/oiml/bibitem.rb +8 -0
  481. data/lib/relaton/oiml/bibliography.rb +94 -0
  482. data/lib/relaton/oiml/docidentifier.rb +33 -0
  483. data/lib/relaton/oiml/doctype.rb +13 -0
  484. data/lib/relaton/oiml/ext.rb +42 -0
  485. data/lib/relaton/oiml/item.rb +20 -0
  486. data/lib/relaton/oiml/item_base.rb +18 -0
  487. data/lib/relaton/oiml/item_data.rb +6 -0
  488. data/lib/relaton/oiml/processor.rb +54 -0
  489. data/lib/relaton/oiml/relation.rb +9 -0
  490. data/lib/relaton/oiml/util.rb +8 -0
  491. data/lib/relaton/oiml.rb +24 -0
  492. data/lib/relaton/omg/bibdata.rb +8 -0
  493. data/lib/relaton/omg/bibitem.rb +8 -0
  494. data/lib/relaton/omg/bibliography.rb +31 -0
  495. data/lib/relaton/omg/ext.rb +7 -0
  496. data/lib/relaton/omg/item.rb +8 -0
  497. data/lib/relaton/omg/item_data.rb +6 -0
  498. data/lib/relaton/omg/processor.rb +34 -0
  499. data/lib/relaton/omg/scraper.rb +141 -0
  500. data/lib/relaton/omg/util.rb +8 -0
  501. data/lib/relaton/omg.rb +24 -0
  502. data/lib/relaton/plateau/bibdata.rb +8 -0
  503. data/lib/relaton/plateau/bibitem.rb +8 -0
  504. data/lib/relaton/plateau/bibliography.rb +24 -0
  505. data/lib/relaton/plateau/data_fetcher.rb +153 -0
  506. data/lib/relaton/plateau/doctype.rb +7 -0
  507. data/lib/relaton/plateau/ext.rb +23 -0
  508. data/lib/relaton/plateau/handbook_parser.rb +95 -0
  509. data/lib/relaton/plateau/hit.rb +13 -0
  510. data/lib/relaton/plateau/hit_collection.rb +59 -0
  511. data/lib/relaton/plateau/item.rb +12 -0
  512. data/lib/relaton/plateau/item_data.rb +6 -0
  513. data/lib/relaton/plateau/parser.rb +101 -0
  514. data/lib/relaton/plateau/processor.rb +49 -0
  515. data/lib/relaton/plateau/technical_report_parser.rb +91 -0
  516. data/lib/relaton/plateau/util.rb +8 -0
  517. data/lib/relaton/plateau.rb +28 -0
  518. data/lib/relaton/un/bibdata.rb +8 -0
  519. data/lib/relaton/un/bibitem.rb +8 -0
  520. data/lib/relaton/un/bibliography.rb +48 -0
  521. data/lib/relaton/un/doctype.rb +10 -0
  522. data/lib/relaton/un/ext.rb +30 -0
  523. data/lib/relaton/un/hit.rb +56 -0
  524. data/lib/relaton/un/hit_collection.rb +61 -0
  525. data/lib/relaton/un/item.rb +11 -0
  526. data/lib/relaton/un/item_data.rb +6 -0
  527. data/lib/relaton/un/parser.rb +108 -0
  528. data/lib/relaton/un/processor.rb +38 -0
  529. data/lib/relaton/un/session.rb +25 -0
  530. data/lib/relaton/un/token_generator.rb +105 -0
  531. data/lib/relaton/un/util.rb +8 -0
  532. data/lib/relaton/un/wasm/decoder.rb +434 -0
  533. data/lib/relaton/un/wasm/instance.rb +101 -0
  534. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  535. data/lib/relaton/un/wasm/memory.rb +112 -0
  536. data/lib/relaton/un/wasm/module.rb +47 -0
  537. data/lib/relaton/un/wasm.rb +17 -0
  538. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  539. data/lib/relaton/un.rb +28 -0
  540. data/lib/relaton/version.rb +1 -1
  541. data/lib/relaton/w3c/bibdata.rb +8 -0
  542. data/lib/relaton/w3c/bibitem.rb +8 -0
  543. data/lib/relaton/w3c/bibliography.rb +54 -0
  544. data/lib/relaton/w3c/data_fetcher.rb +309 -0
  545. data/lib/relaton/w3c/data_parser.rb +379 -0
  546. data/lib/relaton/w3c/doctype.rb +7 -0
  547. data/lib/relaton/w3c/ext.rb +11 -0
  548. data/lib/relaton/w3c/item.rb +12 -0
  549. data/lib/relaton/w3c/item_data.rb +6 -0
  550. data/lib/relaton/w3c/processor.rb +49 -0
  551. data/lib/relaton/w3c/pubid.rb +73 -0
  552. data/lib/relaton/w3c/safe_realize.rb +59 -0
  553. data/lib/relaton/w3c/util.rb +8 -0
  554. data/lib/relaton/w3c.rb +25 -0
  555. data/lib/relaton/xsf/bibdata.rb +8 -0
  556. data/lib/relaton/xsf/bibitem.rb +8 -0
  557. data/lib/relaton/xsf/bibliography.rb +24 -0
  558. data/lib/relaton/xsf/data_fetcher.rb +56 -0
  559. data/lib/relaton/xsf/hit.rb +17 -0
  560. data/lib/relaton/xsf/hit_collection.rb +24 -0
  561. data/lib/relaton/xsf/item.rb +7 -0
  562. data/lib/relaton/xsf/item_data.rb +6 -0
  563. data/lib/relaton/xsf/processor.rb +50 -0
  564. data/lib/relaton/xsf/util.rb +9 -0
  565. data/lib/relaton/xsf.rb +30 -0
  566. data/lib/relaton-core.rb +1 -0
  567. data/lib/relaton.rb +43 -0
  568. metadata +673 -170
  569. data/.github/workflows/rake.yml +0 -14
  570. data/.github/workflows/release.yml +0 -24
  571. data/.github/workflows/rubocop.yml +0 -48
  572. data/.gitignore +0 -12
  573. data/.rspec +0 -3
  574. data/CLAUDE.md +0 -78
  575. data/Gemfile +0 -29
  576. data/Rakefile +0 -6
  577. data/docs/CHANGELOG.adoc +0 -16
  578. data/docs/VERSIONING_POLICY.adoc +0 -38
  579. data/docs/navigation.adoc +0 -6
  580. data/lib/relaton/db/version.rb +0 -5
  581. data/relaton.gemspec +0 -72
  582. data/spec/relaton/config_spec.rb +0 -10
  583. data/spec/relaton/db_cache_spec.rb +0 -51
  584. data/spec/relaton/db_spec.rb +0 -567
  585. data/spec/relaton/registry_spec.rb +0 -178
  586. data/spec/relaton/util_spec.rb +0 -3
  587. data/spec/relaton_meta_spec.rb +0 -25
  588. data/spec/relaton_spec.rb +0 -800
  589. data/spec/spec_helper.rb +0 -45
  590. data/spec/support/gb_t_20223_2006.xml +0 -33
  591. data/spec/support/iso_111111119115_1.xml +0 -0
  592. data/spec/support/iso_19115_1.xml +0 -115
  593. data/spec/support/iso_19115_2.xml +0 -95
  594. data/spec/support/rfc_8341.xml +0 -46
  595. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  596. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -140
  597. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -202
  598. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1505
  599. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -729
  600. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  601. data/spec/vcr_cassetes/iso_19115_1.yml +0 -17334
  602. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -322
  603. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -17334
  604. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -185
  605. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -144
  606. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -318
  607. data/spec/vcr_cassetes/iso_combined_included.yml +0 -318
  608. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -374
  609. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  610. data/spec/vcr_cassetes/rfc_8341.yml +0 -1278
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "addressable/uri"
4
+ require_relative "hit"
5
+
6
+ module Relaton
7
+ module Iec
8
+ # Page of hit collection.
9
+ class HitCollection < Core::HitCollection
10
+ def_delegators :@array, :detect, :last, :max_by, :sort_by
11
+
12
+ # @param exclude [Array<Symbol>] keys to exclude from comparison (e.g. :year, :part, :type)
13
+ def search(exclude: [:year])
14
+ @array = fetch_from_index exclude
15
+ self
16
+ end
17
+
18
+ # @return [Relaton::Iec::ItemData, nil]
19
+ def to_all_parts(r_year, opts = {}) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
20
+ parts = @array.select { |h| h.part && (!r_year || h.hit[:id]&.date&.year&.to_s == r_year) }
21
+ if opts[:publication_date_before] || opts[:publication_date_after]
22
+ parts = parts.select { |h| Bibliography.send(:year_in_range?, h.hit[:id].date&.year.to_i, opts) }
23
+ end
24
+ hit = parts.min_by { |h| h.part.to_i }
25
+ return @array.first&.item unless hit
26
+
27
+ bibitem = hit.item
28
+ all_parts_item = bibitem.to_all_parts
29
+ others = parts.reject { |h| h.hit[:id] == hit.hit[:id] }
30
+ others.sort_by { |h| part_sort_key(h.hit[:id]) }.each do |hi|
31
+ code = hi.hit[:id].to_s
32
+ bib = ItemData.new(
33
+ formattedref: Bib::Formattedref.new(content: code),
34
+ docidentifier: [Docidentifier.new(content: code, type: "IEC", primary: true)],
35
+ )
36
+ all_parts_item.relation << Relation.new(type: "partOf", bibitem: bib)
37
+ end
38
+ all_parts_item
39
+ end
40
+
41
+ private
42
+
43
+ # Ascending sort key for part ordering, e.g. 61326-2-1 < 61326-2-6.
44
+ # part/subpart are pubid Code components; coerce via to_s, missing → 0.
45
+ def part_sort_key(pubid)
46
+ sub = pubid.respond_to?(:subpart) ? pubid.subpart : nil
47
+ [pubid.part.to_s.to_i, sub.to_s.to_i]
48
+ end
49
+
50
+ def index
51
+ @index ||= Relaton::Index.find_or_create(
52
+ :IEC,
53
+ url: "#{Hit::GHURL}#{INDEXFILE}.zip",
54
+ file: "#{INDEXFILE}.yaml",
55
+ pubid_class: ::Pubid::Iec::Identifier
56
+ )
57
+ end
58
+
59
+ # Returns array of integers for sorting compound parts like "2-1", "2-6"
60
+ # @param part [String, nil] part string e.g. "1", "2-1", "2-6"
61
+ # @return [Array<Integer>] e.g. [2, 1] for "2-1", [6] for "6"
62
+ def part_sort_key(part)
63
+ return [] unless part
64
+
65
+ part.to_s.split("-").map(&:to_i)
66
+ end
67
+
68
+ # Keys pubid re-emits at a default value after `from_hash` but omits on a
69
+ # fresh `parse` (a lutaml render_default asymmetry: a deserialized
70
+ # attribute loses its using_default flag, so render_default: false no
71
+ # longer suppresses it). Equality must ignore them so a deserialized index
72
+ # row compares equal to the freshly-parsed query. Values are the
73
+ # stringified defaults (see #stringify).
74
+ LEAKING_DEFAULTS = { "publisher" => "IEC", "all_parts" => "false", "database" => "false" }.freeze
75
+
76
+ # Map a flat exclude symbol to the lean to_hash key it removes (at every
77
+ # nesting level). :type removes the polymorphic `_type` discriminator.
78
+ EXCLUDE_KEYS = { year: "year", part: "part", subpart: "subpart", type: "_type" }.freeze
79
+
80
+ # Compare pubids for matching, excluding specified fields.
81
+ # @param row_pubid [Pubid::Iec::Identifier] pubid from index row
82
+ # @return [Boolean]
83
+ def pubid_matches?(row_pubid, exclude)
84
+ return false unless row_pubid
85
+
86
+ canonical_id(@ref, exclude) == canonical_id(row_pubid, exclude)
87
+ end
88
+
89
+ # Build-path-independent comparison key: the lean `to_hash` with keys and
90
+ # scalars stringified, leaking defaults dropped, and excluded fields
91
+ # removed at every nesting level. More robust than comparing attribute
92
+ # objects, whose derived `type`/`stage` differ between a parsed identifier
93
+ # (component object) and a deserialized one (nil/symbol) — at the top level
94
+ # and inside `base_identifier`.
95
+ def canonical_id(pubid, exclude)
96
+ drop = exclude.filter_map { |e| EXCLUDE_KEYS[e] }
97
+ prune(stringify(pubid.to_hash), drop)
98
+ end
99
+
100
+ # Stringify hash keys and scalar values so comparison ignores YAML scalar
101
+ # typing (1 vs "1") and string/symbol key differences.
102
+ def stringify(value)
103
+ case value
104
+ when Hash then value.to_h { |k, v| [k.to_s, stringify(v)] }
105
+ when Array then value.map { |v| stringify(v) }
106
+ when nil then nil
107
+ else value.to_s
108
+ end
109
+ end
110
+
111
+ # Recursively drop nil values, leaking defaults, and excluded keys.
112
+ def prune(value, drop)
113
+ case value
114
+ when Hash
115
+ value.each_with_object({}) do |(k, v), h|
116
+ next if v.nil? || drop.include?(k) || LEAKING_DEFAULTS[k] == v
117
+
118
+ h[k] = prune(v, drop)
119
+ end
120
+ when Array then value.map { |v| prune(v, drop) }
121
+ else value
122
+ end
123
+ end
124
+
125
+ def fetch_from_index(exclude) # rubocop:disable Metrics/MethodLength
126
+ return [] unless @ref
127
+
128
+ index.search(@ref) do |row|
129
+ pubid_matches?(row[:id], exclude)
130
+ end.sort_by do |row|
131
+ [row[:id].date&.year.to_i, *part_sort_key(row[:id].part)]
132
+ end.map do |row|
133
+ Hit.new(row, self)
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,7 @@
1
+ module Relaton
2
+ module Iec
3
+ class ItemData < Bib::ItemData
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Iec
3
+ class Bibdata < Item
4
+ model ItemData
5
+ include Bib::BibdataShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Iec
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,131 @@
1
+ module Relaton
2
+ module Iec
3
+ class Docidentifier < Bib::Docidentifier
4
+ attribute :content, :string
5
+
6
+ attr_reader :pubid
7
+
8
+ def initialize(arg = nil, **kwargs)
9
+ arg.is_a?(Hash) ? super(arg) : super(**kwargs)
10
+ raw = arg.is_a?(Hash) ? (arg["content"] || arg[:content]) : kwargs[:content]
11
+ self.content = raw if raw
12
+ end
13
+
14
+ alias_method :original_content=, :content=
15
+ alias_method :original_content, :content
16
+
17
+ def content=(value)
18
+ @pubid = nil
19
+ @raw_content = nil
20
+
21
+ parsed =
22
+ case value
23
+ when ::Pubid::Iec::Identifier then value
24
+ when String
25
+ begin
26
+ ::Pubid::Iec::Identifier.parse(value)
27
+ rescue StandardError
28
+ Util.warn "Failed to parse Pubid: #{value}"
29
+ nil
30
+ end
31
+ end
32
+
33
+ if parsed
34
+ @pubid = parsed
35
+ elsif value.is_a?(String)
36
+ @raw_content = value
37
+ end
38
+
39
+ send(:original_content=, to_s)
40
+ end
41
+
42
+ def content
43
+ return @raw_content if @raw_content
44
+ return render_pubid(@pubid) if @pubid
45
+
46
+ original_content
47
+ end
48
+
49
+ def to_s
50
+ content.to_s
51
+ end
52
+
53
+ def to_all_parts!
54
+ return unless @pubid
55
+
56
+ remove_part!
57
+ remove_date!
58
+ remove_stage!
59
+ @pubid.all_parts = true if @pubid.respond_to?(:all_parts=)
60
+ refresh_content!
61
+ end
62
+
63
+ def remove_stage!
64
+ remove_attr!(:stage)
65
+ end
66
+
67
+ def remove_part!
68
+ remove_attr!(:part)
69
+ end
70
+
71
+ def remove_date!
72
+ remove_attr!(:date)
73
+ end
74
+
75
+ private
76
+
77
+ def render_pubid(pubid)
78
+ case type
79
+ # pubid owns the legacy positional IEC URN format (and the all-parts
80
+ # ":::ser" series form); render through it.
81
+ when "URN" then pubid.to_urn.to_s
82
+ else pubid.to_s
83
+ end
84
+ end
85
+
86
+ def remove_attr!(attr)
87
+ return unless @pubid
88
+
89
+ # For supplements (Amendment/Corrigendum, which carry their own
90
+ # date/version as an addition to the base), preserve the
91
+ # supplement's own attrs and only clear the base chain — e.g.
92
+ # "IEC 60027-1:1992/AMD1:1997" should drop the base year but keep
93
+ # the amendment year. For wrappers (VapIdentifier, ConsolidatedIdentifier),
94
+ # clear the outer attr too — they re-state the base year and need it
95
+ # gone everywhere.
96
+ unless @pubid.is_a?(::Pubid::Iec::SupplementIdentifier)
97
+ clear_attr_on(@pubid, attr)
98
+ end
99
+
100
+ node = @pubid.base_identifier
101
+ while node
102
+ clear_attr_on(node, attr)
103
+ # ConsolidatedIdentifier carries a sibling collection of bundled
104
+ # identifiers; clear the attr on each non-supplement entry too.
105
+ if node.respond_to?(:identifiers) && node.identifiers
106
+ node.identifiers.each do |id|
107
+ next if id.is_a?(::Pubid::Iec::SupplementIdentifier)
108
+
109
+ clear_attr_on(id, attr)
110
+ end
111
+ end
112
+ node = node.base_identifier
113
+ end
114
+ refresh_content!
115
+ end
116
+
117
+ # Clear one attribute on a single pubid; for :part also clear the
118
+ # paired :subpart (pubid 2.x splits "16-1-1" into part="1" + subpart="1").
119
+ def clear_attr_on(pubid, attr)
120
+ pubid.send("#{attr}=", nil) if pubid.respond_to?("#{attr}=")
121
+ return unless attr == :part && pubid.respond_to?(:subpart=)
122
+
123
+ pubid.subpart = nil
124
+ end
125
+
126
+ def refresh_content!
127
+ send(:original_content=, to_s)
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,12 @@
1
+ module Relaton
2
+ module Iec
3
+ class Doctype < Bib::Doctype
4
+ TYPES = %w[
5
+ international-standard technical-specification technical-report publicly-available-specification
6
+ international-workshop-agreement guide industry-technical-agreement system-reference-deliverable
7
+ ].freeze
8
+
9
+ attribute :content, :string, values: TYPES
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,53 @@
1
+ require_relative "doctype"
2
+ require_relative "stage_name"
3
+
4
+ module Relaton
5
+ module Iec
6
+ class Ext < Bib::Ext
7
+ attribute :doctype, Doctype
8
+ attribute :subdoctype, :string, values: %w[specification method-of-test vocabulary code-of-practice]
9
+ attribute :structuredidentifier, Iso::StructuredIdentifier
10
+ attribute :horizontal, :boolean
11
+ attribute :stagename, StageName
12
+ attribute :updates_document_type, :string, values: Doctype::TYPES
13
+ attribute :fast_track, :boolean
14
+ attribute :price_code, :string
15
+ attribute :function, :string, values: %w[emc safety environment quality-assurance]
16
+ attribute :accessibility_color_inside, :boolean
17
+ attribute :cen_processing, :boolean
18
+ attribute :secretary, :string
19
+ attribute :interest_to_committees, :string
20
+ attribute :tc_sc_officers_note, :string, raw: true
21
+
22
+ xml do
23
+ map_element "horizontal", to: :horizontal
24
+ map_element "stagename", to: :stagename
25
+ map_element "updates-document-type", to: :updates_document_type
26
+ map_element "fast-track", to: :fast_track
27
+ map_element "price-code", to: :price_code
28
+ map_element "function", to: :function
29
+ map_element "accessibility-color-inside", to: :accessibility_color_inside
30
+ map_element "cen-processing", to: :cen_processing
31
+ map_element "secretary", to: :secretary
32
+ map_element "interest-to-committees", to: :interest_to_committees
33
+ map_element "tc-sc-officers-note", to: :tc_sc_officers_note
34
+ end
35
+
36
+ key_value do
37
+ map_element "horizontal", to: :horizontal
38
+ map_element "stagename", to: :stagename
39
+ map_element "updates_document_type", to: :updates_document_type
40
+ map_element "fast_track", to: :fast_track
41
+ map_element "price_code", to: :price_code
42
+ map_element "function", to: :function
43
+ map_element "accessibility_color_inside", to: :accessibility_color_inside
44
+ map_element "cen_processing", to: :cen_processing
45
+ map_element "secretary", to: :secretary
46
+ map_element "interest_to_committees", to: :interest_to_committees
47
+ map_element "tc_sc_officers_note", to: :tc_sc_officers_note
48
+ end
49
+
50
+ def get_schema_version = Relaton.schema_versions["relaton-model-iec"]
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ require_relative "docidentifier"
2
+ require_relative "ext"
3
+
4
+ module Relaton
5
+ module Iec
6
+ class Relation < Bib::Relation
7
+ end
8
+
9
+ class Item < Iso::Item
10
+ model ItemData
11
+
12
+ attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
13
+ attribute :relation, Relation, collection: true, initialize_empty: true
14
+ attribute :ext, Ext
15
+ end
16
+ end
17
+ end
18
+
19
+ require_relative "item_base"
20
+ require_relative "relation"
@@ -0,0 +1,12 @@
1
+ require_relative "docidentifier"
2
+
3
+ module Relaton
4
+ module Iec
5
+ class ItemBase < Iso::ItemBase
6
+ model ItemData
7
+
8
+ attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
9
+ attribute :relation, Relation, collection: true, initialize_empty: true
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ module Relaton
2
+ module Iec
3
+ class Relation
4
+ attribute :bibitem, ItemBase
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module Relaton
2
+ module Iec
3
+ class StageName < Lutaml::Model::Serializable
4
+ attribute :abbreviation, :string
5
+ attribute :content, :string
6
+
7
+ xml do
8
+ map_attribute "abbreviation", to: :abbreviation
9
+ map_content to: :content
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,73 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Iec
5
+ class Processor < Core::Processor
6
+ def initialize
7
+ @short = :relaton_iec
8
+ @prefix = "IEC"
9
+ @defaultprefix = %r{^(IEC\s|CISPR\s|IEV($|\s))}
10
+ @idtype = "IEC"
11
+ @datasets = %w[iec-harmonized-all iec-harmonized-latest]
12
+ end
13
+
14
+ # @param code [String]
15
+ # @param date [String, nil] year
16
+ # @param opts [Hash]
17
+ # @return [Relaton::Iec::ItemData, nil]
18
+ def get(code, date, opts)
19
+ require_relative "../iec"
20
+ Bibliography.get(code, date, opts)
21
+ end
22
+
23
+ #
24
+ # Fetch all the documents from a source
25
+ #
26
+ # @param [String] source source name (iec-harmonized-all, iec-harmonized-latest)
27
+ # @param [Hash] opts
28
+ # @option opts [String] :output directory to output documents
29
+ # @option opts [String] :format output format (xml, yaml, bibxml)
30
+ #
31
+ def fetch_data(source, opts)
32
+ require_relative "data_fetcher"
33
+ DataFetcher.fetch(source, **opts)
34
+ end
35
+
36
+ # @param xml [String]
37
+ # @return [Relaton::Iec::ItemData]
38
+ def from_xml(xml)
39
+ require_relative "../iec"
40
+ Item.from_xml xml
41
+ end
42
+
43
+ # @param yaml [String]
44
+ # @return [Relaton::Iec::ItemData]
45
+ def from_yaml(yaml)
46
+ require_relative "../iec"
47
+ Item.from_yaml yaml
48
+ end
49
+
50
+ # Returns hash of XML grammar
51
+ # @return [String]
52
+ def grammar_hash
53
+ require_relative "../iec"
54
+ @grammar_hash ||= ::Relaton::Iec.grammar_hash
55
+ end
56
+
57
+ # @param code [String]
58
+ # @return [String, nil]
59
+ def urn_to_code(code)
60
+ require_relative "../iec"
61
+ Relaton::Iec.urn_to_code code
62
+ end
63
+
64
+ #
65
+ # Remove index file
66
+ #
67
+ def remove_index_file
68
+ require_relative "../iec"
69
+ Relaton::Index.find_or_create(:iec, url: true, file: "#{INDEXFILE}.yaml").remove_file
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,199 @@
1
+ ACD:
2
+ status: Approved for CD
3
+ stage: '20.99'
4
+ ACDV:
5
+ status: Approved for CDV
6
+ stage: '30.99'
7
+ ADISSB:
8
+ status: Preparation of text subcontracted to CO
9
+ stage: '40.95'
10
+ ADTR:
11
+ status: Approved for DTR
12
+ stage: '40.99'
13
+ ADTS:
14
+ status: Approved for DTS
15
+ stage: '40.99'
16
+ AFDIS:
17
+ status: Approved for FDIS
18
+ stage: '40.99'
19
+ AMW:
20
+ status: Document under revision
21
+ stage: '92.20'
22
+ ANW:
23
+ status: Registration of new project
24
+ stage: '20.00'
25
+ APUB:
26
+ status: Approved for publication
27
+ stage: '50.99'
28
+ APUBSB:
29
+ status: Preparation of text subcontracted to CO
30
+ stage: '50.95'
31
+ BPUB:
32
+ status: Being published
33
+ stage: '60.00'
34
+ BWG:
35
+ status: Return to drafting phase or redefine project
36
+ stage: '30.92'
37
+ CAN:
38
+ status: Draft cancelled
39
+ stage: '20.98'
40
+ CCDV:
41
+ status: Draft circulated as CDV
42
+ stage: '40.00'
43
+ CD:
44
+ status: Draft circulated as CD
45
+ stage: '30.00'
46
+ CDISH:
47
+ status: Draft circulated as DISH
48
+ stage: '50.20'
49
+ CDM:
50
+ status: CD to be discussed at meeting
51
+ stage: '30.20'
52
+ CDPAS:
53
+ status: Draft circulated as DPAS
54
+ stage: '50.20'
55
+ CDTR:
56
+ status: Draft circulated as DTR
57
+ stage: '50.20'
58
+ CDTS:
59
+ status: Draft circulated as DTS
60
+ stage: '50.20'
61
+ CDVM:
62
+ status: Rejected CDV to be discussed at a meeting
63
+ stage: '40.93'
64
+ CFDIS:
65
+ status: Draft circulated as FDIS
66
+ stage: '50.20'
67
+ DECDISH:
68
+ status: DISH at editing check
69
+ stage: '40.99'
70
+ DECFDIS:
71
+ status: FDIS at editing check
72
+ stage: '50.60'
73
+ DECPUB:
74
+ status: Publication at editing check
75
+ stage: '60.00'
76
+ DEL:
77
+ status: Deleted/abandoned
78
+ stage: '00.99'
79
+ DELPUB:
80
+ status: Deleted publication
81
+ stage: '90.99'
82
+ DREJ:
83
+ status: Abandon
84
+ stage: '30.98'
85
+ DTRM:
86
+ status: Rejected DTR to be discussed at meeting
87
+ stage: '50.92'
88
+ DTSM:
89
+ status: Rejected DTS to be discussed at meeting
90
+ stage: '50.92'
91
+ MERGED:
92
+ status: Fragment merged
93
+ stage: '30.97'
94
+ NADIS:
95
+ status: Repeat enquiry
96
+ stage: '40.93'
97
+ NCDV:
98
+ status: CDV rejected
99
+ stage: '40.98'
100
+ NDTR:
101
+ status: DTR rejected
102
+ stage: '50.98'
103
+ NDTS:
104
+ status: DTS rejected
105
+ stage: '50.98'
106
+ NFDIS:
107
+ status: FDIS rejected
108
+ stage: '50.98'
109
+ PCC:
110
+ status: Preparation of CC
111
+ stage: '30.92'
112
+ PNW:
113
+ status: New work item proposal
114
+ stage: '10.00'
115
+ PPUB:
116
+ status: Publication issued
117
+ stage: '60.60'
118
+ PRVC:
119
+ status: Preparation of RVC
120
+ stage: '40.92'
121
+ PRVD:
122
+ status: Preparation of RVD
123
+ stage: '40.92'
124
+ PRVDISH:
125
+ status: Preparation of RVDISH
126
+ stage: '40.92' # ?
127
+ PRVDPAS:
128
+ status: Preparation of RVDPAS
129
+ stage: '40.92'
130
+ PRVDTR:
131
+ status: Preparation of RVDTR
132
+ stage: '40.92'
133
+ PRVDTS:
134
+ status: Preparation of RVDTS
135
+ stage: '40.92'
136
+ PRVN:
137
+ status: Preparation of RVN
138
+ stage: '40.92'
139
+ PWI:
140
+ status: Preliminary work item
141
+ stage: '00.00'
142
+ RDIS:
143
+ status: Registration for formal approval
144
+ stage: '50.00'
145
+ RDISH:
146
+ status: DISH received and registered
147
+ stage: '50.00'
148
+ RFDIS:
149
+ status: FDIS received and registered
150
+ stage: '50.00'
151
+ RPUB:
152
+ status: Publication received and registered
153
+ stage: '60.60'
154
+ SPE:
155
+ stage: SPE # ?
156
+ SPLIT:
157
+ status: Project Fragmented
158
+ stage: SPLIT # ?
159
+ SRP:
160
+ stage: SRP
161
+ SUSPENDED:
162
+ status: Project Suspended
163
+ stage: SUSPENDED # ?
164
+ TCDV:
165
+ status: Translation of CDV
166
+ stage: '50.00'
167
+ TDISH:
168
+ status: Translation of DISH
169
+ stage: '50.00' # ?
170
+ TDTR:
171
+ status: Translation of DTR
172
+ stage: '50.00'
173
+ TDTS:
174
+ status: Translation of DTS
175
+ stage: '50.00'
176
+ TFDIS:
177
+ status: Translation of FDIS
178
+ stage: '50.00'
179
+ TPUB:
180
+ status: Translation of publication
181
+ stage: '60.00'
182
+ WPUB:
183
+ status: Publication withdrawn
184
+ stage: '95.99'
185
+ preCD:
186
+ status: Preparation of CD document
187
+ stage: preCD
188
+ preCDPAS:
189
+ status: Preparation of DPAS
190
+ stage: preCDPAS
191
+ preDISH:
192
+ status: Preparation of DISH
193
+ stage: preDISH
194
+ preDTR:
195
+ status: Preparation of DTR document
196
+ stage: preDTR
197
+ prePNW:
198
+ status: Preparation of NP document
199
+ stage: prePNW
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Iec
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-iec".freeze
6
+ end
7
+ end
8
+ end