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,79 @@
1
+ module Relaton
2
+ module Ietf
3
+ class ProcessingInstructions < Lutaml::Model::Serializable
4
+ attribute :artworkdelimiter, :string
5
+ attribute :artworklines, :string
6
+ attribute :authorship, :string
7
+ attribute :autobreaks, :string
8
+ attribute :background, :string
9
+ attribute :colonspace, :string
10
+ attribute :comments, :string
11
+ attribute :docmapping, :string
12
+ attribute :editing, :string
13
+ attribute :emoticonic, :string
14
+ attribute :footer, :string
15
+ attribute :header, :string
16
+ attribute :inline, :string
17
+ attribute :iprnotified, :string
18
+ attribute :linkmailto, :string
19
+ attribute :linefile, :string
20
+ attribute :notedraftinprogress, :string
21
+ attribute :private, :string
22
+ attribute :refparent, :string
23
+ attribute :rfcedstyle, :string
24
+ attribute :slides, :string
25
+ attribute :text_list_symbols, :string
26
+ attribute :tocappendix, :string
27
+ attribute :tocindent, :string
28
+ attribute :tocnarrow, :string
29
+ attribute :tocompact, :string
30
+ attribute :topblock, :string
31
+ attribute :useobject, :string
32
+ attribute :strict, :string
33
+ attribute :compact, :string
34
+ attribute :subcompact, :string
35
+ attribute :tocinclude, :string
36
+ attribute :tocdepth, :string
37
+ attribute :symrefs, :string
38
+ attribute :sortrefs, :string
39
+
40
+ xml do
41
+ map_element "artworkdelimiter", to: :artworkdelimiter
42
+ map_element "artworklines", to: :artworklines
43
+ map_element "authorship", to: :authorship
44
+ map_element "autobreaks", to: :autobreaks
45
+ map_element "background", to: :background
46
+ map_element "colonspace", to: :colonspace
47
+ map_element "comments", to: :comments
48
+ map_element "docmapping", to: :docmapping
49
+ map_element "editing", to: :editing
50
+ map_element "emoticonic", to: :emoticonic
51
+ map_element "footer", to: :footer
52
+ map_element "header", to: :header
53
+ map_element "inline", to: :inline
54
+ map_element "iprnotified", to: :iprnotified
55
+ map_element "linkmailto", to: :linkmailto
56
+ map_element "linefile", to: :linefile
57
+ map_element "notedraftinprogress", to: :notedraftinprogress
58
+ map_element "private", to: :private
59
+ map_element "refparent", to: :refparent
60
+ map_element "rfcedstyle", to: :rfcedstyle
61
+ map_element "slides", to: :slides
62
+ map_element "text-list-symbols", to: :text_list_symbols
63
+ map_element "tocappendix", to: :tocappendix
64
+ map_element "tocindent", to: :tocindent
65
+ map_element "tocnarrow", to: :tocnarrow
66
+ map_element "tocompact", to: :tocompact
67
+ map_element "topblock", to: :topblock
68
+ map_element "useobject", to: :useobject
69
+ map_element "strict", to: :strict
70
+ map_element "compact", to: :compact
71
+ map_element "subcompact", to: :subcompact
72
+ map_element "tocinclude", to: :tocinclude
73
+ map_element "tocdepth", to: :tocdepth
74
+ map_element "symrefs", to: :symrefs
75
+ map_element "sortrefs", to: :sortrefs
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,68 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Ietf
5
+ class Processor < Relaton::Core::Processor
6
+ def initialize # rubocop:disable Lint/MissingSuper
7
+ @short = :relaton_ietf
8
+ @prefix = "IETF"
9
+ @defaultprefix = /^((IETF|RFC|BCP|FYI|STD)\s|I-D[.\s])/
10
+ @idtype = "IETF"
11
+ @datasets = %w[ietf-rfcsubseries ietf-internet-drafts ietf-rfc-entries]
12
+ end
13
+
14
+ # @param code [String]
15
+ # @param date [String, nil] year
16
+ # @param opts [Hash]
17
+ # @return [Relaton::Ietf::ItemData, nil]
18
+ def get(code, date, opts)
19
+ require_relative "../ietf"
20
+ Bibliography.get(code, date, opts)
21
+ end
22
+
23
+ #
24
+ # Fetch all the documents from https://www.rfc-editor.org/rfc-index.xml
25
+ #
26
+ # @param [String] source source name
27
+ # @param [Hash] opts
28
+ # @option opts [String] :output directory to output documents
29
+ # @option opts [String] :format
30
+ #
31
+ def fetch_data(source, opts)
32
+ require_relative "data_fetcher"
33
+ DataFetcher.fetch(source, **opts)
34
+ end
35
+
36
+ # @param xml [String]
37
+ # @return [Relaton::Ietf::ItemData]
38
+ def from_xml(xml)
39
+ require_relative "../ietf"
40
+ Item.from_xml xml
41
+ end
42
+
43
+ # @param yaml [String]
44
+ # @return [Relaton::Ietf::ItemData]
45
+ def from_yaml(yaml)
46
+ require_relative "../ietf"
47
+ Item.from_yaml yaml
48
+ end
49
+
50
+ # Returns hash of XML grammar
51
+ # @return [String]
52
+ def grammar_hash
53
+ require_relative "../ietf"
54
+ @grammar_hash ||= ::Relaton::Ietf.grammar_hash
55
+ end
56
+
57
+ #
58
+ # Remove index file
59
+ #
60
+ def remove_index_file
61
+ require_relative "../ietf"
62
+ Relaton::Index.find_or_create(:RFC, url: true, file: "#{INDEXFILE}.yaml").remove_file
63
+ Relaton::Index.find_or_create(:RSS, url: true, file: "#{INDEXFILE}.yaml").remove_file
64
+ Relaton::Index.find_or_create(:IDS, url: true, file: "#{INDEXFILE}.yaml").remove_file
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,9 @@
1
+ require_relative "item_base"
2
+
3
+ module Relaton
4
+ module Ietf
5
+ class Relation < Bib::Relation
6
+ attribute :bibitem, ItemBase
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rfc_index_namespace"
4
+
5
+ module Relaton
6
+ module Ietf
7
+ module Rfc
8
+ class Abstract < Lutaml::Model::Serializable
9
+ attribute :p, :string, collection: true
10
+
11
+ xml do
12
+ root "abstract"
13
+ namespace RfcIndexNamespace
14
+ map_element "p", to: :p
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rfc_index_namespace"
4
+
5
+ module Relaton
6
+ module Ietf
7
+ module Rfc
8
+ class Author < Lutaml::Model::Serializable
9
+ attribute :name, :string
10
+ attribute :role_title, :string
11
+
12
+ xml do
13
+ root "author"
14
+ namespace RfcIndexNamespace
15
+ map_element "name", to: :name
16
+ map_element "title", to: :role_title
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,410 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cgi"
4
+ require_relative "rfc_index_namespace"
5
+ require_relative "is_also"
6
+ require_relative "author"
7
+ require_relative "entry_date"
8
+ require_relative "format"
9
+ require_relative "keywords"
10
+ require_relative "abstract"
11
+ require_relative "../bibxml_parser"
12
+
13
+ module Relaton
14
+ module Ietf
15
+ module Rfc
16
+ # Model for index entries (bcp-entry, fyi-entry, std-entry, rfc-entry)
17
+ class Entry < Lutaml::Model::Serializable # rubocop:disable Metrics/ClassLength
18
+ TITLE_PREFIXES = {
19
+ "bcp" => "Best Current Practice",
20
+ "fyi" => "For Your Information",
21
+ "std" => "Internet Standard technical specification",
22
+ }.freeze
23
+
24
+ # Common attributes
25
+ attribute :doc_id, :string
26
+ attribute :title, :string
27
+ attribute :is_also, IsAlso
28
+ attribute :stream, :string
29
+
30
+ # rfc-entry specific attributes
31
+ attribute :author, Author, collection: true
32
+ attribute :date, EntryDate, collection: true
33
+ attribute :format, Format
34
+ attribute :page_count, :integer
35
+ attribute :keywords, Keywords
36
+ attribute :abstract, Abstract
37
+ attribute :obsoletes, IsAlso
38
+ attribute :obsoleted_by, IsAlso
39
+ attribute :updates, IsAlso
40
+ attribute :updated_by, IsAlso
41
+ attribute :see_also, IsAlso
42
+ attribute :current_status, :string
43
+ attribute :publication_status, :string
44
+ attribute :wg_acronym, :string
45
+ attribute :errata_url, :string
46
+ attribute :doi, :string
47
+
48
+ xml do
49
+ root "bcp-entry"
50
+ namespace RfcIndexNamespace
51
+
52
+ map_element "doc-id", to: :doc_id
53
+ map_element "title", to: :title
54
+ map_element "is-also", to: :is_also
55
+ map_element "stream", to: :stream
56
+ map_element "author", to: :author
57
+ map_element "date", to: :date
58
+ map_element "format", to: :format
59
+ map_element "page-count", to: :page_count
60
+ map_element "keywords", to: :keywords
61
+ map_element "abstract", to: :abstract
62
+ map_element "obsoletes", to: :obsoletes
63
+ map_element "obsoleted-by", to: :obsoleted_by
64
+ map_element "updates", to: :updates
65
+ map_element "updated-by", to: :updated_by
66
+ map_element "see-also", to: :see_also
67
+ map_element "current-status", to: :current_status
68
+ map_element "publication-status", to: :publication_status
69
+ map_element "wg_acronym", to: :wg_acronym
70
+ map_element "errata-url", to: :errata_url
71
+ map_element "doi", to: :doi
72
+ end
73
+
74
+ #
75
+ # Determine entry type from doc-id prefix
76
+ #
77
+ # @return [String, nil] entry type (bcp, fyi, std, rfc)
78
+ #
79
+ def entry_type
80
+ doc_id&.downcase&.match(/^(bcp|fyi|std|rfc)/)&.[](1)
81
+ end
82
+
83
+ #
84
+ # Check if this is an rfc-entry
85
+ #
86
+ # @return [Boolean]
87
+ #
88
+ def rfc_entry?
89
+ entry_type == "rfc"
90
+ end
91
+
92
+ #
93
+ # Extract short number from doc-id (e.g., "BCP0001" -> "1")
94
+ #
95
+ # @return [String] short number without leading zeros
96
+ #
97
+ def shortnum
98
+ doc_id&.match(/\d+$/)&.to_s&.sub(/^0+/, "") || ""
99
+ end
100
+
101
+ #
102
+ # Generate public identifier (e.g., "BCP 1")
103
+ #
104
+ # @return [String] public identifier
105
+ #
106
+ def pub_id
107
+ "#{entry_type&.upcase} #{shortnum}"
108
+ end
109
+
110
+ #
111
+ # Generate anchor string (e.g., "BCP1")
112
+ #
113
+ # @return [String] anchor
114
+ #
115
+ def anchor
116
+ "#{entry_type&.upcase}#{shortnum}"
117
+ end
118
+
119
+ #
120
+ # Check if this entry has is-also references
121
+ #
122
+ # @return [Boolean]
123
+ #
124
+ def has_is_also?
125
+ is_also&.doc_id&.any? || false
126
+ end
127
+
128
+ #
129
+ # Convert to Relaton::Ietf::ItemData
130
+ #
131
+ # @param rfc_index [Hash{String => Entry}, nil] lookup of RFC entries by doc-id
132
+ # @return [Relaton::Ietf::ItemData, nil]
133
+ #
134
+ def to_item(rfc_index = nil, wg_names: {})
135
+ if rfc_entry?
136
+ to_rfc_item(wg_names: wg_names)
137
+ else
138
+ to_subseries_item(rfc_index, wg_names: wg_names)
139
+ end
140
+ end
141
+
142
+ def to_rfc_item(wg_names: {}) # rubocop:disable Metrics/MethodLength
143
+ args = {
144
+ type: "standard",
145
+ language: ["en"],
146
+ script: ["Latn"],
147
+ docidentifier: build_rfc_docid,
148
+ docnumber: doc_id,
149
+ title: build_rfc_title,
150
+ source: build_rfc_link,
151
+ date: build_rfc_date,
152
+ contributor: build_rfc_contributor(wg_names),
153
+ status: build_rfc_status,
154
+ keyword: build_rfc_keyword,
155
+ abstract: build_rfc_abstract,
156
+ relation: build_rfc_relation,
157
+ series: build_rfc_series,
158
+ ext: build_rfc_ext,
159
+ }
160
+ ItemData.new(**args)
161
+ end
162
+
163
+ private
164
+
165
+ def to_subseries_item(rfc_index = nil, wg_names: {})
166
+ return unless doc_id && has_is_also?
167
+
168
+ ItemData.new(
169
+ type: "standard",
170
+ docnumber: doc_id,
171
+ title: build_title,
172
+ docidentifier: build_docid,
173
+ language: ["en"],
174
+ script: ["Latn"],
175
+ source: build_link,
176
+ formattedref: build_formattedref,
177
+ relation: build_relations(rfc_index, wg_names: wg_names),
178
+ series: build_series,
179
+ ext: Ext.new(doctype: Doctype.new(content: "rfc"), stream: stream, flavor: "ietf"),
180
+ )
181
+ end
182
+
183
+ # --- Subseries builders ---
184
+
185
+ def build_title
186
+ type = entry_type
187
+ return [] unless type
188
+
189
+ prefix = TITLE_PREFIXES[type]
190
+ content = "#{prefix} #{shortnum}"
191
+ [Bib::Title.new(content: content, language: "en", script: "Latn")]
192
+ end
193
+
194
+ def build_docid
195
+ [Bib::Docidentifier.new(type: "IETF", content: pub_id, primary: true)]
196
+ end
197
+
198
+ def build_link
199
+ type = entry_type
200
+ return [] unless type
201
+
202
+ url = "https://www.rfc-editor.org/info/#{type}#{shortnum}"
203
+ [Bib::Uri.new(type: "src", content: url)]
204
+ end
205
+
206
+ def build_formattedref
207
+ Bib::Formattedref.new(content: anchor)
208
+ end
209
+
210
+ def build_relations(rfc_index = nil, wg_names: {})
211
+ return [] unless is_also&.doc_id
212
+
213
+ is_also.doc_id.map do |ref|
214
+ rfc_entry = rfc_index&.[](ref)
215
+ bibitem = rfc_entry ? rfc_entry.to_rfc_item(wg_names: wg_names) : build_minimal_bibitem(ref)
216
+ Relaton::Ietf::Relation.new(type: "includes", bibitem: bibitem)
217
+ end.compact
218
+ end
219
+
220
+ def build_minimal_bibitem(ref)
221
+ id = ref.sub(/^([A-Z]+)0*(\d+)$/, '\1 \2')
222
+ docid = Bib::Docidentifier.new(type: "IETF", content: id, primary: true)
223
+ ItemData.new(formattedref: Bib::Formattedref.new(content: ref), docidentifier: [docid])
224
+ end
225
+
226
+ def build_series
227
+ return [] unless stream
228
+
229
+ t = Bib::Title.new(content: stream)
230
+ [Bib::Series.new(type: "stream", title: [t])]
231
+ end
232
+
233
+ # --- RFC entry builders ---
234
+
235
+ def build_rfc_docid
236
+ ids = [Bib::Docidentifier.new(type: "IETF", content: "RFC #{shortnum}", primary: true)]
237
+ ids << Bib::Docidentifier.new(type: "DOI", content: doi) if doi
238
+ ids
239
+ end
240
+
241
+ def build_rfc_title
242
+ [Bib::Title.new(content: title, type: "main")]
243
+ end
244
+
245
+ def build_rfc_link
246
+ [Bib::Uri.new(type: "src", content: "https://www.rfc-editor.org/info/rfc#{shortnum}")]
247
+ end
248
+
249
+ def build_rfc_date
250
+ (date || []).map do |d|
251
+ month_num = ::Date::MONTHNAMES.index(d.month).to_s.rjust(2, "0")
252
+ date_str = "#{d.year}-#{month_num}"
253
+ Bib::Date.new(at: date_str, type: "published")
254
+ end
255
+ end
256
+
257
+ def build_rfc_contributor(wg_names = {}) # rubocop:disable Metrics/MethodLength
258
+ contribs = (author || []).map do |a|
259
+ entity = full_name_org(a.name)
260
+ unless entity
261
+ fname = parse_person_name(a.name)
262
+ entity = Bib::Person.new(name: fname)
263
+ end
264
+ role_type = a.role_title&.downcase || "author"
265
+ Bib::Contributor.new(**entity_from(entity), role: [Bib::Contributor::Role.new(type: role_type)])
266
+ end
267
+ contribs << org_contributor("RFC Publisher", "publisher")
268
+ contribs << org_contributor("RFC Series", "authorizer")
269
+ committee = build_committee_contributor(wg_names)
270
+ contribs << committee if committee
271
+ contribs
272
+ end
273
+
274
+ def entity_from(entity)
275
+ if entity.is_a?(Bib::Organization)
276
+ { organization: entity }
277
+ else
278
+ { person: entity }
279
+ end
280
+ end
281
+
282
+ def org_contributor(org_name, role_type)
283
+ org = Ietf::BibXMLParser.build_org(nil, org_name)
284
+ Bib::Contributor.new(organization: org, role: [Bib::Contributor::Role.new(type: role_type)])
285
+ end
286
+
287
+ def full_name_org(name)
288
+ Ietf::BibXMLParser.full_name_org(name)
289
+ end
290
+
291
+ def parse_person_name(name) # rubocop:disable Metrics/MethodLength
292
+ surname, initials, forename = Ietf::BibXMLParser.parse_surname_initials(name, nil, nil)
293
+ args = {
294
+ completename: Bib::LocalizedString.new(content: name, language: "en", script: "Latn"),
295
+ surname: Bib::LocalizedString.new(content: surname, language: "en", script: "Latn"),
296
+ }
297
+ args[:formatted_initials] = Bib::LocalizedString.new(content: initials, language: "en", script: "Latn") if initials
298
+ forenames = []
299
+ if forename
300
+ forenames << Bib::FullNameType::Forename.new(content: forename, language: "en", script: "Latn")
301
+ end
302
+ if initials
303
+ initials.split(/\.-?\s?|\s/).each do |i|
304
+ forenames << Bib::FullNameType::Forename.new(initial: i, language: "en", script: "Latn")
305
+ end
306
+ end
307
+ args[:forename] = forenames
308
+ Bib::FullName.new(**args)
309
+ end
310
+
311
+ def build_rfc_keyword
312
+ (keywords&.kw || []).map do |kw|
313
+ vocab = Bib::LocalizedString.new(content: kw)
314
+ Bib::Keyword.new(vocab: vocab)
315
+ end
316
+ end
317
+
318
+ def build_rfc_abstract
319
+ return [] unless abstract&.p&.any?
320
+
321
+ content = abstract.p.map { |para| "<p>#{CGI.escapeHTML(para.strip)}</p>" }.join
322
+ [Bib::Abstract.new(content: content, language: "en", script: "Latn")]
323
+ end
324
+
325
+ def build_rfc_relation
326
+ rels = []
327
+ if updates&.doc_id
328
+ updates.doc_id.each do |ref|
329
+ rels << build_rfc_doc_relation(ref, "updates")
330
+ end
331
+ end
332
+ if obsoleted_by&.doc_id
333
+ obsoleted_by.doc_id.each do |ref|
334
+ rels << build_rfc_doc_relation(ref, "obsoletedBy")
335
+ end
336
+ end
337
+ rels
338
+ end
339
+
340
+ def build_rfc_doc_relation(ref, type)
341
+ docid = Bib::Docidentifier.new(type: "IETF", content: ref, primary: true)
342
+ bibitem = ItemData.new(formattedref: Bib::Formattedref.new(content: ref), docidentifier: [docid])
343
+ Relaton::Ietf::Relation.new(type: type, bibitem: bibitem)
344
+ end
345
+
346
+ def build_rfc_status
347
+ return unless current_status
348
+
349
+ Bib::Status.new(stage: Bib::Status::Stage.new(content: current_status))
350
+ end
351
+
352
+ def build_rfc_series
353
+ series = build_rfc_is_also_series
354
+ series << Bib::Series.new(title: [Bib::Title.new(content: "RFC")], number: shortnum)
355
+ series + build_rfc_stream_series
356
+ end
357
+
358
+ def build_rfc_is_also_series
359
+ return [] unless is_also&.doc_id
360
+
361
+ is_also.doc_id.map do |s|
362
+ /^(?<name>\D+)(?<num>\d+)/ =~ s
363
+ t = Bib::Title.new(content: name)
364
+ Bib::Series.new(title: [t], number: num.gsub(/^0+/, ""))
365
+ end
366
+ end
367
+
368
+ def build_rfc_stream_series
369
+ return [] unless stream
370
+
371
+ t = Bib::Title.new(content: stream)
372
+ [Bib::Series.new(type: "stream", title: [t])]
373
+ end
374
+
375
+ STREAM_ORGS = {
376
+ "IETF" => ["IETF", "Internet Engineering Task Force"],
377
+ "IRTF" => ["IRTF", "Internet Research Task Force"],
378
+ "IAB" => ["IAB", "Internet Architecture Board"],
379
+ }.freeze
380
+
381
+ def build_rfc_ext
382
+ Ext.new(doctype: Doctype.new(content: "rfc"), stream: stream, flavor: "ietf")
383
+ end
384
+
385
+ def build_committee_contributor(wg_names = {})
386
+ return if wg_acronym.nil? || wg_acronym == "NON WORKING GROUP"
387
+
388
+ abbr, name = STREAM_ORGS[stream]
389
+ org = if abbr
390
+ Ietf::BibXMLParser.build_org(abbr, name)
391
+ else
392
+ Ietf::BibXMLParser.build_org(nil, stream || "IETF")
393
+ end
394
+ full_name = wg_names[wg_acronym] || wg_acronym
395
+ subdivision = Bib::Subdivision.new(
396
+ type: "workgroup",
397
+ name: [Bib::TypedLocalizedString.new(content: full_name)],
398
+ identifier: [Bib::OrganizationType::Identifier.new(content: wg_acronym)],
399
+ )
400
+ org.subdivision = [subdivision]
401
+ role = Bib::Contributor::Role.new(
402
+ type: "author",
403
+ description: [Bib::LocalizedMarkedUpString.new(content: "committee")],
404
+ )
405
+ Bib::Contributor.new(organization: org, role: [role])
406
+ end
407
+ end
408
+ end
409
+ end
410
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rfc_index_namespace"
4
+
5
+ module Relaton
6
+ module Ietf
7
+ module Rfc
8
+ class EntryDate < Lutaml::Model::Serializable
9
+ attribute :month, :string
10
+ attribute :year, :string
11
+
12
+ xml do
13
+ root "date"
14
+ namespace RfcIndexNamespace
15
+ map_element "month", to: :month
16
+ map_element "year", to: :year
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rfc_index_namespace"
4
+
5
+ module Relaton
6
+ module Ietf
7
+ module Rfc
8
+ class Format < Lutaml::Model::Serializable
9
+ attribute :file_format, :string, collection: true
10
+
11
+ xml do
12
+ root "format"
13
+ namespace RfcIndexNamespace
14
+ map_element "file-format", to: :file_format
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rfc_index_namespace"
4
+ require_relative "entry"
5
+
6
+ module Relaton
7
+ module Ietf
8
+ module Rfc
9
+ # Model for the root <rfc-index> element
10
+ class Index < Lutaml::Model::Serializable
11
+ attribute :bcp_entries, Entry, collection: true
12
+ attribute :fyi_entries, Entry, collection: true
13
+ attribute :std_entries, Entry, collection: true
14
+ attribute :rfc_entries, Entry, collection: true
15
+
16
+ xml do
17
+ root "rfc-index"
18
+ namespace RfcIndexNamespace
19
+
20
+ map_element "bcp-entry", to: :bcp_entries
21
+ map_element "fyi-entry", to: :fyi_entries
22
+ map_element "std-entry", to: :std_entries
23
+ map_element "rfc-entry", to: :rfc_entries
24
+ end
25
+
26
+ #
27
+ # Get all subseries entries
28
+ #
29
+ # @return [Array<Entry>]
30
+ #
31
+ def subseries_entries
32
+ (bcp_entries || []) + (fyi_entries || []) + (std_entries || [])
33
+ end
34
+
35
+ #
36
+ # Get entries that have is-also references (can be converted to items)
37
+ #
38
+ # @return [Array<Entry>]
39
+ #
40
+ def parseable_entries
41
+ subseries_entries.select(&:has_is_also?)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end