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
@@ -0,0 +1,204 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require "yaml"
5
+ require "gb_agencies"
6
+
7
+ module Relaton
8
+ module Gb
9
+ # Common scrapping methods.
10
+ module Scraper
11
+ STAGES = { "即将实施" => "published",
12
+ "现行" => "activated",
13
+ "废止" => "obsoleted",
14
+ "被代替" => "replaced" }.freeze
15
+
16
+ @prefixes = nil
17
+
18
+ # @param doc [Nokogiri::HTML::Document]
19
+ # @param src [String]
20
+ # @param hit [RelatonGb::Hit]
21
+ # @return [Hash]
22
+ def scrapped_data(doc, src, hit) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
23
+ {
24
+ fetched: Date.today.to_s,
25
+ type: "standard",
26
+ docidentifier: get_docid(hit.docref),
27
+ title: get_titles(doc),
28
+ contributor: get_contributors(doc, hit.docref),
29
+ status: get_status(doc, hit.status),
30
+ source: get_source(src),
31
+ date: get_dates(doc),
32
+ language: ["zh"],
33
+ script: ["Hans"],
34
+ ext: get_ext(doc, hit.docref),
35
+ }
36
+ end
37
+
38
+ # @param docref [String]
39
+ # @return [Array<Relaton::Bib::Docidentifier>]
40
+ def get_docid(docref)
41
+ [Docidentifier.new(content: docref, type: "Chinese Standard", primary: true)]
42
+ end
43
+
44
+ # @param doc [Nokogiri::HTML::Document]
45
+ # @param docref [Strings]
46
+ # @return [Array<Relaton::Bib::Contributor>]
47
+ def get_contributors(doc, docref)
48
+ name = docref.match(/^[^\s]+/).to_s
49
+ name.sub!(%r{/[TZ]$}, "") unless name =~ /^GB/
50
+ gbtype = get_gbtype(doc, docref)
51
+ org_names = %w[en zh].map { |l| create_org_name(l, name, gbtype) }.compact
52
+ return [] unless org_names.any?
53
+
54
+ org = Bib::Organization.new name: org_names
55
+ role = Bib::Contributor::Role.new type: "publisher"
56
+ [Bib::Contributor.new(organization: org, role: [role])]
57
+ end
58
+
59
+ # @param lang [String]
60
+ # @param name [String]
61
+ # @param gbtype [Hash]
62
+ # @return [Relaton::Bib::TypedLocalizedString, nil]
63
+ def create_org_name(lang, name, gbtype)
64
+ ag = GbAgencies::Agencies.new(lang, {}, "")
65
+ content = ag.standard_agency1(gbtype.scope, name, gbtype.mandate)
66
+ return unless content
67
+
68
+ Bib::TypedLocalizedString.new language: lang, content: content
69
+ end
70
+
71
+ # @param doc [Nokogiri::HTML::Document]
72
+ # @return [Array<Relaton::Bib::Title>]
73
+ def get_titles(doc)
74
+ tzh = doc.at("//td[contains(text(), '中文标准名称')]/b").text
75
+ titles = Relaton::Bib::Title.from_string tzh, "zh", "Hans"
76
+ ten = doc.at("//td[contains(text(), '英文标准名称')]").text.match(/[\w\s]+/).to_s
77
+ return titles if ten.empty?
78
+
79
+ titles + Relaton::Bib::Title.from_string(ten, "en", "Latn")
80
+ end
81
+
82
+ # @param doc [Nokogiri::HTML::Document]
83
+ # @param status [String, NilClass]
84
+ # @return [Relaton::Bib::Status]
85
+ def get_status(doc, status = nil)
86
+ status ||= doc.at("//td[contains(., '标准状态')]/span")&.text&.strip
87
+ return unless STAGES[status]
88
+
89
+ stage = Bib::Status::Stage.new content: STAGES[status]
90
+ Bib::Status.new stage: stage
91
+ end
92
+
93
+ private
94
+
95
+ # @param doc [Nokogiri::HTML::Document]
96
+ # @return [Array<String>]
97
+ def get_ccs(doc)
98
+ code = doc.at("//div[contains(text(), '中国标准分类号')]/following-sibling::div").text.strip
99
+ [CCS.new(code: code)]
100
+ end
101
+
102
+ # @param doc [Nokogiri::HTML::Document]
103
+ # @return [Array<Relaton::Bib::ICS>]
104
+ def get_ics(doc)
105
+ ics = doc.at("//div[contains(text(), '国际标准分类号')]/following-sibling::div"\
106
+ " | //dt[contains(text(), '国际标准分类号')]/following-sibling::dd")
107
+ return [] unless ics
108
+
109
+ code = ics.text.strip
110
+ [Bib::ICS.new(code: code)]
111
+ end
112
+
113
+ # @param doc [Nokogiri::HTML::Document]
114
+ # @return [String]
115
+ def get_scope(doc)
116
+ issued = doc.at("//div[contains(., '发布单位')]/following-sibling::div")
117
+ case issued&.text
118
+ when /国家标准/ then "national"
119
+ when /^行业标准/ then "sector"
120
+ end
121
+ end
122
+
123
+ # @param ref [String]
124
+ # @return [String]
125
+ def get_prefix(ref)
126
+ pref = ref.match(/^[^\s]+/).to_s.split("/").first
127
+ prefix pref
128
+ end
129
+
130
+ # @param pref [String]
131
+ # @return [Hash{String=>String}]
132
+ def prefix(pref)
133
+ @prefixes ||= YAML.load_file File.join(__dir__, "yaml/prefixes.yaml")
134
+ @prefixes[pref]
135
+ end
136
+
137
+ # @param ref [String]
138
+ # @return [String]
139
+ def get_mandate(ref)
140
+ case ref.match(%r{(?<=\/)[^\s]+}).to_s
141
+ when "T" then "recommended"
142
+ when "Z" then "guidelines"
143
+ else "mandatory"
144
+ end
145
+ end
146
+
147
+ def get_source(src)
148
+ (Bib::Uri.new(type: "src", content: src))
149
+ end
150
+
151
+ # @param doc [Nokogiri::HTML::Document]
152
+ # @return [Array<Hash>]
153
+ # * :type [String] type of date
154
+ # * :on [String] date
155
+ def get_dates(doc)
156
+ date = doc.at("//div[contains(text(), '发布日期')]/following-sibling::div"\
157
+ " | //dt[contains(text(), '发布日期')]/following-sibling::dd")
158
+ [Bib::Date.new(type: "published", at: date.text.delete("\r\n\t\t"))]
159
+ end
160
+
161
+ def get_ext(doc, docref)
162
+ Ext.new(
163
+ doctype: get_type,
164
+ gbtype: get_gbtype(doc, docref),
165
+ flavor: "gb",
166
+ # gbcommittee: get_committee(doc, docref),
167
+ ccs: get_ccs(doc),
168
+ ics: get_ics(doc),
169
+ structuredidentifier: fetch_structuredidentifier(docref),
170
+ plannumber: parse_docref(docref)[0],
171
+ )
172
+ end
173
+
174
+ def get_type
175
+ Doctype.new content: "standard"
176
+ end
177
+
178
+ # @param doc [Nokogiri::HTML::Document]
179
+ # @param ref [String]
180
+ # @return [Relaton::Gb::GbType]
181
+ def get_gbtype(doc, ref)
182
+ # ref = get_ref(doc)
183
+ GbType.new(scope: get_scope(doc), prefix: get_prefix(ref)["prefix"], mandate: get_mandate(ref), topic: "other")
184
+ end
185
+
186
+ # @param docref [String]
187
+ # @return [Array<String>] array of matched groups [docnumber, partnumber]
188
+ def parse_docref(docref)
189
+ m = docref.match(/^([^–—.-]*\d+)\.?((?<=\.)\d+|)(?:-(\d{4}))?/)
190
+ [m[1], m[2], m[3]]
191
+ end
192
+
193
+ # @param docref [String]
194
+ # @return [Relaton::Iso::StructuredIdentifier]
195
+ def fetch_structuredidentifier(docref)
196
+ docnumber, partnumber, origyr = parse_docref(docref)
197
+ project_number = ProjectNumber.new(part: partnumber, origyr: origyr, content: docref)
198
+ StructuredIdentifier.new(
199
+ type: "Chinese Standard", tc_document_number: docnumber, project_number: project_number,
200
+ )
201
+ end
202
+ end
203
+ end
204
+ end
@@ -0,0 +1,92 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require "net/http"
5
+ require "json"
6
+ require "nokogiri"
7
+ require_relative "scraper"
8
+ require_relative "item"
9
+ require_relative "hit_collection"
10
+ require_relative "hit"
11
+
12
+ module Relaton
13
+ module Gb
14
+ # Sector standard scraper
15
+ module SecScraper
16
+ extend Scraper
17
+ extend Core::ArrayWrapper
18
+
19
+ class << self
20
+ # @param text [String] code of standard for serarch
21
+ # @return [Relaton::Gb::HitCollection]
22
+ def scrape_page(text)
23
+ # uri = URI "http://www.std.gov.cn/hb/search/hbPage?searchText=#{text}"
24
+ uri = URI "https://hbba.sacinfo.org.cn/stdQueryList"
25
+ resp = Net::HTTP.post uri, URI.encode_www_form({ key: text }),
26
+ "Content-Type" => "application/x-www-form-urlencoded"
27
+ # res = JSON.parse Net::HTTP.get(uri)
28
+ json = JSON.parse resp.body
29
+ hits = json["records"].map do |h|
30
+ Hit.new pid: h["pk"], docref: h["code"], status: h["status"], scraper: self
31
+ end
32
+ # hits = res["rows"].map do |r|
33
+ # Hit.new pid: r["id"], title: r["STD_CODE"], scraper: self
34
+ # end
35
+ HitCollection.new hits
36
+ rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
37
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError,
38
+ OpenSSL::SSL::SSLError, Errno::ETIMEDOUT, Net::OpenTimeout
39
+ raise Relaton::RequestError, "Cannot access #{uri}"
40
+ end
41
+
42
+ # @param hit [Relaton::Gb::Hit]
43
+ # @return [Relaton::Gb::ItemData]
44
+ def scrape_doc(hit)
45
+ src = "https://hbba.sacinfo.org.cn/stdDetail/#{hit.pid}"
46
+ page_uri = URI src
47
+ doc = Nokogiri::HTML Net::HTTP.get(page_uri)
48
+ ItemData.new(**scrapped_data(doc, src, hit))
49
+ rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
50
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError,
51
+ OpenSSL::SSL::SSLError, Errno::ETIMEDOUT, Net::OpenTimeout
52
+ raise Relaton::RequestError, "Cannot access #{src}"
53
+ end
54
+
55
+ private
56
+
57
+ # @param doc [Nokogiri::HTML::Document]
58
+ # @return [Array<Relaton::Bib::Title>]
59
+ def get_titles(doc)
60
+ tzh = doc.at("//h4").text.delete("\r\n\t")
61
+ Bib::Title.from_string(tzh, "zh", "Hans")
62
+ end
63
+
64
+ # @param _doc [Nokogiri::HTML::Document]
65
+ # @param ref [String]
66
+ # @return [Hash]
67
+ # * :type [String]
68
+ # * :name [String]
69
+ # def get_committee(_doc, ref)
70
+ # # ref = get_ref(doc)
71
+ # name = get_prefix(ref)["administration"]
72
+ # { type: "technical", name: name }
73
+ # end
74
+
75
+ # @param _doc [Nokogiri::HTML::Document]
76
+ # @return [String]
77
+ def get_scope(_doc)
78
+ "sector"
79
+ end
80
+
81
+ # @param doc [Nokogiri::HTML::Document]
82
+ # @return [Array<String>]
83
+ def get_ccs(doc)
84
+ array(doc.at("//dt[contains(text(), '中国标准分类号')]/following-sibling::dd")).map do |cc|
85
+ text = Cnccs.fetch(cc.text.strip)&.description
86
+ CCS.new code: cc.text, text: text
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,13 @@
1
+ module Relaton
2
+ module Gb
3
+ class StageName < Lutaml::Model::Serializable
4
+ attribute :abbreviation, :string
5
+ attribute :content, :string
6
+
7
+ xml do
8
+ map_attribute "abbreviation", to: :abbreviation
9
+ map_content to: :content
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ require_relative "project_number"
2
+
3
+ module Relaton
4
+ module Gb
5
+ class StructuredIdentifier < Lutaml::Model::Serializable
6
+ attribute :type, :string
7
+ attribute :project_number, ProjectNumber
8
+ attribute :tc_document_number, :integer
9
+
10
+ xml do
11
+ root "structuredidentifier"
12
+ map_attribute "type", to: :type
13
+ map_element "project-number", to: :project_number
14
+ map_element "tc-document-number", to: :tc_document_number
15
+ end
16
+
17
+ def to_all_parts!
18
+ project_number&.to_all_parts!
19
+ end
20
+
21
+ def remove_date!
22
+ project_number&.remove_date!
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,126 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require "nokogiri"
5
+ require_relative "scraper"
6
+ require_relative "hit_collection"
7
+ require_relative "hit"
8
+
9
+ module Relaton
10
+ module Gb
11
+ # Social standard scarpper.
12
+ module TScraper
13
+ extend Scraper
14
+
15
+ class << self
16
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
17
+ # @param text [String]
18
+ # @return [Relaton::Gb::HitCollection]
19
+ def scrape_page(text)
20
+ url = "http://www.ttbz.org.cn/Home/Standard?searchType=2&key=" \
21
+ "#{CGI.escape(text.tr('-', [8212].pack('U')))}"
22
+ doc = agent.get(url)
23
+ xpath = '//table[contains(@class, "standard_list_table")]/tr/td/a'
24
+ t_xpath = "../preceding-sibling::td[4]"
25
+ hits = doc.xpath(xpath).map do |h|
26
+ docref = h.at(t_xpath).text.gsub(/â\u0080\u0094/, "-")
27
+ status = h.at("../preceding-sibling::td[1]").text.delete "\r\n"
28
+ pid = h[:href].sub(%r{/$}, "")
29
+ Hit.new pid: pid, docref: docref, status: status, scraper: self
30
+ end
31
+ HitCollection.new hits
32
+ rescue Mechanize::ResponseCodeError => e
33
+ return nil if e.response_code == "404"
34
+
35
+ raise Relaton::RequestError, "Cannot access #{url}: #{e.message}"
36
+ rescue Mechanize::Error => e
37
+ raise Relaton::RequestError, "Cannot access #{url}: #{e.message}"
38
+ end
39
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
40
+
41
+ # @param hit [RelatonGb::Hit] standard's page path
42
+ # @return [RelatonGb::GbBibliographicItem]
43
+ def scrape_doc(hit)
44
+ src = "http://www.ttbz.org.cn#{hit.pid}"
45
+ doc = agent.get(src)
46
+ ItemData.new(**scrapped_data(doc, src, hit))
47
+ rescue Mechanize::Error => e
48
+ raise Relaton::RequestError, "Cannot access #{src}: #{e.message}"
49
+ end
50
+
51
+ def agent
52
+ @agent ||= Mechanize.new
53
+ end
54
+
55
+ private
56
+
57
+ # rubocop:disable Metrics/MethodLength
58
+ # @param doc [Nokogiri::HTML::Document]
59
+ # @param src [String]
60
+ # @param hit [RelatonGb::Hit]
61
+ # @return [Hash]
62
+ def scrapped_data(doc, src, hit)
63
+ # docid_xpt = '//td[contains(.,"标准编号")]/following-sibling::td[1]'
64
+ # status_xpt = '//td[contains(.,"标准状态")]/following-sibling::td[1]/span'
65
+ {
66
+ # committee: get_committee(doc, hit.docref),
67
+ docid: get_docid(hit.docref),
68
+ title: get_titles(doc),
69
+ doctype: get_type,
70
+ docstatus: get_status(doc, hit.status),
71
+ gbtype: gbtype,
72
+ ccs: get_ccs(doc),
73
+ ics: get_ics(doc),
74
+ link: [{ type: "src", content: src }],
75
+ date: get_dates(doc),
76
+ language: ["zh"],
77
+ script: ["Hans"],
78
+ structuredidentifier: fetch_structuredidentifier(hit.docref),
79
+ }
80
+ end
81
+ # rubocop:enable Metrics/MethodLength
82
+
83
+ # def get_committee(doc, _ref)
84
+ # {
85
+ # name: doc.xpath('//td[.="团体名称"]/following-sibling::td[1]').text,
86
+ # type: "technical",
87
+ # }
88
+ # end
89
+
90
+ def get_titles(doc)
91
+ xpz = '//td[contains(.,"中文标题")]/following-sibling::td[1]'
92
+ titles = Bib::Title.from_string doc.at(xpz)
93
+ .text, "zh", "Hans"
94
+ xpe = '//td[contains(.,"英文标题")]/following-sibling::td[1]'
95
+ ten = doc.xpath(xpe).text
96
+ return titles if ten.empty?
97
+
98
+ titles + Bib::Title.from_string(ten, "en", "Latn")
99
+ end
100
+
101
+ def gbtype
102
+ { scope: "social-group", prefix: "T", mandate: "mandatory",
103
+ topic: "other" }
104
+ end
105
+
106
+ def get_ccs(doc)
107
+ [doc.xpath('//td[contains(.,"中国标准分类号")]/following-sibling::td[1]')
108
+ .text.gsub(/[\r\n]/, "").strip.match(/^[^\s]+/).to_s]
109
+ end
110
+
111
+ def get_ics(doc)
112
+ xpath = '//td[contains(.,"国际标准分类号")]/following-sibling::td[1]/span'
113
+ ics = doc.xpath(xpath).text.match(/^[^\s]+/).to_s
114
+ field, group, subgroup = ics.split "."
115
+ [{ field: field, group: group.ljust(3, "0"), subgroup: subgroup }]
116
+ end
117
+
118
+ def get_dates(doc)
119
+ d = doc.xpath('//td[contains(.,"发布日期")]/following-sibling::td[1]/span')
120
+ .text.match(/(?<y>\d{4})[^\d]+(?<m>\d{2})[^\d]+(?<d>\d{2})/)
121
+ [{ type: "published", on: "#{d[:y]}-#{d[:m]}-#{d[:d]}" }]
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Gb
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-gb".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,200 @@
1
+ # GbStandardNationalPrefix
2
+ GB:
3
+ prefix: GB_national
4
+ GBn:
5
+ prefix: GBn_confidential
6
+ GJB:
7
+ prefix: GJB_military
8
+ GSB:
9
+ prefix: GSB_physical
10
+
11
+ # GbStandardSectorPrefix
12
+ NY:
13
+ prefix: NY_agriculture
14
+ administration: 农业部
15
+ SC:
16
+ prefix: SC_aquatic
17
+ administration: 农业部
18
+ SL:
19
+ prefix: SL_water_resources
20
+ administration: 水利部
21
+ QB:
22
+ prefix: QB_light_industry
23
+ administration: 国家发改委
24
+ FZ:
25
+ prefix: FZ_textile
26
+ administration: 国家发改委
27
+ YY:
28
+ prefix: YY_medicine
29
+ administration: 国家食品药品监督管理局
30
+ MZ:
31
+ prefix: MZ_civil_affairs
32
+ administration: 民政部
33
+ JY:
34
+ prefix: JY_education
35
+ administration: 教育部
36
+ YC:
37
+ prefix: YC_tobacco
38
+ administration: 国家烟草专卖局
39
+ YB:
40
+ prefix: YB_ferrous_metallurgy
41
+ administration: 国家发改委
42
+ YS:
43
+ prefix: YS_nonferrous_metallurgy
44
+ administration: 国家发改委
45
+ SY:
46
+ prefix: SY_natural_gas
47
+ administration: 国家发改委
48
+ HG:
49
+ prefix: HG_chemical_industry
50
+ administration: 国家发改委
51
+ SH:
52
+ prefix: SH_petrochemical
53
+ administration: 国家发改委
54
+ JC:
55
+ prefix: JC_building_materials
56
+ administration: 国家发改委
57
+ DZ:
58
+ prefix: DZ_geological
59
+ administration: 国土资源部
60
+ TD:
61
+ prefix: TD_land_management
62
+ administration: 国土资源部
63
+ CH:
64
+ prefix: CH_surveying
65
+ administration: 国家测绘局
66
+ JB:
67
+ prefix: JB_mechanical
68
+ administration: 国家发改委
69
+ QC:
70
+ prefix: QC_automotile
71
+ administration: 国家发改委
72
+ MH:
73
+ prefix: MH_civil_aviation
74
+ administration: 中国民航管理总局
75
+ WJ:
76
+ prefix: WJ_ordnance
77
+ administration: 国防科学工业委员会
78
+ CB:
79
+ prefix: CB_ships
80
+ administration: 国防科学工业委员会
81
+ HB:
82
+ prefix: HB_aviation
83
+ administration: 国防科学工业委员会
84
+ QJ:
85
+ prefix: QJ_aerospace
86
+ administration: 国防科学工业委员会
87
+ EJ:
88
+ prefix: EJ_nuclear_industry
89
+ administration: 国防科学工业委员会
90
+ TB:
91
+ prefix: TB_rail_transport
92
+ administration: 铁道部
93
+ JT:
94
+ prefix: JT_traffic
95
+ administration: 交通部
96
+ LD:
97
+ prefix: LD_work_safety
98
+ administration: 劳动和社会保障部
99
+ SJ:
100
+ prefix: SJ_electronics
101
+ administration: 信息产业部
102
+ YD:
103
+ prefix: YD_communication
104
+ administration: 信息产业部
105
+ GY:
106
+ prefix: GY_media
107
+ administration: 国家广播电视总局
108
+ DY:
109
+ prefix: DY_film
110
+ administration: 国家电影局
111
+ DL:
112
+ prefix: DL_electricity
113
+ administration: 国家发改委
114
+ JR:
115
+ prefix: JR_financial
116
+ administration: 中国人民银行
117
+ HY:
118
+ prefix: HY_oceanic
119
+ administration: 国家海洋局
120
+ DA:
121
+ prefix: DA_archiving
122
+ administration: 国家档案局
123
+ SN:
124
+ prefix: SN_inspection
125
+ administration: 国家质量监督检验检疫总局
126
+ WH:
127
+ prefix: WH_culture
128
+ administration: 文化部
129
+ TY:
130
+ prefix: TY_sports
131
+ administration: 国家体育总局
132
+ SB:
133
+ prefix: SB_business
134
+ administration: 商务部
135
+ WB:
136
+ prefix: WB_materials_management
137
+ administration: 国家发改委
138
+ HJ:
139
+ prefix: HJ_environment_protection
140
+ administration: 国家环境保护总局
141
+ XB:
142
+ prefix: XB_rare_earth
143
+ administration: 国家发改委稀土办公室
144
+ CJ:
145
+ prefix: CJ_town_construction
146
+ administration: 建设部
147
+ JG:
148
+ prefix: JG_construction_industry
149
+ administration: 建设部
150
+ CY:
151
+ prefix: CY_news_publishing
152
+ administration: 国家新闻出版总署
153
+ MT:
154
+ prefix: MT_coal
155
+ administration: 国家发改委
156
+ WS:
157
+ prefix: WS_health
158
+ administration: 卫生部
159
+ GA:
160
+ prefix: GA_public_safety
161
+ administration: 公安部
162
+ BB:
163
+ prefix: BB_packaging
164
+ administration: 国家发改委
165
+ DB:
166
+ prefix: DB_seismology
167
+ administration: 中国地震局
168
+ LB:
169
+ prefix: LB_tourism
170
+ administration: 国家旅游局
171
+ QX:
172
+ prefix: QX_meteorological
173
+ administration: 中国气象局
174
+ WM:
175
+ prefix: WM_foreign_trade
176
+ administration: 外经贸部科技司
177
+ HS:
178
+ prefix: HS_customs
179
+ administration: 海关总署
180
+ YZ:
181
+ prefix: YZ_postal
182
+ administration: 国家邮政局
183
+ GM:
184
+ prefix: GM_cryptography
185
+ administration: 国家密码管理局
186
+ AQ:
187
+ prefix: AQ_production_safety
188
+ administration: 国家安全生产管理局
189
+ GH:
190
+ prefix: GH_supply_marketing
191
+ administration: 中华全国供销合作总社
192
+ LS:
193
+ prefix: LS_food
194
+ administration: 国家粮食局
195
+ TJ:
196
+ prefix: TJ_railway_traffic
197
+ administration: 铁道部标准所
198
+ ZY:
199
+ prefix: ZY_chinese_medicine
200
+ administration: 国家中医药管理局
data/lib/relaton/gb.rb ADDED
@@ -0,0 +1,33 @@
1
+ require "digest/md5"
2
+ require "mechanize"
3
+ require "relaton/core"
4
+ require "relaton/iso"
5
+ require "cnccs"
6
+ require_relative "version"
7
+ require_relative "gb/util"
8
+ require_relative "gb/item_data"
9
+ require_relative "gb/item"
10
+ require_relative "gb/bibitem"
11
+ require_relative "gb/bibdata"
12
+ require_relative "gb/bibliography"
13
+
14
+ # if defined? Relaton
15
+ # require "relaton_gb/processor"
16
+ # # don't register the gem if it's required form relaton's registry
17
+ # return if caller.detect { |c| c.include? "register_gems" }
18
+
19
+ # Relaton::Registry.instance.register RelatonGb::Processor
20
+ # end
21
+
22
+ module Relaton
23
+ module Gb
24
+ # Returns hash of XML reammar
25
+ # @return [String]
26
+ def self.grammar_hash
27
+ # gem_path = File.expand_path "..", __dir__
28
+ # grammars_path = File.join gem_path, "grammars", "*"
29
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
30
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
31
+ end
32
+ end
33
+ end