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,194 @@
1
+ require_relative "../model/item"
2
+ require_relative "fetcher"
3
+ require_relative "iso_references"
4
+
5
+ module Relaton
6
+ module Ccsds
7
+ class DataParser
8
+ include Core::ArrayWrapper
9
+
10
+ DOCTYPES = { B: "standard", M: "practice", G: "report", O: "specification", Y: "record" }.freeze
11
+ DOMAIN = "https://public.ccsds.org".freeze
12
+
13
+ AREAS = {
14
+ "SEA" => "Systems Engineering Area",
15
+ "MOIMS" => "Mission Operations and Information Management Services Area",
16
+ "CSS" => "Cross Support Services Area",
17
+ "SOIS" => "Spacecraft Onboard Interface Services Area",
18
+ "SLS" => "Space Link Services Area",
19
+ "SIS" => "Space Internetworking Services Area",
20
+ }.freeze
21
+
22
+ ATTRS = %i[
23
+ title docidentifier abstract date status source edition relation contributor ext
24
+ ].freeze
25
+
26
+ ID_MAPPING = {
27
+ "CCSDS 320.0-B-1-S Corrigendum 1" => "CCSDS 320.0-B-1-S Cor. 1", # TODO relaton/relaton-data-ccsds#5
28
+ "CCSDS 701.00-R-3" => "CCSDS 701.00-R-3-S", # TODO relaton/relaton-data-ccsds#8
29
+ }.freeze
30
+
31
+ def initialize(doc, docs, successor = nil)
32
+ @doc = doc
33
+ @docs = docs
34
+ @successor = successor
35
+ end
36
+
37
+ def parse
38
+ args = ATTRS.each_with_object({}) { |a, o| o[a] = send "parse_#{a}" }
39
+ item = ItemData.new(**args)
40
+ item.create_id
41
+ item
42
+ end
43
+
44
+ def parse_title
45
+ t = @doc[3]
46
+ [Bib::Title.new(content: t, language: "en", script: "Latn")]
47
+ end
48
+
49
+ def parse_docidentifier
50
+ [Bib::Docidentifier.new(content: docidentifier, type: "CCSDS", primary: true)]
51
+ end
52
+
53
+ def docidentifier
54
+ @docidentifier ||= begin
55
+ docid = parse_identifier(@doc[2])
56
+ @successor ? docid.sub(/(-S|s)(?=\s|$)/, "") : docid
57
+ end
58
+ end
59
+
60
+ def parse_identifier(link)
61
+ id = link.strip.match(/(?<=>).+(?=<\/a>)/).to_s
62
+ ID_MAPPING[id] || id
63
+ end
64
+
65
+ def parse_abstract
66
+ a = @doc[7]
67
+ [Bib::Abstract.new(content: a, language: "en", script: "Latn")]
68
+ end
69
+
70
+ def parse_doctype
71
+ />CCSDS\s[\d.]+-(?<type>\w+)/ =~ @doc[2]
72
+ Doctype.new content: DOCTYPES[type&.to_sym]
73
+ end
74
+
75
+ def parse_date
76
+ at = @doc[6]
77
+ [Bib::Date.new(type: "published", at: at)]
78
+ end
79
+
80
+ def parse_status
81
+ stage = Bib::Status::Stage.new content: @successor ? "withdrawn" : "published"
82
+ Bib::Status.new stage: stage
83
+ end
84
+
85
+ def parse_source
86
+ sources = []
87
+ src = create_source(@doc[2], "src")
88
+ sources << src if src
89
+
90
+ type = @doc[1].match(/https?:[^"]+(pdf|doc)"/)
91
+ return sources unless type
92
+
93
+ download = create_source(@doc[1], type[1])
94
+ sources.tap { |s| s << download if download }
95
+ end
96
+
97
+ def create_source(link, type)
98
+ href = parse_href(link)
99
+ return unless href
100
+
101
+ Bib::Uri.new(type: type, content: href)
102
+ end
103
+
104
+ def parse_href(link)
105
+ /(?<href>https?:[^"]+)/.match(link)&.[](:href)
106
+ end
107
+
108
+ def parse_edition
109
+ return unless @doc[5]
110
+
111
+ Bib::Edition.new content: @doc[5]
112
+ end
113
+
114
+ def parse_relation
115
+ @docs.each_with_object(successors + adopted) do |d, a|
116
+ id = parse_identifier d[2]
117
+ type = relation_type id
118
+ next unless type
119
+
120
+ a << create_relation(type, id)
121
+ end
122
+ end
123
+
124
+ def adopted
125
+ /(?<href>https?:[^"]+)/ =~ @doc[9]
126
+ array(href).each_with_object([]) do |uri, acc|
127
+ /\/(?<ref_id>\d+)\.html/ =~ uri
128
+ iso_id = IsoReferences.instance[ref_id]
129
+ unless iso_id
130
+ Util.warn "ISO reference not found for #{uri}"
131
+ next
132
+ end
133
+ acc << create_relation("adoptedAs", iso_id, uri, "ISO")
134
+ end
135
+ end
136
+
137
+ def successors
138
+ return [] unless @successor
139
+
140
+ @successors ||= begin
141
+ if @successor.relation.none? { |r| r.type == "successorOf" }
142
+ @successor.relation << create_relation("successorOf", docidentifier)
143
+ end
144
+ [create_relation("hasSuccessor", @successor.docidentifier[0].content)]
145
+ end
146
+ end
147
+
148
+ # TODO: cover this
149
+ def relation_type(rel_id)
150
+ return if rel_id == docidentifier ||
151
+ rel_id.match(DataFetcher::TRRGX).to_s != docidentifier.match(DataFetcher::TRRGX).to_s
152
+
153
+ if rel_id.include?(docidentifier.sub(DataFetcher::TRRGX, ""))
154
+ "updatedBy"
155
+ elsif docidentifier.include?(rel_id.sub(DataFetcher::TRRGX, ""))
156
+ "updates"
157
+ end
158
+ end
159
+
160
+ def create_relation(type, rel_id, uri = nil, id_type = "CCSDS")
161
+ id = Bib::Docidentifier.new content: rel_id, type: id_type, primary: true
162
+ source = array(uri).map { |u| Bib::Uri.new(type: "src", content: u) }
163
+ bibitem = Bib::ItemData.new docidentifier: [id], source: source, formattedref: Bib::Formattedref.new(content: rel_id)
164
+ Bib::Relation.new type: type, bibitem: bibitem
165
+ end
166
+
167
+ def parse_contributor # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
168
+ array(@doc[8]).each_with_object([]) do |wg, acc|
169
+ /^(?<name>[^<]+)/ =~ wg
170
+ next if name.nil? || name.strip.empty?
171
+
172
+ sdname = Bib::TypedLocalizedString.new content: name.strip
173
+ subdiv = Bib::Subdivision.new type: "technical-committee", name: [sdname]
174
+ orgname = Bib::TypedLocalizedString.new content: "CCSDS"
175
+ org = Bib::Organization.new name: [orgname], subdivision: [subdiv]
176
+ description = Bib::LocalizedMarkedUpString.new(content: "committee")
177
+ role = Bib::Contributor::Role.new type: "author", description: [description]
178
+ acc << Bib::Contributor.new(role: [role], organization: org)
179
+ end
180
+ end
181
+
182
+ def parse_ext
183
+ Ext.new flavor: "ccsds", doctype: parse_doctype, technology_area: parse_technology_area
184
+ end
185
+
186
+ def parse_technology_area
187
+ return unless @doc[8]
188
+
189
+ desc = @doc[8].split("-").first
190
+ AREAS[desc]
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,24 @@
1
+ require "mechanize"
2
+ module Relaton
3
+ module Ccsds
4
+ class Hit < Relaton::Core::Hit
5
+ # attr_reader :code
6
+
7
+ # def initialize(code:, url:)
8
+ # @code = code
9
+ # @url = url
10
+ # end
11
+
12
+ def item
13
+ return @item if @item
14
+
15
+ resp = Mechanize.new.get(hit[:url])
16
+ @item = Item.from_yaml(resp.body)
17
+ @item.fetched = Date.today.to_s
18
+ @item
19
+ rescue Mechanize::Error => e
20
+ raise Relaton::RequestError, e.message
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ require_relative "hit"
2
+
3
+ module Relaton
4
+ module Ccsds
5
+ class HitCollection < Relaton::Core::HitCollection
6
+ GHURL = "https://raw.githubusercontent.com/relaton/relaton-data-ccsds/refs/heads/v2/".freeze
7
+
8
+ #
9
+ # Search his in index.
10
+ #
11
+ # @return [<Type>] <description>
12
+ #
13
+ def fetch
14
+ @array = rows.map { |row| Hit.new code: row[:id], url: "#{GHURL}#{row[:file]}" }
15
+ self
16
+ rescue SocketError, OpenURI::HTTPError, OpenSSL::SSL::SSLError, Errno::ECONNRESET => e
17
+ raise Relaton::RequestError, e.message
18
+ end
19
+
20
+ # Pubid index (index-v2): `:id` deserializes to a Pubid::Ccsds::Identifier
21
+ # via pubid_class, so search narrows by number with binary search.
22
+ def index
23
+ @index ||= Relaton::Index.find_or_create(
24
+ :ccsds, url: "#{GHURL}#{INDEXFILE}.zip", file: "#{INDEXFILE}.yaml", pubid_class: Pubid::Ccsds::Identifier
25
+ )
26
+ end
27
+
28
+ def pubid
29
+ @pubid ||= Pubid::Ccsds::Identifier.parse(ref)
30
+ end
31
+
32
+ def rows
33
+ if pubid.edition
34
+ index.search(pubid)
35
+ else
36
+ # search(pubid) narrows candidates by number via binary search first.
37
+ index.search(pubid) { |r| r[:id].exclude(:edition) == pubid }
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,9 @@
1
+ module Relaton
2
+ module Ccsds
3
+ class ItemData < Bib::ItemData
4
+ def relation=(value)
5
+ @relation = value || []
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ccsds
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 Ccsds
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module Relaton
2
+ module Ccsds
3
+ class Doctype < Bib::Doctype
4
+ TYPES = %w[standard practice report specification record].freeze
5
+
6
+ attribute :content, :string, values: TYPES
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ require_relative "doctype"
2
+
3
+ module Relaton
4
+ module Ccsds
5
+ class Ext < Lutaml::Model::Serializable
6
+ attribute :schema_version, :string
7
+ attribute :doctype, Doctype
8
+ attribute :structuredidentifier, Bib::StructuredIdentifier, collection: true
9
+ attribute :technology_area, :string, values: %w[SEA MOIMS CSS SOIS SLS SIS]
10
+
11
+ xml do
12
+ map_attribute "schema-version", to: :schema_version
13
+ map_element "doctype", to: :doctype
14
+ map_element "structuredidentifier", to: :structuredidentifier
15
+ map_element "technology-area", to: :technology_area
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ require "relaton/bib"
2
+ require_relative "../item_data"
3
+ require_relative "ext"
4
+
5
+ module Relaton
6
+ module Ccsds
7
+ class Item < Bib::Item
8
+ model ItemData
9
+
10
+ attribute :ext, Ext
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,68 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Ccsds
5
+ class Processor < Relaton::Core::Processor
6
+ attr_reader :idtype
7
+
8
+ def initialize # rubocop:disable Lint/MissingSuper
9
+ @short = :relaton_ccsds
10
+ @prefix = "CCSDS"
11
+ @defaultprefix = %r{^CCSDS(?!\w)}
12
+ @idtype = "CCSDS"
13
+ @datasets = %w[ccsds]
14
+ end
15
+
16
+ # @param code [String]
17
+ # @param date [String, NilClass] year
18
+ # @param opts [Hash]
19
+ # @return [Relaton::Ccsds::ItemData, nil]
20
+ def get(code, date, opts)
21
+ require_relative "../ccsds"
22
+ Bibliography.get(code, date, opts)
23
+ end
24
+
25
+ #
26
+ # Fetch all the documents from a source
27
+ #
28
+ # @param [String] source source name
29
+ # @param [Hash] opts
30
+ # @option opts [String] :output directory to output documents
31
+ # @option opts [String] :format
32
+ #
33
+ def fetch_data(source = "ccsds", **opts)
34
+ require_relative "data/fetcher"
35
+ DataFetcher.fetch(source, **opts)
36
+ end
37
+
38
+ # @param xml [String]
39
+ # @return [Relaton::Ccsds::ItemData]
40
+ def from_xml(xml)
41
+ require_relative "../ccsds"
42
+ Item.from_xml xml
43
+ end
44
+
45
+ # @param yaml [String]
46
+ # @return [Relaton::Ccsds::ItemData]
47
+ def from_yaml(yaml)
48
+ require_relative "../ccsds"
49
+ Item.from_yaml yaml
50
+ end
51
+
52
+ # Returns hash of XML grammar
53
+ # @return [String]
54
+ def grammar_hash
55
+ require_relative "../ccsds"
56
+ @grammar_hash ||= ::Relaton::Ccsds.grammar_hash
57
+ end
58
+
59
+ #
60
+ # Remove index file
61
+ #
62
+ def remove_index_file
63
+ require_relative "../ccsds"
64
+ Relaton::Index.find_or_create(:ccsds, url: true, file: "#{INDEXFILE}.yaml").remove_file
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,10 @@
1
+ require "relaton/bib/util"
2
+
3
+ module Relaton
4
+ module Ccsds
5
+ module Util
6
+ extend Relaton::Bib::Util
7
+ PROGNAME = "relaton-ccsds".freeze
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # require "mechanize"
4
+ # require "relaton/core"
5
+ # require "relaton/bib"
6
+ require "relaton/index"
7
+ require "pubid"
8
+ require_relative "version"
9
+ # require_relative "ccsds/processor"
10
+ require_relative "ccsds/util"
11
+ require_relative "ccsds/model/item"
12
+ require_relative "ccsds/model/bibitem"
13
+ require_relative "ccsds/model/bibdata"
14
+ require_relative "ccsds/bibliography"
15
+
16
+ module Relaton
17
+ module Ccsds
18
+ # The pubid-v2 (lean hash) index this gem produces and consumes. The legacy
19
+ # index-v1 (pubid-v1 hash, for the released gem line) is rebuilt separately
20
+ # by the data repo's build_index_v1.rb.
21
+ INDEXFILE = "index-v2"
22
+
23
+ class Error < StandardError; end
24
+ # Your code goes here...
25
+
26
+ def self.grammar_hash
27
+ # gem_path = File.expand_path "..", __dir__
28
+ # grammars_path = File.join gem_path, "grammars", "*"
29
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
30
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton
4
+ module Cen
5
+ # Class methods for search Cenelec standards.
6
+ class Bibliography
7
+ class << self
8
+ # @param text [String]
9
+ # @return [RelatonCen::HitCollection]
10
+ def search(text, year = nil)
11
+ # /^C?EN\s(?<code>.+)/ =~ text
12
+ HitCollection.new(text, year).search
13
+ rescue Mechanize::ResponseCodeError, Net::ReadTimeout => e
14
+ raise Relaton::RequestError, e.message
15
+ end
16
+
17
+ #
18
+ # @param code [String] the CEN standard Code to look up
19
+ # @param year [String] the year the standard was published (optional)
20
+ # @param opts [Hash] options
21
+ # @option opts [Boolean] :keep_year don't upate reference
22
+ #
23
+ # @return [RelatonBib::BibliographicItem, nil]
24
+ #
25
+ def get(code, year = nil, opts = {})
26
+ code_parts = code_to_parts code
27
+ year ||= code_parts[:year] if code_parts
28
+
29
+ bib_get(code, year, opts)
30
+ end
31
+
32
+ #
33
+ # Decopmposes a CEN standard code into its parts.
34
+ #
35
+ # @param [String] code the CEN standard code to decompose
36
+ #
37
+ # @return [MatchData] the decomposition of the code
38
+ #
39
+ def code_to_parts(code)
40
+ %r{^
41
+ (?<code>[^:-]+)(?:-(?<part>\d+))?
42
+ (?::(?<year>\d{4}))?
43
+ (?:\+(?<amd>[A-Z]\d+)(?:(?<amy>\d{4}))?)?
44
+ (?:\/(?<ac>AC\d+:\d{4}))?
45
+ }x.match code
46
+ end
47
+
48
+ private
49
+
50
+ def fetch_ref_err(code, year, missed_years) # rubocop:disable Metrics/MethodLength
51
+ # id = year ? "#{code}:#{year}" : code
52
+ # Util.warn "WARNING: No match found online for `#{id}`. " \
53
+ # "The code must be exactly like it is on the standards website."
54
+ unless missed_years.empty?
55
+ Util.info "There was no match for `#{year}`, though there " \
56
+ "were matches found for `#{missed_years.join('`, `')}`."
57
+ end
58
+ # if /\d-\d/.match? code
59
+ # warn "[relaton-cen] The provided document part may not exist, or "\
60
+ # "the document may no longer be published in parts."
61
+ # else
62
+ # warn "[relaton-cen] If you wanted to cite all document parts for "\
63
+ # "the reference, use \"#{code} (all parts)\".\nIf the document "\
64
+ # "is not a standard, use its document type abbreviation (TS, TR, "]
65
+ # "PAS, Guide)."
66
+ # end
67
+ nil
68
+ end
69
+
70
+ # @param code [String]
71
+ # @return [RelatonCen::HitCollection]
72
+ def search_filter(code) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
73
+ parts = code_to_parts code
74
+ result = search(code)
75
+ result.select! do |i|
76
+ pts = code_to_parts i.hit[:code]
77
+ parts[:code] == pts[:code] &&
78
+ (!parts[:part] || parts[:part] == pts[:part]) &&
79
+ (!parts[:year] || parts[:year] == pts[:year]) &&
80
+ parts[:amd] == pts[:amd] && (!parts[:amy] || parts[:amy] == pts[:amy])
81
+ end
82
+ end
83
+
84
+ # Sort through the results from Isobib, fetching them three at a time,
85
+ # and return the first result that matches the code,
86
+ # matches the year (if provided), and which # has a title (amendments do not).
87
+ # Only expects the first page of results to be populated.
88
+ # Does not match corrigenda etc (e.g. ISO 3166-1:2006/Cor 1:2007)
89
+ # If no match, returns any years which caused mismatch, for error reporting
90
+ def isobib_results_filter(result, year)
91
+ missed_years = []
92
+ result.each do |r|
93
+ /:(?<pyear>\d{4})/ =~ r.hit[:code]
94
+ if !year || year == pyear
95
+ ret = r.item
96
+ return { ret: ret } if ret
97
+ end
98
+
99
+ missed_years << pyear
100
+ end
101
+ { years: missed_years }
102
+ end
103
+
104
+ def bib_get(code, year, opts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
105
+ ref = year.nil? || code.match?(/:\d{4}/) ? code : "#{code}:#{year}"
106
+ Util.info "Fetching from standards.cencenelec.eu ...", key: ref
107
+ result = search_filter(code) || return
108
+ ret = isobib_results_filter(result, year)
109
+ if ret[:ret]
110
+ bib = year || opts[:keep_year] ? ret[:ret] : ret[:ret].to_most_recent_reference
111
+ Util.info "Found: `#{bib.docidentifier.first&.content}`", key: ref
112
+ bib
113
+ else
114
+ Util.info "Not found.", key: ref
115
+ fetch_ref_err(code, year, ret[:years])
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,66 @@
1
+ ASD-STAN: Aerospace
2
+ CEN/CLC/ETSI/SMCG: CEN-CENELEC-ETSI Coordination Group on Smart Meters
3
+ CEN/CLC/ETSI/JWG eAcc: eAccessibility
4
+ CEN/CLC/ETSI/SEG-CG: CEN-CENELEC-ETSI Coordination Group on Smart Grids
5
+ CEN/CLC/ETSI/SF-SSCC: CEN-CENELEC-ETSI Sector Forum on Smart and Sustainable Cities and Communities
6
+ CEN/CLC/Guides: Group for CEN-CENELEC Guides
7
+ CEN/CLC/JTC 1: Criteria for conformity assessment bodies
8
+ CEN/CLC/JTC 2: Power Engineering
9
+ CEN/CLC/JTC 3: Quality management and corresponding general aspects for medical devices
10
+ CEN/CLC/JTC 4: Services for fire safety and security systems
11
+ CEN/CLC/JTC 5: Space
12
+ CEN/CLC/JTC 6: Hydrogen in energy systems
13
+ CEN/CLC/JTC 10: Energy-related products - Material Efficiency Aspects for Ecodesign
14
+ CEN/CLC/JTC 11: Accessibility in the built environment
15
+ CEN/CLC/JTC 12: Design for All
16
+ CEN/CLC/JTC 13: Cybersecurity and Data Protection
17
+ CEN/CLC/JTC 14: Energy management and energy efficiency in the framework of energy transition
18
+ CEN/CLC/JTC 15: Energy measurement plan for organizations
19
+ CEN/CLC/JTC 16: CEN/CENELEC Joint Technical Committee on Active Implantable Medical Devices
20
+ CEN/CLC/JTC 17: Gas Appliances with Combined Heat and Power
21
+ CEN/CLC/JTC 18: Non automatic weighing instruments (NAWI)
22
+ CEN/CLC/JTC 19: Blockchain and Distributed Ledger Technologies
23
+ CEN/CLC/JTC 20: Hyperloop systems
24
+ CEN/CLC/JTC 21: Artificial Intelligence
25
+ CEN/CLC/WS 017: Development of a GALILEO enabled label
26
+ CEN/CLC/WS 018: Assessment of the resilience of transport infrastructure to potentially disruptive events
27
+ CEN/CLC/WS SEA-TITAN: Modular and cross-cutting Power Take-Off units for wave energy converters. Recommendations and laboratory testing
28
+ CEN/CLC/WS SEP2: Industry Best Practices and an Industry Code of Conduct for Licensing of Standard Essential Patents in the field of 5G and Internet of Things
29
+ CEN/CLC/WS HECTOS: CEN-CENELEC Workshop on Guidelines on evaluation systems and schemes for physical security products
30
+ CEN/CLC/WS INACHUS: Urban search and rescue (USaR) robotic platform technical and procedural interoperability
31
+ CEN/CLC/WS Monsoon: Predictive management of data intensive industrial processes
32
+ CEN/CLC/WS REEMAIN: CEN/CENELEC Workshop on REEMAIN Methodology for Resource and Energy Efficiency Manufacturing
33
+ CEN/CLC/WS SEP-IoT: Workshop on Best Practices and a Code of Conduct for Licensing Industry Standard Essential Patents in 5G and the Internet of Things (IoT), including the Industrial Internet
34
+ CEN/CLC/WS ZONeSEC: Interoperability of security systems for the surveillance of widezones
35
+ CEN/CLC/WS EINSTEIN: Good Practice Thermal Energy Audits (GPTEA)
36
+ CEN/CLC/WS WiseGRID: Reference model for distribution application for microgrids
37
+ CEN/CLC/WS EFPFInterOp: European Connected Factory Platform for Agile Manufacturing Interoperability
38
+ CEN/CLC/WS ZDMterm: Zero Defects in Digital Manufacturing Terminology
39
+ CEN/SS C20: Explosives and firework
40
+ CEN/SS S08: Air quality
41
+ CEN/SS S12: Gas analysis
42
+ CEN/Guides: Group for CEN Guides
43
+ CEN/SS A03: Postal services
44
+ CEN/SS A07: Translation and Interpretation services
45
+ CEN/SS A08: Funeral services
46
+ CEN/SS A10: Services of Real Estate Agents
47
+ CEN/SS A11: Security services
48
+ CEN/SS A99: Services - Undetermined
49
+ CEN/SS B02: Structures
50
+ CEN/SS B09: Energy Performance of Buildings Directive (EPBD)
51
+ CEN/SS B99: Building and construction - Undetermined
52
+ CEN/SS C01: Food Products
53
+ CEN/SS C10: Starch
54
+ CEN/SS F01: Technical drawings
55
+ CEN/SS F02: Units and symbols
56
+ CEN/SS F05: Measuring Instruments
57
+ CEN/SS F12: Information Processing Systems
58
+ CEN/SS F16: Graphical symbols
59
+ CEN/SS F17: Administrative documents
60
+ CEN/SS F20: Quality assurance
61
+ CEN/SS F23: Energy
62
+ CEN/SS H10: Sewing machines
63
+ CEN/SS H22: Smokers' lighters
64
+ CEN/SS H99: Products for household and leisure use - Undetermined
65
+
66
+ TC 459: ECISS - European Committee for Iron and Steel Standardization
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton
4
+ module Cen
5
+ # Hit.
6
+ class Hit < Relaton::Core::Hit
7
+ attr_writer :item
8
+
9
+ # Parse page.
10
+ # @return [IsoRelatonBib::IsoBibliographicItem]
11
+ def item
12
+ @fetch ||= Scraper.parse_page self
13
+ end
14
+ end
15
+ end
16
+ end