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,239 @@
1
+ module Relaton
2
+ module Oasis
3
+ # Parser for OASIS part document.
4
+ class DataPartParser
5
+ include DataParserUtils
6
+
7
+ #
8
+ # Initialize parser.
9
+ #
10
+ # @param [Nokogiri::HTML::Element] node document node
11
+ #
12
+ def initialize(node, errors = {}, agent: nil)
13
+ @node = node
14
+ @errors = errors
15
+ @agent = agent
16
+ end
17
+
18
+ def text
19
+ return @text if @text
20
+
21
+ sibling_xpath = "./strong/following-sibling::text()" \
22
+ "|./span[strong]/following-sibling::text()"
23
+ if @node.at(sibling_xpath)
24
+ nodes_xpath = "./strong/following-sibling::node()" \
25
+ "|./span[strong]/following-sibling::node()"
26
+ @text = @node.xpath(nodes_xpath).text.strip
27
+ else
28
+ @text = @node.xpath("./following-sibling::p[1][em]").text.strip
29
+ end
30
+ end
31
+
32
+ def title
33
+ return @title if @title
34
+
35
+ xpath = "./span[@class='citationTitle' " \
36
+ "or @class='citeTitle']|./em|./i"
37
+ t = @node.at(xpath)
38
+ @title = if t
39
+ t.text
40
+ else
41
+ m = text.match(/(?<content>.+)\s(?:Edited|\d{2}\s\w+\d{4})/)
42
+ m ? m[:content] : text
43
+ end.strip
44
+ end
45
+
46
+ #
47
+ # Parse document.
48
+ #
49
+ # @return [ItemData] bibliographic item data
50
+ #
51
+ def parse # rubocop:disable Metrics/MethodLength
52
+ ItemData.new(
53
+ type: "standard",
54
+ title: parse_title,
55
+ docidentifier: parse_docid,
56
+ source: parse_link,
57
+ docnumber: parse_docnumber,
58
+ date: parse_date,
59
+ abstract: parse_abstract,
60
+ language: ["en"],
61
+ script: ["Latn"],
62
+ relation: parse_relation,
63
+ contributor: parse_contributor,
64
+ ext: create_ext,
65
+ )
66
+ end
67
+
68
+ #
69
+ # Parse title.
70
+ #
71
+ # @return [Array<Bib::Title>] title
72
+ #
73
+ def parse_title
74
+ result = [Bib::Title.new(type: "main", content: title,
75
+ language: "en", script: "Latn")]
76
+ @errors[:part_title] &&= result.empty?
77
+ result
78
+ end
79
+
80
+ #
81
+ # Parse document number.
82
+ #
83
+ # @return [String] document number
84
+ #
85
+ def parse_docnumber
86
+ ref = @node.at("./span/strong|./strong|./b/span")
87
+ num = ref.text.match(/[^\[\]]+/).to_s
88
+ id = parse_errata(num)
89
+ # some part refs need "Pt" to distinguish from root doc
90
+ id += "-Pt" if %w[CMIS-v1.1 DocBook-5.0 XACML-V3.0 mqtt-v3.1.1
91
+ OData-JSON-Format-v4.0].include?(id)
92
+ result = parse_part parse_spec id
93
+ @errors[:part_docnumber] &&= result.nil?
94
+ result
95
+ end
96
+
97
+ #
98
+ # Parse link.
99
+ #
100
+ # @return [Array<Bib::Uri>] link
101
+ #
102
+ def parse_link
103
+ result = [Bib::Uri.new(type: "src", content: link_node[:href])]
104
+ @errors[:part_link] &&= result.empty?
105
+ result
106
+ end
107
+
108
+ #
109
+ # Parse date.
110
+ #
111
+ # @return [Array<Bib::Date>] bibliographic dates
112
+ #
113
+ def parse_date
114
+ match = text.match(/(?<on>\d{1,2}\s\w+\s\d{4})/)
115
+ result = match ? [Bib::Date.new(at: Date.parse(match[:on]).to_s, type: "issued")] : []
116
+ @errors[:part_date] &&= result.empty?
117
+ result
118
+ end
119
+
120
+ def parse_abstract # rubocop:disable Metrics/MethodLength
121
+ result = if page
122
+ xpath = "//p[preceding-sibling::p" \
123
+ "[starts-with(., 'Abstract')]][1]"
124
+ page.xpath(xpath).map do |p|
125
+ cnt = p.text.gsub(/[\r\n]+/, " ").strip
126
+ Bib::Abstract.new(
127
+ content: cnt, language: "en", script: "Latn",
128
+ )
129
+ end
130
+ else
131
+ []
132
+ end
133
+ @errors[:part_abstract] &&= result.empty?
134
+ result
135
+ end
136
+
137
+ #
138
+ # Parse editorial group as contributors.
139
+ #
140
+ # @return [Array<Bib::Contributor>] editorial group contributors
141
+ #
142
+ def parse_editorialgroup_contributor # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
143
+ result = if page
144
+ xpath = "//p[preceding-sibling::p" \
145
+ "[starts-with(., 'Technical')]][1]//a"
146
+ tcs = page.xpath(xpath)
147
+ if tcs.empty?
148
+ []
149
+ else
150
+ subdivisions = tcs.map do |a|
151
+ name = [Bib::TypedLocalizedString.new(
152
+ content: a.text.strip,
153
+ )]
154
+ Bib::Subdivision.new(
155
+ type: "technical-committee", name: name,
156
+ )
157
+ end
158
+ org = Bib::Organization.new(
159
+ name: [Bib::TypedLocalizedString.new(
160
+ content: "OASIS",
161
+ )],
162
+ subdivision: subdivisions,
163
+ )
164
+ desc = [Bib::LocalizedMarkedUpString.new(
165
+ content: "committee",
166
+ )]
167
+ role = Bib::Contributor::Role.new(
168
+ type: "author", description: desc,
169
+ )
170
+ [Bib::Contributor.new(organization: org,
171
+ role: [role])]
172
+ end
173
+ else
174
+ []
175
+ end
176
+ @errors[:part_editorialgroup_contributor] &&= result.empty?
177
+ result
178
+ end
179
+
180
+ #
181
+ # Parse relation.
182
+ #
183
+ # @return [Array<Bib::Relation>] document relations
184
+ #
185
+ def parse_relation
186
+ parser = DataParser.new(@node.at("./ancestor::details"), @errors, agent: @agent)
187
+ fref = parser.parse_docid[0].content
188
+ bib = ItemData.new(formattedref: Bib::Formattedref.new(content: fref))
189
+ result = [Bib::Relation.new(type: "partOf", bibitem: bib)]
190
+ @errors[:part_relation] &&= result.empty?
191
+ result
192
+ end
193
+
194
+ def parse_authorizer # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
195
+ result = if page
196
+ xpath = "//p[preceding-sibling::p" \
197
+ "[starts-with(., 'Technical')]][1]//a"
198
+ page.xpath(xpath).map do |a|
199
+ org_name = a.text.gsub(/[\r\n]+/, " ").strip
200
+ org = Bib::Organization.new(
201
+ name: [Bib::TypedLocalizedString.new(
202
+ content: org_name,
203
+ )],
204
+ uri: [Bib::Uri.new(type: "uri",
205
+ content: a[:href])],
206
+ )
207
+ desc = [Bib::LocalizedMarkedUpString.new(
208
+ content: "Committee",
209
+ )]
210
+ role = Bib::Contributor::Role.new(
211
+ type: "authorizer", description: desc,
212
+ )
213
+ Bib::Contributor.new(organization: org,
214
+ role: [role])
215
+ end
216
+ else
217
+ []
218
+ end
219
+ @errors[:part_authorizer] &&= result.empty?
220
+ result
221
+ end
222
+
223
+ def link_node
224
+ @link_node = @node.at("./a|./following-sibling::p[1]/a")
225
+ end
226
+
227
+ #
228
+ # Parse technology area.
229
+ #
230
+ # @return [Array<String>] technology areas
231
+ #
232
+ def parse_technology_area
233
+ result = super(@node.at("./ancestor::details"))
234
+ @errors[:part_technology_area] &&= result.empty?
235
+ result
236
+ end
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,7 @@
1
+ module Relaton
2
+ module Oasis
3
+ class Doctype < Bib::Doctype
4
+ attribute :content, :string, values: %w[specification memorandum resolution standard]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ require_relative "doctype"
2
+
3
+ module Relaton
4
+ module Oasis
5
+ class Ext < Bib::Ext
6
+ attribute :doctype, Doctype
7
+ attribute :technology_area, :string, collection: true, values: %w[
8
+ Cloud Content-Technologies Cybersecurity e-Business eGov/Legal Emergency-Management
9
+ Energy Information-Modeling IoT Lifecycle-Integration Localization Messaging
10
+ Privacy/Identity Security SOA Web-Services Software-Development Virtualization
11
+ ]
12
+
13
+ xml { map_element "technology-area", to: :technology_area }
14
+ key_value { map "technology_area", to: :technology_area }
15
+
16
+ def get_schema_version = Relaton.schema_versions["relaton-model-oasis"]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require_relative "ext"
2
+
3
+ module Relaton
4
+ module Oasis
5
+ class Item < Bib::Item
6
+ model ItemData
7
+
8
+ attribute :ext, Ext
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ module Relaton
2
+ module Oasis
3
+ class ItemData < Bib::ItemData
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "relaton/core/processor"
4
+
5
+ module Relaton
6
+ module Oasis
7
+ class Processor < Core::Processor
8
+ def initialize # rubocop:disable Lint/MissingSuper
9
+ @short = :relaton_oasis
10
+ @prefix = "OASIS"
11
+ @defaultprefix = %r{^OASIS\s}
12
+ @idtype = "OASIS"
13
+ @datasets = %w[oasis-open]
14
+ end
15
+
16
+ # @param code [String]
17
+ # @param date [String, nil] year
18
+ # @param opts [Hash]
19
+ # @return [Relaton::Oasis::Item]
20
+ def get(code, date, opts)
21
+ require_relative "../oasis"
22
+ Bibliography.get(code, date, opts)
23
+ end
24
+
25
+ #
26
+ # Fetch all the documents from https://www.oasis-open.org/standards/
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(**opts)
36
+ end
37
+
38
+ # @param xml [String]
39
+ # @return [Relaton::Oasis::Item]
40
+ def from_xml(xml)
41
+ require_relative "../oasis"
42
+ Item.from_xml(xml)
43
+ end
44
+
45
+ # @param yaml [String]
46
+ # @return [Relaton::Oasis::Item]
47
+ def from_yaml(yaml)
48
+ require_relative "../oasis"
49
+ Item.from_yaml(yaml)
50
+ end
51
+
52
+ # Returns hash of XML grammar
53
+ # @return [String]
54
+ def grammar_hash
55
+ require_relative "../oasis"
56
+ @grammar_hash ||= Relaton::Oasis.grammar_hash
57
+ end
58
+
59
+ #
60
+ # Remove index file
61
+ #
62
+ def remove_index_file
63
+ require_relative "../oasis"
64
+ Relaton::Index.find_or_create(:oasis, file: "#{INDEXFILE}.yaml").remove_file
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Oasis
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-oasis".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "relaton/index"
4
+ require "relaton/bib"
5
+ require_relative "version"
6
+ require_relative "oasis/util"
7
+ require_relative "oasis/item_data"
8
+ require_relative "oasis/item"
9
+ require_relative "oasis/bibitem"
10
+ require_relative "oasis/bibdata"
11
+ require_relative "oasis/bibliography"
12
+
13
+ module Relaton
14
+ module Oasis
15
+ INDEXFILE = "index-v1"
16
+ class Error < StandardError; end
17
+ # Your code goes here...
18
+
19
+ # Returns hash of XML reammar
20
+ # @return [String]
21
+ def self.grammar_hash
22
+ # gem_path = File.expand_path "..", __dir__
23
+ # grammars_path = File.join gem_path, "grammars", "*"
24
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
25
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Bibdata < Item
4
+ model ItemData
5
+ include Bib::BibdataShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,64 @@
1
+ module Relaton
2
+ module Ogc
3
+ module Bibliography
4
+ extend self
5
+
6
+ # @param text [String]
7
+ # @param year [String, nil]
8
+ # @return [Relaton::Ogc::HitCollection]
9
+ def search(text, year = nil, _opts = {})
10
+ code = text.sub(/^OGC\s/, "")
11
+ HitCollection.new(code, year).find
12
+ rescue Faraday::ConnectionFailed, Faraday::SSLError
13
+ raise Relaton::RequestError, HitCollection::ENDPOINT
14
+ end
15
+
16
+ # @param code [String]
17
+ # @param year [String, nil]
18
+ # @param opts [Hash]
19
+ # @return [Relaton::Ogc::ItemData, nil]
20
+ def get(code, year = nil, opts = {})
21
+ result = bib_search_filter(code, year, opts) || (return nil)
22
+ ret = bib_results_filter(result, year)
23
+ if ret[:ret]
24
+ Util.info "Found: `#{ret[:ret].docidentifier.first.content}`", key: code
25
+ ret[:ret]
26
+ else
27
+ fetch_ref_err(code, year, ret[:years])
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def bib_search_filter(code, year, opts)
34
+ Util.info "Fetching from Relaton repository ...", key: code
35
+ search(code, year, opts)
36
+ end
37
+
38
+ def bib_results_filter(result, year)
39
+ missed_years = []
40
+ result.each do |r|
41
+ item = r.item
42
+ return { ret: item } unless year
43
+
44
+ item.date.select { |d| d.type == "published" }.each do |d|
45
+ date_year = ::Date.parse(d.at.to_s).year
46
+ return { ret: item } if year.to_i == date_year
47
+
48
+ missed_years << date_year
49
+ end
50
+ end
51
+ { years: missed_years }
52
+ end
53
+
54
+ def fetch_ref_err(code, year, missed_years)
55
+ Util.info "Not found.", key: code
56
+ unless missed_years.empty?
57
+ Util.info "There was no match for `#{year}`, though there " \
58
+ "were matches found for `#{missed_years.join('`, `')}`.", key: code
59
+ end
60
+ nil
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "faraday"
5
+ require "json"
6
+ require_relative "../ogc"
7
+ require_relative "scraper"
8
+
9
+ module Relaton
10
+ module Ogc
11
+ class DataFetcher < Core::DataFetcher
12
+ ENDPOINT = "https://raw.githubusercontent.com/opengeospatial/NamingAuthority/master/definitions/docs/docs.json"
13
+
14
+ def initialize(output, format)
15
+ super
16
+ @etagfile = File.join output, "etag.txt"
17
+ @docids = []
18
+ @dupids = Set.new
19
+ end
20
+
21
+ def log_error(msg)
22
+ Util.error msg
23
+ end
24
+
25
+ def index
26
+ @index ||= Relaton::Index.find_or_create :ogc, file: "#{INDEXFILE}.yaml"
27
+ end
28
+
29
+ def fetch(_source = nil) # rubocop:disable Metrics/AbcSize
30
+ get_data do |etag, json|
31
+ no_errors = true
32
+ json.each_value { |hit| fetch_doc(hit) || no_errors = false }
33
+ if @dupids.any?
34
+ Util.warn "Duplicated documents: #{@dupids.to_a.join(', ')}"
35
+ end
36
+ self.etag = etag if no_errors
37
+ index.save
38
+ report_errors
39
+ end
40
+ end
41
+
42
+ def fetch_doc(hit)
43
+ return if hit["type"] == "CC"
44
+
45
+ bib = Scraper.parse_page hit, @errors
46
+ write_document bib
47
+ true
48
+ rescue StandardError => e
49
+ Util.error "Fetching document: #{hit['identifier']}\n" \
50
+ "#{e.class} #{e.message}\n#{e.backtrace}"
51
+ false
52
+ end
53
+
54
+ def write_document(bib) # rubocop:disable Metrics/AbcSize
55
+ docid = bib.docidentifier[0].content
56
+ if @docids.include?(docid)
57
+ @dupids << docid
58
+ return
59
+ end
60
+
61
+ @docids << docid
62
+ file = file_name bib
63
+ index.add_or_update docid, file
64
+ File.write file, serialize(bib), encoding: "UTF-8"
65
+ end
66
+
67
+ def file_name(bib)
68
+ name = bib.docidentifier[0].content.upcase.gsub(/[\s:.]/, "_")
69
+ "#{@output}/#{name}.#{@ext}"
70
+ end
71
+
72
+ def to_yaml(bib)
73
+ Item.to_yaml bib
74
+ end
75
+
76
+ def to_xml(bib)
77
+ Bibdata.to_xml bib
78
+ end
79
+
80
+ def to_bibxml(_bib)
81
+ raise NotImplementedError, "OGC does not support bibxml format"
82
+ end
83
+
84
+ # @return [String, nil]
85
+ def etag
86
+ @etag ||= if File.exist? @etagfile
87
+ File.read @etagfile, encoding: "UTF-8"
88
+ end
89
+ end
90
+
91
+ # @param e_tag [String]
92
+ def etag=(e_tag)
93
+ File.write @etagfile, e_tag, encoding: "UTF-8"
94
+ end
95
+
96
+ def get_data # rubocop:disable Metrics/AbcSize
97
+ h = {}
98
+ h["If-None-Match"] = etag if etag
99
+ resp = Faraday.new(ENDPOINT, headers: h).get
100
+ case resp.status
101
+ when 200
102
+ json = JSON.parse(resp.body)
103
+ block_given? ? yield(resp[:etag], json) : json
104
+ when 304 then []
105
+ else raise Relaton::RequestError, "Could not access #{ENDPOINT}"
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,6 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Docidentifier < Bib::Docidentifier
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Doctype < Bib::Doctype
4
+ attribute :content, :string, values: %w[
5
+ abstract-specification-topic best-practice change-request-supporting-document
6
+ community-practice community-standard discussion-paper engineering-report
7
+ other policy reference-model release-notes standard user-guide white-paper
8
+ test-suite draft-standard
9
+ ]
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "doctype"
2
+
3
+ module Relaton
4
+ module Ogc
5
+ class Ext < Bib::Ext
6
+ attribute :doctype, Doctype
7
+ attribute :subdoctype, :string, values: %w[
8
+ conceptual-model conceptual-model-and-encoding conceptual-model-and-implementation
9
+ encoding extension implementation profile profile-with-extension general
10
+ ]
11
+
12
+ def get_schema_version = Relaton.schema_versions["relaton-model-ogc"]
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ module Relaton
2
+ module Ogc
3
+ class Hit < Core::Hit
4
+ # @return [Relaton::Ogc::ItemData]
5
+ def item
6
+ @item ||= begin
7
+ url = "#{HitCollection::ENDPOINT}#{hit[:file]}"
8
+ resp = Faraday.get(url) { |req| req.options.timeout = 10 }
9
+ return unless resp.status == 200
10
+
11
+ item = Item.from_yaml resp.body
12
+ item.fetched = Date.today.to_s
13
+ item
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ require "faraday"
2
+ require_relative "hit"
3
+
4
+ module Relaton
5
+ module Ogc
6
+ class HitCollection < Core::HitCollection
7
+ ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-ogc/v2/".freeze
8
+
9
+ # @return [self]
10
+ def find
11
+ return self if ref.nil? || ref.empty?
12
+
13
+ row = index.search(ref).min_by { |r| r[:id] }
14
+ return self unless row
15
+
16
+ url = "#{ENDPOINT}#{row[:file]}"
17
+ resp = Faraday.get(url) { |req| req.options.timeout = 10 }
18
+ return self unless resp.status == 200
19
+
20
+ item = Item.from_yaml resp.body
21
+ item.fetched = Date.today.to_s
22
+ hit = Hit.new({ code: item.docidentifier[0]&.content, file: row[:file] }, self)
23
+ hit.instance_variable_set(:@item, item)
24
+ @array = [hit]
25
+ self
26
+ end
27
+
28
+ # @return [Relaton::Index]
29
+ def index
30
+ @index ||= Relaton::Index.find_or_create(
31
+ :ogc, url: "#{ENDPOINT}index-v1.zip", file: "#{INDEXFILE}.yaml",
32
+ )
33
+ end
34
+ end
35
+ end
36
+ end