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,13 @@
1
+ require_relative "docidentifier"
2
+ require_relative "ext"
3
+
4
+ module Relaton
5
+ module Ogc
6
+ class Item < Iso::Item
7
+ model ItemData
8
+
9
+ attribute :docidentifier, Docidentifier, collection: true, initialize_empty: true
10
+ attribute :ext, Ext
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ module Relaton
2
+ module Ogc
3
+ class ItemData < Bib::ItemData
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,58 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Ogc
5
+ class Processor < Core::Processor
6
+ def initialize # rubocop:disable Lint/MissingSuper
7
+ @short = :relaton_ogc
8
+ @prefix = "OGC"
9
+ @defaultprefix = %r{^OGC\s}
10
+ @idtype = "OGC"
11
+ @datasets = %w[ogc-naming-authority]
12
+ end
13
+
14
+ # @param code [String]
15
+ # @param date [String, nil]
16
+ # @param opts [Hash]
17
+ # @return [Relaton::Ogc::ItemData]
18
+ def get(code, date, opts)
19
+ require_relative "../ogc"
20
+ Bibliography.get(code, date, opts)
21
+ end
22
+
23
+ # @param source [String]
24
+ # @param opts [Hash]
25
+ def fetch_data(_source, opts)
26
+ require_relative "data_fetcher"
27
+ DataFetcher.fetch(**opts)
28
+ end
29
+
30
+ # @param xml [String]
31
+ # @return [Relaton::Ogc::ItemData]
32
+ def from_xml(xml)
33
+ require_relative "../ogc"
34
+ Item.from_xml xml
35
+ end
36
+
37
+ # @param yaml [String]
38
+ # @return [Relaton::Ogc::ItemData]
39
+ def from_yaml(yaml)
40
+ require_relative "../ogc"
41
+ Item.from_yaml yaml
42
+ end
43
+
44
+ # @return [String]
45
+ def grammar_hash
46
+ require_relative "../ogc"
47
+ @grammar_hash ||= Relaton::Ogc.grammar_hash
48
+ end
49
+
50
+ def remove_index_file
51
+ require_relative "../ogc"
52
+ Relaton::Index.find_or_create(
53
+ :ogc, url: true, file: "#{INDEXFILE}.yaml",
54
+ ).remove_file
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Relaton
4
+ module Ogc
5
+ class Scraper
6
+ TYPES = {
7
+ "AS" => { type: "abstract-specification-topic" },
8
+ "BP" => { type: "best-practice", subtype: "general" },
9
+ "CAN" => { type: "standard", subtype: "general", stage: "draft" },
10
+ "CR" => { type: "change-request-supporting-document" },
11
+ "CP" => { type: "community-practice" },
12
+ "CS" => { type: "community-standard" },
13
+ "DP" => { type: "discussion-paper" },
14
+ "DP-Draft" => { type: "discussion-paper", stage: "draft" },
15
+ "IPR" => { type: "engineering-report" },
16
+ "IS" => { type: "standard", subtype: "implementation" },
17
+ "ISC" => { type: "standard", subtype: "implementation" },
18
+ "ISx" => { type: "standard", subtype: "extension" },
19
+ "Notes" => { type: "other" },
20
+ "ORM" => { type: "reference-model" },
21
+ "PC" => { type: "standard", subtype: "profile" },
22
+ "PER" => { type: "engineering-report" },
23
+ "POL" => { type: "standard" },
24
+ "Primer" => { type: "other" },
25
+ "Profile" => { type: "standard", subtype: "profile" },
26
+ "RFC" => { type: "standard", stage: "draft" },
27
+ "SAP" => { type: "standard", subtype: "profile" },
28
+ "WhitePaper" => { type: "white-paper" },
29
+ "ATB" => { type: "other" },
30
+ "RP" => { type: "discussion-paper" },
31
+ }.freeze
32
+
33
+ def self.parse_page(hit, errors = Hash.new(true))
34
+ new(hit, errors).parse
35
+ end
36
+
37
+ # @param hit [Hash]
38
+ # @param errors [Hash]
39
+ def initialize(hit, errors = Hash.new(true))
40
+ @hit = hit
41
+ @errors = errors
42
+ end
43
+
44
+ # @return [Relaton::Ogc::ItemData]
45
+ def parse # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
46
+ type = fetch_type(@hit["type"])
47
+ contribs = fetch_contributor(@hit)
48
+ contribs << fetch_editorialgroup_contributor
49
+ ItemData.new(
50
+ type: "standard",
51
+ title: fetch_title(@hit["title"]),
52
+ docidentifier: fetch_docid(@hit["identifier"]),
53
+ source: fetch_link(@hit),
54
+ status: fetch_status(type[:stage]),
55
+ edition: fetch_edition(@hit["identifier"]),
56
+ abstract: fetch_abstract(@hit["description"]),
57
+ contributor: contribs,
58
+ language: ["en"],
59
+ script: ["Latn"],
60
+ date: fetch_date(@hit["date"]),
61
+ ext: Ext.new(
62
+ doctype: fetch_doctype(type[:type]),
63
+ subdoctype: type[:subtype],
64
+ flavor: "ogc",
65
+ ),
66
+ )
67
+ end
68
+
69
+ private
70
+
71
+ def fetch_editorialgroup_contributor # rubocop:disable Metrics/MethodLength
72
+ desc = Bib::LocalizedMarkedUpString.new(content: "committee")
73
+ role = Bib::Contributor::Role.new(
74
+ type: "author", description: [desc],
75
+ )
76
+ ogc = "Open Geospatial Consortium"
77
+ org = Bib::Organization.new(
78
+ name: [Bib::TypedLocalizedString.new(content: ogc)],
79
+ abbreviation: Bib::LocalizedString.new(content: "OGC"),
80
+ subdivision: [Bib::Subdivision.new(
81
+ type: "technical-committee",
82
+ name: [Bib::TypedLocalizedString.new(content: "technical")],
83
+ )],
84
+ )
85
+ Bib::Contributor.new(role: [role], organization: org)
86
+ end
87
+
88
+ # @param title [String]
89
+ # @return [Array<Bib::Title>]
90
+ def fetch_title(title)
91
+ result = Bib::Title.from_string title, "en", "Latn"
92
+ @errors[:title] &&= result.empty?
93
+ result
94
+ end
95
+
96
+ # @param identifier [String]
97
+ # @return [Array<Bib::Docidentifier>]
98
+ def fetch_docid(identifier)
99
+ @errors[:docid] &&= identifier.to_s.strip.empty?
100
+ id = Docidentifier.new(
101
+ content: identifier, type: "OGC", primary: true,
102
+ )
103
+ [id]
104
+ end
105
+
106
+ # @param hit [Hash]
107
+ # @return [Array<Bib::Uri>]
108
+ def fetch_link(hit) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
109
+ link = []
110
+ uri = hit["URI"].to_s.strip
111
+ unless uri.empty?
112
+ link << Bib::Uri.new(type: "src", content: uri)
113
+ end
114
+ return link unless hit["URL"] && !hit["URL"].strip.empty?
115
+
116
+ type = link_type(hit["URL"])
117
+ link << Bib::Uri.new(type: type, content: hit["URL"].strip)
118
+ ensure
119
+ @errors[:link] &&= link.empty?
120
+ end
121
+
122
+ def link_type(url)
123
+ ext = url.match(/(?<=\.)(?<ext>pdf|html|doc)$/)
124
+ return ext[:ext] if ext
125
+
126
+ case url
127
+ when /portal\.(ogc|opengeospatial)\.org/,
128
+ /usgif\.org/
129
+ "pdf"
130
+ else "html"
131
+ end
132
+ end
133
+
134
+ # @param type [String]
135
+ # @return [Doctype]
136
+ def fetch_doctype(type)
137
+ Doctype.new(content: type)
138
+ end
139
+
140
+ # @param type [String]
141
+ # @return [Hash]
142
+ def fetch_type(type)
143
+ TYPES[type.sub(/^D-/, "")] || { type: "other" }
144
+ end
145
+
146
+ # @param stage [String, nil]
147
+ # @return [Bib::Status, nil]
148
+ def fetch_status(stage)
149
+ @errors[:status] &&= stage.nil?
150
+ return unless stage
151
+
152
+ stg = Bib::Status::Stage.new(content: stage)
153
+ Bib::Status.new(stage: stg)
154
+ end
155
+
156
+ # @param identifier [String]
157
+ # @return [String, nil]
158
+ def fetch_edition(identifier)
159
+ %r{(?<=r)(?<edition>\d+)$} =~ identifier
160
+ @errors[:edition] &&= edition.nil?
161
+ edition && Bib::Edition.new(content: edition)
162
+ end
163
+
164
+ # @param description [String]
165
+ # @return [Array<Bib::LocalizedMarkedUpString>]
166
+ def fetch_abstract(description)
167
+ @errors[:abstract] &&= description.to_s.strip.empty?
168
+ abs = Bib::Abstract.new(
169
+ content: description, language: "en", script: "Latn",
170
+ )
171
+ [abs]
172
+ end
173
+
174
+ # @param doc [Hash]
175
+ # @return [Array<Bib::Contributor>]
176
+ def fetch_contributor(doc)
177
+ contribs = doc["creator"].to_s.split(", ").map do |name|
178
+ person_contrib name
179
+ end
180
+ contribs << org_contrib(doc["publisher"]) if doc["publisher"]
181
+ @errors[:contributor] &&= contribs.empty?
182
+ contribs
183
+ end
184
+
185
+ # @param name [String]
186
+ # @return [Bib::Contributor]
187
+ def person_contrib(name)
188
+ Bib::Contributor.new(
189
+ person: Bib::Person.new(
190
+ name: Bib::FullName.new(
191
+ completename: Bib::LocalizedString.new(content: name),
192
+ ),
193
+ ),
194
+ role: [Bib::Contributor::Role.new(type: "author")],
195
+ )
196
+ end
197
+
198
+ # @param name [String]
199
+ # @return [Bib::Contributor]
200
+ def org_contrib(name)
201
+ Bib::Contributor.new(
202
+ organization: Bib::Organization.new(
203
+ name: [Bib::TypedLocalizedString.new(content: name)],
204
+ ),
205
+ role: [Bib::Contributor::Role.new(type: "publisher")],
206
+ )
207
+ end
208
+
209
+ # @param date [String, nil]
210
+ # @return [Array<Bib::Date>]
211
+ def fetch_date(date)
212
+ result = if date
213
+ [Bib::Date.new(type: "published", at: date)]
214
+ else
215
+ []
216
+ end
217
+ @errors[:date] &&= result.empty?
218
+ result
219
+ rescue Date::Error
220
+ @errors[:date] &&= true
221
+ []
222
+ end
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ogc
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-ogc".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,26 @@
1
+ require "relaton/index"
2
+ require "relaton/iso"
3
+ require_relative "version"
4
+ require_relative "ogc/util"
5
+ require_relative "ogc/item_data"
6
+ require_relative "ogc/item"
7
+ require_relative "ogc/bibitem"
8
+ require_relative "ogc/bibdata"
9
+ require_relative "ogc/hit_collection"
10
+ require_relative "ogc/bibliography"
11
+
12
+ module Relaton
13
+ module Ogc
14
+ INDEXFILE = "index-v1".freeze
15
+ class Error < StandardError; end
16
+
17
+ # Returns hash of XML reammar
18
+ # @return [String]
19
+ def self.grammar_hash
20
+ # gem_path = File.expand_path "..", __dir__
21
+ # grammars_path = File.join gem_path, "grammars", "*"
22
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
23
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Oiml
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 Oiml
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,94 @@
1
+ require "net/http"
2
+
3
+ module Relaton
4
+ module Oiml
5
+ module Bibliography
6
+ ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-oiml/main/".freeze
7
+
8
+ class << self
9
+ #
10
+ # Search for an OIML publication by its identifier.
11
+ #
12
+ # @param text [String, Pubid::Oiml::Identifier] the OIML reference to
13
+ # look up (e.g. "OIML R 138" or "OIML R 138:2007 (E)")
14
+ # @param year [String, nil] the edition year (optional; may also be
15
+ # embedded in the reference)
16
+ # @param _opts [Hash] options (unused)
17
+ #
18
+ # @return [Relaton::Oiml::Item, nil] the publication or nil if not found
19
+ #
20
+ def search(text, year = nil, _opts = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
21
+ pubid = text.is_a?(String) ? ::Pubid::Oiml.parse(text) : text
22
+ Util.info "Fetching from Relaton repository ...", key: pubid.to_s
23
+ # Pass the pubid so Relaton::Index narrows candidates by number via
24
+ # binary search before applying the block. Every row's `:id` is a
25
+ # Pubid::Oiml::Identifier (Relaton::Index deserialized it via the
26
+ # `pubid_class` passed in `#index`), so the block compares pubids and
27
+ # the result picks the latest edition.
28
+ row = index.search(pubid) { |r| pubid_match?(r[:id], pubid, year) }
29
+ .max_by { |r| r[:id].year.to_i }
30
+ unless row
31
+ Util.info "Not found.", key: pubid.to_s
32
+ return
33
+ end
34
+
35
+ uri = URI("#{ENDPOINT}#{row[:file]}")
36
+ resp = Net::HTTP.get_response uri
37
+ unless resp.code == "200"
38
+ raise Relaton::RequestError, "Could not access #{uri}: HTTP #{resp.code}"
39
+ end
40
+
41
+ item = Relaton::Oiml::Item.from_yaml resp.body
42
+ Util.info "Found: `#{item.docidentifier.first&.content}`", key: pubid.to_s
43
+ item.tap { |i| i.fetched = Date.today.to_s }
44
+ rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
45
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
46
+ Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
47
+ Errno::ETIMEDOUT => e
48
+ raise Relaton::RequestError, "Could not access #{uri}: #{e.message}"
49
+ end
50
+
51
+ # @see #search
52
+ def get(ref, year = nil, opts = {})
53
+ search(ref, year, opts)
54
+ end
55
+
56
+ private
57
+
58
+ def index
59
+ Relaton::Index.find_or_create(
60
+ :oiml,
61
+ url: "#{ENDPOINT}#{INDEXFILE}.zip",
62
+ file: "#{INDEXFILE}.yaml",
63
+ pubid_class: ::Pubid::Oiml::Identifier,
64
+ )
65
+ end
66
+
67
+ # Both `row_id` and `query` are Pubid::Oiml::Identifier instances.
68
+ # Matching is on the year/language-stripped "stem" (e.g. `OIML R 138`),
69
+ # which keeps the type letter and any amendment suffix — so an amendment
70
+ # (`OIML R 138-Amend`) never matches the base record, even though pubid
71
+ # does not expose the suffix as its own attribute. Language must match
72
+ # exactly (a language-less query targets the language-less abstract
73
+ # record); year is nil-tolerant so an unqualified query finds the latest
74
+ # edition (selected by `max_by` in #search). The `year` argument lets a
75
+ # caller pin an edition the reference string omitted.
76
+ def pubid_match?(row_id, query, year)
77
+ wanted_year = (query.year || year)&.to_s
78
+ stem(row_id) == stem(query) &&
79
+ row_id.language.to_s == query.language.to_s &&
80
+ (wanted_year.nil? || row_id.year.to_s == wanted_year)
81
+ end
82
+
83
+ # The identifier without its edition year or language, e.g.
84
+ # `OIML R 138:2007 (E)` -> `OIML R 138`. Built from pubid's own model
85
+ # via #exclude (returns a copy, so the cached index id is untouched)
86
+ # rather than string surgery on #to_s. The amendment suffix is kept, so
87
+ # an amendment (`OIML R 138-Amend`) never reduces to the base record.
88
+ def stem(pubid)
89
+ pubid.exclude(:year, :language).to_s
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,33 @@
1
+ module Relaton
2
+ module Oiml
3
+ class Docidentifier < Bib::Docidentifier
4
+ attr_reader :pubid
5
+
6
+ def initialize(attrs = {}, options = {})
7
+ pubid = attrs.is_a?(Hash) ? attrs.delete(:pubid) : nil
8
+ attrs[:content] ||= pubid.to_s if pubid
9
+ super
10
+ @pubid = pubid if pubid
11
+ end
12
+
13
+ def content=(value)
14
+ super
15
+ @pubid = ::Pubid::Oiml.parse(value) if value
16
+ rescue StandardError
17
+ @pubid = nil
18
+ end
19
+
20
+ def remove_part!
21
+ @pubid&.part = nil
22
+ end
23
+
24
+ def remove_date!
25
+ @pubid&.date = nil
26
+ end
27
+
28
+ def to_all_parts!
29
+ @pubid&.all_parts = true
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,13 @@
1
+ module Relaton
2
+ module Oiml
3
+ # OIML document types, per relaton/relaton-oiml#1. The value is carried in
4
+ # the inherited `content` attribute (e.g. `recommendation`). `bulletin`
5
+ # (the online OIML Bulletin) is listed for forward-compatibility; the
6
+ # dataset does not yet contain such records. The list is intentionally not
7
+ # enforced as an enum so unforeseen dataset values still round-trip.
8
+ class Doctype < Bib::Doctype
9
+ TYPES = %w[recommendation document guide vocabulary basic-publication
10
+ expert-report seminar-report translation bulletin].freeze
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,42 @@
1
+ require_relative "doctype"
2
+
3
+ module Relaton
4
+ module Oiml
5
+ # OIML bibliographic item extension. Adds the OIML-specific structured
6
+ # metadata (relaton/relaton-oiml#2) on top of the shared Relaton::Bib::Ext.
7
+ # These fields are populated on the enhanced OIML Recommendations and are
8
+ # absent on most records; they round-trip through both XML and YAML.
9
+ class Ext < Bib::Ext
10
+ attribute :doctype, Doctype
11
+ attribute :scope, :string
12
+ attribute :quantity, :string
13
+ attribute :measuring_instrument, :string
14
+ attribute :focus_area, :string
15
+ attribute :sustainability_framework, :string
16
+ attribute :doi, :string
17
+
18
+ xml do
19
+ map_element "scope", to: :scope
20
+ map_element "quantity", to: :quantity
21
+ map_element "measuring_instrument", to: :measuring_instrument
22
+ map_element "focus_area", to: :focus_area
23
+ map_element "sustainability_framework", to: :sustainability_framework
24
+ map_element "doi", to: :doi
25
+ end
26
+
27
+ key_value do
28
+ map_element "scope", to: :scope
29
+ map_element "quantity", to: :quantity
30
+ map_element "measuring_instrument", to: :measuring_instrument
31
+ map_element "focus_area", to: :focus_area
32
+ map_element "sustainability_framework", to: :sustainability_framework
33
+ map_element "doi", to: :doi
34
+ end
35
+
36
+ # No dedicated OIML (flavor) model exists yet, so the extension reuses the
37
+ # base Relaton::Bib behaviour and does not advertise a flavor-specific
38
+ # schema version. Add a `relaton-model-oiml` entry to relaton-bib's
39
+ # versions.json and override #schema_version here once that model lands.
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,20 @@
1
+ require_relative "item_data"
2
+ require_relative "ext"
3
+ require_relative "docidentifier"
4
+
5
+ module Relaton
6
+ module Oiml
7
+ class Item < Bib::Item
8
+ model ItemData
9
+
10
+ attribute :ext, Ext
11
+ attribute :docidentifier, Docidentifier, collection: true,
12
+ initialize_empty: true
13
+ end
14
+ end
15
+ end
16
+
17
+ require_relative "relation"
18
+
19
+ Relaton::Oiml::Item.attribute :relation, Relaton::Oiml::Relation,
20
+ collection: true, initialize_empty: true
@@ -0,0 +1,18 @@
1
+ module Relaton
2
+ module Oiml
3
+ class ItemBase < Lutaml::Model::Serializable
4
+ include Bib::NamespaceHelper
5
+
6
+ attr_accessor :type
7
+
8
+ model ItemData
9
+
10
+ instance_exec(&Bib::ItemShared::ATTRIBUTES)
11
+
12
+ xml do
13
+ map_attribute "type", to: :type
14
+ instance_exec(&Bib::ItemShared::XML_BODY)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ module Relaton
2
+ module Oiml
3
+ class ItemData < Bib::ItemData
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,54 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Oiml
5
+ class Processor < Core::Processor
6
+ attr_reader :idtype
7
+
8
+ def initialize
9
+ @short = :relaton_oiml
10
+ @prefix = "OIML"
11
+ @defaultprefix = %r{^OIML\s}
12
+ @idtype = "OIML"
13
+ end
14
+
15
+ # @param code [String]
16
+ # @param date [String, nil] year
17
+ # @param opts [Hash]
18
+ # @return [Relaton::Oiml::ItemData, nil]
19
+ def get(code, date, opts)
20
+ require_relative "../oiml"
21
+ Bibliography.get(code, date, opts)
22
+ end
23
+
24
+ # @param xml [String]
25
+ # @return [Relaton::Oiml::ItemData]
26
+ def from_xml(xml)
27
+ require_relative "../oiml"
28
+ Item.from_xml xml
29
+ end
30
+
31
+ # @param yaml [String]
32
+ # @return [Relaton::Oiml::ItemData]
33
+ def from_yaml(yaml)
34
+ require_relative "../oiml"
35
+ Item.from_yaml(yaml)
36
+ end
37
+
38
+ # Returns hash of XML grammar
39
+ # @return [String]
40
+ def grammar_hash
41
+ require_relative "../oiml"
42
+ @grammar_hash ||= ::Relaton::Oiml.grammar_hash
43
+ end
44
+
45
+ #
46
+ # Remove index file
47
+ #
48
+ def remove_index_file
49
+ require_relative "../oiml"
50
+ Relaton::Index.find_or_create(:oiml, url: true, file: "#{INDEXFILE}.yaml").remove_file
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,9 @@
1
+ require_relative "item_base"
2
+
3
+ module Relaton
4
+ module Oiml
5
+ class Relation < Bib::Relation
6
+ attribute :bibitem, ItemBase
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Oiml
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-oiml".freeze
6
+ end
7
+ end
8
+ end