im_onix 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (346) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +39 -0
  3. data/bin/html_codelist_to_yml.rb +46 -0
  4. data/bin/onix3_to_onix2.rb +192 -0
  5. data/bin/onix3_to_onix3.rb +401 -0
  6. data/bin/onix_bench.rb +15 -0
  7. data/bin/onix_pp.rb +216 -0
  8. data/bin/onix_split.rb +72 -0
  9. data/data/codelists/codelist-1.yml +12 -0
  10. data/data/codelists/codelist-10.yml +51 -0
  11. data/data/codelists/codelist-100.yml +8 -0
  12. data/data/codelists/codelist-101.yml +7 -0
  13. data/data/codelists/codelist-102.yml +5 -0
  14. data/data/codelists/codelist-11.yml +13 -0
  15. data/data/codelists/codelist-12.yml +15 -0
  16. data/data/codelists/codelist-121.yml +162 -0
  17. data/data/codelists/codelist-13.yml +10 -0
  18. data/data/codelists/codelist-138.yml +8 -0
  19. data/data/codelists/codelist-139.yml +102 -0
  20. data/data/codelists/codelist-14.yml +6 -0
  21. data/data/codelists/codelist-140.yml +9 -0
  22. data/data/codelists/codelist-141.yml +12 -0
  23. data/data/codelists/codelist-142.yml +14 -0
  24. data/data/codelists/codelist-143.yml +9 -0
  25. data/data/codelists/codelist-144.yml +10 -0
  26. data/data/codelists/codelist-145.yml +9 -0
  27. data/data/codelists/codelist-146.yml +5 -0
  28. data/data/codelists/codelist-147.yml +16 -0
  29. data/data/codelists/codelist-148.yml +6 -0
  30. data/data/codelists/codelist-149.yml +7 -0
  31. data/data/codelists/codelist-15.yml +15 -0
  32. data/data/codelists/codelist-150.yml +128 -0
  33. data/data/codelists/codelist-151.yml +10 -0
  34. data/data/codelists/codelist-152.yml +4 -0
  35. data/data/codelists/codelist-153.yml +19 -0
  36. data/data/codelists/codelist-154.yml +11 -0
  37. data/data/codelists/codelist-155.yml +10 -0
  38. data/data/codelists/codelist-156.yml +6 -0
  39. data/data/codelists/codelist-157.yml +6 -0
  40. data/data/codelists/codelist-158.yml +32 -0
  41. data/data/codelists/codelist-159.yml +8 -0
  42. data/data/codelists/codelist-16.yml +8 -0
  43. data/data/codelists/codelist-160.yml +6 -0
  44. data/data/codelists/codelist-161.yml +5 -0
  45. data/data/codelists/codelist-162.yml +9 -0
  46. data/data/codelists/codelist-163.yml +18 -0
  47. data/data/codelists/codelist-164.yml +7 -0
  48. data/data/codelists/codelist-165.yml +6 -0
  49. data/data/codelists/codelist-166.yml +6 -0
  50. data/data/codelists/codelist-167.yml +7 -0
  51. data/data/codelists/codelist-168.yml +4 -0
  52. data/data/codelists/codelist-169.yml +7 -0
  53. data/data/codelists/codelist-17.yml +95 -0
  54. data/data/codelists/codelist-170.yml +2 -0
  55. data/data/codelists/codelist-171.yml +4 -0
  56. data/data/codelists/codelist-172.yml +3 -0
  57. data/data/codelists/codelist-173.yml +5 -0
  58. data/data/codelists/codelist-174.yml +4 -0
  59. data/data/codelists/codelist-175.yml +217 -0
  60. data/data/codelists/codelist-176.yml +16 -0
  61. data/data/codelists/codelist-177.yml +4 -0
  62. data/data/codelists/codelist-178.yml +30 -0
  63. data/data/codelists/codelist-179.yml +4 -0
  64. data/data/codelists/codelist-18.yml +8 -0
  65. data/data/codelists/codelist-184.yml +10 -0
  66. data/data/codelists/codelist-19.yml +9 -0
  67. data/data/codelists/codelist-196.yml +22 -0
  68. data/data/codelists/codelist-197.yml +7 -0
  69. data/data/codelists/codelist-198.yml +4 -0
  70. data/data/codelists/codelist-2.yml +8 -0
  71. data/data/codelists/codelist-20.yml +2 -0
  72. data/data/codelists/codelist-203.yml +10 -0
  73. data/data/codelists/codelist-204.yml +6 -0
  74. data/data/codelists/codelist-21.yml +36 -0
  75. data/data/codelists/codelist-22.yml +11 -0
  76. data/data/codelists/codelist-23.yml +17 -0
  77. data/data/codelists/codelist-24.yml +13 -0
  78. data/data/codelists/codelist-25.yml +31 -0
  79. data/data/codelists/codelist-26.yml +94 -0
  80. data/data/codelists/codelist-27.yml +101 -0
  81. data/data/codelists/codelist-28.yml +10 -0
  82. data/data/codelists/codelist-29.yml +26 -0
  83. data/data/codelists/codelist-3.yml +13 -0
  84. data/data/codelists/codelist-30.yml +19 -0
  85. data/data/codelists/codelist-31.yml +5 -0
  86. data/data/codelists/codelist-32.yml +5 -0
  87. data/data/codelists/codelist-33.yml +44 -0
  88. data/data/codelists/codelist-34.yml +18 -0
  89. data/data/codelists/codelist-35.yml +8 -0
  90. data/data/codelists/codelist-36.yml +5 -0
  91. data/data/codelists/codelist-37.yml +8 -0
  92. data/data/codelists/codelist-38.yml +42 -0
  93. data/data/codelists/codelist-39.yml +21 -0
  94. data/data/codelists/codelist-40.yml +8 -0
  95. data/data/codelists/codelist-41.yml +8 -0
  96. data/data/codelists/codelist-42.yml +18 -0
  97. data/data/codelists/codelist-43.yml +8 -0
  98. data/data/codelists/codelist-44.yml +22 -0
  99. data/data/codelists/codelist-45.yml +15 -0
  100. data/data/codelists/codelist-46.yml +11 -0
  101. data/data/codelists/codelist-47.yml +6 -0
  102. data/data/codelists/codelist-48.yml +13 -0
  103. data/data/codelists/codelist-49.yml +87 -0
  104. data/data/codelists/codelist-5.yml +20 -0
  105. data/data/codelists/codelist-50.yml +10 -0
  106. data/data/codelists/codelist-51.yml +37 -0
  107. data/data/codelists/codelist-52.yml +3 -0
  108. data/data/codelists/codelist-53.yml +7 -0
  109. data/data/codelists/codelist-54.yml +25 -0
  110. data/data/codelists/codelist-55.yml +21 -0
  111. data/data/codelists/codelist-56.yml +4 -0
  112. data/data/codelists/codelist-57.yml +7 -0
  113. data/data/codelists/codelist-58.yml +27 -0
  114. data/data/codelists/codelist-59.yml +12 -0
  115. data/data/codelists/codelist-6.yml +78 -0
  116. data/data/codelists/codelist-60.yml +4 -0
  117. data/data/codelists/codelist-61.yml +5 -0
  118. data/data/codelists/codelist-62.yml +7 -0
  119. data/data/codelists/codelist-63.yml +2 -0
  120. data/data/codelists/codelist-64.yml +18 -0
  121. data/data/codelists/codelist-65.yml +31 -0
  122. data/data/codelists/codelist-66.yml +6 -0
  123. data/data/codelists/codelist-67.yml +4 -0
  124. data/data/codelists/codelist-68.yml +19 -0
  125. data/data/codelists/codelist-69.yml +6 -0
  126. data/data/codelists/codelist-7.yml +128 -0
  127. data/data/codelists/codelist-70.yml +4 -0
  128. data/data/codelists/codelist-71.yml +13 -0
  129. data/data/codelists/codelist-72.yml +9 -0
  130. data/data/codelists/codelist-73.yml +43 -0
  131. data/data/codelists/codelist-74.yml +491 -0
  132. data/data/codelists/codelist-75.yml +4 -0
  133. data/data/codelists/codelist-76.yml +14 -0
  134. data/data/codelists/codelist-77.yml +21 -0
  135. data/data/codelists/codelist-78.yml +179 -0
  136. data/data/codelists/codelist-79.yml +25 -0
  137. data/data/codelists/codelist-8.yml +9 -0
  138. data/data/codelists/codelist-80.yml +23 -0
  139. data/data/codelists/codelist-81.yml +41 -0
  140. data/data/codelists/codelist-82.yml +19 -0
  141. data/data/codelists/codelist-83.yml +71 -0
  142. data/data/codelists/codelist-84.yml +12 -0
  143. data/data/codelists/codelist-85.yml +25 -0
  144. data/data/codelists/codelist-86.yml +7 -0
  145. data/data/codelists/codelist-87.yml +8 -0
  146. data/data/codelists/codelist-88.yml +2 -0
  147. data/data/codelists/codelist-89.yml +3 -0
  148. data/data/codelists/codelist-9.yml +11 -0
  149. data/data/codelists/codelist-90.yml +13 -0
  150. data/data/codelists/codelist-91.yml +254 -0
  151. data/data/codelists/codelist-92.yml +11 -0
  152. data/data/codelists/codelist-93.yml +15 -0
  153. data/data/codelists/codelist-94.yml +5 -0
  154. data/data/codelists/codelist-95.yml +5 -0
  155. data/data/codelists/codelist-96.yml +193 -0
  156. data/data/codelists/codelist-97.yml +3 -0
  157. data/data/codelists/codelist-98.yml +23 -0
  158. data/data/codelists/codelist-99.yml +26 -0
  159. data/data/onix21/codelists/codelist-1.yml +14 -0
  160. data/data/onix21/codelists/codelist-10.yml +52 -0
  161. data/data/onix21/codelists/codelist-100.yml +8 -0
  162. data/data/onix21/codelists/codelist-101.yml +7 -0
  163. data/data/onix21/codelists/codelist-102.yml +5 -0
  164. data/data/onix21/codelists/codelist-11.yml +13 -0
  165. data/data/onix21/codelists/codelist-12.yml +16 -0
  166. data/data/onix21/codelists/codelist-121.yml +162 -0
  167. data/data/onix21/codelists/codelist-13.yml +11 -0
  168. data/data/onix21/codelists/codelist-138.yml +8 -0
  169. data/data/onix21/codelists/codelist-139.yml +109 -0
  170. data/data/onix21/codelists/codelist-14.yml +6 -0
  171. data/data/onix21/codelists/codelist-140.yml +9 -0
  172. data/data/onix21/codelists/codelist-141.yml +12 -0
  173. data/data/onix21/codelists/codelist-142.yml +14 -0
  174. data/data/onix21/codelists/codelist-143.yml +9 -0
  175. data/data/onix21/codelists/codelist-144.yml +8 -0
  176. data/data/onix21/codelists/codelist-145.yml +10 -0
  177. data/data/onix21/codelists/codelist-146.yml +5 -0
  178. data/data/onix21/codelists/codelist-147.yml +16 -0
  179. data/data/onix21/codelists/codelist-148.yml +6 -0
  180. data/data/onix21/codelists/codelist-149.yml +8 -0
  181. data/data/onix21/codelists/codelist-15.yml +16 -0
  182. data/data/onix21/codelists/codelist-150.yml +133 -0
  183. data/data/onix21/codelists/codelist-151.yml +10 -0
  184. data/data/onix21/codelists/codelist-152.yml +4 -0
  185. data/data/onix21/codelists/codelist-153.yml +22 -0
  186. data/data/onix21/codelists/codelist-154.yml +11 -0
  187. data/data/onix21/codelists/codelist-155.yml +10 -0
  188. data/data/onix21/codelists/codelist-156.yml +6 -0
  189. data/data/onix21/codelists/codelist-157.yml +6 -0
  190. data/data/onix21/codelists/codelist-158.yml +35 -0
  191. data/data/onix21/codelists/codelist-159.yml +8 -0
  192. data/data/onix21/codelists/codelist-16.yml +8 -0
  193. data/data/onix21/codelists/codelist-160.yml +7 -0
  194. data/data/onix21/codelists/codelist-161.yml +5 -0
  195. data/data/onix21/codelists/codelist-162.yml +9 -0
  196. data/data/onix21/codelists/codelist-163.yml +18 -0
  197. data/data/onix21/codelists/codelist-164.yml +7 -0
  198. data/data/onix21/codelists/codelist-165.yml +6 -0
  199. data/data/onix21/codelists/codelist-166.yml +6 -0
  200. data/data/onix21/codelists/codelist-167.yml +11 -0
  201. data/data/onix21/codelists/codelist-168.yml +4 -0
  202. data/data/onix21/codelists/codelist-169.yml +7 -0
  203. data/data/onix21/codelists/codelist-17.yml +98 -0
  204. data/data/onix21/codelists/codelist-170.yml +6 -0
  205. data/data/onix21/codelists/codelist-171.yml +4 -0
  206. data/data/onix21/codelists/codelist-172.yml +3 -0
  207. data/data/onix21/codelists/codelist-173.yml +5 -0
  208. data/data/onix21/codelists/codelist-174.yml +4 -0
  209. data/data/onix21/codelists/codelist-175.yml +230 -0
  210. data/data/onix21/codelists/codelist-176.yml +16 -0
  211. data/data/onix21/codelists/codelist-177.yml +4 -0
  212. data/data/onix21/codelists/codelist-178.yml +30 -0
  213. data/data/onix21/codelists/codelist-179.yml +5 -0
  214. data/data/onix21/codelists/codelist-18.yml +8 -0
  215. data/data/onix21/codelists/codelist-184.yml +10 -0
  216. data/data/onix21/codelists/codelist-19.yml +9 -0
  217. data/data/onix21/codelists/codelist-196.yml +22 -0
  218. data/data/onix21/codelists/codelist-197.yml +7 -0
  219. data/data/onix21/codelists/codelist-198.yml +8 -0
  220. data/data/onix21/codelists/codelist-2.yml +8 -0
  221. data/data/onix21/codelists/codelist-20.yml +2 -0
  222. data/data/onix21/codelists/codelist-203.yml +10 -0
  223. data/data/onix21/codelists/codelist-204.yml +7 -0
  224. data/data/onix21/codelists/codelist-21.yml +36 -0
  225. data/data/onix21/codelists/codelist-215.yml +9 -0
  226. data/data/onix21/codelists/codelist-216.yml +11 -0
  227. data/data/onix21/codelists/codelist-217.yml +3 -0
  228. data/data/onix21/codelists/codelist-218.yml +5 -0
  229. data/data/onix21/codelists/codelist-219.yml +5 -0
  230. data/data/onix21/codelists/codelist-22.yml +11 -0
  231. data/data/onix21/codelists/codelist-220.yml +7 -0
  232. data/data/onix21/codelists/codelist-23.yml +17 -0
  233. data/data/onix21/codelists/codelist-24.yml +14 -0
  234. data/data/onix21/codelists/codelist-25.yml +31 -0
  235. data/data/onix21/codelists/codelist-26.yml +100 -0
  236. data/data/onix21/codelists/codelist-27.yml +107 -0
  237. data/data/onix21/codelists/codelist-28.yml +10 -0
  238. data/data/onix21/codelists/codelist-29.yml +30 -0
  239. data/data/onix21/codelists/codelist-3.yml +13 -0
  240. data/data/onix21/codelists/codelist-30.yml +20 -0
  241. data/data/onix21/codelists/codelist-31.yml +5 -0
  242. data/data/onix21/codelists/codelist-32.yml +10 -0
  243. data/data/onix21/codelists/codelist-33.yml +46 -0
  244. data/data/onix21/codelists/codelist-34.yml +18 -0
  245. data/data/onix21/codelists/codelist-35.yml +8 -0
  246. data/data/onix21/codelists/codelist-36.yml +5 -0
  247. data/data/onix21/codelists/codelist-37.yml +8 -0
  248. data/data/onix21/codelists/codelist-38.yml +42 -0
  249. data/data/onix21/codelists/codelist-39.yml +21 -0
  250. data/data/onix21/codelists/codelist-40.yml +8 -0
  251. data/data/onix21/codelists/codelist-41.yml +9 -0
  252. data/data/onix21/codelists/codelist-42.yml +18 -0
  253. data/data/onix21/codelists/codelist-43.yml +9 -0
  254. data/data/onix21/codelists/codelist-44.yml +27 -0
  255. data/data/onix21/codelists/codelist-45.yml +20 -0
  256. data/data/onix21/codelists/codelist-46.yml +11 -0
  257. data/data/onix21/codelists/codelist-47.yml +6 -0
  258. data/data/onix21/codelists/codelist-48.yml +13 -0
  259. data/data/onix21/codelists/codelist-49.yml +281 -0
  260. data/data/onix21/codelists/codelist-5.yml +20 -0
  261. data/data/onix21/codelists/codelist-50.yml +10 -0
  262. data/data/onix21/codelists/codelist-51.yml +37 -0
  263. data/data/onix21/codelists/codelist-52.yml +3 -0
  264. data/data/onix21/codelists/codelist-53.yml +7 -0
  265. data/data/onix21/codelists/codelist-54.yml +25 -0
  266. data/data/onix21/codelists/codelist-55.yml +21 -0
  267. data/data/onix21/codelists/codelist-56.yml +4 -0
  268. data/data/onix21/codelists/codelist-57.yml +7 -0
  269. data/data/onix21/codelists/codelist-58.yml +27 -0
  270. data/data/onix21/codelists/codelist-59.yml +12 -0
  271. data/data/onix21/codelists/codelist-6.yml +78 -0
  272. data/data/onix21/codelists/codelist-60.yml +4 -0
  273. data/data/onix21/codelists/codelist-61.yml +5 -0
  274. data/data/onix21/codelists/codelist-62.yml +7 -0
  275. data/data/onix21/codelists/codelist-63.yml +2 -0
  276. data/data/onix21/codelists/codelist-64.yml +18 -0
  277. data/data/onix21/codelists/codelist-65.yml +31 -0
  278. data/data/onix21/codelists/codelist-66.yml +6 -0
  279. data/data/onix21/codelists/codelist-67.yml +4 -0
  280. data/data/onix21/codelists/codelist-68.yml +19 -0
  281. data/data/onix21/codelists/codelist-69.yml +6 -0
  282. data/data/onix21/codelists/codelist-7.yml +132 -0
  283. data/data/onix21/codelists/codelist-70.yml +4 -0
  284. data/data/onix21/codelists/codelist-71.yml +14 -0
  285. data/data/onix21/codelists/codelist-72.yml +9 -0
  286. data/data/onix21/codelists/codelist-73.yml +43 -0
  287. data/data/onix21/codelists/codelist-74.yml +492 -0
  288. data/data/onix21/codelists/codelist-75.yml +4 -0
  289. data/data/onix21/codelists/codelist-76.yml +14 -0
  290. data/data/onix21/codelists/codelist-77.yml +21 -0
  291. data/data/onix21/codelists/codelist-78.yml +191 -0
  292. data/data/onix21/codelists/codelist-79.yml +26 -0
  293. data/data/onix21/codelists/codelist-8.yml +9 -0
  294. data/data/onix21/codelists/codelist-80.yml +23 -0
  295. data/data/onix21/codelists/codelist-81.yml +41 -0
  296. data/data/onix21/codelists/codelist-82.yml +19 -0
  297. data/data/onix21/codelists/codelist-83.yml +72 -0
  298. data/data/onix21/codelists/codelist-84.yml +12 -0
  299. data/data/onix21/codelists/codelist-85.yml +25 -0
  300. data/data/onix21/codelists/codelist-86.yml +7 -0
  301. data/data/onix21/codelists/codelist-87.yml +8 -0
  302. data/data/onix21/codelists/codelist-88.yml +2 -0
  303. data/data/onix21/codelists/codelist-89.yml +3 -0
  304. data/data/onix21/codelists/codelist-9.yml +13 -0
  305. data/data/onix21/codelists/codelist-90.yml +13 -0
  306. data/data/onix21/codelists/codelist-91.yml +254 -0
  307. data/data/onix21/codelists/codelist-92.yml +11 -0
  308. data/data/onix21/codelists/codelist-93.yml +15 -0
  309. data/data/onix21/codelists/codelist-94.yml +5 -0
  310. data/data/onix21/codelists/codelist-95.yml +5 -0
  311. data/data/onix21/codelists/codelist-96.yml +194 -0
  312. data/data/onix21/codelists/codelist-97.yml +3 -0
  313. data/data/onix21/codelists/codelist-98.yml +25 -0
  314. data/data/onix21/codelists/codelist-99.yml +26 -0
  315. data/data/onix21/shortnames.yml +431 -0
  316. data/data/shortnames.yml +395 -0
  317. data/lib/im_onix.rb +2 -0
  318. data/lib/onix/code.rb +543 -0
  319. data/lib/onix/collateral_detail.rb +94 -0
  320. data/lib/onix/contributor.rb +87 -0
  321. data/lib/onix/date.rb +183 -0
  322. data/lib/onix/descriptive_detail.rb +552 -0
  323. data/lib/onix/discount_coded.rb +20 -0
  324. data/lib/onix/entity.rb +135 -0
  325. data/lib/onix/error.rb +6 -0
  326. data/lib/onix/helper.rb +66 -0
  327. data/lib/onix/identifier.rb +158 -0
  328. data/lib/onix/onix21.rb +604 -0
  329. data/lib/onix/onix_message.rb +187 -0
  330. data/lib/onix/price.rb +74 -0
  331. data/lib/onix/product.rb +846 -0
  332. data/lib/onix/product_supply.rb +89 -0
  333. data/lib/onix/publishing_detail.rb +86 -0
  334. data/lib/onix/related_material.rb +30 -0
  335. data/lib/onix/related_product.rb +45 -0
  336. data/lib/onix/related_work.rb +24 -0
  337. data/lib/onix/sales_outlet.rb +14 -0
  338. data/lib/onix/sales_restriction.rb +37 -0
  339. data/lib/onix/sales_rights.rb +12 -0
  340. data/lib/onix/subject.rb +35 -0
  341. data/lib/onix/subset.rb +334 -0
  342. data/lib/onix/supporting_resource.rb +192 -0
  343. data/lib/onix/tax.rb +23 -0
  344. data/lib/onix/territory.rb +56 -0
  345. data/lib/onix/website.rb +21 -0
  346. metadata +477 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7eec0e1b2732af7b05abadeadeafe1c4e9acf53166b2256cbe39476461e5f99a
4
+ data.tar.gz: 166d34732659a91b6494d8dd1507100d861bebd7a8c258263e2d02204befdffc
5
+ SHA512:
6
+ metadata.gz: e42f395bf965520563bf4697abde739bbcbfda111f8ec8c1b3a9bc5f9612bba6773a5c245c15fa442fcda75fc4a0283328dab228f387f9222be8892432527590
7
+ data.tar.gz: 7f941cad2dfdc9946d9c4a773d543003131178394e636fe5d4de12c408ef31f6f22dc52d802840e70d0dcd57bac73f9bc3c2aa0a83fdc6a1c2dd7bfedc6b7fcd
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ ## Pragmatic ONIX 3.0 parser for Ruby
2
+
3
+ ### Low level API
4
+ Whole structure is accessible through ONIX::ONIXMessage object :
5
+ ```ruby
6
+ message=ONIX::ONIXMessage.new
7
+ message.parse("onix_file.xml")
8
+ # first product
9
+ pp message.products.first
10
+ # first identifier of first product
11
+ pp message.products.first.identifiers.first
12
+ ```
13
+
14
+ Ruby elements variables are underscored, lowercase of ONIX tags (Product -> product, DescriptiveDetail -> descriptive_detail) and pluralized in case of array (ProductSupply -> product_supplies).
15
+
16
+ ### High level API
17
+ High level methods give abstracted and simplified access to the most important data.
18
+ See http://nu.immateriel.fr/im_onix/doc/ONIX/Product.html for high level API rdoc and onix_pp.rb, onix3_to_onix2.rb and onix3_to_onix3.rb sample in bin/
19
+
20
+ Usage :
21
+ ```shell
22
+ onix_pp.rb onix.xml
23
+ onix3_to_onix2.rb onix.xml
24
+ onix3_to_onix3.rb onix.xml
25
+ ```
26
+ ### Development
27
+
28
+ #### Running the tests
29
+
30
+ Launch this command:
31
+
32
+ ```
33
+ ruby -Ilib:test test/test_im_onix.rb
34
+ ```
35
+
36
+ ### Contributors
37
+ TEA "The Ebook Alternative" : http://www.tea-ebook.com/
38
+
39
+ Bookmate : https://bookmate.com/
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- encoding : utf-8 -*-
3
+
4
+ require 'im_onix'
5
+ require 'nokogiri'
6
+ require 'yaml'
7
+
8
+ # html_codelist_to_yml.rb html_codelist_dir
9
+
10
+ class HTMLCodelist
11
+
12
+ private
13
+ def self.parse_codelist(codelist)
14
+ h={}
15
+ # puts "PARSE CODELIST #{codelist}"
16
+ html=Nokogiri::HTML.parse(File.open(codelist))
17
+ html.search("//tr").each do |tr|
18
+ # pp tr
19
+ td_code=tr.at("./td[1]")
20
+ td_human=tr.at("./td[2]")
21
+ if td_code and td_human
22
+ h[td_code.text.strip]=self.rename(td_human.text.strip)
23
+ end
24
+ end
25
+ h
26
+ end
27
+
28
+ # from rails
29
+ def self.rename(term)
30
+ term.gsub(/\(|\)|\,|\-|’|\/|“|”|‘|\.|\:|–|\||\+/,"").gsub(/\;/," Or ").gsub(/\s+/," ").split(" ").map{|t| t.capitalize}.join("")
31
+ end
32
+
33
+ end
34
+
35
+ files=`ls #{ARGV[1]}/*.htm`.split(/\n/)
36
+
37
+ h={}
38
+
39
+ files.sort.each do |file|
40
+ codelist=file.gsub(/.*onix\-codelist\-(.*)\.htm/,'\1').to_i
41
+ h=HTMLCodelist.parse_codelist(file)
42
+
43
+ File.open("data/codelists/codelist-#{codelist}.yml",'w') do |fw| fw.write({:codelist=>h}.to_yaml) end
44
+
45
+ end
46
+
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env ruby
2
+ require 'im_onix'
3
+ require 'nokogiri'
4
+
5
+ filename=ARGV[0]
6
+
7
+ if filename
8
+ msg=ONIX::ONIXMessage.new
9
+ msg.parse(filename)
10
+
11
+ builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
12
+ xml.doc.create_internal_subset(
13
+ 'ONIXMessage',
14
+ nil,
15
+ "http://www.editeur.org/onix/2.1/reference/onix-international.dtd"
16
+ )
17
+ xml.ONIXMessage {
18
+ xml.Header {
19
+ if msg.sender and msg.sender.name
20
+ xml.FromCompany(msg.sender.name)
21
+ else
22
+ xml.FromCompany("Any")
23
+ end
24
+ xml.ToCompany("Any")
25
+ }
26
+
27
+ msg.products.each do |product|
28
+ xml.Product {
29
+ xml.RecordReference(product.ean)
30
+ xml.NotificationType("03")
31
+
32
+ xml.ProductIdentifier {
33
+ xml.ProductIDType("03")
34
+ xml.IDValue(product.ean)
35
+
36
+ }
37
+
38
+ xml.ProductForm("DG")
39
+
40
+ case product.file_format
41
+ when "Pdf"
42
+ xml.EpubType("002")
43
+ when "Epub"
44
+ xml.EpubType("029")
45
+ else
46
+ xml.EpubType("000")
47
+ end
48
+
49
+ # if @book.book_collection
50
+ # xml.Series {
51
+ # xml.TitleOfSeries(@book.book_collection.title)
52
+ # }
53
+ # end
54
+
55
+ xml.Title {
56
+ xml.TitleType("01")
57
+ xml.TitleText(product.title)
58
+ if product.subtitle
59
+ xml.Subtitle(product.subtitle)
60
+ end
61
+ }
62
+
63
+ i=1
64
+ product.contributors.each do |a|
65
+ xml.Contributor {
66
+ xml.SequenceNumber(i)
67
+ xml.ContributorRole(a.role.code)
68
+ xml.PersonName(a.name)
69
+ if a.biography
70
+ xml.BiographicalNote(a.biography)
71
+ end
72
+ }
73
+ i=i+1
74
+ end
75
+
76
+ # xml.EditionNumber(@book.edition)
77
+
78
+ if product.language_of_text
79
+ xml.Language {
80
+ xml.LanguageRole("01")
81
+ xml.LanguageCode(product.language_of_text)
82
+ }
83
+ end
84
+
85
+ if product.pages
86
+ xml.NumberOfPages(product.pages)
87
+ end
88
+
89
+ product.bisac_categories.each do |ct|
90
+ xml.BASICMainSubject(ct.code)
91
+ end
92
+
93
+ xml.OtherText {
94
+ xml.TextTypeCode("01")
95
+ xml.Text(product.description)
96
+ }
97
+
98
+ if product.imprint_name
99
+ xml.Imprint {
100
+ xml.ImprintName(product.imprint_name)
101
+ }
102
+ end
103
+
104
+ xml.Publisher {
105
+ xml.PublishingRole("01")
106
+ xml.PublisherName(product.publisher_name)
107
+ }
108
+
109
+
110
+ if product.available?
111
+ xml.PublishingStatus("04")
112
+ else
113
+ xml.PublishingStatus("08")
114
+ end
115
+
116
+ xml.PublicationDate(product.publication_date.strftime("%Y%m%d"))
117
+
118
+ xml.SalesRights {
119
+ xml.SalesRightsType("01")
120
+ xml.RightsCountry(product.countries_rights.join(" "))
121
+ }
122
+
123
+ if product.print_product
124
+ xml.RelatedProduct {
125
+ xml.RelationCode("13")
126
+
127
+ xml.ProductIdentifier {
128
+ xml.ProductIDType("03")
129
+ xml.IDValue(product.print_product.ean)
130
+ }
131
+ }
132
+
133
+ end
134
+
135
+ product.supplies.each do |supply|
136
+ xml.SupplyDetail {
137
+ if product.distributor_name
138
+ xml.SupplierName(product.distributor_name)
139
+ else
140
+ xml.SupplierName("Unknown")
141
+ end
142
+
143
+
144
+ if supply[:available]
145
+ xml.ProductAvailability("20")
146
+ else
147
+ xml.ProductAvailability("40")
148
+ end
149
+
150
+ if supply[:availability_date]
151
+ xml.OnSaleDate(supply[:availability_date].strftime("%Y%m%d"))
152
+ else
153
+ xml.OnSaleDate(product.publication_date.strftime("%Y%m%d"))
154
+ end
155
+
156
+ supply[:prices].each do |price|
157
+ xml.Price {
158
+ if supply[:including_tax]
159
+ xml.PriceTypeCode("04")
160
+ else
161
+ xml.PriceTypeCode("03")
162
+ end
163
+ xml.PriceAmount(price[:amount]/100.0)
164
+ xml.CurrencyCode(supply[:currency])
165
+ supply[:territory].each do |t|
166
+ xml.CountryCode(t)
167
+ end
168
+
169
+ if price[:from_date] then
170
+ xml.PriceEffectiveFrom(price[:from_date].strftime("%Y%m%d"))
171
+ end
172
+ if price[:until_date]
173
+ xml.PriceEffectiveUntil(price[:until_date].strftime("%Y%m%d"))
174
+ end
175
+
176
+ }
177
+ end
178
+
179
+ }
180
+ end
181
+
182
+ }
183
+ end
184
+ }
185
+
186
+ end
187
+
188
+ puts builder.to_xml
189
+ else
190
+ puts "ONIX 3.0 to ONIX 2.1 converter"
191
+ puts "Usage: onix3_to_onix2.rb onix.xml"
192
+ end
@@ -0,0 +1,401 @@
1
+ #!/usr/bin/env ruby
2
+ require 'im_onix'
3
+ require 'nokogiri'
4
+
5
+ filename=ARGV[0]
6
+
7
+ if filename
8
+ msg=ONIX::ONIXMessage.new
9
+ msg.parse(filename)
10
+
11
+ builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
12
+ xml.ONIXMessage(:release=>"3.0", :xmlns=>"http://ns.editeur.org/onix/3.0/reference") {
13
+ xml.Header {
14
+ if msg.sender
15
+ xml.Sender {
16
+ if msg.sender.gln
17
+ xml.SenderIdentifier {
18
+ xml.SenderIDType("06")
19
+ xml.IDValue(msg.sender.gln)
20
+ }
21
+ end
22
+ xml.SenderName(msg.sender.name)
23
+ }
24
+ end
25
+ if msg.sent_date_time
26
+ xml.SentDateTime(msg.sent_date_time.strftime("%Y%m%dT%H%M"))
27
+ end
28
+ }
29
+ msg.products.each do |product|
30
+ xml.Product {
31
+ xml.RecordReference(product.ean)
32
+ if product.delete?
33
+ xml.NotificationType("05")
34
+ else
35
+ xml.NotificationType("03")
36
+ end
37
+ xml.ProductIdentifier {
38
+ xml.ProductIDType("03")
39
+ xml.IDValue(product.ean)
40
+ }
41
+ product.proprietary_ids.each do |id|
42
+ xml.ProductIdentifier {
43
+ xml.ProductIDType("01")
44
+ if id.name
45
+ xml.IDTypeName(id.name)
46
+ end
47
+ xml.IDValue(id.value)
48
+ }
49
+ end
50
+ xml.DescriptiveDetail {
51
+ if product.bundle?
52
+ xml.ProductComposition("10")
53
+ else
54
+ xml.ProductComposition("00")
55
+ end
56
+
57
+ if product.digital?
58
+ xml.ProductForm("EA")
59
+ else
60
+ xml.ProductForm("BA")
61
+ end
62
+
63
+ if product.bundle?
64
+ product.parts.each do |part|
65
+ xml.ProductPart {
66
+ xml.ProductIdentifier {
67
+ xml.ProductIDType("03")
68
+ xml.IDValue(part.ean)
69
+ }
70
+
71
+ if part.file_format
72
+ xml.ProductForm("EA")
73
+ case part.file_format
74
+ when "Epub"
75
+ xml.ProductFormDetail("E101")
76
+ when "Pdf"
77
+ xml.ProductFormDetail("E107")
78
+ when "Mobipocket"
79
+ xml.ProductFormDetail("E127")
80
+ else
81
+ xml.ProductFormDetail("E100")
82
+ xml.ProductFormDescription(part.file_description)
83
+
84
+ end
85
+
86
+ end
87
+ xml.NumberOfCopies("1")
88
+
89
+ }
90
+ end
91
+ else
92
+ if product.digital?
93
+ case product.file_format
94
+ when "Epub"
95
+ xml.ProductFormDetail("E101")
96
+ when "Pdf"
97
+ xml.ProductFormDetail("E107")
98
+ when "Mobipocket"
99
+ xml.ProductFormDetail("E127")
100
+ else
101
+ xml.ProductFormDetail("E100")
102
+ xml.ProductFormDescription(product.file_description)
103
+ end
104
+
105
+
106
+ case product.protection_type
107
+ when "None"
108
+ xml.EpubTechnicalProtection("00")
109
+ when "Drm"
110
+ xml.EpubTechnicalProtection("01")
111
+ when "DigitalWatermarking"
112
+ xml.EpubTechnicalProtection("02")
113
+ when "AdobeDrm"
114
+ xml.EpubTechnicalProtection("03")
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+
121
+ if product.publisher_collection_title
122
+ xml.Collection {
123
+ xml.CollectionType("10")
124
+ xml.TitleDetail {
125
+ xml.TitleType("01")
126
+ xml.TitleElement {
127
+ xml.TitleElementLevel("02")
128
+ xml.TitleText(product.publisher_collection_title)
129
+ }
130
+ }
131
+ }
132
+ end
133
+
134
+ xml.TitleDetail {
135
+ xml.TitleType("01")
136
+ xml.TitleElement {
137
+ xml.TitleElementLevel("01")
138
+ xml.TitleText(product.title)
139
+ if product.subtitle
140
+ xml.TitleText(product.subtitle)
141
+ end
142
+ }
143
+ }
144
+
145
+ product.contributors.each do |c|
146
+ xml.Contributor {
147
+ xml.SequenceNumber(c.sequence_number)
148
+ xml.ContributorRole(c.role.code)
149
+ xml.PersonName(c.name)
150
+ }
151
+ end
152
+
153
+ if product.edition_number
154
+ xml.EditionNumber(product.edition_number)
155
+ end
156
+
157
+ if product.language_of_text
158
+ xml.Language {
159
+ xml.LanguageRole("01")
160
+ xml.LanguageCode(product.language_of_text.code)
161
+ }
162
+ end
163
+
164
+ product.bisac_categories_codes.each do |s|
165
+ xml.Subject {
166
+ xml.SubjectSchemeIdentifier("10")
167
+ xml.SubjectCode(s)
168
+ }
169
+ end
170
+ product.clil_categories_codes.each do |s|
171
+ xml.Subject {
172
+ xml.SubjectSchemeIdentifier("29")
173
+ xml.SubjectCode(s)
174
+ }
175
+ end
176
+
177
+ if product.keywords.length > 0
178
+ xml.Subject {
179
+ xml.SubjectSchemeIdentifier("20")
180
+ xml.SubjectHeadingText(product.keywords.join(", "))
181
+ }
182
+ end
183
+
184
+ }
185
+ xml.CollateralDetail {
186
+ xml.TextContent {
187
+ xml.TextType("03")
188
+ xml.ContentAudience("00")
189
+ xml.Text(product.description)
190
+ }
191
+
192
+ # front cover
193
+ if product.frontcover_url
194
+ xml.SupportingResource {
195
+ xml.ResourceContentType("01")
196
+ xml.ContentAudience("00")
197
+ xml.ResourceMode("03")
198
+ xml.ResourceVersion {
199
+ xml.ResourceForm("02")
200
+ xml.ResourceLink(product.frontcover_url)
201
+ }
202
+ }
203
+ end
204
+
205
+ # sample
206
+ if product.epub_sample_url
207
+ xml.SupportingResource {
208
+ xml.ResourceContentType("15")
209
+ xml.ContentAudience("00")
210
+ xml.ResourceMode("04")
211
+ xml.ResourceVersion {
212
+ xml.ResourceForm("02")
213
+ xml.ResourceVersionFeature {
214
+ xml.ResourceVersionFeatureType("01")
215
+ xml.FeatureValue("E101")
216
+ }
217
+ xml.ResourceLink(product.epub_sample_url)
218
+ }
219
+ }
220
+ end
221
+
222
+ }
223
+ xml.PublishingDetail {
224
+ if product.imprint
225
+ xml.Imprint {
226
+ if product.imprint_gln
227
+ xml.ImprintIdentifier {
228
+ xml.ImprintIDType("06")
229
+ xml.IDValue(product.imprint_gln)
230
+ }
231
+ end
232
+ xml.ImprintName(product.imprint_name)
233
+ }
234
+ end
235
+ if product.publisher_name
236
+ xml.Publisher {
237
+ xml.PublishingRole("01")
238
+ if product.publisher_gln
239
+ xml.PublisherIdentifier {
240
+ xml.PublisherIDType("06")
241
+ xml.IDValue(product.publisher_gln)
242
+ }
243
+ end
244
+ xml.PublisherName(product.publisher_name)
245
+ }
246
+ end
247
+
248
+ if product.publication_date
249
+ xml.PublishingDate {
250
+ xml.PublishingDateRole("01")
251
+ xml.DateFormat("00")
252
+ xml.Date(product.publication_date.strftime("%Y%m%d"))
253
+ }
254
+ end
255
+ }
256
+
257
+ xml.RelatedMaterial {
258
+ if product.print_product
259
+ xml.RelatedProduct {
260
+ xml.ProductRelationCode("13")
261
+ xml.ProductIdentifier {
262
+ xml.ProductIDType("03")
263
+ xml.IDValue(product.print_product.ean)
264
+ }
265
+ }
266
+ end
267
+
268
+ unless product.sold_separately?
269
+ if product.part_of_product
270
+ xml.RelatedProduct {
271
+ xml.ProductRelationCode("02")
272
+ xml.ProductIdentifier {
273
+ xml.ProductIDType("03")
274
+ xml.IDValue(product.part_of_product.ean)
275
+ }
276
+ }
277
+ end
278
+ end
279
+
280
+ }
281
+
282
+ if product.sold_separately?
283
+ product.supplies.each do |supply|
284
+ xml.ProductSupply {
285
+ xml.Market {
286
+ xml.Territory {
287
+ if ONIX::Territory.worldwide?(supply[:territory])
288
+ xml.RegionsIncluded("WORLD")
289
+ else
290
+ xml.CountriesIncluded(supply[:territory].join(" "))
291
+ end
292
+ }
293
+ }
294
+ xml.MarketPublishingDetail {
295
+ if supply[:available]
296
+ xml.MarketPublishingStatus("04")
297
+ else
298
+ xml.MarketPublishingStatus("12")
299
+ end
300
+ if supply[:availability_date]
301
+ xml.MarketDate {
302
+ xml.MarketDateRole("01")
303
+ xml.DateFormat("00")
304
+ xml.Date(supply[:availability_date].strftime("%Y%m%d"))
305
+ }
306
+ end
307
+ }
308
+
309
+ xml.SupplyDetail {
310
+ xml.Supplier {
311
+ xml.SupplierRole("03")
312
+ if product.distributor
313
+
314
+ if product.distributor_gln
315
+
316
+ xml.SupplierIdentifier {
317
+ xml.SupplierIDType("06")
318
+ xml.IDValue(product.distributor_gln)
319
+ }
320
+ end
321
+ xml.SupplierName(product.distributor_name)
322
+ else
323
+ xml.SupplierName("Unknown")
324
+ end
325
+ }
326
+
327
+
328
+ if supply[:available]
329
+ xml.ProductAvailability("20")
330
+ else
331
+ xml.ProductAvailability("40")
332
+ end
333
+
334
+ supply[:prices].each do |price|
335
+ xml.Price {
336
+ if supply[:including_tax]
337
+ xml.PriceType("04")
338
+ else
339
+ xml.PriceType("03")
340
+
341
+ end
342
+ xml.PriceAmount(price[:amount].to_f/100.0)
343
+ xml.CurrencyCode(supply[:currency])
344
+
345
+ if price[:from_date]
346
+ xml.PriceDate {
347
+ xml.PriceDateRole("14")
348
+ xml.Date(price[:from_date].strftime("%Y%m%d"))
349
+ }
350
+ end
351
+ if price[:until_date]
352
+ xml.PriceDate {
353
+ xml.PriceDateRole("15")
354
+ xml.Date(price[:until_date].strftime("%Y%m%d"))
355
+ }
356
+ end
357
+ }
358
+ end
359
+ }
360
+
361
+
362
+ }
363
+
364
+ end
365
+ else
366
+ xml.ProductSupply {
367
+ xml.SupplyDetail {
368
+ xml.Supplier {
369
+ xml.SupplierRole("03")
370
+ if product.distributor
371
+ if product.distributor_gln
372
+ xml.SupplierIdentifier {
373
+ xml.SupplierIDType("06")
374
+ xml.IDValue(product.distributor_gln)
375
+ }
376
+ end
377
+ xml.SupplierName(product.distributor_name)
378
+ else
379
+ xml.SupplierName("Unknown")
380
+ end
381
+
382
+ }
383
+ xml.ProductAvailability("45")
384
+ xml.UnpricedItemType("03")
385
+ }
386
+
387
+ }
388
+
389
+ end
390
+ }
391
+ end
392
+ }
393
+ end
394
+
395
+ puts builder.to_xml
396
+
397
+ else
398
+ puts "Onix 3.0 to Onix 3.0 converter"
399
+ puts "Generate a flattened ONIX 3.0, be aware that conversion could be destructive"
400
+ puts "Usage: onix3_to_onix3.rb onix.xml"
401
+ end
data/bin/onix_bench.rb ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ require 'im_onix'
3
+
4
+ filename=ARGV[0]
5
+
6
+ if filename
7
+ bench=Benchmark.measure do
8
+ msg=ONIX::ONIXMessage.new
9
+ msg.parse(filename)
10
+ end
11
+ puts bench
12
+ else
13
+ puts "ImOnix parse benchmark"
14
+ puts "Usage: onix_bench.rb file.xml"
15
+ end