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,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "relaton/core/processor"
4
+
5
+ module Relaton
6
+ module Oasis
7
+ class Processor < Core::Processor
8
+ def initialize # rubocop:disable Lint/MissingSuper
9
+ @short = :relaton_oasis
10
+ @prefix = "OASIS"
11
+ @defaultprefix = %r{^OASIS\s}
12
+ @idtype = "OASIS"
13
+ @datasets = %w[oasis-open]
14
+ @pubid_flavor = :Oasis
15
+ end
16
+
17
+ # @param code [String]
18
+ # @param date [String, nil] year
19
+ # @param opts [Hash]
20
+ # @return [Relaton::Oasis::Item]
21
+ def get(code, date, opts)
22
+ require_relative "../oasis"
23
+ Bibliography.get(code, date, opts)
24
+ end
25
+
26
+ #
27
+ # Fetch all the documents from https://www.oasis-open.org/standards/
28
+ #
29
+ # @param [String] _source source name
30
+ # @param [Hash] opts
31
+ # @option opts [String] :output directory to output documents
32
+ # @option opts [String] :format
33
+ #
34
+ def fetch_data(_source, opts)
35
+ require_relative "data_fetcher"
36
+ DataFetcher.fetch(**opts)
37
+ end
38
+
39
+ # @param xml [String]
40
+ # @return [Relaton::Oasis::Item]
41
+ def from_xml(xml)
42
+ require_relative "../oasis"
43
+ Item.from_xml(xml)
44
+ end
45
+
46
+ # @param yaml [String]
47
+ # @return [Relaton::Oasis::Item]
48
+ def from_yaml(yaml)
49
+ require_relative "../oasis"
50
+ Item.from_yaml(yaml)
51
+ end
52
+
53
+ # Returns hash of XML grammar
54
+ # @return [String]
55
+ def grammar_hash
56
+ require_relative "../oasis"
57
+ @grammar_hash ||= Relaton::Oasis.grammar_hash
58
+ end
59
+
60
+ #
61
+ # Remove index file
62
+ #
63
+ # `url: true` names the cached file. No `pubid_class:`: `Type#remove_file`
64
+ # deletes the file and never reads the index.
65
+ #
66
+ def remove_index_file
67
+ require_relative "../oasis"
68
+ Relaton::Index.find_or_create(
69
+ :oasis, url: true, file: "#{INDEXFILE}.yaml"
70
+ ).remove_file
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Oasis
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-oasis".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Not lazy: DataFetcher names ::Pubid::Oasis::Identifier as the index
4
+ # `pubid_class:`, and Docidentifier parses every docid through it.
5
+ # (The IANA/IHO/IALA/OGC/ECMA form; spec/relaton/lazy_loading_spec.rb guards
6
+ # that this file is not itself loaded when a Db is built.)
7
+ require "pubid"
8
+ require "relaton/index"
9
+ require "relaton/bib"
10
+ require_relative "version"
11
+ require_relative "oasis/util"
12
+ require_relative "oasis/item_data"
13
+ require_relative "oasis/item"
14
+ require_relative "oasis/bibitem"
15
+ require_relative "oasis/bibdata"
16
+ require_relative "oasis/bibliography"
17
+
18
+ module Relaton
19
+ module Oasis
20
+ # The pubid index, both written and read: rows are
21
+ # `Pubid::Oasis::Identifier` hashes (`_type: pubid:oasis:standard`), built
22
+ # and read with `pubid_class: ::Pubid::Oasis::Identifier`.
23
+ #
24
+ # This gem does not produce `index-v1` any more; `relaton-data-oasis`'s
25
+ # crawler derives it from the v2 rows for relaton v2 consumers (the
26
+ # IANA/BIPM/W3C/ECMA shape).
27
+ INDEXFILE = "index-v2".freeze
28
+
29
+ class Error < StandardError; end
30
+ # Your code goes here...
31
+
32
+ # Returns hash of XML reammar
33
+ # @return [String]
34
+ def self.grammar_hash
35
+ # gem_path = File.expand_path "..", __dir__
36
+ # grammars_path = File.join gem_path, "grammars", "*"
37
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
38
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Bibdata < Item
4
+ model ItemData
5
+ include Bib::BibdataShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,64 @@
1
+ module Relaton
2
+ module Ogc
3
+ module Bibliography
4
+ extend self
5
+
6
+ # @param text [String]
7
+ # @param year [String, nil]
8
+ # @return [Relaton::Ogc::HitCollection]
9
+ def search(text, year = nil, _opts = {})
10
+ code = text.sub(/^OGC\s/, "")
11
+ HitCollection.new(code, year).find
12
+ rescue Faraday::ConnectionFailed, Faraday::SSLError
13
+ raise Relaton::RequestError, HitCollection::ENDPOINT
14
+ end
15
+
16
+ # @param code [String]
17
+ # @param year [String, nil]
18
+ # @param opts [Hash]
19
+ # @return [Relaton::Ogc::ItemData, nil]
20
+ def get(code, year = nil, opts = {})
21
+ result = bib_search_filter(code, year, opts) || (return nil)
22
+ ret = bib_results_filter(result, year)
23
+ if ret[:ret]
24
+ Util.info "Found: `#{ret[:ret].docidentifier.first.content}`", key: code
25
+ ret[:ret]
26
+ else
27
+ fetch_ref_err(code, year, ret[:years])
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def bib_search_filter(code, year, opts)
34
+ Util.info "Fetching from Relaton repository ...", key: code
35
+ search(code, year, opts)
36
+ end
37
+
38
+ def bib_results_filter(result, year)
39
+ missed_years = []
40
+ result.each do |r|
41
+ item = r.item
42
+ return { ret: item } unless year
43
+
44
+ item.date.select { |d| d.type == "published" }.each do |d|
45
+ date_year = ::Date.parse(d.at.to_s).year
46
+ return { ret: item } if year.to_i == date_year
47
+
48
+ missed_years << date_year
49
+ end
50
+ end
51
+ { years: missed_years }
52
+ end
53
+
54
+ def fetch_ref_err(code, year, missed_years)
55
+ Util.info "Not found.", key: code
56
+ unless missed_years.empty?
57
+ Util.info "There was no match for `#{year}`, though there " \
58
+ "were matches found for `#{missed_years.join('`, `')}`.", key: code
59
+ end
60
+ nil
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "faraday"
5
+ require "json"
6
+ require_relative "../ogc"
7
+ require_relative "scraper"
8
+
9
+ module Relaton
10
+ module Ogc
11
+ class DataFetcher < Core::DataFetcher
12
+ ENDPOINT = "https://raw.githubusercontent.com/opengeospatial/NamingAuthority/master/definitions/docs/docs.json"
13
+
14
+ def initialize(output, format)
15
+ super
16
+ @etagfile = File.join output, "etag.txt"
17
+ @docids = []
18
+ @dupids = Set.new
19
+ end
20
+
21
+ def log_error(msg)
22
+ Util.error msg
23
+ end
24
+
25
+ def index
26
+ # `pubid_class:` on the producer too: FileIO#save only calls `to_hash`
27
+ # when the value is an instance of it, so without it the crawl writes
28
+ # v1-shaped rows under a v2 name, silently.
29
+ @index ||= Relaton::Index.find_or_create(
30
+ :ogc, file: "#{INDEXFILE}.yaml", pubid_class: ::Pubid::Ogc::Identifier
31
+ )
32
+ end
33
+
34
+ def fetch(_source = nil) # rubocop:disable Metrics/AbcSize
35
+ get_data do |etag, json|
36
+ no_errors = true
37
+ json.each_value { |hit| fetch_doc(hit) || no_errors = false }
38
+ if @dupids.any?
39
+ Util.warn "Duplicated documents: #{@dupids.to_a.join(', ')}"
40
+ end
41
+ self.etag = etag if no_errors
42
+ index.save
43
+ report_errors
44
+ end
45
+ end
46
+
47
+ def fetch_doc(hit)
48
+ return if hit["type"] == "CC"
49
+
50
+ bib = Scraper.parse_page hit, @errors
51
+ write_document bib
52
+ true
53
+ rescue StandardError => e
54
+ Util.error "Fetching document: #{hit['identifier']}\n" \
55
+ "#{e.class} #{e.message}\n#{e.backtrace}"
56
+ false
57
+ end
58
+
59
+ def write_document(bib) # rubocop:disable Metrics/AbcSize
60
+ docid = bib.docidentifier[0].content
61
+ if @docids.include?(docid)
62
+ @dupids << docid
63
+ return
64
+ end
65
+
66
+ @docids << docid
67
+ file = file_name bib
68
+ index.add_or_update index_id(docid), file
69
+ File.write file, serialize(bib), encoding: "UTF-8"
70
+ end
71
+
72
+ #
73
+ # The index key. Stored as a `Pubid::Ogc::Identifier` so the published
74
+ # index-v2 rows are pubid hashes the consumer can narrow on. A docid
75
+ # pubid rejects is logged and indexed as the plain string, so one bad
76
+ # record never aborts a crawl.
77
+ #
78
+ # @param docid [String]
79
+ # @return [Pubid::Ogc::Identifier, String]
80
+ #
81
+ def index_id(docid)
82
+ ::Pubid::Ogc::Identifier.parse docid
83
+ rescue StandardError => e
84
+ Util.warn "Failed to parse pubid `#{docid}`: #{e.message}"
85
+ docid
86
+ end
87
+
88
+ def file_name(bib)
89
+ name = bib.docidentifier[0].content.upcase.gsub(/[\s:.]/, "_")
90
+ "#{@output}/#{name}.#{@ext}"
91
+ end
92
+
93
+ def to_yaml(bib)
94
+ Item.to_yaml bib
95
+ end
96
+
97
+ def to_xml(bib)
98
+ Bibdata.to_xml bib
99
+ end
100
+
101
+ def to_bibxml(_bib)
102
+ raise NotImplementedError, "OGC does not support bibxml format"
103
+ end
104
+
105
+ # @return [String, nil]
106
+ def etag
107
+ @etag ||= if File.exist? @etagfile
108
+ File.read @etagfile, encoding: "UTF-8"
109
+ end
110
+ end
111
+
112
+ # @param e_tag [String]
113
+ def etag=(e_tag)
114
+ File.write @etagfile, e_tag, encoding: "UTF-8"
115
+ end
116
+
117
+ def get_data # rubocop:disable Metrics/AbcSize
118
+ h = {}
119
+ h["If-None-Match"] = etag if etag
120
+ resp = Faraday.new(ENDPOINT, headers: h).get
121
+ case resp.status
122
+ when 200
123
+ json = JSON.parse(resp.body)
124
+ block_given? ? yield(resp[:etag], json) : json
125
+ when 304 then []
126
+ else raise Relaton::RequestError, "Could not access #{ENDPOINT}"
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,111 @@
1
+ module Relaton
2
+ module Ogc
3
+ # Structured OGC document identifier. The docid string is the canonical
4
+ # printed form, which carries no publisher token (e.g. "19-025r1"), and it
5
+ # is parsed into a `Pubid::Ogc::Identifier` kept in `@pubid` while the
6
+ # lutaml `content` attribute stays a plain string for serialization.
7
+ #
8
+ # Parsing is **soft**: `content=` lazily requires pubid and rescues
9
+ # `LoadError`/`StandardError`, so a missing pubid gem or non-OGC content
10
+ # leaves `@pubid` nil rather than raising.
11
+ #
12
+ # Before this class had a body it inherited `Bib::Docidentifier`, whose
13
+ # `remove_part!` / `remove_date!` / `to_all_parts!` each raise
14
+ # `NotImplementedError` — and `Bib::ItemData` broadcasts all three to every
15
+ # docidentifier, so `#to_all_parts` and `#to_most_recent_reference` raised
16
+ # on **every** OGC item. `NotImplementedError` descends from `ScriptError`,
17
+ # so a caller's `rescue => e` did not even catch it.
18
+ class Docidentifier < Bib::Docidentifier
19
+ attr_reader :pubid
20
+
21
+ # Capture the inherited (LocalizedMarkedUpString) content setter before
22
+ # overriding #content=, so #refresh_content! can write the re-rendered
23
+ # string back WITHOUT re-parsing (a re-parse would rebuild @pubid from the
24
+ # string and discard in-place mutations such as `all_parts = true`).
25
+ alias_method :store_content, :content=
26
+
27
+ def initialize(attrs = {}, options = {})
28
+ pubid = attrs.is_a?(Hash) ? attrs.delete(:pubid) : nil
29
+ attrs[:content] ||= pubid.to_s if pubid
30
+ super
31
+ @pubid = pubid if pubid
32
+ end
33
+
34
+ def content=(value)
35
+ super
36
+ return unless value
37
+
38
+ @pubid = begin
39
+ require "pubid"
40
+ ::Pubid::Ogc::Identifier.parse(value)
41
+ rescue LoadError, StandardError
42
+ nil
43
+ end
44
+ end
45
+
46
+ # `Pubid::Ogc::Identifier` models only `year`/`number`/`revision`, so the
47
+ # mapping is OGC-specific:
48
+ #
49
+ # - **`remove_date!` → clears `revision`.** OGC carries no date component;
50
+ # `revision` is its version discriminator — the same component a
51
+ # reference may omit, which `HitCollection#best_match` then treats as a
52
+ # wildcard — so clearing it yields
53
+ # the version-agnostic ("most recent") reference: `12-128r19` →
54
+ # `12-128`.
55
+ # - **`year` is never cleared.** It looks date-like but is half the
56
+ # document number (`12-128`), not a publication qualifier; dropping it
57
+ # would leave `-128`, which identifies nothing.
58
+ # - **`remove_part!` → clears the (unused) `part`/`subpart` attributes.**
59
+ # A no-op for the rendered string today: OGC has no part component.
60
+ # Implemented anyway so it never raises, and it starts working
61
+ # automatically if pubid-ogc ever models one. (The IALA precedent.)
62
+ # - **`to_all_parts!` → both, then wraps `@pubid` in pubid's `AllParts`.**
63
+ # `content` stays the plain stripped id — OGC's own renderer has no
64
+ # "(all parts)" marker, and `content` is cached from the pre-wrap
65
+ # pubid on purpose. `#pubid` itself, read directly, now answers
66
+ # `all_parts? == true` and renders WITH pubid's generic marker
67
+ # (`#to_s`), since it's the wrapper.
68
+ #
69
+ # All three no-op safely when `@pubid` is nil, so `Bib::ItemData`'s
70
+ # `#to_all_parts` / `#to_most_recent_reference` never raise on OGC items.
71
+ #
72
+ # `refresh_content!` renders a bare `to_s`: the OGC printed form has no
73
+ # publisher token and the stored `content` does not carry one either, so
74
+ # unlike 3GPP this must NOT pass `with_publisher: true`.
75
+
76
+ def remove_part!
77
+ clear_attr!(:part)
78
+ end
79
+
80
+ def remove_date!
81
+ clear_attr!(:revision)
82
+ end
83
+
84
+ def to_all_parts!
85
+ return if !@pubid || @pubid.all_parts?
86
+
87
+ # `#exclude` (no args) rebuilds a full independent copy — `remove_part!`
88
+ # / `remove_date!` mutate `@pubid` in place, so a bare reference here
89
+ # would lose the original revision to that mutation too.
90
+ original = @pubid.exclude
91
+ remove_part!
92
+ remove_date!
93
+ @pubid = original.to_all_parts
94
+ end
95
+
96
+ private
97
+
98
+ def clear_attr!(attr)
99
+ return unless @pubid && @pubid.respond_to?("#{attr}=")
100
+
101
+ @pubid.public_send("#{attr}=", nil)
102
+ @pubid.subpart = nil if attr == :part && @pubid.respond_to?(:subpart=)
103
+ refresh_content!
104
+ end
105
+
106
+ def refresh_content!
107
+ store_content(@pubid.to_s) if @pubid
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,12 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Doctype < Bib::Doctype
4
+ attribute :content, :string, values: %w[
5
+ abstract-specification-topic best-practice change-request-supporting-document
6
+ community-practice community-standard discussion-paper engineering-report
7
+ other policy reference-model release-notes standard user-guide white-paper
8
+ test-suite draft-standard
9
+ ]
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "doctype"
2
+
3
+ module Relaton
4
+ module Ogc
5
+ class Ext < Bib::Ext
6
+ attribute :doctype, Doctype
7
+ attribute :subdoctype, :string, values: %w[
8
+ conceptual-model conceptual-model-and-encoding conceptual-model-and-implementation
9
+ encoding extension implementation profile profile-with-extension general
10
+ ]
11
+
12
+ def get_schema_version = Relaton.schema_versions["relaton-model-ogc"]
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Hit < Core::Hit
4
+ # @return [Relaton::Ogc::ItemData]
5
+ def item
6
+ @item ||= begin
7
+ url = "#{HitCollection::ENDPOINT}#{hit[:file]}"
8
+ resp = Faraday.get(url) { |req| req.options.timeout = 10 }
9
+ return unless resp.status == 200
10
+
11
+ item = Item.from_yaml resp.body
12
+ item.fetched = Date.today.to_s
13
+ item
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,111 @@
1
+ require "faraday"
2
+ require_relative "hit"
3
+
4
+ module Relaton
5
+ module Ogc
6
+ class HitCollection < Core::HitCollection
7
+ ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-ogc/v2/".freeze
8
+
9
+ # @return [self]
10
+ def find
11
+ return self if ref.nil? || ref.empty?
12
+
13
+ row = best_match ref
14
+ return self unless row
15
+
16
+ url = "#{ENDPOINT}#{row[:file]}"
17
+ resp = Faraday.get(url) { |req| req.options.timeout = 10 }
18
+ return self unless resp.status == 200
19
+
20
+ item = Item.from_yaml resp.body
21
+ item.fetched = Date.today.to_s
22
+ hit = Hit.new({ code: item.docidentifier[0]&.content, file: row[:file] }, self)
23
+ hit.instance_variable_set(:@item, item)
24
+ @array = [hit]
25
+ self
26
+ end
27
+
28
+ # @return [Relaton::Index::Type]
29
+ def index
30
+ @index ||= Relaton::Index.find_or_create(
31
+ :ogc, url: "#{ENDPOINT}#{INDEXFILE}.zip", file: "#{INDEXFILE}.yaml",
32
+ pubid_class: ::Pubid::Ogc::Identifier
33
+ )
34
+ end
35
+
36
+ private
37
+
38
+ #
39
+ # Find the index row for a reference, latest revision first.
40
+ #
41
+ # Passing the pubid to `Index::Type#search` is what enables the binary
42
+ # search on `id.root.number` — with the plain string this used to pass,
43
+ # the whole index is scanned however the index was built. Selection is
44
+ # `Type#search`'s default with no block — pubid's asymmetric subset match
45
+ # (`Pubid::SubsetMatch`): the reference on the left, the row on the right,
46
+ # and a component it omits matches any
47
+ # value. `revision` is OGC's only optional component, so a
48
+ # bare `OGC 12-128` still finds the `r19` row, while `OGC 12-128r19`
49
+ # reaches only its own. `year` is always stated — the bsearch key is the
50
+ # `<nnn>` field alone, so one bucket holds every year that reused the
51
+ # number (`05-007` and `17-007` share bucket `007`).
52
+ #
53
+ # @param text [String]
54
+ # @return [Hash, nil]
55
+ #
56
+ # The substring-scan fallback this used to take when parsing failed is
57
+ # gone with the rescue. It was the same conflation the convention
58
+ # rejects: an unparseable string matched a SUBSTRING of the rendered
59
+ # ids, so an ambiguous reference silently resolved to whichever row
60
+ # sorted first, instead of telling the caller the reference is not an
61
+ # identifier. ecma, w3c and xsf never had one.
62
+ def best_match(text)
63
+ pubid = parse_ref text
64
+ rows = index.search(pubid)
65
+ rows.max_by { |r| [revision_key(r[:id].revision), r[:file]] }
66
+ end
67
+
68
+ #
69
+ # Order key for an OGC revision suffix.
70
+ #
71
+ # Revisions are `r<n>` with optional letter suffixes (`r3a`, `r12a`) plus
72
+ # the odd `a` and `c1`, so the number must be compared as an integer:
73
+ # `r2` beats `r14` as text but is the older document. The token itself
74
+ # breaks the tie, so `r3a` sorts above `r3` and a repeated lookup returns
75
+ # the same row (the index sort is not stable). An absent revision sorts
76
+ # below every present one.
77
+ #
78
+ # Highest revision is the newest published document in 105 of the 106
79
+ # multi-revision documents in the index, scored against each document's
80
+ # own `date[0].at`; the previous `min_by` on the rendered id matched 1.
81
+ #
82
+ # @param revision [String, nil]
83
+ # @return [Array]
84
+ #
85
+ def revision_key(revision)
86
+ [revision.to_s[/\d+/].to_i, revision.to_s]
87
+ end
88
+
89
+ #
90
+ # Parse a user reference into a `Pubid::Ogc::Identifier`, or nil.
91
+ #
92
+ # `Pubid::Ogc` takes the `OGC ` publisher token as optional and
93
+ # lowercases the revision, so `OGC 19-025r1`, `19-025r1`, `11-038R2` and
94
+ # the revision-less `16-079` all parse without normalization here.
95
+ #
96
+ # @param text [String]
97
+ # @return [Pubid::Ogc::Identifier, nil]
98
+ #
99
+ # An unrecognized reference **raises**; like ISO, ETSI and 3GPP we let it
100
+ # propagate. relaton-cli rescues `Pubid::Errors::Error` and renders
101
+ # `"..." is not a recognized standards identifier`
102
+ # (`gems/relaton-cli/lib/relaton/cli/command.rb:324`), and `Db#fetch`
103
+ # logs it through the `StandardError` arm at `lib/relaton/db.rb:122`.
104
+ # Rescuing here would collapse "this identifier is malformed" into "no
105
+ # such document", leaving a caller unable to tell them apart.
106
+ def parse_ref(text)
107
+ ::Pubid::Ogc::Identifier.parse text.to_s.strip
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "docidentifier"
2
+ require_relative "ext"
3
+
4
+ module Relaton
5
+ module Ogc
6
+ class Item < Iso::Item
7
+ model ItemData
8
+
9
+ attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
10
+ attribute :ext, Ext
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ module Relaton
2
+ module Ogc
3
+ class ItemData < Bib::ItemData
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,59 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Ogc
5
+ class Processor < Core::Processor
6
+ def initialize # rubocop:disable Lint/MissingSuper
7
+ @short = :relaton_ogc
8
+ @prefix = "OGC"
9
+ @defaultprefix = %r{^OGC\s}
10
+ @idtype = "OGC"
11
+ @datasets = %w[ogc-naming-authority]
12
+ @pubid_flavor = :Ogc
13
+ end
14
+
15
+ # @param code [String]
16
+ # @param date [String, nil]
17
+ # @param opts [Hash]
18
+ # @return [Relaton::Ogc::ItemData]
19
+ def get(code, date, opts)
20
+ require_relative "../ogc"
21
+ Bibliography.get(code, date, opts)
22
+ end
23
+
24
+ # @param source [String]
25
+ # @param opts [Hash]
26
+ def fetch_data(_source, opts)
27
+ require_relative "data_fetcher"
28
+ DataFetcher.fetch(**opts)
29
+ end
30
+
31
+ # @param xml [String]
32
+ # @return [Relaton::Ogc::ItemData]
33
+ def from_xml(xml)
34
+ require_relative "../ogc"
35
+ Item.from_xml xml
36
+ end
37
+
38
+ # @param yaml [String]
39
+ # @return [Relaton::Ogc::ItemData]
40
+ def from_yaml(yaml)
41
+ require_relative "../ogc"
42
+ Item.from_yaml yaml
43
+ end
44
+
45
+ # @return [String]
46
+ def grammar_hash
47
+ require_relative "../ogc"
48
+ @grammar_hash ||= Relaton::Ogc.grammar_hash
49
+ end
50
+
51
+ def remove_index_file
52
+ require_relative "../ogc"
53
+ Relaton::Index.find_or_create(
54
+ :ogc, url: true, file: "#{INDEXFILE}.yaml"
55
+ ).remove_file
56
+ end
57
+ end
58
+ end
59
+ end