relaton 2.2.0.pre.alpha.1 → 3.0.0.pre.alpha.2

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 (702) hide show
  1. checksums.yaml +4 -4
  2. data/{docs/README.adoc → README.adoc} +165 -38
  3. data/bin/console +0 -1
  4. data/lib/relaton/3gpp/bibdata.rb +9 -0
  5. data/lib/relaton/3gpp/bibitem.rb +9 -0
  6. data/lib/relaton/3gpp/bibliography.rb +123 -0
  7. data/lib/relaton/3gpp/data_fetcher.rb +303 -0
  8. data/lib/relaton/3gpp/docidentifier.rb +114 -0
  9. data/lib/relaton/3gpp/doctype.rb +9 -0
  10. data/lib/relaton/3gpp/ext.rb +31 -0
  11. data/lib/relaton/3gpp/item.rb +18 -0
  12. data/lib/relaton/3gpp/item_data.rb +15 -0
  13. data/lib/relaton/3gpp/parser.rb +400 -0
  14. data/lib/relaton/3gpp/processor.rb +71 -0
  15. data/lib/relaton/3gpp/release.rb +34 -0
  16. data/lib/relaton/3gpp/util.rb +8 -0
  17. data/lib/relaton/3gpp.rb +29 -0
  18. data/lib/relaton/adobe/bibdata.rb +8 -0
  19. data/lib/relaton/adobe/bibitem.rb +8 -0
  20. data/lib/relaton/adobe/bibliography.rb +92 -0
  21. data/lib/relaton/adobe/docidentifier.rb +49 -0
  22. data/lib/relaton/adobe/doctype.rb +14 -0
  23. data/lib/relaton/adobe/ext.rb +32 -0
  24. data/lib/relaton/adobe/item.rb +15 -0
  25. data/lib/relaton/adobe/item_base.rb +18 -0
  26. data/lib/relaton/adobe/item_data.rb +6 -0
  27. data/lib/relaton/adobe/processor.rb +45 -0
  28. data/lib/relaton/adobe/util.rb +8 -0
  29. data/lib/relaton/adobe.rb +37 -0
  30. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  31. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  32. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  33. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  34. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  35. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
  36. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  37. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
  38. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  39. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  40. data/lib/relaton/bib/hash_parser_v1.rb +767 -0
  41. data/lib/relaton/bib/item_data.rb +229 -0
  42. data/lib/relaton/bib/model/abstract.rb +16 -0
  43. data/lib/relaton/bib/model/address.rb +22 -0
  44. data/lib/relaton/bib/model/affiliation.rb +16 -0
  45. data/lib/relaton/bib/model/bibdata.rb +11 -0
  46. data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
  47. data/lib/relaton/bib/model/bibitem.rb +11 -0
  48. data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
  49. data/lib/relaton/bib/model/contact.rb +18 -0
  50. data/lib/relaton/bib/model/contribution_info.rb +15 -0
  51. data/lib/relaton/bib/model/contributor.rb +29 -0
  52. data/lib/relaton/bib/model/copyright.rb +27 -0
  53. data/lib/relaton/bib/model/date.rb +31 -0
  54. data/lib/relaton/bib/model/depiction.rb +16 -0
  55. data/lib/relaton/bib/model/docidentifier.rb +49 -0
  56. data/lib/relaton/bib/model/doctype.rb +14 -0
  57. data/lib/relaton/bib/model/edition.rb +14 -0
  58. data/lib/relaton/bib/model/ext.rb +39 -0
  59. data/lib/relaton/bib/model/extent.rb +16 -0
  60. data/lib/relaton/bib/model/formattedref.rb +43 -0
  61. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  62. data/lib/relaton/bib/model/fullname.rb +11 -0
  63. data/lib/relaton/bib/model/ics.rb +49 -0
  64. data/lib/relaton/bib/model/image.rb +28 -0
  65. data/lib/relaton/bib/model/item.rb +96 -0
  66. data/lib/relaton/bib/model/item_base.rb +20 -0
  67. data/lib/relaton/bib/model/item_shared.rb +88 -0
  68. data/lib/relaton/bib/model/keyword.rb +30 -0
  69. data/lib/relaton/bib/model/locality.rb +18 -0
  70. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  71. data/lib/relaton/bib/model/localized_string.rb +48 -0
  72. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  73. data/lib/relaton/bib/model/logo.rb +14 -0
  74. data/lib/relaton/bib/model/medium.rb +22 -0
  75. data/lib/relaton/bib/model/note.rb +16 -0
  76. data/lib/relaton/bib/model/organization.rb +13 -0
  77. data/lib/relaton/bib/model/organization_type.rb +42 -0
  78. data/lib/relaton/bib/model/person.rb +36 -0
  79. data/lib/relaton/bib/model/phone.rb +14 -0
  80. data/lib/relaton/bib/model/place.rb +33 -0
  81. data/lib/relaton/bib/model/price.rb +14 -0
  82. data/lib/relaton/bib/model/relation.rb +43 -0
  83. data/lib/relaton/bib/model/series.rb +34 -0
  84. data/lib/relaton/bib/model/size.rb +23 -0
  85. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  86. data/lib/relaton/bib/model/status.rb +27 -0
  87. data/lib/relaton/bib/model/structured_identifier.rb +49 -0
  88. data/lib/relaton/bib/model/subdivision.rb +16 -0
  89. data/lib/relaton/bib/model/title.rb +56 -0
  90. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  91. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  92. data/lib/relaton/bib/model/uri.rb +18 -0
  93. data/lib/relaton/bib/model/validity.rb +16 -0
  94. data/lib/relaton/bib/model/version.rb +43 -0
  95. data/lib/relaton/bib/namespace_helper.rb +21 -0
  96. data/lib/relaton/bib/sanitizer.rb +264 -0
  97. data/lib/relaton/bib/util.rb +18 -0
  98. data/lib/relaton/bib/versions.json +35 -0
  99. data/lib/relaton/bib.rb +46 -0
  100. data/lib/relaton/bipm/bibliography.rb +231 -0
  101. data/lib/relaton/bipm/converter/asciibib.rb +64 -0
  102. data/lib/relaton/bipm/data_fetcher.rb +81 -0
  103. data/lib/relaton/bipm/data_outcomes_parser.rb +656 -0
  104. data/lib/relaton/bipm/id_parser.rb +278 -0
  105. data/lib/relaton/bipm/item_data.rb +47 -0
  106. data/lib/relaton/bipm/model/bibdata.rb +9 -0
  107. data/lib/relaton/bipm/model/bibitem.rb +9 -0
  108. data/lib/relaton/bipm/model/comment_period.rb +13 -0
  109. data/lib/relaton/bipm/model/doctype.rb +12 -0
  110. data/lib/relaton/bipm/model/ext.rb +38 -0
  111. data/lib/relaton/bipm/model/item.rb +11 -0
  112. data/lib/relaton/bipm/model/structured_identifier.rb +36 -0
  113. data/lib/relaton/bipm/processor.rb +69 -0
  114. data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
  115. data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +172 -0
  116. data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
  117. data/lib/relaton/bipm/si_brochure_parser.rb +188 -0
  118. data/lib/relaton/bipm/util.rb +8 -0
  119. data/lib/relaton/bipm.rb +38 -0
  120. data/lib/relaton/bsi/bibliography.rb +196 -0
  121. data/lib/relaton/bsi/hit.rb +28 -0
  122. data/lib/relaton/bsi/hit_collection.rb +113 -0
  123. data/lib/relaton/bsi/item_data.rb +13 -0
  124. data/lib/relaton/bsi/model/bibdata.rb +8 -0
  125. data/lib/relaton/bsi/model/bibitem.rb +8 -0
  126. data/lib/relaton/bsi/model/docidentifier.rb +107 -0
  127. data/lib/relaton/bsi/model/doctype.rb +14 -0
  128. data/lib/relaton/bsi/model/ext.rb +17 -0
  129. data/lib/relaton/bsi/model/item.rb +17 -0
  130. data/lib/relaton/bsi/model/item_base.rb +22 -0
  131. data/lib/relaton/bsi/model/relation.rb +9 -0
  132. data/lib/relaton/bsi/processor.rb +43 -0
  133. data/lib/relaton/bsi/schema.json +24882 -0
  134. data/lib/relaton/bsi/scraper.rb +288 -0
  135. data/lib/relaton/bsi/util.rb +8 -0
  136. data/lib/relaton/bsi.rb +25 -0
  137. data/lib/relaton/calconnect/bibliography.rb +93 -0
  138. data/lib/relaton/calconnect/data_fetcher.rb +174 -0
  139. data/lib/relaton/calconnect/docidentifier.rb +80 -0
  140. data/lib/relaton/calconnect/hit.rb +14 -0
  141. data/lib/relaton/calconnect/hit_collection.rb +92 -0
  142. data/lib/relaton/calconnect/item_data.rb +12 -0
  143. data/lib/relaton/calconnect/model/bibdata.rb +8 -0
  144. data/lib/relaton/calconnect/model/bibitem.rb +8 -0
  145. data/lib/relaton/calconnect/model/doctype.rb +11 -0
  146. data/lib/relaton/calconnect/model/ext.rb +11 -0
  147. data/lib/relaton/calconnect/model/item.rb +20 -0
  148. data/lib/relaton/calconnect/processor.rb +72 -0
  149. data/lib/relaton/calconnect/scraper.rb +87 -0
  150. data/lib/relaton/calconnect/util.rb +8 -0
  151. data/lib/relaton/calconnect.rb +36 -0
  152. data/lib/relaton/ccsds/bibliography.rb +63 -0
  153. data/lib/relaton/ccsds/data/fetcher.rb +252 -0
  154. data/lib/relaton/ccsds/data/iso_references.rb +30 -0
  155. data/lib/relaton/ccsds/data/parser.rb +194 -0
  156. data/lib/relaton/ccsds/hit.rb +24 -0
  157. data/lib/relaton/ccsds/hit_collection.rb +47 -0
  158. data/lib/relaton/ccsds/item_data.rb +9 -0
  159. data/lib/relaton/ccsds/model/bibdata.rb +8 -0
  160. data/lib/relaton/ccsds/model/bibitem.rb +8 -0
  161. data/lib/relaton/ccsds/model/docidentifier.rb +121 -0
  162. data/lib/relaton/ccsds/model/doctype.rb +9 -0
  163. data/lib/relaton/ccsds/model/ext.rb +19 -0
  164. data/lib/relaton/ccsds/model/item.rb +15 -0
  165. data/lib/relaton/ccsds/processor.rb +68 -0
  166. data/lib/relaton/ccsds/util.rb +10 -0
  167. data/lib/relaton/ccsds.rb +33 -0
  168. data/lib/relaton/cen/bibliography.rb +149 -0
  169. data/lib/relaton/cen/committees.yaml +66 -0
  170. data/lib/relaton/cen/hit.rb +31 -0
  171. data/lib/relaton/cen/hit_collection.rb +116 -0
  172. data/lib/relaton/cen/item_data.rb +7 -0
  173. data/lib/relaton/cen/model/bibdata.rb +8 -0
  174. data/lib/relaton/cen/model/bibitem.rb +8 -0
  175. data/lib/relaton/cen/model/docidentifier.rb +100 -0
  176. data/lib/relaton/cen/model/ext.rb +11 -0
  177. data/lib/relaton/cen/model/item.rb +14 -0
  178. data/lib/relaton/cen/model/structured_identifier.rb +9 -0
  179. data/lib/relaton/cen/processor.rb +45 -0
  180. data/lib/relaton/cen/scraper.rb +218 -0
  181. data/lib/relaton/cen/util.rb +8 -0
  182. data/lib/relaton/cen.rb +30 -0
  183. data/lib/relaton/cie/bibdata.rb +8 -0
  184. data/lib/relaton/cie/bibitem.rb +8 -0
  185. data/lib/relaton/cie/bibliography.rb +31 -0
  186. data/lib/relaton/cie/data_fetcher.rb +540 -0
  187. data/lib/relaton/cie/ext.rb +7 -0
  188. data/lib/relaton/cie/item.rb +11 -0
  189. data/lib/relaton/cie/item_data.rb +6 -0
  190. data/lib/relaton/cie/processor.rb +68 -0
  191. data/lib/relaton/cie/scrapper.rb +52 -0
  192. data/lib/relaton/cie/util.rb +8 -0
  193. data/lib/relaton/cie.rb +29 -0
  194. data/lib/relaton/core/array_wrapper.rb +20 -0
  195. data/lib/relaton/core/data_fetcher.rb +244 -0
  196. data/lib/relaton/core/date_parser.rb +42 -0
  197. data/lib/relaton/core/governor.rb +320 -0
  198. data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
  199. data/lib/relaton/core/hit.rb +49 -0
  200. data/lib/relaton/core/hit_collection.rb +118 -0
  201. data/lib/relaton/core/pacer.rb +134 -0
  202. data/lib/relaton/core/processor.rb +67 -0
  203. data/lib/relaton/core/request_error.rb +14 -0
  204. data/lib/relaton/core/workers_pool.rb +45 -0
  205. data/lib/relaton/core.rb +12 -0
  206. data/lib/relaton/db/registry.rb +44 -4
  207. data/lib/relaton/db.rb +0 -1
  208. data/lib/relaton/doi/crossref.rb +89 -0
  209. data/lib/relaton/doi/parser.rb +921 -0
  210. data/lib/relaton/doi/processor.rb +65 -0
  211. data/lib/relaton/doi/util.rb +8 -0
  212. data/lib/relaton/doi.rb +20 -0
  213. data/lib/relaton/easc/bibdata.rb +8 -0
  214. data/lib/relaton/easc/bibitem.rb +8 -0
  215. data/lib/relaton/easc/bibliography.rb +95 -0
  216. data/lib/relaton/easc/docidentifier.rb +100 -0
  217. data/lib/relaton/easc/doctype.rb +14 -0
  218. data/lib/relaton/easc/ext.rb +44 -0
  219. data/lib/relaton/easc/item.rb +13 -0
  220. data/lib/relaton/easc/item_base.rb +18 -0
  221. data/lib/relaton/easc/item_data.rb +6 -0
  222. data/lib/relaton/easc/processor.rb +46 -0
  223. data/lib/relaton/easc/util.rb +8 -0
  224. data/lib/relaton/easc.rb +35 -0
  225. data/lib/relaton/ecma/bibdata.rb +8 -0
  226. data/lib/relaton/ecma/bibitem.rb +8 -0
  227. data/lib/relaton/ecma/bibliography.rb +149 -0
  228. data/lib/relaton/ecma/data_fetcher.rb +162 -0
  229. data/lib/relaton/ecma/data_parser.rb +49 -0
  230. data/lib/relaton/ecma/docidentifier.rb +124 -0
  231. data/lib/relaton/ecma/edition_parser.rb +80 -0
  232. data/lib/relaton/ecma/ext.rb +7 -0
  233. data/lib/relaton/ecma/item.rb +13 -0
  234. data/lib/relaton/ecma/item_data.rb +6 -0
  235. data/lib/relaton/ecma/memento_parser.rb +60 -0
  236. data/lib/relaton/ecma/page_fetcher.rb +39 -0
  237. data/lib/relaton/ecma/parser_common.rb +33 -0
  238. data/lib/relaton/ecma/processor.rb +69 -0
  239. data/lib/relaton/ecma/standard_parser.rb +134 -0
  240. data/lib/relaton/ecma/util.rb +8 -0
  241. data/lib/relaton/ecma.rb +33 -0
  242. data/lib/relaton/etsi/bibdata.rb +10 -0
  243. data/lib/relaton/etsi/bibitem.rb +10 -0
  244. data/lib/relaton/etsi/bibliography.rb +111 -0
  245. data/lib/relaton/etsi/data_fetcher.rb +167 -0
  246. data/lib/relaton/etsi/data_parser.rb +208 -0
  247. data/lib/relaton/etsi/doctype.rb +30 -0
  248. data/lib/relaton/etsi/ext.rb +31 -0
  249. data/lib/relaton/etsi/item.rb +15 -0
  250. data/lib/relaton/etsi/item_data.rb +6 -0
  251. data/lib/relaton/etsi/processor.rb +71 -0
  252. data/lib/relaton/etsi/pubid.rb +37 -0
  253. data/lib/relaton/etsi/status.rb +13 -0
  254. data/lib/relaton/etsi/util.rb +8 -0
  255. data/lib/relaton/etsi.rb +26 -0
  256. data/lib/relaton/gb/bibdata.rb +8 -0
  257. data/lib/relaton/gb/bibitem.rb +8 -0
  258. data/lib/relaton/gb/bibliography.rb +171 -0
  259. data/lib/relaton/gb/ccs.rb +14 -0
  260. data/lib/relaton/gb/committee.rb +13 -0
  261. data/lib/relaton/gb/docidentifier.rb +72 -0
  262. data/lib/relaton/gb/doctype.rb +9 -0
  263. data/lib/relaton/gb/ext.rb +36 -0
  264. data/lib/relaton/gb/gb_scraper.rb +61 -0
  265. data/lib/relaton/gb/gb_type.rb +20 -0
  266. data/lib/relaton/gb/hit.rb +48 -0
  267. data/lib/relaton/gb/hit_collection.rb +19 -0
  268. data/lib/relaton/gb/item.rb +13 -0
  269. data/lib/relaton/gb/item_data.rb +6 -0
  270. data/lib/relaton/gb/processor.rb +49 -0
  271. data/lib/relaton/gb/project_number.rb +38 -0
  272. data/lib/relaton/gb/scraper.rb +221 -0
  273. data/lib/relaton/gb/sec_scraper.rb +92 -0
  274. data/lib/relaton/gb/stage_name.rb +13 -0
  275. data/lib/relaton/gb/structured_identifier.rb +26 -0
  276. data/lib/relaton/gb/t_scraper.rb +126 -0
  277. data/lib/relaton/gb/util.rb +8 -0
  278. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  279. data/lib/relaton/gb.rb +33 -0
  280. data/lib/relaton/gost/bibdata.rb +8 -0
  281. data/lib/relaton/gost/bibitem.rb +8 -0
  282. data/lib/relaton/gost/bibliography.rb +107 -0
  283. data/lib/relaton/gost/docidentifier.rb +80 -0
  284. data/lib/relaton/gost/doctype.rb +16 -0
  285. data/lib/relaton/gost/ext.rb +46 -0
  286. data/lib/relaton/gost/item.rb +15 -0
  287. data/lib/relaton/gost/item_base.rb +18 -0
  288. data/lib/relaton/gost/item_data.rb +6 -0
  289. data/lib/relaton/gost/processor.rb +49 -0
  290. data/lib/relaton/gost/util.rb +8 -0
  291. data/lib/relaton/gost.rb +36 -0
  292. data/lib/relaton/iala/bibdata.rb +8 -0
  293. data/lib/relaton/iala/bibitem.rb +8 -0
  294. data/lib/relaton/iala/bibliography.rb +146 -0
  295. data/lib/relaton/iala/docidentifier.rb +89 -0
  296. data/lib/relaton/iala/doctype.rb +18 -0
  297. data/lib/relaton/iala/ext.rb +32 -0
  298. data/lib/relaton/iala/item.rb +21 -0
  299. data/lib/relaton/iala/item_base.rb +18 -0
  300. data/lib/relaton/iala/item_data.rb +6 -0
  301. data/lib/relaton/iala/processor.rb +43 -0
  302. data/lib/relaton/iala/relation.rb +7 -0
  303. data/lib/relaton/iala/util.rb +8 -0
  304. data/lib/relaton/iala.rb +35 -0
  305. data/lib/relaton/iana/bibdata.rb +8 -0
  306. data/lib/relaton/iana/bibitem.rb +8 -0
  307. data/lib/relaton/iana/bibliography.rb +100 -0
  308. data/lib/relaton/iana/data_fetcher.rb +101 -0
  309. data/lib/relaton/iana/item.rb +7 -0
  310. data/lib/relaton/iana/item_data.rb +6 -0
  311. data/lib/relaton/iana/parser.rb +146 -0
  312. data/lib/relaton/iana/processor.rb +70 -0
  313. data/lib/relaton/iana/util.rb +8 -0
  314. data/lib/relaton/iana.rb +40 -0
  315. data/lib/relaton/iec/bibliography.rb +283 -0
  316. data/lib/relaton/iec/data_fetcher.rb +222 -0
  317. data/lib/relaton/iec/data_parser.rb +391 -0
  318. data/lib/relaton/iec/hit.rb +26 -0
  319. data/lib/relaton/iec/hit_collection.rb +138 -0
  320. data/lib/relaton/iec/item_data.rb +7 -0
  321. data/lib/relaton/iec/model/bibdata.rb +8 -0
  322. data/lib/relaton/iec/model/bibitem.rb +8 -0
  323. data/lib/relaton/iec/model/docidentifier.rb +135 -0
  324. data/lib/relaton/iec/model/doctype.rb +12 -0
  325. data/lib/relaton/iec/model/ext.rb +53 -0
  326. data/lib/relaton/iec/model/item.rb +20 -0
  327. data/lib/relaton/iec/model/item_base.rb +12 -0
  328. data/lib/relaton/iec/model/relation.rb +7 -0
  329. data/lib/relaton/iec/model/stage_name.rb +13 -0
  330. data/lib/relaton/iec/processor.rb +74 -0
  331. data/lib/relaton/iec/statuses.yml +199 -0
  332. data/lib/relaton/iec/util.rb +8 -0
  333. data/lib/relaton/iec.rb +98 -0
  334. data/lib/relaton/ieee/balloting_group.rb +13 -0
  335. data/lib/relaton/ieee/bibdata.rb +8 -0
  336. data/lib/relaton/ieee/bibitem.rb +8 -0
  337. data/lib/relaton/ieee/bibliography.rb +73 -0
  338. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  339. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  340. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  341. data/lib/relaton/ieee/data_fetcher.rb +771 -0
  342. data/lib/relaton/ieee/doctype.rb +9 -0
  343. data/lib/relaton/ieee/editorial_group.rb +19 -0
  344. data/lib/relaton/ieee/ext.rb +36 -0
  345. data/lib/relaton/ieee/idams_parser.rb +330 -0
  346. data/lib/relaton/ieee/item.rb +11 -0
  347. data/lib/relaton/ieee/item_data.rb +7 -0
  348. data/lib/relaton/ieee/processor.rb +71 -0
  349. data/lib/relaton/ieee/rawbib_id_parser.rb +753 -0
  350. data/lib/relaton/ieee/util.rb +8 -0
  351. data/lib/relaton/ieee.rb +30 -0
  352. data/lib/relaton/ietf/bibdata.rb +8 -0
  353. data/lib/relaton/ietf/bibitem.rb +8 -0
  354. data/lib/relaton/ietf/bibliography.rb +35 -0
  355. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  356. data/lib/relaton/ietf/data_fetcher.rb +561 -0
  357. data/lib/relaton/ietf/doctype.rb +9 -0
  358. data/lib/relaton/ietf/ext.rb +63 -0
  359. data/lib/relaton/ietf/item.rb +16 -0
  360. data/lib/relaton/ietf/item_base.rb +18 -0
  361. data/lib/relaton/ietf/item_data.rb +6 -0
  362. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  363. data/lib/relaton/ietf/processor.rb +72 -0
  364. data/lib/relaton/ietf/relation.rb +9 -0
  365. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  366. data/lib/relaton/ietf/rfc/author.rb +21 -0
  367. data/lib/relaton/ietf/rfc/entry.rb +446 -0
  368. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  369. data/lib/relaton/ietf/rfc/format.rb +19 -0
  370. data/lib/relaton/ietf/rfc/index.rb +46 -0
  371. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  372. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  373. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  374. data/lib/relaton/ietf/scraper.rb +101 -0
  375. data/lib/relaton/ietf/util.rb +8 -0
  376. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  377. data/lib/relaton/ietf.rb +30 -0
  378. data/lib/relaton/iho/bibdata.rb +8 -0
  379. data/lib/relaton/iho/bibitem.rb +8 -0
  380. data/lib/relaton/iho/bibliography.rb +114 -0
  381. data/lib/relaton/iho/comment_period.rb +13 -0
  382. data/lib/relaton/iho/docidentifier.rb +31 -0
  383. data/lib/relaton/iho/doctype.rb +10 -0
  384. data/lib/relaton/iho/ext.rb +20 -0
  385. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  386. data/lib/relaton/iho/item.rb +20 -0
  387. data/lib/relaton/iho/item_base.rb +18 -0
  388. data/lib/relaton/iho/item_data.rb +6 -0
  389. data/lib/relaton/iho/processor.rb +54 -0
  390. data/lib/relaton/iho/relation.rb +9 -0
  391. data/lib/relaton/iho/structured_identifier.rb +20 -0
  392. data/lib/relaton/iho/util.rb +8 -0
  393. data/lib/relaton/iho.rb +27 -0
  394. data/lib/relaton/index/config.rb +52 -0
  395. data/lib/relaton/index/file_io.rb +305 -0
  396. data/lib/relaton/index/file_storage.rb +66 -0
  397. data/lib/relaton/index/pool.rb +46 -0
  398. data/lib/relaton/index/shard_source.rb +201 -0
  399. data/lib/relaton/index/type.rb +210 -0
  400. data/lib/relaton/index/util.rb +18 -0
  401. data/lib/relaton/index.rb +61 -0
  402. data/lib/relaton/isbn/isbn.rb +61 -0
  403. data/lib/relaton/isbn/open_library.rb +43 -0
  404. data/lib/relaton/isbn/parser.rb +88 -0
  405. data/lib/relaton/isbn/processor.rb +48 -0
  406. data/lib/relaton/isbn/util.rb +8 -0
  407. data/lib/relaton/isbn.rb +19 -0
  408. data/lib/relaton/iso/bibliography.rb +412 -0
  409. data/lib/relaton/iso/data_fetcher.rb +338 -0
  410. data/lib/relaton/iso/data_parser.rb +458 -0
  411. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  412. data/lib/relaton/iso/hit.rb +57 -0
  413. data/lib/relaton/iso/hit_collection.rb +196 -0
  414. data/lib/relaton/iso/item_data.rb +50 -0
  415. data/lib/relaton/iso/model/bibdata.rb +10 -0
  416. data/lib/relaton/iso/model/bibitem.rb +8 -0
  417. data/lib/relaton/iso/model/contributor.rb +6 -0
  418. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  419. data/lib/relaton/iso/model/docidentifier.rb +146 -0
  420. data/lib/relaton/iso/model/doctype.rb +13 -0
  421. data/lib/relaton/iso/model/ext.rb +35 -0
  422. data/lib/relaton/iso/model/item.rb +17 -0
  423. data/lib/relaton/iso/model/item_base.rb +22 -0
  424. data/lib/relaton/iso/model/organization.rb +9 -0
  425. data/lib/relaton/iso/model/project_number.rb +22 -0
  426. data/lib/relaton/iso/model/relation.rb +9 -0
  427. data/lib/relaton/iso/model/stagename.rb +14 -0
  428. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  429. data/lib/relaton/iso/processor.rb +85 -0
  430. data/lib/relaton/iso/scraper.rb +635 -0
  431. data/lib/relaton/iso/type/pubid.rb +50 -0
  432. data/lib/relaton/iso/util.rb +8 -0
  433. data/lib/relaton/iso.rb +30 -0
  434. data/lib/relaton/itu/bibliography.rb +95 -0
  435. data/lib/relaton/itu/data_crawler_r.rb +664 -0
  436. data/lib/relaton/itu/data_fetcher.rb +550 -0
  437. data/lib/relaton/itu/data_merge_r.rb +149 -0
  438. data/lib/relaton/itu/data_parser_r.rb +214 -0
  439. data/lib/relaton/itu/data_parser_t.rb +228 -0
  440. data/lib/relaton/itu/family_cache.rb +177 -0
  441. data/lib/relaton/itu/governor.rb +56 -0
  442. data/lib/relaton/itu/hit.rb +28 -0
  443. data/lib/relaton/itu/hit_collection.rb +299 -0
  444. data/lib/relaton/itu/item_data.rb +6 -0
  445. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  446. data/lib/relaton/itu/model/bibdata.rb +8 -0
  447. data/lib/relaton/itu/model/bibitem.rb +8 -0
  448. data/lib/relaton/itu/model/docidentifier.rb +75 -0
  449. data/lib/relaton/itu/model/doctype.rb +13 -0
  450. data/lib/relaton/itu/model/ext.rb +47 -0
  451. data/lib/relaton/itu/model/item.rb +13 -0
  452. data/lib/relaton/itu/model/meeting.rb +13 -0
  453. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  454. data/lib/relaton/itu/model/question.rb +13 -0
  455. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  456. data/lib/relaton/itu/model/structured_identifier.rb +38 -0
  457. data/lib/relaton/itu/processor.rb +72 -0
  458. data/lib/relaton/itu/pubid.rb +199 -0
  459. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  460. data/lib/relaton/itu/recommendation_fields.rb +334 -0
  461. data/lib/relaton/itu/recommendation_parser.rb +30 -0
  462. data/lib/relaton/itu/scraper.rb +203 -0
  463. data/lib/relaton/itu/util.rb +8 -0
  464. data/lib/relaton/itu.rb +34 -0
  465. data/lib/relaton/jcgm/bibdata.rb +8 -0
  466. data/lib/relaton/jcgm/bibitem.rb +8 -0
  467. data/lib/relaton/jcgm/bibliography.rb +97 -0
  468. data/lib/relaton/jcgm/data_fetcher.rb +81 -0
  469. data/lib/relaton/jcgm/docidentifier.rb +102 -0
  470. data/lib/relaton/jcgm/doctype.rb +12 -0
  471. data/lib/relaton/jcgm/ext.rb +23 -0
  472. data/lib/relaton/jcgm/item.rb +20 -0
  473. data/lib/relaton/jcgm/item_base.rb +18 -0
  474. data/lib/relaton/jcgm/item_data.rb +6 -0
  475. data/lib/relaton/jcgm/meetings_parser.rb +175 -0
  476. data/lib/relaton/jcgm/processor.rb +71 -0
  477. data/lib/relaton/jcgm/relation.rb +9 -0
  478. data/lib/relaton/jcgm/structured_identifier.rb +40 -0
  479. data/lib/relaton/jcgm/util.rb +8 -0
  480. data/lib/relaton/jcgm.rb +24 -0
  481. data/lib/relaton/jis/bibdata.rb +8 -0
  482. data/lib/relaton/jis/bibitem.rb +8 -0
  483. data/lib/relaton/jis/bibliography.rb +73 -0
  484. data/lib/relaton/jis/data_fetcher.rb +183 -0
  485. data/lib/relaton/jis/docidentifier.rb +120 -0
  486. data/lib/relaton/jis/doctype.rb +9 -0
  487. data/lib/relaton/jis/ext.rb +13 -0
  488. data/lib/relaton/jis/hit.rb +88 -0
  489. data/lib/relaton/jis/hit_collection.rb +128 -0
  490. data/lib/relaton/jis/item.rb +22 -0
  491. data/lib/relaton/jis/item_base.rb +26 -0
  492. data/lib/relaton/jis/item_data.rb +8 -0
  493. data/lib/relaton/jis/processor.rb +55 -0
  494. data/lib/relaton/jis/relation.rb +11 -0
  495. data/lib/relaton/jis/scraper.rb +232 -0
  496. data/lib/relaton/jis/structured_identifier.rb +13 -0
  497. data/lib/relaton/jis/util.rb +8 -0
  498. data/lib/relaton/jis.rb +32 -0
  499. data/lib/relaton/logger/channels/gh_issue.rb +143 -0
  500. data/lib/relaton/logger/config.rb +34 -0
  501. data/lib/relaton/logger/formatter_json.rb +8 -0
  502. data/lib/relaton/logger/formatter_string.rb +12 -0
  503. data/lib/relaton/logger/log.rb +64 -0
  504. data/lib/relaton/logger/log_device.rb +27 -0
  505. data/lib/relaton/logger/pool.rb +24 -0
  506. data/lib/relaton/logger.rb +18 -0
  507. data/lib/relaton/nist/bibdata.rb +8 -0
  508. data/lib/relaton/nist/bibitem.rb +8 -0
  509. data/lib/relaton/nist/bibliography.rb +191 -0
  510. data/lib/relaton/nist/comment_period.rb +15 -0
  511. data/lib/relaton/nist/data_fetcher.rb +134 -0
  512. data/lib/relaton/nist/date.rb +7 -0
  513. data/lib/relaton/nist/docidentifier.rb +165 -0
  514. data/lib/relaton/nist/doctype.rb +7 -0
  515. data/lib/relaton/nist/ext.rb +16 -0
  516. data/lib/relaton/nist/hit.rb +18 -0
  517. data/lib/relaton/nist/hit_collection.rb +362 -0
  518. data/lib/relaton/nist/item.rb +19 -0
  519. data/lib/relaton/nist/item_base.rb +16 -0
  520. data/lib/relaton/nist/item_data.rb +6 -0
  521. data/lib/relaton/nist/mods_parser.rb +302 -0
  522. data/lib/relaton/nist/processor.rb +69 -0
  523. data/lib/relaton/nist/pubs_export.rb +69 -0
  524. data/lib/relaton/nist/relation.rb +10 -0
  525. data/lib/relaton/nist/scraper.rb +293 -0
  526. data/lib/relaton/nist/series.yaml +49 -0
  527. data/lib/relaton/nist/util.rb +8 -0
  528. data/lib/relaton/nist.rb +34 -0
  529. data/lib/relaton/oasis/bibdata.rb +8 -0
  530. data/lib/relaton/oasis/bibitem.rb +8 -0
  531. data/lib/relaton/oasis/bibliography.rb +201 -0
  532. data/lib/relaton/oasis/browser_agent.rb +71 -0
  533. data/lib/relaton/oasis/data_fetcher.rb +130 -0
  534. data/lib/relaton/oasis/data_parser.rb +305 -0
  535. data/lib/relaton/oasis/data_parser_utils.rb +330 -0
  536. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  537. data/lib/relaton/oasis/docidentifier.rb +54 -0
  538. data/lib/relaton/oasis/doctype.rb +7 -0
  539. data/lib/relaton/oasis/ext.rb +19 -0
  540. data/lib/relaton/oasis/item.rb +14 -0
  541. data/lib/relaton/oasis/item_data.rb +6 -0
  542. data/lib/relaton/oasis/processor.rb +74 -0
  543. data/lib/relaton/oasis/util.rb +8 -0
  544. data/lib/relaton/oasis.rb +41 -0
  545. data/lib/relaton/ogc/bibdata.rb +8 -0
  546. data/lib/relaton/ogc/bibitem.rb +8 -0
  547. data/lib/relaton/ogc/bibliography.rb +64 -0
  548. data/lib/relaton/ogc/data_fetcher.rb +131 -0
  549. data/lib/relaton/ogc/docidentifier.rb +111 -0
  550. data/lib/relaton/ogc/doctype.rb +12 -0
  551. data/lib/relaton/ogc/ext.rb +15 -0
  552. data/lib/relaton/ogc/hit.rb +18 -0
  553. data/lib/relaton/ogc/hit_collection.rb +111 -0
  554. data/lib/relaton/ogc/item.rb +13 -0
  555. data/lib/relaton/ogc/item_data.rb +6 -0
  556. data/lib/relaton/ogc/processor.rb +59 -0
  557. data/lib/relaton/ogc/scraper.rb +225 -0
  558. data/lib/relaton/ogc/util.rb +8 -0
  559. data/lib/relaton/ogc.rb +30 -0
  560. data/lib/relaton/oiml/bibdata.rb +8 -0
  561. data/lib/relaton/oiml/bibitem.rb +8 -0
  562. data/lib/relaton/oiml/bibliography.rb +169 -0
  563. data/lib/relaton/oiml/docidentifier.rb +48 -0
  564. data/lib/relaton/oiml/doctype.rb +13 -0
  565. data/lib/relaton/oiml/ext.rb +42 -0
  566. data/lib/relaton/oiml/item.rb +20 -0
  567. data/lib/relaton/oiml/item_base.rb +18 -0
  568. data/lib/relaton/oiml/item_data.rb +6 -0
  569. data/lib/relaton/oiml/processor.rb +54 -0
  570. data/lib/relaton/oiml/relation.rb +9 -0
  571. data/lib/relaton/oiml/util.rb +8 -0
  572. data/lib/relaton/oiml.rb +24 -0
  573. data/lib/relaton/omg/bibdata.rb +8 -0
  574. data/lib/relaton/omg/bibitem.rb +8 -0
  575. data/lib/relaton/omg/bibliography.rb +31 -0
  576. data/lib/relaton/omg/docidentifier.rb +67 -0
  577. data/lib/relaton/omg/ext.rb +7 -0
  578. data/lib/relaton/omg/item.rb +9 -0
  579. data/lib/relaton/omg/item_data.rb +6 -0
  580. data/lib/relaton/omg/processor.rb +35 -0
  581. data/lib/relaton/omg/scraper.rb +186 -0
  582. data/lib/relaton/omg/util.rb +8 -0
  583. data/lib/relaton/omg.rb +25 -0
  584. data/lib/relaton/plateau/bibdata.rb +8 -0
  585. data/lib/relaton/plateau/bibitem.rb +8 -0
  586. data/lib/relaton/plateau/bibliography.rb +31 -0
  587. data/lib/relaton/plateau/data_fetcher.rb +176 -0
  588. data/lib/relaton/plateau/doctype.rb +7 -0
  589. data/lib/relaton/plateau/ext.rb +23 -0
  590. data/lib/relaton/plateau/handbook_parser.rb +102 -0
  591. data/lib/relaton/plateau/hit.rb +21 -0
  592. data/lib/relaton/plateau/hit_collection.rb +79 -0
  593. data/lib/relaton/plateau/item.rb +12 -0
  594. data/lib/relaton/plateau/item_data.rb +6 -0
  595. data/lib/relaton/plateau/parser.rb +101 -0
  596. data/lib/relaton/plateau/processor.rb +51 -0
  597. data/lib/relaton/plateau/technical_report_parser.rb +98 -0
  598. data/lib/relaton/plateau/util.rb +8 -0
  599. data/lib/relaton/plateau.rb +29 -0
  600. data/lib/relaton/sdo/config.rb +34 -0
  601. data/lib/relaton/sdo/fetcher.rb +52 -0
  602. data/lib/relaton/sdo/logo.rb +95 -0
  603. data/lib/relaton/sdo/name.rb +26 -0
  604. data/lib/relaton/sdo/organization.rb +71 -0
  605. data/lib/relaton/sdo/store.rb +49 -0
  606. data/lib/relaton/sdo.rb +29 -0
  607. data/lib/relaton/un/bibdata.rb +8 -0
  608. data/lib/relaton/un/bibitem.rb +8 -0
  609. data/lib/relaton/un/bibliography.rb +48 -0
  610. data/lib/relaton/un/doctype.rb +10 -0
  611. data/lib/relaton/un/ext.rb +30 -0
  612. data/lib/relaton/un/hit.rb +56 -0
  613. data/lib/relaton/un/hit_collection.rb +61 -0
  614. data/lib/relaton/un/item.rb +11 -0
  615. data/lib/relaton/un/item_data.rb +6 -0
  616. data/lib/relaton/un/parser.rb +108 -0
  617. data/lib/relaton/un/processor.rb +38 -0
  618. data/lib/relaton/un/session.rb +25 -0
  619. data/lib/relaton/un/token_generator.rb +105 -0
  620. data/lib/relaton/un/util.rb +8 -0
  621. data/lib/relaton/un/wasm/decoder.rb +434 -0
  622. data/lib/relaton/un/wasm/instance.rb +101 -0
  623. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  624. data/lib/relaton/un/wasm/memory.rb +112 -0
  625. data/lib/relaton/un/wasm/module.rb +47 -0
  626. data/lib/relaton/un/wasm.rb +17 -0
  627. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  628. data/lib/relaton/un.rb +28 -0
  629. data/lib/relaton/version.rb +1 -1
  630. data/lib/relaton/w3c/bibdata.rb +8 -0
  631. data/lib/relaton/w3c/bibitem.rb +8 -0
  632. data/lib/relaton/w3c/bibliography.rb +174 -0
  633. data/lib/relaton/w3c/data_fetcher.rb +487 -0
  634. data/lib/relaton/w3c/data_parser.rb +379 -0
  635. data/lib/relaton/w3c/docidentifier.rb +48 -0
  636. data/lib/relaton/w3c/doctype.rb +7 -0
  637. data/lib/relaton/w3c/ext.rb +11 -0
  638. data/lib/relaton/w3c/governor.rb +32 -0
  639. data/lib/relaton/w3c/item.rb +15 -0
  640. data/lib/relaton/w3c/item_data.rb +6 -0
  641. data/lib/relaton/w3c/processor.rb +49 -0
  642. data/lib/relaton/w3c/pubid.rb +85 -0
  643. data/lib/relaton/w3c/safe_realize.rb +148 -0
  644. data/lib/relaton/w3c/util.rb +8 -0
  645. data/lib/relaton/w3c.rb +36 -0
  646. data/lib/relaton/xsf/bibdata.rb +8 -0
  647. data/lib/relaton/xsf/bibitem.rb +8 -0
  648. data/lib/relaton/xsf/bibliography.rb +84 -0
  649. data/lib/relaton/xsf/data_fetcher.rb +106 -0
  650. data/lib/relaton/xsf/docidentifier.rb +46 -0
  651. data/lib/relaton/xsf/hit.rb +17 -0
  652. data/lib/relaton/xsf/hit_collection.rb +52 -0
  653. data/lib/relaton/xsf/item.rb +13 -0
  654. data/lib/relaton/xsf/item_data.rb +6 -0
  655. data/lib/relaton/xsf/processor.rb +51 -0
  656. data/lib/relaton/xsf/util.rb +9 -0
  657. data/lib/relaton/xsf.rb +34 -0
  658. data/lib/relaton-core.rb +1 -0
  659. data/lib/relaton.rb +85 -0
  660. metadata +775 -161
  661. data/.github/workflows/rake.yml +0 -14
  662. data/.github/workflows/release.yml +0 -24
  663. data/.github/workflows/rubocop.yml +0 -48
  664. data/.gitignore +0 -12
  665. data/.rspec +0 -3
  666. data/CLAUDE.md +0 -78
  667. data/Gemfile +0 -29
  668. data/Rakefile +0 -6
  669. data/docs/CHANGELOG.adoc +0 -16
  670. data/docs/VERSIONING_POLICY.adoc +0 -38
  671. data/docs/navigation.adoc +0 -6
  672. data/lib/relaton/db/version.rb +0 -5
  673. data/relaton.gemspec +0 -72
  674. data/spec/relaton/config_spec.rb +0 -10
  675. data/spec/relaton/db_cache_spec.rb +0 -51
  676. data/spec/relaton/db_spec.rb +0 -567
  677. data/spec/relaton/registry_spec.rb +0 -178
  678. data/spec/relaton/util_spec.rb +0 -3
  679. data/spec/relaton_meta_spec.rb +0 -25
  680. data/spec/relaton_spec.rb +0 -800
  681. data/spec/spec_helper.rb +0 -45
  682. data/spec/support/gb_t_20223_2006.xml +0 -33
  683. data/spec/support/iso_111111119115_1.xml +0 -0
  684. data/spec/support/iso_19115_1.xml +0 -115
  685. data/spec/support/iso_19115_2.xml +0 -95
  686. data/spec/support/rfc_8341.xml +0 -46
  687. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  688. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -140
  689. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -202
  690. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1505
  691. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -729
  692. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  693. data/spec/vcr_cassetes/iso_19115_1.yml +0 -17334
  694. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -322
  695. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -17334
  696. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -185
  697. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -144
  698. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -318
  699. data/spec/vcr_cassetes/iso_combined_included.yml +0 -318
  700. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -374
  701. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  702. data/spec/vcr_cassetes/rfc_8341.yml +0 -1278
@@ -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,30 @@
1
+ # pubid loads with the flavor, for the ::Pubid::Ogc::Identifier that the
2
+ # index code names. Processor#remove_index_file names no pubid class: the
3
+ # delete never reads the index (see lib/relaton/index/CLAUDE.md).
4
+ require "pubid"
5
+ require "relaton/index"
6
+ require "relaton/iso"
7
+ require_relative "version"
8
+ require_relative "ogc/util"
9
+ require_relative "ogc/item_data"
10
+ require_relative "ogc/item"
11
+ require_relative "ogc/bibitem"
12
+ require_relative "ogc/bibdata"
13
+ require_relative "ogc/hit_collection"
14
+ require_relative "ogc/bibliography"
15
+
16
+ module Relaton
17
+ module Ogc
18
+ INDEXFILE = "index-v2".freeze
19
+ class Error < StandardError; end
20
+
21
+ # Returns hash of XML reammar
22
+ # @return [String]
23
+ def self.grammar_hash
24
+ # gem_path = File.expand_path "..", __dir__
25
+ # grammars_path = File.join gem_path, "grammars", "*"
26
+ # grammars = Dir[grammars_path].sort.map { |gp| File.read gp }.join
27
+ Digest::MD5.hexdigest Relaton::VERSION # grammars
28
+ end
29
+ end
30
+ 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,169 @@
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
+ row = best_row(pubid, year)
24
+ unless row
25
+ Util.info "Not found.", key: pubid.to_s
26
+ return
27
+ end
28
+
29
+ uri = URI("#{ENDPOINT}#{row[:file]}")
30
+ resp = Net::HTTP.get_response uri
31
+ unless resp.code == "200"
32
+ raise Relaton::RequestError, "Could not access #{uri}: HTTP #{resp.code}"
33
+ end
34
+
35
+ item = Relaton::Oiml::Item.from_yaml resp.body
36
+ Util.info "Found: `#{item.docidentifier.first&.content}`", key: pubid.to_s
37
+ item.tap { |i| i.fetched = Date.today.to_s }
38
+ rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
39
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
40
+ Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
41
+ Errno::ETIMEDOUT => e
42
+ raise Relaton::RequestError, "Could not access #{uri}: #{e.message}"
43
+ end
44
+
45
+ # Fetch an OIML publication, suppressing the edition year for an undated
46
+ # citation so the designation renders undated (`OIML B 18`), the way the
47
+ # ISO fetcher does. A dated citation (`OIML B 18:2022`, or an explicit
48
+ # `year`) still pins that edition. Mirrors `Relaton::Iso::Bibliography#get`.
49
+ #
50
+ # @param opts [Hash] options
51
+ # @option opts [Boolean] :keep_year retain the edition year even for an
52
+ # undated citation (or, when false, strip it even for a dated one)
53
+ #
54
+ # @see #search
55
+ def get(ref, year = nil, opts = {})
56
+ item = search(ref, year, opts)
57
+ return item unless item
58
+
59
+ pubid = ref.is_a?(String) ? ::Pubid::Oiml.parse(ref) : ref
60
+ dated = oiml_side(pubid).year || year
61
+ # Keep the year only when the citation genuinely asks for it: a resolved
62
+ # year (unless keep_year is explicitly false), or keep_year truthy. (ISO
63
+ # also keeps for :all_parts; OIML has no all-parts retrieval, so search
64
+ # ignores opts and there is nothing to mirror here.)
65
+ return item if (dated && opts[:keep_year].nil?) || opts[:keep_year]
66
+
67
+ item.to_most_recent_reference
68
+ end
69
+
70
+ private
71
+
72
+ def index
73
+ Relaton::Index.find_or_create(
74
+ :oiml,
75
+ url: "#{ENDPOINT}#{INDEXFILE}.zip",
76
+ file: "#{INDEXFILE}.yaml",
77
+ pubid_class: ::Pubid::Oiml::Identifier,
78
+ )
79
+ end
80
+
81
+ # The index row for a reference: the latest edition among the rows it
82
+ # matches.
83
+ #
84
+ # The pubid is passed to `Index::Type#search`, so the index narrows
85
+ # candidates by number via binary search, and each row's `:id` is a
86
+ # Pubid::Oiml::Identifier (deserialized via the `pubid_class` in
87
+ # `#index`).
88
+ #
89
+ # A Bulletin matches exactly (`exact: true`). Its year is part of its
90
+ # locator, not an edition: the issue and the sequence render after the
91
+ # year, so the stem below reduces every article of one year to
92
+ # `OIML Bulletin`, and a lookup used to return any one of them.
93
+ #
94
+ # This flavor does not use pubid's subset match `===` yet. Measured
95
+ # over the full `relaton-data-oiml` index, `===` lets a language-less
96
+ # Amendment, Annex or Errata reference reach its translations
97
+ # (`language` is not strict), lets `OIML R 137-1 (F)` reach
98
+ # `OIML R 137-1-2:2012 (F)` (`subpart` is not strict), and rejects
99
+ # `OIML R 102:1995 Annex B-C` for `OIML R 102 Annex B-C` (the
100
+ # `year_on_base` render flag is compared).
101
+ #
102
+ # @param query [Pubid::Oiml::Identifier]
103
+ # @param year [String, nil]
104
+ # @return [Hash, nil] the index row (`{ id:, file: }`)
105
+ def best_row(query, year)
106
+ return index.search(query, exact: true).first if bulletin?(query)
107
+
108
+ index.search(query) { |r| pubid_match?(r[:id], query, year) }
109
+ .max_by { |r| oiml_side(r[:id]).year.to_i }
110
+ end
111
+
112
+ # @return [Boolean] true for an identifier of an OIML Bulletin
113
+ def bulletin?(pubid)
114
+ pubid.is_a?(::Pubid::Oiml::Identifiers::Bulletin)
115
+ end
116
+
117
+ # A document OIML co-publishes with another SDO (ISO confirmed so far)
118
+ # is a Pubid::Oiml::Identifiers::DualPublished — a "|"-joined pair
119
+ # (pubid#437), e.g. `ISO 4064-1:2024|OIML R 49-1:2024`. It delegates
120
+ # #root/#code/#type/#stage/#iteration/#publisher to whichever side is
121
+ # OIML, but NOT #year or #language — those read nil on the wrapper
122
+ # itself regardless of what either side holds. This unwraps to the
123
+ # OIML side for those reads (a plain, non-dual pubid is returned
124
+ # unchanged), so a query and a row agree on year/language/stem
125
+ # whether either one is dual-published or not, and regardless of
126
+ # which side print order named first.
127
+ #
128
+ # @param pubid [Pubid::Oiml::Identifier] a plain or dual-published pubid
129
+ # @return [Pubid::Oiml::Identifier] the OIML-flavored side (itself, for
130
+ # a plain pubid)
131
+ def oiml_side(pubid)
132
+ pubid.is_a?(::Pubid::Oiml::Identifiers::DualPublished) ? pubid.oiml_identifier : pubid
133
+ end
134
+
135
+ # Both `row_id` and `query` are Pubid::Oiml::Identifier instances.
136
+ # Matching is on the year/language-stripped "stem" (e.g. `OIML R 138`),
137
+ # which keeps the type letter and any amendment suffix — so an amendment
138
+ # (`OIML R 138-Amend`) never matches the base record, even though pubid
139
+ # does not expose the suffix as its own attribute. Language must match
140
+ # exactly (a language-less query targets the language-less abstract
141
+ # record); year is nil-tolerant so an unqualified query finds the latest
142
+ # edition (selected by `max_by` in #best_row). The `year` argument lets
143
+ # a caller pin an edition the reference string omitted.
144
+ def pubid_match?(row_id, query, year)
145
+ row = oiml_side(row_id)
146
+ q = oiml_side(query)
147
+ wanted_year = (q.year || year)&.to_s
148
+ stem(row) == stem(q) &&
149
+ row.language.to_s == q.language.to_s &&
150
+ (wanted_year.nil? || row.year.to_s == wanted_year)
151
+ end
152
+
153
+ # The identifier without its edition year or language, e.g.
154
+ # `OIML R 138:2007 (E)` -> `OIML R 138`. Built from pubid's own model
155
+ # via #exclude (returns a copy, so the cached index id is untouched)
156
+ # rather than string surgery on #to_s. The amendment suffix is kept, so
157
+ # an amendment (`OIML R 138-Amend`) never reduces to the base record.
158
+ #
159
+ # Reduced through #oiml_side first: `#exclude` recurses correctly into
160
+ # both sides of a DualPublished (unlike a direct #year/#language read),
161
+ # but a plain query has no external side to reduce to, so comparing
162
+ # full dual-published stems against a plain one would never match.
163
+ def stem(pubid)
164
+ oiml_side(pubid).exclude(:year, :language).to_s
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,48 @@
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
+ # Both mutators go through #exclude (an immutable copy) rather than
21
+ # mutating `@pubid` in place: for a plain identifier the two are
22
+ # equivalent, but for a Pubid::Oiml::Identifiers::DualPublished
23
+ # (pubid#437, e.g. `ISO 4064-1:2024|OIML R 49-1:2024`) a direct
24
+ # `@pubid.part = nil`/`@pubid.date = nil` is a silent no-op — neither
25
+ # attribute is delegated to either side — while `#exclude` correctly
26
+ # recurses into both sides. `content=` re-parses the rendered string,
27
+ # which resyncs `@pubid` too, so there is nothing left to reassign here.
28
+ def remove_part!
29
+ return unless @pubid
30
+
31
+ self.content = @pubid.exclude(:part).to_s
32
+ end
33
+
34
+ def remove_date!
35
+ return unless @pubid
36
+
37
+ # Re-sync `content` from the now-dateless pubid: it is the string that
38
+ # actually renders (e.g. `OIML R 138`, or `OIML R 138 (E)` keeping the
39
+ # language). Mutating `@pubid` alone leaves the dated `content` in place.
40
+ self.content = @pubid.exclude(:date).to_s
41
+ end
42
+
43
+ def to_all_parts!
44
+ @pubid &&= @pubid.to_all_parts
45
+ end
46
+ end
47
+ end
48
+ 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