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,323 @@
1
+ require "cgi"
2
+ require "ieee-idams"
3
+
4
+ module Relaton
5
+ module Ieee
6
+ class IdamsParser
7
+ include Core::ArrayWrapper
8
+
9
+ ATTRS = %i[
10
+ docnumber title date docidentifier contributor abstract copyright status
11
+ relation source keyword ext
12
+ ].freeze
13
+
14
+ # Upstream IDAMS abstracts sometimes carry escaped ASCII control
15
+ # characters as printable tokens like `<<ETX>>`. They are meaningless
16
+ # in output, and `<<…>>` blows up XML serialization downstream
17
+ # (libxml2 reads `<<` as the start of a tag). Strip the whole family.
18
+ CONTROL_PLACEHOLDER_RE = /<<[A-Z]{2,5}>>/.freeze
19
+
20
+ def initialize(doc, fetcher, errors = {})
21
+ @doc = doc
22
+ @fetcher = fetcher
23
+ @errors = errors
24
+ end
25
+
26
+ #
27
+ # Parse IEEE document
28
+ #
29
+ # @return [Relaton::Ieee::ItemData] bibliographic item data
30
+ #
31
+ def parse
32
+ args = { type: "standard", language: ["en"], script: ["Latn"] }
33
+ ATTRS.each { |attr| args[attr] = send("parse_#{attr}") }
34
+ ItemData.new(**args)
35
+ end
36
+
37
+ def parse_docnumber
38
+ result = docnumber
39
+ @errors[:docnumber] &&= result.nil?
40
+ result
41
+ end
42
+
43
+ #
44
+ # Parse docnumber
45
+ #
46
+ # @return [String] PubID
47
+ #
48
+ def docnumber
49
+ @docnumber ||= pubid&.to_id
50
+ end
51
+
52
+ #
53
+ # Create PubID
54
+ #
55
+ # @return [Relaton::Ieee::RawbibIdParser] PubID
56
+ #
57
+ def pubid
58
+ @pubid ||= begin
59
+ normtitle = @doc.normtitle
60
+ stdnumber = @doc.publicationinfo.stdnumber
61
+ RawbibIdParser.parse(normtitle, stdnumber)
62
+ end
63
+ end
64
+
65
+ #
66
+ # Parse title
67
+ #
68
+ # @return [Array<Relaton::Bib::Title>]
69
+ #
70
+ def parse_title
71
+ result = @doc.btitle.map { |args| Bib::Title.new(**args) }
72
+ @errors[:title] &&= result.empty?
73
+ result
74
+ end
75
+
76
+ #
77
+ # Parse date
78
+ #
79
+ # @return [Array<Relaton::Bib::Date>]
80
+ #
81
+ def parse_date
82
+ result = @doc.bdate.map { |args| Bib::Date.new(type: args[:type], at: args[:on]) }
83
+ @errors[:date] &&= result.empty?
84
+ result
85
+ end
86
+
87
+ #
88
+ # Parse identifiers
89
+ #
90
+ # @return [Array<Relaton::Bib::Docidentifier>]
91
+ #
92
+ def parse_docidentifier # rubocop:disable Metrics/MethodLength
93
+ ids = @doc.isbn_doi.map { |id| id[:content] = id.delete(:id); id }
94
+
95
+ ids.unshift(content: pubid.to_s(trademark: true), scope: "trademark", type: "IEEE", primary: true)
96
+ ids.unshift(content: pubid.to_s, type: "IEEE", primary: true)
97
+
98
+ result = ids.map { |dcid| Bib::Docidentifier.new(**dcid) }
99
+ @errors[:docidentifier] &&= result.empty?
100
+ result
101
+ end
102
+
103
+ #
104
+ # Parse contributors
105
+ #
106
+ # @return [Array<Relaton::Bib::Contributor>]
107
+ #
108
+ def parse_contributor
109
+ contributors = []
110
+
111
+ # Add publisher contributor
112
+ name, addr = @doc.contrib_name_addr { |args| Relaton::Bib::Address.new(**args) }
113
+ org = create_org name, addr
114
+ role = Bib::Contributor::Role.new type: "publisher"
115
+ contributors << Relaton::Bib::Contributor.new(organization: org, role: [role])
116
+
117
+ # Add committee contributors from editorial group
118
+ result = contributors + parse_committee_contributors
119
+ @errors[:contributor] &&= result.empty?
120
+ result
121
+ end
122
+
123
+ #
124
+ # Parse committee contributors from editorial group
125
+ #
126
+ # @return [Array<Relaton::Bib::Contributor>]
127
+ #
128
+ def parse_committee_contributors
129
+ committees = @doc.editorialgroup
130
+ return [] unless committees
131
+
132
+ result = committees.map do |committee|
133
+ create_committee_contributor(committee)
134
+ end
135
+ @errors[:committee] &&= result.empty?
136
+ result
137
+ end
138
+
139
+ #
140
+ # Create a committee contributor
141
+ #
142
+ # @param [String] committee committee name
143
+ #
144
+ # @return [Relaton::Bib::Contributor]
145
+ #
146
+ def create_committee_contributor(committee)
147
+ desc = Bib::LocalizedMarkedUpString.new(content: "committee", language: "en", script: "Latn")
148
+ role = Bib::Contributor::Role.new(type: "author", description: [desc])
149
+
150
+ # Create IEEE organization with committee as subdivision
151
+ orgname = Bib::TypedLocalizedString.new(
152
+ content: "Institute of Electrical and Electronics Engineers", language: "en", script: "Latn"
153
+ )
154
+ abbr = Bib::LocalizedString.new(content: "IEEE")
155
+
156
+ # Create subdivision for the committee
157
+ subdiv_name = Bib::TypedLocalizedString.new(content: CGI.unescapeHTML(committee), language: "en", script: "Latn")
158
+ subdivision = Bib::Subdivision.new(type: "committee", name: [subdiv_name])
159
+
160
+ org = Bib::Organization.new(name: [orgname], abbreviation: abbr, subdivision: [subdivision])
161
+ Relaton::Bib::Contributor.new(organization: org, role: [role])
162
+ end
163
+
164
+ #
165
+ # Parse abstract
166
+ #
167
+ # @return [Array<Relaton::Bib::LocalizedMarkedUpString>]
168
+ #
169
+ def parse_abstract
170
+ result = @doc.volume.article.articleinfo.abstract.each_with_object([]) do |abs, acc|
171
+ next unless abs.abstract_type == "Standard"
172
+
173
+ content = abs.value.gsub(CONTROL_PLACEHOLDER_RE, "").strip
174
+ next if content.empty?
175
+
176
+ acc << Bib::Abstract.new(content: content, language: "en", script: "Latn")
177
+ end
178
+ @errors[:abstract] &&= result.empty?
179
+ result
180
+ end
181
+
182
+ #
183
+ # Parse copyright
184
+ #
185
+ # @return [Array<Relaton::Bib::Copyright>]
186
+ #
187
+ def parse_copyright
188
+ result = @doc.copyright.map do |owner, year|
189
+ contrib = owner.map { |own| Bib::ContributionInfo.new organization: create_org(own) }
190
+ Bib::Copyright.new(owner: contrib, from: year)
191
+ end
192
+ @errors[:copyright] &&= result.empty?
193
+ result
194
+ end
195
+
196
+ #
197
+ # Parse status
198
+ #
199
+ # @return [Relaton::Bib::Status, nil]
200
+ #
201
+ def parse_status
202
+ return if @doc.docstatus.nil? || @doc.docstatus.empty?
203
+
204
+ @errors[:status] &&= @doc.docstatus[:stage].nil?
205
+ stage = Bib::Status::Stage.new content: @doc.docstatus[:stage]
206
+ Bib::Status.new stage: stage
207
+ end
208
+
209
+ #
210
+ # Parse relation
211
+ #
212
+ # @return [Array<Relaton::Bib::Relation>]
213
+ #
214
+ def parse_relation # rubocop:disable Metrics/AbcSize
215
+ result = array(@doc.publicationinfo.standard_relationship).each_with_object([]) do |relation, acc|
216
+ if (ref = @fetcher.backrefs[relation.date_string])
217
+ rel = @fetcher.create_relation(relation.type, ref)
218
+ acc << rel if rel
219
+ elsif !relation.date_string.include?("Inactive Date") && docnumber
220
+ @fetcher.add_crossref(docnumber, relation)
221
+ end
222
+ end
223
+ @errors[:relation] &&= result.empty?
224
+ result
225
+ end
226
+
227
+ #
228
+ # Parce source link
229
+ #
230
+ # @return [Array<Relaton::Bib::Uri>]
231
+ #
232
+ def parse_source
233
+ result = @doc.link { |url| Bib::Uri.new(content: url, type: "src") }
234
+ @errors[:source] &&= result.empty?
235
+ result
236
+ end
237
+
238
+ #
239
+ # Parse keyword
240
+ #
241
+ # @return [Array<Strign>]
242
+ #
243
+ def parse_keyword
244
+ result = @doc.keyword.map do |kw|
245
+ Bib::Keyword.new(vocab: Bib::LocalizedString.new(content: CGI.unescapeHTML(kw), language: "en", script: "Latn"))
246
+ end
247
+ @errors[:keyword] &&= result.empty?
248
+ result
249
+ end
250
+
251
+ private
252
+
253
+ #
254
+ # Create organization
255
+ #
256
+ # @param [String] name organization's name
257
+ # @param [Array<Hash>] addr address
258
+ #
259
+ # @return [Relaton::Bib::Organization]
260
+ def create_org(name, addr = []) # rubocop:disable Metrics/MethodLength
261
+ case name
262
+ when "IEEE"
263
+ abbr = Bib::LocalizedString.new content: name
264
+ n = "Institute of Electrical and Electronics Engineers"
265
+ uri = Bib::Uri.new content: "http://www.ieee.org", type: "org"
266
+ when "ANSI"
267
+ abbr = Bib::LocalizedString.new content: name
268
+ n = "American National Standards Institute"
269
+ uri = Bib::Uri.new content: "https://www.ansi.org", type: "org"
270
+ else n = name
271
+ end
272
+ orgname = Bib::TypedLocalizedString.new(content: n, language: "en", script: "Latn")
273
+ Bib::Organization.new(name: [orgname], abbreviation: abbr, uri: [uri], address: create_address(addr))
274
+ end
275
+
276
+ def create_address(addr)
277
+ addr.map { |ad| Bib::Address.new(**ad) }
278
+ end
279
+
280
+ def parse_ext
281
+ standard_status = @doc.publicationinfo.standard_status
282
+ standard_modified = @doc.standard_modifier
283
+ pubstatus = @doc.publicationinfo.pubstatus
284
+ holdstatus = @doc.publicationinfo.holdstatus
285
+ @errors[:standard_status] &&= standard_status.nil?
286
+ @errors[:standard_modified] &&= standard_modified.nil?
287
+ @errors[:pubstatus] &&= pubstatus.nil?
288
+ @errors[:holdstatus] &&= holdstatus.nil?
289
+ Ext.new(
290
+ doctype: parse_doctype,
291
+ flavor: "ieee",
292
+ ics: parse_ics,
293
+ standard_status: standard_status,
294
+ standard_modified: standard_modified,
295
+ pubstatus: pubstatus,
296
+ holdstatus: holdstatus,
297
+ )
298
+ end
299
+
300
+ #
301
+ # Parse doctype
302
+ #
303
+ # @return [Relaton::Ieee::Doctype] doctype
304
+ #
305
+ def parse_doctype
306
+ Doctype.new content: @doc.doctype
307
+ end
308
+
309
+ #
310
+ # Parse ICS
311
+ #
312
+ # @return [Array<Relaton::Bib::ICS>]
313
+ #
314
+ def parse_ics
315
+ result = @doc.ics.each_with_object([]) do |ics, acc|
316
+ acc << Bib::ICS.new(**ics) if ics[:code] && !ics[:code].empty?
317
+ end
318
+ @errors[:ics] &&= result.empty?
319
+ result
320
+ end
321
+ end
322
+ end
323
+ end
@@ -0,0 +1,11 @@
1
+ require_relative "ext"
2
+
3
+ module Relaton
4
+ module Ieee
5
+ class Item < Bib::Item
6
+ model ItemData
7
+
8
+ attribute :ext, Ext
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module Relaton
2
+ module Ieee
3
+ class ItemData < Bib::ItemData
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,68 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Ieee
5
+ class Processor < Core::Processor
6
+ attr_reader :idtype
7
+
8
+ def initialize # rubocop:disable Lint/MissingSuper
9
+ @short = :relaton_ieee
10
+ @prefix = "IEEE"
11
+ @defaultprefix = %r{^(?:(?:(?:ANSI|NACE)/)?IEEE|ANSI|AIEE|ASA|NACE|IRE)\s}
12
+ @idtype = "IEEE"
13
+ @datasets = %w[ieee-rawbib]
14
+ end
15
+
16
+ # @param code [String]
17
+ # @param date [String, NilClass] year
18
+ # @param opts [Hash]
19
+ # @return [Relaton::Ieee::ItemData, nil]
20
+ def get(code, date, opts)
21
+ require_relative "../ieee"
22
+ Bibliography.get(code, date, opts)
23
+ end
24
+
25
+ #
26
+ # Fetch all the documents from ./iee-rawbib directory
27
+ #
28
+ # @param [String] source source name
29
+ # @param [Hash] opts
30
+ # @option opts [String] :output directory to output documents
31
+ # @option opts [String] :format
32
+ #
33
+ def fetch_data(source, opts)
34
+ require_relative "data_fetcher"
35
+ DataFetcher.fetch(source, **opts)
36
+ end
37
+
38
+ # @param xml [String]
39
+ # @return [Relaton::Ieee::ItemData]
40
+ def from_xml(xml)
41
+ require_relative "../ieee"
42
+ Item.from_xml xml
43
+ end
44
+
45
+ # @param yaml [String]
46
+ # @return [Relaton::Ieee::ItemData]
47
+ def hash_to_bib(yaml)
48
+ require_relative "../ieee"
49
+ Item.from_yaml yaml
50
+ end
51
+
52
+ # Returns hash of XML grammar
53
+ # @return [String]
54
+ def grammar_hash
55
+ require_relative "../ieee"
56
+ @grammar_hash ||= Ieee.grammar_hash
57
+ end
58
+
59
+ #
60
+ # Remove index file
61
+ #
62
+ def remove_index_file
63
+ require_relative "../ieee"
64
+ Relaton::Index.find_or_create(:ieee, url: true, file: "#{INDEXFILE}.yaml").remove_file
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,161 @@
1
+ module Relaton
2
+ module Ieee
3
+ class PubId
4
+ class Id
5
+ # @return [String]
6
+ attr_reader :number
7
+
8
+ # @return [String, nil]
9
+ attr_reader :publisher, :std, :stage, :part, :status, :approval, :edition,
10
+ :draft, :rev, :corr, :amd, :redline, :year, :month
11
+
12
+ #
13
+ # PubId constructor
14
+ #
15
+ # @param [String] number
16
+ # @param [<Hash>] **args
17
+ # @option args [String] :number
18
+ # @option args [String] :publisher
19
+ # @option args [Boolean] :std
20
+ # @option args [String] :stage
21
+ # @option args [String] :part
22
+ # @option args [String] :status
23
+ # @option args [String] :approval
24
+ # @option args [String] :edition
25
+ # @option args [String] :draft
26
+ # @option args [String] :rev
27
+ # @option args [String] :corr
28
+ # @option args [String] :amd
29
+ # @option args [Boolean] :redline
30
+ # @option args [String] :year
31
+ # @option args [String] :month
32
+ #
33
+ def initialize(number:, **args) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
34
+ @publisher = args[:publisher]
35
+ @std = args[:std]
36
+ @stage = args[:stage]
37
+ @number = number
38
+ @part = args[:part]
39
+ @status = args[:status]
40
+ @approval = args[:approval]
41
+ @edition = args[:edition]
42
+ @draft = args[:draft]
43
+ @rev = args[:rev]
44
+ @corr = args[:corr]
45
+ @amd = args[:amd]
46
+ @year = args[:year]
47
+ @month = args[:month]
48
+ @redline = args[:redline]
49
+ end
50
+
51
+ #
52
+ # PubId string representation
53
+ #
54
+ # @param [Boolean] trademark if true, add trademark symbol
55
+ #
56
+ # @return [String]
57
+ #
58
+ def to_s(trademark: false) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
59
+ out = number
60
+ out = "Std #{out}" if std
61
+ out = "#{stage} #{out}" if stage
62
+ out = "#{approval} #{out}" if approval
63
+ out = "#{status} #{out}" if status
64
+ out = "#{publisher} #{out}" if publisher
65
+ out += ".#{part}" if part
66
+ if trademark
67
+ out += out.match?(/^IEEE\s(Std\s)?(802|2030)/) ? "\u00AE" : "\u2122"
68
+ end
69
+ out += edition_to_s + draft_to_s + rev_to_s + corr_to_s + amd_to_s
70
+ out + year_to_s + month_to_s + redline_to_s
71
+ end
72
+
73
+ def edition_to_s
74
+ edition ? "/E-#{edition}" : ""
75
+ end
76
+
77
+ def draft_to_s
78
+ draft ? "/D-#{draft}" : ""
79
+ end
80
+
81
+ def rev_to_s
82
+ rev ? "/R-#{rev}" : ""
83
+ end
84
+
85
+ def corr_to_s
86
+ corr ? "/Cor#{corr}" : ""
87
+ end
88
+
89
+ def amd_to_s
90
+ amd ? "/Amd#{amd}" : ""
91
+ end
92
+
93
+ def year_to_s
94
+ year ? "-#{year}" : ""
95
+ end
96
+
97
+ def month_to_s
98
+ month ? "-#{month}" : ""
99
+ end
100
+
101
+ def redline_to_s
102
+ redline ? " Redline" : ""
103
+ end
104
+ end
105
+
106
+ # @return [Array<RelatonIeee::PubId::Id>]
107
+ attr_reader :pubid
108
+
109
+ #
110
+ # IEEE publication id
111
+ #
112
+ # @param [Array<Hash>, Hash] pubid
113
+ #
114
+ def initialize(pubid)
115
+ @pubid = array(pubid).map { |id| Id.new(**id) }
116
+ end
117
+
118
+ #
119
+ # Convert to array
120
+ #
121
+ # @param [Array<Hash>, Hash] pid
122
+ #
123
+ # @return [Array<Hash>]
124
+ #
125
+ def array(pid)
126
+ pid.is_a?(Array) ? pid : [pid]
127
+ end
128
+
129
+ #
130
+ # PubId string representation
131
+ #
132
+ # @param [Boolean] trademark if true, add trademark symbol
133
+ #
134
+ # @return [String]
135
+ #
136
+ def to_s(trademark: false)
137
+ pubid.map { |id| id.to_s(trademark: trademark) }.join("/")
138
+ end
139
+
140
+ #
141
+ # Generate ID without publisher and second number
142
+ #
143
+ # @return [String]
144
+ #
145
+ def to_id # rubocop:disable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
146
+ out = pubid[0].to_s
147
+ if pubid.size > 1
148
+ out += pubid[1].edition_to_s if pubid[0].edition.nil?
149
+ out += pubid[1].draft_to_s if pubid[0].draft.nil?
150
+ out += pubid[1].rev_to_s if pubid[0].rev.nil?
151
+ out += pubid[1].corr_to_s if pubid[0].corr.nil?
152
+ out += pubid[1].amd_to_s if pubid[0].amd.nil?
153
+ out += pubid[1].year_to_s if pubid[0].year.nil?
154
+ out += pubid[1].month_to_s if pubid[0].month.nil?
155
+ out += pubid[1].redline_to_s unless pubid[0].redline
156
+ end
157
+ out
158
+ end
159
+ end
160
+ end
161
+ end