relaton 2.2.0.pre.alpha.1 → 3.0.0.pre.alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. checksums.yaml +4 -4
  2. data/{docs/README.adoc → README.adoc} +165 -38
  3. data/bin/console +0 -1
  4. data/lib/relaton/3gpp/bibdata.rb +9 -0
  5. data/lib/relaton/3gpp/bibitem.rb +9 -0
  6. data/lib/relaton/3gpp/bibliography.rb +123 -0
  7. data/lib/relaton/3gpp/data_fetcher.rb +303 -0
  8. data/lib/relaton/3gpp/docidentifier.rb +114 -0
  9. data/lib/relaton/3gpp/doctype.rb +9 -0
  10. data/lib/relaton/3gpp/ext.rb +31 -0
  11. data/lib/relaton/3gpp/item.rb +18 -0
  12. data/lib/relaton/3gpp/item_data.rb +15 -0
  13. data/lib/relaton/3gpp/parser.rb +400 -0
  14. data/lib/relaton/3gpp/processor.rb +71 -0
  15. data/lib/relaton/3gpp/release.rb +34 -0
  16. data/lib/relaton/3gpp/util.rb +8 -0
  17. data/lib/relaton/3gpp.rb +29 -0
  18. data/lib/relaton/adobe/bibdata.rb +8 -0
  19. data/lib/relaton/adobe/bibitem.rb +8 -0
  20. data/lib/relaton/adobe/bibliography.rb +92 -0
  21. data/lib/relaton/adobe/docidentifier.rb +49 -0
  22. data/lib/relaton/adobe/doctype.rb +14 -0
  23. data/lib/relaton/adobe/ext.rb +32 -0
  24. data/lib/relaton/adobe/item.rb +15 -0
  25. data/lib/relaton/adobe/item_base.rb +18 -0
  26. data/lib/relaton/adobe/item_data.rb +6 -0
  27. data/lib/relaton/adobe/processor.rb +45 -0
  28. data/lib/relaton/adobe/util.rb +8 -0
  29. data/lib/relaton/adobe.rb +37 -0
  30. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  31. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  32. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  33. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  34. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  35. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
  36. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  37. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
  38. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  39. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  40. data/lib/relaton/bib/hash_parser_v1.rb +767 -0
  41. data/lib/relaton/bib/item_data.rb +229 -0
  42. data/lib/relaton/bib/model/abstract.rb +16 -0
  43. data/lib/relaton/bib/model/address.rb +22 -0
  44. data/lib/relaton/bib/model/affiliation.rb +16 -0
  45. data/lib/relaton/bib/model/bibdata.rb +11 -0
  46. data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
  47. data/lib/relaton/bib/model/bibitem.rb +11 -0
  48. data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
  49. data/lib/relaton/bib/model/contact.rb +18 -0
  50. data/lib/relaton/bib/model/contribution_info.rb +15 -0
  51. data/lib/relaton/bib/model/contributor.rb +29 -0
  52. data/lib/relaton/bib/model/copyright.rb +27 -0
  53. data/lib/relaton/bib/model/date.rb +31 -0
  54. data/lib/relaton/bib/model/depiction.rb +16 -0
  55. data/lib/relaton/bib/model/docidentifier.rb +49 -0
  56. data/lib/relaton/bib/model/doctype.rb +14 -0
  57. data/lib/relaton/bib/model/edition.rb +14 -0
  58. data/lib/relaton/bib/model/ext.rb +39 -0
  59. data/lib/relaton/bib/model/extent.rb +16 -0
  60. data/lib/relaton/bib/model/formattedref.rb +43 -0
  61. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  62. data/lib/relaton/bib/model/fullname.rb +11 -0
  63. data/lib/relaton/bib/model/ics.rb +49 -0
  64. data/lib/relaton/bib/model/image.rb +28 -0
  65. data/lib/relaton/bib/model/item.rb +96 -0
  66. data/lib/relaton/bib/model/item_base.rb +20 -0
  67. data/lib/relaton/bib/model/item_shared.rb +88 -0
  68. data/lib/relaton/bib/model/keyword.rb +30 -0
  69. data/lib/relaton/bib/model/locality.rb +18 -0
  70. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  71. data/lib/relaton/bib/model/localized_string.rb +48 -0
  72. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  73. data/lib/relaton/bib/model/logo.rb +14 -0
  74. data/lib/relaton/bib/model/medium.rb +22 -0
  75. data/lib/relaton/bib/model/note.rb +16 -0
  76. data/lib/relaton/bib/model/organization.rb +13 -0
  77. data/lib/relaton/bib/model/organization_type.rb +42 -0
  78. data/lib/relaton/bib/model/person.rb +36 -0
  79. data/lib/relaton/bib/model/phone.rb +14 -0
  80. data/lib/relaton/bib/model/place.rb +33 -0
  81. data/lib/relaton/bib/model/price.rb +14 -0
  82. data/lib/relaton/bib/model/relation.rb +43 -0
  83. data/lib/relaton/bib/model/series.rb +34 -0
  84. data/lib/relaton/bib/model/size.rb +23 -0
  85. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  86. data/lib/relaton/bib/model/status.rb +27 -0
  87. data/lib/relaton/bib/model/structured_identifier.rb +49 -0
  88. data/lib/relaton/bib/model/subdivision.rb +16 -0
  89. data/lib/relaton/bib/model/title.rb +56 -0
  90. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  91. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  92. data/lib/relaton/bib/model/uri.rb +18 -0
  93. data/lib/relaton/bib/model/validity.rb +16 -0
  94. data/lib/relaton/bib/model/version.rb +43 -0
  95. data/lib/relaton/bib/namespace_helper.rb +21 -0
  96. data/lib/relaton/bib/sanitizer.rb +264 -0
  97. data/lib/relaton/bib/util.rb +18 -0
  98. data/lib/relaton/bib/versions.json +35 -0
  99. data/lib/relaton/bib.rb +46 -0
  100. data/lib/relaton/bipm/bibliography.rb +231 -0
  101. data/lib/relaton/bipm/converter/asciibib.rb +64 -0
  102. data/lib/relaton/bipm/data_fetcher.rb +81 -0
  103. data/lib/relaton/bipm/data_outcomes_parser.rb +656 -0
  104. data/lib/relaton/bipm/id_parser.rb +278 -0
  105. data/lib/relaton/bipm/item_data.rb +47 -0
  106. data/lib/relaton/bipm/model/bibdata.rb +9 -0
  107. data/lib/relaton/bipm/model/bibitem.rb +9 -0
  108. data/lib/relaton/bipm/model/comment_period.rb +13 -0
  109. data/lib/relaton/bipm/model/doctype.rb +12 -0
  110. data/lib/relaton/bipm/model/ext.rb +38 -0
  111. data/lib/relaton/bipm/model/item.rb +11 -0
  112. data/lib/relaton/bipm/model/structured_identifier.rb +36 -0
  113. data/lib/relaton/bipm/processor.rb +69 -0
  114. data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
  115. data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +172 -0
  116. data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
  117. data/lib/relaton/bipm/si_brochure_parser.rb +188 -0
  118. data/lib/relaton/bipm/util.rb +8 -0
  119. data/lib/relaton/bipm.rb +38 -0
  120. data/lib/relaton/bsi/bibliography.rb +196 -0
  121. data/lib/relaton/bsi/hit.rb +28 -0
  122. data/lib/relaton/bsi/hit_collection.rb +113 -0
  123. data/lib/relaton/bsi/item_data.rb +13 -0
  124. data/lib/relaton/bsi/model/bibdata.rb +8 -0
  125. data/lib/relaton/bsi/model/bibitem.rb +8 -0
  126. data/lib/relaton/bsi/model/docidentifier.rb +107 -0
  127. data/lib/relaton/bsi/model/doctype.rb +14 -0
  128. data/lib/relaton/bsi/model/ext.rb +17 -0
  129. data/lib/relaton/bsi/model/item.rb +17 -0
  130. data/lib/relaton/bsi/model/item_base.rb +22 -0
  131. data/lib/relaton/bsi/model/relation.rb +9 -0
  132. data/lib/relaton/bsi/processor.rb +43 -0
  133. data/lib/relaton/bsi/schema.json +24882 -0
  134. data/lib/relaton/bsi/scraper.rb +288 -0
  135. data/lib/relaton/bsi/util.rb +8 -0
  136. data/lib/relaton/bsi.rb +25 -0
  137. data/lib/relaton/calconnect/bibliography.rb +93 -0
  138. data/lib/relaton/calconnect/data_fetcher.rb +174 -0
  139. data/lib/relaton/calconnect/docidentifier.rb +80 -0
  140. data/lib/relaton/calconnect/hit.rb +14 -0
  141. data/lib/relaton/calconnect/hit_collection.rb +92 -0
  142. data/lib/relaton/calconnect/item_data.rb +12 -0
  143. data/lib/relaton/calconnect/model/bibdata.rb +8 -0
  144. data/lib/relaton/calconnect/model/bibitem.rb +8 -0
  145. data/lib/relaton/calconnect/model/doctype.rb +11 -0
  146. data/lib/relaton/calconnect/model/ext.rb +11 -0
  147. data/lib/relaton/calconnect/model/item.rb +20 -0
  148. data/lib/relaton/calconnect/processor.rb +72 -0
  149. data/lib/relaton/calconnect/scraper.rb +87 -0
  150. data/lib/relaton/calconnect/util.rb +8 -0
  151. data/lib/relaton/calconnect.rb +36 -0
  152. data/lib/relaton/ccsds/bibliography.rb +63 -0
  153. data/lib/relaton/ccsds/data/fetcher.rb +252 -0
  154. data/lib/relaton/ccsds/data/iso_references.rb +30 -0
  155. data/lib/relaton/ccsds/data/parser.rb +194 -0
  156. data/lib/relaton/ccsds/hit.rb +24 -0
  157. data/lib/relaton/ccsds/hit_collection.rb +47 -0
  158. data/lib/relaton/ccsds/item_data.rb +9 -0
  159. data/lib/relaton/ccsds/model/bibdata.rb +8 -0
  160. data/lib/relaton/ccsds/model/bibitem.rb +8 -0
  161. data/lib/relaton/ccsds/model/docidentifier.rb +121 -0
  162. data/lib/relaton/ccsds/model/doctype.rb +9 -0
  163. data/lib/relaton/ccsds/model/ext.rb +19 -0
  164. data/lib/relaton/ccsds/model/item.rb +15 -0
  165. data/lib/relaton/ccsds/processor.rb +68 -0
  166. data/lib/relaton/ccsds/util.rb +10 -0
  167. data/lib/relaton/ccsds.rb +33 -0
  168. data/lib/relaton/cen/bibliography.rb +149 -0
  169. data/lib/relaton/cen/committees.yaml +66 -0
  170. data/lib/relaton/cen/hit.rb +31 -0
  171. data/lib/relaton/cen/hit_collection.rb +116 -0
  172. data/lib/relaton/cen/item_data.rb +7 -0
  173. data/lib/relaton/cen/model/bibdata.rb +8 -0
  174. data/lib/relaton/cen/model/bibitem.rb +8 -0
  175. data/lib/relaton/cen/model/docidentifier.rb +100 -0
  176. data/lib/relaton/cen/model/ext.rb +11 -0
  177. data/lib/relaton/cen/model/item.rb +14 -0
  178. data/lib/relaton/cen/model/structured_identifier.rb +9 -0
  179. data/lib/relaton/cen/processor.rb +45 -0
  180. data/lib/relaton/cen/scraper.rb +218 -0
  181. data/lib/relaton/cen/util.rb +8 -0
  182. data/lib/relaton/cen.rb +30 -0
  183. data/lib/relaton/cie/bibdata.rb +8 -0
  184. data/lib/relaton/cie/bibitem.rb +8 -0
  185. data/lib/relaton/cie/bibliography.rb +31 -0
  186. data/lib/relaton/cie/data_fetcher.rb +540 -0
  187. data/lib/relaton/cie/ext.rb +7 -0
  188. data/lib/relaton/cie/item.rb +11 -0
  189. data/lib/relaton/cie/item_data.rb +6 -0
  190. data/lib/relaton/cie/processor.rb +68 -0
  191. data/lib/relaton/cie/scrapper.rb +52 -0
  192. data/lib/relaton/cie/util.rb +8 -0
  193. data/lib/relaton/cie.rb +29 -0
  194. data/lib/relaton/core/array_wrapper.rb +20 -0
  195. data/lib/relaton/core/data_fetcher.rb +244 -0
  196. data/lib/relaton/core/date_parser.rb +42 -0
  197. data/lib/relaton/core/governor.rb +320 -0
  198. data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
  199. data/lib/relaton/core/hit.rb +49 -0
  200. data/lib/relaton/core/hit_collection.rb +118 -0
  201. data/lib/relaton/core/pacer.rb +134 -0
  202. data/lib/relaton/core/processor.rb +67 -0
  203. data/lib/relaton/core/request_error.rb +14 -0
  204. data/lib/relaton/core/workers_pool.rb +45 -0
  205. data/lib/relaton/core.rb +12 -0
  206. data/lib/relaton/db/registry.rb +44 -4
  207. data/lib/relaton/db.rb +0 -1
  208. data/lib/relaton/doi/crossref.rb +89 -0
  209. data/lib/relaton/doi/parser.rb +921 -0
  210. data/lib/relaton/doi/processor.rb +65 -0
  211. data/lib/relaton/doi/util.rb +8 -0
  212. data/lib/relaton/doi.rb +20 -0
  213. data/lib/relaton/easc/bibdata.rb +8 -0
  214. data/lib/relaton/easc/bibitem.rb +8 -0
  215. data/lib/relaton/easc/bibliography.rb +95 -0
  216. data/lib/relaton/easc/docidentifier.rb +100 -0
  217. data/lib/relaton/easc/doctype.rb +14 -0
  218. data/lib/relaton/easc/ext.rb +44 -0
  219. data/lib/relaton/easc/item.rb +13 -0
  220. data/lib/relaton/easc/item_base.rb +18 -0
  221. data/lib/relaton/easc/item_data.rb +6 -0
  222. data/lib/relaton/easc/processor.rb +46 -0
  223. data/lib/relaton/easc/util.rb +8 -0
  224. data/lib/relaton/easc.rb +35 -0
  225. data/lib/relaton/ecma/bibdata.rb +8 -0
  226. data/lib/relaton/ecma/bibitem.rb +8 -0
  227. data/lib/relaton/ecma/bibliography.rb +149 -0
  228. data/lib/relaton/ecma/data_fetcher.rb +162 -0
  229. data/lib/relaton/ecma/data_parser.rb +49 -0
  230. data/lib/relaton/ecma/docidentifier.rb +124 -0
  231. data/lib/relaton/ecma/edition_parser.rb +80 -0
  232. data/lib/relaton/ecma/ext.rb +7 -0
  233. data/lib/relaton/ecma/item.rb +13 -0
  234. data/lib/relaton/ecma/item_data.rb +6 -0
  235. data/lib/relaton/ecma/memento_parser.rb +60 -0
  236. data/lib/relaton/ecma/page_fetcher.rb +39 -0
  237. data/lib/relaton/ecma/parser_common.rb +33 -0
  238. data/lib/relaton/ecma/processor.rb +69 -0
  239. data/lib/relaton/ecma/standard_parser.rb +134 -0
  240. data/lib/relaton/ecma/util.rb +8 -0
  241. data/lib/relaton/ecma.rb +33 -0
  242. data/lib/relaton/etsi/bibdata.rb +10 -0
  243. data/lib/relaton/etsi/bibitem.rb +10 -0
  244. data/lib/relaton/etsi/bibliography.rb +111 -0
  245. data/lib/relaton/etsi/data_fetcher.rb +167 -0
  246. data/lib/relaton/etsi/data_parser.rb +208 -0
  247. data/lib/relaton/etsi/doctype.rb +30 -0
  248. data/lib/relaton/etsi/ext.rb +31 -0
  249. data/lib/relaton/etsi/item.rb +15 -0
  250. data/lib/relaton/etsi/item_data.rb +6 -0
  251. data/lib/relaton/etsi/processor.rb +71 -0
  252. data/lib/relaton/etsi/pubid.rb +37 -0
  253. data/lib/relaton/etsi/status.rb +13 -0
  254. data/lib/relaton/etsi/util.rb +8 -0
  255. data/lib/relaton/etsi.rb +26 -0
  256. data/lib/relaton/gb/bibdata.rb +8 -0
  257. data/lib/relaton/gb/bibitem.rb +8 -0
  258. data/lib/relaton/gb/bibliography.rb +171 -0
  259. data/lib/relaton/gb/ccs.rb +14 -0
  260. data/lib/relaton/gb/committee.rb +13 -0
  261. data/lib/relaton/gb/docidentifier.rb +72 -0
  262. data/lib/relaton/gb/doctype.rb +9 -0
  263. data/lib/relaton/gb/ext.rb +36 -0
  264. data/lib/relaton/gb/gb_scraper.rb +61 -0
  265. data/lib/relaton/gb/gb_type.rb +20 -0
  266. data/lib/relaton/gb/hit.rb +48 -0
  267. data/lib/relaton/gb/hit_collection.rb +19 -0
  268. data/lib/relaton/gb/item.rb +13 -0
  269. data/lib/relaton/gb/item_data.rb +6 -0
  270. data/lib/relaton/gb/processor.rb +49 -0
  271. data/lib/relaton/gb/project_number.rb +38 -0
  272. data/lib/relaton/gb/scraper.rb +221 -0
  273. data/lib/relaton/gb/sec_scraper.rb +92 -0
  274. data/lib/relaton/gb/stage_name.rb +13 -0
  275. data/lib/relaton/gb/structured_identifier.rb +26 -0
  276. data/lib/relaton/gb/t_scraper.rb +126 -0
  277. data/lib/relaton/gb/util.rb +8 -0
  278. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  279. data/lib/relaton/gb.rb +33 -0
  280. data/lib/relaton/gost/bibdata.rb +8 -0
  281. data/lib/relaton/gost/bibitem.rb +8 -0
  282. data/lib/relaton/gost/bibliography.rb +107 -0
  283. data/lib/relaton/gost/docidentifier.rb +80 -0
  284. data/lib/relaton/gost/doctype.rb +16 -0
  285. data/lib/relaton/gost/ext.rb +46 -0
  286. data/lib/relaton/gost/item.rb +15 -0
  287. data/lib/relaton/gost/item_base.rb +18 -0
  288. data/lib/relaton/gost/item_data.rb +6 -0
  289. data/lib/relaton/gost/processor.rb +49 -0
  290. data/lib/relaton/gost/util.rb +8 -0
  291. data/lib/relaton/gost.rb +36 -0
  292. data/lib/relaton/iala/bibdata.rb +8 -0
  293. data/lib/relaton/iala/bibitem.rb +8 -0
  294. data/lib/relaton/iala/bibliography.rb +146 -0
  295. data/lib/relaton/iala/docidentifier.rb +89 -0
  296. data/lib/relaton/iala/doctype.rb +18 -0
  297. data/lib/relaton/iala/ext.rb +32 -0
  298. data/lib/relaton/iala/item.rb +21 -0
  299. data/lib/relaton/iala/item_base.rb +18 -0
  300. data/lib/relaton/iala/item_data.rb +6 -0
  301. data/lib/relaton/iala/processor.rb +43 -0
  302. data/lib/relaton/iala/relation.rb +7 -0
  303. data/lib/relaton/iala/util.rb +8 -0
  304. data/lib/relaton/iala.rb +35 -0
  305. data/lib/relaton/iana/bibdata.rb +8 -0
  306. data/lib/relaton/iana/bibitem.rb +8 -0
  307. data/lib/relaton/iana/bibliography.rb +100 -0
  308. data/lib/relaton/iana/data_fetcher.rb +101 -0
  309. data/lib/relaton/iana/item.rb +7 -0
  310. data/lib/relaton/iana/item_data.rb +6 -0
  311. data/lib/relaton/iana/parser.rb +146 -0
  312. data/lib/relaton/iana/processor.rb +70 -0
  313. data/lib/relaton/iana/util.rb +8 -0
  314. data/lib/relaton/iana.rb +40 -0
  315. data/lib/relaton/iec/bibliography.rb +283 -0
  316. data/lib/relaton/iec/data_fetcher.rb +222 -0
  317. data/lib/relaton/iec/data_parser.rb +391 -0
  318. data/lib/relaton/iec/hit.rb +26 -0
  319. data/lib/relaton/iec/hit_collection.rb +138 -0
  320. data/lib/relaton/iec/item_data.rb +7 -0
  321. data/lib/relaton/iec/model/bibdata.rb +8 -0
  322. data/lib/relaton/iec/model/bibitem.rb +8 -0
  323. data/lib/relaton/iec/model/docidentifier.rb +135 -0
  324. data/lib/relaton/iec/model/doctype.rb +12 -0
  325. data/lib/relaton/iec/model/ext.rb +53 -0
  326. data/lib/relaton/iec/model/item.rb +20 -0
  327. data/lib/relaton/iec/model/item_base.rb +12 -0
  328. data/lib/relaton/iec/model/relation.rb +7 -0
  329. data/lib/relaton/iec/model/stage_name.rb +13 -0
  330. data/lib/relaton/iec/processor.rb +74 -0
  331. data/lib/relaton/iec/statuses.yml +199 -0
  332. data/lib/relaton/iec/util.rb +8 -0
  333. data/lib/relaton/iec.rb +98 -0
  334. data/lib/relaton/ieee/balloting_group.rb +13 -0
  335. data/lib/relaton/ieee/bibdata.rb +8 -0
  336. data/lib/relaton/ieee/bibitem.rb +8 -0
  337. data/lib/relaton/ieee/bibliography.rb +73 -0
  338. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  339. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  340. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  341. data/lib/relaton/ieee/data_fetcher.rb +771 -0
  342. data/lib/relaton/ieee/doctype.rb +9 -0
  343. data/lib/relaton/ieee/editorial_group.rb +19 -0
  344. data/lib/relaton/ieee/ext.rb +36 -0
  345. data/lib/relaton/ieee/idams_parser.rb +330 -0
  346. data/lib/relaton/ieee/item.rb +11 -0
  347. data/lib/relaton/ieee/item_data.rb +7 -0
  348. data/lib/relaton/ieee/processor.rb +71 -0
  349. data/lib/relaton/ieee/rawbib_id_parser.rb +753 -0
  350. data/lib/relaton/ieee/util.rb +8 -0
  351. data/lib/relaton/ieee.rb +30 -0
  352. data/lib/relaton/ietf/bibdata.rb +8 -0
  353. data/lib/relaton/ietf/bibitem.rb +8 -0
  354. data/lib/relaton/ietf/bibliography.rb +35 -0
  355. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  356. data/lib/relaton/ietf/data_fetcher.rb +561 -0
  357. data/lib/relaton/ietf/doctype.rb +9 -0
  358. data/lib/relaton/ietf/ext.rb +63 -0
  359. data/lib/relaton/ietf/item.rb +16 -0
  360. data/lib/relaton/ietf/item_base.rb +18 -0
  361. data/lib/relaton/ietf/item_data.rb +6 -0
  362. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  363. data/lib/relaton/ietf/processor.rb +72 -0
  364. data/lib/relaton/ietf/relation.rb +9 -0
  365. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  366. data/lib/relaton/ietf/rfc/author.rb +21 -0
  367. data/lib/relaton/ietf/rfc/entry.rb +446 -0
  368. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  369. data/lib/relaton/ietf/rfc/format.rb +19 -0
  370. data/lib/relaton/ietf/rfc/index.rb +46 -0
  371. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  372. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  373. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  374. data/lib/relaton/ietf/scraper.rb +101 -0
  375. data/lib/relaton/ietf/util.rb +8 -0
  376. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  377. data/lib/relaton/ietf.rb +30 -0
  378. data/lib/relaton/iho/bibdata.rb +8 -0
  379. data/lib/relaton/iho/bibitem.rb +8 -0
  380. data/lib/relaton/iho/bibliography.rb +114 -0
  381. data/lib/relaton/iho/comment_period.rb +13 -0
  382. data/lib/relaton/iho/docidentifier.rb +31 -0
  383. data/lib/relaton/iho/doctype.rb +10 -0
  384. data/lib/relaton/iho/ext.rb +20 -0
  385. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  386. data/lib/relaton/iho/item.rb +20 -0
  387. data/lib/relaton/iho/item_base.rb +18 -0
  388. data/lib/relaton/iho/item_data.rb +6 -0
  389. data/lib/relaton/iho/processor.rb +54 -0
  390. data/lib/relaton/iho/relation.rb +9 -0
  391. data/lib/relaton/iho/structured_identifier.rb +20 -0
  392. data/lib/relaton/iho/util.rb +8 -0
  393. data/lib/relaton/iho.rb +27 -0
  394. data/lib/relaton/index/config.rb +52 -0
  395. data/lib/relaton/index/file_io.rb +305 -0
  396. data/lib/relaton/index/file_storage.rb +66 -0
  397. data/lib/relaton/index/pool.rb +46 -0
  398. data/lib/relaton/index/shard_source.rb +201 -0
  399. data/lib/relaton/index/type.rb +210 -0
  400. data/lib/relaton/index/util.rb +18 -0
  401. data/lib/relaton/index.rb +61 -0
  402. data/lib/relaton/isbn/isbn.rb +61 -0
  403. data/lib/relaton/isbn/open_library.rb +43 -0
  404. data/lib/relaton/isbn/parser.rb +88 -0
  405. data/lib/relaton/isbn/processor.rb +48 -0
  406. data/lib/relaton/isbn/util.rb +8 -0
  407. data/lib/relaton/isbn.rb +19 -0
  408. data/lib/relaton/iso/bibliography.rb +412 -0
  409. data/lib/relaton/iso/data_fetcher.rb +338 -0
  410. data/lib/relaton/iso/data_parser.rb +458 -0
  411. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  412. data/lib/relaton/iso/hit.rb +57 -0
  413. data/lib/relaton/iso/hit_collection.rb +196 -0
  414. data/lib/relaton/iso/item_data.rb +50 -0
  415. data/lib/relaton/iso/model/bibdata.rb +10 -0
  416. data/lib/relaton/iso/model/bibitem.rb +8 -0
  417. data/lib/relaton/iso/model/contributor.rb +6 -0
  418. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  419. data/lib/relaton/iso/model/docidentifier.rb +146 -0
  420. data/lib/relaton/iso/model/doctype.rb +13 -0
  421. data/lib/relaton/iso/model/ext.rb +35 -0
  422. data/lib/relaton/iso/model/item.rb +17 -0
  423. data/lib/relaton/iso/model/item_base.rb +22 -0
  424. data/lib/relaton/iso/model/organization.rb +9 -0
  425. data/lib/relaton/iso/model/project_number.rb +22 -0
  426. data/lib/relaton/iso/model/relation.rb +9 -0
  427. data/lib/relaton/iso/model/stagename.rb +14 -0
  428. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  429. data/lib/relaton/iso/processor.rb +85 -0
  430. data/lib/relaton/iso/scraper.rb +635 -0
  431. data/lib/relaton/iso/type/pubid.rb +50 -0
  432. data/lib/relaton/iso/util.rb +8 -0
  433. data/lib/relaton/iso.rb +30 -0
  434. data/lib/relaton/itu/bibliography.rb +95 -0
  435. data/lib/relaton/itu/data_crawler_r.rb +664 -0
  436. data/lib/relaton/itu/data_fetcher.rb +550 -0
  437. data/lib/relaton/itu/data_merge_r.rb +149 -0
  438. data/lib/relaton/itu/data_parser_r.rb +214 -0
  439. data/lib/relaton/itu/data_parser_t.rb +228 -0
  440. data/lib/relaton/itu/family_cache.rb +177 -0
  441. data/lib/relaton/itu/governor.rb +56 -0
  442. data/lib/relaton/itu/hit.rb +28 -0
  443. data/lib/relaton/itu/hit_collection.rb +299 -0
  444. data/lib/relaton/itu/item_data.rb +6 -0
  445. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  446. data/lib/relaton/itu/model/bibdata.rb +8 -0
  447. data/lib/relaton/itu/model/bibitem.rb +8 -0
  448. data/lib/relaton/itu/model/docidentifier.rb +75 -0
  449. data/lib/relaton/itu/model/doctype.rb +13 -0
  450. data/lib/relaton/itu/model/ext.rb +47 -0
  451. data/lib/relaton/itu/model/item.rb +13 -0
  452. data/lib/relaton/itu/model/meeting.rb +13 -0
  453. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  454. data/lib/relaton/itu/model/question.rb +13 -0
  455. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  456. data/lib/relaton/itu/model/structured_identifier.rb +38 -0
  457. data/lib/relaton/itu/processor.rb +72 -0
  458. data/lib/relaton/itu/pubid.rb +199 -0
  459. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  460. data/lib/relaton/itu/recommendation_fields.rb +334 -0
  461. data/lib/relaton/itu/recommendation_parser.rb +30 -0
  462. data/lib/relaton/itu/scraper.rb +203 -0
  463. data/lib/relaton/itu/util.rb +8 -0
  464. data/lib/relaton/itu.rb +34 -0
  465. data/lib/relaton/jcgm/bibdata.rb +8 -0
  466. data/lib/relaton/jcgm/bibitem.rb +8 -0
  467. data/lib/relaton/jcgm/bibliography.rb +97 -0
  468. data/lib/relaton/jcgm/data_fetcher.rb +81 -0
  469. data/lib/relaton/jcgm/docidentifier.rb +102 -0
  470. data/lib/relaton/jcgm/doctype.rb +12 -0
  471. data/lib/relaton/jcgm/ext.rb +23 -0
  472. data/lib/relaton/jcgm/item.rb +20 -0
  473. data/lib/relaton/jcgm/item_base.rb +18 -0
  474. data/lib/relaton/jcgm/item_data.rb +6 -0
  475. data/lib/relaton/jcgm/meetings_parser.rb +175 -0
  476. data/lib/relaton/jcgm/processor.rb +71 -0
  477. data/lib/relaton/jcgm/relation.rb +9 -0
  478. data/lib/relaton/jcgm/structured_identifier.rb +40 -0
  479. data/lib/relaton/jcgm/util.rb +8 -0
  480. data/lib/relaton/jcgm.rb +24 -0
  481. data/lib/relaton/jis/bibdata.rb +8 -0
  482. data/lib/relaton/jis/bibitem.rb +8 -0
  483. data/lib/relaton/jis/bibliography.rb +73 -0
  484. data/lib/relaton/jis/data_fetcher.rb +183 -0
  485. data/lib/relaton/jis/docidentifier.rb +120 -0
  486. data/lib/relaton/jis/doctype.rb +9 -0
  487. data/lib/relaton/jis/ext.rb +13 -0
  488. data/lib/relaton/jis/hit.rb +88 -0
  489. data/lib/relaton/jis/hit_collection.rb +128 -0
  490. data/lib/relaton/jis/item.rb +22 -0
  491. data/lib/relaton/jis/item_base.rb +26 -0
  492. data/lib/relaton/jis/item_data.rb +8 -0
  493. data/lib/relaton/jis/processor.rb +55 -0
  494. data/lib/relaton/jis/relation.rb +11 -0
  495. data/lib/relaton/jis/scraper.rb +232 -0
  496. data/lib/relaton/jis/structured_identifier.rb +13 -0
  497. data/lib/relaton/jis/util.rb +8 -0
  498. data/lib/relaton/jis.rb +32 -0
  499. data/lib/relaton/logger/channels/gh_issue.rb +143 -0
  500. data/lib/relaton/logger/config.rb +34 -0
  501. data/lib/relaton/logger/formatter_json.rb +8 -0
  502. data/lib/relaton/logger/formatter_string.rb +12 -0
  503. data/lib/relaton/logger/log.rb +64 -0
  504. data/lib/relaton/logger/log_device.rb +27 -0
  505. data/lib/relaton/logger/pool.rb +24 -0
  506. data/lib/relaton/logger.rb +18 -0
  507. data/lib/relaton/nist/bibdata.rb +8 -0
  508. data/lib/relaton/nist/bibitem.rb +8 -0
  509. data/lib/relaton/nist/bibliography.rb +191 -0
  510. data/lib/relaton/nist/comment_period.rb +15 -0
  511. data/lib/relaton/nist/data_fetcher.rb +134 -0
  512. data/lib/relaton/nist/date.rb +7 -0
  513. data/lib/relaton/nist/docidentifier.rb +165 -0
  514. data/lib/relaton/nist/doctype.rb +7 -0
  515. data/lib/relaton/nist/ext.rb +16 -0
  516. data/lib/relaton/nist/hit.rb +18 -0
  517. data/lib/relaton/nist/hit_collection.rb +362 -0
  518. data/lib/relaton/nist/item.rb +19 -0
  519. data/lib/relaton/nist/item_base.rb +16 -0
  520. data/lib/relaton/nist/item_data.rb +6 -0
  521. data/lib/relaton/nist/mods_parser.rb +302 -0
  522. data/lib/relaton/nist/processor.rb +69 -0
  523. data/lib/relaton/nist/pubs_export.rb +69 -0
  524. data/lib/relaton/nist/relation.rb +10 -0
  525. data/lib/relaton/nist/scraper.rb +293 -0
  526. data/lib/relaton/nist/series.yaml +49 -0
  527. data/lib/relaton/nist/util.rb +8 -0
  528. data/lib/relaton/nist.rb +34 -0
  529. data/lib/relaton/oasis/bibdata.rb +8 -0
  530. data/lib/relaton/oasis/bibitem.rb +8 -0
  531. data/lib/relaton/oasis/bibliography.rb +201 -0
  532. data/lib/relaton/oasis/browser_agent.rb +71 -0
  533. data/lib/relaton/oasis/data_fetcher.rb +130 -0
  534. data/lib/relaton/oasis/data_parser.rb +305 -0
  535. data/lib/relaton/oasis/data_parser_utils.rb +330 -0
  536. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  537. data/lib/relaton/oasis/docidentifier.rb +54 -0
  538. data/lib/relaton/oasis/doctype.rb +7 -0
  539. data/lib/relaton/oasis/ext.rb +19 -0
  540. data/lib/relaton/oasis/item.rb +14 -0
  541. data/lib/relaton/oasis/item_data.rb +6 -0
  542. data/lib/relaton/oasis/processor.rb +74 -0
  543. data/lib/relaton/oasis/util.rb +8 -0
  544. data/lib/relaton/oasis.rb +41 -0
  545. data/lib/relaton/ogc/bibdata.rb +8 -0
  546. data/lib/relaton/ogc/bibitem.rb +8 -0
  547. data/lib/relaton/ogc/bibliography.rb +64 -0
  548. data/lib/relaton/ogc/data_fetcher.rb +131 -0
  549. data/lib/relaton/ogc/docidentifier.rb +111 -0
  550. data/lib/relaton/ogc/doctype.rb +12 -0
  551. data/lib/relaton/ogc/ext.rb +15 -0
  552. data/lib/relaton/ogc/hit.rb +18 -0
  553. data/lib/relaton/ogc/hit_collection.rb +111 -0
  554. data/lib/relaton/ogc/item.rb +13 -0
  555. data/lib/relaton/ogc/item_data.rb +6 -0
  556. data/lib/relaton/ogc/processor.rb +59 -0
  557. data/lib/relaton/ogc/scraper.rb +225 -0
  558. data/lib/relaton/ogc/util.rb +8 -0
  559. data/lib/relaton/ogc.rb +30 -0
  560. data/lib/relaton/oiml/bibdata.rb +8 -0
  561. data/lib/relaton/oiml/bibitem.rb +8 -0
  562. data/lib/relaton/oiml/bibliography.rb +169 -0
  563. data/lib/relaton/oiml/docidentifier.rb +48 -0
  564. data/lib/relaton/oiml/doctype.rb +13 -0
  565. data/lib/relaton/oiml/ext.rb +42 -0
  566. data/lib/relaton/oiml/item.rb +20 -0
  567. data/lib/relaton/oiml/item_base.rb +18 -0
  568. data/lib/relaton/oiml/item_data.rb +6 -0
  569. data/lib/relaton/oiml/processor.rb +54 -0
  570. data/lib/relaton/oiml/relation.rb +9 -0
  571. data/lib/relaton/oiml/util.rb +8 -0
  572. data/lib/relaton/oiml.rb +24 -0
  573. data/lib/relaton/omg/bibdata.rb +8 -0
  574. data/lib/relaton/omg/bibitem.rb +8 -0
  575. data/lib/relaton/omg/bibliography.rb +31 -0
  576. data/lib/relaton/omg/docidentifier.rb +67 -0
  577. data/lib/relaton/omg/ext.rb +7 -0
  578. data/lib/relaton/omg/item.rb +9 -0
  579. data/lib/relaton/omg/item_data.rb +6 -0
  580. data/lib/relaton/omg/processor.rb +35 -0
  581. data/lib/relaton/omg/scraper.rb +186 -0
  582. data/lib/relaton/omg/util.rb +8 -0
  583. data/lib/relaton/omg.rb +25 -0
  584. data/lib/relaton/plateau/bibdata.rb +8 -0
  585. data/lib/relaton/plateau/bibitem.rb +8 -0
  586. data/lib/relaton/plateau/bibliography.rb +31 -0
  587. data/lib/relaton/plateau/data_fetcher.rb +176 -0
  588. data/lib/relaton/plateau/doctype.rb +7 -0
  589. data/lib/relaton/plateau/ext.rb +23 -0
  590. data/lib/relaton/plateau/handbook_parser.rb +102 -0
  591. data/lib/relaton/plateau/hit.rb +21 -0
  592. data/lib/relaton/plateau/hit_collection.rb +79 -0
  593. data/lib/relaton/plateau/item.rb +12 -0
  594. data/lib/relaton/plateau/item_data.rb +6 -0
  595. data/lib/relaton/plateau/parser.rb +101 -0
  596. data/lib/relaton/plateau/processor.rb +51 -0
  597. data/lib/relaton/plateau/technical_report_parser.rb +98 -0
  598. data/lib/relaton/plateau/util.rb +8 -0
  599. data/lib/relaton/plateau.rb +29 -0
  600. data/lib/relaton/sdo/config.rb +34 -0
  601. data/lib/relaton/sdo/fetcher.rb +52 -0
  602. data/lib/relaton/sdo/logo.rb +95 -0
  603. data/lib/relaton/sdo/name.rb +26 -0
  604. data/lib/relaton/sdo/organization.rb +71 -0
  605. data/lib/relaton/sdo/store.rb +49 -0
  606. data/lib/relaton/sdo.rb +29 -0
  607. data/lib/relaton/un/bibdata.rb +8 -0
  608. data/lib/relaton/un/bibitem.rb +8 -0
  609. data/lib/relaton/un/bibliography.rb +48 -0
  610. data/lib/relaton/un/doctype.rb +10 -0
  611. data/lib/relaton/un/ext.rb +30 -0
  612. data/lib/relaton/un/hit.rb +56 -0
  613. data/lib/relaton/un/hit_collection.rb +61 -0
  614. data/lib/relaton/un/item.rb +11 -0
  615. data/lib/relaton/un/item_data.rb +6 -0
  616. data/lib/relaton/un/parser.rb +108 -0
  617. data/lib/relaton/un/processor.rb +38 -0
  618. data/lib/relaton/un/session.rb +25 -0
  619. data/lib/relaton/un/token_generator.rb +105 -0
  620. data/lib/relaton/un/util.rb +8 -0
  621. data/lib/relaton/un/wasm/decoder.rb +434 -0
  622. data/lib/relaton/un/wasm/instance.rb +101 -0
  623. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  624. data/lib/relaton/un/wasm/memory.rb +112 -0
  625. data/lib/relaton/un/wasm/module.rb +47 -0
  626. data/lib/relaton/un/wasm.rb +17 -0
  627. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  628. data/lib/relaton/un.rb +28 -0
  629. data/lib/relaton/version.rb +1 -1
  630. data/lib/relaton/w3c/bibdata.rb +8 -0
  631. data/lib/relaton/w3c/bibitem.rb +8 -0
  632. data/lib/relaton/w3c/bibliography.rb +174 -0
  633. data/lib/relaton/w3c/data_fetcher.rb +487 -0
  634. data/lib/relaton/w3c/data_parser.rb +379 -0
  635. data/lib/relaton/w3c/docidentifier.rb +48 -0
  636. data/lib/relaton/w3c/doctype.rb +7 -0
  637. data/lib/relaton/w3c/ext.rb +11 -0
  638. data/lib/relaton/w3c/governor.rb +32 -0
  639. data/lib/relaton/w3c/item.rb +15 -0
  640. data/lib/relaton/w3c/item_data.rb +6 -0
  641. data/lib/relaton/w3c/processor.rb +49 -0
  642. data/lib/relaton/w3c/pubid.rb +85 -0
  643. data/lib/relaton/w3c/safe_realize.rb +148 -0
  644. data/lib/relaton/w3c/util.rb +8 -0
  645. data/lib/relaton/w3c.rb +36 -0
  646. data/lib/relaton/xsf/bibdata.rb +8 -0
  647. data/lib/relaton/xsf/bibitem.rb +8 -0
  648. data/lib/relaton/xsf/bibliography.rb +84 -0
  649. data/lib/relaton/xsf/data_fetcher.rb +106 -0
  650. data/lib/relaton/xsf/docidentifier.rb +46 -0
  651. data/lib/relaton/xsf/hit.rb +17 -0
  652. data/lib/relaton/xsf/hit_collection.rb +52 -0
  653. data/lib/relaton/xsf/item.rb +13 -0
  654. data/lib/relaton/xsf/item_data.rb +6 -0
  655. data/lib/relaton/xsf/processor.rb +51 -0
  656. data/lib/relaton/xsf/util.rb +9 -0
  657. data/lib/relaton/xsf.rb +34 -0
  658. data/lib/relaton-core.rb +1 -0
  659. data/lib/relaton.rb +85 -0
  660. metadata +775 -161
  661. data/.github/workflows/rake.yml +0 -14
  662. data/.github/workflows/release.yml +0 -24
  663. data/.github/workflows/rubocop.yml +0 -48
  664. data/.gitignore +0 -12
  665. data/.rspec +0 -3
  666. data/CLAUDE.md +0 -78
  667. data/Gemfile +0 -29
  668. data/Rakefile +0 -6
  669. data/docs/CHANGELOG.adoc +0 -16
  670. data/docs/VERSIONING_POLICY.adoc +0 -38
  671. data/docs/navigation.adoc +0 -6
  672. data/lib/relaton/db/version.rb +0 -5
  673. data/relaton.gemspec +0 -72
  674. data/spec/relaton/config_spec.rb +0 -10
  675. data/spec/relaton/db_cache_spec.rb +0 -51
  676. data/spec/relaton/db_spec.rb +0 -567
  677. data/spec/relaton/registry_spec.rb +0 -178
  678. data/spec/relaton/util_spec.rb +0 -3
  679. data/spec/relaton_meta_spec.rb +0 -25
  680. data/spec/relaton_spec.rb +0 -800
  681. data/spec/spec_helper.rb +0 -45
  682. data/spec/support/gb_t_20223_2006.xml +0 -33
  683. data/spec/support/iso_111111119115_1.xml +0 -0
  684. data/spec/support/iso_19115_1.xml +0 -115
  685. data/spec/support/iso_19115_2.xml +0 -95
  686. data/spec/support/rfc_8341.xml +0 -46
  687. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  688. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -140
  689. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -202
  690. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1505
  691. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -729
  692. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  693. data/spec/vcr_cassetes/iso_19115_1.yml +0 -17334
  694. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -322
  695. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -17334
  696. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -185
  697. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -144
  698. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -318
  699. data/spec/vcr_cassetes/iso_combined_included.yml +0 -318
  700. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -374
  701. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  702. data/spec/vcr_cassetes/rfc_8341.yml +0 -1278
@@ -0,0 +1,400 @@
1
+ require "csv"
2
+
3
+ module Relaton
4
+ module ThreeGpp
5
+ class Parser
6
+ # DOCTYPES = { "TS" => "Technical Specification", "TR" => "Technical Report" }.freeze
7
+
8
+ #
9
+ # Document parser initalization
10
+ #
11
+ # @param [CSV::Row] row CSV row
12
+ #
13
+ def initialize(row, errors)
14
+ @row = row
15
+ @errors = errors
16
+ end
17
+
18
+ #
19
+ # Initialize document parser and run it
20
+ #
21
+ # @param [CSV:Row] row CSV row
22
+ # @param [Hash] errors collection of parsing errors
23
+ #
24
+ # @return [RelatonBib:BibliographicItem, nil] bibliographic item
25
+ #
26
+ def self.parse(row, errors = {})
27
+ new(row, errors).parse
28
+ end
29
+
30
+ #
31
+ # Parse document
32
+ #
33
+ # @return [Relaton3gpp:BibliographicItem, nil] bibliographic item
34
+ #
35
+ def parse # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
36
+ ItemData.new(
37
+ type: "standard",
38
+ language: ["en"],
39
+ script: ["Latn"],
40
+ title: parse_title,
41
+ source: parse_source,
42
+ # abstract: parse_abstract,
43
+ docidentifier: parse_docid,
44
+ docnumber: number,
45
+ date: parse_date,
46
+ version: parse_version,
47
+ contributor: parse_contributor,
48
+ place: parse_place,
49
+ ext: parse_ext,
50
+ # biblionote: parse_note,
51
+ # docstatus: parse_status,
52
+ # common_ims_spec: @spec[:ComIMS] == "1",
53
+ # internal: @spec[:"For publication"] == "0",
54
+ )
55
+ end
56
+
57
+ #
58
+ # Parse title
59
+ #
60
+ # @return [RelatonBib::TypedTitleStringCollection] title
61
+ #
62
+ def parse_title
63
+ @errors[:title] &&= @row["Title"].nil? || @row["Title"].empty?
64
+ [Bib::Title.new(content: @row["Title"], type: "main")]
65
+ end
66
+
67
+ #
68
+ # Parse link
69
+ #
70
+ # @return [Array<RelatonBib::TypedUri>] link
71
+ #
72
+ def parse_source
73
+ @errors[:source] &&= @row["Link"].nil? || @row["Link"].empty?
74
+ return [] unless @row["Link"]
75
+
76
+ [Bib::Uri.new(type: "src", content: @row["Link"])]
77
+ end
78
+
79
+ #
80
+ # Parse abstract
81
+ #
82
+ # @return [Array<RelatonBib::FormattedString>]
83
+ #
84
+ # def parse_abstract
85
+ # return [] unless @spec[:description]
86
+
87
+ # [RelatonBib::FormattedString.new(content: @spec[:description])]
88
+ # end
89
+
90
+ #
91
+ # Parse docidentifier
92
+ #
93
+ # @return [Arra<RelatonBib::DocumentIdentifier>] docidentifier
94
+ #
95
+ def parse_docid
96
+ @errors[:docid] &&= @row[0].nil? || @row[0].empty?
97
+ [Docidentifier.new(type: "3GPP", content: "3GPP #{number}", primary: true)]
98
+ end
99
+
100
+ #
101
+ # Generate number
102
+ #
103
+ # @return [String] number
104
+ #
105
+ def number
106
+ num = "#{doctype_abbr} #{@row[0]}"
107
+ num += ":#{release}" if release
108
+ "#{num}/#{version}"
109
+ end
110
+
111
+ def version
112
+ @row["Version"]
113
+ end
114
+
115
+ def parse_version
116
+ @errors[:version] &&= version.nil? || version.empty?
117
+ [Bib::Version.new(draft: version)]
118
+ end
119
+
120
+ def doctype_abbr
121
+ @row["Is TS"] == "1" ? "TS" : "TR"
122
+ end
123
+
124
+ def release
125
+ @release ||= begin
126
+ r = case @row["WPM Code 2G"]
127
+ when /Release_(\d+)/ then "REL-#{$1}"
128
+ when /PH(\d+)/ then "Ph#{$1}"
129
+ else @row["Release"]
130
+ end
131
+ @errors[:release] &&= r.nil? || r.empty?
132
+ r
133
+ end
134
+ end
135
+
136
+ #
137
+ # Version
138
+ #
139
+ # @return [String] version
140
+ #
141
+ # def version
142
+ # "#{@row[:MAJOR_VERSION_NB]}.#{@row[:TECHNICAL_VERSION_NB]}.#{@row[:EDITORIAL_VERSION_NB]}"
143
+ # end
144
+
145
+ #
146
+ # Parse date
147
+ #
148
+ # @return [Array<RelatonBib::BibliographicDate>] date
149
+ #
150
+ def parse_date
151
+ dates = []
152
+ if @row["Date"]
153
+ on = Date.parse(@row["Date"]).to_s
154
+ dates << Bib::Date.new(type: "published", at: on)
155
+ end
156
+ @errors[:date] &&= dates.empty?
157
+ dates
158
+ end
159
+
160
+ #
161
+ # Parse note
162
+ #
163
+ # @return [RelatonBib::BiblioNoteCollection] notes
164
+ #
165
+ # def parse_note
166
+ # n = []
167
+ # if @specrel && @specrel[:remarks] && @specrel[:remarks] != "."
168
+ # n << RelatonBib::BiblioNote.new(type: "remark", content: @specrel[:remarks])
169
+ # end
170
+ # if @row[:comment] && @row[:comment] != "."
171
+ # n << RelatonBib::BiblioNote.new(type: "comment", content: @row[:comment])
172
+ # end
173
+ # RelatonBib::BiblioNoteCollection.new n
174
+ # end
175
+
176
+ #
177
+ # Prase status
178
+ #
179
+ # @return [RelatnoBib::DocumentStatus, nil] status
180
+ #
181
+ # def parse_status
182
+ # if @specrel && @specrel[:withdrawn] == "1"
183
+ # RelatonBib::DocumentStatus.new stage: "withdrawn"
184
+ # elsif @spec[:"For publication"] == "1"
185
+ # RelatonBib::DocumentStatus.new stage: "published"
186
+ # end
187
+ # end
188
+
189
+ #
190
+ # Create contributors
191
+ #
192
+ # @return [Array<RelatonBib::ContributionInfo>] contributor
193
+ #
194
+ def parse_contributor # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
195
+ name = Bib::TypedLocalizedString.new(content: "3rd Generation Partnership Project")
196
+ abbrev = Bib::LocalizedString.new content: "3GPP"
197
+ org = Bib::Organization.new(name: [name], abbreviation: abbrev, address: [address])
198
+ contribs = [Bib::Contributor.new(organization: org, role: contributor_role)]
199
+ if @row["Last Name"] && @row["Last Name"] != "Vacant"
200
+ role = Bib::Contributor::Role.new type: "author"
201
+ contribs << Bib::Contributor.new(person: person, role: [role])
202
+ end
203
+ @errors[:contributor] &&= contribs.empty?
204
+ contribs + prime_contribs + other_contribs
205
+ end
206
+
207
+ def other_contribs
208
+ secondary = @row["Responsible Secondary"]
209
+ if secondary.nil? || secondary.strip.empty?
210
+ @errors[:editorial_group_contributor_other] &&= true
211
+ return []
212
+ end
213
+
214
+ contribs = secondary.strip.split(", ").map do |wg|
215
+ editorial_group_contributor(wg, "other")
216
+ end
217
+ @errors[:editorial_group_contributor_other] &&= contribs.empty?
218
+ contribs
219
+ end
220
+
221
+ def prime_contribs
222
+ prime = @row["Responsible Primary"]
223
+ if prime.nil? || prime.empty?
224
+ @errors[:editorial_group_contributor_prime] &&= true
225
+ return []
226
+ end
227
+
228
+ @errors[:editorial_group_contributor_prime] &&= false
229
+ [editorial_group_contributor(prime, "prime")]
230
+ end
231
+
232
+ def editorial_group_contributor(wg_name, wg_type)
233
+ Bib::Contributor.new(
234
+ role: [Bib::Contributor::Role.new(
235
+ type: "author",
236
+ description: [Bib::LocalizedMarkedUpString.new(content: "committee")],
237
+ )],
238
+ organization: Bib::Organization.new(
239
+ subdivision: [Bib::Subdivision.new(
240
+ type: "technical-committee",
241
+ subtype: wg_type,
242
+ name: [Bib::TypedLocalizedString.new(content: wg_name)],
243
+ )],
244
+ ),
245
+ )
246
+ end
247
+
248
+ def address
249
+ Bib::Address.new(
250
+ street: ["c/o ETSI 650, route des Lucioles", "3GPP Mobile Competence Centre"],
251
+ postcode: "06921", city: "Sophia Antipolis Cedex", country: "France"
252
+ )
253
+ end
254
+
255
+ def contributor_role
256
+ [Bib::Contributor::Role.new(type: "author"), Bib::Contributor::Role.new(type: "publisher")]
257
+ end
258
+
259
+ def person
260
+ name = Bib::FullName.new(surname: surname, forename: [forename])
261
+ Bib::Person.new(name: name, affiliation: affiliation)
262
+ end
263
+
264
+ def surname
265
+ if @row["Last Name"].nil? || @row["Last Name"].empty?
266
+ @errors[:contributor_person_surname] &&= true
267
+ return nil
268
+ end
269
+
270
+ @errors[:contributor_person_surname] &&= false
271
+ Bib::LocalizedString.new content: @row["Last Name"], language: "en", script: "Latn"
272
+ end
273
+
274
+ def forename
275
+ if @row["First Name"].nil? || @row["First Name"].empty?
276
+ @errors[:contributor_person_forename] &&= true
277
+ return nil
278
+ end
279
+
280
+ @errors[:contributor_person_forename] &&= false
281
+ Bib::FullNameType::Forename.new content: @row["First Name"], language: "en", script: "Latn"
282
+ end
283
+
284
+ def affiliation
285
+ if @row["Organisation"].nil? || @row["Organisation"].empty?
286
+ @errors[:contributor_person_affiliation] &&= true
287
+ return []
288
+ end
289
+
290
+ @errors[:contributor_person_affiliation] &&= false
291
+ name = Bib::TypedLocalizedString.new(content: @row["Organisation"])
292
+ org = Bib::Organization.new(name: [name])
293
+ [Bib::Affiliation.new(organization: org)]
294
+ end
295
+
296
+ def parse_place
297
+ country = Bib::Place::RegionType.new(content: "France", iso: "FR")
298
+ [Bib::Place.new(city: "Sophia Antipolis Cedex", country: [country])]
299
+ end
300
+
301
+ def parse_ext
302
+ Ext.new(
303
+ doctype: parse_doctype,
304
+ flavor: "3gpp",
305
+ radiotechnology: parse_radiotechnology,
306
+ release: parse_release,
307
+ )
308
+ end
309
+
310
+ def parse_doctype
311
+ # type = DOCTYPES[doctype_abbr]
312
+ # Doctype.new(abbreviation: doctype_abbr, content: type)
313
+ Doctype.new(content: doctype_abbr) # 3GPP grammar alloves only TS and TR content
314
+ end
315
+
316
+ #
317
+ # Parse radio technology
318
+ #
319
+ # @return [String] radio technology
320
+ #
321
+ def parse_radiotechnology
322
+ result = case @row["WPM Code 3G"]
323
+ when /5G/ then "5G"
324
+ when /4G/ then "LTE"
325
+ when /3G/ then "3G"
326
+ else @row["WPM Code 2G"] && "2G"
327
+ end
328
+ @errors[:radiotechnology] &&= result.nil?
329
+ result
330
+ end
331
+
332
+ #
333
+ # Parse release
334
+ #
335
+ # @return [Relaton3gpp::Release, nil] release
336
+ #
337
+ def parse_release # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
338
+ unless wmp_code2g || wmp_code3g || stage1_freeze || stage2_freeze ||
339
+ stage3_freeze || close_meeting || project_start || project_end
340
+ return
341
+ end
342
+
343
+ Release.new(
344
+ # version2g: @rel[:version_2g],
345
+ # version3g: @rel[:version_3g],
346
+ # defunct: @rel[:defunct] == "1",
347
+ wpm_code_2g: wmp_code2g,
348
+ wpm_code_3g: wmp_code3g,
349
+ # freeze_meeting: @rel[:"freeze meeting"],
350
+ freeze_stage1_meeting: stage1_freeze,
351
+ freeze_stage2_meeting: stage2_freeze,
352
+ freeze_stage3_meeting: stage3_freeze,
353
+ close_meeting: close_meeting,
354
+ project_start: project_start,
355
+ project_end: project_end,
356
+ )
357
+ end
358
+
359
+ def wmp_code2g
360
+ @errors[:wmp_code_2g] &&= @row["WPM Code 2G"].nil? || @row["WPM Code 2G"].empty?
361
+ @row["WPM Code 2G"]
362
+ end
363
+
364
+ def wmp_code3g
365
+ @errors[:wmp_code_3g] &&= @row["WPM Code 3G"].nil? || @row["WPM Code 3G"].empty?
366
+ @row["WPM Code 3G"]
367
+ end
368
+
369
+ def stage1_freeze
370
+ @errors[:freeze_stage1_meeting] &&= @row["Stage 1 Freeze"].nil? || @row["Stage 1 Freeze"].empty?
371
+ @row["Stage 1 Freeze"]
372
+ end
373
+
374
+ def stage2_freeze
375
+ @errors[:freeze_stage2_meeting] &&= @row["Stage 2 Freeze"].nil? || @row["Stage 2 Freeze"].empty?
376
+ @row["Stage 2 Freeze"]
377
+ end
378
+
379
+ def stage3_freeze
380
+ @errors[:freeze_stage3_meeting] &&= @row["Stage 3 Freeze"].nil? || @row["Stage 3 Freeze"].empty?
381
+ @row["Stage 3 Freeze"]
382
+ end
383
+
384
+ def close_meeting
385
+ @errors[:close_meeting] &&= @row["Close Meeting"].nil? || @row["Close Meeting"].empty?
386
+ @row["Close Meeting"]
387
+ end
388
+
389
+ def project_start
390
+ @errors[:project_start] &&= @row["Project Start"].nil? || @row["Project Start"].empty?
391
+ Date.parse(@row["Project Start"]) if @row["Project Start"]
392
+ end
393
+
394
+ def project_end
395
+ @errors[:project_end] &&= @row["Project End"].nil? || @row["Project End"].empty?
396
+ Date.parse(@row["Project End"]) if @row["Project End"]
397
+ end
398
+ end
399
+ end
400
+ end
@@ -0,0 +1,71 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module ThreeGpp
5
+ class Processor < Relaton::Core::Processor
6
+ attr_reader :idtype
7
+
8
+ def initialize # rubocop:disable Lint/MissingSuper
9
+ @short = :relaton_3gpp
10
+ @prefix = "3GPP"
11
+ @defaultprefix = %r{^3GPP\s}
12
+ @idtype = "3GPP"
13
+ @pubid_flavor = :Tgpp # global prefixes sourced from Pubid::Tgpp.prefixes
14
+ @datasets = %w[status-smg-3GPP status-smg-3GPP-force]
15
+ end
16
+
17
+ # @param code [String]
18
+ # @param date [String, NilClass] year
19
+ # @param opts [Hash]
20
+ # @return [RelatonBib::BibliographicItem]
21
+ def get(code, date, opts)
22
+ require_relative "../3gpp"
23
+ Bibliography.get(code, date, opts)
24
+ end
25
+
26
+ #
27
+ # Fetch all the documents from http://xml2rfc.tools.ietf.org/public/rfc/bibxml-3gpp-new/
28
+ #
29
+ # @param [String] source source name
30
+ # @param [Hash] opts
31
+ # @option opts [String] :output directory to output documents
32
+ # @option opts [String] :format
33
+ #
34
+ def fetch_data(source, opts)
35
+ require_relative "data_fetcher"
36
+ DataFetcher.fetch(source, **opts)
37
+ end
38
+
39
+ # @param xml [String]
40
+ # @return [RelatonBib::BibliographicItem]
41
+ def from_xml(xml)
42
+ require_relative "../3gpp"
43
+ Item.from_xml xml
44
+ end
45
+
46
+ # @param yaml [String]
47
+ # @return [Relaton::ThreeGpp::Item]
48
+ def from_yaml(yaml)
49
+ require_relative "../3gpp"
50
+ Item.from_yaml(yaml)
51
+ end
52
+
53
+ # Returns hash of XML grammar
54
+ # @return [String]
55
+ def grammar_hash
56
+ require_relative "../3gpp"
57
+ @grammar_hash ||= ThreeGpp.grammar_hash
58
+ end
59
+
60
+ #
61
+ # Remove index file
62
+ #
63
+ def remove_index_file
64
+ require_relative "../3gpp"
65
+ Relaton::Index.find_or_create(
66
+ "3GPP", url: true, file: "#{INDEXFILE}.yaml"
67
+ ).remove_file
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,34 @@
1
+ module Relaton
2
+ module ThreeGpp
3
+ class Release < Lutaml::Model::Serializable
4
+ attribute :version2g, :string
5
+ attribute :version3g, :string
6
+ attribute :defunct, :boolean
7
+ attribute :wpm_code_2g, :string
8
+ attribute :wpm_code_3g, :string
9
+ attribute :freeze_meeting, :string
10
+ attribute :freeze_stage1_meeting, :string
11
+ attribute :freeze_stage2_meeting, :string
12
+ attribute :freeze_stage3_meeting, :string
13
+ attribute :close_meeting, :string
14
+ attribute :project_start, :date
15
+ attribute :project_end, :date
16
+
17
+ xml do
18
+ root "release"
19
+ map_element "version2G", to: :version2g
20
+ map_element "version3G", to: :version3g
21
+ map_element "defunct", to: :defunct
22
+ map_element "wpm-code-2G", to: :wpm_code_2g
23
+ map_element "wpm-code-3G", to: :wpm_code_3g
24
+ map_element "freeze-meeting", to: :freeze_meeting
25
+ map_element "freeze-stage1-meeting", to: :freeze_stage1_meeting
26
+ map_element "freeze-stage2-meeting", to: :freeze_stage2_meeting
27
+ map_element "freeze-stage3-meeting", to: :freeze_stage3_meeting
28
+ map_element "close-meeting", to: :close_meeting
29
+ map_element "project-start", to: :project_start
30
+ map_element "project-end", to: :project_end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module ThreeGpp
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-3gpp".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ require "net/http"
2
+ # pubid loads with the flavor, for the ::Pubid::Tgpp::Identifier that the
3
+ # index code names. Processor#remove_index_file names no pubid class: the
4
+ # delete never reads the index (see lib/relaton/index/CLAUDE.md).
5
+ require "pubid"
6
+ require "relaton/index"
7
+ require "relaton/core"
8
+ require "relaton/bib"
9
+ require_relative "version"
10
+ require_relative "3gpp/util"
11
+ require_relative "3gpp/item"
12
+ require_relative "3gpp/bibitem"
13
+ require_relative "3gpp/bibdata"
14
+ require_relative "3gpp/bibliography"
15
+
16
+ module Relaton
17
+ module ThreeGpp
18
+ INDEXFILE = "index-v2".freeze
19
+
20
+ # Returns hash of XML reammar
21
+ # @return [String]
22
+ def self.grammar_hash
23
+ # gem_path = File.expand_path "..", __dir__
24
+ # grammars_path = File.join gem_path, "grammars", "*"
25
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
26
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Adobe
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 Adobe
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,92 @@
1
+ require "net/http"
2
+
3
+ module Relaton
4
+ module Adobe
5
+ # Retrieval front-end for the Adobe flavor. Parses a reference with
6
+ # Pubid::Adobe, looks it up in the `relaton-data-adobe` index, fetches the
7
+ # matching YAML record, and deserializes it into a Relaton::Adobe::Item.
8
+ # Modelled on Relaton::Oiml::Bibliography (pubid-backed, index via
9
+ # `pubid_class`); adapted because Adobe identifiers carry no edition
10
+ # year/language, so there is no per-edition selection — each reference maps
11
+ # to a single record.
12
+ module Bibliography
13
+ ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-adobe/main/".freeze
14
+
15
+ class << self
16
+ # Search for an Adobe publication by its identifier.
17
+ #
18
+ # @param text [String, Pubid::Adobe::Identifier] the Adobe reference to
19
+ # look up (e.g. "Adobe Technical Note #5014", "ATN5014",
20
+ # "Adobe Publication adobe-glyph-list")
21
+ # @param _year [String, nil] unused (Adobe ids carry no edition year)
22
+ # @param _opts [Hash] options (unused)
23
+ # @return [Relaton::Adobe::Item, nil]
24
+ def search(text, _year = nil, _opts = {})
25
+ pubid = pubid_for(text) or return
26
+ Util.info "Fetching from Relaton repository ...", key: pubid.to_s
27
+ # Tech notes narrow by number via binary search; publications have no
28
+ # number, so pass nil to scan (Relaton::Index::Type#search returns all
29
+ # rows for a nil id, then applies the block).
30
+ query = pubid.root.number ? pubid : nil
31
+ row = index.search(query) { |r| pubid_match?(r[:id], pubid) }.first
32
+ unless row
33
+ Util.info "Not found.", key: pubid.to_s
34
+ return
35
+ end
36
+
37
+ uri = URI("#{ENDPOINT}#{row[:file]}")
38
+ resp = Net::HTTP.get_response uri
39
+ unless resp.code == "200"
40
+ raise Relaton::RequestError, "Could not access #{uri}: HTTP #{resp.code}"
41
+ end
42
+
43
+ item = Relaton::Adobe::Item.from_yaml resp.body
44
+ Util.info "Found: `#{item.docidentifier.first&.content}`", key: pubid.to_s
45
+ item.tap { |i| i.fetched = Date.today.to_s }
46
+ rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
47
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
48
+ Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
49
+ Errno::ETIMEDOUT => e
50
+ raise Relaton::RequestError, "Could not access #{uri}: #{e.message}"
51
+ end
52
+
53
+ def get(ref, year = nil, opts = {})
54
+ search(ref, year, opts)
55
+ end
56
+
57
+ private
58
+
59
+ # Coerce a reference to a Pubid::Adobe identifier. A non-canonical or
60
+ # non-Adobe string (e.g. a title-cased "Adobe Glyph List") is a graceful
61
+ # miss (logged, returns nil) rather than a raised Parslet error — the
62
+ # ref reached here only because it matched the flavor's prefix regex.
63
+ def pubid_for(text)
64
+ return text unless text.is_a?(String)
65
+
66
+ ::Pubid::Adobe.parse(text)
67
+ rescue StandardError
68
+ Util.info "Not found.", key: text
69
+ nil
70
+ end
71
+
72
+ def index
73
+ Relaton::Index.find_or_create(
74
+ :adobe,
75
+ url: "#{ENDPOINT}#{INDEXFILE}.zip",
76
+ file: "#{INDEXFILE}.yaml",
77
+ pubid_class: ::Pubid::Adobe::Identifier,
78
+ )
79
+ end
80
+
81
+ # Identity match on the human render: pubid renders a tech note as
82
+ # `Adobe TN <n>` (dropping the filename slug, so `ATN5014` and
83
+ # `Adobe Technical Note #5014` both match a record stored with its slug)
84
+ # and a publication as `Adobe Publication <slug>` including its version.
85
+ # Both `row_id` and `query` are Pubid::Adobe identifiers.
86
+ def pubid_match?(row_id, query)
87
+ row_id.to_s == query.to_s
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end