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,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,72 @@
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(:IETF, url: true, file: "#{INDEXFILE}.yaml").remove_file
63
+ # Also clear the three per-type caches a previously released relaton
64
+ # left in ~/.relaton; nothing writes them now, so without this they
65
+ # would sit there forever, unreachable by `relaton clear`.
66
+ %i[RFC RSS IDS].each do |type|
67
+ Relaton::Index.find_or_create(type, url: true, file: "index-v1.yaml").remove_file
68
+ end
69
+ end
70
+ end
71
+ end
72
+ 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,446 @@
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
+ # Normalise a doc-id for constituent lookup: fold case and strip
130
+ # whitespace and dots.
131
+ #
132
+ # Relation targets and the docids they reference disagree on both across
133
+ # the published corpus (`dyndNS` vs `dyndns`), which leaves records
134
+ # undated — and, in `build_relations`, silently downgrades a full
135
+ # constituent bibitem to a minimal one — under a strict lookup. Both
136
+ # sides go through this: the caller keys its index by it, `Entry` looks
137
+ # up by it.
138
+ #
139
+ # @param id [String, nil]
140
+ # @return [String]
141
+ #
142
+ def self.squish(id)
143
+ id.to_s.gsub(/[\s.]/, "").downcase
144
+ end
145
+
146
+ #
147
+ # Convert to Relaton::Ietf::ItemData
148
+ #
149
+ # @param rfc_index [Hash{String => Entry}, nil] lookup of RFC entries,
150
+ # keyed by `Entry.squish(doc_id)` — see that method for why
151
+ # @return [Relaton::Ietf::ItemData, nil]
152
+ #
153
+ def to_item(rfc_index = nil, wg_names: {})
154
+ if rfc_entry?
155
+ to_rfc_item(wg_names: wg_names)
156
+ else
157
+ to_subseries_item(rfc_index, wg_names: wg_names)
158
+ end
159
+ end
160
+
161
+ def to_rfc_item(wg_names: {}) # rubocop:disable Metrics/MethodLength
162
+ args = {
163
+ type: "standard",
164
+ language: ["en"],
165
+ script: ["Latn"],
166
+ docidentifier: build_rfc_docid,
167
+ docnumber: doc_id,
168
+ title: build_rfc_title,
169
+ source: build_rfc_link,
170
+ date: build_rfc_date,
171
+ contributor: build_rfc_contributor(wg_names),
172
+ status: build_rfc_status,
173
+ keyword: build_rfc_keyword,
174
+ abstract: build_rfc_abstract,
175
+ relation: build_rfc_relation,
176
+ series: build_rfc_series,
177
+ ext: build_rfc_ext,
178
+ }
179
+ ItemData.new(**args)
180
+ end
181
+
182
+ private
183
+
184
+ def to_subseries_item(rfc_index = nil, wg_names: {})
185
+ return unless doc_id && has_is_also?
186
+
187
+ ItemData.new(
188
+ type: "standard",
189
+ docnumber: doc_id,
190
+ title: build_title,
191
+ docidentifier: build_docid,
192
+ language: ["en"],
193
+ script: ["Latn"],
194
+ source: build_link,
195
+ formattedref: build_formattedref,
196
+ date: build_subseries_date(rfc_index),
197
+ relation: build_relations(rfc_index, wg_names: wg_names),
198
+ series: build_series,
199
+ ext: Ext.new(doctype: Doctype.new(content: "rfc"), stream: stream, flavor: "ietf"),
200
+ )
201
+ end
202
+
203
+ # --- Subseries builders ---
204
+
205
+ def build_title
206
+ type = entry_type
207
+ return [] unless type
208
+
209
+ prefix = TITLE_PREFIXES[type]
210
+ content = "#{prefix} #{shortnum}"
211
+ [Bib::Title.new(content: content, language: "en", script: "Latn")]
212
+ end
213
+
214
+ def build_docid
215
+ [Bib::Docidentifier.new(type: "IETF", content: pub_id, primary: true)]
216
+ end
217
+
218
+ def build_link
219
+ type = entry_type
220
+ return [] unless type
221
+
222
+ url = "https://www.rfc-editor.org/info/#{type}#{shortnum}"
223
+ [Bib::Uri.new(type: "src", content: url)]
224
+ end
225
+
226
+ def build_formattedref
227
+ Bib::Formattedref.new(content: anchor)
228
+ end
229
+
230
+ def build_relations(rfc_index = nil, wg_names: {})
231
+ return [] unless is_also&.doc_id
232
+
233
+ is_also.doc_id.map do |ref|
234
+ rfc_entry = rfc_index&.[](Entry.squish(ref))
235
+ bibitem = rfc_entry ? rfc_entry.to_rfc_item(wg_names: wg_names) : build_minimal_bibitem(ref)
236
+ Relaton::Ietf::Relation.new(type: "includes", bibitem: bibitem)
237
+ end.compact
238
+ end
239
+
240
+ # A sub-series entry in rfc-index.xml is a pointer and nothing more —
241
+ # `<doc-id>` plus `<is-also>`, with no date, title, author or status,
242
+ # because a sub-series has no metadata of its own. Rather than publish a
243
+ # dateless record, take the date of the newest RFC it includes.
244
+ #
245
+ # @param rfc_index [Hash{String => Entry}, nil]
246
+ # @return [Array<Bib::Date>] empty when no constituent resolves or none
247
+ # carries a date
248
+ def build_subseries_date(rfc_index)
249
+ newest = (is_also&.doc_id || [])
250
+ .filter_map { |ref| rfc_index&.[](Entry.squish(ref)) }
251
+ .flat_map(&:build_rfc_date)
252
+ .max_by { |d| d.at.to_s }
253
+ newest ? [newest] : []
254
+ end
255
+
256
+ def build_minimal_bibitem(ref)
257
+ id = ref.sub(/^([A-Z]+)0*(\d+)$/, '\1 \2')
258
+ docid = Bib::Docidentifier.new(type: "IETF", content: id, primary: true)
259
+ ItemData.new(formattedref: Bib::Formattedref.new(content: ref), docidentifier: [docid])
260
+ end
261
+
262
+ def build_series
263
+ return [] unless stream
264
+
265
+ t = Bib::Title.new(content: stream)
266
+ [Bib::Series.new(type: "stream", title: [t])]
267
+ end
268
+
269
+ # --- RFC entry builders ---
270
+
271
+ def build_rfc_docid
272
+ ids = [Bib::Docidentifier.new(type: "IETF", content: "RFC #{shortnum}", primary: true)]
273
+ ids << Bib::Docidentifier.new(type: "DOI", content: doi) if doi
274
+ ids
275
+ end
276
+
277
+ def build_rfc_title
278
+ [Bib::Title.new(content: title, type: "main")]
279
+ end
280
+
281
+ def build_rfc_link
282
+ [Bib::Uri.new(type: "src", content: "https://www.rfc-editor.org/info/rfc#{shortnum}")]
283
+ end
284
+
285
+ public def build_rfc_date
286
+ (date || []).map do |d|
287
+ month_num = ::Date::MONTHNAMES.index(d.month).to_s.rjust(2, "0")
288
+ date_str = "#{d.year}-#{month_num}"
289
+ Bib::Date.new(at: date_str, type: "published")
290
+ end
291
+ end
292
+
293
+ def build_rfc_contributor(wg_names = {}) # rubocop:disable Metrics/MethodLength
294
+ contribs = (author || []).map do |a|
295
+ entity = full_name_org(a.name)
296
+ unless entity
297
+ fname = parse_person_name(a.name)
298
+ entity = Bib::Person.new(name: fname)
299
+ end
300
+ role_type = a.role_title&.downcase || "author"
301
+ Bib::Contributor.new(**entity_from(entity), role: [Bib::Contributor::Role.new(type: role_type)])
302
+ end
303
+ contribs << org_contributor("RFC Publisher", "publisher")
304
+ contribs << org_contributor("RFC Series", "authorizer")
305
+ committee = build_committee_contributor(wg_names)
306
+ contribs << committee if committee
307
+ contribs
308
+ end
309
+
310
+ def entity_from(entity)
311
+ if entity.is_a?(Bib::Organization)
312
+ { organization: entity }
313
+ else
314
+ { person: entity }
315
+ end
316
+ end
317
+
318
+ def org_contributor(org_name, role_type)
319
+ org = Ietf::BibXMLParser.build_org(nil, org_name)
320
+ Bib::Contributor.new(organization: org, role: [Bib::Contributor::Role.new(type: role_type)])
321
+ end
322
+
323
+ def full_name_org(name)
324
+ Ietf::BibXMLParser.full_name_org(name)
325
+ end
326
+
327
+ def parse_person_name(name) # rubocop:disable Metrics/MethodLength
328
+ surname, initials, forename = Ietf::BibXMLParser.parse_surname_initials(name, nil, nil)
329
+ args = {
330
+ completename: Bib::LocalizedString.new(content: name, language: "en", script: "Latn"),
331
+ surname: Bib::LocalizedString.new(content: surname, language: "en", script: "Latn"),
332
+ }
333
+ args[:formatted_initials] = Bib::LocalizedString.new(content: initials, language: "en", script: "Latn") if initials
334
+ forenames = []
335
+ if forename
336
+ forenames << Bib::FullNameType::Forename.new(content: forename, language: "en", script: "Latn")
337
+ end
338
+ if initials
339
+ initials.split(/\.-?\s?|\s/).each do |i|
340
+ forenames << Bib::FullNameType::Forename.new(initial: i, language: "en", script: "Latn")
341
+ end
342
+ end
343
+ args[:forename] = forenames
344
+ Bib::FullName.new(**args)
345
+ end
346
+
347
+ def build_rfc_keyword
348
+ (keywords&.kw || []).map do |kw|
349
+ vocab = Bib::LocalizedString.new(content: kw)
350
+ Bib::Keyword.new(vocab: vocab)
351
+ end
352
+ end
353
+
354
+ def build_rfc_abstract
355
+ return [] unless abstract&.p&.any?
356
+
357
+ content = abstract.p.map { |para| "<p>#{CGI.escapeHTML(para.strip)}</p>" }.join
358
+ [Bib::Abstract.new(content: content, language: "en", script: "Latn")]
359
+ end
360
+
361
+ def build_rfc_relation
362
+ rels = []
363
+ if updates&.doc_id
364
+ updates.doc_id.each do |ref|
365
+ rels << build_rfc_doc_relation(ref, "updates")
366
+ end
367
+ end
368
+ if obsoleted_by&.doc_id
369
+ obsoleted_by.doc_id.each do |ref|
370
+ rels << build_rfc_doc_relation(ref, "obsoletedBy")
371
+ end
372
+ end
373
+ rels
374
+ end
375
+
376
+ def build_rfc_doc_relation(ref, type)
377
+ docid = Bib::Docidentifier.new(type: "IETF", content: ref, primary: true)
378
+ bibitem = ItemData.new(formattedref: Bib::Formattedref.new(content: ref), docidentifier: [docid])
379
+ Relaton::Ietf::Relation.new(type: type, bibitem: bibitem)
380
+ end
381
+
382
+ def build_rfc_status
383
+ return unless current_status
384
+
385
+ Bib::Status.new(stage: Bib::Status::Stage.new(content: current_status))
386
+ end
387
+
388
+ def build_rfc_series
389
+ series = build_rfc_is_also_series
390
+ series << Bib::Series.new(title: [Bib::Title.new(content: "RFC")], number: shortnum)
391
+ series + build_rfc_stream_series
392
+ end
393
+
394
+ def build_rfc_is_also_series
395
+ return [] unless is_also&.doc_id
396
+
397
+ is_also.doc_id.map do |s|
398
+ /^(?<name>\D+)(?<num>\d+)/ =~ s
399
+ t = Bib::Title.new(content: name)
400
+ Bib::Series.new(title: [t], number: num.gsub(/^0+/, ""))
401
+ end
402
+ end
403
+
404
+ def build_rfc_stream_series
405
+ return [] unless stream
406
+
407
+ t = Bib::Title.new(content: stream)
408
+ [Bib::Series.new(type: "stream", title: [t])]
409
+ end
410
+
411
+ STREAM_ORGS = {
412
+ "IETF" => ["IETF", "Internet Engineering Task Force"],
413
+ "IRTF" => ["IRTF", "Internet Research Task Force"],
414
+ "IAB" => ["IAB", "Internet Architecture Board"],
415
+ }.freeze
416
+
417
+ def build_rfc_ext
418
+ Ext.new(doctype: Doctype.new(content: "rfc"), stream: stream, flavor: "ietf")
419
+ end
420
+
421
+ def build_committee_contributor(wg_names = {})
422
+ return if wg_acronym.nil? || wg_acronym == "NON WORKING GROUP"
423
+
424
+ abbr, name = STREAM_ORGS[stream]
425
+ org = if abbr
426
+ Ietf::BibXMLParser.build_org(abbr, name)
427
+ else
428
+ Ietf::BibXMLParser.build_org(nil, stream || "IETF")
429
+ end
430
+ full_name = wg_names[wg_acronym] || wg_acronym
431
+ subdivision = Bib::Subdivision.new(
432
+ type: "workgroup",
433
+ name: [Bib::TypedLocalizedString.new(content: full_name)],
434
+ identifier: [Bib::OrganizationType::Identifier.new(content: wg_acronym)],
435
+ )
436
+ org.subdivision = [subdivision]
437
+ role = Bib::Contributor::Role.new(
438
+ type: "author",
439
+ description: [Bib::LocalizedMarkedUpString.new(content: "committee")],
440
+ )
441
+ Bib::Contributor.new(organization: org, role: [role])
442
+ end
443
+ end
444
+ end
445
+ end
446
+ 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