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,24 @@
1
+ require "relaton/bib"
2
+ require "relaton/index"
3
+ require "pubid"
4
+ require_relative "version"
5
+ require_relative "oiml/util"
6
+ require_relative "oiml/docidentifier"
7
+ require_relative "oiml/item"
8
+ require_relative "oiml/bibitem"
9
+ require_relative "oiml/bibdata"
10
+ require_relative "oiml/bibliography"
11
+
12
+ module Relaton
13
+ module Oiml
14
+ INDEXFILE = "index-v2".freeze
15
+
16
+ class Error < StandardError; end
17
+
18
+ # Returns hash of XML grammar
19
+ # @return [String]
20
+ def self.grammar_hash
21
+ Digest::MD5.hexdigest Relaton::VERSION
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Omg
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 Omg
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton
4
+ module Omg
5
+ # OMG bibliography module
6
+ module Bibliography
7
+ extend self
8
+
9
+ # @param text [String] the OMG standard reference
10
+ # @return [Relaton::Omg::Item]
11
+ def search(text)
12
+ Scraper.scrape_page text
13
+ end
14
+
15
+ # @param code [String] the OMG standard reference
16
+ # @param year [String] the year the standard was published (optional)
17
+ # @param opts [Hash] options
18
+ # @return [Relaton::Omg::Item]
19
+ def get(code, _year = nil, _opts = {})
20
+ Util.info "Fetching from www.omg.org ...", key: code
21
+ result = search code
22
+ if result
23
+ Util.info "Found: `#{result.docidentifier.first.content}`", key: code
24
+ else
25
+ Util.info "Not found.", key: code
26
+ end
27
+ result
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,67 @@
1
+ module Relaton
2
+ module Omg
3
+ # An OMG document identifier backed by `Pubid::Omg`.
4
+ #
5
+ # `content` stays a plain string, so serialization is unchanged; the parsed
6
+ # identifier lives beside it in `@pubid` and drives the mutators. Follows
7
+ # the IALA and CEN shape (`lib/relaton/iala/docidentifier.rb`,
8
+ # `lib/relaton/cen/model/docidentifier.rb`).
9
+ class Docidentifier < Bib::Docidentifier
10
+ # @return [Pubid::Omg::Identifier, nil] nil when the content is not an
11
+ # OMG identifier, or the grammar cannot read it
12
+ attr_reader :pubid
13
+
14
+ # Capture the inherited (LocalizedMarkedUpString) content setter before
15
+ # overriding #content=, so #refresh_content! writes the re-rendered string
16
+ # back WITHOUT re-parsing it and discarding the mutation.
17
+ alias_method :store_content, :content=
18
+
19
+ def content=(value)
20
+ super
21
+ return unless value
22
+
23
+ @pubid = begin
24
+ # `pubid` is required lazily because deserialization reaches this
25
+ # class without the flavor entry file having been loaded. LoadError
26
+ # degrades to a plain string; StandardError covers a non-OMG value
27
+ # and a title the grammar rejects, both of which are DATA and must
28
+ # not raise. A malformed *query* raises — see Scraper.scrape_page.
29
+ require "pubid"
30
+ ::Pubid::Omg::Identifier.parse(value)
31
+ rescue LoadError, StandardError
32
+ nil
33
+ end
34
+ end
35
+
36
+ # OMG identifiers carry no date. The version is OMG's discriminator
37
+ # (`OMG AMI4CCM 1.0` and `OMG AMI4CCM 1.1` are two editions of one
38
+ # specification), so the version-agnostic ("most recent") reference drops
39
+ # the version — as IALA maps `remove_date!` onto its edition.
40
+ def remove_date!
41
+ return unless @pubid
42
+
43
+ replace_pubid @pubid.exclude(:version)
44
+ end
45
+
46
+ # The part is the volume or format segment after the version, e.g.
47
+ # `Superstructure` in `OMG UML 2.1.1 Superstructure`.
48
+ def remove_part!
49
+ return unless @pubid
50
+
51
+ replace_pubid @pubid.exclude(:part)
52
+ end
53
+
54
+ # `to_all_parts!` stays the inherited no-op. An OMG part is a volume or a
55
+ # format name, not a numbered part, so there is no "all parts" form.
56
+
57
+ private
58
+
59
+ # `Pubid#exclude` returns a COPY, so the new identifier replaces the old
60
+ # one.
61
+ def replace_pubid(new_pubid)
62
+ @pubid = new_pubid
63
+ store_content @pubid.to_s
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,7 @@
1
+ module Relaton
2
+ module Omg
3
+ class Ext < Bib::Ext
4
+ def get_schema_version = Relaton.schema_versions["relaton-model-omg"]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module Relaton
2
+ module Omg
3
+ class Item < Bib::Item
4
+ model ItemData
5
+ attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
6
+ attribute :ext, Ext
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module Relaton
2
+ module Omg
3
+ class ItemData < Bib::ItemData
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,35 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Omg
5
+ class Processor < Core::Processor
6
+ def initialize # rubocop:disable Lint/MissingSuper
7
+ @short = :relaton_omg
8
+ @prefix = "OMG"
9
+ @pubid_flavor = :Omg # Pubid::Omg.prefixes is ["OMG"], the same as @prefix
10
+ @defaultprefix = /^OMG /
11
+ @idtype = "OMG"
12
+ end
13
+
14
+ def get(code, date, opts)
15
+ require_relative "../omg"
16
+ Bibliography.get(code, date, opts)
17
+ end
18
+
19
+ def from_xml(xml)
20
+ require_relative "../omg"
21
+ Bibitem.from_xml xml
22
+ end
23
+
24
+ def from_yaml(yaml)
25
+ require_relative "../omg"
26
+ Item.from_yaml yaml
27
+ end
28
+
29
+ def grammar_hash
30
+ require_relative "../omg"
31
+ @grammar_hash ||= Omg.grammar_hash
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,186 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "mechanize"
5
+ require "pubid"
6
+
7
+ module Relaton
8
+ module Omg
9
+ class Scraper
10
+ URL_PATTERN = "https://www.omg.org/spec/"
11
+ LD_DATE = "https://www.omg.org/techprocess/ab/SpecificationMetadata/publicationDate"
12
+
13
+ # @param acronym [String] the specification acronym, e.g. "UML"
14
+ # @param version [String, nil] the version, e.g. "2.1.1" or "2.5 beta 1"
15
+ # @param part [String, nil] the document part, e.g. "Superstructure"
16
+ def initialize(acronym, version = nil, part = nil)
17
+ @acronym = acronym
18
+ @version = version
19
+ @part = part
20
+ end
21
+
22
+ # @param ref [String] the OMG reference, e.g. "OMG UML 2.1.1 Superstructure"
23
+ # @return [Relaton::Omg::ItemData, nil] nil when the page is not found
24
+ # @raise [Pubid::Errors::ParseError] when the reference is not an OMG
25
+ # identifier
26
+ def self.scrape_page(ref)
27
+ pubid = ::Pubid::Omg::Identifier.parse(ref)
28
+ scraper = new(pubid.acronym, pubid.version, pubid.part)
29
+ doc = scraper.get_doc
30
+ return if doc.nil? || scraper.fetch_link.empty?
31
+
32
+ Omg::ItemData.new(**scraper.item)
33
+ end
34
+
35
+ def get_doc
36
+ @url = "#{URL_PATTERN}#{@acronym}/"
37
+ @url += @version.gsub(" ", "/") if @version
38
+ agent = Mechanize.new
39
+ agent.open_timeout = 10
40
+ @doc = agent.get(@url)
41
+ rescue Mechanize::ResponseCodeError => e
42
+ return if e.response_code == "404"
43
+
44
+ raise Relaton::RequestError, "Unable acces #{@url} (#{e.response_code})"
45
+ rescue Net::OpenTimeout
46
+ raise Relaton::RequestError, "Unable acces #{@url} (timeout)"
47
+ end
48
+
49
+ def item
50
+ {
51
+ fetched: ::Date.today.to_s,
52
+ docidentifier: fetch_docid,
53
+ title: fetch_title,
54
+ abstract: fetch_abstract,
55
+ version: fetch_version,
56
+ date: fetch_date,
57
+ status: fetch_status,
58
+ source: fetch_link,
59
+ relation: fetch_relation,
60
+ keyword: fetch_keyword,
61
+ license: fetch_license,
62
+ }
63
+ end
64
+
65
+ def fetch_title
66
+ content = @doc.at('//dt[.="Title:"]/following-sibling::dd').text
67
+ content += ": #{@part}" if @part
68
+ [Bib::Title.new(type: "main", content: content, language: "en", script: "Latn")]
69
+ end
70
+
71
+ # The version comes from the page, not from the query, so a versionless
72
+ # query (`OMG AMI4CCM`) answers with the version that the page shows.
73
+ def fetch_docid
74
+ id = render_id(@acronym, doc_version, @part)
75
+ [Docidentifier.new(content: id, type: "OMG", primary: true)]
76
+ end
77
+
78
+ def fetch_abstract
79
+ content = @doc.at('//section[@id="document-metadata"]/div/div/p').text
80
+ [Bib::Abstract.new(content: content, language: "en", script: "Latn")]
81
+ end
82
+
83
+ def fetch_version
84
+ [Bib::Version.new(revision_date: pub_date, draft: doc_version)]
85
+ end
86
+
87
+ def doc_version
88
+ @doc_version ||= @doc.at('//dt[.="Version:"]/following-sibling::dd/p/span').text
89
+ end
90
+
91
+ def fetch_date
92
+ return [] unless pub_date
93
+
94
+ [Bib::Date.new(type: "published", at: pub_date.to_s)]
95
+ end
96
+
97
+ def pub_date
98
+ return @pub_date if defined? @pub_date
99
+
100
+ @pub_date = jsonld_date || dd_date
101
+ end
102
+
103
+ # The visible date renders the month name in the locale of the server, and
104
+ # the CDN caches that variant. Parse the machine-readable value first.
105
+ #
106
+ # @return [Date, nil]
107
+ def jsonld_date
108
+ script = @doc.at('//script[@type="application/ld+json"]')
109
+ return unless script
110
+
111
+ node = JSON.parse(script.text).find { |e| e.is_a?(Hash) && e[LD_DATE] }
112
+ value = node && node[LD_DATE].first["@value"]
113
+ value && ::Date.parse(value)
114
+ rescue JSON::ParserError, ::Date::Error
115
+ nil
116
+ end
117
+
118
+ # @return [Date, nil]
119
+ def dd_date
120
+ text = @doc.at('//dt[.="Publication Date:"]/following-sibling::dd').text.strip
121
+ ::Date.parse text
122
+ rescue ::Date::Error
123
+ Util.warn "Cannot parse the publication date `#{text}`."
124
+ nil
125
+ end
126
+
127
+ def fetch_status
128
+ status = @doc.at('//dt[.="Document Status:"]/following-sibling::dd')
129
+ stage = status.text.strip.match(/\w+/).to_s
130
+ Bib::Status.new(stage: Bib::Status::Stage.new(content: stage))
131
+ end
132
+
133
+ def fetch_link
134
+ return @links if @links
135
+
136
+ @links = []
137
+ if @part
138
+ a = @doc.at("//a[@href='#{@url}/#{@part}/PDF']")
139
+ @links << Bib::Uri.new(type: "src", content: a[:href]) if a
140
+ else
141
+ a = @doc.at('//dt[.="This Document:"]/following-sibling::dd/a')
142
+ @links << Bib::Uri.new(type: "src", content: a[:href]) if a
143
+ pdf = @doc.at('//a[@class="download-document"]')
144
+ @links << Bib::Uri.new(type: "pdf", content: pdf[:href]) if pdf
145
+ end
146
+ @links
147
+ end
148
+
149
+ def fetch_relation
150
+ v = @doc.xpath('//h2[.="History"]/following-sibling::section/div/table/tbody/tr')
151
+ v.reduce([]) do |mem, row|
152
+ ver = row.at("td").text
153
+ unless ver == doc_version
154
+ acronym = row.at("td[3]/a")[:href].split("/")[4]
155
+ id = render_id(acronym, ver)
156
+ docid = Docidentifier.new(content: id, type: "OMG")
157
+ bibitem = Bib::ItemBase.new(formattedref: Bib::Formattedref.new(content: id), docidentifier: [docid])
158
+ mem << Bib::Relation.new(type: "obsoletes", bibitem: bibitem)
159
+ end
160
+ mem
161
+ end
162
+ end
163
+
164
+ def fetch_keyword
165
+ @doc.xpath('//dt[.="Categories:"]/following-sibling::dd/ul/li/a/em').map do |kw|
166
+ Bib::Keyword.new(vocab: Bib::LocalizedString.new(content: kw.text))
167
+ end
168
+ end
169
+
170
+ def fetch_license
171
+ @doc.xpath(
172
+ '//dt/span/a[contains(., "IPR Mode")]/../../following-sibling::dd/span',
173
+ ).map { |l| l.text.match(/[\w\s-]+/).to_s.strip }
174
+ end
175
+
176
+ private
177
+
178
+ # @return [String] the identifier, rendered by pubid
179
+ def render_id(acronym, version, part = nil)
180
+ ::Pubid::Omg::Identifiers::Specification.new(
181
+ acronym: acronym, version: version, part: part,
182
+ ).to_s
183
+ end
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Omg
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-omg".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,25 @@
1
+ require "nokogiri"
2
+ require "relaton/bib"
3
+ require_relative "version"
4
+ require_relative "omg/util"
5
+ require_relative "omg/ext"
6
+ require_relative "omg/docidentifier"
7
+ require_relative "omg/item_data"
8
+ require_relative "omg/item"
9
+ require_relative "omg/bibitem"
10
+ require_relative "omg/bibdata"
11
+ require_relative "omg/scraper"
12
+ require_relative "omg/bibliography"
13
+
14
+ module Relaton
15
+ module Omg
16
+ # Returns hash of XML reammar
17
+ # @return [String]
18
+ def self.grammar_hash
19
+ # gem_path = File.expand_path "..", __dir__
20
+ # grammars_path = File.join gem_path, "grammars", "*"
21
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
22
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Plateau
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 Plateau
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ module Relaton
2
+ module Plateau
3
+ module Bibliography
4
+ extend self
5
+
6
+ def search(code)
7
+ HitCollection.new(code).find
8
+ end
9
+
10
+ # Only a transport failure is rescued, and it becomes the
11
+ # Relaton::RequestError that Relaton::Db retries. Anything else keeps
12
+ # its own class: an unrecognized reference raises Pubid::Errors::ParseError
13
+ # (relaton-cli reports it), and a bug keeps its backtrace.
14
+ def get(code, _year = nil, _opts = {}) # rubocop:disable Metrics/MethodLength
15
+ Util.info "Fetching ...", key: code
16
+ result = search(code).fetch_doc
17
+ if result
18
+ Util.info "Found `#{result.docidentifier.first.content}`", key: code
19
+ result
20
+ else
21
+ Util.warn "Not found.", key: code
22
+ end
23
+ rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
24
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
25
+ Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
26
+ Errno::ETIMEDOUT => e
27
+ raise Relaton::RequestError, e.message
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,176 @@
1
+ require "json"
2
+ require "relaton/core"
3
+ require_relative "../plateau"
4
+ require_relative "parser"
5
+ require_relative "handbook_parser"
6
+ require_relative "technical_report_parser"
7
+
8
+ module Relaton
9
+ module Plateau
10
+ # Fetcher class to fetch data from the Plateau website
11
+ class DataFetcher < Core::DataFetcher
12
+ HANDBOOKS_URL = "https://www.mlit.go.jp/plateau/_next/data/1.3.0/libraries/handbooks.json".freeze
13
+ TECHNICAL_REPORTS_URL = "https://www.mlit.go.jp/plateau/_next/data/1.3.0/libraries/technical-reports.json".freeze
14
+
15
+ def index
16
+ @index ||= Relaton::Index.find_or_create(
17
+ :plateau, file: "#{INDEXFILE}.yaml", pubid_class: ::Pubid::Plateau::Identifier
18
+ )
19
+ end
20
+
21
+ def log_error(msg)
22
+ Util.error msg
23
+ end
24
+
25
+ def fetch(source)
26
+ case source
27
+ when "plateau-handbooks" then extract_handbooks_data
28
+ when "plateau-technical-reports" then extract_technical_reports_data
29
+ else puts "Invalid source: #{source}"
30
+ end
31
+ end
32
+
33
+ # Create a GET request with custom headers to mimic a browser
34
+ def create_request(uri)
35
+ request = Net::HTTP::Get.new(uri)
36
+ request["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0"
37
+ request["Accept"] = "*/*"
38
+ request["Accept-Language"] = "en-US,en;q=0.5"
39
+ request["Accept-Encoding"] = "gzip, deflate, br, zstd"
40
+ request["Referer"] = "https://www.mlit.go.jp/plateau/libraries/"
41
+ request["purpose"] = "prefetch"
42
+ request["x-nextjs-data"] = "1"
43
+ request["Connection"] = "keep-alive"
44
+ request
45
+ end
46
+
47
+ # Handle different content encodings
48
+ def hadle_response(response)
49
+ if response["Content-Encoding"] == "gzip"
50
+ Zlib::GzipReader.new(StringIO.new(response.body)).read
51
+ elsif response["Content-Encoding"] == "deflate"
52
+ Zlib::Inflate.inflate(response.body)
53
+ else
54
+ response.body
55
+ end
56
+ end
57
+
58
+ # Fetch JSON data from a URL with custom headers
59
+ #
60
+ # @param [String] url The URL to fetch JSON data from
61
+ # @return [Hash] The parsed JSON data
62
+ def fetch_json_data(url)
63
+ uri = URI(url)
64
+
65
+ request = create_request(uri)
66
+
67
+ # Send the request and get the response
68
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
69
+ http.request(request)
70
+ end
71
+
72
+ # Check if the response is successful
73
+ unless response.code.to_i == 200
74
+ Util.warn "Failed to fetch data: #{response.code} #{response.message}"
75
+ return {}
76
+ end
77
+
78
+ body = hadle_response(response)
79
+
80
+ # Parse the JSON response
81
+ JSON.parse(body)
82
+ rescue StandardError => e
83
+ # Handle any errors during the fetching process
84
+ Util.error "Error fetching JSON data from #{url}: #{e.message}"
85
+ {}
86
+ end
87
+
88
+ #
89
+ # Extract data for handbooks
90
+ #
91
+ def extract_handbooks_data
92
+ data = fetch_json_data(HANDBOOKS_URL)
93
+ Util.info "Extracting handbooks data..."
94
+ data["pageProps"]["handbooks"]["nodes"].each do |entry|
95
+ handbook = entry["handbook"]
96
+ doctype = entry["slug"].match("-") ? "annex" : "handbook"
97
+
98
+ handbook["versions"].each do |version|
99
+ item = HandbookParser.new(version: version, entry: entry, doctype: doctype, errors: @errors).parse
100
+ save_document(item)
101
+ end
102
+ end
103
+ index.save
104
+ report_errors
105
+ end
106
+
107
+ #
108
+ # Extract data for technical reports
109
+ #
110
+ def extract_technical_reports_data
111
+ data = fetch_json_data(TECHNICAL_REPORTS_URL)
112
+ Util.info "Extracting technical reports data..."
113
+ data["pageProps"]["nodes"].map do |entry|
114
+ save_document(TechnicalReportParser.new(entry, @errors).parse)
115
+ end
116
+ index.save
117
+ report_errors
118
+ end
119
+
120
+ def save_document(item)
121
+ id = item.docidentifier.first.content
122
+ file = file_name id
123
+ if @files.include?(file)
124
+ Util.warn "File #{file} already exists, skipping.", key: id
125
+ else
126
+ File.write(file, serialize(item))
127
+ @files << file
128
+ pid = pubid id
129
+ if pid
130
+ index.add_or_update pid, file
131
+ else
132
+ Util.warn "Unparseable id `#{id}` was not indexed (#{file})", key: id
133
+ end
134
+ end
135
+ end
136
+
137
+ # Parse a canonical PLATEAU docidentifier into a Pubid::Plateau::Identifier,
138
+ # or nil if pubid can't parse it or it doesn't round-trip through
139
+ # `from_hash(to_hash)` — so a single bad id never aborts the crawl or
140
+ # corrupts index-v2 (the read side rejects an index whose rows don't
141
+ # deserialize). The parser emits canonical ids, so this should not skip
142
+ # anything; the guard is defensive.
143
+ def pubid(id)
144
+ pid = ::Pubid::Plateau.parse id
145
+ hash = pid.to_hash
146
+ return nil unless ::Pubid::Plateau::Identifier.from_hash(hash).to_hash == hash
147
+
148
+ pid
149
+ rescue StandardError
150
+ nil
151
+ end
152
+
153
+ def file_name(id)
154
+ name = id.gsub(/\s+/, "-").gsub(/[^\w-]+/, "").downcase
155
+ if id.match?(/民間活用編/)
156
+ name += "-private"
157
+ elsif id.match?(/公共活用編/)
158
+ name += "-public"
159
+ end
160
+ File.join(@output, "#{name}.#{@ext}")
161
+ end
162
+
163
+ def to_yaml(bib)
164
+ Item.to_yaml(bib)
165
+ end
166
+
167
+ def to_xml(bib)
168
+ Item.to_xml(bib, bibdata: true)
169
+ end
170
+
171
+ def to_bibxml(bib)
172
+ bib.to_rfcxml
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,7 @@
1
+ module Relaton
2
+ module Plateau
3
+ class Doctype < Bib::Doctype
4
+ attribute :content, :string, values: %w[handbook technical-report annex]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ require_relative "doctype"
2
+
3
+ module Relaton
4
+ module Plateau
5
+ class Ext < Bib::Ext
6
+ attribute :doctype, Doctype
7
+ attribute :stagename, Iso::Stagename
8
+ attribute :filesize, :integer
9
+
10
+ xml do
11
+ map_element "stagename", to: :stagename
12
+ map_element "filesize", to: :filesize
13
+ end
14
+
15
+ key_value do
16
+ map_element "stagename", to: :stagename
17
+ map_element "filesize", to: :filesize
18
+ end
19
+
20
+ def get_schema_version = Relaton.schema_versions["relaton-model-plateau"]
21
+ end
22
+ end
23
+ end