relaton 2.1.0 → 3.0.0.pre.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. checksums.yaml +4 -4
  2. data/{docs/README.adoc → README.adoc} +109 -38
  3. data/lib/relaton/3gpp/bibdata.rb +9 -0
  4. data/lib/relaton/3gpp/bibitem.rb +9 -0
  5. data/lib/relaton/3gpp/bibliography.rb +48 -0
  6. data/lib/relaton/3gpp/data_fetcher.rb +255 -0
  7. data/lib/relaton/3gpp/doctype.rb +9 -0
  8. data/lib/relaton/3gpp/ext.rb +31 -0
  9. data/lib/relaton/3gpp/item.rb +12 -0
  10. data/lib/relaton/3gpp/item_data.rb +15 -0
  11. data/lib/relaton/3gpp/parser.rb +400 -0
  12. data/lib/relaton/3gpp/processor.rb +68 -0
  13. data/lib/relaton/3gpp/release.rb +34 -0
  14. data/lib/relaton/3gpp/util.rb +8 -0
  15. data/lib/relaton/3gpp.rb +25 -0
  16. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  17. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  18. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  19. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  20. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  21. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
  22. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  23. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
  24. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  25. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  26. data/lib/relaton/bib/hash_parser_v1.rb +767 -0
  27. data/lib/relaton/bib/item_data.rb +229 -0
  28. data/lib/relaton/bib/model/abstract.rb +16 -0
  29. data/lib/relaton/bib/model/address.rb +22 -0
  30. data/lib/relaton/bib/model/affiliation.rb +16 -0
  31. data/lib/relaton/bib/model/bibdata.rb +11 -0
  32. data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
  33. data/lib/relaton/bib/model/bibitem.rb +11 -0
  34. data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
  35. data/lib/relaton/bib/model/contact.rb +18 -0
  36. data/lib/relaton/bib/model/contribution_info.rb +15 -0
  37. data/lib/relaton/bib/model/contributor.rb +29 -0
  38. data/lib/relaton/bib/model/copyright.rb +27 -0
  39. data/lib/relaton/bib/model/date.rb +31 -0
  40. data/lib/relaton/bib/model/depiction.rb +16 -0
  41. data/lib/relaton/bib/model/docidentifier.rb +34 -0
  42. data/lib/relaton/bib/model/doctype.rb +14 -0
  43. data/lib/relaton/bib/model/edition.rb +14 -0
  44. data/lib/relaton/bib/model/ext.rb +39 -0
  45. data/lib/relaton/bib/model/extent.rb +16 -0
  46. data/lib/relaton/bib/model/formattedref.rb +43 -0
  47. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  48. data/lib/relaton/bib/model/fullname.rb +11 -0
  49. data/lib/relaton/bib/model/ics.rb +49 -0
  50. data/lib/relaton/bib/model/image.rb +28 -0
  51. data/lib/relaton/bib/model/item.rb +96 -0
  52. data/lib/relaton/bib/model/item_base.rb +20 -0
  53. data/lib/relaton/bib/model/item_shared.rb +88 -0
  54. data/lib/relaton/bib/model/keyword.rb +30 -0
  55. data/lib/relaton/bib/model/locality.rb +18 -0
  56. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  57. data/lib/relaton/bib/model/localized_string.rb +48 -0
  58. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  59. data/lib/relaton/bib/model/logo.rb +14 -0
  60. data/lib/relaton/bib/model/medium.rb +22 -0
  61. data/lib/relaton/bib/model/note.rb +16 -0
  62. data/lib/relaton/bib/model/organization.rb +13 -0
  63. data/lib/relaton/bib/model/organization_type.rb +42 -0
  64. data/lib/relaton/bib/model/person.rb +36 -0
  65. data/lib/relaton/bib/model/phone.rb +14 -0
  66. data/lib/relaton/bib/model/place.rb +33 -0
  67. data/lib/relaton/bib/model/price.rb +14 -0
  68. data/lib/relaton/bib/model/relation.rb +43 -0
  69. data/lib/relaton/bib/model/series.rb +34 -0
  70. data/lib/relaton/bib/model/size.rb +23 -0
  71. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  72. data/lib/relaton/bib/model/status.rb +27 -0
  73. data/lib/relaton/bib/model/structured_identifier.rb +48 -0
  74. data/lib/relaton/bib/model/subdivision.rb +16 -0
  75. data/lib/relaton/bib/model/title.rb +56 -0
  76. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  77. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  78. data/lib/relaton/bib/model/uri.rb +18 -0
  79. data/lib/relaton/bib/model/validity.rb +16 -0
  80. data/lib/relaton/bib/model/version.rb +43 -0
  81. data/lib/relaton/bib/namespace_helper.rb +21 -0
  82. data/lib/relaton/bib/sanitizer.rb +68 -0
  83. data/lib/relaton/bib/util.rb +18 -0
  84. data/lib/relaton/bib/versions.json +35 -0
  85. data/lib/relaton/bib.rb +48 -0
  86. data/lib/relaton/bipm/bibliography.rb +82 -0
  87. data/lib/relaton/bipm/converter/asciibib.rb +64 -0
  88. data/lib/relaton/bipm/data_fetcher.rb +57 -0
  89. data/lib/relaton/bipm/data_outcomes_parser.rb +657 -0
  90. data/lib/relaton/bipm/id_parser.rb +277 -0
  91. data/lib/relaton/bipm/item_data.rb +47 -0
  92. data/lib/relaton/bipm/model/bibdata.rb +9 -0
  93. data/lib/relaton/bipm/model/bibitem.rb +9 -0
  94. data/lib/relaton/bipm/model/comment_period.rb +13 -0
  95. data/lib/relaton/bipm/model/doctype.rb +12 -0
  96. data/lib/relaton/bipm/model/ext.rb +38 -0
  97. data/lib/relaton/bipm/model/item.rb +11 -0
  98. data/lib/relaton/bipm/model/structured_identifier.rb +15 -0
  99. data/lib/relaton/bipm/processor.rb +69 -0
  100. data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
  101. data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +174 -0
  102. data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
  103. data/lib/relaton/bipm/si_brochure_parser.rb +186 -0
  104. data/lib/relaton/bipm/util.rb +8 -0
  105. data/lib/relaton/bipm.rb +32 -0
  106. data/lib/relaton/bsi/bibliography.rb +124 -0
  107. data/lib/relaton/bsi/hit.rb +14 -0
  108. data/lib/relaton/bsi/hit_collection.rb +114 -0
  109. data/lib/relaton/bsi/item_data.rb +13 -0
  110. data/lib/relaton/bsi/model/bibdata.rb +8 -0
  111. data/lib/relaton/bsi/model/bibitem.rb +8 -0
  112. data/lib/relaton/bsi/model/docidentifier.rb +9 -0
  113. data/lib/relaton/bsi/model/doctype.rb +14 -0
  114. data/lib/relaton/bsi/model/ext.rb +17 -0
  115. data/lib/relaton/bsi/model/item.rb +17 -0
  116. data/lib/relaton/bsi/model/item_base.rb +22 -0
  117. data/lib/relaton/bsi/model/relation.rb +9 -0
  118. data/lib/relaton/bsi/processor.rb +42 -0
  119. data/lib/relaton/bsi/schema.json +24882 -0
  120. data/lib/relaton/bsi/scraper.rb +288 -0
  121. data/lib/relaton/bsi/util.rb +8 -0
  122. data/lib/relaton/bsi.rb +25 -0
  123. data/lib/relaton/calconnect/bibliography.rb +95 -0
  124. data/lib/relaton/calconnect/data_fetcher.rb +106 -0
  125. data/lib/relaton/calconnect/hit.rb +14 -0
  126. data/lib/relaton/calconnect/hit_collection.rb +84 -0
  127. data/lib/relaton/calconnect/item_data.rb +12 -0
  128. data/lib/relaton/calconnect/model/bibdata.rb +8 -0
  129. data/lib/relaton/calconnect/model/bibitem.rb +8 -0
  130. data/lib/relaton/calconnect/model/doctype.rb +11 -0
  131. data/lib/relaton/calconnect/model/ext.rb +11 -0
  132. data/lib/relaton/calconnect/model/item.rb +13 -0
  133. data/lib/relaton/calconnect/processor.rb +66 -0
  134. data/lib/relaton/calconnect/scraper.rb +87 -0
  135. data/lib/relaton/calconnect/util.rb +8 -0
  136. data/lib/relaton/calconnect.rb +26 -0
  137. data/lib/relaton/ccsds/bibliography.rb +63 -0
  138. data/lib/relaton/ccsds/data/fetcher.rb +247 -0
  139. data/lib/relaton/ccsds/data/iso_references.rb +30 -0
  140. data/lib/relaton/ccsds/data/parser.rb +194 -0
  141. data/lib/relaton/ccsds/hit.rb +24 -0
  142. data/lib/relaton/ccsds/hit_collection.rb +42 -0
  143. data/lib/relaton/ccsds/item_data.rb +9 -0
  144. data/lib/relaton/ccsds/model/bibdata.rb +8 -0
  145. data/lib/relaton/ccsds/model/bibitem.rb +8 -0
  146. data/lib/relaton/ccsds/model/doctype.rb +9 -0
  147. data/lib/relaton/ccsds/model/ext.rb +19 -0
  148. data/lib/relaton/ccsds/model/item.rb +13 -0
  149. data/lib/relaton/ccsds/processor.rb +68 -0
  150. data/lib/relaton/ccsds/util.rb +10 -0
  151. data/lib/relaton/ccsds.rb +33 -0
  152. data/lib/relaton/cen/bibliography.rb +121 -0
  153. data/lib/relaton/cen/committees.yaml +66 -0
  154. data/lib/relaton/cen/hit.rb +16 -0
  155. data/lib/relaton/cen/hit_collection.rb +68 -0
  156. data/lib/relaton/cen/item_data.rb +7 -0
  157. data/lib/relaton/cen/model/bibdata.rb +8 -0
  158. data/lib/relaton/cen/model/bibitem.rb +8 -0
  159. data/lib/relaton/cen/model/docidentifier.rb +9 -0
  160. data/lib/relaton/cen/model/ext.rb +11 -0
  161. data/lib/relaton/cen/model/item.rb +14 -0
  162. data/lib/relaton/cen/model/structured_identifier.rb +9 -0
  163. data/lib/relaton/cen/processor.rb +40 -0
  164. data/lib/relaton/cen/scraper.rb +210 -0
  165. data/lib/relaton/cen/util.rb +8 -0
  166. data/lib/relaton/cen.rb +29 -0
  167. data/lib/relaton/cie/bibdata.rb +8 -0
  168. data/lib/relaton/cie/bibitem.rb +8 -0
  169. data/lib/relaton/cie/bibliography.rb +31 -0
  170. data/lib/relaton/cie/data_fetcher.rb +355 -0
  171. data/lib/relaton/cie/ext.rb +7 -0
  172. data/lib/relaton/cie/item.rb +11 -0
  173. data/lib/relaton/cie/item_data.rb +6 -0
  174. data/lib/relaton/cie/processor.rb +66 -0
  175. data/lib/relaton/cie/scrapper.rb +39 -0
  176. data/lib/relaton/cie/util.rb +8 -0
  177. data/lib/relaton/cie.rb +28 -0
  178. data/lib/relaton/core/array_wrapper.rb +20 -0
  179. data/lib/relaton/core/data_fetcher.rb +97 -0
  180. data/lib/relaton/core/date_parser.rb +42 -0
  181. data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
  182. data/lib/relaton/core/hit.rb +49 -0
  183. data/lib/relaton/core/hit_collection.rb +118 -0
  184. data/lib/relaton/core/processor.rb +48 -0
  185. data/lib/relaton/core/workers_pool.rb +45 -0
  186. data/lib/relaton/core.rb +9 -0
  187. data/lib/relaton/db/cache.rb +232 -0
  188. data/lib/relaton/db/config.rb +24 -0
  189. data/lib/relaton/db/registry.rb +119 -0
  190. data/lib/relaton/db/util.rb +9 -0
  191. data/lib/relaton/db/workers_pool.rb +22 -0
  192. data/lib/relaton/db.rb +20 -206
  193. data/lib/relaton/doi/crossref.rb +72 -0
  194. data/lib/relaton/doi/parser.rb +827 -0
  195. data/lib/relaton/doi/processor.rb +65 -0
  196. data/lib/relaton/doi/util.rb +8 -0
  197. data/lib/relaton/doi.rb +20 -0
  198. data/lib/relaton/ecma/bibdata.rb +8 -0
  199. data/lib/relaton/ecma/bibitem.rb +8 -0
  200. data/lib/relaton/ecma/bibliography.rb +81 -0
  201. data/lib/relaton/ecma/data_fetcher.rb +103 -0
  202. data/lib/relaton/ecma/data_parser.rb +49 -0
  203. data/lib/relaton/ecma/edition_parser.rb +80 -0
  204. data/lib/relaton/ecma/ext.rb +7 -0
  205. data/lib/relaton/ecma/item.rb +11 -0
  206. data/lib/relaton/ecma/item_data.rb +6 -0
  207. data/lib/relaton/ecma/memento_parser.rb +60 -0
  208. data/lib/relaton/ecma/page_fetcher.rb +27 -0
  209. data/lib/relaton/ecma/parser_common.rb +33 -0
  210. data/lib/relaton/ecma/processor.rb +66 -0
  211. data/lib/relaton/ecma/standard_parser.rb +134 -0
  212. data/lib/relaton/ecma/util.rb +8 -0
  213. data/lib/relaton/ecma.rb +24 -0
  214. data/lib/relaton/etsi/bibdata.rb +10 -0
  215. data/lib/relaton/etsi/bibitem.rb +10 -0
  216. data/lib/relaton/etsi/bibliography.rb +46 -0
  217. data/lib/relaton/etsi/data_fetcher.rb +128 -0
  218. data/lib/relaton/etsi/data_parser.rb +208 -0
  219. data/lib/relaton/etsi/doctype.rb +30 -0
  220. data/lib/relaton/etsi/ext.rb +31 -0
  221. data/lib/relaton/etsi/item.rb +15 -0
  222. data/lib/relaton/etsi/item_data.rb +6 -0
  223. data/lib/relaton/etsi/processor.rb +69 -0
  224. data/lib/relaton/etsi/pubid.rb +37 -0
  225. data/lib/relaton/etsi/status.rb +13 -0
  226. data/lib/relaton/etsi/util.rb +8 -0
  227. data/lib/relaton/etsi.rb +25 -0
  228. data/lib/relaton/gb/bibdata.rb +8 -0
  229. data/lib/relaton/gb/bibitem.rb +8 -0
  230. data/lib/relaton/gb/bibliography.rb +145 -0
  231. data/lib/relaton/gb/ccs.rb +14 -0
  232. data/lib/relaton/gb/committee.rb +13 -0
  233. data/lib/relaton/gb/docidentifier.rb +23 -0
  234. data/lib/relaton/gb/doctype.rb +9 -0
  235. data/lib/relaton/gb/ext.rb +36 -0
  236. data/lib/relaton/gb/gb_scraper.rb +61 -0
  237. data/lib/relaton/gb/gb_type.rb +20 -0
  238. data/lib/relaton/gb/hit.rb +48 -0
  239. data/lib/relaton/gb/hit_collection.rb +19 -0
  240. data/lib/relaton/gb/item.rb +13 -0
  241. data/lib/relaton/gb/item_data.rb +6 -0
  242. data/lib/relaton/gb/processor.rb +46 -0
  243. data/lib/relaton/gb/project_number.rb +38 -0
  244. data/lib/relaton/gb/scraper.rb +204 -0
  245. data/lib/relaton/gb/sec_scraper.rb +92 -0
  246. data/lib/relaton/gb/stage_name.rb +13 -0
  247. data/lib/relaton/gb/structured_identifier.rb +26 -0
  248. data/lib/relaton/gb/t_scraper.rb +126 -0
  249. data/lib/relaton/gb/util.rb +8 -0
  250. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  251. data/lib/relaton/gb.rb +33 -0
  252. data/lib/relaton/iana/bibdata.rb +8 -0
  253. data/lib/relaton/iana/bibitem.rb +8 -0
  254. data/lib/relaton/iana/bibliography.rb +47 -0
  255. data/lib/relaton/iana/data_fetcher.rb +71 -0
  256. data/lib/relaton/iana/item.rb +7 -0
  257. data/lib/relaton/iana/item_data.rb +6 -0
  258. data/lib/relaton/iana/parser.rb +146 -0
  259. data/lib/relaton/iana/processor.rb +68 -0
  260. data/lib/relaton/iana/util.rb +8 -0
  261. data/lib/relaton/iana.rb +29 -0
  262. data/lib/relaton/iec/bibliography.rb +283 -0
  263. data/lib/relaton/iec/data_fetcher.rb +216 -0
  264. data/lib/relaton/iec/data_parser.rb +391 -0
  265. data/lib/relaton/iec/hit.rb +26 -0
  266. data/lib/relaton/iec/hit_collection.rb +138 -0
  267. data/lib/relaton/iec/item_data.rb +7 -0
  268. data/lib/relaton/iec/model/bibdata.rb +8 -0
  269. data/lib/relaton/iec/model/bibitem.rb +8 -0
  270. data/lib/relaton/iec/model/docidentifier.rb +131 -0
  271. data/lib/relaton/iec/model/doctype.rb +12 -0
  272. data/lib/relaton/iec/model/ext.rb +53 -0
  273. data/lib/relaton/iec/model/item.rb +20 -0
  274. data/lib/relaton/iec/model/item_base.rb +12 -0
  275. data/lib/relaton/iec/model/relation.rb +7 -0
  276. data/lib/relaton/iec/model/stage_name.rb +13 -0
  277. data/lib/relaton/iec/processor.rb +73 -0
  278. data/lib/relaton/iec/statuses.yml +199 -0
  279. data/lib/relaton/iec/util.rb +8 -0
  280. data/lib/relaton/iec.rb +98 -0
  281. data/lib/relaton/ieee/balloting_group.rb +13 -0
  282. data/lib/relaton/ieee/bibdata.rb +8 -0
  283. data/lib/relaton/ieee/bibitem.rb +8 -0
  284. data/lib/relaton/ieee/bibliography.rb +51 -0
  285. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  286. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  287. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  288. data/lib/relaton/ieee/data_fetcher.rb +630 -0
  289. data/lib/relaton/ieee/doctype.rb +9 -0
  290. data/lib/relaton/ieee/editorial_group.rb +19 -0
  291. data/lib/relaton/ieee/ext.rb +36 -0
  292. data/lib/relaton/ieee/idams_parser.rb +323 -0
  293. data/lib/relaton/ieee/item.rb +11 -0
  294. data/lib/relaton/ieee/item_data.rb +7 -0
  295. data/lib/relaton/ieee/processor.rb +68 -0
  296. data/lib/relaton/ieee/pub_id.rb +161 -0
  297. data/lib/relaton/ieee/rawbib_id_parser.rb +548 -0
  298. data/lib/relaton/ieee/util.rb +8 -0
  299. data/lib/relaton/ieee.rb +29 -0
  300. data/lib/relaton/ietf/bibdata.rb +8 -0
  301. data/lib/relaton/ietf/bibitem.rb +8 -0
  302. data/lib/relaton/ietf/bibliography.rb +35 -0
  303. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  304. data/lib/relaton/ietf/data_fetcher.rb +278 -0
  305. data/lib/relaton/ietf/doctype.rb +9 -0
  306. data/lib/relaton/ietf/ext.rb +63 -0
  307. data/lib/relaton/ietf/item.rb +16 -0
  308. data/lib/relaton/ietf/item_base.rb +18 -0
  309. data/lib/relaton/ietf/item_data.rb +6 -0
  310. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  311. data/lib/relaton/ietf/processor.rb +68 -0
  312. data/lib/relaton/ietf/relation.rb +9 -0
  313. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  314. data/lib/relaton/ietf/rfc/author.rb +21 -0
  315. data/lib/relaton/ietf/rfc/entry.rb +410 -0
  316. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  317. data/lib/relaton/ietf/rfc/format.rb +19 -0
  318. data/lib/relaton/ietf/rfc/index.rb +46 -0
  319. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  320. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  321. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  322. data/lib/relaton/ietf/scraper.rb +68 -0
  323. data/lib/relaton/ietf/util.rb +8 -0
  324. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  325. data/lib/relaton/ietf.rb +27 -0
  326. data/lib/relaton/iho/bibdata.rb +8 -0
  327. data/lib/relaton/iho/bibitem.rb +8 -0
  328. data/lib/relaton/iho/bibliography.rb +114 -0
  329. data/lib/relaton/iho/comment_period.rb +13 -0
  330. data/lib/relaton/iho/docidentifier.rb +31 -0
  331. data/lib/relaton/iho/doctype.rb +10 -0
  332. data/lib/relaton/iho/ext.rb +20 -0
  333. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  334. data/lib/relaton/iho/item.rb +20 -0
  335. data/lib/relaton/iho/item_base.rb +18 -0
  336. data/lib/relaton/iho/item_data.rb +6 -0
  337. data/lib/relaton/iho/processor.rb +54 -0
  338. data/lib/relaton/iho/relation.rb +9 -0
  339. data/lib/relaton/iho/structured_identifier.rb +20 -0
  340. data/lib/relaton/iho/util.rb +8 -0
  341. data/lib/relaton/iho.rb +27 -0
  342. data/lib/relaton/index/config.rb +52 -0
  343. data/lib/relaton/index/file_io.rb +305 -0
  344. data/lib/relaton/index/file_storage.rb +61 -0
  345. data/lib/relaton/index/id_number.rb +30 -0
  346. data/lib/relaton/index/pool.rb +41 -0
  347. data/lib/relaton/index/type.rb +159 -0
  348. data/lib/relaton/index/util.rb +18 -0
  349. data/lib/relaton/index.rb +60 -0
  350. data/lib/relaton/isbn/isbn.rb +61 -0
  351. data/lib/relaton/isbn/open_library.rb +43 -0
  352. data/lib/relaton/isbn/parser.rb +88 -0
  353. data/lib/relaton/isbn/processor.rb +48 -0
  354. data/lib/relaton/isbn/util.rb +8 -0
  355. data/lib/relaton/isbn.rb +19 -0
  356. data/lib/relaton/iso/bibliography.rb +407 -0
  357. data/lib/relaton/iso/data_fetcher.rb +338 -0
  358. data/lib/relaton/iso/data_parser.rb +444 -0
  359. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  360. data/lib/relaton/iso/hit.rb +57 -0
  361. data/lib/relaton/iso/hit_collection.rb +184 -0
  362. data/lib/relaton/iso/item_data.rb +28 -0
  363. data/lib/relaton/iso/model/bibdata.rb +10 -0
  364. data/lib/relaton/iso/model/bibitem.rb +8 -0
  365. data/lib/relaton/iso/model/contributor.rb +6 -0
  366. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  367. data/lib/relaton/iso/model/docidentifier.rb +134 -0
  368. data/lib/relaton/iso/model/doctype.rb +13 -0
  369. data/lib/relaton/iso/model/ext.rb +35 -0
  370. data/lib/relaton/iso/model/item.rb +17 -0
  371. data/lib/relaton/iso/model/item_base.rb +22 -0
  372. data/lib/relaton/iso/model/organization.rb +9 -0
  373. data/lib/relaton/iso/model/project_number.rb +22 -0
  374. data/lib/relaton/iso/model/relation.rb +9 -0
  375. data/lib/relaton/iso/model/stagename.rb +14 -0
  376. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  377. data/lib/relaton/iso/processor.rb +84 -0
  378. data/lib/relaton/iso/scraper.rb +619 -0
  379. data/lib/relaton/iso/type/pubid.rb +50 -0
  380. data/lib/relaton/iso/util.rb +8 -0
  381. data/lib/relaton/iso.rb +30 -0
  382. data/lib/relaton/itu/bibliography.rb +90 -0
  383. data/lib/relaton/itu/data_fetcher.rb +104 -0
  384. data/lib/relaton/itu/data_parser_r.rb +140 -0
  385. data/lib/relaton/itu/hit.rb +22 -0
  386. data/lib/relaton/itu/hit_collection.rb +127 -0
  387. data/lib/relaton/itu/item_data.rb +6 -0
  388. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  389. data/lib/relaton/itu/model/bibdata.rb +8 -0
  390. data/lib/relaton/itu/model/bibitem.rb +8 -0
  391. data/lib/relaton/itu/model/docidentifier.rb +9 -0
  392. data/lib/relaton/itu/model/doctype.rb +13 -0
  393. data/lib/relaton/itu/model/ext.rb +47 -0
  394. data/lib/relaton/itu/model/item.rb +13 -0
  395. data/lib/relaton/itu/model/meeting.rb +13 -0
  396. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  397. data/lib/relaton/itu/model/question.rb +13 -0
  398. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  399. data/lib/relaton/itu/model/structured_identifier.rb +19 -0
  400. data/lib/relaton/itu/processor.rb +66 -0
  401. data/lib/relaton/itu/pubid.rb +177 -0
  402. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  403. data/lib/relaton/itu/recommendation_parser.rb +161 -0
  404. data/lib/relaton/itu/scraper.rb +193 -0
  405. data/lib/relaton/itu/util.rb +8 -0
  406. data/lib/relaton/itu.rb +33 -0
  407. data/lib/relaton/jis/bibdata.rb +8 -0
  408. data/lib/relaton/jis/bibitem.rb +8 -0
  409. data/lib/relaton/jis/bibliography.rb +75 -0
  410. data/lib/relaton/jis/data_fetcher.rb +181 -0
  411. data/lib/relaton/jis/docidentifier.rb +21 -0
  412. data/lib/relaton/jis/doctype.rb +9 -0
  413. data/lib/relaton/jis/ext.rb +13 -0
  414. data/lib/relaton/jis/hit.rb +93 -0
  415. data/lib/relaton/jis/hit_collection.rb +127 -0
  416. data/lib/relaton/jis/item.rb +22 -0
  417. data/lib/relaton/jis/item_base.rb +26 -0
  418. data/lib/relaton/jis/item_data.rb +8 -0
  419. data/lib/relaton/jis/processor.rb +55 -0
  420. data/lib/relaton/jis/relation.rb +11 -0
  421. data/lib/relaton/jis/scraper.rb +232 -0
  422. data/lib/relaton/jis/structured_identifier.rb +13 -0
  423. data/lib/relaton/jis/util.rb +8 -0
  424. data/lib/relaton/jis.rb +33 -0
  425. data/lib/relaton/logger/channels/gh_issue.rb +78 -0
  426. data/lib/relaton/logger/config.rb +34 -0
  427. data/lib/relaton/logger/formatter_json.rb +8 -0
  428. data/lib/relaton/logger/formatter_string.rb +12 -0
  429. data/lib/relaton/logger/log.rb +64 -0
  430. data/lib/relaton/logger/log_device.rb +27 -0
  431. data/lib/relaton/logger/pool.rb +24 -0
  432. data/lib/relaton/logger.rb +18 -0
  433. data/lib/relaton/nist/bibdata.rb +8 -0
  434. data/lib/relaton/nist/bibitem.rb +8 -0
  435. data/lib/relaton/nist/bibliography.rb +191 -0
  436. data/lib/relaton/nist/comment_period.rb +15 -0
  437. data/lib/relaton/nist/data_fetcher.rb +84 -0
  438. data/lib/relaton/nist/date.rb +7 -0
  439. data/lib/relaton/nist/doctype.rb +7 -0
  440. data/lib/relaton/nist/ext.rb +16 -0
  441. data/lib/relaton/nist/hit.rb +18 -0
  442. data/lib/relaton/nist/hit_collection.rb +362 -0
  443. data/lib/relaton/nist/item.rb +17 -0
  444. data/lib/relaton/nist/item_data.rb +6 -0
  445. data/lib/relaton/nist/mods_parser.rb +276 -0
  446. data/lib/relaton/nist/processor.rb +68 -0
  447. data/lib/relaton/nist/pubs_export.rb +69 -0
  448. data/lib/relaton/nist/relation.rb +7 -0
  449. data/lib/relaton/nist/scraper.rb +290 -0
  450. data/lib/relaton/nist/series.yaml +49 -0
  451. data/lib/relaton/nist/util.rb +8 -0
  452. data/lib/relaton/nist.rb +34 -0
  453. data/lib/relaton/oasis/bibdata.rb +8 -0
  454. data/lib/relaton/oasis/bibitem.rb +8 -0
  455. data/lib/relaton/oasis/bibliography.rb +60 -0
  456. data/lib/relaton/oasis/browser_agent.rb +71 -0
  457. data/lib/relaton/oasis/data_fetcher.rb +94 -0
  458. data/lib/relaton/oasis/data_parser.rb +305 -0
  459. data/lib/relaton/oasis/data_parser_utils.rb +296 -0
  460. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  461. data/lib/relaton/oasis/doctype.rb +7 -0
  462. data/lib/relaton/oasis/ext.rb +19 -0
  463. data/lib/relaton/oasis/item.rb +11 -0
  464. data/lib/relaton/oasis/item_data.rb +6 -0
  465. data/lib/relaton/oasis/processor.rb +68 -0
  466. data/lib/relaton/oasis/util.rb +8 -0
  467. data/lib/relaton/oasis.rb +28 -0
  468. data/lib/relaton/ogc/bibdata.rb +8 -0
  469. data/lib/relaton/ogc/bibitem.rb +8 -0
  470. data/lib/relaton/ogc/bibliography.rb +64 -0
  471. data/lib/relaton/ogc/data_fetcher.rb +110 -0
  472. data/lib/relaton/ogc/docidentifier.rb +6 -0
  473. data/lib/relaton/ogc/doctype.rb +12 -0
  474. data/lib/relaton/ogc/ext.rb +15 -0
  475. data/lib/relaton/ogc/hit.rb +18 -0
  476. data/lib/relaton/ogc/hit_collection.rb +36 -0
  477. data/lib/relaton/ogc/item.rb +13 -0
  478. data/lib/relaton/ogc/item_data.rb +6 -0
  479. data/lib/relaton/ogc/processor.rb +58 -0
  480. data/lib/relaton/ogc/scraper.rb +225 -0
  481. data/lib/relaton/ogc/util.rb +8 -0
  482. data/lib/relaton/ogc.rb +26 -0
  483. data/lib/relaton/oiml/bibdata.rb +8 -0
  484. data/lib/relaton/oiml/bibitem.rb +8 -0
  485. data/lib/relaton/oiml/bibliography.rb +94 -0
  486. data/lib/relaton/oiml/docidentifier.rb +33 -0
  487. data/lib/relaton/oiml/doctype.rb +13 -0
  488. data/lib/relaton/oiml/ext.rb +42 -0
  489. data/lib/relaton/oiml/item.rb +20 -0
  490. data/lib/relaton/oiml/item_base.rb +18 -0
  491. data/lib/relaton/oiml/item_data.rb +6 -0
  492. data/lib/relaton/oiml/processor.rb +54 -0
  493. data/lib/relaton/oiml/relation.rb +9 -0
  494. data/lib/relaton/oiml/util.rb +8 -0
  495. data/lib/relaton/oiml.rb +24 -0
  496. data/lib/relaton/omg/bibdata.rb +8 -0
  497. data/lib/relaton/omg/bibitem.rb +8 -0
  498. data/lib/relaton/omg/bibliography.rb +31 -0
  499. data/lib/relaton/omg/ext.rb +7 -0
  500. data/lib/relaton/omg/item.rb +8 -0
  501. data/lib/relaton/omg/item_data.rb +6 -0
  502. data/lib/relaton/omg/processor.rb +34 -0
  503. data/lib/relaton/omg/scraper.rb +141 -0
  504. data/lib/relaton/omg/util.rb +8 -0
  505. data/lib/relaton/omg.rb +24 -0
  506. data/lib/relaton/plateau/bibdata.rb +8 -0
  507. data/lib/relaton/plateau/bibitem.rb +8 -0
  508. data/lib/relaton/plateau/bibliography.rb +24 -0
  509. data/lib/relaton/plateau/data_fetcher.rb +153 -0
  510. data/lib/relaton/plateau/doctype.rb +7 -0
  511. data/lib/relaton/plateau/ext.rb +23 -0
  512. data/lib/relaton/plateau/handbook_parser.rb +95 -0
  513. data/lib/relaton/plateau/hit.rb +13 -0
  514. data/lib/relaton/plateau/hit_collection.rb +59 -0
  515. data/lib/relaton/plateau/item.rb +12 -0
  516. data/lib/relaton/plateau/item_data.rb +6 -0
  517. data/lib/relaton/plateau/parser.rb +101 -0
  518. data/lib/relaton/plateau/processor.rb +49 -0
  519. data/lib/relaton/plateau/technical_report_parser.rb +91 -0
  520. data/lib/relaton/plateau/util.rb +8 -0
  521. data/lib/relaton/plateau.rb +28 -0
  522. data/lib/relaton/un/bibdata.rb +8 -0
  523. data/lib/relaton/un/bibitem.rb +8 -0
  524. data/lib/relaton/un/bibliography.rb +48 -0
  525. data/lib/relaton/un/doctype.rb +10 -0
  526. data/lib/relaton/un/ext.rb +30 -0
  527. data/lib/relaton/un/hit.rb +56 -0
  528. data/lib/relaton/un/hit_collection.rb +61 -0
  529. data/lib/relaton/un/item.rb +11 -0
  530. data/lib/relaton/un/item_data.rb +6 -0
  531. data/lib/relaton/un/parser.rb +108 -0
  532. data/lib/relaton/un/processor.rb +38 -0
  533. data/lib/relaton/un/session.rb +25 -0
  534. data/lib/relaton/un/token_generator.rb +105 -0
  535. data/lib/relaton/un/util.rb +8 -0
  536. data/lib/relaton/un/wasm/decoder.rb +434 -0
  537. data/lib/relaton/un/wasm/instance.rb +101 -0
  538. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  539. data/lib/relaton/un/wasm/memory.rb +112 -0
  540. data/lib/relaton/un/wasm/module.rb +47 -0
  541. data/lib/relaton/un/wasm.rb +17 -0
  542. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  543. data/lib/relaton/un.rb +28 -0
  544. data/lib/relaton/version.rb +1 -1
  545. data/lib/relaton/w3c/bibdata.rb +8 -0
  546. data/lib/relaton/w3c/bibitem.rb +8 -0
  547. data/lib/relaton/w3c/bibliography.rb +54 -0
  548. data/lib/relaton/w3c/data_fetcher.rb +309 -0
  549. data/lib/relaton/w3c/data_parser.rb +379 -0
  550. data/lib/relaton/w3c/doctype.rb +7 -0
  551. data/lib/relaton/w3c/ext.rb +11 -0
  552. data/lib/relaton/w3c/item.rb +12 -0
  553. data/lib/relaton/w3c/item_data.rb +6 -0
  554. data/lib/relaton/w3c/processor.rb +49 -0
  555. data/lib/relaton/w3c/pubid.rb +73 -0
  556. data/lib/relaton/w3c/safe_realize.rb +59 -0
  557. data/lib/relaton/w3c/util.rb +8 -0
  558. data/lib/relaton/w3c.rb +25 -0
  559. data/lib/relaton/xsf/bibdata.rb +8 -0
  560. data/lib/relaton/xsf/bibitem.rb +8 -0
  561. data/lib/relaton/xsf/bibliography.rb +24 -0
  562. data/lib/relaton/xsf/data_fetcher.rb +56 -0
  563. data/lib/relaton/xsf/hit.rb +17 -0
  564. data/lib/relaton/xsf/hit_collection.rb +24 -0
  565. data/lib/relaton/xsf/item.rb +7 -0
  566. data/lib/relaton/xsf/item_data.rb +6 -0
  567. data/lib/relaton/xsf/processor.rb +50 -0
  568. data/lib/relaton/xsf/util.rb +9 -0
  569. data/lib/relaton/xsf.rb +30 -0
  570. data/lib/relaton-core.rb +1 -0
  571. data/lib/relaton.rb +44 -9
  572. metadata +708 -150
  573. data/.github/workflows/rake.yml +0 -14
  574. data/.github/workflows/release.yml +0 -24
  575. data/.github/workflows/rubocop.yml +0 -48
  576. data/.gitignore +0 -12
  577. data/.rspec +0 -3
  578. data/.rubocop.yml +0 -12
  579. data/CLAUDE.md +0 -70
  580. data/Gemfile +0 -21
  581. data/Rakefile +0 -6
  582. data/docs/CHANGELOG.adoc +0 -16
  583. data/docs/VERSIONING_POLICY.adoc +0 -38
  584. data/docs/navigation.adoc +0 -6
  585. data/lib/relaton/config.rb +0 -24
  586. data/lib/relaton/db_cache.rb +0 -230
  587. data/lib/relaton/registry.rb +0 -118
  588. data/lib/relaton/util.rb +0 -7
  589. data/lib/relaton/workers_pool.rb +0 -21
  590. data/relaton.gemspec +0 -61
  591. data/spec/relaton/config_spec.rb +0 -10
  592. data/spec/relaton/db_cache_spec.rb +0 -51
  593. data/spec/relaton/db_spec.rb +0 -556
  594. data/spec/relaton/registry_spec.rb +0 -178
  595. data/spec/relaton/util_spec.rb +0 -3
  596. data/spec/relaton_spec.rb +0 -725
  597. data/spec/spec_helper.rb +0 -45
  598. data/spec/support/gb_t_20223_2006.xml +0 -33
  599. data/spec/support/iso_111111119115_1.xml +0 -0
  600. data/spec/support/iso_19115_1.xml +0 -115
  601. data/spec/support/iso_19115_2.xml +0 -95
  602. data/spec/support/rfc_8341.xml +0 -46
  603. data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +0 -12720
  604. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  605. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -143
  606. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -199
  607. data/spec/vcr_cassetes/cie_001_1980.yml +0 -401
  608. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1513
  609. data/spec/vcr_cassetes/doi_10_6028_nist_ir_8245.yml +0 -86
  610. data/spec/vcr_cassetes/ecma_6.yml +0 -112
  611. data/spec/vcr_cassetes/en_10160_1999.yml +0 -13624
  612. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -733
  613. data/spec/vcr_cassetes/ieee_528_2019.yml +0 -2786
  614. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  615. data/spec/vcr_cassetes/iso_19115_1.yml +0 -13177
  616. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -369
  617. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -13177
  618. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -229
  619. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -148
  620. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -364
  621. data/spec/vcr_cassetes/iso_combined_included.yml +0 -364
  622. data/spec/vcr_cassetes/iso_dis.yml +0 -157
  623. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -371
  624. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  625. data/spec/vcr_cassetes/rfc_8341.yml +0 -1272
data/lib/relaton/db.rb CHANGED
@@ -1,9 +1,16 @@
1
+ require "relaton/bib"
2
+ require "yaml"
3
+ require "net/http"
4
+ require "nokogiri"
5
+ require "fileutils"
6
+ require "date"
7
+
1
8
  module Relaton
2
9
  class Db
3
10
  # @param global_cache [String] directory of global DB
4
11
  # @param local_cache [String] directory of local DB
5
12
  def initialize(global_cache, local_cache)
6
- @registry = Relaton::Registry.instance
13
+ @registry = Registry.instance
7
14
  gpath = global_cache && File.expand_path(global_cache)
8
15
  @db = open_cache_biblio(gpath)
9
16
  lpath = local_cache && File.expand_path(local_cache)
@@ -53,14 +60,7 @@ module Relaton
53
60
  # after this date (inclusive, formats: "YYYY", "YYYY-MM",
54
61
  # or "YYYY-MM-DD")
55
62
  #
56
- # @return [nil, RelatonBib::BibliographicItem,
57
- # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
58
- # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
59
- # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
60
- # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
61
- # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
62
- # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
63
- # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
63
+ # @return [nil, RelatonBib::BibliographicItem, ...]
64
64
  ##
65
65
  def fetch(text, year = nil, opts = {})
66
66
  reference = text.strip
@@ -132,24 +132,6 @@ module Relaton
132
132
  end
133
133
  end
134
134
 
135
- # @param code [String]
136
- # @param year [String, NilClass]
137
- # @param stdclass [Symbol, NilClass]
138
- #
139
- # @param opts [Hash]
140
- # @option opts [Boolean] :all_parts If all-parts reference is required
141
- # @option opts [Boolean] :keep_year If undated reference should return
142
- # actual reference with year
143
- # @option opts [Integer] :retries (1) Number of network retries
144
- #
145
- # @return [nil, RelatonBib::BibliographicItem,
146
- # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
147
- # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
148
- # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
149
- # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
150
- # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
151
- # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
152
- # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
153
135
  def fetch_std(code, year = nil, stdclass = nil, opts = {})
154
136
  std = nil
155
137
  @registry.processors.each do |name, processor|
@@ -194,28 +176,14 @@ module Relaton
194
176
 
195
177
  private
196
178
 
197
- # @param (see #fetch_api)
198
- # @return (see #fetch_api)
199
179
  def fetch_doc(code, year, opts, processor)
200
- if Relaton.configuration.use_api then fetch_api(code, year, opts,
201
- processor)
180
+ if Db.configuration.use_api then fetch_api(code, year, opts, processor)
202
181
  else processor.get(code, year, opts)
203
182
  end
204
183
  end
205
184
 
206
- #
207
- # @param code [String]
208
- # @param year [String]
209
- #
210
- # @param opts [Hash]
211
- # @option opts [Boolean] :all_parts If all-parts reference is required
212
- # @option opts [Boolean] :keep_year If undated reference should return
213
- # actual reference with year
214
- #
215
- # @param processor [Relaton::Processor]
216
- # @return [RelatonBib::BibliographicItem, nil]
217
185
  def fetch_api(code, year, opts, processor)
218
- url = "#{Relaton.configuration.api_host}" \
186
+ url = "#{Db.configuration.api_host}" \
219
187
  "/api/v1/document?#{params(code, year, opts)}"
220
188
  rsp = Net::HTTP.get_response URI(url)
221
189
  processor.from_xml rsp.body if rsp.code == "200"
@@ -223,36 +191,16 @@ module Relaton
223
191
  processor.get(code, year, opts)
224
192
  end
225
193
 
226
- #
227
- # Make string of parametrs
228
- #
229
- # @param [String] code
230
- # @param [String] year
231
- # @param [Hash] opts
232
- #
233
- # @return [String]
234
- #
235
194
  def params(code, year, opts)
236
195
  opts.merge(code: code, year: year).map { |k, v| "#{k}=#{v}" }.join "&"
237
196
  end
238
197
 
239
- # @param file [String] file path
240
- # @param xml [String] content in XML format
241
- # @param text [String, nil] text to serach
242
- # @param edition [String, nil] edition to filter
243
- # @param year [Integer, nil] year to filter
244
- # @return [BibliographicItem, nil]
245
198
  def search_xml(file, xml, text, edition, year)
246
199
  return unless text.nil? || match_xml_text?(xml, text)
247
200
 
248
201
  search_edition_year(file, xml, edition, year)
249
202
  end
250
203
 
251
- # @param file [String] file path
252
- # @param content [String] content in XML or YAML format
253
- # @param edition [String, nil] edition to filter
254
- # @param year [Integer, nil] year to filter
255
- # @return [BibliographicItem, nil]
256
204
  def search_edition_year(file, content, edition, year) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
257
205
  processor = @registry.processor_by_ref(file.split("/")[-2])
258
206
  item = if file.match?(/xml$/) then processor.from_xml(content)
@@ -264,14 +212,6 @@ module Relaton
264
212
  end)
265
213
  end
266
214
 
267
- #
268
- # Look up text in the XML elements attributes and content
269
- #
270
- # @param xml [String] content in XML format
271
- # @param text [String, nil] text to serach
272
- #
273
- # @return [Boolean]
274
- #
275
215
  def match_xml_text?(xml, text)
276
216
  esc = Regexp.escape(text)
277
217
  pat = "((?<attr>=((?<apstr>')|\"" \
@@ -281,18 +221,6 @@ module Relaton
281
221
  .match?(xml)
282
222
  end
283
223
 
284
- # @param code [String]
285
- # @param year [String, nil]
286
- # @param stdslass [String]
287
- #
288
- # @param opts [Hash] options
289
- # @option opts [Boolean] :all_parts If all-parts reference is required
290
- # @option opts [Boolean] :keep_year If undated reference should return
291
- # actual reference with year
292
- # @option opts [Integer] :retries (1) Number of network retries
293
- #
294
- # @return [nil, Relaton::Bib::ItemData
295
- #
296
224
  def combine_doc(code, year, opts, stdclass) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
297
225
  return if stdclass == :relaton_bipm
298
226
 
@@ -323,19 +251,6 @@ module Relaton
323
251
  end
324
252
  end
325
253
 
326
- # TODO: i18n
327
- # Fofmat ID
328
- # @param code [String]
329
- # @param year [String]
330
- #
331
- # @param opts [Hash]
332
- # @option opts [Boolean] :all_parts If all-parts reference is required
333
- # @option opts [Boolean] :keep_year If undated reference should return
334
- # actual reference with year
335
- # @option opts [Integer] :retries (1) Number of network retries
336
- #
337
- # @param stdClass [Symbol]
338
- # @return [Array<String>] docid and code
339
254
  def std_id(code, year, opts, stdclass)
340
255
  prefix, code = strip_id_wrapper(code, stdclass)
341
256
  ret = code
@@ -348,59 +263,23 @@ module Relaton
348
263
  ["#{prefix}(#{ret.strip})", code]
349
264
  end
350
265
 
351
- # Find prefix and clean code
352
- # @param code [String]
353
- # @param stdClass [Symbol]
354
- # @return [Array]
355
266
  def strip_id_wrapper(code, stdclass)
356
267
  prefix = @registry[stdclass].prefix
357
268
  code =
358
269
  if code.is_a?(String)
359
- code.sub("\u2013", "-").sub(/^#{prefix}\((.+)\)$/, "\\1")
270
+ code.sub("", "-").sub(/^#{prefix}\((.+)\)$/, "\\1")
360
271
  else code.to_s
361
272
  end
362
273
  [prefix, code]
363
274
  end
364
275
 
365
- #
366
- # @param entry [String, nil] XML string
367
- # @param stdclass [Symbol]
368
- #
369
- # @return [nil, RelatonBib::BibliographicItem,
370
- # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
371
- # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
372
- # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
373
- # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
374
- # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
375
- # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
376
- # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
377
276
  def bib_retval(entry, stdclass)
378
277
  if entry && !entry.match?(/^not_found/)
379
278
  @registry[stdclass].from_xml(entry)
380
279
  end
381
280
  end
382
281
 
383
- # @param code [String]
384
- # @param year [String]
385
- #
386
- # @param opts [Hash]
387
- # @option opts [Boolean] :all_parts If all-parts reference is required
388
- # @option opts [Boolean] :keep_year If undated reference should return
389
- # actual reference with year
390
- # @option opts [Integer] :retries (1) Number of network retries
391
- #
392
- # @param stdclass [Symbol]
393
- # @return [nil, RelatonBib::BibliographicItem,
394
- # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
395
- # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
396
- # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
397
- # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
398
- # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
399
- # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
400
- # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
401
282
  def check_bibliocache(code, year, opts, stdclass) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
402
- # When date filters are present, check if the base
403
- # (non-date-filtered) cache entry satisfies the range
404
283
  if opts[:publication_date_before] || opts[:publication_date_after]
405
284
  base_opts = opts.except(
406
285
  :publication_date_before, :publication_date_after
@@ -447,27 +326,6 @@ module Relaton
447
326
  bib_retval(db[id], stdclass)
448
327
  end
449
328
 
450
- #
451
- # Create new bibliographic entry if it doesn't exist in database
452
- #
453
- # @param code [String]
454
- # @param year [String]
455
- #
456
- # @param opts [Hash]
457
- # @option opts [Boolean, nil] :all_parts If true then all-parts reference is
458
- # requested
459
- # @option opts [Boolean, nil] :keep_year If true then undated reference
460
- # should return actual reference with year
461
- # @option opts [Integer] :retries (1) Number of network retries
462
- # @option opts [Boolean] :no_cache If true then don't use cache
463
- #
464
- # @param stdclass [Symbol]
465
- # @param db [Relaton::DbCache,`nil]
466
- # @param id [String, nil] docid
467
- #
468
- # @return [String] bibliographic entry
469
- # XML or "redirection ID" or "not_found YYYY-MM-DD" string
470
- #
471
329
  def new_bib_entry(code, year, opts, stdclass, **args)
472
330
  entry = @semaphore.synchronize { args[:db] && args[:db][args[:id]] }
473
331
  if !entry || opts[:no_cache]
@@ -493,21 +351,9 @@ module Relaton
493
351
  args[:no_cache] ? bib_entry(bib) : entry
494
352
  end
495
353
 
496
- #
497
- # If the reference isn't equal to the document identifier
498
- # then store the document in the cache and create
499
- # for the reference a redirection to the document
500
- #
501
- # @param [<Type>] bib <description>
502
- # @param [<Type>] stdclass <description>
503
- # @param [<Type>] **args <description>
504
- #
505
- # @return [<Type>] <description>
506
- #
507
354
  def check_entry(bib, stdclass, **args) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
508
355
  bib_id = bib && bib.docidentifier.first&.content
509
356
 
510
- # when ref isn't equal to bib's id then return a redirection to bib's id
511
357
  quoted = Regexp.quote("(#{bib_id})")
512
358
  if args[:db] && args[:id] && bib_id &&
513
359
  args[:id] !~ /#{quoted}/
@@ -518,21 +364,6 @@ module Relaton
518
364
  end
519
365
  end
520
366
 
521
- #
522
- # @param code [String]
523
- # @param year [String]
524
- #
525
- # @param opts [Hash]
526
- # @option opts [Boolean] :all_parts If all-parts reference is required
527
- # @option opts [Boolean] :keep_year If undated reference should return
528
- # actual reference with year
529
- #
530
- # @param processor [Relaton::Processor]
531
- # @param retries [Integer] remain Number of network retries
532
- #
533
- # @raise [RelatonBib::RequestError]
534
- # @return [RelatonBib::BibliographicItem]
535
- #
536
367
  def net_retry(code, year, opts, processor, retries)
537
368
  fetch_doc code, year, opts, processor
538
369
  rescue Relaton::RequestError => e
@@ -541,15 +372,6 @@ module Relaton
541
372
  net_retry(code, year, opts, processor, retries - 1)
542
373
  end
543
374
 
544
- # @param bib [RelatonBib::BibliographicItem,
545
- # RelatonIsoBib::IsoBibliographicItem, RelatonItu::ItuBibliographicItem,
546
- # RelatonIetf::IetfBibliographicItem, RelatonIec::IecBibliographicItem,
547
- # RelatonIeee::IeeeBibliographicItem, RelatonNist::NistBibliongraphicItem,
548
- # RelatonGb::GbbibliographicItem, RelatonOgc::OgcBibliographicItem,
549
- # RelatonCalconnect::CcBibliographicItem, RelatinUn::UnBibliographicItem,
550
- # RelatonBipm::BipmBibliographicItem, RelatonIho::IhoBibliographicItem,
551
- # RelatonOmg::OmgBibliographicItem, RelatonW3c::W3cBibliographicItem]
552
- # @return [String] XML or "not_found mm-dd-yyyy"
553
375
  def bib_entry(bib)
554
376
  if bib.respond_to?(:to_xml)
555
377
  bib.to_xml(bibdata: true)
@@ -558,12 +380,6 @@ module Relaton
558
380
  end
559
381
  end
560
382
 
561
- # Check if an XML entry's published date falls within the requested range.
562
- # Range semantics: [after, before) — inclusive start, exclusive end.
563
- #
564
- # @param entry [String] XML string
565
- # @param opts [Hash]
566
- # @return [Boolean]
567
383
  def pub_date_in_range?(entry, opts) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
568
384
  doc = Nokogiri::XML(entry)
569
385
  date_str = doc.at("//date[@type='published']/on")&.text
@@ -581,9 +397,6 @@ module Relaton
581
397
  true
582
398
  end
583
399
 
584
- # @param str [String] date string in "YYYY", "YYYY-MM",
585
- # or "YYYY-MM-DD" format
586
- # @return [Date, nil]
587
400
  def parse_pub_date(str)
588
401
  case str
589
402
  when /^\d{4}-\d{1,2}-\d{1,2}/ then Date.parse(str)
@@ -594,12 +407,10 @@ module Relaton
594
407
  nil
595
408
  end
596
409
 
597
- # @param dir [String, nil] DB directory
598
- # @return [Relaton::DbCache, NilClass]
599
410
  def open_cache_biblio(dir) # rubocop:disable Metrics/MethodLength
600
411
  return nil if dir.nil?
601
412
 
602
- db = DbCache.new dir
413
+ db = Cache.new dir
603
414
 
604
415
  Dir["#{dir}/*/"].each do |fdir|
605
416
  next if db.check_version?(fdir)
@@ -610,9 +421,6 @@ module Relaton
610
421
  db
611
422
  end
612
423
 
613
- # @param qwp [Hash]
614
- # @option qwp [Queue] :queue The queue of references to fetch
615
- # @option qwp [Relaton::WorkersPool] :workers_pool The pool of workers
616
424
  def process_queue(qwp)
617
425
  while args = qwp[:queue].pop; qwp[:workers_pool] << args end
618
426
  end
@@ -632,7 +440,7 @@ module Relaton
632
440
  globalname = global_bibliocache_name if opts[:global_cache]
633
441
  localname = local_bibliocache_name(opts[:local_cache])
634
442
  flush_caches globalname, localname if opts[:flush_caches]
635
- Relaton::Db.new(globalname, localname)
443
+ new(globalname, localname)
636
444
  end
637
445
 
638
446
  def flush_caches(gcache, lcache)
@@ -653,3 +461,9 @@ module Relaton
653
461
  end
654
462
  end
655
463
  end
464
+
465
+ require_relative "db/util"
466
+ require_relative "db/config"
467
+ require_relative "db/workers_pool"
468
+ require_relative "db/cache"
469
+ require_relative "db/registry"
@@ -0,0 +1,72 @@
1
+ require "mechanize"
2
+
3
+ module Relaton
4
+ module Doi
5
+ module Crossref
6
+ extend self
7
+
8
+ USER_AGENT = "Relaton::Doi (https://www.relaton.org/guides/doi/; mailto:open.source@ribose.com)"
9
+
10
+ #
11
+ # Get a document by DOI from the CrossRef API.
12
+ #
13
+ # @param [String] doi The DOI.
14
+ #
15
+ # @return [RelatonBib::BibliographicItem, RelatonIetf::IetfBibliographicItem,
16
+ # RelatonBipm::BipmBibliographicItem, RelatonIeee::IeeeBibliographicItem,
17
+ # RelatonNist::NistBibliographicItem] The bibitem.
18
+ #
19
+ def get(doi)
20
+ Util.info "Fetching from search.crossref.org ...", key: doi
21
+ id = doi.sub(%r{^doi:}, "")
22
+ message = get_by_id id
23
+ if message
24
+ Util.info "Found: `#{message['DOI']}`", key: doi
25
+ Parser.parse message
26
+ else
27
+ Util.info "Not found.", key: doi
28
+ nil
29
+ end
30
+ end
31
+
32
+ #
33
+ # Get a document by DOI from the CrossRef API.
34
+ #
35
+ # @param [String] id The DOI.
36
+ #
37
+ # @return [Hash] The document.
38
+ #
39
+ def get_by_id(id) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
40
+ n = 0
41
+ url = "https://api.crossref.org/works/#{CGI.escape(id)}"
42
+ loop do
43
+ resp = agent.get url
44
+ work = JSON.parse resp.body
45
+ return work["message"] if work["status"] == "ok"
46
+
47
+ if n > 1
48
+ raise Relaton::RequestError, "Crossref error: #{resp.body}"
49
+ end
50
+
51
+ n += 1
52
+ sleep resp.response["x-rate-limit-interval"].to_i * n
53
+ rescue Mechanize::ResponseCodeError => e
54
+ return nil if e.response_code == "404"
55
+
56
+ if n > 1
57
+ raise Relaton::RequestError, "Crossref error: #{e.page.body}"
58
+ end
59
+
60
+ n += 1
61
+ sleep e.page.response["x-rate-limit-interval"].to_i * n
62
+ end
63
+ end
64
+
65
+ def agent
66
+ @agent ||= Mechanize.new do |a|
67
+ a.user_agent = USER_AGENT
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end