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,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "docidentifier"
4
+
5
+ module Relaton
6
+ module Jis
7
+ class ItemBase < Lutaml::Model::Serializable
8
+ include Bib::NamespaceHelper
9
+
10
+ attr_accessor :type
11
+
12
+ model ItemData
13
+
14
+ instance_exec(&Bib::ItemShared::ATTRIBUTES)
15
+ attribute :docidentifier, Docidentifier,
16
+ collection: true, initialize_empty: true
17
+ attribute :relation, Relation,
18
+ collection: true, initialize_empty: true
19
+
20
+ xml do
21
+ map_attribute "type", to: :type
22
+ instance_exec(&Bib::ItemShared::XML_BODY)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton
4
+ module Jis
5
+ class ItemData < Bib::ItemData
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "relaton/core/processor"
4
+
5
+ module Relaton
6
+ module Jis
7
+ class Processor < Relaton::Core::Processor
8
+ attr_reader :idtype
9
+
10
+ def initialize # rubocop:disable Lint/MissingSuper
11
+ @short = :relaton_jis
12
+ @prefix = "JIS"
13
+ @defaultprefix = %r{^(JIS|TR)\s}
14
+ @idtype = "JIS"
15
+ @datasets = %w[jis-webdesk]
16
+ end
17
+
18
+ def get(code, date, opts)
19
+ require_relative "../jis"
20
+ Bibliography.get(code, date, opts)
21
+ end
22
+
23
+ def fetch_data(_source, opts)
24
+ require_relative "data_fetcher"
25
+ DataFetcher.fetch(**opts)
26
+ end
27
+
28
+ def from_xml(xml)
29
+ require_relative "../jis"
30
+ Item.from_xml xml
31
+ end
32
+
33
+ def from_yaml(yaml)
34
+ require_relative "../jis"
35
+ Item.from_yaml yaml
36
+ end
37
+
38
+ def grammar_hash
39
+ require_relative "../jis"
40
+ Digest::MD5.hexdigest Relaton::VERSION
41
+ end
42
+
43
+ def threads
44
+ 3
45
+ end
46
+
47
+ def remove_index_file
48
+ require_relative "../jis"
49
+ Relaton::Index.find_or_create(
50
+ :jis, url: true, file: "#{INDEXFILE}.yaml"
51
+ ).remove_file
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "item_base"
4
+
5
+ module Relaton
6
+ module Jis
7
+ class Relation
8
+ attribute :bibitem, ItemBase
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,232 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ module Relaton
5
+ module Jis
6
+ class Scraper
7
+ ATTRS = %i[
8
+ title source abstract docidentifier docnumber date type language script
9
+ status contributor structuredidentifier ext
10
+ ].freeze
11
+
12
+ LANGS = { "和文" => { lang: "ja", script: "Jpan" },
13
+ "英訳" => { lang: "en", script: "Latn" } }.freeze
14
+
15
+ DATETYPES = { "発行年月日" => "issued", "確認年月日" => "confirmed" }.freeze
16
+ STATUSES = { "有効" => "valid", "廃止" => "withdrawn" }.freeze
17
+
18
+ def initialize(url, errors = {})
19
+ @url = url
20
+ @agent = Mechanize.new
21
+ @errors = errors
22
+ end
23
+
24
+ def fetch # rubocop:disable Metrics/MethodLength
25
+ @doc = @agent.get(@url).at "//div[@id='main']/section"
26
+ contributors = fetch_contributor
27
+ eg_contributor = fetch_editorialgroup_contributor
28
+ contributors << eg_contributor if eg_contributor
29
+ attrs = ATTRS.to_h { |attr| [attr, send("fetch_#{attr}")] }
30
+ attrs[:contributor] = contributors
31
+ ItemData.new(**attrs)
32
+ end
33
+
34
+ def fetch_title
35
+ result = { "ja" => "Jpan", "en" => "Latn" }.map.with_index do |(lang, script), i|
36
+ content = @doc.at("./h2/text()[#{i + 2}]").text.strip
37
+ Bib::Title.new content: content, language: lang, script: script
38
+ end
39
+ @errors[:title] &&= result.empty?
40
+ result
41
+ end
42
+
43
+ def fetch_source # rubocop:disable Metrics/MethodLength
44
+ src = Bib::Uri.new content: @url, type: "src"
45
+ uri = URI @url
46
+ domain = "#{uri.scheme}://#{uri.host}"
47
+ xpath = "./dl/dt[.='プレビュー']/following-sibling::dd[1]/a"
48
+ result = @doc.xpath(xpath).reduce([src]) do |mem, node|
49
+ href = "#{domain}#{node[:href]}"
50
+ mem << Bib::Uri.new(content: href, type: "pdf")
51
+ end
52
+ @errors[:source] &&= result.empty?
53
+ result
54
+ end
55
+
56
+ def fetch_abstract
57
+ result = @doc.xpath("//div[@id='honbun']").map do |node|
58
+ Bib::Abstract.new(
59
+ content: node.text.strip,
60
+ language: "ja", script: "Jpan"
61
+ )
62
+ end
63
+ @errors[:abstract] &&= result.empty?
64
+ result
65
+ end
66
+
67
+ def fetch_docidentifier
68
+ docid = document_id
69
+ @errors[:docidentifier] &&= docid.nil? || docid.empty?
70
+ return [] if docid.nil? || docid.empty?
71
+
72
+ [Docidentifier.new(
73
+ content: docid, type: "JIS", primary: true,
74
+ )]
75
+ end
76
+
77
+ def fetch_docnumber
78
+ docid = document_id
79
+ match = docid&.match(/^\w+\s(\w)\s?(\d+)/)
80
+ @errors[:docnumber] &&= match.nil?
81
+ return unless match
82
+
83
+ "#{match[1]}#{match[2]}"
84
+ end
85
+
86
+ def document_id
87
+ @document_id ||= @doc.at("./h2/text()[1]")&.text&.strip
88
+ end
89
+
90
+ def fetch_date
91
+ result = DATETYPES.each_with_object([]) do |(key, type), a|
92
+ node = @doc.at("./div/div/div/p/text()[contains(.,'#{key}')]")
93
+ next unless node
94
+
95
+ at = node.text.match(/\d{4}-\d{2}-\d{2}/).to_s
96
+ next if at.empty?
97
+
98
+ a << Bib::Date.new(type: type, at: at)
99
+ end
100
+ @errors[:date] &&= result.empty?
101
+ result
102
+ end
103
+
104
+ def fetch_type
105
+ "standard"
106
+ end
107
+
108
+ def fetch_language
109
+ langs_scripts.map { |l| l[:lang] }
110
+ end
111
+
112
+ def fetch_script
113
+ langs_scripts.map { |l| l[:script] }
114
+ end
115
+
116
+ def langs_scripts # rubocop:disable Metrics/MethodLength
117
+ @langs_scripts ||= begin
118
+ result = LANGS.each_with_object([]) do |(key, lang), a|
119
+ l = @doc.at(
120
+ "./div/div/div[@class='blockContentFile']/div/div/p[1]" \
121
+ "/span[contains(.,'#{key}')]/following-sibling::span",
122
+ )
123
+ next if l.nil? || l.text.strip == "-"
124
+
125
+ a << lang
126
+ end
127
+ @errors[:language] &&= result.empty?
128
+ result
129
+ end
130
+ end
131
+
132
+ def fetch_status
133
+ xpath = "./div/div/div/p/text()[contains(.,'状態')]" \
134
+ "/following-sibling::span"
135
+ st = @doc.at(xpath)
136
+ status_val = STATUSES[st&.text&.strip]
137
+ @errors[:status] &&= status_val.nil?
138
+ return unless status_val
139
+
140
+ stage = Bib::Status::Stage.new(content: status_val)
141
+ Bib::Status.new(stage: stage)
142
+ end
143
+
144
+ def fetch_doctype # rubocop:disable Metrics/CyclomaticComplexity
145
+ type = case document_id
146
+ when /JIS\s[A-Z]\s[\w-]+:\d{4}\/AMENDMENT/ then "amendment"
147
+ when /JIS\s[A-Z]\s[\w-]+/ then "japanese-industrial-standard"
148
+ when /TR[\s\/][\w-]+/ then "technical-report"
149
+ when /TS[\s\/][\w-]+/ then "technical-specification"
150
+ end
151
+ @errors[:doctype] &&= type.nil?
152
+ return unless type
153
+
154
+ Doctype.new content: type
155
+ end
156
+
157
+ def fetch_ics
158
+ td = @doc.at("./table/tr[th[.='ICS']]/td")
159
+ @errors[:ics] &&= td.nil?
160
+ return [] unless td
161
+
162
+ td.text.strip.split.map { |code| Bib::ICS.new code: code }
163
+ end
164
+
165
+ def fetch_contributor
166
+ authorizer = create_contrib(
167
+ "一般財団法人 日本規格協会", "authorizer"
168
+ )
169
+ xpath = "./table/tr[th[.='原案作成団体']]/td"
170
+ result = @doc.xpath(xpath).reduce([authorizer]) do |a, node|
171
+ a << create_contrib(node.text.strip, "author")
172
+ a << create_contrib(node.text.strip, "publisher")
173
+ end
174
+ @errors[:contributor] &&= result.empty?
175
+ result
176
+ end
177
+
178
+ def create_contrib(name, role)
179
+ org = Bib::Organization.new name: create_orgname(name)
180
+ role_obj = Bib::Contributor::Role.new(type: role)
181
+ Bib::Contributor.new organization: org, role: [role_obj]
182
+ end
183
+
184
+ def create_orgname(name)
185
+ tls = Bib::TypedLocalizedString
186
+ orgname = [tls.new(content: name, language: "ja", script: "Jpan")]
187
+ if name.include?("日本規格協会")
188
+ orgname << tls.new(
189
+ content: "Japanese Industrial Standards",
190
+ language: "en", script: "Latn"
191
+ )
192
+ end
193
+ orgname
194
+ end
195
+
196
+ def fetch_editorialgroup_contributor # rubocop:disable Metrics/MethodLength
197
+ node = @doc.at("./table/tr[th[.='原案作成団体']]/td")
198
+ @errors[:editorialgroup] &&= node.nil?
199
+ return unless node
200
+
201
+ subdivision = Bib::Subdivision.new(
202
+ type: "technical-committee",
203
+ name: [Bib::TypedLocalizedString.new(content: node.text.strip)],
204
+ )
205
+ desc = Bib::LocalizedMarkedUpString.new(content: "committee")
206
+ role = Bib::Contributor::Role.new(
207
+ type: "author", description: [desc],
208
+ )
209
+ org = Bib::Organization.new(
210
+ name: [], subdivision: [subdivision],
211
+ )
212
+ Bib::Contributor.new(role: [role], organization: org)
213
+ end
214
+
215
+ def fetch_structuredidentifier
216
+ StructuredIdentifier.new(
217
+ project_number: Iso::ProjectNumber.new(content: fetch_docnumber),
218
+ type: "JIS",
219
+ )
220
+ end
221
+
222
+ def fetch_ext
223
+ Ext.new(
224
+ doctype: fetch_doctype,
225
+ flavor: "jis",
226
+ ics: fetch_ics,
227
+ structuredidentifier: fetch_structuredidentifier,
228
+ )
229
+ end
230
+ end
231
+ end
232
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton
4
+ module Jis
5
+ class StructuredIdentifier < Iso::StructuredIdentifier
6
+ def to_all_parts!
7
+ super
8
+ pn = project_number
9
+ pn.content = "#{pn.content} (all parts)" if pn&.content
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Jis
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-jis".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+ require "mechanize"
5
+ require "pubid"
6
+ require "relaton/iso"
7
+ require "relaton/index"
8
+ require_relative "version"
9
+ require_relative "jis/util"
10
+ require_relative "jis/item"
11
+ require_relative "jis/bibitem"
12
+ require_relative "jis/bibdata"
13
+ require_relative "jis/hit_collection"
14
+ require_relative "jis/bibliography"
15
+
16
+ module Relaton
17
+ module Jis
18
+ # The pubid index. relaton-data-jis rebuilds the legacy index-v1 from data/.
19
+ INDEXFILE = "index-v2"
20
+
21
+ class Error < StandardError; end
22
+
23
+ # Returns hash of XML reammar
24
+ # @return [String]
25
+ def self.grammar_hash
26
+ # gem_path = File.expand_path "..", __dir__
27
+ # grammars_path = File.join gem_path, "grammars", "*"
28
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
29
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,143 @@
1
+ require "net/http"
2
+ require "json"
3
+
4
+ module Relaton
5
+ module Logger
6
+ module Channels
7
+ #
8
+ # This class is used to report the log content as a GitHub issue in the
9
+ # repository specified in the initializer.
10
+ # The log content is stored in the issue body. Only unique log messages
11
+ # are stored. When an open issue with the same title already exists, the
12
+ # log is added to it as a comment rather than opening a duplicate.
13
+ # Token is required to create an issue. It should be stored in the
14
+ # environment variable GITHUB_TOKEN.
15
+ # To create an issue, call the create_issue method after all log messages
16
+ # are written.
17
+ #
18
+ class GhIssue
19
+ #
20
+ # Create a new instance of the class.
21
+ #
22
+ # @param [String] repo owner/repo name
23
+ # @param [String] title title of the issue
24
+ #
25
+ def initialize(repo, title)
26
+ @repo = repo
27
+ @title = title
28
+ @log = Set.new
29
+ puts "GITHUB_TOKEN is not set!" if ENV["GITHUB_TOKEN"].nil?
30
+ end
31
+
32
+ def write(string)
33
+ @log << string
34
+ end
35
+
36
+ def close
37
+ end
38
+
39
+ # Report the collected log. A crawler runs on a schedule, so creating a
40
+ # fresh issue every time would pile up duplicates of the same standing
41
+ # report; when an open issue with this title already exists, add the run's
42
+ # log as a comment on it instead.
43
+ def create_issue
44
+ return if @log.empty? || ENV["GITHUB_TOKEN"].nil?
45
+
46
+ if (number = open_issue_number)
47
+ report_response post_comment(number), "Issue #{number} commented!", 201
48
+ else
49
+ report_response post_issue, "Issue created!", 201
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def report_response(responce, success_message, success_code)
56
+ if responce.code.to_i == success_code
57
+ puts success_message
58
+ else
59
+ puts "Failed to report issue: #{responce.code} #{responce.message}\n#{responce.body}"
60
+ end
61
+ end
62
+
63
+ # Number of the open issue with exactly this title, or nil. Any failure
64
+ # (network, rate limit, missing search scope) degrades to nil, so the
65
+ # worst case is the previous behaviour — a new issue.
66
+ def open_issue_number
67
+ query = "repo:#{@repo} is:issue is:open in:title \"#{@title}\""
68
+ uri = URI("https://api.github.com/search/issues")
69
+ uri.query = URI.encode_www_form(q: query, per_page: 100)
70
+ responce = get(uri)
71
+ return nil unless responce.code.to_i == 200
72
+
73
+ items = JSON.parse(responce.body)["items"] || []
74
+ items.find { |i| i["title"] == @title }&.fetch("number", nil)
75
+ rescue StandardError => e
76
+ puts "Failed to search for an open `#{@title}` issue: #{e.message}"
77
+ nil
78
+ end
79
+
80
+ def get(uri)
81
+ http = Net::HTTP.new(uri.host, uri.port)
82
+ http.use_ssl = true
83
+ http.request(Net::HTTP::Get.new(uri.request_uri, headers))
84
+ end
85
+
86
+ def post(uri, body)
87
+ http = Net::HTTP.new(uri.host, uri.port)
88
+ http.use_ssl = true
89
+
90
+ request = Net::HTTP::Post.new(uri.request_uri, headers)
91
+ request.body = body.to_json
92
+
93
+ http.request(request)
94
+ end
95
+
96
+ def post_issue
97
+ post URI("https://api.github.com/repos/#{@repo}/issues"), issue_body
98
+ end
99
+
100
+ def post_comment(number)
101
+ post URI("https://api.github.com/repos/#{@repo}/issues/#{number}/comments"),
102
+ { body: body }
103
+ end
104
+
105
+ def issue_body
106
+ { title: @title, body: body }
107
+ end
108
+
109
+ # GitHub rejects an issue or comment body longer than this with a 422,
110
+ # which loses the whole report — and these reports get long (a crawl can
111
+ # log hundreds of ids it could not index). Keep as many whole lines as
112
+ # fit and say how many were left out.
113
+ MAX_BODY = 65_536
114
+ TRUNCATION_ROOM = 200
115
+
116
+ def body
117
+ lines = @log.to_a
118
+ text = lines.join("\n")
119
+ return text if text.length <= MAX_BODY
120
+
121
+ kept = []
122
+ size = 0
123
+ lines.each do |line|
124
+ break if size + line.length + 1 > MAX_BODY - TRUNCATION_ROOM
125
+
126
+ kept << line
127
+ size += line.length + 1
128
+ end
129
+ "#{kept.join("\n")}\n\n…and #{lines.size - kept.size} more (see the run log)"
130
+ end
131
+
132
+ def headers
133
+ {
134
+ "Content-Type" => "application/json",
135
+ "Accept" => "application/vnd.github+json",
136
+ "Authorization" => "Bearer #{ENV['GITHUB_TOKEN']}",
137
+ "X-GitHub-Api-Version" => "2022-11-28",
138
+ }
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,34 @@
1
+ module Relaton::Logger
2
+ module Config
3
+ def configure
4
+ yield configuration if block_given?
5
+ end
6
+
7
+ def configuration
8
+ @configuration ||= self::Configuration.new
9
+ end
10
+ end
11
+
12
+ class Configuration
13
+ # @return [Array<Relaton::Logger::Log>] List of loggers
14
+ attr_reader :logger_pool
15
+
16
+ def initialize
17
+ @logger_pool ||= Pool.new
18
+ @logger_pool[:default] = Log.new($stderr, levels: %i[info warn error fatal])
19
+ end
20
+
21
+ #
22
+ # Replace the current list of loggers with the given list of loggers.
23
+ #
24
+ # @param [Array<Relaton::Logger::Log>] loggers list of loggers
25
+ #
26
+ # @return [void]
27
+ #
28
+ def logger_pool=(loggers)
29
+ @logger_pool.loggers = loggers
30
+ end
31
+ end
32
+
33
+ extend Config
34
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton::Logger
2
+ class FormatterJSON < ::Logger::Formatter
3
+ def call(severity, _datetime, progname, msg, **args)
4
+ hash = { prog: progname, message: msg, severity: severity }.merge(args)
5
+ "#{hash.to_json}\n"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,12 @@
1
+ module Relaton::Logger
2
+ class FormatterString < ::Logger::Formatter
3
+ def call(severity, _datetime, progname, msg, **args)
4
+ output = []
5
+ output << "[#{progname}]" if progname
6
+ output << "#{severity}:"
7
+ output << "(#{args[:key]})" if args[:key]
8
+ output << "#{msg}\n"
9
+ output.join " "
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,64 @@
1
+ module Relaton::Logger
2
+ class Log < ::Logger
3
+ attr_reader :levels
4
+
5
+ def initialize(logdev, shift_age = 0, shift_size = 1_048_576, **args) # rubocop:disable Lint/MissingSuper
6
+ self.levels = args.delete(:levels) || [UNKNOWN, FATAL, ERROR, WARN, INFO]
7
+ self.level = @levels.min
8
+ self.progname = args.delete(:progname)
9
+ @default_formatter = FormatterString.new
10
+ self.datetime_format = args.delete(:datetime_format)
11
+ self.formatter = args.delete(:formatter)
12
+ self.formatter = self.formatter.new if self.formatter.is_a? Class
13
+ @logdev = nil
14
+ @level_override = {}
15
+ if logdev && logdev != File::NULL
16
+ @logdev = LogDevice.new(logdev, shift_age: shift_age, shift_size: shift_size, **args)
17
+ end
18
+ end
19
+
20
+ def levels=(levels)
21
+ @levels = Set.new levels.map { |l| Severity.coerce l }
22
+ self.level = @levels.min
23
+ end
24
+
25
+ def add_level(level)
26
+ @levels << Severity.coerce(level)
27
+ self.level = @levels.min
28
+ end
29
+
30
+ def remove_level(level)
31
+ @levels.delete Severity.coerce(level)
32
+ self.level = @levels.min
33
+ end
34
+
35
+ def unknown(message = nil, progname = nil, **args, &block)
36
+ level = Object.const_get "Logger::#{__callee__.to_s.upcase}"
37
+ add(level, message, progname, **args, &block)
38
+ end
39
+
40
+ %i[fatal error warn info debug].each { |m| alias_method m, :unknown }
41
+
42
+ def add(severity, message = nil, progname = nil, **args) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
43
+ severity ||= UNKNOWN
44
+ return true if @logdev.nil? || !@levels.include?(severity)
45
+
46
+ if block_given?
47
+ progname ||= message || @progname
48
+ message = yield
49
+ else
50
+ progname ||= @progname
51
+ end
52
+ @logdev.write format_message(format_severity(severity), Time.now, progname, message, **args)
53
+ true
54
+ end
55
+
56
+ def format_message(severity, datetime, progname, msg, **args)
57
+ (@formatter || @default_formatter).call(severity, datetime, progname, msg, **args)
58
+ end
59
+
60
+ def truncate
61
+ @logdev.truncate
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton::Logger
4
+ class LogDevice < ::Logger::LogDevice
5
+ #
6
+ # @param header [Boolean, nil] whether to add header to log file
7
+ #
8
+ def initialize(logdev, **args)
9
+ # TODO: the header is not used yet, maybe it will be used in the future for not JSON formatters
10
+ @header = args.delete :header
11
+ super
12
+ end
13
+
14
+ def add_log_header(file)
15
+ return unless @header
16
+
17
+ super
18
+ end
19
+
20
+ def truncate
21
+ return unless @dev.respond_to? :truncate
22
+
23
+ @dev.truncate 0
24
+ @dev.rewind
25
+ end
26
+ end
27
+ end